@workflow/world-testing 5.0.0-beta.8 → 5.0.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18934,7 +18934,7 @@ var version4;
18934
18934
  var init_version3 = __esm({
18935
18935
  "../core/dist/version.js"() {
18936
18936
  "use strict";
18937
- version4 = "5.0.0-beta.8";
18937
+ version4 = "5.0.0-beta.9";
18938
18938
  }
18939
18939
  });
18940
18940
 
@@ -19786,12 +19786,15 @@ var init_devalue2 = __esm({
19786
19786
 
19787
19787
  // ../core/dist/flushable-stream.js
19788
19788
  function createFlushableState2() {
19789
- return {
19789
+ const state = {
19790
19790
  ...withResolvers2(),
19791
19791
  pendingOps: 0,
19792
19792
  doneResolved: false,
19793
19793
  streamEnded: false
19794
19794
  };
19795
+ state.promise.catch(() => {
19796
+ });
19797
+ return state;
19795
19798
  }
19796
19799
  function isWritableUnlockedNotClosed2(writable) {
19797
19800
  if (writable.locked)
@@ -22162,7 +22165,7 @@ function createCreateAbortController(ctx) {
22162
22165
  this.signal._setAborted(reason);
22163
22166
  });
22164
22167
  ctx.invocationsQueue.delete(correlationId);
22165
- return EventConsumerResult2.Finished;
22168
+ return EventConsumerResult2.Consumed;
22166
22169
  }
22167
22170
  if (event.eventType === "hook_disposed") {
22168
22171
  ctx.invocationsQueue.delete(correlationId);
@@ -50430,7 +50433,7 @@ var require_auth_config = __commonJS({
50430
50433
  writeAuthConfig: /* @__PURE__ */ __name(() => writeAuthConfig, "writeAuthConfig")
50431
50434
  });
50432
50435
  module.exports = __toCommonJS(auth_config_exports);
50433
- var fs5 = __toESM3(__require("fs"));
50436
+ var fs6 = __toESM3(__require("fs"));
50434
50437
  var path11 = __toESM3(__require("path"));
50435
50438
  var import_token_util = require_token_util();
50436
50439
  function getAuthConfigPath() {
@@ -50446,10 +50449,10 @@ var require_auth_config = __commonJS({
50446
50449
  function readAuthConfig() {
50447
50450
  try {
50448
50451
  const authPath = getAuthConfigPath();
50449
- if (!fs5.existsSync(authPath)) {
50452
+ if (!fs6.existsSync(authPath)) {
50450
50453
  return null;
50451
50454
  }
50452
- const content = fs5.readFileSync(authPath, "utf8");
50455
+ const content = fs6.readFileSync(authPath, "utf8");
50453
50456
  if (!content) {
50454
50457
  return null;
50455
50458
  }
@@ -50462,10 +50465,10 @@ var require_auth_config = __commonJS({
50462
50465
  function writeAuthConfig(config4) {
50463
50466
  const authPath = getAuthConfigPath();
50464
50467
  const authDir = path11.dirname(authPath);
50465
- if (!fs5.existsSync(authDir)) {
50466
- fs5.mkdirSync(authDir, { mode: 504, recursive: true });
50468
+ if (!fs6.existsSync(authDir)) {
50469
+ fs6.mkdirSync(authDir, { mode: 504, recursive: true });
50467
50470
  }
50468
- fs5.writeFileSync(authPath, JSON.stringify(config4, null, 2), { mode: 384 });
50471
+ fs6.writeFileSync(authPath, JSON.stringify(config4, null, 2), { mode: 384 });
50469
50472
  }
50470
50473
  __name(writeAuthConfig, "writeAuthConfig");
50471
50474
  function isValidAccessToken(authConfig, expirationBufferMs = 0) {
@@ -50668,7 +50671,7 @@ var require_token_util = __commonJS({
50668
50671
  });
50669
50672
  module.exports = __toCommonJS(token_util_exports);
50670
50673
  var path11 = __toESM3(__require("path"));
50671
- var fs5 = __toESM3(__require("fs"));
50674
+ var fs6 = __toESM3(__require("fs"));
50672
50675
  var import_token_error = require_token_error();
50673
50676
  var import_token_io = require_token_io();
50674
50677
  var import_auth_config = require_auth_config();
@@ -50761,12 +50764,12 @@ var require_token_util = __commonJS({
50761
50764
  );
50762
50765
  }
50763
50766
  const prjPath = path11.join(dir, ".vercel", "project.json");
50764
- if (!fs5.existsSync(prjPath)) {
50767
+ if (!fs6.existsSync(prjPath)) {
50765
50768
  throw new import_token_error.VercelOidcTokenError(
50766
50769
  "project.json not found, have you linked your project with `vc link?`"
50767
50770
  );
50768
50771
  }
50769
- const prj = JSON.parse(fs5.readFileSync(prjPath, "utf8"));
50772
+ const prj = JSON.parse(fs6.readFileSync(prjPath, "utf8"));
50770
50773
  if (typeof prj.projectId !== "string" && typeof prj.orgId !== "string") {
50771
50774
  throw new TypeError(
50772
50775
  "Expected a string-valued projectId property. Try running `vc link` to re-link your project."
@@ -50784,9 +50787,9 @@ var require_token_util = __commonJS({
50784
50787
  }
50785
50788
  const tokenPath = path11.join(dir, "com.vercel.token", `${projectId}.json`);
50786
50789
  const tokenJson = JSON.stringify(token);
50787
- fs5.mkdirSync(path11.dirname(tokenPath), { mode: 504, recursive: true });
50788
- fs5.writeFileSync(tokenPath, tokenJson);
50789
- fs5.chmodSync(tokenPath, 432);
50790
+ fs6.mkdirSync(path11.dirname(tokenPath), { mode: 504, recursive: true });
50791
+ fs6.writeFileSync(tokenPath, tokenJson);
50792
+ fs6.chmodSync(tokenPath, 432);
50790
50793
  return;
50791
50794
  }
50792
50795
  __name(saveToken, "saveToken");
@@ -50798,10 +50801,10 @@ var require_token_util = __commonJS({
50798
50801
  );
50799
50802
  }
50800
50803
  const tokenPath = path11.join(dir, "com.vercel.token", `${projectId}.json`);
50801
- if (!fs5.existsSync(tokenPath)) {
50804
+ if (!fs6.existsSync(tokenPath)) {
50802
50805
  return null;
50803
50806
  }
50804
- const token = JSON.parse(fs5.readFileSync(tokenPath, "utf8"));
50807
+ const token = JSON.parse(fs6.readFileSync(tokenPath, "utf8"));
50805
50808
  assertVercelOidcTokenResponse(token);
50806
50809
  return token;
50807
50810
  }
@@ -51101,27 +51104,27 @@ var require_process = __commonJS({
51101
51104
  var require_filesystem = __commonJS({
51102
51105
  "../../node_modules/.pnpm/detect-libc@2.1.2/node_modules/detect-libc/lib/filesystem.js"(exports, module) {
51103
51106
  "use strict";
51104
- var fs5 = __require("fs");
51107
+ var fs6 = __require("fs");
51105
51108
  var LDD_PATH = "/usr/bin/ldd";
51106
51109
  var SELF_PATH = "/proc/self/exe";
51107
51110
  var MAX_LENGTH = 2048;
51108
51111
  var readFileSync2 = /* @__PURE__ */ __name((path11) => {
51109
- const fd = fs5.openSync(path11, "r");
51112
+ const fd = fs6.openSync(path11, "r");
51110
51113
  const buffer = Buffer.alloc(MAX_LENGTH);
51111
- const bytesRead = fs5.readSync(fd, buffer, 0, MAX_LENGTH, 0);
51112
- fs5.close(fd, () => {
51114
+ const bytesRead = fs6.readSync(fd, buffer, 0, MAX_LENGTH, 0);
51115
+ fs6.close(fd, () => {
51113
51116
  });
51114
51117
  return buffer.subarray(0, bytesRead);
51115
51118
  }, "readFileSync");
51116
51119
  var readFile3 = /* @__PURE__ */ __name((path11) => new Promise((resolve3, reject) => {
51117
- fs5.open(path11, "r", (err, fd) => {
51120
+ fs6.open(path11, "r", (err, fd) => {
51118
51121
  if (err) {
51119
51122
  reject(err);
51120
51123
  } else {
51121
51124
  const buffer = Buffer.alloc(MAX_LENGTH);
51122
- fs5.read(fd, buffer, 0, MAX_LENGTH, 0, (_, bytesRead) => {
51125
+ fs6.read(fd, buffer, 0, MAX_LENGTH, 0, (_, bytesRead) => {
51123
51126
  resolve3(buffer.subarray(0, bytesRead));
51124
- fs5.close(fd, () => {
51127
+ fs6.close(fd, () => {
51125
51128
  });
51126
51129
  });
51127
51130
  }
@@ -51431,7 +51434,7 @@ var require_detect_libc = __commonJS({
51431
51434
  // ../../node_modules/.pnpm/node-gyp-build-optional-packages@5.1.1/node_modules/node-gyp-build-optional-packages/index.js
51432
51435
  var require_node_gyp_build_optional_packages = __commonJS({
51433
51436
  "../../node_modules/.pnpm/node-gyp-build-optional-packages@5.1.1/node_modules/node-gyp-build-optional-packages/index.js"(exports, module) {
51434
- var fs5 = __require("fs");
51437
+ var fs6 = __require("fs");
51435
51438
  var path11 = __require("path");
51436
51439
  var url3 = __require("url");
51437
51440
  var vars = process.config && process.config.variables || {};
@@ -51514,7 +51517,7 @@ var require_node_gyp_build_optional_packages = __commonJS({
51514
51517
  };
51515
51518
  function readdirSync(dir) {
51516
51519
  try {
51517
- return fs5.readdirSync(dir);
51520
+ return fs6.readdirSync(dir);
51518
51521
  } catch (err) {
51519
51522
  return [];
51520
51523
  }
@@ -70818,12 +70821,15 @@ var init_devalue = __esm2({
70818
70821
  }
70819
70822
  });
70820
70823
  function createFlushableState() {
70821
- return {
70824
+ const state = {
70822
70825
  ...withResolvers(),
70823
70826
  pendingOps: 0,
70824
70827
  doneResolved: false,
70825
70828
  streamEnded: false
70826
70829
  };
70830
+ state.promise.catch(() => {
70831
+ });
70832
+ return state;
70827
70833
  }
70828
70834
  __name(createFlushableState, "createFlushableState");
70829
70835
  function isWritableUnlockedNotClosed(writable) {
@@ -77750,7 +77756,7 @@ var version2;
77750
77756
  var init_version = __esm2({
77751
77757
  "../core/dist/version.js"() {
77752
77758
  "use strict";
77753
- version2 = "5.0.0-beta.8";
77759
+ version2 = "5.0.0-beta.9";
77754
77760
  }
77755
77761
  });
77756
77762
  function getWorkflowQueueName(workflowName) {
@@ -79294,8 +79300,8 @@ async function start(workflow, argsOrOptions, options) {
79294
79300
  }
79295
79301
  }
79296
79302
  (0, import_functions3.waitUntil)(Promise.all(ops).catch((err) => {
79297
- const isAbortError = err?.name === "AbortError" || err?.name === "ResponseAborted";
79298
- if (!isAbortError) throw err;
79303
+ const isAbortError2 = err?.name === "AbortError" || err?.name === "ResponseAborted";
79304
+ if (!isAbortError2) throw err;
79299
79305
  }));
79300
79306
  span?.setAttributes({
79301
79307
  ...WorkflowRunId(runId),
@@ -79318,7 +79324,7 @@ __name2(start, "start");
79318
79324
  value: "start",
79319
79325
  configurable: true
79320
79326
  });
79321
- })(start, "step//@workflow/core/runtime/start@5.0.0-beta.8//start");
79327
+ })(start, "step//@workflow/core/runtime/start@5.0.0-beta.9//start");
79322
79328
  function isRetryableStartError(err) {
79323
79329
  if (ThrottleError.is(err)) return true;
79324
79330
  if (WorkflowWorldError.is(err) && err.status && err.status >= 500) return true;
@@ -79644,7 +79650,7 @@ var Run = class _Run {
79644
79650
  value: "wakeUp",
79645
79651
  configurable: true
79646
79652
  });
79647
- })(Run.prototype["wakeUp"], "step//@workflow/core/runtime/run@5.0.0-beta.8//Run#wakeUp");
79653
+ })(Run.prototype["wakeUp"], "step//@workflow/core/runtime/run@5.0.0-beta.9//Run#wakeUp");
79648
79654
  (function(__wf_fn, __wf_id) {
79649
79655
  var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
79650
79656
  __wf_reg.set(__wf_id, __wf_fn);
@@ -79653,7 +79659,7 @@ var Run = class _Run {
79653
79659
  value: "cancel",
79654
79660
  configurable: true
79655
79661
  });
79656
- })(Run.prototype["cancel"], "step//@workflow/core/runtime/run@5.0.0-beta.8//Run#cancel");
79662
+ })(Run.prototype["cancel"], "step//@workflow/core/runtime/run@5.0.0-beta.9//Run#cancel");
79657
79663
  (function(__wf_fn, __wf_id) {
79658
79664
  var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
79659
79665
  __wf_reg.set(__wf_id, __wf_fn);
@@ -79662,7 +79668,7 @@ var Run = class _Run {
79662
79668
  value: "getReadable",
79663
79669
  configurable: true
79664
79670
  });
79665
- })(Run.prototype["getReadable"], "step//@workflow/core/runtime/run@5.0.0-beta.8//Run#getReadable");
79671
+ })(Run.prototype["getReadable"], "step//@workflow/core/runtime/run@5.0.0-beta.9//Run#getReadable");
79666
79672
  (function(__wf_fn, __wf_id) {
79667
79673
  var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
79668
79674
  __wf_reg.set(__wf_id, __wf_fn);
@@ -79671,7 +79677,7 @@ var Run = class _Run {
79671
79677
  value: "exists",
79672
79678
  configurable: true
79673
79679
  });
79674
- })(Object.getOwnPropertyDescriptor(Run.prototype, "exists").get, "step//@workflow/core/runtime/run@5.0.0-beta.8//Run#exists");
79680
+ })(Object.getOwnPropertyDescriptor(Run.prototype, "exists").get, "step//@workflow/core/runtime/run@5.0.0-beta.9//Run#exists");
79675
79681
  (function(__wf_fn, __wf_id) {
79676
79682
  var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
79677
79683
  __wf_reg.set(__wf_id, __wf_fn);
@@ -79680,7 +79686,7 @@ var Run = class _Run {
79680
79686
  value: "status",
79681
79687
  configurable: true
79682
79688
  });
79683
- })(Object.getOwnPropertyDescriptor(Run.prototype, "status").get, "step//@workflow/core/runtime/run@5.0.0-beta.8//Run#status");
79689
+ })(Object.getOwnPropertyDescriptor(Run.prototype, "status").get, "step//@workflow/core/runtime/run@5.0.0-beta.9//Run#status");
79684
79690
  (function(__wf_fn, __wf_id) {
79685
79691
  var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
79686
79692
  __wf_reg.set(__wf_id, __wf_fn);
@@ -79689,7 +79695,7 @@ var Run = class _Run {
79689
79695
  value: "returnValue",
79690
79696
  configurable: true
79691
79697
  });
79692
- })(Object.getOwnPropertyDescriptor(Run.prototype, "returnValue").get, "step//@workflow/core/runtime/run@5.0.0-beta.8//Run#returnValue");
79698
+ })(Object.getOwnPropertyDescriptor(Run.prototype, "returnValue").get, "step//@workflow/core/runtime/run@5.0.0-beta.9//Run#returnValue");
79693
79699
  (function(__wf_fn, __wf_id) {
79694
79700
  var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
79695
79701
  __wf_reg.set(__wf_id, __wf_fn);
@@ -79698,7 +79704,7 @@ var Run = class _Run {
79698
79704
  value: "workflowName",
79699
79705
  configurable: true
79700
79706
  });
79701
- })(Object.getOwnPropertyDescriptor(Run.prototype, "workflowName").get, "step//@workflow/core/runtime/run@5.0.0-beta.8//Run#workflowName");
79707
+ })(Object.getOwnPropertyDescriptor(Run.prototype, "workflowName").get, "step//@workflow/core/runtime/run@5.0.0-beta.9//Run#workflowName");
79702
79708
  (function(__wf_fn, __wf_id) {
79703
79709
  var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
79704
79710
  __wf_reg.set(__wf_id, __wf_fn);
@@ -79707,7 +79713,7 @@ var Run = class _Run {
79707
79713
  value: "createdAt",
79708
79714
  configurable: true
79709
79715
  });
79710
- })(Object.getOwnPropertyDescriptor(Run.prototype, "createdAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.8//Run#createdAt");
79716
+ })(Object.getOwnPropertyDescriptor(Run.prototype, "createdAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.9//Run#createdAt");
79711
79717
  (function(__wf_fn, __wf_id) {
79712
79718
  var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
79713
79719
  __wf_reg.set(__wf_id, __wf_fn);
@@ -79716,7 +79722,7 @@ var Run = class _Run {
79716
79722
  value: "startedAt",
79717
79723
  configurable: true
79718
79724
  });
79719
- })(Object.getOwnPropertyDescriptor(Run.prototype, "startedAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.8//Run#startedAt");
79725
+ })(Object.getOwnPropertyDescriptor(Run.prototype, "startedAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.9//Run#startedAt");
79720
79726
  (function(__wf_fn, __wf_id) {
79721
79727
  var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
79722
79728
  __wf_reg.set(__wf_id, __wf_fn);
@@ -79725,7 +79731,7 @@ var Run = class _Run {
79725
79731
  value: "completedAt",
79726
79732
  configurable: true
79727
79733
  });
79728
- })(Object.getOwnPropertyDescriptor(Run.prototype, "completedAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.8//Run#completedAt");
79734
+ })(Object.getOwnPropertyDescriptor(Run.prototype, "completedAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.9//Run#completedAt");
79729
79735
  (function(__wf_cls, __wf_id) {
79730
79736
  var __wf_sym = /* @__PURE__ */ Symbol.for("workflow-class-registry"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
79731
79737
  __wf_reg.set(__wf_id, __wf_cls);
@@ -79735,7 +79741,7 @@ var Run = class _Run {
79735
79741
  enumerable: false,
79736
79742
  configurable: false
79737
79743
  });
79738
- })(Run, "class//@workflow/core/runtime/run@5.0.0-beta.8//Run");
79744
+ })(Run, "class//@workflow/core/runtime/run@5.0.0-beta.9//Run");
79739
79745
  async function fetch2(...args) {
79740
79746
  return globalThis.fetch(...args);
79741
79747
  }
@@ -79749,7 +79755,7 @@ __name2(fetch2, "fetch");
79749
79755
  value: "fetch",
79750
79756
  configurable: true
79751
79757
  });
79752
- })(fetch2, "step//workflow@5.0.0-beta.8//fetch");
79758
+ })(fetch2, "step//workflow@5.0.0-beta.9//fetch");
79753
79759
  async function add(num, num2) {
79754
79760
  return num + num2;
79755
79761
  }
@@ -79964,6 +79970,10 @@ ${lines.join("\n")}`);
79964
79970
  __name(defineHook, "defineHook");
79965
79971
  __name2(defineHook, "defineHook");
79966
79972
  init_dist2();
79973
+ init_dist2();
79974
+ init_dist4();
79975
+ init_get_world_lazy();
79976
+ init_context_storage();
79967
79977
  init_symbols();
79968
79978
  init_context_storage();
79969
79979
  function getStepMetadata() {
@@ -80545,7 +80555,7 @@ import { pathToFileURL } from "node:url";
80545
80555
 
80546
80556
  // ../world-local/dist/index.js
80547
80557
  init_dist7();
80548
- import { promises as fs3 } from "node:fs";
80558
+ import { promises as fs4 } from "node:fs";
80549
80559
  import { rm } from "node:fs/promises";
80550
80560
  import path8 from "node:path";
80551
80561
 
@@ -81000,6 +81010,17 @@ async function readBuffer(filePath) {
81000
81010
  return content;
81001
81011
  }
81002
81012
  __name(readBuffer, "readBuffer");
81013
+ async function readFirstByte(filePath) {
81014
+ const file3 = await fs.open(filePath, "r");
81015
+ try {
81016
+ const byte = Buffer.allocUnsafe(1);
81017
+ const { bytesRead } = await file3.read(byte, 0, 1, 0);
81018
+ return bytesRead === 0 ? void 0 : byte[0];
81019
+ } finally {
81020
+ await file3.close();
81021
+ }
81022
+ }
81023
+ __name(readFirstByte, "readFirstByte");
81003
81024
  async function deleteJSON(filePath) {
81004
81025
  try {
81005
81026
  await fs.unlink(filePath);
@@ -81589,8 +81610,8 @@ function createQueue(config4) {
81589
81610
  semaphore.release();
81590
81611
  }
81591
81612
  })().catch((err) => {
81592
- const isAbortError = err?.name === "AbortError" || err?.name === "ResponseAborted";
81593
- if (!isAbortError) {
81613
+ const isAbortError2 = err?.name === "AbortError" || err?.name === "ResponseAborted";
81614
+ if (!isAbortError2) {
81594
81615
  if (isDetachedArrayBufferQueueError(err)) {
81595
81616
  console.error(`[local world] Queue operation failed: detected "${DETACHED_ARRAYBUFFER_ERROR}". This usually means a Next.js proxy/middleware consumed Workflow's internal request before the executor could read it. Exclude \`/.well-known/workflow/*\` from your matcher. See ${PROXY_HANDLER_DOCS_URL}`, {
81596
81617
  queueName,
@@ -82693,48 +82714,62 @@ __name(createStorage, "createStorage");
82693
82714
  init_node2();
82694
82715
  init_zod2();
82695
82716
  import { EventEmitter } from "node:events";
82717
+ import fs3 from "node:fs/promises";
82696
82718
  import path7 from "node:path";
82697
82719
  var monotonicUlid2 = monotonicFactory2(() => Math.random());
82698
82720
  var RunStreamsSchema = external_exports2.object({
82699
82721
  streams: external_exports2.array(external_exports2.string())
82700
82722
  });
82723
+ var EOF_MARKER = 1;
82724
+ function isEofByte(byte) {
82725
+ return byte === EOF_MARKER;
82726
+ }
82727
+ __name(isEofByte, "isEofByte");
82701
82728
  function serializeChunk(chunk) {
82702
- const eofByte = Buffer.from([chunk.eof ? 1 : 0]);
82729
+ const eofByte = Buffer.from([chunk.eof ? EOF_MARKER : 0]);
82703
82730
  return Buffer.concat([eofByte, chunk.chunk]);
82704
82731
  }
82705
82732
  __name(serializeChunk, "serializeChunk");
82706
82733
  function isEofChunk(serialized) {
82707
- return serialized[0] === 1;
82734
+ return isEofByte(serialized[0]);
82708
82735
  }
82709
82736
  __name(isEofChunk, "isEofChunk");
82710
82737
  function deserializeChunk(serialized) {
82711
- const eof = serialized[0] === 1;
82738
+ const eof = isEofChunk(serialized);
82712
82739
  const chunk = Buffer.from(serialized.subarray(1));
82713
82740
  return { eof, chunk };
82714
82741
  }
82715
82742
  __name(deserializeChunk, "deserializeChunk");
82743
+ async function listChunkEntries(chunksDir) {
82744
+ try {
82745
+ return await fs3.readdir(chunksDir);
82746
+ } catch (error95) {
82747
+ if (error95.code === "ENOENT")
82748
+ return [];
82749
+ throw error95;
82750
+ }
82751
+ }
82752
+ __name(listChunkEntries, "listChunkEntries");
82753
+ function addChunkFilesByExtension(extMap, entries, sourceExtension, fileExtension = sourceExtension, include = () => true) {
82754
+ for (const entry of entries) {
82755
+ if (!entry.endsWith(sourceExtension))
82756
+ continue;
82757
+ const file3 = entry.slice(0, -sourceExtension.length);
82758
+ if (include(file3))
82759
+ extMap.set(file3, fileExtension);
82760
+ }
82761
+ }
82762
+ __name(addChunkFilesByExtension, "addChunkFilesByExtension");
82716
82763
  async function listChunkFilesForStream(chunksDir, name, tag) {
82717
82764
  assertSafeEntityId("streamName", name);
82718
- const listPromises = [
82719
- listFilesByExtension(chunksDir, ".bin"),
82720
- listFilesByExtension(chunksDir, ".json")
82721
- ];
82722
- if (tag) {
82723
- listPromises.push(listFilesByExtension(chunksDir, `.${tag}.bin`));
82724
- }
82725
- const [binFiles, jsonFiles, ...taggedResults] = await Promise.all(listPromises);
82726
- const taggedBinFiles = taggedResults[0] ?? [];
82765
+ const entries = await listChunkEntries(chunksDir);
82727
82766
  const extMap = /* @__PURE__ */ new Map();
82728
- for (const f of jsonFiles)
82729
- extMap.set(f, ".json");
82730
- const tagSfx = tag ? `.${tag}` : "";
82731
- for (const f of binFiles) {
82732
- if (tag && f.endsWith(tagSfx))
82733
- continue;
82734
- extMap.set(f, ".bin");
82767
+ addChunkFilesByExtension(extMap, entries, ".json");
82768
+ addChunkFilesByExtension(extMap, entries, ".bin", ".bin", tag ? (file3) => !file3.endsWith(`.${tag}`) : void 0);
82769
+ if (tag) {
82770
+ const taggedExtension = `.${tag}.bin`;
82771
+ addChunkFilesByExtension(extMap, entries, taggedExtension);
82735
82772
  }
82736
- for (const f of taggedBinFiles)
82737
- extMap.set(f, `.${tag}.bin`);
82738
82773
  const files = [...extMap.keys()].filter((file3) => file3.startsWith(`${name}-`)).sort();
82739
82774
  return { files, extMap };
82740
82775
  }
@@ -82852,7 +82887,7 @@ function createStreamer(basedir, tag) {
82852
82887
  const ext2 = fileExtMap.get(file3) ?? ".bin";
82853
82888
  const filePath = path7.join(chunksDir, `${file3}${ext2}`);
82854
82889
  if (dataIndex < startIndex) {
82855
- if (isEofChunk(await readBuffer(filePath))) {
82890
+ if (isEofByte(await readFirstByte(filePath))) {
82856
82891
  streamDone = true;
82857
82892
  break;
82858
82893
  }
@@ -82860,7 +82895,7 @@ function createStreamer(basedir, tag) {
82860
82895
  continue;
82861
82896
  }
82862
82897
  if (resultChunks.length >= limit) {
82863
- if (isEofChunk(await readBuffer(filePath))) {
82898
+ if (isEofByte(await readFirstByte(filePath))) {
82864
82899
  streamDone = true;
82865
82900
  } else {
82866
82901
  dataIndex++;
@@ -82895,7 +82930,7 @@ function createStreamer(basedir, tag) {
82895
82930
  let dataCount = 0;
82896
82931
  for (const file3 of chunkFiles) {
82897
82932
  const ext2 = fileExtMap.get(file3) ?? ".bin";
82898
- if (isEofChunk(await readBuffer(path7.join(chunksDir, `${file3}${ext2}`)))) {
82933
+ if (isEofByte(await readFirstByte(path7.join(chunksDir, `${file3}${ext2}`)))) {
82899
82934
  streamDone = true;
82900
82935
  break;
82901
82936
  }
@@ -82956,8 +82991,7 @@ function createStreamer(basedir, tag) {
82956
82991
  if (typeof startIndex === "number" && startIndex < 0 && chunkFiles.length > 0) {
82957
82992
  const lastFile = chunkFiles[chunkFiles.length - 1];
82958
82993
  const lastExt = fileExtMap.get(lastFile) ?? ".bin";
82959
- const lastChunk = deserializeChunk(await readBuffer(path7.join(chunksDir, `${lastFile}${lastExt}`)));
82960
- if (lastChunk?.eof === true) {
82994
+ if (isEofByte(await readFirstByte(path7.join(chunksDir, `${lastFile}${lastExt}`)))) {
82961
82995
  dataChunkCount--;
82962
82996
  }
82963
82997
  }
@@ -83127,11 +83161,11 @@ function createLocalWorld(args) {
83127
83161
  const files = await listTaggedFiles(fullDir, tag);
83128
83162
  await Promise.all(files.map((f) => deleteJSON(path8.join(fullDir, f))));
83129
83163
  }));
83130
- await fs3.rm(path8.join(basedir, ".locks"), { recursive: true, force: true }).catch(() => {
83164
+ await fs4.rm(path8.join(basedir, ".locks"), { recursive: true, force: true }).catch(() => {
83131
83165
  });
83132
83166
  const chunksDir = path8.join(basedir, "streams", "chunks");
83133
83167
  const taggedBinFiles = await listTaggedFilesByExtension(chunksDir, tag, ".bin");
83134
- await Promise.all(taggedBinFiles.map((f) => fs3.unlink(path8.join(chunksDir, f)).catch(() => {
83168
+ await Promise.all(taggedBinFiles.map((f) => fs4.unlink(path8.join(chunksDir, f)).catch(() => {
83135
83169
  })));
83136
83170
  clearCreatedFilesCache();
83137
83171
  } else {
@@ -83854,7 +83888,7 @@ var StreamingMultipartParser = class {
83854
83888
  };
83855
83889
 
83856
83890
  // ../../node_modules/.pnpm/@vercel+queue@0.1.7/node_modules/@vercel/queue/dist/index.mjs
83857
- import * as fs4 from "fs";
83891
+ import * as fs5 from "fs";
83858
83892
  import * as net from "net";
83859
83893
  import * as path10 from "path";
83860
83894
 
@@ -86420,11 +86454,11 @@ function getDevRouteMappings() {
86420
86454
  }
86421
86455
  try {
86422
86456
  const vercelJsonPath = path10.join(process.cwd(), "vercel.json");
86423
- if (!fs4.existsSync(vercelJsonPath)) {
86457
+ if (!fs5.existsSync(vercelJsonPath)) {
86424
86458
  g[ROUTE_MAPPINGS_KEY] = null;
86425
86459
  return null;
86426
86460
  }
86427
- const vercelJson = JSON.parse(fs4.readFileSync(vercelJsonPath, "utf-8"));
86461
+ const vercelJson = JSON.parse(fs5.readFileSync(vercelJsonPath, "utf-8"));
86428
86462
  if (!vercelJson.functions) {
86429
86463
  g[ROUTE_MAPPINGS_KEY] = null;
86430
86464
  return null;
@@ -86549,7 +86583,7 @@ function extractCallerFilePath() {
86549
86583
  const absolute = path10.isAbsolute(fp) ? fp : path10.resolve(process.cwd(), fp);
86550
86584
  let realFp;
86551
86585
  try {
86552
- realFp = fs4.realpathSync(absolute);
86586
+ realFp = fs5.realpathSync(absolute);
86553
86587
  } catch {
86554
86588
  realFp = absolute;
86555
86589
  }
@@ -90202,7 +90236,7 @@ import os from "node:os";
90202
90236
  import { inspect } from "node:util";
90203
90237
 
90204
90238
  // ../world-vercel/dist/version.js
90205
- var version5 = "5.0.0-beta.7";
90239
+ var version5 = "5.0.0-beta.8";
90206
90240
 
90207
90241
  // ../world-vercel/dist/utils.js
90208
90242
  var HTTP_DEBUG_ENABLED = typeof process !== "undefined" && typeof process.env.DEBUG === "string" && (process.env.DEBUG.includes("workflow:") || process.env.DEBUG === "*");
@@ -91434,6 +91468,17 @@ function getStreamUrl(name, runId, httpConfig) {
91434
91468
  return new URL(`${httpConfig.baseUrl}/v2/runs/${encodeURIComponent(runId)}/stream/${encodeURIComponent(name)}`);
91435
91469
  }
91436
91470
  __name(getStreamUrl, "getStreamUrl");
91471
+ function createStreamRequestError(operation, url3, response, text) {
91472
+ const context2 = [`PUT ${url3.origin}${url3.pathname}`];
91473
+ for (const header of ["x-vercel-id", "x-vercel-error"]) {
91474
+ const value = response.headers.get(header);
91475
+ if (value) {
91476
+ context2.push(`${header}=${value}`);
91477
+ }
91478
+ }
91479
+ return new Error(`Stream ${operation} failed: HTTP ${response.status} (${context2.join("; ")}): ${text}`);
91480
+ }
91481
+ __name(createStreamRequestError, "createStreamRequestError");
91437
91482
  function encodeMultiChunks(chunks) {
91438
91483
  const encoder3 = new TextEncoder();
91439
91484
  const binaryChunks = [];
@@ -91474,14 +91519,15 @@ function createStreamer2(config4) {
91474
91519
  async write(runId, name, chunk) {
91475
91520
  const resolvedRunId = await runId;
91476
91521
  const httpConfig = await getHttpConfig(config4);
91477
- const response = await fetch(getStreamUrl(name, resolvedRunId, httpConfig), {
91522
+ const url3 = getStreamUrl(name, resolvedRunId, httpConfig);
91523
+ const response = await fetch(url3, {
91478
91524
  method: "PUT",
91479
91525
  body: chunk,
91480
91526
  headers: httpConfig.headers
91481
91527
  });
91482
91528
  const text = await response.text();
91483
91529
  if (!response.ok) {
91484
- throw new Error(`Stream write failed: HTTP ${response.status}: ${text}`);
91530
+ throw createStreamRequestError("write", url3, response, text);
91485
91531
  }
91486
91532
  },
91487
91533
  async writeMulti(runId, name, chunks) {
@@ -91493,14 +91539,15 @@ function createStreamer2(config4) {
91493
91539
  for (let i = 0; i < chunks.length; i += MAX_CHUNKS_PER_REQUEST) {
91494
91540
  const batch = chunks.slice(i, i + MAX_CHUNKS_PER_REQUEST);
91495
91541
  const body = encodeMultiChunks(batch);
91496
- const response = await fetch(getStreamUrl(name, resolvedRunId, httpConfig), {
91542
+ const url3 = getStreamUrl(name, resolvedRunId, httpConfig);
91543
+ const response = await fetch(url3, {
91497
91544
  method: "PUT",
91498
91545
  body,
91499
91546
  headers: httpConfig.headers
91500
91547
  });
91501
91548
  const text = await response.text();
91502
91549
  if (!response.ok) {
91503
- throw new Error(`Stream write failed: HTTP ${response.status}: ${text}`);
91550
+ throw createStreamRequestError("write", url3, response, text);
91504
91551
  }
91505
91552
  }
91506
91553
  },
@@ -91508,13 +91555,14 @@ function createStreamer2(config4) {
91508
91555
  const resolvedRunId = await runId;
91509
91556
  const httpConfig = await getHttpConfig(config4);
91510
91557
  httpConfig.headers.set("X-Stream-Done", "true");
91511
- const response = await fetch(getStreamUrl(name, resolvedRunId, httpConfig), {
91558
+ const url3 = getStreamUrl(name, resolvedRunId, httpConfig);
91559
+ const response = await fetch(url3, {
91512
91560
  method: "PUT",
91513
91561
  headers: httpConfig.headers
91514
91562
  });
91515
91563
  const text = await response.text();
91516
91564
  if (!response.ok) {
91517
- throw new Error(`Stream close failed: HTTP ${response.status}: ${text}`);
91565
+ throw createStreamRequestError("close", url3, response, text);
91518
91566
  }
91519
91567
  },
91520
91568
  async get(runId, name, startIndex) {
@@ -91834,6 +91882,7 @@ init_telemetry2();
91834
91882
  import { types as types5 } from "node:util";
91835
91883
 
91836
91884
  // ../core/dist/types.js
91885
+ init_dist6();
91837
91886
  import { types as types4 } from "node:util";
91838
91887
  function getErrorName(v) {
91839
91888
  if (types4.isNativeError(v)) {
@@ -91849,6 +91898,21 @@ function getErrorStack(v) {
91849
91898
  return "";
91850
91899
  }
91851
91900
  __name(getErrorStack, "getErrorStack");
91901
+ function isAbortError(value) {
91902
+ return typeof value === "object" && value !== null && "name" in value && value.name === "AbortError" && "message" in value && typeof value.message === "string" && (!("stack" in value) || value.stack === void 0 || typeof value.stack === "string");
91903
+ }
91904
+ __name(isAbortError, "isAbortError");
91905
+ function promoteAbortErrorToFatal(value) {
91906
+ if (!isAbortError(value) || FatalError2.is(value)) {
91907
+ return value;
91908
+ }
91909
+ const fatalError = new FatalError2(`Aborted: ${value.message}`);
91910
+ if (value.stack) {
91911
+ fatalError.stack = value.stack;
91912
+ }
91913
+ return fatalError;
91914
+ }
91915
+ __name(promoteAbortErrorToFatal, "promoteAbortErrorToFatal");
91852
91916
  function isThenable(value) {
91853
91917
  return typeof value === "object" && value !== null && "then" in value && typeof value.then === "function";
91854
91918
  }
@@ -92131,8 +92195,8 @@ async function executeStep(params) {
92131
92195
  let opsSettled = true;
92132
92196
  if (ops.length > 0) {
92133
92197
  const opsPromise = Promise.all(ops).catch((err) => {
92134
- const isAbortError = err?.name === "AbortError" || err?.name === "ResponseAborted";
92135
- if (!isAbortError)
92198
+ const isAbortError2 = err?.name === "AbortError" || err?.name === "ResponseAborted";
92199
+ if (!isAbortError2)
92136
92200
  throw err;
92137
92201
  });
92138
92202
  (0, import_functions6.waitUntil)(opsPromise);
@@ -92179,17 +92243,18 @@ async function executeStep(params) {
92179
92243
  }
92180
92244
  return { type: "completed", hasPendingOps: !opsSettled };
92181
92245
  } catch (err) {
92182
- const normalizedError = await normalizeUnknownError(err);
92183
- const normalizedStack = normalizedError.stack || getErrorStack(err) || "";
92184
- if (err instanceof Error) {
92185
- span?.recordException?.(err);
92246
+ const effectiveErr = promoteAbortErrorToFatal(err);
92247
+ const normalizedError = await normalizeUnknownError(effectiveErr);
92248
+ const normalizedStack = normalizedError.stack || getErrorStack(effectiveErr) || "";
92249
+ if (effectiveErr instanceof Error) {
92250
+ span?.recordException?.(effectiveErr);
92186
92251
  }
92187
- const isFatal = FatalError2.is(err);
92252
+ const isFatal = FatalError2.is(effectiveErr);
92188
92253
  span?.setAttributes({
92189
- ...StepErrorName2(getErrorName(err)),
92254
+ ...StepErrorName2(getErrorName(effectiveErr)),
92190
92255
  ...StepErrorMessage2(normalizedError.message),
92191
- ...ErrorType2(getErrorName(err)),
92192
- ...ErrorCategory2(isFatal ? "fatal" : RetryableError2.is(err) ? "retryable" : "transient"),
92256
+ ...ErrorType2(getErrorName(effectiveErr)),
92257
+ ...ErrorCategory2(isFatal ? "fatal" : RetryableError2.is(effectiveErr) ? "retryable" : "transient"),
92193
92258
  ...ErrorRetryable2(!isFatal)
92194
92259
  });
92195
92260
  if (RunExpiredError.is(err)) {
@@ -92202,8 +92267,8 @@ async function executeStep(params) {
92202
92267
  }
92203
92268
  if (isFatal) {
92204
92269
  stepLogger2.error("Encountered FatalError while executing step, bubbling up to parent workflow", { workflowRunId, stepName, errorStack: normalizedStack });
92205
- if (types5.isNativeError(err) && normalizedStack) {
92206
- err.stack = normalizedStack;
92270
+ if (types5.isNativeError(effectiveErr) && normalizedStack) {
92271
+ effectiveErr.stack = normalizedStack;
92207
92272
  }
92208
92273
  try {
92209
92274
  await world.events.create(workflowRunId, {
@@ -92212,7 +92277,7 @@ async function executeStep(params) {
92212
92277
  correlationId: stepId,
92213
92278
  eventData: {
92214
92279
  stepName,
92215
- error: await dehydrateStepError(err, workflowRunId, await getEncryptionKey())
92280
+ error: await dehydrateStepError(effectiveErr, workflowRunId, await getEncryptionKey())
92216
92281
  }
92217
92282
  });
92218
92283
  } catch (stepFailErr) {
@@ -92525,8 +92590,8 @@ async function handleSuspension({ suspension, world, run, span, requestId }) {
92525
92590
  }
92526
92591
  }
92527
92592
  (0, import_functions7.waitUntil)(Promise.all(ops).catch((opErr) => {
92528
- const isAbortError = opErr?.name === "AbortError" || opErr?.name === "ResponseAborted";
92529
- if (!isAbortError)
92593
+ const isAbortError2 = opErr?.name === "AbortError" || opErr?.name === "ResponseAborted";
92594
+ if (!isAbortError2)
92530
92595
  throw opErr;
92531
92596
  }));
92532
92597
  await Promise.all(ops);
@@ -111733,7 +111798,7 @@ globalThis.__private_workflows.set("workflow//./workflows/hooks//collectWithHook
111733
111798
  var writeEvent = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//./workflows/hooks//writeEvent");
111734
111799
 
111735
111800
  // ../workflow/dist/stdlib.js
111736
- var fetch = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//workflow@5.0.0-beta.8//fetch");
111801
+ var fetch = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//workflow@5.0.0-beta.9//fetch");
111737
111802
 
111738
111803
  // workflows/inline-execution.ts
111739
111804
  var add2 = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//./workflows/inline-execution//add");
@@ -111925,10 +111990,10 @@ var Run = class _Run {
111925
111990
  return this.getReadable();
111926
111991
  }
111927
111992
  };
111928
- Run.prototype["wakeUp"] = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.8//Run#wakeUp");
111929
- Run.prototype["cancel"] = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.8//Run#cancel");
111930
- Run.prototype["getReadable"] = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.8//Run#getReadable");
111931
- var __step_Run$exists = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.8//Run#exists");
111993
+ Run.prototype["wakeUp"] = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.9//Run#wakeUp");
111994
+ Run.prototype["cancel"] = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.9//Run#cancel");
111995
+ Run.prototype["getReadable"] = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.9//Run#getReadable");
111996
+ var __step_Run$exists = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.9//Run#exists");
111932
111997
  Object.defineProperty(Run.prototype, "exists", {
111933
111998
  get() {
111934
111999
  return __step_Run$exists.call(this);
@@ -111936,7 +112001,7 @@ Object.defineProperty(Run.prototype, "exists", {
111936
112001
  configurable: true,
111937
112002
  enumerable: false
111938
112003
  });
111939
- var __step_Run$status = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.8//Run#status");
112004
+ var __step_Run$status = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.9//Run#status");
111940
112005
  Object.defineProperty(Run.prototype, "status", {
111941
112006
  get() {
111942
112007
  return __step_Run$status.call(this);
@@ -111944,7 +112009,7 @@ Object.defineProperty(Run.prototype, "status", {
111944
112009
  configurable: true,
111945
112010
  enumerable: false
111946
112011
  });
111947
- var __step_Run$returnValue = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.8//Run#returnValue");
112012
+ var __step_Run$returnValue = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.9//Run#returnValue");
111948
112013
  Object.defineProperty(Run.prototype, "returnValue", {
111949
112014
  get() {
111950
112015
  return __step_Run$returnValue.call(this);
@@ -111952,7 +112017,7 @@ Object.defineProperty(Run.prototype, "returnValue", {
111952
112017
  configurable: true,
111953
112018
  enumerable: false
111954
112019
  });
111955
- var __step_Run$workflowName = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.8//Run#workflowName");
112020
+ var __step_Run$workflowName = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.9//Run#workflowName");
111956
112021
  Object.defineProperty(Run.prototype, "workflowName", {
111957
112022
  get() {
111958
112023
  return __step_Run$workflowName.call(this);
@@ -111960,7 +112025,7 @@ Object.defineProperty(Run.prototype, "workflowName", {
111960
112025
  configurable: true,
111961
112026
  enumerable: false
111962
112027
  });
111963
- var __step_Run$createdAt = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.8//Run#createdAt");
112028
+ var __step_Run$createdAt = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.9//Run#createdAt");
111964
112029
  Object.defineProperty(Run.prototype, "createdAt", {
111965
112030
  get() {
111966
112031
  return __step_Run$createdAt.call(this);
@@ -111968,7 +112033,7 @@ Object.defineProperty(Run.prototype, "createdAt", {
111968
112033
  configurable: true,
111969
112034
  enumerable: false
111970
112035
  });
111971
- var __step_Run$startedAt = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.8//Run#startedAt");
112036
+ var __step_Run$startedAt = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.9//Run#startedAt");
111972
112037
  Object.defineProperty(Run.prototype, "startedAt", {
111973
112038
  get() {
111974
112039
  return __step_Run$startedAt.call(this);
@@ -111976,7 +112041,7 @@ Object.defineProperty(Run.prototype, "startedAt", {
111976
112041
  configurable: true,
111977
112042
  enumerable: false
111978
112043
  });
111979
- var __step_Run$completedAt = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.8//Run#completedAt");
112044
+ var __step_Run$completedAt = globalThis[/* @__PURE__ */ Symbol.for("WORKFLOW_USE_STEP")]("step//@workflow/core/runtime/run@5.0.0-beta.9//Run#completedAt");
111980
112045
  Object.defineProperty(Run.prototype, "completedAt", {
111981
112046
  get() {
111982
112047
  return __step_Run$completedAt.call(this);
@@ -111993,7 +112058,7 @@ Object.defineProperty(Run.prototype, "completedAt", {
111993
112058
  enumerable: false,
111994
112059
  configurable: false
111995
112060
  });
111996
- })(Run, "class//@workflow/core/runtime/run@5.0.0-beta.8//Run");
112061
+ })(Run, "class//@workflow/core/runtime/run@5.0.0-beta.9//Run");
111997
112062
  //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21zQDIuMS4zL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICJ3b3JrZmxvd3MvYWRkaXRpb24udHMiLCAiLi4vY29yZS9zcmMvY2FwdHVyZS1zdGFjay50cyIsICIuLi9lcnJvcnMvc3JjL2ludGVybmFsLWNoYWxrLnRzIiwgIi4uL2Vycm9ycy9zcmMvYW5zaS50cyIsICIuLi9jb3JlL3NyYy9jb250ZXh0LXZpb2xhdGlvbi1lcnJvci50cyIsICIuLi9jb3JlL3NyYy93b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEudHMiLCAiLi4vY29yZS9zcmMvY29udGV4dC1lcnJvcnMudHMiLCAiLi4vdXRpbHMvc3JjL3RpbWUudHMiLCAiLi4vZXJyb3JzL3NyYy9pbmRleC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9leHRlcm5hbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9jb3JlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3pvZEA0LjMuNi9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3BhcnNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL3JlZ2V4ZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3pvZEA0LjMuNi9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvY2hlY2tzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2RvYy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS92ZXJzaW9ucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9zY2hlbWFzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2FyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2F6LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2JlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2JnLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2NhLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2NzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2RhLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2RlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2VuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2VvLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2VzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2ZhLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2ZpLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2ZyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2ZyLUNBLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2hlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2h1LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2h5LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2lkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2lzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2l0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2phLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2thLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2ttLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2toLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2tvLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL2x0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL21rLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL21zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL25sLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL25vLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9sb2NhbGVzL290YS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9wcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9wbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9wdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9ydS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9zbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy9zdi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy90YS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy90aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy90ci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy91ay5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy91YS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy91ci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy91ei5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy92aS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy96aC1DTi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy96aC1UVy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvbG9jYWxlcy95by5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9yZWdpc3RyaWVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2FwaS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS90by1qc29uLXNjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9qc29uLXNjaGVtYS1wcm9jZXNzb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2pzb24tc2NoZW1hLWdlbmVyYXRvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9qc29uLXNjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9zY2hlbWFzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9jbGFzc2ljL2NoZWNrcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9pc28uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3pvZEA0LjMuNi9ub2RlX21vZHVsZXMvem9kL3Y0L2NsYXNzaWMvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9jbGFzc2ljL3BhcnNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9jbGFzc2ljL2NvbXBhdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vem9kQDQuMy42L25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9mcm9tLWpzb24tc2NoZW1hLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS96b2RANC4zLjYvbm9kZV9tb2R1bGVzL3pvZC92NC9jbGFzc2ljL2NvZXJjZS5qcyIsICIuLi93b3JsZC9zcmMvYXR0cmlidXRlcy50cyIsICIuLi93b3JsZC9zcmMvc2VyaWFsaXphdGlvbi50cyIsICIuLi93b3JsZC9zcmMvZXZlbnRzLnRzIiwgIi4uL3dvcmxkL3NyYy9ob29rcy50cyIsICIuLi93b3JsZC9zcmMvcXVldWUudHMiLCAiLi4vd29ybGQvc3JjL3J1bnMudHMiLCAiLi4vd29ybGQvc3JjL3NoYXJlZC50cyIsICIuLi93b3JsZC9zcmMvc3RlcHMudHMiLCAiLi4vd29ybGQvc3JjL3VsaWQudHMiLCAiLi4vd29ybGQvc3JjL3dhaXRzLnRzIiwgIi4uL2NvcmUvc3JjL3N5bWJvbHMudHMiLCAiLi4vY29yZS9zcmMvc2xlZXAudHMiLCAiLi4vY29yZS9zcmMvd29ya2Zsb3cvY3JlYXRlLWhvb2sudHMiLCAiLi4vY29yZS9zcmMvd29ya2Zsb3cvZGVmaW5lLWhvb2sudHMiLCAiLi4vY29yZS9zcmMvd29ya2Zsb3cvd3JpdGFibGUtc3RyZWFtLnRzIiwgIndvcmtmbG93cy9ob29rcy50cyIsICIuLi93b3JrZmxvdy9zcmMvc3RkbGliLnRzIiwgIndvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLnRzIiwgIndvcmtmbG93cy9ub29wLnRzIiwgIndvcmtmbG93cy9udWxsLWJ5dGUudHMiLCAid29ya2Zsb3dzL3JldHJpYWJsZS1hbmQtZmF0YWwudHMiLCAiLi4vc2VyZGUvc3JjL2luZGV4LnRzIiwgIi4uL2NvcmUvc3JjL3J1bnRpbWUvcnVuLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEhlbHBlcnMuXG4gKi8gdmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHcgPSBkICogNztcbnZhciB5ID0gZCAqIDM2NS4yNTtcbi8qKlxuICogUGFyc2Ugb3IgZm9ybWF0IHRoZSBnaXZlbiBgdmFsYC5cbiAqXG4gKiBPcHRpb25zOlxuICpcbiAqICAtIGBsb25nYCB2ZXJib3NlIGZvcm1hdHRpbmcgW2ZhbHNlXVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gdmFsXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhyb3cgYW4gZXJyb3IgaWYgdmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSBudW1iZXJcbiAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odmFsLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcigndmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0nICsgSlNPTi5zdHJpbmdpZnkodmFsKSk7XG59O1xuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi8gZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gICAgc3RyID0gU3RyaW5nKHN0cik7XG4gICAgaWYgKHN0ci5sZW5ndGggPiAxMDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoc3RyKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICAgIHN3aXRjaCh0eXBlKXtcbiAgICAgICAgY2FzZSAneWVhcnMnOlxuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgY2FzZSAneXJzJzpcbiAgICAgICAgY2FzZSAneXInOlxuICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgIHJldHVybiBuICogeTtcbiAgICAgICAgY2FzZSAnd2Vla3MnOlxuICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICByZXR1cm4gbiAqIHc7XG4gICAgICAgIGNhc2UgJ2RheXMnOlxuICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIHJldHVybiBuICogZDtcbiAgICAgICAgY2FzZSAnaG91cnMnOlxuICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgY2FzZSAnaHJzJzpcbiAgICAgICAgY2FzZSAnaHInOlxuICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgIHJldHVybiBuICogaDtcbiAgICAgICAgY2FzZSAnbWludXRlcyc6XG4gICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgIGNhc2UgJ21pbnMnOlxuICAgICAgICBjYXNlICdtaW4nOlxuICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgIHJldHVybiBuICogbTtcbiAgICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIGNhc2UgJ3NlY3MnOlxuICAgICAgICBjYXNlICdzZWMnOlxuICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgIHJldHVybiBuICogcztcbiAgICAgICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICAgICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgICAgICBjYXNlICdtc2Vjcyc6XG4gICAgICAgIGNhc2UgJ21zZWMnOlxuICAgICAgICBjYXNlICdtcyc6XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuLyoqXG4gKiBTaG9ydCBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqLyBmdW5jdGlvbiBmbXRTaG9ydChtcykge1xuICAgIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgICBpZiAobXNBYnMgPj0gZCkge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICAgIH1cbiAgICBpZiAobXNBYnMgPj0gaCkge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICAgIH1cbiAgICBpZiAobXNBYnMgPj0gbSkge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG0pICsgJ20nO1xuICAgIH1cbiAgICBpZiAobXNBYnMgPj0gcykge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICAgIH1cbiAgICByZXR1cm4gbXMgKyAnbXMnO1xufVxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovIGZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgICB2YXIgbXNBYnMgPSBNYXRoLmFicyhtcyk7XG4gICAgaWYgKG1zQWJzID49IGQpIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGQsICdkYXknKTtcbiAgICB9XG4gICAgaWYgKG1zQWJzID49IGgpIHtcbiAgICAgICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBtKSB7XG4gICAgICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBtLCAnbWludXRlJyk7XG4gICAgfVxuICAgIGlmIChtc0FicyA+PSBzKSB7XG4gICAgICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBzLCAnc2Vjb25kJyk7XG4gICAgfVxuICAgIHJldHVybiBtcyArICcgbXMnO1xufVxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqLyBmdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gICAgdmFyIGlzUGx1cmFsID0gbXNBYnMgPj0gbiAqIDEuNTtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIG4pICsgJyAnICsgbmFtZSArIChpc1BsdXJhbCA/ICdzJyA6ICcnKTtcbn1cbiIsICIvKipfX2ludGVybmFsX3dvcmtmbG93c3tcIndvcmtmbG93c1wiOntcIndvcmtmbG93cy9hZGRpdGlvbi50c1wiOntcImFkZFRlbldvcmtmbG93XCI6e1wid29ya2Zsb3dJZFwiOlwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL2FkZGl0aW9uLy9hZGRUZW5Xb3JrZmxvd1wifSxcImFkZGl0aW9uXCI6e1wid29ya2Zsb3dJZFwiOlwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL2FkZGl0aW9uLy9hZGRpdGlvblwifX19LFwic3RlcHNcIjp7XCJ3b3JrZmxvd3MvYWRkaXRpb24udHNcIjp7XCJhZGRcIjp7XCJzdGVwSWRcIjpcInN0ZXAvLy4vd29ya2Zsb3dzL2FkZGl0aW9uLy9hZGRcIn19fX0qLztcbnZhciBhZGQgPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3dvcmtmbG93cy9hZGRpdGlvbi8vYWRkXCIpO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZGl0aW9uKG51bSwgbnVtMikge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFkZChudW0sIG51bTIpO1xuICAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgcmVzdWx0XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmFkZGl0aW9uLndvcmtmbG93SWQgPSBcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9hZGRpdGlvbi8vYWRkaXRpb25cIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi93b3JrZmxvd3MvYWRkaXRpb24vL2FkZGl0aW9uXCIsIGFkZGl0aW9uKTtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRUZW5Xb3JrZmxvdyhpbnB1dCkge1xuICAgIGNvbnN0IGEgPSBhd2FpdCBhZGQoaW5wdXQsIDIpO1xuICAgIGNvbnN0IGIgPSBhd2FpdCBhZGQoYSwgMyk7XG4gICAgY29uc3QgYyA9IGF3YWl0IGFkZChiLCA1KTtcbiAgICByZXR1cm4gYztcbn1cbmFkZFRlbldvcmtmbG93LndvcmtmbG93SWQgPSBcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9hZGRpdGlvbi8vYWRkVGVuV29ya2Zsb3dcIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi93b3JrZmxvd3MvYWRkaXRpb24vL2FkZFRlbldvcmtmbG93XCIsIGFkZFRlbldvcmtmbG93KTtcbiIsICIvKipcbiAqIFY4LW9ubHkgKE5vZGUsIEJ1biwgQ2hyb21lLCBEZW5vKS4gUmV3cml0ZXMgYGVyci5zdGFja2Agc28gdGhlIHRvcCBmcmFtZSBpc1xuICogdGhlIGNhbGxlciBvZiBgc3RhY2tTdGFydEZuYCBpbnN0ZWFkIG9mIHRoZSBmcmFtZXdvcmsgZnVuY3Rpb24gdGhhdCB0aHJldy5cbiAqIFdpdGhvdXQgdGhpcywgdGVybWluYWwgb3ZlcmxheXMgKE5leHQuanMsIFR1cmJvcGFjaywgVlMgQ29kZSkgcmVuZGVyIHRoZVxuICogY29kZSBmcmFtZSBhdCBvdXIgYHRocm93YCBzaXRlIGluc2lkZSBgQHdvcmtmbG93L2NvcmVgLCB3aGljaCBpcyB1c2VsZXNzXG4gKiB0byB0aGUgdXNlci5cbiAqXG4gKiBOby1vcCBvbiBlbmdpbmVzIHRoYXQgZG9uJ3QgZXhwb3NlIGBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZWAg4oCUIHRoZSBzdGFja1xuICogZGVncmFkZXMgZ3JhY2VmdWxseSB0byB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiAqXG4gKiBLZXB0IGluIGl0cyBvd24gdGlueSBtb2R1bGUgc28gY2FsbGVycyB0aGF0IGNhbid0IHBhcnRpY2lwYXRlIGluIHRoZVxuICogYGNvbnRleHQtZXJyb3JzLnRzYCDihpQgYHdvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YS50c2AgaW1wb3J0IGN5Y2xlIGNhblxuICogc3RpbGwgcHVsbCBpbiB0aGUgaGVscGVyIHdpdGhvdXQgcHVsbGluZyBpbiB0aGUgZnVsbCBlcnJvciBjbGFzc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkaXJlY3RTdGFja1RvQ2FsbGVyKFxuICBlcnI6IEVycm9yLFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vQmFubmVkVHlwZXM6IHNpZ25hdHVyZSBtYXRjaGVzIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlXG4gIHN0YWNrU3RhcnRGbjogRnVuY3Rpb25cbik6IHZvaWQge1xuICBjb25zdCBjYXB0dXJlID0gKFxuICAgIEVycm9yIGFzIHVua25vd24gYXMge1xuICAgICAgY2FwdHVyZVN0YWNrVHJhY2U/OiAodGFyZ2V0OiBvYmplY3QsIGZuOiBGdW5jdGlvbikgPT4gdm9pZDtcbiAgICB9XG4gICkuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmU/LihlcnIsIHN0YWNrU3RhcnRGbik7XG59XG4iLCAiLyoqXG4gKiBUaW55IGlubGluZSBgY2hhbGtgIHJlcGxhY2VtZW50LlxuICpcbiAqIGBAd29ya2Zsb3cvZXJyb3JzL2Fuc2lgIGlzIHJlYWNoYWJsZSBmcm9tIHRoZSB3b3JrZmxvdy1WTSBidW5kbGUgKHZpYVxuICogYEB3b3JrZmxvdy9jb3JlL3dvcmtmbG93YCDihpIgYGNvbnRleHQtZXJyb3JzYCDihpIgYGNvbnRleHQtdmlvbGF0aW9uLWVycm9yYFxuICog4oaSIGhlcmUpLCBhbmQgdGhlIHdvcmtmbG93IFZNIGhhcyBubyBgcmVxdWlyZSgpYC4gVGhlIHJlYWwgYGNoYWxrYCBwYWNrYWdlXG4gKiBwdWxscyBpbiBgc3VwcG9ydHMtY29sb3JgLCB3aGljaCBjYWxscyBgcmVxdWlyZSgnb3MnKWAgYXQgbW9kdWxlIGxvYWQg4oCUXG4gKiBzbyBpbXBvcnRpbmcgYGNoYWxrYCBoZXJlIGNyYXNoZXMgZXZlcnkgd29ya2Zsb3cgd2l0aFxuICogYFJlZmVyZW5jZUVycm9yOiByZXF1aXJlIGlzIG5vdCBkZWZpbmVkYC5cbiAqXG4gKiBUaGlzIG1vZHVsZSBleHBvc2VzIHRoZSBzdWJzZXQgb2YgY2hhbGsncyBjYWxsIHN1cmZhY2UgdGhhdCBgYW5zaS50c2BcbiAqIHVzZXMgKGBib2xkYCwgYGRpbWAsIGBpdGFsaWNgLCBgcmVkYCwgYGJsdWVgLCBgY3lhbmAsIGB5ZWxsb3dgLFxuICogYG1hZ2VudGFgKS4gQ29sb3IgZGV0ZWN0aW9uIG1pcnJvcnMgY2hhbGsncyBkZWZhdWx0cyBhdCBhIGNvYXJzZSBsZXZlbDpcbiAqIGBGT1JDRV9DT0xPUmAgZm9yY2VzIG9uLCBgTk9fQ09MT1JgIGZvcmNlcyBvZmYsIG90aGVyd2lzZSB3ZSBlbWl0IEFOU0lcbiAqIG9ubHkgb24gYSBUVFkgc3Rkb3V0LiBJbiB0aGUgd29ya2Zsb3cgVk0gYHByb2Nlc3NgIGlzIGFic2VudCBzbyB0aGlzXG4gKiBldmFsdWF0ZXMgdG8gXCJubyBjb2xvclwiIGFuZCB0aGUgaGVscGVycyBiZWNvbWUgaWRlbnRpdHkgZnVuY3Rpb25zIOKAlFxuICogd2hpY2ggaXMgd2hhdCB0aGUgcnVudGltZSB3YW50cyBhbnl3YXksIHNpbmNlIHRoZSBob3N0IGNhdGNoZXMgYW5kXG4gKiByZS1yZW5kZXJzIHRoZSBlcnJvci5cbiAqXG4gKiBFeHBvcnRlZCBmcm9tIGl0cyBvd24gbW9kdWxlIHNvIHRlc3RzIGNhbiByZXBsYWNlIGl0IHdpdGggYHZpLm1vY2tgIHRvXG4gKiByZW5kZXIgc3R5bGVzIGFzIHJlYWRhYmxlIEhUTUwtbGlrZSB0YWdzIGluIHNuYXBzaG90cyB3aXRob3V0IGRyYWdnaW5nXG4gKiBgY2hhbGtgIChhbmQgaXRzIHRyYW5zaXRpdmUgYHN1cHBvcnRzLWNvbG9yYCAvIGByZXF1aXJlKCdvcycpYCBjaGFpbilcbiAqIGJhY2sgaW50byB0aGUgd29ya2Zsb3cgVk0gYnVuZGxlLlxuICovXG5cbmNvbnN0IGNvbG9yRW5hYmxlZCA9ICgoKSA9PiB7XG4gIGNvbnN0IHAgPSAoZ2xvYmFsVGhpcyBhcyB7IHByb2Nlc3M/OiBOb2RlSlMuUHJvY2VzcyB9KS5wcm9jZXNzO1xuICBpZiAoIXA/LmVudikgcmV0dXJuIGZhbHNlO1xuICBpZiAocC5lbnYuRk9SQ0VfQ09MT1IgJiYgcC5lbnYuRk9SQ0VfQ09MT1IgIT09ICcwJykgcmV0dXJuIHRydWU7XG4gIGlmIChwLmVudi5OT19DT0xPUikgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQm9vbGVhbihwLnN0ZG91dD8uaXNUVFkpO1xufSkoKTtcblxuY29uc3Qgc2dyID1cbiAgKG9wZW46IG51bWJlciwgY2xvc2U6IG51bWJlcikgPT5cbiAgKHM6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIGNvbG9yRW5hYmxlZCA/IGBcXHgxYlske29wZW59bSR7c31cXHgxYlske2Nsb3NlfW1gIDogcztcblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbENoYWxrIHtcbiAgYm9sZDogKHM6IHN0cmluZykgPT4gc3RyaW5nO1xuICBkaW06IChzOiBzdHJpbmcpID0+IHN0cmluZztcbiAgaXRhbGljOiAoczogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHJlZDogKHM6IHN0cmluZykgPT4gc3RyaW5nO1xuICBibHVlOiAoczogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIGN5YW46IChzOiBzdHJpbmcpID0+IHN0cmluZztcbiAgeWVsbG93OiAoczogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIG1hZ2VudGE6IChzOiBzdHJpbmcpID0+IHN0cmluZztcbn1cblxuY29uc3QgY2hhbGs6IEludGVybmFsQ2hhbGsgPSB7XG4gIGJvbGQ6IHNncigxLCAyMiksXG4gIGRpbTogc2dyKDIsIDIyKSxcbiAgaXRhbGljOiBzZ3IoMywgMjMpLFxuICByZWQ6IHNncigzMSwgMzkpLFxuICBibHVlOiBzZ3IoMzQsIDM5KSxcbiAgY3lhbjogc2dyKDM2LCAzOSksXG4gIHllbGxvdzogc2dyKDMzLCAzOSksXG4gIG1hZ2VudGE6IHNncigzNSwgMzkpLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2hhbGs7XG4iLCAiLy8gSW1wb3J0ZWQgZnJvbSBhIHNpYmxpbmcgbW9kdWxlIHJhdGhlciB0aGFuIGBjaGFsa2AgcHJvcGVyIHNvIHRoaXMgZmlsZVxuLy8gKGFuZCBldmVyeXRoaW5nIHRoYXQgc3RhdGljYWxseSBpbXBvcnRzIGl0IOKAlCBpbmNsdWRpbmcgdGhlIHdvcmtmbG93LVZNXG4vLyByZWFjaGFibGUgYGNvbnRleHQtdmlvbGF0aW9uLWVycm9yLnRzYCkgZG9lc24ndCBwdWxsIGluIGNoYWxrJ3Ncbi8vIGBzdXBwb3J0cy1jb2xvcmAgLyBgcmVxdWlyZSgnb3MnKWAgY2hhaW4uIFNlZSBgLi9pbnRlcm5hbC1jaGFsay50c2Bcbi8vIGZvciB0aGUgZnVsbCByYXRpb25hbGUgYW5kIHRoZSB0ZXN0IG1vY2sgdGhhdCBzd2FwcyBpdCBvdXQuXG5pbXBvcnQgY2hhbGsgZnJvbSAnLi9pbnRlcm5hbC1jaGFsay5qcyc7XG5cbi8qKlxuICogSGVscGVycyBmb3IgY29tcG9zaW5nIHN0cnVjdHVyZWQsIGh1bWFuLWZyaWVuZGx5IGVycm9yIG1lc3NhZ2VzLlxuICpcbiAqIFRoZSBnb2FsIGlzIHRvIG1ha2UgZXJyb3JzICphY3Rpb25hYmxlKjogc2F5IHdoYXQgaGFwcGVuZWQsIGV4cGxhaW4gd2h5LFxuICogYW5kIGdpdmUgdGhlIHVzZXIgYSB3YXkgb3V0LiBSZW5kZXJpbmcgdXNlcyBBTlNJIGNvbG9ycyB3aGVuIHRoZSB0ZXJtaW5hbFxuICogc3VwcG9ydHMgdGhlbSAoY2hhbGsgYXV0by1kZXRlY3RzKSBhbmQgZmFsbHMgYmFjayB0byBwbGFpbiB0ZXh0IGVsc2V3aGVyZS5cbiAqXG4gKiBUeXBpY2FsIHVzYWdlOlxuICpcbiAqIGBgYHRzXG4gKiB0aHJvdyBuZXcgRXJyb3IoXG4gKiAgIEFuc2kuZnJhbWUoXG4gKiAgICAgYCR7QW5zaS5jb2RlKGZuTmFtZSl9IGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgYSB3b3JrZmxvdyBmdW5jdGlvbmAsXG4gKiAgICAgW0Fuc2kubm90ZShgUmVhZCBtb3JlIGFib3V0IGNyZWF0aW5nIGhvb2tzOiBodHRwczovLy4uLmApXVxuICogICApXG4gKiApO1xuICogYGBgXG4gKlxuICogUmVuZGVycyBhczpcbiAqXG4gKiBgYGBcbiAqIGBjcmVhdGVIb29rKClgIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgYSB3b3JrZmxvdyBmdW5jdGlvblxuICog4pWw4pa2IG5vdGU6IFJlYWQgbW9yZSBhYm91dCBjcmVhdGluZyBob29rczogaHR0cHM6Ly8uLi5cbiAqIGBgYFxuICovXG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgaW5mbzogY2hhbGsuYmx1ZSxcbiAgaGVscDogY2hhbGsuY3lhbixcbiAgd2FybjogY2hhbGsueWVsbG93LFxuICBlcnJvcjogY2hhbGsucmVkLFxufTtcblxuLyoqIEEgXCJoZWxwOlwiIGxpbmUg4oCUIHVzZSBmb3IgdGhlIHByaW1hcnkgc3VnZ2VzdGVkIGZpeC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZWxwKG1lc3NhZ2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBBcnJheS5pc0FycmF5KG1lc3NhZ2VzKSA/IG1lc3NhZ2VzLmpvaW4oJ1xcbicpIDogbWVzc2FnZXM7XG4gIHJldHVybiBzdHlsZXMuaGVscChgJHtjaGFsay5ib2xkKCdoZWxwOicpfSAke21lc3NhZ2V9YCk7XG59XG5cbi8qKiBBIFwiaGludDpcIiBsaW5lIOKAlCB1c2UgZm9yIHN1cHBsZW1lbnRhcnkgY29udGV4dCBvciBzdWdnZXN0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaW50KG1lc3NhZ2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBBcnJheS5pc0FycmF5KG1lc3NhZ2VzKSA/IG1lc3NhZ2VzLmpvaW4oJ1xcbicpIDogbWVzc2FnZXM7XG4gIHJldHVybiBzdHlsZXMuaW5mbyhgJHtjaGFsay5ib2xkKCdoaW50OicpfSAke21lc3NhZ2V9YCk7XG59XG5cbi8qKiBBIFwibm90ZTpcIiBsaW5lIOKAlCB1c2UgZm9yIGluZm9ybWF0aW9uYWwgY29udGV4dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3RlKG1lc3NhZ2VzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBBcnJheS5pc0FycmF5KG1lc3NhZ2VzKSA/IG1lc3NhZ2VzLmpvaW4oJ1xcbicpIDogbWVzc2FnZXM7XG4gIHJldHVybiBzdHlsZXMuaW5mbyhgJHtjaGFsay5ib2xkKCdub3RlOicpfSAke21lc3NhZ2V9YCk7XG59XG5cbi8qKiBBIFwiZG9jczpcIiBsaW5lIOKAlCB1c2UgZm9yIGEgc2luZ2xlIGRvY3VtZW50YXRpb24gVVJMLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvY3ModXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3R5bGVzLmluZm8oYCR7Y2hhbGsuYm9sZCgnZG9jczonKX0gJHt1cmx9YCk7XG59XG5cbi8qKiBSZW5kZXIgYW4gaW5saW5lIGNvZGUgdG9rZW4gKGl0YWxpY2l6ZWQsIGRpbSBiYWNrdGlja3MpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2hhbGsuaXRhbGljKGAke2NoYWxrLmRpbSgnYCcpfSR7c3RyfSR7Y2hhbGsuZGltKCdgJyl9YCk7XG59XG5cbi8qKiBBcHBseSBkaW0gc3R5bGluZyB0byBhIHN0cmluZyAodXNlZCBmb3IgZGUtZW1waGFzaXppbmcgc2VwYXJhdG9ycykuICovXG5leHBvcnQgZnVuY3Rpb24gZGltKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoYWxrLmRpbShzdHIpO1xufVxuXG4vKiogQm9sZCBzdHlsaW5nICh1c2VkIGZvciBlbXBoYXNpemluZyBjbGFzcyBuYW1lcyBpbiBoZWFkZXJzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib2xkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoYWxrLmJvbGQoc3RyKTtcbn1cblxuLyoqIFJlZCBzdHlsaW5nICh1c2VkIGZvciB0aGUgdXNlci1lcnJvciBhdHRyaWJ1dGlvbiBiYWRnZSkuICovXG5leHBvcnQgZnVuY3Rpb24gcmVkKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoYWxrLnJlZChzdHIpO1xufVxuXG4vKiogTWFnZW50YSBzdHlsaW5nICh1c2VkIGZvciB0aGUgU0RLLWVycm9yIGF0dHJpYnV0aW9uIGJhZGdlKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWdlbnRhKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoYWxrLm1hZ2VudGEoc3RyKTtcbn1cblxuLyoqXG4gKiBGcmFtZSBhIHRpdGxlIHdpdGggb25lIG9yIG1vcmUgY29udGludWF0aW9uIGxpbmVzLCBkcmF3biB3aXRoXG4gKiBib3gtZHJhd2luZyBjaGFyYWN0ZXJzLiBUaGUgbGFzdCBjb250ZW50IHVzZXMgYOKVsOKWtmAsIG90aGVycyB1c2UgYOKUnOKWtmAuXG4gKiBNdWx0aS1saW5lIGNvbnRlbnRzIGFyZSBpbmRlbnRlZCB1bmRlciB0aGVpciBicmFuY2guXG4gKlxuICogQGV4YW1wbGVcbiAqIGZyYW1lKCdTb21ldGhpbmcgd2VudCB3cm9uZycsIFsnd2h5IGl0IGhhcHBlbmVkJywgaGludCgnaG93IHRvIGZpeCBpdCcpXSlcbiAqIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nXG4gKiAvLyDilJzilrYgd2h5IGl0IGhhcHBlbmVkXG4gKiAvLyDilbDilrYgaGludDogaG93IHRvIGZpeCBpdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJhbWUodGl0bGU6IHN0cmluZywgY29udGVudHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzdWx0ID0gW3RpdGxlXTtcblxuICBjb250ZW50cy5mb3JFYWNoKChjb250ZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGxpbmVzID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gICAgY29uc3QgaXNMYXN0Q29udGVudCA9IGluZGV4ID09PSBjb250ZW50cy5sZW5ndGggLSAxO1xuXG4gICAgY29uc3QgZmlyc3RMaW5lUHJlZml4ID0gaXNMYXN0Q29udGVudCA/ICfilbDilrYgJyA6ICfilJzilrYgJztcbiAgICBjb25zdCBjb250aW51YXRpb25QcmVmaXggPSBpc0xhc3RDb250ZW50ID8gJyAgICcgOiAn4pSCICAnO1xuXG4gICAgY29uc3QgZnJhbWVkTGluZXMgPSBsaW5lcy5tYXAoKGxpbmUsIGxpbmVJbmRleCkgPT4ge1xuICAgICAgY29uc3QgcHJlZml4ID0gbGluZUluZGV4ID09PSAwID8gZmlyc3RMaW5lUHJlZml4IDogY29udGludWF0aW9uUHJlZml4O1xuICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke2xpbmV9YDtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5wdXNoKC4uLmZyYW1lZExpbmVzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdC5qb2luKCdcXG4nKTtcbn1cblxuaW50ZXJmYWNlIEV4cGxhaW4ge1xuICB0ZXh0OiBzdHJpbmc7XG4gIGV4cGxhaW46IHN0cmluZztcbiAgLyoqIGFkZHMgYW5zaSBjb2xvcmluZyAqL1xuICBjb2xvcj86IChzOiBzdHJpbmcpID0+IHN0cmluZztcbn1cblxudHlwZSBFeHBsYWluaXNoID1cbiAgfCBFeHBsYWluXG4gIHwgW3RleHQ6IHN0cmluZywgZXhwbGFpbjogc3RyaW5nLCBvcHRzPzogeyBjb2xvcjogRXhwbGFpblsnY29sb3InXSB9XTtcblxudHlwZSBNYXJrZXIgPSB7XG4gIHN0YXJ0Q29sOiBudW1iZXI7XG4gIGVuZENvbDogbnVtYmVyO1xuICBleHBsYWluOiBzdHJpbmc7XG4gIGNvbG9yPzogKHM6IHN0cmluZykgPT4gc3RyaW5nO1xufTtcblxuY29uc3QgaWRlbnRpdHkgPSAoczogc3RyaW5nKSA9PiBzO1xuXG5mdW5jdGlvbiBnZXRNYXJrZXJNaWRwb2ludChtYXJrZXI6IE1hcmtlcik6IG51bWJlciB7XG4gIGNvbnN0IHRleHRMZW4gPSBtYXJrZXIuZW5kQ29sIC0gbWFya2VyLnN0YXJ0Q29sO1xuICByZXR1cm4gbWFya2VyLnN0YXJ0Q29sICsgTWF0aC5mbG9vcih0ZXh0TGVuIC8gMik7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVW5kZXJsaW5lKG1hcmtlcnM6IE1hcmtlcltdKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGxldCBwb3MgPSAwO1xuICBmb3IgKGNvbnN0IG1hcmtlciBvZiBtYXJrZXJzKSB7XG4gICAgLy8gVHJlYXQgemVyby1sZW5ndGggbWFya2VycyBhcyBsZW5ndGggMSBzbyB3ZSBhbHdheXMgZW1pdCBhIGDilKxgIGFuY2hvclxuICAgIC8vIGZvciB0aGUgZXhwbGFuYXRpb24gbGluZSBhbmQgYXZvaWQgYSBuZWdhdGl2ZSBgU3RyaW5nLnJlcGVhdGAgY291bnQuXG4gICAgY29uc3QgdGV4dExlbiA9IE1hdGgubWF4KDEsIG1hcmtlci5lbmRDb2wgLSBtYXJrZXIuc3RhcnRDb2wpO1xuICAgIGNvbnN0IG1pZFBvaW50ID0gTWF0aC5mbG9vcih0ZXh0TGVuIC8gMik7XG5cbiAgICBpZiAobWFya2VyLnN0YXJ0Q29sID4gcG9zKSB7XG4gICAgICBwYXJ0cy5wdXNoKCcgJy5yZXBlYXQobWFya2VyLnN0YXJ0Q29sIC0gcG9zKSk7XG4gICAgICBwb3MgPSBtYXJrZXIuc3RhcnRDb2w7XG4gICAgfVxuICAgIGNvbnN0IGxlZnRGaWxsID0gJ+KUgCcucmVwZWF0KG1pZFBvaW50KTtcbiAgICBjb25zdCByaWdodEZpbGwgPSAn4pSAJy5yZXBlYXQoTWF0aC5tYXgoMCwgdGV4dExlbiAtIG1pZFBvaW50IC0gMSkpO1xuICAgIGNvbnN0IHNlZ21lbnQgPSBgJHtsZWZ0RmlsbH3ilKwke3JpZ2h0RmlsbH1gO1xuICAgIGNvbnN0IGNvbG9yRm4gPSBtYXJrZXIuY29sb3IgPz8gaWRlbnRpdHk7XG4gICAgcGFydHMucHVzaChjb2xvckZuKHNlZ21lbnQpKTtcbiAgICBwb3MgKz0gdGV4dExlbjtcbiAgfVxuICByZXR1cm4gcGFydHMuam9pbignJyk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRXhwbGFuYXRpb25MaW5lKFxuICBtYXJrZXI6IE1hcmtlcixcbiAgbWlkQ29sOiBudW1iZXIsXG4gIHJlbWFpbmluZ01pZHM6IG51bWJlcltdLFxuICBpc09ubHlNYXJrZXI6IGJvb2xlYW5cbik6IHN0cmluZyB7XG4gIGxldCBsaW5lID0gJ+KVsCc7XG4gIGxldCBwb3MgPSBtaWRDb2wgKyAxO1xuXG4gIGZvciAoY29uc3QgbmV4dE1pZCBvZiByZW1haW5pbmdNaWRzKSB7XG4gICAgd2hpbGUgKHBvcyA8IG5leHRNaWQpIHtcbiAgICAgIGxpbmUgKz0gJ+KUgCc7XG4gICAgICBwb3MrKztcbiAgICB9XG4gICAgbGluZSArPSAn4pS8JztcbiAgICBwb3MrKztcbiAgfVxuXG4gIGNvbnN0IGFycm93ID0gaXNPbmx5TWFya2VyID8gJ+KWtiAnIDogJ+KUgOKWtiAnO1xuICBsaW5lICs9IGFycm93ICsgbWFya2VyLmV4cGxhaW47XG5cbiAgY29uc3QgY29sb3JGbiA9IG1hcmtlci5jb2xvciA/PyBpZGVudGl0eTtcbiAgcmV0dXJuICcgJy5yZXBlYXQobWlkQ29sKSArIGNvbG9yRm4obGluZSk7XG59XG5cbi8qKlxuICogVGFnZ2VkIHRlbXBsYXRlIGZvciB1bmRlcmxpbmluZyB0b2tlbnMgaW4gYSBzb3VyY2Ugc3RyaW5nIGFuZCBhbm5vdGF0aW5nXG4gKiB0aGVtIHdpdGggZXhwbGFuYXRpb25zLiBVc2VmdWwgZm9yIHBvaW50aW5nIG91dCBvZmZlbmRpbmcgdG9rZW5zIGluXG4gKiB1c2VyLWF1dGhvcmVkIGNvZGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGlubGluZWBmdW5jdGlvbiAke3sgdGV4dDogJ2hlbGxvJywgZXhwbGFpbjogJ25hbWUgbm90IGFsbG93ZWQnIH19KCkge1xuICogICByZXR1cm4gNjY2XG4gKiB9YFxuICogLy8gZnVuY3Rpb24gaGVsbG8oKSB7XG4gKiAvLyAgICAgICAgICDilIDilIDilKzilIDilIBcbiAqIC8vICAgICAgICAgICAg4pWw4pa2IG5hbWUgbm90IGFsbG93ZWRcbiAqIC8vICAgcmV0dXJuIDY2NlxuICogLy8gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5saW5lKFxuICB0ZXh0OiBUZW1wbGF0ZVN0cmluZ3NBcnJheSxcbiAgLi4udmFsdWVzOiBFeHBsYWluaXNoW11cbik6IHN0cmluZyB7XG4gIGNvbnN0IHJlc3VsdExpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgY3VycmVudExpbmUgPSAnJztcbiAgbGV0IGN1cnJlbnRMaW5lVmlzdWFsTGVuID0gMDtcbiAgbGV0IHBlbmRpbmdNYXJrZXJzOiBNYXJrZXJbXSA9IFtdO1xuXG4gIGNvbnN0IGZsdXNoTGluZSA9ICgpID0+IHtcbiAgICByZXN1bHRMaW5lcy5wdXNoKGN1cnJlbnRMaW5lKTtcbiAgICBpZiAocGVuZGluZ01hcmtlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjdXJyZW50TGluZSA9ICcnO1xuICAgICAgY3VycmVudExpbmVWaXN1YWxMZW4gPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcmtlck1pZHMgPSBwZW5kaW5nTWFya2Vycy5tYXAoZ2V0TWFya2VyTWlkcG9pbnQpO1xuXG4gICAgcmVzdWx0TGluZXMucHVzaChidWlsZFVuZGVybGluZShwZW5kaW5nTWFya2VycykpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZW5kaW5nTWFya2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbGluZSA9IGJ1aWxkRXhwbGFuYXRpb25MaW5lKFxuICAgICAgICBwZW5kaW5nTWFya2Vyc1tpXSxcbiAgICAgICAgbWFya2VyTWlkc1tpXSxcbiAgICAgICAgbWFya2VyTWlkcy5zbGljZShpICsgMSksXG4gICAgICAgIHBlbmRpbmdNYXJrZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgKTtcbiAgICAgIHJlc3VsdExpbmVzLnB1c2gobGluZSk7XG4gICAgfVxuXG4gICAgcGVuZGluZ01hcmtlcnMgPSBbXTtcbiAgICBjdXJyZW50TGluZSA9ICcnO1xuICAgIGN1cnJlbnRMaW5lVmlzdWFsTGVuID0gMDtcbiAgfTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gdGV4dFtpXTtcbiAgICBjb25zdCBsaW5lcyA9IHNlZ21lbnQuc3BsaXQoJ1xcbicpO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIGZsdXNoTGluZSgpO1xuICAgICAgfVxuICAgICAgY3VycmVudExpbmUgKz0gbGluZXNbal07XG4gICAgICBjdXJyZW50TGluZVZpc3VhbExlbiArPSBsaW5lc1tqXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKGkgPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB2YWwgPSB2YWx1ZXNbaV07XG4gICAgICBjb25zdCB2YWx1ZTogRXhwbGFpbiA9ICFBcnJheS5pc0FycmF5KHZhbClcbiAgICAgICAgPyB2YWxcbiAgICAgICAgOiB7IHRleHQ6IHZhbFswXSwgZXhwbGFpbjogdmFsWzFdLCAuLi52YWxbMl0gfTtcbiAgICAgIGNvbnN0IHN0YXJ0Q29sID0gY3VycmVudExpbmVWaXN1YWxMZW47XG4gICAgICBjb25zdCBjb2xvckZuID0gdmFsdWUuY29sb3IgPz8gKChzOiBzdHJpbmcpID0+IHMpO1xuICAgICAgY3VycmVudExpbmUgKz0gY29sb3JGbih2YWx1ZS50ZXh0KTtcbiAgICAgIGN1cnJlbnRMaW5lVmlzdWFsTGVuICs9IHZhbHVlLnRleHQubGVuZ3RoO1xuICAgICAgY29uc3QgZW5kQ29sID0gY3VycmVudExpbmVWaXN1YWxMZW47XG4gICAgICBwZW5kaW5nTWFya2Vycy5wdXNoKHtcbiAgICAgICAgc3RhcnRDb2wsXG4gICAgICAgIGVuZENvbCxcbiAgICAgICAgZXhwbGFpbjogdmFsdWUuZXhwbGFpbixcbiAgICAgICAgY29sb3I6IHZhbHVlLmNvbG9yLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnRMaW5lIHx8IHBlbmRpbmdNYXJrZXJzLmxlbmd0aCA+IDApIHtcbiAgICBmbHVzaExpbmUoKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRMaW5lcy5qb2luKCdcXG4nKTtcbn1cbiIsICJpbXBvcnQgKiBhcyBBbnNpIGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMvYW5zaSc7XG5cbi8qKlxuICogQSBgZG9jczpgIGxpbmUgVVJMLiBUaGUgbGVhZGluZyBwcm90b2NvbCBpcyBwYXJ0IG9mIHRoZSB0eXBlIHNvIGNhbGwgc2l0ZXNcbiAqIGNhbid0IGFjY2lkZW50YWxseSBwYXNzIGEgcHJvdG9jb2wtcmVsYXRpdmUgb3IgYmFyZSBwYXRoLlxuICovXG5leHBvcnQgdHlwZSBEb2NzVXJsID0gYGh0dHBzOi8vJHtzdHJpbmd9YDtcblxuY29uc3QgSU5TUEVDVF9DVVNUT00gPSBTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQgZGF0YSBmb3IgYSBmcmFtZWQgZXJyb3IuIFRoZSBiYXNlIGNsYXNzIHRha2VzIHRoaXMgYW5kIHJlbmRlcnNcbiAqIGl0IHRvIHBsYWluIHRleHQgKGZvciBgLm1lc3NhZ2VgIC8gYC5zdGFja2AgLyBzdHJ1Y3R1cmVkIGxvZ3MpIG9yIHRvIGFuXG4gKiBBTlNJLWZyYW1lZCBzdHJpbmcgKGZvciB0ZXJtaW5hbCBkaXNwbGF5IHZpYSBgdXRpbC5pbnNwZWN0YCAvIGB0b1N0cmluZ2ApLlxuICpcbiAqIEtlZXBpbmcgdGhlIHBpZWNlcyBzdHJ1Y3R1cmVkIG1lYW5zIHdlIG5ldmVyIGhhdmUgdG8gc3RyaXAgQU5TSSBiYWNrIG91dFxuICogb25jZSBpdCdzIGluIHRoZSBtZXNzYWdlIOKAlCB3ZSBqdXN0IGRvbid0IHB1dCBpdCB0aGVyZSBpbiB0aGUgZmlyc3QgcGxhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnJhbWVkQ29udGVudCB7XG4gIC8qKiBIZWFkbGluZS4gYHsgY29kZTogJ2ZvbygpJyB9YCBzZWdtZW50cyByZW5kZXIgYXMgYmFja3RpY2tlZCBpbmxpbmUgY29kZS4gKi9cbiAgcmVhZG9ubHkgdGl0bGU6IHJlYWRvbmx5IFNlZ21lbnRbXTtcbiAgLyoqIE9uZSBmcmFtZWQgYnJhbmNoIHBlciBlbnRyeS4gVGhlIGxhc3QgdXNlcyBg4pWw4pa2YCwgb3RoZXJzIHVzZSBg4pSc4pa2YC4gKi9cbiAgcmVhZG9ubHkgZGV0YWlsczogcmVhZG9ubHkgRGV0YWlsW107XG59XG5cbmV4cG9ydCB0eXBlIFNlZ21lbnQgPVxuICB8IHsgcmVhZG9ubHkgdGV4dDogc3RyaW5nIH1cbiAgfCB7IHJlYWRvbmx5IGNvZGU6IHN0cmluZyB9XG4gIHwgeyByZWFkb25seSBkaW06IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBEZXRhaWwgPVxuICB8IHsgcmVhZG9ubHkgdHlwZTogJ3BsYWluJzsgcmVhZG9ubHkgc2VnbWVudHM6IHJlYWRvbmx5IFNlZ21lbnRbXSB9XG4gIHwgeyByZWFkb25seSB0eXBlOiAnZG9jcyc7IHJlYWRvbmx5IHVybDogRG9jc1VybCB9O1xuXG5mdW5jdGlvbiByZW5kZXJTZWdtZW50UGxhaW4oczogU2VnbWVudCk6IHN0cmluZyB7XG4gIGlmICgnY29kZScgaW4gcykgcmV0dXJuIGBcXGAke3MuY29kZX1cXGBgO1xuICBpZiAoJ2RpbScgaW4gcykgcmV0dXJuIHMuZGltO1xuICByZXR1cm4gcy50ZXh0O1xufVxuXG5mdW5jdGlvbiByZW5kZXJTZWdtZW50UHJldHR5KHM6IFNlZ21lbnQpOiBzdHJpbmcge1xuICBpZiAoJ2NvZGUnIGluIHMpIHJldHVybiBBbnNpLmNvZGUocy5jb2RlKTtcbiAgaWYgKCdkaW0nIGluIHMpIHJldHVybiBBbnNpLmRpbShzLmRpbSk7XG4gIHJldHVybiBzLnRleHQ7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckRldGFpbFBsYWluKGQ6IERldGFpbCk6IHN0cmluZyB7XG4gIGlmIChkLnR5cGUgPT09ICdkb2NzJykgcmV0dXJuIGBkb2NzOiAke2QudXJsfWA7XG4gIHJldHVybiBkLnNlZ21lbnRzLm1hcChyZW5kZXJTZWdtZW50UGxhaW4pLmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJEZXRhaWxQcmV0dHkoZDogRGV0YWlsKTogc3RyaW5nIHtcbiAgaWYgKGQudHlwZSA9PT0gJ2RvY3MnKSByZXR1cm4gQW5zaS5kb2NzKGQudXJsKTtcbiAgcmV0dXJuIGQuc2VnbWVudHMubWFwKHJlbmRlclNlZ21lbnRQcmV0dHkpLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUGxhaW4oYzogRnJhbWVkQ29udGVudCk6IHN0cmluZyB7XG4gIC8vIE1pbWljIGBBbnNpLmZyYW1lYCBzdHJ1Y3R1cmUgc28gYC5tZXNzYWdlYCBpcyBzdGlsbCByZWFkYWJsZSBpbiBsb2dzXG4gIC8vIGV2ZW4gd2l0aG91dCB0aGUgY29sb3IuXG4gIGNvbnN0IHRpdGxlID0gYy50aXRsZS5tYXAocmVuZGVyU2VnbWVudFBsYWluKS5qb2luKCcnKTtcbiAgY29uc3QgbGluZXMgPSBbdGl0bGVdO1xuICBjLmRldGFpbHMuZm9yRWFjaCgoZGV0YWlsLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBjLmRldGFpbHMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBmaXJzdCA9IGlzTGFzdCA/ICfilbDilrYgJyA6ICfilJzilrYgJztcbiAgICBjb25zdCBjb250ID0gaXNMYXN0ID8gJyAgICcgOiAn4pSCICAnO1xuICAgIGNvbnN0IHJhdyA9IHJlbmRlckRldGFpbFBsYWluKGRldGFpbCkuc3BsaXQoJ1xcbicpO1xuICAgIHJhdy5mb3JFYWNoKChsaW5lLCBpKSA9PiBsaW5lcy5wdXNoKGAke2kgPT09IDAgPyBmaXJzdCA6IGNvbnR9JHtsaW5lfWApKTtcbiAgfSk7XG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclByZXR0eShjOiBGcmFtZWRDb250ZW50KTogc3RyaW5nIHtcbiAgY29uc3QgdGl0bGUgPSBjLnRpdGxlLm1hcChyZW5kZXJTZWdtZW50UHJldHR5KS5qb2luKCcnKTtcbiAgcmV0dXJuIEFuc2kuZnJhbWUodGl0bGUsIGMuZGV0YWlscy5tYXAocmVuZGVyRGV0YWlsUHJldHR5KSk7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3Igc3RydWN0dXJlZCBjb250ZXh0LXZpb2xhdGlvbiBlcnJvcnMuXG4gKlxuICogRGVzaWduIG5vdGVzOlxuICpcbiAqIC0gYC5tZXNzYWdlYCBpcyAqKnBsYWluIHRleHQqKiAobm8gQU5TSSBlc2NhcGUgYnl0ZXMpLiBTdHJ1Y3R1cmVkIGxvZ3MsXG4gKiAgIGxvZyBkcmFpbnMsIENCT1Itc2VyaWFsaXplZCBldmVudCBkYXRhLCBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IHJlYWRzXG4gKiAgIGBlcnIubWVzc2FnZWAgLyBgZXJyLnN0YWNrYCBhcyBhIHN0cmluZyBnZXRzIGNsZWFuIG91dHB1dCDigJQgbm8gbW9qaWJha2VcbiAqICAgaW4gSlNPTiwgbm8gYFxceDFCWy4uLm1gIG5vaXNlIGluIFZlcmNlbCBsb2dzLlxuICpcbiAqIC0gVGhlIEFOU0ktZnJhbWVkIHZlcnNpb24gaXMgcmVuZGVyZWQgKipsYXppbHkqKiB2aWEgYHRvU3RyaW5nKClgIGFuZFxuICogICBgW3V0aWwuaW5zcGVjdC5jdXN0b21dYC4gV2hlbiB0aGUgZXJyb3IgaXMgdGhyb3duIGFuZCBOb2RlIHByaW50cyBpdFxuICogICB2aWEgYHV0aWwuaW5zcGVjdGAsIHRoZSB1c2VyIHNlZXMgdGhlIGNvbG9yZWQsIGZyYW1lZCBib3guIFdoZW4gaXQnc1xuICogICBhdHRhY2hlZCB0byBhIHN0cnVjdHVyZWQgbG9nIGZpZWxkLCB0aGUgY29uc3VtZXIgc2VlcyBwbGFpbiB0ZXh0LlxuICpcbiAqIC0gYGZhdGFsID0gdHJ1ZWAgbWFya3MgdGhlc2UgYXMgbm9uLXJldHJ5YWJsZS4gQ2FsbGluZyBgY3JlYXRlSG9vaygpYFxuICogICBmcm9tIGEgc3RlcCBmdW5jdGlvbiB3aWxsIG5ldmVyIHN1Y2NlZWQgbm8gbWF0dGVyIGhvdyBtYW55IHJldHJpZXMg4oCUXG4gKiAgIGJ1cm5pbmcgYXR0ZW1wdHMganVzdCBwcm9kdWNlcyBkdXBsaWNhdGVkIGxvZyBvdXRwdXQuIFRoZSBydW50aW1lJ3NcbiAqICAgYEZhdGFsRXJyb3IuaXMoZXJyKWAgZ2F0ZSByZWNvZ25pemVzIGFueSBlcnJvciB3aXRoIGBmYXRhbDogdHJ1ZWAuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb250ZXh0VmlvbGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBOb24tcmV0cnlhYmxlIOKAlCBzZWUgY2xhc3MgZG9jLiAqL1xuICByZWFkb25seSBmYXRhbCA9IHRydWU7XG5cbiAgcmVhZG9ubHkgI2NvbnRlbnQ6IEZyYW1lZENvbnRlbnQ7XG5cbiAgY29uc3RydWN0b3IoY29udGVudDogRnJhbWVkQ29udGVudCkge1xuICAgIHN1cGVyKHJlbmRlclBsYWluKGNvbnRlbnQpKTtcbiAgICB0aGlzLiNjb250ZW50ID0gY29udGVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBgY29uc29sZS5sb2coZXJyKWAgYW5kIG1vc3QgTm9kZSBpbnRlcm5hbHMgcm91dGUgdGhyb3VnaCBgdXRpbC5pbnNwZWN0YCxcbiAgICogd2hpY2ggcmVzcGVjdHMgdGhpcyBzeW1ib2wuIFJldHVybmluZyBhIGN1c3RvbSBzdHJpbmcgaGVyZSBtZWFucyB0aGVcbiAgICogdGhyb3duIGVycm9yIHByaW50cyBhcyBhIHByZXR0eSBmcmFtZSBpbiB0aGUgdGVybWluYWwgd2hpbGUgYC5tZXNzYWdlYFxuICAgKiBhbmQgYC5zdGFja2Agc3RheSBwbGFpbi5cbiAgICovXG4gIFtJTlNQRUNUX0NVU1RPTV0oKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmV0dHkgPSByZW5kZXJQcmV0dHkodGhpcy4jY29udGVudCk7XG4gICAgLy8gYHN0YWNrYCBzdGFydHMgd2l0aCBgJHtuYW1lfTogJHttZXNzYWdlfVxcbiAgICBhdCAuLi5gLiBPdXIgbWVzc2FnZSBpc1xuICAgIC8vIG11bHRpLWxpbmUgKGB0aXRsZVxcbuKVsOKWtiBkb2NzOiDigKZgKSwgc28gc2xpY2luZyBvbmx5IHRoZSBmaXJzdCBsaW5lIGdsdWVzXG4gICAgLy8gdGhlIGZyYW1lZC1kZXRhaWwgdGFpbCBvZiB0aGUgbWVzc2FnZSBvbnRvIHRoZSBwcmVwZW5kZWQgcHJldHR5IGZvcm1cbiAgICAvLyBhbmQgcmVuZGVycyBldmVyeSBkZXRhaWwgbGluZSB0d2ljZS4gU2xpY2UgcGFzdCAqYWxsKiBtZXNzYWdlIGxpbmVzLlxuICAgIGNvbnN0IG1lc3NhZ2VMaW5lQ291bnQgPSB0aGlzLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpLmxlbmd0aDtcbiAgICBjb25zdCB0YWlsID0gKHRoaXMuc3RhY2sgPz8gJycpXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuc2xpY2UobWVzc2FnZUxpbmVDb3VudClcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgICByZXR1cm4gdGFpbFxuICAgICAgPyBgJHt0aGlzLm5hbWV9OiAke3ByZXR0eX1cXG4ke3RhaWx9YFxuICAgICAgOiBgJHt0aGlzLm5hbWV9OiAke3ByZXR0eX1gO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfTogJHtyZW5kZXJQcmV0dHkodGhpcy4jY29udGVudCl9YDtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGFuIEFQSSB0aGF0IG11c3QgcnVuIGluc2lkZSBhIHdvcmtmbG93IGZ1bmN0aW9uIGlzIGNhbGxlZFxuICogZnJvbSBvdXRzaWRlIGEgd29ya2Zsb3cgY29udGV4dCAoZS5nLiBmcm9tIGEgc3RlcCBmdW5jdGlvbiBvciBmcm9tXG4gKiByZWd1bGFyIGFwcGxpY2F0aW9uIGNvZGUpLlxuICovXG5leHBvcnQgY2xhc3MgTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvciBleHRlbmRzIENvbnRleHRWaW9sYXRpb25FcnJvciB7XG4gIG5hbWUgPSAnTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvcic7XG5cbiAgY29uc3RydWN0b3IoZnVuY3Rpb25OYW1lOiBzdHJpbmcsIGRvY3NVcmw6IERvY3NVcmwpIHtcbiAgICBzdXBlcih7XG4gICAgICB0aXRsZTogW1xuICAgICAgICB7IGNvZGU6IGZ1bmN0aW9uTmFtZSB9LFxuICAgICAgICB7IHRleHQ6ICcgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBhIHdvcmtmbG93IGZ1bmN0aW9uJyB9LFxuICAgICAgXSxcbiAgICAgIGRldGFpbHM6IFt7IHR5cGU6ICdkb2NzJywgdXJsOiBkb2NzVXJsIH1dLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYW4gQVBJIHRoYXQgbXVzdCBydW4gaW5zaWRlIGEgc3RlcCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbVxuICogb3V0c2lkZSBhIHN0ZXAgY29udGV4dC5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vdEluU3RlcENvbnRleHRFcnJvciBleHRlbmRzIENvbnRleHRWaW9sYXRpb25FcnJvciB7XG4gIG5hbWUgPSAnTm90SW5TdGVwQ29udGV4dEVycm9yJztcblxuICBjb25zdHJ1Y3RvcihmdW5jdGlvbk5hbWU6IHN0cmluZywgZG9jc1VybDogRG9jc1VybCkge1xuICAgIHN1cGVyKHtcbiAgICAgIHRpdGxlOiBbXG4gICAgICAgIHsgY29kZTogZnVuY3Rpb25OYW1lIH0sXG4gICAgICAgIHsgdGV4dDogJyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIGEgc3RlcCBmdW5jdGlvbicgfSxcbiAgICAgIF0sXG4gICAgICBkZXRhaWxzOiBbeyB0eXBlOiAnZG9jcycsIHVybDogZG9jc1VybCB9XSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGFuIEFQSSB0aGF0IG11c3QgcnVuIGluc2lkZSBlaXRoZXIgYSB3b3JrZmxvdyBvciBzdGVwIGZ1bmN0aW9uXG4gKiBpcyBjYWxsZWQgZnJvbSByZWd1bGFyIGFwcGxpY2F0aW9uIGNvZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yIGV4dGVuZHMgQ29udGV4dFZpb2xhdGlvbkVycm9yIHtcbiAgbmFtZSA9ICdOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yJztcblxuICBjb25zdHJ1Y3RvcihmdW5jdGlvbk5hbWU6IHN0cmluZywgZG9jc1VybDogRG9jc1VybCkge1xuICAgIHN1cGVyKHtcbiAgICAgIHRpdGxlOiBbXG4gICAgICAgIHsgY29kZTogZnVuY3Rpb25OYW1lIH0sXG4gICAgICAgIHsgdGV4dDogJyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIGEgd29ya2Zsb3cgb3Igc3RlcCBmdW5jdGlvbicgfSxcbiAgICAgIF0sXG4gICAgICBkZXRhaWxzOiBbeyB0eXBlOiAnZG9jcycsIHVybDogZG9jc1VybCB9XSxcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IHJlZGlyZWN0U3RhY2tUb0NhbGxlciB9IGZyb20gJy4uL2NhcHR1cmUtc3RhY2suanMnO1xuaW1wb3J0IHsgTm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHRFcnJvciB9IGZyb20gJy4uL2NvbnRleHQtdmlvbGF0aW9uLWVycm9yLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvd01ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIHdvcmtmbG93TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIHdvcmtmbG93UnVuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIHdoZW4gdGhlIHdvcmtmbG93IHJ1biBzdGFydGVkLlxuICAgKi9cbiAgd29ya2Zsb3dTdGFydGVkQXQ6IERhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgd2hlcmUgdGhlIHdvcmtmbG93IGNhbiBiZSB0cmlnZ2VyZWQuXG4gICAqL1xuICB1cmw6IHN0cmluZztcblxuICAvKipcbiAgICogRmVhdHVyZSBmbGFncyBpbmRpY2F0aW5nIHdoaWNoIGNhcGFiaWxpdGllcyBhcmUgYWN0aXZlIGZvciB0aGlzIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGZlYXR1cmVzOiB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBlbmNyeXB0aW9uIGlzIGVuYWJsZWQgZm9yIHRoaXMgd29ya2Zsb3cgcnVuLlxuICAgICAqIFdoZW4gYHRydWVgLCBzdGVwIGlucHV0cywgb3V0cHV0cywgYW5kIG90aGVyIHNlcmlhbGl6ZWQgZGF0YVxuICAgICAqIGFyZSBlbmNyeXB0ZWQgYXQgcmVzdC5cbiAgICAgKi9cbiAgICBlbmNyeXB0aW9uOiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgV09SS0ZMT1dfQ09OVEVYVF9TWU1CT0wgPVxuICAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcignV09SS0ZMT1dfQ09OVEVYVCcpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya2Zsb3dNZXRhZGF0YSgpOiBXb3JrZmxvd01ldGFkYXRhIHtcbiAgLy8gSW5zaWRlIHRoZSB3b3JrZmxvdyBWTSwgdGhlIGNvbnRleHQgaXMgc3RvcmVkIGluIHRoZSBnbG9iYWxUaGlzIG9iamVjdFxuICAvLyBiZWhpbmQgYSBzeW1ib2wuXG4gIGNvbnN0IGN0eCA9IChnbG9iYWxUaGlzIGFzIGFueSlbV09SS0ZMT1dfQ09OVEVYVF9TWU1CT0xdIGFzIFdvcmtmbG93TWV0YWRhdGE7XG4gIGlmICghY3R4KSB7XG4gICAgLy8gVXNlIHRoZSBzaGFyZWQgYE5vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0RXJyb3JgIOKAlCBpdCBsaXZlcyBpblxuICAgIC8vIGBjb250ZXh0LXZpb2xhdGlvbi1lcnJvci50c2Agc3BlY2lmaWNhbGx5IHNvIHRoaXMgZmlsZSBjYW4gdGhyb3cgaXRcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGEgbW9kdWxlLWluaXQgY3ljbGUgKHRoZSBmdWxsIGBjb250ZXh0LWVycm9ycy50c2BcbiAgICAvLyBkZXBlbmRzIG9uIHRoaXMgZmlsZSdzIGBXT1JLRkxPV19DT05URVhUX1NZTUJPTGApLlxuICAgIGNvbnN0IGVyciA9IG5ldyBOb3RJbldvcmtmbG93T3JTdGVwQ29udGV4dEVycm9yKFxuICAgICAgJ2dldFdvcmtmbG93TWV0YWRhdGEoKScsXG4gICAgICAnaHR0cHM6Ly93b3JrZmxvdy1zZGsuZGV2L2RvY3MvYXBpLXJlZmVyZW5jZS93b3JrZmxvdy9nZXQtd29ya2Zsb3ctbWV0YWRhdGEnXG4gICAgKTtcbiAgICAvLyBSZWRpcmVjdCB0aGUgc3RhY2sgdG8gdGhlIGNhbGxlciBzbyB0ZXJtaW5hbCBvdmVybGF5cyAoTmV4dC5qcyxcbiAgICAvLyBUdXJib3BhY2ssIFZTIENvZGUpIHBvaW50IGF0IHRoZSB1c2VyJ3MgY29kZSByYXRoZXIgdGhhbiB0aGlzIGZyYW1lLlxuICAgIHJlZGlyZWN0U3RhY2tUb0NhbGxlcihlcnIsIGdldFdvcmtmbG93TWV0YWRhdGEpO1xuICAgIHRocm93IGVycjtcbiAgfVxuICByZXR1cm4gY3R4O1xufVxuIiwgImltcG9ydCB7IHJlZGlyZWN0U3RhY2tUb0NhbGxlciB9IGZyb20gJy4vY2FwdHVyZS1zdGFjay5qcyc7XG5pbXBvcnQge1xuICBDb250ZXh0VmlvbGF0aW9uRXJyb3IsXG4gIHR5cGUgRGV0YWlsLFxuICB0eXBlIERvY3NVcmwsXG4gIE5vdEluU3RlcENvbnRleHRFcnJvcixcbiAgTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvcixcbiAgTm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHRFcnJvcixcbn0gZnJvbSAnLi9jb250ZXh0LXZpb2xhdGlvbi1lcnJvci5qcyc7XG5pbXBvcnQge1xuICBXT1JLRkxPV19DT05URVhUX1NZTUJPTCxcbiAgdHlwZSBXb3JrZmxvd01ldGFkYXRhLFxufSBmcm9tICcuL3dvcmtmbG93L2dldC13b3JrZmxvdy1tZXRhZGF0YS5qcyc7XG5cbi8vIFJlLWV4cG9ydCB0aGUgc3RydWN0dXJhbCBiYXNlICsgc3ViY2xhc3NlcyBzbyB0aGUgcHVibGljIHN1cmZhY2UgaXMgYVxuLy8gc2luZ2xlIGltcG9ydCBwb2ludC4gVGhlIGJhc2UgKyBzaW1wbGVyIHN1YmNsYXNzZXMgbGl2ZSBpblxuLy8gYGNvbnRleHQtdmlvbGF0aW9uLWVycm9yLnRzYCBiZWNhdXNlIGBnZXQtd29ya2Zsb3ctbWV0YWRhdGEudHNgIG5lZWRzIHRvXG4vLyB0aHJvdyBvbmUgd2l0aG91dCBjcmVhdGluZyBhbiBpbXBvcnQgY3ljbGUgd2l0aCB0aGlzIGZpbGUuXG5leHBvcnQge1xuICBDb250ZXh0VmlvbGF0aW9uRXJyb3IsXG4gIE5vdEluU3RlcENvbnRleHRFcnJvcixcbiAgTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvcixcbiAgTm90SW5Xb3JrZmxvd09yU3RlcENvbnRleHRFcnJvcixcbn07XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYW4gQVBJIHRoYXQgTVVTVCBOT1QgcnVuIGluc2lkZSBhIHdvcmtmbG93IGZ1bmN0aW9uIGlzIGNhbGxlZFxuICogZnJvbSBvbmUgKGUuZy4gYHJlc3VtZUhvb2soKWAsIHdoaWNoIHdvdWxkIGNhdXNlIGRldGVybWluaXNtIGlzc3VlcykuXG4gKiBUaGUgbWVzc2FnZSBuYW1lcyB0aGUgc3BlY2lmaWMgd29ya2Zsb3cgdGhhdCBtYWRlIHRoZSBvZmZlbmRpbmcgY2FsbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFVuYXZhaWxhYmxlSW5Xb3JrZmxvd0NvbnRleHRFcnJvciBleHRlbmRzIENvbnRleHRWaW9sYXRpb25FcnJvciB7XG4gIG5hbWUgPSAnVW5hdmFpbGFibGVJbldvcmtmbG93Q29udGV4dEVycm9yJztcblxuICBjb25zdHJ1Y3RvcihmdW5jdGlvbk5hbWU6IHN0cmluZywgZG9jc1VybDogRG9jc1VybCkge1xuICAgIGNvbnN0IGN0eCA9IChnbG9iYWxUaGlzIGFzIGFueSlbV09SS0ZMT1dfQ09OVEVYVF9TWU1CT0xdIGFzXG4gICAgICB8IFdvcmtmbG93TWV0YWRhdGFcbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9IGN0eD8ud29ya2Zsb3dOYW1lO1xuXG4gICAgLy8gQXBwbHkgZGltIHN0eWxpbmcgdG8gYHdvcmtmbG93L2AgLyBgc3RlcC9gIHByZWZpeGVzIGluIHRoZSBxdWFsaWZpZWRcbiAgICAvLyBuYW1lIHNvIHRoZSBwYXJ0IHRoZSB1c2VyIG5hbWVkIHN0YW5kcyBvdXQuXG4gICAgY29uc3QgbmFtZVNlZ3MgPSAoKCkgPT4ge1xuICAgICAgaWYgKCF3b3JrZmxvd05hbWUpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgbSA9IHdvcmtmbG93TmFtZS5tYXRjaCgvXih3b3JrZmxvd1xcL3xzdGVwXFwvKSguKikkLyk7XG4gICAgICBpZiAobSkgcmV0dXJuIFt7IGRpbTogbVsxXSB9LCB7IHRleHQ6IG1bMl0gfV0gYXMgY29uc3Q7XG4gICAgICByZXR1cm4gW3sgdGV4dDogd29ya2Zsb3dOYW1lIH1dIGFzIGNvbnN0O1xuICAgIH0pKCk7XG5cbiAgICBjb25zdCBjb250ZXh0TGluZTogRGV0YWlsID0gbmFtZVNlZ3NcbiAgICAgID8ge1xuICAgICAgICAgIHR5cGU6ICdwbGFpbicsXG4gICAgICAgICAgc2VnbWVudHM6IFtcbiAgICAgICAgICAgIHsgdGV4dDogJ3RoaXMgY2FsbCB3YXMgbWFkZSBmcm9tIHRoZSAnIH0sXG4gICAgICAgICAgICAuLi5uYW1lU2VncyxcbiAgICAgICAgICAgIHsgdGV4dDogJyB3b3JrZmxvdyBjb250ZXh0LicgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICB0eXBlOiAncGxhaW4nLFxuICAgICAgICAgIHNlZ21lbnRzOiBbeyB0ZXh0OiAndGhpcyBjYWxsIHdhcyBtYWRlIGZyb20gYSB3b3JrZmxvdyBjb250ZXh0LicgfV0sXG4gICAgICAgIH07XG5cbiAgICBzdXBlcih7XG4gICAgICB0aXRsZTogW1xuICAgICAgICB7IGNvZGU6IGZ1bmN0aW9uTmFtZSB9LFxuICAgICAgICB7IHRleHQ6ICcgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGEgd29ya2Zsb3cgY29udGV4dC4nIH0sXG4gICAgICBdLFxuICAgICAgZGV0YWlsczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ3BsYWluJyxcbiAgICAgICAgICBzZWdtZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiAnY2FsbGluZyB0aGlzIGluIGEgd29ya2Zsb3cgY29udGV4dCBjYW4gY2F1c2UgZGV0ZXJtaW5pc20gaXNzdWVzLicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRleHRMaW5lLFxuICAgICAgICB7IHR5cGU6ICdkb2NzJywgdXJsOiBkb2NzVXJsIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3cgYSB7QGxpbmsgTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvcn0gd2hvc2Ugc3RhY2sgdHJhY2UgcG9pbnRzIGF0IHRoZVxuICogdXNlciBjb2RlIHRoYXQgY2FsbGVkIGBzdGFja1N0YXJ0Rm5gLCBub3QgYXQgb3VyIGZyYW1ld29yayBpbnRlcm5hbHMuXG4gKlxuICogUHJlZmVyIHRoaXMgb3ZlciBgdGhyb3cgbmV3IE5vdEluV29ya2Zsb3dDb250ZXh0RXJyb3IoLi4uKWAgc28gdG9vbGluZ1xuICogKE5leHQuanMgZXJyb3Igb3ZlcmxheSwgVlMgQ29kZSB0ZXJtaW5hbCBsaW5raWZpZXIsIFNlbnRyeSwgZXRjLikgc2hvd3NcbiAqIHRoZSB1c2VyJ3MgY2FsbCBzaXRlIGFzIHRoZSByZWxldmFudCBmcmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQoXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICBkb2NzVXJsOiBEb2NzVXJsLFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vQmFubmVkVHlwZXM6IG1hdGNoZXMgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2VcbiAgc3RhY2tTdGFydEZuOiBGdW5jdGlvblxuKTogbmV2ZXIge1xuICBjb25zdCBlcnIgPSBuZXcgTm90SW5Xb3JrZmxvd0NvbnRleHRFcnJvcihmdW5jdGlvbk5hbWUsIGRvY3NVcmwpO1xuICByZWRpcmVjdFN0YWNrVG9DYWxsZXIoZXJyLCBzdGFja1N0YXJ0Rm4pO1xuICB0aHJvdyBlcnI7XG59XG5cbi8qKiBTZWUge0BsaW5rIHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHR9LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93Tm90SW5TdGVwQ29udGV4dChcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGRvY3NVcmw6IERvY3NVcmwsXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9CYW5uZWRUeXBlczogbWF0Y2hlcyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZVxuICBzdGFja1N0YXJ0Rm46IEZ1bmN0aW9uXG4pOiBuZXZlciB7XG4gIGNvbnN0IGVyciA9IG5ldyBOb3RJblN0ZXBDb250ZXh0RXJyb3IoZnVuY3Rpb25OYW1lLCBkb2NzVXJsKTtcbiAgcmVkaXJlY3RTdGFja1RvQ2FsbGVyKGVyciwgc3RhY2tTdGFydEZuKTtcbiAgdGhyb3cgZXJyO1xufVxuXG4vKiogU2VlIHtAbGluayB0aHJvd05vdEluV29ya2Zsb3dDb250ZXh0fS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd05vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0KFxuICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgZG9jc1VybDogRG9jc1VybCxcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0Jhbm5lZFR5cGVzOiBtYXRjaGVzIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlXG4gIHN0YWNrU3RhcnRGbjogRnVuY3Rpb25cbik6IG5ldmVyIHtcbiAgY29uc3QgZXJyID0gbmV3IE5vdEluV29ya2Zsb3dPclN0ZXBDb250ZXh0RXJyb3IoZnVuY3Rpb25OYW1lLCBkb2NzVXJsKTtcbiAgcmVkaXJlY3RTdGFja1RvQ2FsbGVyKGVyciwgc3RhY2tTdGFydEZuKTtcbiAgdGhyb3cgZXJyO1xufVxuXG4vKiogU2VlIHtAbGluayB0aHJvd05vdEluV29ya2Zsb3dDb250ZXh0fS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd1VuYXZhaWxhYmxlSW5Xb3JrZmxvd0NvbnRleHQoXG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICBkb2NzVXJsOiBEb2NzVXJsLFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vQmFubmVkVHlwZXM6IG1hdGNoZXMgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2VcbiAgc3RhY2tTdGFydEZuOiBGdW5jdGlvblxuKTogbmV2ZXIge1xuICBjb25zdCBlcnIgPSBuZXcgVW5hdmFpbGFibGVJbldvcmtmbG93Q29udGV4dEVycm9yKGZ1bmN0aW9uTmFtZSwgZG9jc1VybCk7XG4gIHJlZGlyZWN0U3RhY2tUb0NhbGxlcihlcnIsIHN0YWNrU3RhcnRGbik7XG4gIHRocm93IGVycjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnbXMnO1xuaW1wb3J0IG1zIGZyb20gJ21zJztcblxuLyoqXG4gKiBQYXJzZXMgYSBkdXJhdGlvbiBwYXJhbWV0ZXIgKHN0cmluZywgbnVtYmVyLCBvciBEYXRlKSBhbmQgcmV0dXJucyBhIERhdGUgb2JqZWN0XG4gKiByZXByZXNlbnRpbmcgd2hlbiB0aGUgZHVyYXRpb24gc2hvdWxkIGVsYXBzZS5cbiAqXG4gKiAtIEZvciBzdHJpbmdzOiBQYXJzZXMgZHVyYXRpb24gc3RyaW5ncyBsaWtlIFwiMXNcIiwgXCI1bVwiLCBcIjFoXCIsIGV0Yy4gdXNpbmcgdGhlIGBtc2AgbGlicmFyeVxuICogLSBGb3IgbnVtYmVyczogVHJlYXRzIGFzIG1pbGxpc2Vjb25kcyBmcm9tIG5vd1xuICogLSBGb3IgRGF0ZSBvYmplY3RzOiBSZXR1cm5zIHRoZSBkYXRlIGRpcmVjdGx5IChoYW5kbGVzIGJvdGggRGF0ZSBpbnN0YW5jZXMgYW5kIGRhdGUtbGlrZSBvYmplY3RzIGZyb20gZGVzZXJpYWxpemF0aW9uKVxuICpcbiAqIEBwYXJhbSBwYXJhbSAtIFRoZSBkdXJhdGlvbiBwYXJhbWV0ZXIgKFN0cmluZ1ZhbHVlLCBEYXRlLCBvciBudW1iZXIgb2YgbWlsbGlzZWNvbmRzKVxuICogQHJldHVybnMgQSBEYXRlIG9iamVjdCByZXByZXNlbnRpbmcgd2hlbiB0aGUgZHVyYXRpb24gc2hvdWxkIGVsYXBzZVxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYXJhbWV0ZXIgaXMgaW52YWxpZCBvciBjYW5ub3QgYmUgcGFyc2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uVG9EYXRlKHBhcmFtOiBTdHJpbmdWYWx1ZSB8IERhdGUgfCBudW1iZXIpOiBEYXRlIHtcbiAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBkdXJhdGlvbk1zID0gbXMocGFyYW0pO1xuICAgIGlmICh0eXBlb2YgZHVyYXRpb25NcyAhPT0gJ251bWJlcicgfHwgZHVyYXRpb25NcyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZHVyYXRpb246IFwiJHtwYXJhbX1cIi4gRXhwZWN0ZWQgYSB2YWxpZCBkdXJhdGlvbiBzdHJpbmcgbGlrZSBcIjFzXCIsIFwiMW1cIiwgXCIxaFwiLCBldGMuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkgKyBkdXJhdGlvbk1zKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcGFyYW0gPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHBhcmFtIDwgMCB8fCAhTnVtYmVyLmlzRmluaXRlKHBhcmFtKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBkdXJhdGlvbjogJHtwYXJhbX0uIEV4cGVjdGVkIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLm5vdygpICsgcGFyYW0pO1xuICB9IGVsc2UgaWYgKFxuICAgIHBhcmFtIGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgIChwYXJhbSAmJlxuICAgICAgdHlwZW9mIHBhcmFtID09PSAnb2JqZWN0JyAmJlxuICAgICAgdHlwZW9mIChwYXJhbSBhcyBhbnkpLmdldFRpbWUgPT09ICdmdW5jdGlvbicpXG4gICkge1xuICAgIC8vIEhhbmRsZSBib3RoIERhdGUgaW5zdGFuY2VzIGFuZCBkYXRlLWxpa2Ugb2JqZWN0cyAoZnJvbSBkZXNlcmlhbGl6YXRpb24pXG4gICAgcmV0dXJuIHBhcmFtIGluc3RhbmNlb2YgRGF0ZSA/IHBhcmFtIDogbmV3IERhdGUoKHBhcmFtIGFzIGFueSkuZ2V0VGltZSgpKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBkdXJhdGlvbiBwYXJhbWV0ZXIuIEV4cGVjdGVkIGEgZHVyYXRpb24gc3RyaW5nLCBudW1iZXIgKG1pbGxpc2Vjb25kcyksIG9yIERhdGUgb2JqZWN0LmBcbiAgICApO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgcGFyc2VEdXJhdGlvblRvRGF0ZSB9IGZyb20gJ0B3b3JrZmxvdy91dGlscyc7XG5cbmltcG9ydCB0eXBlIHsgU3RyaW5nVmFsdWUgfSBmcm9tICdtcyc7XG5cbi8vIE5vdGU6IGBBbnNpYCBoZWxwZXJzIGxpdmUgdW5kZXIgdGhlIGBAd29ya2Zsb3cvZXJyb3JzL2Fuc2lgIHN1YnBhdGggc28gdGhlXG4vLyBtYWluIGVudHJ5IHBvaW50IGRvZXNuJ3QgcHVsbCBgY2hhbGtgIChhbmQgaXRzIEVTTSBtYWNoaW5lcnkpIGludG8gZXZlcnlcbi8vIGNvbnN1bWVyIOKAlCBtb3N0IHBsYWNlcyB0aGF0IGBpbXBvcnQgZnJvbSAnQHdvcmtmbG93L2Vycm9ycydgIG9ubHkgd2FudCB0aGVcbi8vIGVycm9yIGNsYXNzZXMgYW5kIG5ldmVyIHJlbmRlciBmcmFtZWQgbWVzc2FnZXMuXG5cbmNvbnN0IEJBU0VfVVJMID0gJ2h0dHBzOi8vd29ya2Zsb3ctc2RrLmRldi9lcnInO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBFcnJvciB3aXRob3V0IHJlbHlpbmcgb24gTm9kZS5qcyB1dGlsaXRpZXMuXG4gKiBUaGlzIGlzIG5lZWRlZCBmb3IgZXJyb3IgY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIGluIFZNIGNvbnRleHRzIHdoZXJlXG4gKiBOb2RlLmpzIGltcG9ydHMgYXJlIG5vdCBhdmFpbGFibGUuXG4gKi9cbmZ1bmN0aW9uIGlzRXJyb3IodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IG5hbWU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH0ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICduYW1lJyBpbiB2YWx1ZSAmJlxuICAgICdtZXNzYWdlJyBpbiB2YWx1ZVxuICApO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQ29tcG9zZSBhIGZyYW1lZC1kZXRhaWwgYm9keSBmb3IgYW4gZXJyb3IgbWVzc2FnZSDigJQgc2FtZSBg4pWw4pa2YCAvXG4gKiBg4pSc4pa2YCBib3gtZHJhd2luZyBzdHJ1Y3R1cmUgdXNlZCBieSBgQ29udGV4dFZpb2xhdGlvbkVycm9yYCAoaW5cbiAqIGBAd29ya2Zsb3cvY29yZWApLCBzbyBldmVyeSBlcnJvciBjbGFzcyB3aXRoIGEgaGludCBvciBkb2NzIHNsdWdcbiAqIHJlbmRlcnMgY29uc2lzdGVudGx5OlxuICpcbiAqICAgICA8dGl0bGU+XG4gKiAgICAg4pSc4pa2IGhpbnQ6IDxoaW50PlxuICogICAgIOKVsOKWtiBkb2NzOiBodHRwczovL3dvcmtmbG93LXNkay5kZXYvZXJyLzxzbHVnPlxuICpcbiAqIFBsYWluIHRleHQgb25seSDigJQgbm8gQU5TSSBoZXJlLCBzaW5jZSBgQHdvcmtmbG93L2Vycm9yc2AncyBtYWluIGVudHJ5XG4gKiBzdGF5cyBjaGFsay1mcmVlLiBUaGUgcnVudGltZSBsb2dnZXIgcmVuZGVycyB0aGUgc2FtZSBjaGFycyB3aXRoXG4gKiBkaW0gc3R5bGluZyBhdCBsb2cgdGltZS5cbiAqXG4gKiBSZXR1cm5zIGp1c3QgYHRpdGxlYCB3aGVuIHRoZXJlIGFyZSBubyBkZXRhaWxzIHRvIGZyYW1lLiBNdWx0aS1saW5lXG4gKiBkZXRhaWwgdmFsdWVzIGFyZSBpbmRlbnRlZCB1bmRlciB0aGVpciBicmFuY2ggc28gdGhlIHRyZWUgc3RheXNcbiAqIHJlYWRhYmxlLlxuICovXG5mdW5jdGlvbiBhcHBlbmRGcmFtZWREZXRhaWxzKFxuICB0aXRsZTogc3RyaW5nLFxuICBkZXRhaWxzOiBSZWFkb25seUFycmF5PHsgbGFiZWw6ICdoaW50JyB8ICdkb2NzJzsgdmFsdWU6IHN0cmluZyB9PlxuKTogc3RyaW5nIHtcbiAgaWYgKGRldGFpbHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGl0bGU7XG4gIGNvbnN0IGxpbmVzID0gW3RpdGxlXTtcbiAgZGV0YWlscy5mb3JFYWNoKChkZXRhaWwsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPT09IGRldGFpbHMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBoZWFkID0gaXNMYXN0ID8gJ+KVsOKWtiAnIDogJ+KUnOKWtiAnO1xuICAgIGNvbnN0IGNvbnQgPSBpc0xhc3QgPyAnICAgJyA6ICfilIIgICc7XG4gICAgY29uc3QgdGV4dCA9IGAke2RldGFpbC5sYWJlbH06ICR7ZGV0YWlsLnZhbHVlfWA7XG4gICAgdGV4dFxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLmZvckVhY2goKGxpbmUsIGkpID0+IGxpbmVzLnB1c2goYCR7aSA9PT0gMCA/IGhlYWQgOiBjb250fSR7bGluZX1gKSk7XG4gIH0pO1xuICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhbWVkRGV0YWlscyhcbiAgaGludDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBzbHVnOiBFcnJvclNsdWcgfCB1bmRlZmluZWRcbik6IFJlYWRvbmx5QXJyYXk8eyBsYWJlbDogJ2hpbnQnIHwgJ2RvY3MnOyB2YWx1ZTogc3RyaW5nIH0+IHtcbiAgY29uc3Qgb3V0OiBBcnJheTx7IGxhYmVsOiAnaGludCcgfCAnZG9jcyc7IHZhbHVlOiBzdHJpbmcgfT4gPSBbXTtcbiAgaWYgKGhpbnQpIG91dC5wdXNoKHsgbGFiZWw6ICdoaW50JywgdmFsdWU6IGhpbnQgfSk7XG4gIGlmIChzbHVnKSBvdXQucHVzaCh7IGxhYmVsOiAnZG9jcycsIHZhbHVlOiBgJHtCQVNFX1VSTH0vJHtzbHVnfWAgfSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBBbGwgdGhlIHNsdWdzIG9mIHRoZSBlcnJvcnMgdXNlZCBmb3IgZG9jdW1lbnRhdGlvbiBsaW5rcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEVSUk9SX1NMVUdTID0ge1xuICBOT0RFX0pTX01PRFVMRV9JTl9XT1JLRkxPVzogJ25vZGUtanMtbW9kdWxlLWluLXdvcmtmbG93JyxcbiAgU1RBUlRfSU5WQUxJRF9XT1JLRkxPV19GVU5DVElPTjogJ3N0YXJ0LWludmFsaWQtd29ya2Zsb3ctZnVuY3Rpb24nLFxuICBTRVJJQUxJWkFUSU9OX0ZBSUxFRDogJ3NlcmlhbGl6YXRpb24tZmFpbGVkJyxcbiAgV0VCSE9PS19JTlZBTElEX1JFU1BPTkRfV0lUSF9WQUxVRTogJ3dlYmhvb2staW52YWxpZC1yZXNwb25kLXdpdGgtdmFsdWUnLFxuICBXRUJIT09LX1JFU1BPTlNFX05PVF9TRU5UOiAnd2ViaG9vay1yZXNwb25zZS1ub3Qtc2VudCcsXG4gIEZFVENIX0lOX1dPUktGTE9XX0ZVTkNUSU9OOiAnZmV0Y2gtaW4td29ya2Zsb3cnLFxuICBUSU1FT1VUX0ZVTkNUSU9OU19JTl9XT1JLRkxPVzogJ3RpbWVvdXQtaW4td29ya2Zsb3cnLFxuICBIT09LX0NPTkZMSUNUOiAnaG9vay1jb25mbGljdCcsXG4gIENPUlJVUFRFRF9FVkVOVF9MT0c6ICdjb3JydXB0ZWQtZXZlbnQtbG9nJyxcbiAgU1RFUF9OT1RfUkVHSVNURVJFRDogJ3N0ZXAtbm90LXJlZ2lzdGVyZWQnLFxuICBXT1JLRkxPV19OT1RfUkVHSVNURVJFRDogJ3dvcmtmbG93LW5vdC1yZWdpc3RlcmVkJyxcbn0gYXMgY29uc3Q7XG5cbnR5cGUgRXJyb3JTbHVnID0gKHR5cGVvZiBFUlJPUl9TTFVHUylba2V5b2YgdHlwZW9mIEVSUk9SX1NMVUdTXTtcblxuaW50ZXJmYWNlIFdvcmtmbG93RXJyb3JPcHRpb25zIGV4dGVuZHMgRXJyb3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzbHVnIG9mIHRoZSBlcnJvci4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBsaW5rIHRvIHRoZSBlcnJvciBkb2N1bWVudGF0aW9uLlxuICAgKi9cbiAgc2x1Zz86IEVycm9yU2x1Zztcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIFdvcmtmbG93LXJlbGF0ZWQgZXJyb3JzLlxuICpcbiAqIFRoaXMgZXJyb3IgaXMgdGhyb3duIGJ5IHRoZSBXb3JrZmxvdyBTREsgd2hlbiBpbnRlcm5hbCBvcGVyYXRpb25zIGZhaWwuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGNsYXNzIHdpdGggYGluc3RhbmNlb2ZgIHRvIGNhdGNoIGFueSBXb3JrZmxvdyBTREsgZXJyb3IuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiB0cnkge1xuICogICBhd2FpdCBnZXRSdW4ocnVuSWQpO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKGVycm9yIGluc3RhbmNlb2YgV29ya2Zsb3dFcnJvcikge1xuICogICAgIGNvbnNvbGUuZXJyb3IoJ1dvcmtmbG93IFNESyBlcnJvcjonLCBlcnJvci5tZXNzYWdlKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjYXVzZT86IHVua25vd247XG5cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBvcHRpb25zPzogV29ya2Zsb3dFcnJvck9wdGlvbnMpIHtcbiAgICBjb25zdCBtc2dEb2NzID0gYXBwZW5kRnJhbWVkRGV0YWlscyhcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBidWlsZEZyYW1lZERldGFpbHModW5kZWZpbmVkLCBvcHRpb25zPy5zbHVnKVxuICAgICk7XG4gICAgc3VwZXIobXNnRG9jcywgeyBjYXVzZTogb3B0aW9ucz8uY2F1c2UgfSk7XG4gICAgLy8gT25seSBzZXQgYGNhdXNlYCB3aGVuIGFjdHVhbGx5IHByb3ZpZGVkLiBBc3NpZ25pbmcgYHVuZGVmaW5lZGBcbiAgICAvLyB1bmNvbmRpdGlvbmFsbHkgbWFrZXMgYGNhdXNlYCBhbiBlbnVtZXJhYmxlIG93biBwcm9wZXJ0eSwgd2hpY2hcbiAgICAvLyBwb2xsdXRlcyBgdXRpbC5pbnNwZWN0KGVycilgIG91dHB1dCB3aXRoIGB7IGNhdXNlOiB1bmRlZmluZWQsIOKApiB9YFxuICAgIC8vIG9uIGV2ZXJ5IG5vLWNhdXNlIHN1YmNsYXNzLiBUaGUgYHN1cGVyKC4uLilgIGNhbGwgYWJvdmUgYWxyZWFkeVxuICAgIC8vIGNvbmRpdGlvbmFsbHkgc2V0cyBub24tZW51bWVyYWJsZSBgLmNhdXNlYCB3aGVuIGBvcHRpb25zLmNhdXNlYFxuICAgIC8vIGlzIHByb3ZpZGVkLlxuICAgIGlmIChvcHRpb25zPy5jYXVzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNhdXNlID0gb3B0aW9ucy5jYXVzZTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdGhpcy5zdGFjayA9IGAke3RoaXMuc3RhY2t9XFxuQ2F1c2VkIGJ5OiAke29wdGlvbnMuY2F1c2Uuc3RhY2t9YDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBXb3JrZmxvd0Vycm9yIHtcbiAgICByZXR1cm4gaXNFcnJvcih2YWx1ZSkgJiYgdmFsdWUubmFtZSA9PT0gJ1dvcmtmbG93RXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSB3b3JsZCAoc3RvcmFnZSBiYWNrZW5kKSBvcGVyYXRpb24gZmFpbHMgdW5leHBlY3RlZGx5LlxuICpcbiAqIFRoaXMgaXMgdGhlIGNhdGNoLWFsbCBlcnJvciBmb3Igd29ybGQgaW1wbGVtZW50YXRpb25zLiBTcGVjaWZpYyxcbiAqIHdlbGwta25vd24gZmFpbHVyZSBtb2RlcyBoYXZlIGRlZGljYXRlZCBlcnJvciB0eXBlcyAoZS5nLlxuICogRW50aXR5Q29uZmxpY3RFcnJvciwgUnVuRXhwaXJlZEVycm9yLCBUaHJvdHRsZUVycm9yKS4gVGhpcyBlcnJvclxuICogY292ZXJzIGV2ZXJ5dGhpbmcgZWxzZSDigJQgdmFsaWRhdGlvbiBmYWlsdXJlcywgbWlzc2luZyBlbnRpdGllc1xuICogd2l0aG91dCBhIGRlZGljYXRlZCB0eXBlLCBvciB1bmV4cGVjdGVkIEhUVFAgZXJyb3JzIGZyb20gd29ybGQtdmVyY2VsLlxuICovXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dXb3JsZEVycm9yIGV4dGVuZHMgV29ya2Zsb3dFcnJvciB7XG4gIHN0YXR1cz86IG51bWJlcjtcbiAgY29kZT86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xuICAvKiogUmV0cnktQWZ0ZXIgdmFsdWUgaW4gc2Vjb25kcywgcHJlc2VudCBvbiA0MjkgYW5kIDQyNSByZXNwb25zZXMgKi9cbiAgcmV0cnlBZnRlcj86IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHN0YXR1cz86IG51bWJlcjtcbiAgICAgIHVybD86IHN0cmluZztcbiAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgICByZXRyeUFmdGVyPzogbnVtYmVyO1xuICAgICAgY2F1c2U/OiB1bmtub3duO1xuICAgIH1cbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSwge1xuICAgICAgY2F1c2U6IG9wdGlvbnM/LmNhdXNlLFxuICAgIH0pO1xuICAgIHRoaXMubmFtZSA9ICdXb3JrZmxvd1dvcmxkRXJyb3InO1xuICAgIHRoaXMuc3RhdHVzID0gb3B0aW9ucz8uc3RhdHVzO1xuICAgIHRoaXMuY29kZSA9IG9wdGlvbnM/LmNvZGU7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zPy51cmw7XG4gICAgdGhpcy5yZXRyeUFmdGVyID0gb3B0aW9ucz8ucmV0cnlBZnRlcjtcbiAgfVxuXG4gIHN0YXRpYyBpcyh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFdvcmtmbG93V29ybGRFcnJvciB7XG4gICAgcmV0dXJuIGlzRXJyb3IodmFsdWUpICYmIHZhbHVlLm5hbWUgPT09ICdXb3JrZmxvd1dvcmxkRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSB3b3JrZmxvdyBydW4gZmFpbHMgZHVyaW5nIGV4ZWN1dGlvbi5cbiAqXG4gKiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSB3b3JrZmxvdyBlbmNvdW50ZXJlZCBhIGZhdGFsIGVycm9yIGFuZCBjYW5ub3RcbiAqIGNvbnRpbnVlLiBJdCBpcyB0aHJvd24gd2hlbiBhd2FpdGluZyBgcnVuLnJldHVyblZhbHVlYCBvbiBhIHJ1biB3aG9zZSBzdGF0dXNcbiAqIGlzIGAnZmFpbGVkJ2AuIFRoZSBgY2F1c2VgIHByb3BlcnR5IGNvbnRhaW5zIHRoZSB1bmRlcmx5aW5nIGVycm9yIHdpdGggaXRzXG4gKiBtZXNzYWdlLCBzdGFjayB0cmFjZSwgYW5kIG9wdGlvbmFsIGVycm9yIGNvZGUuXG4gKlxuICogVXNlIHRoZSBzdGF0aWMgYFdvcmtmbG93UnVuRmFpbGVkRXJyb3IuaXMoKWAgbWV0aG9kIGZvciB0eXBlLXNhZmUgY2hlY2tpbmdcbiAqIGluIGNhdGNoIGJsb2Nrcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IFdvcmtmbG93UnVuRmFpbGVkRXJyb3IgfSBmcm9tIFwid29ya2Zsb3cvaW50ZXJuYWwvZXJyb3JzXCI7XG4gKlxuICogdHJ5IHtcbiAqICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuLnJldHVyblZhbHVlO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKFdvcmtmbG93UnVuRmFpbGVkRXJyb3IuaXMoZXJyb3IpKSB7XG4gKiAgICAgY29uc29sZS5lcnJvcihgUnVuICR7ZXJyb3IucnVuSWR9IGZhaWxlZDpgLCBlcnJvci5jYXVzZS5tZXNzYWdlKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1J1bkZhaWxlZEVycm9yIGV4dGVuZHMgV29ya2Zsb3dFcnJvciB7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgaGlnaC1sZXZlbCBlcnJvciBjYXRlZ29yeSAoZS5nLiBVU0VSX0VSUk9SLCBSVU5USU1FX0VSUk9SKSBmb3IgdGhlXG4gICAqIGZhaWxlZCBydW4sIGZyb20gdGhlIHJ1bl9mYWlsZWQgZXZlbnQncyBgZXJyb3JDb2RlYCBmaWVsZC5cbiAgICovXG4gIGVycm9yQ29kZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBvcmlnaW5hbCB0aHJvd24gdmFsdWUgZnJvbSB0aGUgZmFpbGVkIHdvcmtmbG93IHJ1biwgaHlkcmF0ZWQgdGhyb3VnaFxuICAgKiB0aGUgd29ya2Zsb3cgc2VyaWFsaXphdGlvbiBwaXBlbGluZS4gUHJlc2VydmVzIHRoZSBvcmlnaW5hbCB0eXBlIGlkZW50aXR5XG4gICAqIChFcnJvciBzdWJjbGFzc2VzLCBGYXRhbEVycm9yLCBjdXN0b20gY2xhc3NlcyB3aXRoIFdPUktGTE9XX1NFUklBTElaRSwgZXRjLilcbiAgICogYW5kIGN1c3RvbSBwcm9wZXJ0aWVzIChjYXVzZSBjaGFpbnMsIGV0Yy4pLlxuICAgKlxuICAgKiBOb3RlOiBhbnkgSmF2YVNjcmlwdCB2YWx1ZSBjYW4gYmUgdGhyb3duLCBzbyB0aGlzIGlzIHR5cGVkIGFzIGB1bmtub3duYC5cbiAgICogVHlwaWNhbCB2YWx1ZXMgYXJlIEVycm9yIGluc3RhbmNlcywgYnV0IHN0cmluZ3MsIG9iamVjdHMsIGV0Yy4gYXJlIGFsc29cbiAgICogcG9zc2libGUuXG4gICAqL1xuICBkZWNsYXJlIGNhdXNlOiB1bmtub3duO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgZXJyb3I6IHVua25vd24sXG4gICAgb3B0aW9uczogeyBlcnJvckNvZGU/OiBzdHJpbmcgfSA9IHt9XG4gICkge1xuICAgIC8vIERlcml2ZSBhIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgZnJvbSB0aGUgaHlkcmF0ZWQgdGhyb3duIHZhbHVlLlxuICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICA/IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgOiB0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBlcnJvclxuICAgICAgICAgIDogZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAnbWVzc2FnZScgaW4gZXJyb3JcbiAgICAgICAgICAgID8gU3RyaW5nKChlcnJvciBhcyB7IG1lc3NhZ2U6IHVua25vd24gfSkubWVzc2FnZSlcbiAgICAgICAgICAgIDogJ1Vua25vd24gZXJyb3InO1xuXG4gICAgc3VwZXIoYFdvcmtmbG93IHJ1biBcIiR7cnVuSWR9XCIgZmFpbGVkOiAke21lc3NhZ2V9YCwge1xuICAgICAgY2F1c2U6IGVycm9yLFxuICAgIH0pO1xuICAgIHRoaXMubmFtZSA9ICdXb3JrZmxvd1J1bkZhaWxlZEVycm9yJztcbiAgICB0aGlzLnJ1bklkID0gcnVuSWQ7XG4gICAgaWYgKG9wdGlvbnMuZXJyb3JDb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZXJyb3JDb2RlID0gb3B0aW9ucy5lcnJvckNvZGU7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgV29ya2Zsb3dSdW5GYWlsZWRFcnJvciB7XG4gICAgcmV0dXJuIGlzRXJyb3IodmFsdWUpICYmIHZhbHVlLm5hbWUgPT09ICdXb3JrZmxvd1J1bkZhaWxlZEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gZ2V0IHJlc3VsdHMgZnJvbSBhbiBpbmNvbXBsZXRlIHdvcmtmbG93IHJ1bi5cbiAqXG4gKiBUaGlzIGVycm9yIG9jY3VycyB3aGVuIHlvdSB0cnkgdG8gYWNjZXNzIHRoZSByZXN1bHQgb2YgYSB3b3JrZmxvd1xuICogdGhhdCBpcyBzdGlsbCBydW5uaW5nIG9yIGhhc24ndCBjb21wbGV0ZWQgeWV0LlxuICovXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dSdW5Ob3RDb21wbGV0ZWRFcnJvciBleHRlbmRzIFdvcmtmbG93RXJyb3Ige1xuICBydW5JZDogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihydW5JZDogc3RyaW5nLCBzdGF0dXM6IHN0cmluZykge1xuICAgIHN1cGVyKGBXb3JrZmxvdyBydW4gXCIke3J1bklkfVwiIGhhcyBub3QgY29tcGxldGVkYCwge30pO1xuICAgIHRoaXMubmFtZSA9ICdXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yJztcbiAgICB0aGlzLnJ1bklkID0gcnVuSWQ7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yIHtcbiAgICByZXR1cm4gaXNFcnJvcih2YWx1ZSkgJiYgdmFsdWUubmFtZSA9PT0gJ1dvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gdGhlIFdvcmtmbG93IHJ1bnRpbWUgZW5jb3VudGVycyBhbiBpbnRlcm5hbCBlcnJvci5cbiAqXG4gKiBUaGlzIGVycm9yIGluZGljYXRlcyBhbiBpc3N1ZSB3aXRoIHdvcmtmbG93IGV4ZWN1dGlvbiwgc3VjaCBhc1xuICogc2VyaWFsaXphdGlvbiBmYWlsdXJlcywgc3RhcnRpbmcgYW4gaW52YWxpZCB3b3JrZmxvdyBmdW5jdGlvbiwgb3JcbiAqIG90aGVyIHJ1bnRpbWUgcHJvYmxlbXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1J1bnRpbWVFcnJvciBleHRlbmRzIFdvcmtmbG93RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM/OiBXb3JrZmxvd0Vycm9yT3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gICAgdGhpcy5uYW1lID0gJ1dvcmtmbG93UnVudGltZUVycm9yJztcbiAgfVxuXG4gIHN0YXRpYyBpcyh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFdvcmtmbG93UnVudGltZUVycm9yIHtcbiAgICByZXR1cm4gaXNFcnJvcih2YWx1ZSkgJiYgdmFsdWUubmFtZSA9PT0gJ1dvcmtmbG93UnVudGltZUVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIHRoZSBwZXJzaXN0ZWQgd29ya2Zsb3cgZXZlbnQgbG9nIGNhbm5vdCBiZSByZXBsYXllZCBiZWNhdXNlIGl0XG4gKiBjb250YWlucyBvcnBoYW5lZCwgZHVwbGljYXRlLCBvciBtaXNtYXRjaGVkIGV2ZW50cy5cbiAqXG4gKiBUaGlzIGlzIGEgcnVudGltZS9pbmZyYXN0cnVjdHVyZSBmYWlsdXJlIHJhdGhlciB0aGFuIHVzZXIgY29kZSB0aHJvd2luZy5cbiAqIFdoZW4gdGhpcyByZWFjaGVzIHJ1biBmYWlsdXJlIGhhbmRsaW5nLCBpdCBpcyByZWNvcmRlZCB3aXRoIHRoZSBkaXN0aW5jdFxuICogYENPUlJVUFRFRF9FVkVOVF9MT0dgIGNvZGUgc28gd29ybGRzIGFuZCBiYWNrZW5kcyBjYW4gdHJhY2sgaXQgc2VwYXJhdGVseVxuICogZnJvbSBnZW5lcmljIHJ1bnRpbWUgZmFpbHVyZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb3JydXB0ZWRFdmVudExvZ0Vycm9yIGV4dGVuZHMgV29ya2Zsb3dSdW50aW1lRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM/OiBFcnJvck9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc2x1ZzogRVJST1JfU0xVR1MuQ09SUlVQVEVEX0VWRU5UX0xPRyxcbiAgICB9KTtcbiAgICB0aGlzLm5hbWUgPSAnQ29ycnVwdGVkRXZlbnRMb2dFcnJvcic7XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBDb3JydXB0ZWRFdmVudExvZ0Vycm9yIHtcbiAgICByZXR1cm4gaXNFcnJvcih2YWx1ZSkgJiYgdmFsdWUubmFtZSA9PT0gJ0NvcnJ1cHRlZEV2ZW50TG9nRXJyb3InO1xuICB9XG59XG5cbmludGVyZmFjZSBXb3JrZmxvd0J1aWxkRXJyb3JPcHRpb25zIGV4dGVuZHMgRXJyb3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIGFjdGlvbmFibGUgaGludCBhcHBlbmRlZCB0byB0aGUgbWFpbiBtZXNzYWdlLCBleHBsYWluaW5nIGhvd1xuICAgKiB0aGUgdXNlciBjYW4gcmVzb2x2ZSB0aGUgZmFpbHVyZS4gU2hvd24gYWZ0ZXIgYSBibGFuayBsaW5lLlxuICAgKi9cbiAgaGludD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiB0aGUgd29ya2Zsb3cgYnVpbGQgcGlwZWxpbmUgKGVzYnVpbGQsIFNXQyB0cmFuc2Zvcm0sIGZpbGVcbiAqIGRpc2NvdmVyeSwgYnVuZGxlciBpbnRlZ3JhdGlvbikgZmFpbHMgaW4gYSB3YXkgdGhlIHVzZXIgY2FuIGFjdCBvbi5cbiAqXG4gKiBUaGlzIGlzIGRpc3RpbmN0IGZyb20gYFdvcmtmbG93UnVudGltZUVycm9yYCAod2hpY2ggaXMgcmFpc2VkIGF0IHJ1bnRpbWVcbiAqIGJ5IHRoZSB3b3JrZmxvdyBlbmdpbmUpIOKAlCBgV29ya2Zsb3dCdWlsZEVycm9yYCBmaXJlcyBkdXJpbmcgYHBucG0gYnVpbGRgLFxuICogYG5leHQgYnVpbGRgLCBvciBlcXVpdmFsZW50LCBiZWZvcmUgYW55IHdvcmtmbG93IGhhcyBzdGFydGVkIGV4ZWN1dGluZy5cbiAqXG4gKiBQcmVmZXIgYXR0YWNoaW5nIGEgc2hvcnQsIGFjdGlvbmFibGUgYGhpbnRgIChlLmcuIGBydW4gXFxgcG5wbSBpbnN0YWxsIHdvcmtmbG93XFxgYClcbiAqIGFzIHBsYWluIHRleHQg4oCUIHRoZSByZW5kZXJpbmcgbGF5ZXIgaXMgcmVzcG9uc2libGUgZm9yIGFueSBzdHlsaW5nIG9yXG4gKiBcImhpbnQ6XCIgbGFiZWwuIEtlZXBpbmcgYGhpbnRgIHBsYWluIGtlZXBzIGl0IHVzZWZ1bCBpbiBub24tVFRZIGNvbnRleHRzXG4gKiAoQ0kgbG9ncywgc3RydWN0dXJlZCBlcnJvciBzZXJpYWxpemF0aW9uKSB3aGVyZSBBTlNJIGVzY2FwZXMgYXJlIG5vaXNlLlxuICovXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dCdWlsZEVycm9yIGV4dGVuZHMgV29ya2Zsb3dFcnJvciB7XG4gIHJlYWRvbmx5IGhpbnQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBvcHRpb25zPzogV29ya2Zsb3dCdWlsZEVycm9yT3B0aW9ucykge1xuICAgIC8vIFBhc3MgYGhpbnRgIGZyYW1lZCBhbG9uZ3NpZGUgdGhlIHRpdGxlIHNvIGBXb3JrZmxvd0Vycm9yYCdzXG4gICAgLy8gY29uc3RydWN0b3Igc2VlcyBhIGNvbXBsZXRlIGAke3RpdGxlfVxcbuKUnOKWtiBoaW50OiDigKZgIGJvZHkgYmVmb3JlXG4gICAgLy8gaXQgYXBwZW5kcyB0aGUgYOKVsOKWtiBkb2NzOiDigKZgIGxpbmUuIEJ1aWxkIGVycm9ycyBkb24ndCBjYXJyeSBhXG4gICAgLy8gc2x1ZyB0b2RheSwgYnV0IHRoaXMga2VlcHMgdGhlIGxheW91dCBjb25zaXN0ZW50IGlmIG9uZSBpc1xuICAgIC8vIGFkZGVkIGxhdGVyLlxuICAgIGNvbnN0IGJvZHkgPSBhcHBlbmRGcmFtZWREZXRhaWxzKFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGJ1aWxkRnJhbWVkRGV0YWlscyhvcHRpb25zPy5oaW50LCB1bmRlZmluZWQpXG4gICAgKTtcbiAgICBzdXBlcihib2R5LCB7IGNhdXNlOiBvcHRpb25zPy5jYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnV29ya2Zsb3dCdWlsZEVycm9yJztcbiAgICB0aGlzLmhpbnQgPSBvcHRpb25zPy5oaW50O1xuICB9XG5cbiAgc3RhdGljIGlzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgV29ya2Zsb3dCdWlsZEVycm9yIHtcbiAgICByZXR1cm4gaXNFcnJvcih2YWx1ZSkgJiYgdmFsdWUubmFtZSA9PT0gJ1dvcmtmbG93QnVpbGRFcnJvcic7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNlcmlhbGl6YXRpb25FcnJvck9wdGlvbnMgZXh0ZW5kcyBFcnJvck9wdGlvbnMge1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgYWN0aW9uYWJsZSBoaW50IGFwcGVuZGVkIHRvIHRoZSBtYWluIG1lc3NhZ2UsIGV4cGxhaW5pbmcgaG93XG4gICAqIHRoZSB1c2VyIGNhbiByZXNvbHZlIHRoZSBmYWlsdXJlIChlLmcuIFwicmVnaXN0ZXIgdGhlIGNsYXNzIHdpdGjigKZcIiBvclxuICAgKiBcIm1vdmUgdGhpcyBjYWxsIGluc2lkZSBhIHN0ZXBcIikuXG4gICAqL1xuICBoaW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgdmFsdWUgY2Fubm90IGJlIHNlcmlhbGl6ZWQgaW50byBvciBkZXNlcmlhbGl6ZWQgb3V0IG9mIHRoZVxuICogd29ya2Zsb3cgZXZlbnQgbG9nLlxuICpcbiAqIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSB1c2VyLWZhY2luZyBtaXN0YWtlOiBwYXNzaW5nIGEgbm9uLXNlcmlhbGl6YWJsZVxuICogdmFsdWUgKGNsYXNzIHdpdGhvdXQgYFdPUktGTE9XX1NFUklBTElaRWAsIGxvY2tlZCBzdHJlYW0sIGRpcmVjdCB3b3JrZmxvd1xuICogZnVuY3Rpb24gcmVmZXJlbmNlKSBpbnRvIGEgc3RlcCBib3VuZGFyeSwgb3IgYW4gdW5yZWdpc3RlcmVkIGNsYXNzXG4gKiByZXR1cm5pbmcgZnJvbSBhIHN0ZXAuXG4gKlxuICogSW50ZXJuYWwgaW52YXJpYW50cyAoY29ycnVwdGVkIGJ1ZmZlcnMsIHVua25vd24gZm9ybWF0IGJ5dGVzKSBzaG91bGQgdXNlXG4gKiBgV29ya2Zsb3dSdW50aW1lRXJyb3JgIGluc3RlYWQg4oCUIHRoaXMgY2xhc3MgaXMgc2NvcGVkIHRvIHRoaW5ncyB0aGUgdXNlclxuICogY2FuIGZpeCBpbiB0aGVpciBvd24gY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlcmlhbGl6YXRpb25FcnJvciBleHRlbmRzIFdvcmtmbG93RXJyb3Ige1xuICByZWFkb25seSBoaW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogU2VyaWFsaXphdGlvbiBlcnJvcnMgYXJlIGRldGVybWluaXN0aWMg4oCUIGlmIGEgc3RlcCByZXR1cm5zIGEgbm9uLVBPSk8sXG4gICAqIHJlcGxheWluZyB0aGUgc3RlcCB3aWxsIGFsd2F5cyBwcm9kdWNlIHRoZSBzYW1lIG5vbi1zZXJpYWxpemFibGUgdmFsdWUuXG4gICAqIFJldHJ5aW5nIGlzIGd1YXJhbnRlZWQgdG8gZmFpbCwgc28gdGhlc2UgZXJyb3JzIGFyZSBzdXJmYWNlZCBhcyBmYXRhbFxuICAgKiBhbmQgc2tpcCB0aGUgc3RlcC1yZXRyeSBsb29wLiBgRmF0YWxFcnJvci5pcygpYCByZWNvZ25pemVzIGFueSBlcnJvclxuICAgKiB3aXRoIGBmYXRhbDogdHJ1ZWAgKHNlZSBgcGFja2FnZXMvZXJyb3JzL3NyYy9pbmRleC50c2ApLCBzbyBubyBvdGhlclxuICAgKiB3aXJpbmcgaXMgcmVxdWlyZWQgZm9yIHVzZXItdGhyb3duIFNlcmlhbGl6YXRpb25FcnJvcnMuXG4gICAqL1xuICByZWFkb25seSBmYXRhbCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBvcHRpb25zPzogU2VyaWFsaXphdGlvbkVycm9yT3B0aW9ucykge1xuICAgIC8vIFRoZSBoaW50IGNhcnJpZXMgaXRzIG93biBkb2NzIFVSTCAocG9pbnRpbmcgYXQgdGhlIGZvdW5kYXRpb25zXG4gICAgLy8gc2VyaWFsaXphdGlvbiBwYWdlLCB3aGljaCBpcyB3aGF0IHVzZXJzIGFjdHVhbGx5IG5lZWQgdG8gc2VlIHdoYXRcbiAgICAvLyByb3VuZC10cmlwcyksIHNvIHdlIGRvbid0IGFkZCBhIHNlcGFyYXRlIGDilbDilrYgZG9jczpgIGxpbmUgaGVyZS5cbiAgICAvLyBBdm9pZHMgdHdvIFVSTHMgb24gdGhlIG1lc3NhZ2Ug4oCUIG9uZSBhbHJlYWR5LWFjdGlvbmFibGUsIHRoZSBvdGhlclxuICAgIC8vIHBvaW50aW5nIGF0IGEgZ2VuZXJpYyBlcnJvciBleHBsYWluZXIuXG4gICAgY29uc3QgYm9keSA9IGFwcGVuZEZyYW1lZERldGFpbHMoXG4gICAgICBtZXNzYWdlLFxuICAgICAgYnVpbGRGcmFtZWREZXRhaWxzKG9wdGlvbnM/LmhpbnQsIHVuZGVmaW5lZClcbiAgICApO1xuICAgIHN1cGVyKGJvZHksIHsgY2F1c2U6IG9wdGlvbnM/LmNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdTZXJpYWxpemF0aW9uRXJyb3InO1xuICAgIHRoaXMuaGludCA9IG9wdGlvbnM/LmhpbnQ7XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTZXJpYWxpemF0aW9uRXJyb3Ige1xuICAgIHJldHVybiBpc0Vycm9yKHZhbHVlKSAmJiB2YWx1ZS5uYW1lID09PSAnU2VyaWFsaXphdGlvbkVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgc3RlcCBmdW5jdGlvbiBpcyBub3QgcmVnaXN0ZXJlZCBpbiB0aGUgY3VycmVudCBkZXBsb3ltZW50LlxuICpcbiAqIFRoaXMgaXMgYW4gaW5mcmFzdHJ1Y3R1cmUgZXJyb3Ig4oCUIG5vdCBhIHVzZXIgY29kZSBlcnJvci4gSXQgdHlwaWNhbGx5IG1lYW5zXG4gKiBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBidW5kbGluZy9idWlsZCB0b29saW5nIHRoYXQgY2F1c2VkIHRoZSBzdGVwXG4gKiB0byBub3QgZ2V0IGJ1aWx0IGNvcnJlY3RseS5cbiAqXG4gKiBXaGVuIHRoaXMgaGFwcGVucywgdGhlIHN0ZXAgZmFpbHMgKGxpa2UgYSBGYXRhbEVycm9yKSBhbmQgY29udHJvbCBpcyBwYXNzZWQgYmFja1xuICogdG8gdGhlIHdvcmtmbG93IGZ1bmN0aW9uLCB3aGljaCBjYW4gb3B0aW9uYWxseSBoYW5kbGUgdGhlIGZhaWx1cmUgZ3JhY2VmdWxseS5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0ZXBOb3RSZWdpc3RlcmVkRXJyb3IgZXh0ZW5kcyBXb3JrZmxvd1J1bnRpbWVFcnJvciB7XG4gIHN0ZXBOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc3RlcE5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgYFN0ZXAgXCIke3N0ZXBOYW1lfVwiIGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZSBjdXJyZW50IGRlcGxveW1lbnQuIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBidWlsZCBvciBidW5kbGluZyBpc3N1ZSB0aGF0IGNhdXNlZCB0aGUgc3RlcCB0byBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGRlcGxveW1lbnQuYCxcbiAgICAgIHsgc2x1ZzogRVJST1JfU0xVR1MuU1RFUF9OT1RfUkVHSVNURVJFRCB9XG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnU3RlcE5vdFJlZ2lzdGVyZWRFcnJvcic7XG4gICAgdGhpcy5zdGVwTmFtZSA9IHN0ZXBOYW1lO1xuICB9XG5cbiAgc3RhdGljIGlzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgU3RlcE5vdFJlZ2lzdGVyZWRFcnJvciB7XG4gICAgcmV0dXJuIGlzRXJyb3IodmFsdWUpICYmIHZhbHVlLm5hbWUgPT09ICdTdGVwTm90UmVnaXN0ZXJlZEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgd29ya2Zsb3cgZnVuY3Rpb24gaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIGN1cnJlbnQgZGVwbG95bWVudC5cbiAqXG4gKiBUaGlzIGlzIGFuIGluZnJhc3RydWN0dXJlIGVycm9yIOKAlCBub3QgYSB1c2VyIGNvZGUgZXJyb3IuIEl0IHR5cGljYWxseSBtZWFuczpcbiAqIC0gQSBydW4gd2FzIHN0YXJ0ZWQgYWdhaW5zdCBhIGRlcGxveW1lbnQgdGhhdCBkb2VzIG5vdCBoYXZlIHRoZSB3b3JrZmxvd1xuICogICAoZS5nLiwgdGhlIHdvcmtmbG93IHdhcyByZW5hbWVkIG9yIG1vdmVkIGFuZCBhIG5ldyBydW4gdGFyZ2V0ZWQgdGhlIGxhdGVzdCBkZXBsb3ltZW50KVxuICogLSBTb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBidW5kbGluZy9idWlsZCB0b29saW5nIHRoYXQgY2F1c2VkIHRoZSB3b3JrZmxvd1xuICogICB0byBub3QgZ2V0IGJ1aWx0IGNvcnJlY3RseVxuICpcbiAqIFdoZW4gdGhpcyBoYXBwZW5zLCB0aGUgcnVuIGZhaWxzIHdpdGggYSBgUlVOVElNRV9FUlJPUmAgZXJyb3IgY29kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtmbG93Tm90UmVnaXN0ZXJlZEVycm9yIGV4dGVuZHMgV29ya2Zsb3dSdW50aW1lRXJyb3Ige1xuICB3b3JrZmxvd05hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih3b3JrZmxvd05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgYFdvcmtmbG93IFwiJHt3b3JrZmxvd05hbWV9XCIgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIGN1cnJlbnQgZGVwbG95bWVudC4gVGhpcyB1c3VhbGx5IG1lYW5zIGEgcnVuIHdhcyBzdGFydGVkIGFnYWluc3QgYSBkZXBsb3ltZW50IHRoYXQgZG9lcyBub3QgaGF2ZSB0aGlzIHdvcmtmbG93LCBvciB0aGVyZSB3YXMgYSBidWlsZC9idW5kbGluZyBpc3N1ZS5gLFxuICAgICAgeyBzbHVnOiBFUlJPUl9TTFVHUy5XT1JLRkxPV19OT1RfUkVHSVNURVJFRCB9XG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnV29ya2Zsb3dOb3RSZWdpc3RlcmVkRXJyb3InO1xuICAgIHRoaXMud29ya2Zsb3dOYW1lID0gd29ya2Zsb3dOYW1lO1xuICB9XG5cbiAgc3RhdGljIGlzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgV29ya2Zsb3dOb3RSZWdpc3RlcmVkRXJyb3Ige1xuICAgIHJldHVybiBpc0Vycm9yKHZhbHVlKSAmJiB2YWx1ZS5uYW1lID09PSAnV29ya2Zsb3dOb3RSZWdpc3RlcmVkRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gcGVyZm9ybWluZyBvcGVyYXRpb25zIG9uIGEgd29ya2Zsb3cgcnVuIHRoYXQgZG9lcyBub3QgZXhpc3QuXG4gKlxuICogVGhpcyBlcnJvciBvY2N1cnMgd2hlbiB5b3UgY2FsbCBtZXRob2RzIG9uIGEgcnVuIG9iamVjdCAoZS5nLiBgcnVuLnN0YXR1c2AsXG4gKiBgcnVuLmNhbmNlbCgpYCwgYHJ1bi5yZXR1cm5WYWx1ZWApIGJ1dCB0aGUgdW5kZXJseWluZyBydW4gSUQgZG9lcyBub3QgbWF0Y2hcbiAqIGFueSBrbm93biB3b3JrZmxvdyBydW4uIE5vdGUgdGhhdCBgZ2V0UnVuKGlkKWAgaXRzZWxmIGlzIHN5bmNocm9ub3VzIGFuZCB3aWxsXG4gKiBub3QgdGhyb3cg4oCUIHRoaXMgZXJyb3IgaXMgcmFpc2VkIHdoZW4gc3Vic2VxdWVudCBvcGVyYXRpb25zIGRpc2NvdmVyIHRoZSBydW5cbiAqIGlzIG1pc3NpbmcuXG4gKlxuICogVXNlIHRoZSBzdGF0aWMgYFdvcmtmbG93UnVuTm90Rm91bmRFcnJvci5pcygpYCBtZXRob2QgZm9yIHR5cGUtc2FmZSBjaGVja2luZ1xuICogaW4gY2F0Y2ggYmxvY2tzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIH0gZnJvbSBcIndvcmtmbG93L2ludGVybmFsL2Vycm9yc1wiO1xuICpcbiAqIHRyeSB7XG4gKiAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHJ1bi5zdGF0dXM7XG4gKiB9IGNhdGNoIChlcnJvcikge1xuICogICBpZiAoV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yLmlzKGVycm9yKSkge1xuICogICAgIGNvbnNvbGUuZXJyb3IoYFJ1biAke2Vycm9yLnJ1bklkfSBkb2VzIG5vdCBleGlzdGApO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtmbG93UnVuTm90Rm91bmRFcnJvciBleHRlbmRzIFdvcmtmbG93RXJyb3Ige1xuICBydW5JZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHJ1bklkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgV29ya2Zsb3cgcnVuIFwiJHtydW5JZH1cIiBub3QgZm91bmRgLCB7fSk7XG4gICAgdGhpcy5uYW1lID0gJ1dvcmtmbG93UnVuTm90Rm91bmRFcnJvcic7XG4gICAgdGhpcy5ydW5JZCA9IHJ1bklkO1xuICB9XG5cbiAgc3RhdGljIGlzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIHtcbiAgICByZXR1cm4gaXNFcnJvcih2YWx1ZSkgJiYgdmFsdWUubmFtZSA9PT0gJ1dvcmtmbG93UnVuTm90Rm91bmRFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhIGhvb2sgdG9rZW4gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBhY3RpdmUgd29ya2Zsb3cgcnVuLlxuICpcbiAqIFRoaXMgaXMgYSB1c2VyIGVycm9yIOKAlCBpdCBtZWFucyB0aGUgc2FtZSBjdXN0b20gdG9rZW4gd2FzIHBhc3NlZCB0b1xuICogYGNyZWF0ZUhvb2tgIGluIHR3byBvciBtb3JlIGNvbmN1cnJlbnQgcnVucy4gVXNlIGEgdW5pcXVlIHRva2VuIHBlciBydW5cbiAqIChvciBvbWl0IHRoZSB0b2tlbiB0byBsZXQgdGhlIHJ1bnRpbWUgZ2VuZXJhdGUgb25lIGF1dG9tYXRpY2FsbHkpLlxuICovXG5leHBvcnQgY2xhc3MgSG9va0NvbmZsaWN0RXJyb3IgZXh0ZW5kcyBXb3JrZmxvd0Vycm9yIHtcbiAgdG9rZW46IHN0cmluZztcbiAgLy8gVE9ETzogTWFrZSB0aGlzIHJlcXVpcmVkIG9uY2UgYWxsIHBlcnNpc3RlZCBob29rX2NvbmZsaWN0IGV2ZW50cyBhbmQgV29ybGRcbiAgLy8gaW1wbGVtZW50YXRpb25zIGFsd2F5cyBpbmNsdWRlIHRoZSBhY3RpdmUgaG9vayBvd25lcidzIHJ1biBJRC5cbiAgY29uZmxpY3RpbmdSdW5JZD86IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih0b2tlbjogc3RyaW5nLCBjb25mbGljdGluZ1J1bklkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBgSG9vayB0b2tlbiBcIiR7dG9rZW59XCIgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciB3b3JrZmxvdyR7Y29uZmxpY3RpbmdSdW5JZCA/IGAgKHJ1biBcIiR7Y29uZmxpY3RpbmdSdW5JZH1cIilgIDogJyd9YCxcbiAgICAgIHtcbiAgICAgICAgc2x1ZzogRVJST1JfU0xVR1MuSE9PS19DT05GTElDVCxcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdIb29rQ29uZmxpY3RFcnJvcic7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIGlmIChjb25mbGljdGluZ1J1bklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29uZmxpY3RpbmdSdW5JZCA9IGNvbmZsaWN0aW5nUnVuSWQ7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgSG9va0NvbmZsaWN0RXJyb3Ige1xuICAgIHJldHVybiBpc0Vycm9yKHZhbHVlKSAmJiB2YWx1ZS5uYW1lID09PSAnSG9va0NvbmZsaWN0RXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gY2FsbGluZyBgcmVzdW1lSG9vaygpYCBvciBgcmVzdW1lV2ViaG9vaygpYCB3aXRoIGEgdG9rZW4gdGhhdFxuICogZG9lcyBub3QgbWF0Y2ggYW55IGFjdGl2ZSBob29rLlxuICpcbiAqIENvbW1vbiBjYXVzZXM6XG4gKiAtIFRoZSBob29rIGhhcyBleHBpcmVkIChwYXN0IGl0cyBUVEwpXG4gKiAtIFRoZSBob29rIHdhcyBhbHJlYWR5IGRpc3Bvc2VkIGFmdGVyIGJlaW5nIGNvbnN1bWVkXG4gKiAtIFRoZSB3b3JrZmxvdyBoYXMgbm90IHN0YXJ0ZWQgeWV0LCBzbyB0aGUgaG9vayBkb2VzIG5vdCBleGlzdFxuICpcbiAqIEEgY29tbW9uIHBhdHRlcm4gaXMgdG8gY2F0Y2ggdGhpcyBlcnJvciBhbmQgc3RhcnQgYSBuZXcgd29ya2Zsb3cgcnVuIHdoZW5cbiAqIHRoZSBob29rIGRvZXMgbm90IGV4aXN0IHlldCAodGhlIFwicmVzdW1lIG9yIHN0YXJ0XCIgcGF0dGVybikuXG4gKlxuICogVXNlIHRoZSBzdGF0aWMgYEhvb2tOb3RGb3VuZEVycm9yLmlzKClgIG1ldGhvZCBmb3IgdHlwZS1zYWZlIGNoZWNraW5nIGluXG4gKiBjYXRjaCBibG9ja3MuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBIb29rTm90Rm91bmRFcnJvciB9IGZyb20gXCJ3b3JrZmxvdy9pbnRlcm5hbC9lcnJvcnNcIjtcbiAqXG4gKiB0cnkge1xuICogICBhd2FpdCByZXN1bWVIb29rKHRva2VuLCBwYXlsb2FkKTtcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGlmIChIb29rTm90Rm91bmRFcnJvci5pcyhlcnJvcikpIHtcbiAqICAgICAvLyBIb29rIGRvZXNuJ3QgZXhpc3Qg4oCUIHN0YXJ0IGEgbmV3IHdvcmtmbG93IHJ1biBpbnN0ZWFkXG4gKiAgICAgYXdhaXQgc3RhcnRXb3JrZmxvdyhcIm15V29ya2Zsb3dcIiwgcGF5bG9hZCk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgSG9va05vdEZvdW5kRXJyb3IgZXh0ZW5kcyBXb3JrZmxvd0Vycm9yIHtcbiAgdG9rZW46IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih0b2tlbjogc3RyaW5nKSB7XG4gICAgc3VwZXIoJ0hvb2sgbm90IGZvdW5kJywge30pO1xuICAgIHRoaXMubmFtZSA9ICdIb29rTm90Rm91bmRFcnJvcic7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICB9XG5cbiAgc3RhdGljIGlzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgSG9va05vdEZvdW5kRXJyb3Ige1xuICAgIHJldHVybiBpc0Vycm9yKHZhbHVlKSAmJiB2YWx1ZS5uYW1lID09PSAnSG9va05vdEZvdW5kRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGNvbmZsaWN0cyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIGVudGl0eS5cbiAqIFRoaXMgaW5jbHVkZXMgYXR0ZW1wdHMgdG8gbW9kaWZ5IGFuIGVudGl0eSBhbHJlYWR5IGluIGEgdGVybWluYWwgc3RhdGUsXG4gKiBjcmVhdGUgYW4gZW50aXR5IHRoYXQgYWxyZWFkeSBleGlzdHMsIG9yIGFueSBvdGhlciA0MDktc3R5bGUgY29uZmxpY3QuXG4gKlxuICogVGhlIHdvcmtmbG93IHJ1bnRpbWUgaGFuZGxlcyB0aGlzIGVycm9yIGF1dG9tYXRpY2FsbHkuIFVzZXJzIGludGVyYWN0aW5nXG4gKiB3aXRoIHdvcmxkIHN0b3JhZ2UgYmFja2VuZHMgZGlyZWN0bHkgbWF5IGVuY291bnRlciBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVudGl0eUNvbmZsaWN0RXJyb3IgZXh0ZW5kcyBXb3JrZmxvd1dvcmxkRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRW50aXR5Q29uZmxpY3RFcnJvcic7XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFbnRpdHlDb25mbGljdEVycm9yIHtcbiAgICByZXR1cm4gaXNFcnJvcih2YWx1ZSkgJiYgdmFsdWUubmFtZSA9PT0gJ0VudGl0eUNvbmZsaWN0RXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYSBydW4gaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSDigJQgZWl0aGVyIGJlY2F1c2UgaXQgaGFzIGJlZW5cbiAqIGNsZWFuZWQgdXAsIGV4cGlyZWQsIG9yIGFscmVhZHkgcmVhY2hlZCBhIHRlcm1pbmFsIHN0YXRlIChjb21wbGV0ZWQvZmFpbGVkKS5cbiAqXG4gKiBUaGUgd29ya2Zsb3cgcnVudGltZSBoYW5kbGVzIHRoaXMgZXJyb3IgYXV0b21hdGljYWxseS4gVXNlcnMgaW50ZXJhY3RpbmdcbiAqIHdpdGggd29ybGQgc3RvcmFnZSBiYWNrZW5kcyBkaXJlY3RseSBtYXkgZW5jb3VudGVyIGl0LlxuICovXG5leHBvcnQgY2xhc3MgUnVuRXhwaXJlZEVycm9yIGV4dGVuZHMgV29ya2Zsb3dXb3JsZEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1J1bkV4cGlyZWRFcnJvcic7XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSdW5FeHBpcmVkRXJyb3Ige1xuICAgIHJldHVybiBpc0Vycm9yKHZhbHVlKSAmJiB2YWx1ZS5uYW1lID09PSAnUnVuRXhwaXJlZEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBjYW5ub3QgcHJvY2VlZCBiZWNhdXNlIGEgcmVxdWlyZWQgdGltZXN0YW1wXG4gKiAoZS5nLiByZXRyeUFmdGVyKSBoYXMgbm90IGJlZW4gcmVhY2hlZCB5ZXQuXG4gKlxuICogVGhlIHdvcmtmbG93IHJ1bnRpbWUgaGFuZGxlcyB0aGlzIGVycm9yIGF1dG9tYXRpY2FsbHkuIFVzZXJzIGludGVyYWN0aW5nXG4gKiB3aXRoIHdvcmxkIHN0b3JhZ2UgYmFja2VuZHMgZGlyZWN0bHkgbWF5IGVuY291bnRlciBpdC5cbiAqXG4gKiBAcHJvcGVydHkgcmV0cnlBZnRlciAtIERlbGF5IGluIHNlY29uZHMgYmVmb3JlIHRoZSBvcGVyYXRpb24gY2FuIGJlIHJldHJpZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBUb29FYXJseUVycm9yIGV4dGVuZHMgV29ya2Zsb3dXb3JsZEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBvcHRpb25zPzogeyByZXRyeUFmdGVyPzogbnVtYmVyIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IHJldHJ5QWZ0ZXI6IG9wdGlvbnM/LnJldHJ5QWZ0ZXIgfSk7XG4gICAgdGhpcy5uYW1lID0gJ1Rvb0Vhcmx5RXJyb3InO1xuICB9XG5cbiAgc3RhdGljIGlzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVG9vRWFybHlFcnJvciB7XG4gICAgcmV0dXJuIGlzRXJyb3IodmFsdWUpICYmIHZhbHVlLm5hbWUgPT09ICdUb29FYXJseUVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGEgcmVxdWVzdCBpcyByYXRlIGxpbWl0ZWQgYnkgdGhlIHdvcmtmbG93IGJhY2tlbmQuXG4gKlxuICogVGhlIHdvcmtmbG93IHJ1bnRpbWUgaGFuZGxlcyB0aGlzIGVycm9yIGF1dG9tYXRpY2FsbHkgd2l0aCByZXRyeSBsb2dpYy5cbiAqIFVzZXJzIGludGVyYWN0aW5nIHdpdGggd29ybGQgc3RvcmFnZSBiYWNrZW5kcyBkaXJlY3RseSBtYXkgZW5jb3VudGVyIGl0XG4gKiBpZiByZXRyaWVzIGFyZSBleGhhdXN0ZWQuXG4gKlxuICogQHByb3BlcnR5IHJldHJ5QWZ0ZXIgLSBEZWxheSBpbiBzZWNvbmRzIGJlZm9yZSB0aGUgcmVxdWVzdCBjYW4gYmUgcmV0cmllZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRocm90dGxlRXJyb3IgZXh0ZW5kcyBXb3JrZmxvd1dvcmxkRXJyb3Ige1xuICByZXRyeUFmdGVyPzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgb3B0aW9ucz86IHsgcmV0cnlBZnRlcj86IG51bWJlciB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1Rocm90dGxlRXJyb3InO1xuICAgIHRoaXMucmV0cnlBZnRlciA9IG9wdGlvbnM/LnJldHJ5QWZ0ZXI7XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBUaHJvdHRsZUVycm9yIHtcbiAgICByZXR1cm4gaXNFcnJvcih2YWx1ZSkgJiYgdmFsdWUubmFtZSA9PT0gJ1Rocm90dGxlRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gYXdhaXRpbmcgYHJ1bi5yZXR1cm5WYWx1ZWAgb24gYSB3b3JrZmxvdyBydW4gdGhhdCB3YXMgY2FuY2VsbGVkLlxuICpcbiAqIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIHdvcmtmbG93IHdhcyBleHBsaWNpdGx5IGNhbmNlbGxlZCAodmlhXG4gKiBgcnVuLmNhbmNlbCgpYCkgYW5kIHdpbGwgbm90IHByb2R1Y2UgYSByZXR1cm4gdmFsdWUuIFlvdSBjYW4gY2hlY2sgZm9yXG4gKiBjYW5jZWxsYXRpb24gYmVmb3JlIGF3YWl0aW5nIHRoZSByZXR1cm4gdmFsdWUgYnkgaW5zcGVjdGluZyBgcnVuLnN0YXR1c2AuXG4gKlxuICogVXNlIHRoZSBzdGF0aWMgYFdvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3IuaXMoKWAgbWV0aG9kIGZvciB0eXBlLXNhZmVcbiAqIGNoZWNraW5nIGluIGNhdGNoIGJsb2Nrcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IFdvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3IgfSBmcm9tIFwid29ya2Zsb3cvaW50ZXJuYWwvZXJyb3JzXCI7XG4gKlxuICogdHJ5IHtcbiAqICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuLnJldHVyblZhbHVlO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKFdvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3IuaXMoZXJyb3IpKSB7XG4gKiAgICAgY29uc29sZS5sb2coYFJ1biAke2Vycm9yLnJ1bklkfSB3YXMgY2FuY2VsbGVkYCk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dSdW5DYW5jZWxsZWRFcnJvciBleHRlbmRzIFdvcmtmbG93RXJyb3Ige1xuICBydW5JZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHJ1bklkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgV29ya2Zsb3cgcnVuIFwiJHtydW5JZH1cIiBjYW5jZWxsZWRgLCB7fSk7XG4gICAgdGhpcy5uYW1lID0gJ1dvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3InO1xuICAgIHRoaXMucnVuSWQgPSBydW5JZDtcbiAgfVxuXG4gIHN0YXRpYyBpcyh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFdvcmtmbG93UnVuQ2FuY2VsbGVkRXJyb3Ige1xuICAgIHJldHVybiBpc0Vycm9yKHZhbHVlKSAmJiB2YWx1ZS5uYW1lID09PSAnV29ya2Zsb3dSdW5DYW5jZWxsZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd24gd2hlbiBhdHRlbXB0aW5nIHRvIG9wZXJhdGUgb24gYSB3b3JrZmxvdyBydW4gdGhhdCByZXF1aXJlcyBhIG5ld2VyIFdvcmxkIHZlcnNpb24uXG4gKlxuICogVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhIHJ1biB3YXMgY3JlYXRlZCB3aXRoIGEgbmV3ZXIgc3BlYyB2ZXJzaW9uIHRoYW4gdGhlXG4gKiBjdXJyZW50IFdvcmxkIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzLiBUbyByZXNvbHZlIHRoaXMsIHVwZ3JhZGUgeW91clxuICogYHdvcmtmbG93YCBwYWNrYWdlcyB0byBhIHZlcnNpb24gdGhhdCBzdXBwb3J0cyB0aGUgcmVxdWlyZWQgc3BlYyB2ZXJzaW9uLlxuICpcbiAqIFVzZSB0aGUgc3RhdGljIGBSdW5Ob3RTdXBwb3J0ZWRFcnJvci5pcygpYCBtZXRob2QgZm9yIHR5cGUtc2FmZSBjaGVja2luZyBpblxuICogY2F0Y2ggYmxvY2tzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgUnVuTm90U3VwcG9ydGVkRXJyb3IgfSBmcm9tIFwid29ya2Zsb3cvaW50ZXJuYWwvZXJyb3JzXCI7XG4gKlxuICogdHJ5IHtcbiAqICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcnVuLnN0YXR1cztcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGlmIChSdW5Ob3RTdXBwb3J0ZWRFcnJvci5pcyhlcnJvcikpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKFxuICogICAgICAgYFJ1biByZXF1aXJlcyBzcGVjIHYke2Vycm9yLnJ1blNwZWNWZXJzaW9ufSwgYCArXG4gKiAgICAgICBgYnV0IHdvcmxkIHN1cHBvcnRzIHYke2Vycm9yLndvcmxkU3BlY1ZlcnNpb259YFxuICogICAgICk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUnVuTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBXb3JrZmxvd0Vycm9yIHtcbiAgcmVhZG9ubHkgcnVuU3BlY1ZlcnNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgd29ybGRTcGVjVmVyc2lvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHJ1blNwZWNWZXJzaW9uOiBudW1iZXIsIHdvcmxkU3BlY1ZlcnNpb246IG51bWJlcikge1xuICAgIHN1cGVyKFxuICAgICAgYFJ1biByZXF1aXJlcyBzcGVjIHZlcnNpb24gJHtydW5TcGVjVmVyc2lvbn0sIGJ1dCB3b3JsZCBzdXBwb3J0cyB2ZXJzaW9uICR7d29ybGRTcGVjVmVyc2lvbn0uIGAgK1xuICAgICAgICBgUGxlYXNlIHVwZ3JhZGUgJ3dvcmtmbG93JyBwYWNrYWdlLmBcbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdSdW5Ob3RTdXBwb3J0ZWRFcnJvcic7XG4gICAgdGhpcy5ydW5TcGVjVmVyc2lvbiA9IHJ1blNwZWNWZXJzaW9uO1xuICAgIHRoaXMud29ybGRTcGVjVmVyc2lvbiA9IHdvcmxkU3BlY1ZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSdW5Ob3RTdXBwb3J0ZWRFcnJvciB7XG4gICAgcmV0dXJuIGlzRXJyb3IodmFsdWUpICYmIHZhbHVlLm5hbWUgPT09ICdSdW5Ob3RTdXBwb3J0ZWRFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGZhdGFsIGVycm9yIGlzIGFuIGVycm9yIHRoYXQgY2Fubm90IGJlIHJldHJpZWQuXG4gKiBJdCB3aWxsIGNhdXNlIHRoZSBzdGVwIHRvIGZhaWwgYW5kIHRoZSBlcnJvciB3aWxsXG4gKiBiZSBidWJibGVkIHVwIHRvIHRoZSB3b3JrZmxvdyBsb2dpYy5cbiAqXG4gKiBBbnkgZXJyb3IgY2FuIG9wdCBpbnRvIHRoZSBub24tcmV0cnkgYmVoYXZpb3IgYnkgc2V0dGluZyBhIGBmYXRhbDogdHJ1ZWBcbiAqIG93biBwcm9wZXJ0eS4gVGhpcyBpcyBob3cgc3RydWN0dXJlZCBlcnJvciBjbGFzc2VzIHRoYXQgYXJlbid0IGRpcmVjdFxuICogYEZhdGFsRXJyb3JgIHN1YmNsYXNzZXMgKGUuZy4gY29udGV4dC12aW9sYXRpb24gZXJyb3JzKSBzaWduYWwgdG8gdGhlXG4gKiBzdGVwIGhhbmRsZXIgdGhhdCByZXRyeWluZyB3aWxsIG5ldmVyIGhlbHAg4oCUIHRoZSB1c2VyJ3MgY29kZSBpcyBjYWxsaW5nXG4gKiBhIHdvcmtmbG93LW9ubHkgQVBJIGZyb20gdGhlIHdyb25nIGNvbnRleHQsIG9yIHNpbWlsYXIg4oCUIGFuZCBidXJuaW5nXG4gKiByZXRyeSBhdHRlbXB0cyBqdXN0IHByb2R1Y2VzIGEgd2FsbCBvZiBkdXBsaWNhdGVkIGxvZyBvdXRwdXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBGYXRhbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBmYXRhbCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0ZhdGFsRXJyb3InO1xuICB9XG5cbiAgc3RhdGljIGlzKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRmF0YWxFcnJvciB7XG4gICAgaWYgKCFpc0Vycm9yKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh2YWx1ZS5uYW1lID09PSAnRmF0YWxFcnJvcicpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAodmFsdWUgYXMgeyBmYXRhbD86IHVua25vd24gfSkuZmF0YWwgPT09IHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeWFibGVFcnJvck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmV0cnlpbmcgdGhlIHN0ZXAuXG4gICAqIENhbiBhbHNvIGJlIGEgZHVyYXRpb24gc3RyaW5nIChlLmcuLCBcIjVzXCIsIFwiMm1cIikgb3IgYSBEYXRlIG9iamVjdC5cbiAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgc3RlcCB3aWxsIGJlIHJldHJpZWQgYWZ0ZXIgMSBzZWNvbmQgKDEwMDAgbWlsbGlzZWNvbmRzKS5cbiAgICovXG4gIHJldHJ5QWZ0ZXI/OiBudW1iZXIgfCBTdHJpbmdWYWx1ZSB8IERhdGU7XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCBjYW4gaGFwcGVuIGR1cmluZyBhIHN0ZXAgZXhlY3V0aW9uLCBhbGxvd2luZ1xuICogZm9yIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJldHJ5IGJlaGF2aW9yLlxuICovXG5leHBvcnQgY2xhc3MgUmV0cnlhYmxlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBUaGUgRGF0ZSB3aGVuIHRoZSBzdGVwIHNob3VsZCBiZSByZXRyaWVkLlxuICAgKi9cbiAgcmV0cnlBZnRlcjogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIG9wdGlvbnM6IFJldHJ5YWJsZUVycm9yT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1JldHJ5YWJsZUVycm9yJztcblxuICAgIGlmIChvcHRpb25zLnJldHJ5QWZ0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yZXRyeUFmdGVyID0gcGFyc2VEdXJhdGlvblRvRGF0ZShvcHRpb25zLnJldHJ5QWZ0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IHRvIDEgc2Vjb25kICgxMDAwIG1pbGxpc2Vjb25kcylcbiAgICAgIHRoaXMucmV0cnlBZnRlciA9IG5ldyBEYXRlKERhdGUubm93KCkgKyAxMDAwKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgaXModmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZXRyeWFibGVFcnJvciB7XG4gICAgcmV0dXJuIGlzRXJyb3IodmFsdWUpICYmIHZhbHVlLm5hbWUgPT09ICdSZXRyeWFibGVFcnJvcic7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFZFUkNFTF80MDNfRVJST1JfTUVTU0FHRSA9XG4gICdZb3VyIGN1cnJlbnQgdmVyY2VsIGFjY291bnQgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhpcyByZXNvdXJjZS4gVXNlIGB2ZXJjZWwgbG9naW5gIG9yIGB2ZXJjZWwgc3dpdGNoYCB0byBlbnN1cmUgeW91IGFyZSBsaW5rZWQgdG8gdGhlIHJpZ2h0IGFjY291bnQuJztcblxuZXhwb3J0IHsgUlVOX0VSUk9SX0NPREVTLCB0eXBlIFJ1bkVycm9yQ29kZSB9IGZyb20gJy4vZXJyb3ItY29kZXMuanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENyb3NzLXJlYWxtIGNsYXNzIHJlZ2lzdHJhdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1xuLy8gYEZhdGFsRXJyb3JgLCBgUmV0cnlhYmxlRXJyb3JgLCBhbmQgYEhvb2tDb25mbGljdEVycm9yYCBhcmUgbm90IGJ1aWx0LWlucywgc28gZGlmZmVyZW50IHJlYWxtc1xuLy8gKGUuZy4gdGhlIHdvcmtmbG93IFZNIGNvbnRleHQgdnMuIHRoZSBob3N0IGNvbnRleHQgdGhhdCBydW5zIHRoZSBxdWV1ZVxuLy8gaGFuZGxlcikgYnVuZGxlIGFuZCBsb2FkIHRoZWlyIG93biBjb3BpZXMgb2YgdGhpcyBtb2R1bGUg4oCUIG1lYW5pbmcgZWFjaFxuLy8gcmVhbG0gaGFzIGl0cyBvd24gZGlzdGluY3QgY2xhc3MgaWRlbnRpdHkuIENyb3NzLXJlYWxtIGBpbnN0YW5jZW9mYCBmYWlsc1xuLy8gYmVjYXVzZSB0aGUgcHJvdG90eXBlIGNoYWlucyBuZXZlciBtZWV0LlxuLy9cbi8vIFRvIGxldCBzZXJpYWxpemF0aW9uIHJldml2ZXJzIHJlY29uc3RydWN0IGEgdmFsdWUgYXMgdGhlICpjb25zdW1lcidzKlxuLy8gRmF0YWxFcnJvciAoc28gdXNlci1jb2RlIGBlcnIgaW5zdGFuY2VvZiBGYXRhbEVycm9yYCBwYXNzZXMpLCBlYWNoIGJ1bmRsZWRcbi8vIGNvcHkgb2YgdGhpcyBtb2R1bGUgc2VsZi1yZWdpc3RlcnMgaXRzIGNsYXNzIG9uIGBnbG9iYWxUaGlzYCB2aWEgYSBrbm93blxuLy8gU3ltYm9sLmZvciBrZXkuIFJldml2ZXJzIGluIGBAd29ya2Zsb3cvY29yZWAgbG9vayB1cCB0aGUgY2xhc3MgdmlhIHRoZVxuLy8gY29uc3VtZXIncyBnbG9iYWxUaGlzIGF0IGh5ZHJhdGlvbiB0aW1lLlxuLy9cbi8vIEZpcnN0IHJlZ2lzdHJhdGlvbiBpbiBhIGdpdmVuIHJlYWxtIHdpbnMuIFRoZSBkZXNjcmlwdG9yIGlzIG5vbi13cml0YWJsZVxuLy8gYW5kIG5vbi1jb25maWd1cmFibGUgdG8gbWFrZSBhY2NpZGVudGFsIGNsb2JiZXJpbmcgbG91ZC5cbmNvbnN0IEZBVEFMX0VSUk9SX0tFWSA9IFN5bWJvbC5mb3IoJ0B3b3JrZmxvdy9lcnJvcnMvL0ZhdGFsRXJyb3InKTtcbmNvbnN0IFJFVFJZQUJMRV9FUlJPUl9LRVkgPSBTeW1ib2wuZm9yKCdAd29ya2Zsb3cvZXJyb3JzLy9SZXRyeWFibGVFcnJvcicpO1xuY29uc3QgSE9PS19DT05GTElDVF9FUlJPUl9LRVkgPSBTeW1ib2wuZm9yKFxuICAnQHdvcmtmbG93L2Vycm9ycy8vSG9va0NvbmZsaWN0RXJyb3InXG4pO1xuXG5pZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnKSB7XG4gIGlmICghT2JqZWN0Lmhhc093bihnbG9iYWxUaGlzLCBGQVRBTF9FUlJPUl9LRVkpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIEZBVEFMX0VSUk9SX0tFWSwge1xuICAgICAgdmFsdWU6IEZhdGFsRXJyb3IsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfSk7XG4gIH1cbiAgaWYgKCFPYmplY3QuaGFzT3duKGdsb2JhbFRoaXMsIFJFVFJZQUJMRV9FUlJPUl9LRVkpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIFJFVFJZQUJMRV9FUlJPUl9LRVksIHtcbiAgICAgIHZhbHVlOiBSZXRyeWFibGVFcnJvcixcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuICBpZiAoIU9iamVjdC5oYXNPd24oZ2xvYmFsVGhpcywgSE9PS19DT05GTElDVF9FUlJPUl9LRVkpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIEhPT0tfQ09ORkxJQ1RfRVJST1JfS0VZLCB7XG4gICAgICB2YWx1ZTogSG9va0NvbmZsaWN0RXJyb3IsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgfSk7XG4gIH1cbn1cbiIsICJleHBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zY2hlbWFzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jaGVja3MuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGFyc2UuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBhdC5qc1wiO1xuLy8gem9kLXNwZWNpZmllZFxuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSBcIi4uL2NvcmUvaW5kZXguanNcIjtcbmltcG9ydCBlbiBmcm9tIFwiLi4vbG9jYWxlcy9lbi5qc1wiO1xuY29uZmlnKGVuKCkpO1xuZXhwb3J0IHsgZ2xvYmFsUmVnaXN0cnksIHJlZ2lzdHJ5LCBjb25maWcsICRvdXRwdXQsICRpbnB1dCwgJGJyYW5kLCBjbG9uZSwgcmVnZXhlcywgdHJlZWlmeUVycm9yLCBwcmV0dGlmeUVycm9yLCBmb3JtYXRFcnJvciwgZmxhdHRlbkVycm9yLCBUaW1lUHJlY2lzaW9uLCB1dGlsLCBORVZFUiB9IGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5leHBvcnQgeyB0b0pTT05TY2hlbWEgfSBmcm9tIFwiLi4vY29yZS9qc29uLXNjaGVtYS1wcm9jZXNzb3JzLmpzXCI7XG5leHBvcnQgeyBmcm9tSlNPTlNjaGVtYSB9IGZyb20gXCIuL2Zyb20tanNvbi1zY2hlbWEuanNcIjtcbmV4cG9ydCAqIGFzIGxvY2FsZXMgZnJvbSBcIi4uL2xvY2FsZXMvaW5kZXguanNcIjtcbi8vIGlzb1xuLy8gbXVzdCBiZSBleHBvcnRlZCBmcm9tIHRvcC1sZXZlbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2NvbGluaGFja3Mvem9kL2lzc3Vlcy80NDkxXG5leHBvcnQgeyBab2RJU09EYXRlVGltZSwgWm9kSVNPRGF0ZSwgWm9kSVNPVGltZSwgWm9kSVNPRHVyYXRpb24gfSBmcm9tIFwiLi9pc28uanNcIjtcbmV4cG9ydCAqIGFzIGlzbyBmcm9tIFwiLi9pc28uanNcIjtcbmV4cG9ydCAqIGFzIGNvZXJjZSBmcm9tIFwiLi9jb2VyY2UuanNcIjtcbiIsICJleHBvcnQgKiBmcm9tIFwiLi9jb3JlLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wYXJzZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zY2hlbWFzLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jaGVja3MuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZlcnNpb25zLmpzXCI7XG5leHBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbmV4cG9ydCAqIGFzIHJlZ2V4ZXMgZnJvbSBcIi4vcmVnZXhlcy5qc1wiO1xuZXhwb3J0ICogYXMgbG9jYWxlcyBmcm9tIFwiLi4vbG9jYWxlcy9pbmRleC5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVnaXN0cmllcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG9jLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hcGkuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RvLWpzb24tc2NoZW1hLmpzXCI7XG5leHBvcnQgeyB0b0pTT05TY2hlbWEgfSBmcm9tIFwiLi9qc29uLXNjaGVtYS1wcm9jZXNzb3JzLmpzXCI7XG5leHBvcnQgeyBKU09OU2NoZW1hR2VuZXJhdG9yIH0gZnJvbSBcIi4vanNvbi1zY2hlbWEtZ2VuZXJhdG9yLmpzXCI7XG5leHBvcnQgKiBhcyBKU09OU2NoZW1hIGZyb20gXCIuL2pzb24tc2NoZW1hLmpzXCI7XG4iLCAiLyoqIEEgc3BlY2lhbCBjb25zdGFudCB3aXRoIHR5cGUgYG5ldmVyYCAqLyBleHBvcnQgY29uc3QgTkVWRVIgPSBPYmplY3QuZnJlZXplKHtcbiAgICBzdGF0dXM6IFwiYWJvcnRlZFwiXG59KTtcbmV4cG9ydCAvKkBfX05PX1NJREVfRUZGRUNUU19fKi8gZnVuY3Rpb24gJGNvbnN0cnVjdG9yKG5hbWUsIGluaXRpYWxpemVyLCBwYXJhbXMpIHtcbiAgICBmdW5jdGlvbiBpbml0KGluc3QsIGRlZikge1xuICAgICAgICBpZiAoIWluc3QuX3pvZCkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwiX3pvZFwiLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVmLFxuICAgICAgICAgICAgICAgICAgICBjb25zdHI6IF8sXG4gICAgICAgICAgICAgICAgICAgIHRyYWl0czogbmV3IFNldCgpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3QuX3pvZC50cmFpdHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW5zdC5fem9kLnRyYWl0cy5hZGQobmFtZSk7XG4gICAgICAgIGluaXRpYWxpemVyKGluc3QsIGRlZik7XG4gICAgICAgIC8vIHN1cHBvcnQgcHJvdG90eXBlIG1vZGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgcHJvdG8gPSBfLnByb3RvdHlwZTtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3RvKTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgY29uc3QgayA9IGtleXNbaV07XG4gICAgICAgICAgICBpZiAoIShrIGluIGluc3QpKSB7XG4gICAgICAgICAgICAgICAgaW5zdFtrXSA9IHByb3RvW2tdLmJpbmQoaW5zdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gZG9lc24ndCB3b3JrIGlmIFBhcmVudCBoYXMgYSBjb25zdHJ1Y3RvciB3aXRoIGFyZ3VtZW50c1xuICAgIGNvbnN0IFBhcmVudCA9IHBhcmFtcz8uUGFyZW50ID8/IE9iamVjdDtcbiAgICBjbGFzcyBEZWZpbml0aW9uIGV4dGVuZHMgUGFyZW50IHtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KERlZmluaXRpb24sIFwibmFtZVwiLCB7XG4gICAgICAgIHZhbHVlOiBuYW1lXG4gICAgfSk7XG4gICAgZnVuY3Rpb24gXyhkZWYpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBpbnN0ID0gcGFyYW1zPy5QYXJlbnQgPyBuZXcgRGVmaW5pdGlvbigpIDogdGhpcztcbiAgICAgICAgaW5pdChpbnN0LCBkZWYpO1xuICAgICAgICAoX2EgPSBpbnN0Ll96b2QpLmRlZmVycmVkID8/IChfYS5kZWZlcnJlZCA9IFtdKTtcbiAgICAgICAgZm9yIChjb25zdCBmbiBvZiBpbnN0Ll96b2QuZGVmZXJyZWQpe1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zdDtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIFwiaW5pdFwiLCB7XG4gICAgICAgIHZhbHVlOiBpbml0XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIFN5bWJvbC5oYXNJbnN0YW5jZSwge1xuICAgICAgICB2YWx1ZTogKGluc3QpPT57XG4gICAgICAgICAgICBpZiAocGFyYW1zPy5QYXJlbnQgJiYgaW5zdCBpbnN0YW5jZW9mIHBhcmFtcy5QYXJlbnQpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGluc3Q/Ll96b2Q/LnRyYWl0cz8uaGFzKG5hbWUpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIFwibmFtZVwiLCB7XG4gICAgICAgIHZhbHVlOiBuYW1lXG4gICAgfSk7XG4gICAgcmV0dXJuIF87XG59XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gICBVVElMSVRJRVMgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCBjb25zdCAkYnJhbmQgPSBTeW1ib2woXCJ6b2RfYnJhbmRcIik7XG5leHBvcnQgY2xhc3MgJFpvZEFzeW5jRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgc3VwZXIoYEVuY291bnRlcmVkIFByb21pc2UgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlLiBVc2UgLnBhcnNlQXN5bmMoKSBpbnN0ZWFkLmApO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyAkWm9kRW5jb2RlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobmFtZSl7XG4gICAgICAgIHN1cGVyKGBFbmNvdW50ZXJlZCB1bmlkaXJlY3Rpb25hbCB0cmFuc2Zvcm0gZHVyaW5nIGVuY29kZTogJHtuYW1lfWApO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlpvZEVuY29kZUVycm9yXCI7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0IGdsb2JhbENvbmZpZyA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZyhuZXdDb25maWcpIHtcbiAgICBpZiAobmV3Q29uZmlnKSBPYmplY3QuYXNzaWduKGdsb2JhbENvbmZpZywgbmV3Q29uZmlnKTtcbiAgICByZXR1cm4gZ2xvYmFsQ29uZmlnO1xufVxuIiwgIi8vIGZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEVxdWFsKHZhbCkge1xuICAgIHJldHVybiB2YWw7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm90RXF1YWwodmFsKSB7XG4gICAgcmV0dXJuIHZhbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJcyhfYXJnKSB7fVxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydE5ldmVyKF94KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCB2YWx1ZSBpbiBleGhhdXN0aXZlIGNoZWNrXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydChfKSB7fVxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1WYWx1ZXMoZW50cmllcykge1xuICAgIGNvbnN0IG51bWVyaWNWYWx1ZXMgPSBPYmplY3QudmFsdWVzKGVudHJpZXMpLmZpbHRlcigodik9PnR5cGVvZiB2ID09PSBcIm51bWJlclwiKTtcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QuZW50cmllcyhlbnRyaWVzKS5maWx0ZXIoKFtrLCBfXSk9Pm51bWVyaWNWYWx1ZXMuaW5kZXhPZigraykgPT09IC0xKS5tYXAoKFtfLCB2XSk9PnYpO1xuICAgIHJldHVybiB2YWx1ZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gam9pblZhbHVlcyhhcnJheSwgc2VwYXJhdG9yID0gXCJ8XCIpIHtcbiAgICByZXR1cm4gYXJyYXkubWFwKCh2YWwpPT5zdHJpbmdpZnlQcmltaXRpdmUodmFsKSkuam9pbihzZXBhcmF0b3IpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGpzb25TdHJpbmdpZnlSZXBsYWNlcihfLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIpIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjYWNoZWQoZ2V0dGVyKSB7XG4gICAgY29uc3Qgc2V0ID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0IHZhbHVlICgpIHtcbiAgICAgICAgICAgIGlmICghc2V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXR0ZXIoKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJ2YWx1ZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FjaGVkIHZhbHVlIGFscmVhZHkgc2V0XCIpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBudWxsaXNoKGlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0ID09PSBudWxsIHx8IGlucHV0ID09PSB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY2xlYW5SZWdleChzb3VyY2UpIHtcbiAgICBjb25zdCBzdGFydCA9IHNvdXJjZS5zdGFydHNXaXRoKFwiXlwiKSA/IDEgOiAwO1xuICAgIGNvbnN0IGVuZCA9IHNvdXJjZS5lbmRzV2l0aChcIiRcIikgPyBzb3VyY2UubGVuZ3RoIC0gMSA6IHNvdXJjZS5sZW5ndGg7XG4gICAgcmV0dXJuIHNvdXJjZS5zbGljZShzdGFydCwgZW5kKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdFNhZmVSZW1haW5kZXIodmFsLCBzdGVwKSB7XG4gICAgY29uc3QgdmFsRGVjQ291bnQgPSAodmFsLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdIHx8IFwiXCIpLmxlbmd0aDtcbiAgICBjb25zdCBzdGVwU3RyaW5nID0gc3RlcC50b1N0cmluZygpO1xuICAgIGxldCBzdGVwRGVjQ291bnQgPSAoc3RlcFN0cmluZy5zcGxpdChcIi5cIilbMV0gfHwgXCJcIikubGVuZ3RoO1xuICAgIGlmIChzdGVwRGVjQ291bnQgPT09IDAgJiYgL1xcZD9lLVxcZD8vLnRlc3Qoc3RlcFN0cmluZykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBzdGVwU3RyaW5nLm1hdGNoKC9cXGQ/ZS0oXFxkPykvKTtcbiAgICAgICAgaWYgKG1hdGNoPy5bMV0pIHtcbiAgICAgICAgICAgIHN0ZXBEZWNDb3VudCA9IE51bWJlci5wYXJzZUludChtYXRjaFsxXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGVjQ291bnQgPSB2YWxEZWNDb3VudCA+IHN0ZXBEZWNDb3VudCA/IHZhbERlY0NvdW50IDogc3RlcERlY0NvdW50O1xuICAgIGNvbnN0IHZhbEludCA9IE51bWJlci5wYXJzZUludCh2YWwudG9GaXhlZChkZWNDb3VudCkucmVwbGFjZShcIi5cIiwgXCJcIikpO1xuICAgIGNvbnN0IHN0ZXBJbnQgPSBOdW1iZXIucGFyc2VJbnQoc3RlcC50b0ZpeGVkKGRlY0NvdW50KS5yZXBsYWNlKFwiLlwiLCBcIlwiKSk7XG4gICAgcmV0dXJuIHZhbEludCAlIHN0ZXBJbnQgLyAxMCAqKiBkZWNDb3VudDtcbn1cbmNvbnN0IEVWQUxVQVRJTkcgPSBTeW1ib2woXCJldmFsdWF0aW5nXCIpO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUxhenkob2JqZWN0LCBrZXksIGdldHRlcikge1xuICAgIGxldCB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICAgZ2V0ICgpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gRVZBTFVBVElORykge1xuICAgICAgICAgICAgICAgIC8vIENpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCwgcmV0dXJuIHVuZGVmaW5lZCB0byBicmVhayB0aGUgY3ljbGVcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IEVWQUxVQVRJTkc7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXR0ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0ICh2KSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIC8vIG9iamVjdFtrZXldID0gdjtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0Q2xvbmUob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaiksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iaikpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblByb3AodGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3AsIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURlZnMoLi4uZGVmcykge1xuICAgIGNvbnN0IG1lcmdlZERlc2NyaXB0b3JzID0ge307XG4gICAgZm9yIChjb25zdCBkZWYgb2YgZGVmcyl7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZGVmKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihtZXJnZWREZXNjcmlwdG9ycywgZGVzY3JpcHRvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoe30sIG1lcmdlZERlc2NyaXB0b3JzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZURlZihzY2hlbWEpIHtcbiAgICByZXR1cm4gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEF0UGF0aChvYmosIHBhdGgpIHtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBvYmo7XG4gICAgcmV0dXJuIHBhdGgucmVkdWNlKChhY2MsIGtleSk9PmFjYz8uW2tleV0sIG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUFsbE9iamVjdChwcm9taXNlc09iaikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9taXNlc09iaik7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBrZXlzLm1hcCgoa2V5KT0+cHJvbWlzZXNPYmpba2V5XSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKChyZXN1bHRzKT0+e1xuICAgICAgICBjb25zdCByZXNvbHZlZE9iaiA9IHt9O1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICByZXNvbHZlZE9ialtrZXlzW2ldXSA9IHJlc3VsdHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkT2JqO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZyhsZW5ndGggPSAxMCkge1xuICAgIGNvbnN0IGNoYXJzID0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO1xuICAgIGxldCBzdHIgPSBcIlwiO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKyl7XG4gICAgICAgIHN0ciArPSBjaGFyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpXTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBlc2Moc3RyKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN0cik7XG59XG5leHBvcnQgZnVuY3Rpb24gc2x1Z2lmeShpbnB1dCkge1xuICAgIHJldHVybiBpbnB1dC50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC9bXlxcd1xccy1dL2csIFwiXCIpLnJlcGxhY2UoL1tcXHNfLV0rL2csIFwiLVwiKS5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpO1xufVxuZXhwb3J0IGNvbnN0IGNhcHR1cmVTdGFja1RyYWNlID0gXCJjYXB0dXJlU3RhY2tUcmFjZVwiIGluIEVycm9yID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgOiAoLi4uX2FyZ3MpPT57fTtcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChkYXRhKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIGRhdGEgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSk7XG59XG5leHBvcnQgY29uc3QgYWxsb3dzRXZhbCA9IGNhY2hlZCgoKT0+e1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuYXZpZ2F0b3I/LnVzZXJBZ2VudD8uaW5jbHVkZXMoXCJDbG91ZGZsYXJlXCIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgRiA9IEZ1bmN0aW9uO1xuICAgICAgICBuZXcgRihcIlwiKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufSk7XG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvKSB7XG4gICAgaWYgKGlzT2JqZWN0KG8pID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIG1vZGlmaWVkIGNvbnN0cnVjdG9yXG4gICAgY29uc3QgY3RvciA9IG8uY29uc3RydWN0b3I7XG4gICAgaWYgKGN0b3IgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHR5cGVvZiBjdG9yICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuICAgIC8vIG1vZGlmaWVkIHByb3RvdHlwZVxuICAgIGNvbnN0IHByb3QgPSBjdG9yLnByb3RvdHlwZTtcbiAgICBpZiAoaXNPYmplY3QocHJvdCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gY3RvciBkb2Vzbid0IGhhdmUgc3RhdGljIGBpc1Byb3RvdHlwZU9mYFxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdCwgXCJpc1Byb3RvdHlwZU9mXCIpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNoYWxsb3dDbG9uZShvKSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QobykpIHJldHVybiB7XG4gICAgICAgIC4uLm9cbiAgICB9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KG8pKSByZXR1cm4gW1xuICAgICAgICAuLi5vXG4gICAgXTtcbiAgICByZXR1cm4gbztcbn1cbmV4cG9ydCBmdW5jdGlvbiBudW1LZXlzKGRhdGEpIHtcbiAgICBsZXQga2V5Q291bnQgPSAwO1xuICAgIGZvcihjb25zdCBrZXkgaW4gZGF0YSl7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSkge1xuICAgICAgICAgICAga2V5Q291bnQrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5Q291bnQ7XG59XG5leHBvcnQgY29uc3QgZ2V0UGFyc2VkVHlwZSA9IChkYXRhKT0+e1xuICAgIGNvbnN0IHQgPSB0eXBlb2YgZGF0YTtcbiAgICBzd2l0Y2godCl7XG4gICAgICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgICAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgcmV0dXJuIE51bWJlci5pc05hTihkYXRhKSA/IFwibmFuXCIgOiBcIm51bWJlclwiO1xuICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgICBjYXNlIFwiZnVuY3Rpb25cIjpcbiAgICAgICAgICAgIHJldHVybiBcImZ1bmN0aW9uXCI7XG4gICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICAgIHJldHVybiBcImJpZ2ludFwiO1xuICAgICAgICBjYXNlIFwic3ltYm9sXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJzeW1ib2xcIjtcbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS50aGVuICYmIHR5cGVvZiBkYXRhLnRoZW4gPT09IFwiZnVuY3Rpb25cIiAmJiBkYXRhLmNhdGNoICYmIHR5cGVvZiBkYXRhLmNhdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJwcm9taXNlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibWFwXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2V0XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIERhdGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJkYXRlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAodHlwZW9mIEZpbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJmaWxlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJvYmplY3RcIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBkYXRhIHR5cGU6ICR7dH1gKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHByb3BlcnR5S2V5VHlwZXMgPSBuZXcgU2V0KFtcbiAgICBcInN0cmluZ1wiLFxuICAgIFwibnVtYmVyXCIsXG4gICAgXCJzeW1ib2xcIlxuXSk7XG5leHBvcnQgY29uc3QgcHJpbWl0aXZlVHlwZXMgPSBuZXcgU2V0KFtcbiAgICBcInN0cmluZ1wiLFxuICAgIFwibnVtYmVyXCIsXG4gICAgXCJiaWdpbnRcIixcbiAgICBcImJvb2xlYW5cIixcbiAgICBcInN5bWJvbFwiLFxuICAgIFwidW5kZWZpbmVkXCJcbl0pO1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVJlZ2V4KHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpO1xufVxuLy8gem9kLXNwZWNpZmljIHV0aWxzXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoaW5zdCwgZGVmLCBwYXJhbXMpIHtcbiAgICBjb25zdCBjbCA9IG5ldyBpbnN0Ll96b2QuY29uc3RyKGRlZiA/PyBpbnN0Ll96b2QuZGVmKTtcbiAgICBpZiAoIWRlZiB8fCBwYXJhbXM/LnBhcmVudCkgY2wuX3pvZC5wYXJlbnQgPSBpbnN0O1xuICAgIHJldHVybiBjbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQYXJhbXMoX3BhcmFtcykge1xuICAgIGNvbnN0IHBhcmFtcyA9IF9wYXJhbXM7XG4gICAgaWYgKCFwYXJhbXMpIHJldHVybiB7fTtcbiAgICBpZiAodHlwZW9mIHBhcmFtcyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHtcbiAgICAgICAgZXJyb3I6ICgpPT5wYXJhbXNcbiAgICB9O1xuICAgIGlmIChwYXJhbXM/Lm1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGFyYW1zPy5lcnJvciAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc3BlY2lmeSBib3RoIGBtZXNzYWdlYCBhbmQgYGVycm9yYCBwYXJhbXNcIik7XG4gICAgICAgIHBhcmFtcy5lcnJvciA9IHBhcmFtcy5tZXNzYWdlO1xuICAgIH1cbiAgICBkZWxldGUgcGFyYW1zLm1lc3NhZ2U7XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZXJyb3IgPT09IFwic3RyaW5nXCIpIHJldHVybiB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgZXJyb3I6ICgpPT5wYXJhbXMuZXJyb3JcbiAgICB9O1xuICAgIHJldHVybiBwYXJhbXM7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHJhbnNwYXJlbnRQcm94eShnZXR0ZXIpIHtcbiAgICBsZXQgdGFyZ2V0O1xuICAgIHJldHVybiBuZXcgUHJveHkoe30sIHtcbiAgICAgICAgZ2V0IChfLCBwcm9wLCByZWNlaXZlcikge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldCAoXywgcHJvcCwgdmFsdWUsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3AsIHZhbHVlLCByZWNlaXZlcik7XG4gICAgICAgIH0sXG4gICAgICAgIGhhcyAoXywgcHJvcCkge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVsZXRlUHJvcGVydHkgKF8sIHByb3ApIHtcbiAgICAgICAgICAgIHRhcmdldCA/PyAodGFyZ2V0ID0gZ2V0dGVyKCkpO1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3duS2V5cyAoXykge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRhcmdldCk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvciAoXywgcHJvcCkge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVmaW5lUHJvcGVydHkgKF8sIHByb3AsIGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHRhcmdldCA/PyAodGFyZ2V0ID0gZ2V0dGVyKCkpO1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wLCBkZXNjcmlwdG9yKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVByaW1pdGl2ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIpIHJldHVybiB2YWx1ZS50b1N0cmluZygpICsgXCJuXCI7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGBcIiR7dmFsdWV9XCJgO1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsS2V5cyhzaGFwZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzaGFwZSkuZmlsdGVyKChrKT0+e1xuICAgICAgICByZXR1cm4gc2hhcGVba10uX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiICYmIHNoYXBlW2tdLl96b2Qub3B0b3V0ID09PSBcIm9wdGlvbmFsXCI7XG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgTlVNQkVSX0ZPUk1BVF9SQU5HRVMgPSB7XG4gICAgc2FmZWludDogW1xuICAgICAgICBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgICAgICAgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgICBdLFxuICAgIGludDMyOiBbXG4gICAgICAgIC0yMTQ3NDgzNjQ4LFxuICAgICAgICAyMTQ3NDgzNjQ3XG4gICAgXSxcbiAgICB1aW50MzI6IFtcbiAgICAgICAgMCxcbiAgICAgICAgNDI5NDk2NzI5NVxuICAgIF0sXG4gICAgZmxvYXQzMjogW1xuICAgICAgICAtMy40MDI4MjM0NjYzODUyODg2ZTM4LFxuICAgICAgICAzLjQwMjgyMzQ2NjM4NTI4ODZlMzhcbiAgICBdLFxuICAgIGZsb2F0NjQ6IFtcbiAgICAgICAgLU51bWJlci5NQVhfVkFMVUUsXG4gICAgICAgIE51bWJlci5NQVhfVkFMVUVcbiAgICBdXG59O1xuZXhwb3J0IGNvbnN0IEJJR0lOVF9GT1JNQVRfUkFOR0VTID0ge1xuICAgIGludDY0OiBbXG4gICAgICAgIC8qIEBfX1BVUkVfXyovIEJpZ0ludChcIi05MjIzMzcyMDM2ODU0Nzc1ODA4XCIpLFxuICAgICAgICAvKiBAX19QVVJFX18qLyBCaWdJbnQoXCI5MjIzMzcyMDM2ODU0Nzc1ODA3XCIpXG4gICAgXSxcbiAgICB1aW50NjQ6IFtcbiAgICAgICAgLyogQF9fUFVSRV9fKi8gQmlnSW50KDApLFxuICAgICAgICAvKiBAX19QVVJFX18qLyBCaWdJbnQoXCIxODQ0Njc0NDA3MzcwOTU1MTYxNVwiKVxuICAgIF1cbn07XG5leHBvcnQgZnVuY3Rpb24gcGljayhzY2hlbWEsIG1hc2spIHtcbiAgICBjb25zdCBjdXJyRGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIGNvbnN0IGNoZWNrcyA9IGN1cnJEZWYuY2hlY2tzO1xuICAgIGNvbnN0IGhhc0NoZWNrcyA9IGNoZWNrcyAmJiBjaGVja3MubGVuZ3RoID4gMDtcbiAgICBpZiAoaGFzQ2hlY2tzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIi5waWNrKCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c1wiKTtcbiAgICB9XG4gICAgY29uc3QgZGVmID0gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUgKCkge1xuICAgICAgICAgICAgY29uc3QgbmV3U2hhcGUgPSB7fTtcbiAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gbWFzayl7XG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIGN1cnJEZWYuc2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGtleTogXCIke2tleX1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IGN1cnJEZWYuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBuZXdTaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIG5ld1NoYXBlO1xuICAgICAgICB9LFxuICAgICAgICBjaGVja3M6IFtdXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKHNjaGVtYSwgZGVmKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvbWl0KHNjaGVtYSwgbWFzaykge1xuICAgIGNvbnN0IGN1cnJEZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgY2hlY2tzID0gY3VyckRlZi5jaGVja3M7XG4gICAgY29uc3QgaGFzQ2hlY2tzID0gY2hlY2tzICYmIGNoZWNrcy5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGVja3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiLm9taXQoKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzXCIpO1xuICAgIH1cbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoc2NoZW1hLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSAoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHtcbiAgICAgICAgICAgICAgICAuLi5zY2hlbWEuX3pvZC5kZWYuc2hhcGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IoY29uc3Qga2V5IGluIG1hc2spe1xuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBjdXJyRGVmLnNoYXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBrZXk6IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFtYXNrW2tleV0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdTaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIG5ld1NoYXBlKTsgLy8gc2VsZi1jYWNoaW5nXG4gICAgICAgICAgICByZXR1cm4gbmV3U2hhcGU7XG4gICAgICAgIH0sXG4gICAgICAgIGNoZWNrczogW11cbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChzY2hlbWEsIHNoYXBlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHNoYXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHRvIGV4dGVuZDogZXhwZWN0ZWQgYSBwbGFpbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrcyA9IHNjaGVtYS5fem9kLmRlZi5jaGVja3M7XG4gICAgY29uc3QgaGFzQ2hlY2tzID0gY2hlY2tzICYmIGNoZWNrcy5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGVja3MpIHtcbiAgICAgICAgLy8gT25seSB0aHJvdyBpZiBuZXcgc2hhcGUgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzaGFwZVxuICAgICAgICAvLyBVc2UgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIHRvIGNoZWNrIGtleSBleGlzdGVuY2Ugd2l0aG91dCBhY2Nlc3NpbmcgdmFsdWVzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU2hhcGUgPSBzY2hlbWEuX3pvZC5kZWYuc2hhcGU7XG4gICAgICAgIGZvcihjb25zdCBrZXkgaW4gc2hhcGUpe1xuICAgICAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhpc3RpbmdTaGFwZSwga2V5KSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGVmID0gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUgKCkge1xuICAgICAgICAgICAgY29uc3QgX3NoYXBlID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYS5fem9kLmRlZi5zaGFwZSxcbiAgICAgICAgICAgICAgICAuLi5zaGFwZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBfc2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBfc2hhcGU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVFeHRlbmQoc2NoZW1hLCBzaGFwZSkge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChzaGFwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCB0byBzYWZlRXh0ZW5kOiBleHBlY3RlZCBhIHBsYWluIG9iamVjdFwiKTtcbiAgICB9XG4gICAgY29uc3QgZGVmID0gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUgKCkge1xuICAgICAgICAgICAgY29uc3QgX3NoYXBlID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYS5fem9kLmRlZi5zaGFwZSxcbiAgICAgICAgICAgICAgICAuLi5zaGFwZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBfc2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBfc2hhcGU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKGEsIGIpIHtcbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUgKCkge1xuICAgICAgICAgICAgY29uc3QgX3NoYXBlID0ge1xuICAgICAgICAgICAgICAgIC4uLmEuX3pvZC5kZWYuc2hhcGUsXG4gICAgICAgICAgICAgICAgLi4uYi5fem9kLmRlZi5zaGFwZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBfc2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBfc2hhcGU7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBjYXRjaGFsbCAoKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5fem9kLmRlZi5jYXRjaGFsbDtcbiAgICAgICAgfSxcbiAgICAgICAgY2hlY2tzOiBbXVxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZShhLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWwoQ2xhc3MsIHNjaGVtYSwgbWFzaykge1xuICAgIGNvbnN0IGN1cnJEZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgY2hlY2tzID0gY3VyckRlZi5jaGVja3M7XG4gICAgY29uc3QgaGFzQ2hlY2tzID0gY2hlY2tzICYmIGNoZWNrcy5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGVja3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiLnBhcnRpYWwoKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzXCIpO1xuICAgIH1cbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoc2NoZW1hLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSAoKSB7XG4gICAgICAgICAgICBjb25zdCBvbGRTaGFwZSA9IHNjaGVtYS5fem9kLmRlZi5zaGFwZTtcbiAgICAgICAgICAgIGNvbnN0IHNoYXBlID0ge1xuICAgICAgICAgICAgICAgIC4uLm9sZFNoYXBlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1hc2spIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3Qga2V5IGluIG1hc2spe1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gb2xkU2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBrZXk6IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIChvbGRTaGFwZVtrZXldIS5fem9kLm9wdGluID09PSBcIm9wdGlvbmFsXCIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gQ2xhc3MgPyBuZXcgQ2xhc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvcHRpb25hbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJUeXBlOiBvbGRTaGFwZVtrZXldXG4gICAgICAgICAgICAgICAgICAgIH0pIDogb2xkU2hhcGVba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gb2xkU2hhcGUpe1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAob2xkU2hhcGVba2V5XSEuX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IENsYXNzID8gbmV3IENsYXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib3B0aW9uYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVHlwZTogb2xkU2hhcGVba2V5XVxuICAgICAgICAgICAgICAgICAgICB9KSA6IG9sZFNoYXBlW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIHNoYXBlKTsgLy8gc2VsZi1jYWNoaW5nXG4gICAgICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgICAgIH0sXG4gICAgICAgIGNoZWNrczogW11cbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVkKENsYXNzLCBzY2hlbWEsIG1hc2spIHtcbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoc2NoZW1hLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSAoKSB7XG4gICAgICAgICAgICBjb25zdCBvbGRTaGFwZSA9IHNjaGVtYS5fem9kLmRlZi5zaGFwZTtcbiAgICAgICAgICAgIGNvbnN0IHNoYXBlID0ge1xuICAgICAgICAgICAgICAgIC4uLm9sZFNoYXBlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKG1hc2spIHtcbiAgICAgICAgICAgICAgICBmb3IoY29uc3Qga2V5IGluIG1hc2spe1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gc2hhcGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBrZXk6IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2tba2V5XSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIG92ZXJ3cml0ZSB3aXRoIG5vbi1vcHRpb25hbFxuICAgICAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gbmV3IENsYXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibm9ub3B0aW9uYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyVHlwZTogb2xkU2hhcGVba2V5XVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gb2xkU2hhcGUpe1xuICAgICAgICAgICAgICAgICAgICAvLyBvdmVyd3JpdGUgd2l0aCBub24tb3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IG5ldyBDbGFzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbm5lclR5cGU6IG9sZFNoYXBlW2tleV1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIHNoYXBlKTsgLy8gc2VsZi1jYWNoaW5nXG4gICAgICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuLy8gaW52YWxpZF90eXBlIHwgdG9vX2JpZyB8IHRvb19zbWFsbCB8IGludmFsaWRfZm9ybWF0IHwgbm90X211bHRpcGxlX29mIHwgdW5yZWNvZ25pemVkX2tleXMgfCBpbnZhbGlkX3VuaW9uIHwgaW52YWxpZF9rZXkgfCBpbnZhbGlkX2VsZW1lbnQgfCBpbnZhbGlkX3ZhbHVlIHwgY3VzdG9tXG5leHBvcnQgZnVuY3Rpb24gYWJvcnRlZCh4LCBzdGFydEluZGV4ID0gMCkge1xuICAgIGlmICh4LmFib3J0ZWQgPT09IHRydWUpIHJldHVybiB0cnVlO1xuICAgIGZvcihsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCB4Lmlzc3Vlcy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGlmICh4Lmlzc3Vlc1tpXT8uY29udGludWUgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhJc3N1ZXMocGF0aCwgaXNzdWVzKSB7XG4gICAgcmV0dXJuIGlzc3Vlcy5tYXAoKGlzcyk9PntcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSBpc3MpLnBhdGggPz8gKF9hLnBhdGggPSBbXSk7XG4gICAgICAgIGlzcy5wYXRoLnVuc2hpZnQocGF0aCk7XG4gICAgICAgIHJldHVybiBpc3M7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdW53cmFwTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8gbWVzc2FnZSA6IG1lc3NhZ2U/Lm1lc3NhZ2U7XG59XG5leHBvcnQgZnVuY3Rpb24gZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29uZmlnKSB7XG4gICAgY29uc3QgZnVsbCA9IHtcbiAgICAgICAgLi4uaXNzLFxuICAgICAgICBwYXRoOiBpc3MucGF0aCA/PyBbXVxuICAgIH07XG4gICAgLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgaWYgKCFpc3MubWVzc2FnZSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdW53cmFwTWVzc2FnZShpc3MuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oaXNzKSkgPz8gdW53cmFwTWVzc2FnZShjdHg/LmVycm9yPy4oaXNzKSkgPz8gdW53cmFwTWVzc2FnZShjb25maWcuY3VzdG9tRXJyb3I/Lihpc3MpKSA/PyB1bndyYXBNZXNzYWdlKGNvbmZpZy5sb2NhbGVFcnJvcj8uKGlzcykpID8/IFwiSW52YWxpZCBpbnB1dFwiO1xuICAgICAgICBmdWxsLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbiAgICAvLyBkZWxldGUgKGZ1bGwgYXMgYW55KS5kZWY7XG4gICAgZGVsZXRlIGZ1bGwuaW5zdDtcbiAgICBkZWxldGUgZnVsbC5jb250aW51ZTtcbiAgICBpZiAoIWN0eD8ucmVwb3J0SW5wdXQpIHtcbiAgICAgICAgZGVsZXRlIGZ1bGwuaW5wdXQ7XG4gICAgfVxuICAgIHJldHVybiBmdWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpemFibGVPcmlnaW4oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBTZXQpIHJldHVybiBcInNldFwiO1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE1hcCkgcmV0dXJuIFwibWFwXCI7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEZpbGUpIHJldHVybiBcImZpbGVcIjtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVuZ3RoYWJsZU9yaWdpbihpbnB1dCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkgcmV0dXJuIFwiYXJyYXlcIjtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VkVHlwZShkYXRhKSB7XG4gICAgY29uc3QgdCA9IHR5cGVvZiBkYXRhO1xuICAgIHN3aXRjaCh0KXtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0YSkgPyBcIm5hblwiIDogXCJudW1iZXJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiYXJyYXlcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0gZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAob2JqICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopICE9PSBPYmplY3QucHJvdG90eXBlICYmIFwiY29uc3RydWN0b3JcIiBpbiBvYmogJiYgb2JqLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmouY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzc3VlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbaXNzLCBpbnB1dCwgaW5zdF0gPSBhcmdzO1xuICAgIGlmICh0eXBlb2YgaXNzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBpc3MsXG4gICAgICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmlzc1xuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gY2xlYW5FbnVtKG9iaikge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhvYmopLmZpbHRlcigoW2ssIF9dKT0+e1xuICAgICAgICAvLyByZXR1cm4gdHJ1ZSBpZiBOYU4sIG1lYW5pbmcgaXQncyBub3QgYSBudW1iZXIsIHRodXMgYSBzdHJpbmcga2V5XG4gICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlSW50KGssIDEwKSk7XG4gICAgfSkubWFwKChlbCk9PmVsWzFdKTtcbn1cbi8vIENvZGVjIHV0aWxpdHkgZnVuY3Rpb25zXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0VG9VaW50OEFycmF5KGJhc2U2NCkge1xuICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoYmFzZTY0KTtcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeVN0cmluZy5sZW5ndGgpO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpKyspe1xuICAgICAgICBieXRlc1tpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gdWludDhBcnJheVRvQmFzZTY0KGJ5dGVzKSB7XG4gICAgbGV0IGJpbmFyeVN0cmluZyA9IFwiXCI7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgYmluYXJ5U3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYnRvYShiaW5hcnlTdHJpbmcpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NHVybFRvVWludDhBcnJheShiYXNlNjR1cmwpIHtcbiAgICBjb25zdCBiYXNlNjQgPSBiYXNlNjR1cmwucmVwbGFjZSgvLS9nLCBcIitcIikucmVwbGFjZSgvXy9nLCBcIi9cIik7XG4gICAgY29uc3QgcGFkZGluZyA9IFwiPVwiLnJlcGVhdCgoNCAtIGJhc2U2NC5sZW5ndGggJSA0KSAlIDQpO1xuICAgIHJldHVybiBiYXNlNjRUb1VpbnQ4QXJyYXkoYmFzZTY0ICsgcGFkZGluZyk7XG59XG5leHBvcnQgZnVuY3Rpb24gdWludDhBcnJheVRvQmFzZTY0dXJsKGJ5dGVzKSB7XG4gICAgcmV0dXJuIHVpbnQ4QXJyYXlUb0Jhc2U2NChieXRlcykucmVwbGFjZSgvXFwrL2csIFwiLVwiKS5yZXBsYWNlKC9cXC8vZywgXCJfXCIpLnJlcGxhY2UoLz0vZywgXCJcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gaGV4VG9VaW50OEFycmF5KGhleCkge1xuICAgIGNvbnN0IGNsZWFuSGV4ID0gaGV4LnJlcGxhY2UoL14weC8sIFwiXCIpO1xuICAgIGlmIChjbGVhbkhleC5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGhcIik7XG4gICAgfVxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoY2xlYW5IZXgubGVuZ3RoIC8gMik7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGNsZWFuSGV4Lmxlbmd0aDsgaSArPSAyKXtcbiAgICAgICAgYnl0ZXNbaSAvIDJdID0gTnVtYmVyLnBhcnNlSW50KGNsZWFuSGV4LnNsaWNlKGksIGkgKyAyKSwgMTYpO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gdWludDhBcnJheVRvSGV4KGJ5dGVzKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oYnl0ZXMpLm1hcCgoYik9PmIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSkuam9pbihcIlwiKTtcbn1cbi8vIGluc3RhbmNlb2ZcbmV4cG9ydCBjbGFzcyBDbGFzcyB7XG4gICAgY29uc3RydWN0b3IoLi4uX2FyZ3Mpe31cbn1cbiIsICJpbXBvcnQgeyAkY29uc3RydWN0b3IgfSBmcm9tIFwiLi9jb3JlLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbmNvbnN0IGluaXRpYWxpemVyID0gKGluc3QsIGRlZik9PntcbiAgICBpbnN0Lm5hbWUgPSBcIiRab2RFcnJvclwiO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcIl96b2RcIiwge1xuICAgICAgICB2YWx1ZTogaW5zdC5fem9kLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcImlzc3Vlc1wiLCB7XG4gICAgICAgIHZhbHVlOiBkZWYsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG4gICAgaW5zdC5tZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkoZGVmLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciwgMik7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwidG9TdHJpbmdcIiwge1xuICAgICAgICB2YWx1ZTogKCk9Pmluc3QubWVzc2FnZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9KTtcbn07XG5leHBvcnQgY29uc3QgJFpvZEVycm9yID0gJGNvbnN0cnVjdG9yKFwiJFpvZEVycm9yXCIsIGluaXRpYWxpemVyKTtcbmV4cG9ydCBjb25zdCAkWm9kUmVhbEVycm9yID0gJGNvbnN0cnVjdG9yKFwiJFpvZEVycm9yXCIsIGluaXRpYWxpemVyLCB7XG4gICAgUGFyZW50OiBFcnJvclxufSk7XG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkVycm9yKGVycm9yLCBtYXBwZXIgPSAoaXNzdWUpPT5pc3N1ZS5tZXNzYWdlKSB7XG4gICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICBjb25zdCBmb3JtRXJyb3JzID0gW107XG4gICAgZm9yIChjb25zdCBzdWIgb2YgZXJyb3IuaXNzdWVzKXtcbiAgICAgICAgaWYgKHN1Yi5wYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXSA9IGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXSB8fCBbXTtcbiAgICAgICAgICAgIGZpZWxkRXJyb3JzW3N1Yi5wYXRoWzBdXS5wdXNoKG1hcHBlcihzdWIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1FcnJvcnMucHVzaChtYXBwZXIoc3ViKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZm9ybUVycm9ycyxcbiAgICAgICAgZmllbGRFcnJvcnNcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEVycm9yKGVycm9yLCBtYXBwZXIgPSAoaXNzdWUpPT5pc3N1ZS5tZXNzYWdlKSB7XG4gICAgY29uc3QgZmllbGRFcnJvcnMgPSB7XG4gICAgICAgIF9lcnJvcnM6IFtdXG4gICAgfTtcbiAgICBjb25zdCBwcm9jZXNzRXJyb3IgPSAoZXJyb3IpPT57XG4gICAgICAgIGZvciAoY29uc3QgaXNzdWUgb2YgZXJyb3IuaXNzdWVzKXtcbiAgICAgICAgICAgIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfdW5pb25cIiAmJiBpc3N1ZS5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaXNzdWUuZXJyb3JzLm1hcCgoaXNzdWVzKT0+cHJvY2Vzc0Vycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzc3Vlc1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9rZXlcIikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIGlzc3VlczogaXNzdWUuaXNzdWVzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9lbGVtZW50XCIpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IGlzc3VlLmlzc3Vlc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc3N1ZS5wYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzLl9lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBmaWVsZEVycm9ycztcbiAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgd2hpbGUoaSA8IGlzc3VlLnBhdGgubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSBpc3N1ZS5wYXRoW2ldO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtaW5hbCA9IGkgPT09IGlzc3VlLnBhdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycltlbF0gPSBjdXJyW2VsXSB8fCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Vycm9yczogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZXJyb3JzOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdLl9lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3VycltlbF07XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHByb2Nlc3NFcnJvcihlcnJvcik7XG4gICAgcmV0dXJuIGZpZWxkRXJyb3JzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRyZWVpZnlFcnJvcihlcnJvciwgbWFwcGVyID0gKGlzc3VlKT0+aXNzdWUubWVzc2FnZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgZXJyb3JzOiBbXVxuICAgIH07XG4gICAgY29uc3QgcHJvY2Vzc0Vycm9yID0gKGVycm9yLCBwYXRoID0gW10pPT57XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGZvciAoY29uc3QgaXNzdWUgb2YgZXJyb3IuaXNzdWVzKXtcbiAgICAgICAgICAgIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfdW5pb25cIiAmJiBpc3N1ZS5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVndWxhciB1bmlvbiBlcnJvclxuICAgICAgICAgICAgICAgIGlzc3VlLmVycm9ycy5tYXAoKGlzc3Vlcyk9PnByb2Nlc3NFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXNcbiAgICAgICAgICAgICAgICAgICAgfSwgaXNzdWUucGF0aCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfa2V5XCIpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IGlzc3VlLmlzc3Vlc1xuICAgICAgICAgICAgICAgIH0sIGlzc3VlLnBhdGgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfZWxlbWVudFwiKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBpc3N1ZS5pc3N1ZXNcbiAgICAgICAgICAgICAgICB9LCBpc3N1ZS5wYXRoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbHBhdGggPSBbXG4gICAgICAgICAgICAgICAgICAgIC4uLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIC4uLmlzc3VlLnBhdGhcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGlmIChmdWxscGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGN1cnIgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlKGkgPCBmdWxscGF0aC5sZW5ndGgpe1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGZ1bGxwYXRoW2ldO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtaW5hbCA9IGkgPT09IGZ1bGxwYXRoLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIucHJvcGVydGllcyA/PyAoY3Vyci5wcm9wZXJ0aWVzID0ge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgKF9hID0gY3Vyci5wcm9wZXJ0aWVzKVtlbF0gPz8gKF9hW2VsXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLnByb3BlcnRpZXNbZWxdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci5pdGVtcyA/PyAoY3Vyci5pdGVtcyA9IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChfYiA9IGN1cnIuaXRlbXMpW2VsXSA/PyAoX2JbZWxdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yczogW11cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIuaXRlbXNbZWxdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci5lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBwcm9jZXNzRXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKiogRm9ybWF0IGEgWm9kRXJyb3IgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgaW4gdGhlIGZvbGxvd2luZyBmb3JtLlxuICpcbiAqIEZyb21cbiAqXG4gKiBgYGB0c1xuICogWm9kRXJyb3Ige1xuICogICBpc3N1ZXM6IFtcbiAqICAgICB7XG4gKiAgICAgICBleHBlY3RlZDogJ3N0cmluZycsXG4gKiAgICAgICBjb2RlOiAnaW52YWxpZF90eXBlJyxcbiAqICAgICAgIHBhdGg6IFsgJ3VzZXJuYW1lJyBdLFxuICogICAgICAgbWVzc2FnZTogJ0ludmFsaWQgaW5wdXQ6IGV4cGVjdGVkIHN0cmluZydcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIGV4cGVjdGVkOiAnbnVtYmVyJyxcbiAqICAgICAgIGNvZGU6ICdpbnZhbGlkX3R5cGUnLFxuICogICAgICAgcGF0aDogWyAnZmF2b3JpdGVOdW1iZXJzJywgMSBdLFxuICogICAgICAgbWVzc2FnZTogJ0ludmFsaWQgaW5wdXQ6IGV4cGVjdGVkIG51bWJlcidcbiAqICAgICB9XG4gKiAgIF07XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiB0b1xuICpcbiAqIGBgYFxuICogdXNlcm5hbWVcbiAqICAgXHUyNzE2IEV4cGVjdGVkIG51bWJlciwgcmVjZWl2ZWQgc3RyaW5nIGF0IFwidXNlcm5hbWVcbiAqIGZhdm9yaXRlTnVtYmVyc1swXVxuICogICBcdTI3MTYgSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgbnVtYmVyXG4gKiBgYGBcbiAqLyBleHBvcnQgZnVuY3Rpb24gdG9Eb3RQYXRoKF9wYXRoKSB7XG4gICAgY29uc3Qgc2VncyA9IFtdO1xuICAgIGNvbnN0IHBhdGggPSBfcGF0aC5tYXAoKHNlZyk9PnR5cGVvZiBzZWcgPT09IFwib2JqZWN0XCIgPyBzZWcua2V5IDogc2VnKTtcbiAgICBmb3IgKGNvbnN0IHNlZyBvZiBwYXRoKXtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWcgPT09IFwibnVtYmVyXCIpIHNlZ3MucHVzaChgWyR7c2VnfV1gKTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNlZyA9PT0gXCJzeW1ib2xcIikgc2Vncy5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShTdHJpbmcoc2VnKSl9XWApO1xuICAgICAgICBlbHNlIGlmICgvW15cXHckXS8udGVzdChzZWcpKSBzZWdzLnB1c2goYFske0pTT04uc3RyaW5naWZ5KHNlZyl9XWApO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzZWdzLmxlbmd0aCkgc2Vncy5wdXNoKFwiLlwiKTtcbiAgICAgICAgICAgIHNlZ3MucHVzaChzZWcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzZWdzLmpvaW4oXCJcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJldHRpZnlFcnJvcihlcnJvcikge1xuICAgIGNvbnN0IGxpbmVzID0gW107XG4gICAgLy8gc29ydCBieSBwYXRoIGxlbmd0aFxuICAgIGNvbnN0IGlzc3VlcyA9IFtcbiAgICAgICAgLi4uZXJyb3IuaXNzdWVzXG4gICAgXS5zb3J0KChhLCBiKT0+KGEucGF0aCA/PyBbXSkubGVuZ3RoIC0gKGIucGF0aCA/PyBbXSkubGVuZ3RoKTtcbiAgICAvLyBQcm9jZXNzIGVhY2ggaXNzdWVcbiAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGlzc3Vlcyl7XG4gICAgICAgIGxpbmVzLnB1c2goYFx1MjcxNiAke2lzc3VlLm1lc3NhZ2V9YCk7XG4gICAgICAgIGlmIChpc3N1ZS5wYXRoPy5sZW5ndGgpIGxpbmVzLnB1c2goYCAgXHUyMTkyIGF0ICR7dG9Eb3RQYXRoKGlzc3VlLnBhdGgpfWApO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IE1hcCB0byBmb3JtYXR0ZWQgc3RyaW5nXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG59XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiLi9jb3JlLmpzXCI7XG5pbXBvcnQgKiBhcyBlcnJvcnMgZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbmV4cG9ydCBjb25zdCBfcGFyc2UgPSAoX0Vycik9PihzY2hlbWEsIHZhbHVlLCBfY3R4LCBfcGFyYW1zKT0+e1xuICAgICAgICBjb25zdCBjdHggPSBfY3R4ID8gT2JqZWN0LmFzc2lnbihfY3R4LCB7XG4gICAgICAgICAgICBhc3luYzogZmFsc2VcbiAgICAgICAgfSkgOiB7XG4gICAgICAgICAgICBhc3luYzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc2NoZW1hLl96b2QucnVuKHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgaXNzdWVzOiBbXVxuICAgICAgICB9LCBjdHgpO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuJFpvZEFzeW5jRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgKF9wYXJhbXM/LkVyciA/PyBfRXJyKShyZXN1bHQuaXNzdWVzLm1hcCgoaXNzKT0+dXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSkpO1xuICAgICAgICAgICAgdXRpbC5jYXB0dXJlU3RhY2tUcmFjZShlLCBfcGFyYW1zPy5jYWxsZWUpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LnZhbHVlO1xuICAgIH07XG5leHBvcnQgY29uc3QgcGFyc2UgPSAvKiBAX19QVVJFX18qLyBfcGFyc2UoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9wYXJzZUFzeW5jID0gKF9FcnIpPT5hc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCwgcGFyYW1zKT0+e1xuICAgICAgICBjb25zdCBjdHggPSBfY3R4ID8gT2JqZWN0LmFzc2lnbihfY3R4LCB7XG4gICAgICAgICAgICBhc3luYzogdHJ1ZVxuICAgICAgICB9KSA6IHtcbiAgICAgICAgICAgIGFzeW5jOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXN1bHQgPSBzY2hlbWEuX3pvZC5ydW4oe1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBpc3N1ZXM6IFtdXG4gICAgICAgIH0sIGN0eCk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSByZXN1bHQgPSBhd2FpdCByZXN1bHQ7XG4gICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZSA9IG5ldyAocGFyYW1zPy5FcnIgPz8gX0VycikocmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcyk9PnV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpKTtcbiAgICAgICAgICAgIHV0aWwuY2FwdHVyZVN0YWNrVHJhY2UoZSwgcGFyYW1zPy5jYWxsZWUpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LnZhbHVlO1xuICAgIH07XG5leHBvcnQgY29uc3QgcGFyc2VBc3luYyA9IC8qIEBfX1BVUkVfXyovIF9wYXJzZUFzeW5jKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZVBhcnNlID0gKF9FcnIpPT4oc2NoZW1hLCB2YWx1ZSwgX2N0eCk9PntcbiAgICAgICAgY29uc3QgY3R4ID0gX2N0eCA/IHtcbiAgICAgICAgICAgIC4uLl9jdHgsXG4gICAgICAgICAgICBhc3luYzogZmFsc2VcbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIGFzeW5jOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBzY2hlbWEuX3pvZC5ydW4oe1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBpc3N1ZXM6IFtdXG4gICAgICAgIH0sIGN0eCk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQuaXNzdWVzLmxlbmd0aCA/IHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IG5ldyAoX0VyciA/PyBlcnJvcnMuJFpvZEVycm9yKShyZXN1bHQuaXNzdWVzLm1hcCgoaXNzKT0+dXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSkpXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZGF0YTogcmVzdWx0LnZhbHVlXG4gICAgICAgIH07XG4gICAgfTtcbmV4cG9ydCBjb25zdCBzYWZlUGFyc2UgPSAvKiBAX19QVVJFX18qLyBfc2FmZVBhcnNlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZVBhcnNlQXN5bmMgPSAoX0Vycik9PmFzeW5jIChzY2hlbWEsIHZhbHVlLCBfY3R4KT0+e1xuICAgICAgICBjb25zdCBjdHggPSBfY3R4ID8gT2JqZWN0LmFzc2lnbihfY3R4LCB7XG4gICAgICAgICAgICBhc3luYzogdHJ1ZVxuICAgICAgICB9KSA6IHtcbiAgICAgICAgICAgIGFzeW5jOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIGxldCByZXN1bHQgPSBzY2hlbWEuX3pvZC5ydW4oe1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBpc3N1ZXM6IFtdXG4gICAgICAgIH0sIGN0eCk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSByZXN1bHQgPSBhd2FpdCByZXN1bHQ7XG4gICAgICAgIHJldHVybiByZXN1bHQuaXNzdWVzLmxlbmd0aCA/IHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IG5ldyBfRXJyKHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpPT51dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSlcbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBkYXRhOiByZXN1bHQudmFsdWVcbiAgICAgICAgfTtcbiAgICB9O1xuZXhwb3J0IGNvbnN0IHNhZmVQYXJzZUFzeW5jID0gLyogQF9fUFVSRV9fKi8gX3NhZmVQYXJzZUFzeW5jKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfZW5jb2RlID0gKF9FcnIpPT4oc2NoZW1hLCB2YWx1ZSwgX2N0eCk9PntcbiAgICAgICAgY29uc3QgY3R4ID0gX2N0eCA/IE9iamVjdC5hc3NpZ24oX2N0eCwge1xuICAgICAgICAgICAgZGlyZWN0aW9uOiBcImJhY2t3YXJkXCJcbiAgICAgICAgfSkgOiB7XG4gICAgICAgICAgICBkaXJlY3Rpb246IFwiYmFja3dhcmRcIlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3BhcnNlKF9FcnIpKHNjaGVtYSwgdmFsdWUsIGN0eCk7XG4gICAgfTtcbmV4cG9ydCBjb25zdCBlbmNvZGUgPSAvKiBAX19QVVJFX18qLyBfZW5jb2RlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfZGVjb2RlID0gKF9FcnIpPT4oc2NoZW1hLCB2YWx1ZSwgX2N0eCk9PntcbiAgICAgICAgcmV0dXJuIF9wYXJzZShfRXJyKShzY2hlbWEsIHZhbHVlLCBfY3R4KTtcbiAgICB9O1xuZXhwb3J0IGNvbnN0IGRlY29kZSA9IC8qIEBfX1BVUkVfXyovIF9kZWNvZGUoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9lbmNvZGVBc3luYyA9IChfRXJyKT0+YXN5bmMgKHNjaGVtYSwgdmFsdWUsIF9jdHgpPT57XG4gICAgICAgIGNvbnN0IGN0eCA9IF9jdHggPyBPYmplY3QuYXNzaWduKF9jdHgsIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiXG4gICAgICAgIH0pIDoge1xuICAgICAgICAgICAgZGlyZWN0aW9uOiBcImJhY2t3YXJkXCJcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIF9wYXJzZUFzeW5jKF9FcnIpKHNjaGVtYSwgdmFsdWUsIGN0eCk7XG4gICAgfTtcbmV4cG9ydCBjb25zdCBlbmNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyovIF9lbmNvZGVBc3luYyhlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX2RlY29kZUFzeW5jID0gKF9FcnIpPT5hc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCk9PntcbiAgICAgICAgcmV0dXJuIF9wYXJzZUFzeW5jKF9FcnIpKHNjaGVtYSwgdmFsdWUsIF9jdHgpO1xuICAgIH07XG5leHBvcnQgY29uc3QgZGVjb2RlQXN5bmMgPSAvKiBAX19QVVJFX18qLyBfZGVjb2RlQXN5bmMoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9zYWZlRW5jb2RlID0gKF9FcnIpPT4oc2NoZW1hLCB2YWx1ZSwgX2N0eCk9PntcbiAgICAgICAgY29uc3QgY3R4ID0gX2N0eCA/IE9iamVjdC5hc3NpZ24oX2N0eCwge1xuICAgICAgICAgICAgZGlyZWN0aW9uOiBcImJhY2t3YXJkXCJcbiAgICAgICAgfSkgOiB7XG4gICAgICAgICAgICBkaXJlY3Rpb246IFwiYmFja3dhcmRcIlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3NhZmVQYXJzZShfRXJyKShzY2hlbWEsIHZhbHVlLCBjdHgpO1xuICAgIH07XG5leHBvcnQgY29uc3Qgc2FmZUVuY29kZSA9IC8qIEBfX1BVUkVfXyovIF9zYWZlRW5jb2RlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZURlY29kZSA9IChfRXJyKT0+KHNjaGVtYSwgdmFsdWUsIF9jdHgpPT57XG4gICAgICAgIHJldHVybiBfc2FmZVBhcnNlKF9FcnIpKHNjaGVtYSwgdmFsdWUsIF9jdHgpO1xuICAgIH07XG5leHBvcnQgY29uc3Qgc2FmZURlY29kZSA9IC8qIEBfX1BVUkVfXyovIF9zYWZlRGVjb2RlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZUVuY29kZUFzeW5jID0gKF9FcnIpPT5hc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCk9PntcbiAgICAgICAgY29uc3QgY3R4ID0gX2N0eCA/IE9iamVjdC5hc3NpZ24oX2N0eCwge1xuICAgICAgICAgICAgZGlyZWN0aW9uOiBcImJhY2t3YXJkXCJcbiAgICAgICAgfSkgOiB7XG4gICAgICAgICAgICBkaXJlY3Rpb246IFwiYmFja3dhcmRcIlxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3NhZmVQYXJzZUFzeW5jKF9FcnIpKHNjaGVtYSwgdmFsdWUsIGN0eCk7XG4gICAgfTtcbmV4cG9ydCBjb25zdCBzYWZlRW5jb2RlQXN5bmMgPSAvKiBAX19QVVJFX18qLyBfc2FmZUVuY29kZUFzeW5jKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZURlY29kZUFzeW5jID0gKF9FcnIpPT5hc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCk9PntcbiAgICAgICAgcmV0dXJuIF9zYWZlUGFyc2VBc3luYyhfRXJyKShzY2hlbWEsIHZhbHVlLCBfY3R4KTtcbiAgICB9O1xuZXhwb3J0IGNvbnN0IHNhZmVEZWNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyovIF9zYWZlRGVjb2RlQXN5bmMoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4vdXRpbC5qc1wiO1xuZXhwb3J0IGNvbnN0IGN1aWQgPSAvXltjQ11bXlxccy1dezgsfSQvO1xuZXhwb3J0IGNvbnN0IGN1aWQyID0gL15bMC05YS16XSskLztcbmV4cG9ydCBjb25zdCB1bGlkID0gL15bMC05QS1ISktNTlAtVFYtWmEtaGprbW5wLXR2LXpdezI2fSQvO1xuZXhwb3J0IGNvbnN0IHhpZCA9IC9eWzAtOWEtdkEtVl17MjB9JC87XG5leHBvcnQgY29uc3Qga3N1aWQgPSAvXltBLVphLXowLTldezI3fSQvO1xuZXhwb3J0IGNvbnN0IG5hbm9pZCA9IC9eW2EtekEtWjAtOV8tXXsyMX0kLztcbi8qKiBJU08gODYwMS0xIGR1cmF0aW9uIHJlZ2V4LiBEb2VzIG5vdCBzdXBwb3J0IHRoZSA4NjAxLTIgZXh0ZW5zaW9ucyBsaWtlIG5lZ2F0aXZlIGR1cmF0aW9ucyBvciBmcmFjdGlvbmFsL25lZ2F0aXZlIGNvbXBvbmVudHMuICovIGV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IC9eUCg/OihcXGQrVyl8KD8hLipXKSg/PVxcZHxUXFxkKShcXGQrWSk/KFxcZCtNKT8oXFxkK0QpPyhUKD89XFxkKShcXGQrSCk/KFxcZCtNKT8oXFxkKyhbLixdXFxkKyk/Uyk/KT8pJC87XG4vKiogSW1wbGVtZW50cyBJU08gODYwMS0yIGV4dGVuc2lvbnMgbGlrZSBleHBsaWNpdCArLSBwcmVmaXhlcywgbWl4aW5nIHdlZWtzIHdpdGggb3RoZXIgdW5pdHMsIGFuZCBmcmFjdGlvbmFsL25lZ2F0aXZlIGNvbXBvbmVudHMuICovIGV4cG9ydCBjb25zdCBleHRlbmRlZER1cmF0aW9uID0gL15bLStdP1AoPyEkKSg/Oig/OlstK10/XFxkK1kpfCg/OlstK10/XFxkK1suLF1cXGQrWSQpKT8oPzooPzpbLStdP1xcZCtNKXwoPzpbLStdP1xcZCtbLixdXFxkK00kKSk/KD86KD86Wy0rXT9cXGQrVyl8KD86Wy0rXT9cXGQrWy4sXVxcZCtXJCkpPyg/Oig/OlstK10/XFxkK0QpfCg/OlstK10/XFxkK1suLF1cXGQrRCQpKT8oPzpUKD89W1xcZCstXSkoPzooPzpbLStdP1xcZCtIKXwoPzpbLStdP1xcZCtbLixdXFxkK0gkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/OlstK10/XFxkKyg/OlsuLF1cXGQrKT9TKT8pPz8kLztcbi8qKiBBIHJlZ2V4IGZvciBhbnkgVVVJRC1saWtlIGlkZW50aWZpZXI6IDgtNC00LTQtMTIgaGV4IHBhdHRlcm4gKi8gZXhwb3J0IGNvbnN0IGd1aWQgPSAvXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0pJC87XG4vKiogUmV0dXJucyBhIHJlZ2V4IGZvciB2YWxpZGF0aW5nIGFuIFJGQyA5NTYyLzQxMjIgVVVJRC5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiBPcHRpb25hbGx5IHNwZWNpZnkgYSB2ZXJzaW9uIDEtOC4gSWYgbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWQsIGFsbCB2ZXJzaW9ucyBhcmUgc3VwcG9ydGVkLiAqLyBleHBvcnQgY29uc3QgdXVpZCA9ICh2ZXJzaW9uKT0+e1xuICAgIGlmICghdmVyc2lvbikgcmV0dXJuIC9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVsxLThdWzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwfGZmZmZmZmZmLWZmZmYtZmZmZi1mZmZmLWZmZmZmZmZmZmZmZikkLztcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS0ke3ZlcnNpb259WzAtOWEtZkEtRl17M30tWzg5YWJBQl1bMC05YS1mQS1GXXszfS1bMC05YS1mQS1GXXsxMn0pJGApO1xufTtcbmV4cG9ydCBjb25zdCB1dWlkNCA9IC8qQF9fUFVSRV9fKi8gdXVpZCg0KTtcbmV4cG9ydCBjb25zdCB1dWlkNiA9IC8qQF9fUFVSRV9fKi8gdXVpZCg2KTtcbmV4cG9ydCBjb25zdCB1dWlkNyA9IC8qQF9fUFVSRV9fKi8gdXVpZCg3KTtcbi8qKiBQcmFjdGljYWwgZW1haWwgdmFsaWRhdGlvbiAqLyBleHBvcnQgY29uc3QgZW1haWwgPSAvXig/IVxcLikoPyEuKlxcLlxcLikoW0EtWmEtejAtOV8nK1xcLVxcLl0qKVtBLVphLXowLTlfKy1dQChbQS1aYS16MC05XVtBLVphLXowLTlcXC1dKlxcLikrW0EtWmEtel17Mix9JC87XG4vKiogRXF1aXZhbGVudCB0byB0aGUgSFRNTDUgaW5wdXRbdHlwZT1lbWFpbF0gdmFsaWRhdGlvbiBpbXBsZW1lbnRlZCBieSBicm93c2Vycy4gU291cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQvZW1haWwgKi8gZXhwb3J0IGNvbnN0IGh0bWw1RW1haWwgPSAvXlthLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC87XG4vKiogVGhlIGNsYXNzaWMgZW1haWxyZWdleC5jb20gcmVnZXggZm9yIFJGQyA1MzIyLWNvbXBsaWFudCBlbWFpbHMgKi8gZXhwb3J0IGNvbnN0IHJmYzUzMjJFbWFpbCA9IC9eKChbXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlxcLTAtOV0rXFwuKStbYS16QS1aXXsyLH0pKSQvO1xuLyoqIEEgbG9vc2UgcmVnZXggdGhhdCBhbGxvd3MgVW5pY29kZSBjaGFyYWN0ZXJzLCBlbmZvcmNlcyBsZW5ndGggbGltaXRzLCBhbmQgdGhhdCdzIGFib3V0IGl0LiAqLyBleHBvcnQgY29uc3QgdW5pY29kZUVtYWlsID0gL15bXlxcc0BcIl17MSw2NH1AW15cXHNAXXsxLDI1NX0kL3U7XG5leHBvcnQgY29uc3QgaWRuRW1haWwgPSB1bmljb2RlRW1haWw7XG5leHBvcnQgY29uc3QgYnJvd3NlckVtYWlsID0gL15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xuLy8gZnJvbSBodHRwczovL3RoZWtldmluc2NvdHQuY29tL2Vtb2ppcy1pbi1qYXZhc2NyaXB0LyN3cml0aW5nLWEtcmVndWxhci1leHByZXNzaW9uXG5jb25zdCBfZW1vamkgPSBgXihcXFxccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9fFxcXFxwe0Vtb2ppX0NvbXBvbmVudH0pKyRgO1xuZXhwb3J0IGZ1bmN0aW9uIGVtb2ppKCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKF9lbW9qaSwgXCJ1XCIpO1xufVxuZXhwb3J0IGNvbnN0IGlwdjQgPSAvXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvO1xuZXhwb3J0IGNvbnN0IGlwdjYgPSAvXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvO1xuZXhwb3J0IGNvbnN0IG1hYyA9IChkZWxpbWl0ZXIpPT57XG4gICAgY29uc3QgZXNjYXBlZERlbGltID0gdXRpbC5lc2NhcGVSZWdleChkZWxpbWl0ZXIgPz8gXCI6XCIpO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKD86WzAtOUEtRl17Mn0ke2VzY2FwZWREZWxpbX0pezV9WzAtOUEtRl17Mn0kfF4oPzpbMC05YS1mXXsyfSR7ZXNjYXBlZERlbGltfSl7NX1bMC05YS1mXXsyfSRgKTtcbn07XG5leHBvcnQgY29uc3QgY2lkcnY0ID0gL14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC4pezN9KDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC8oWzAtOV18WzEtMl1bMC05XXwzWzAtMl0pJC87XG5leHBvcnQgY29uc3QgY2lkcnY2ID0gL14oKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH18Ojp8KFswLTlhLWZBLUZdezEsNH0pPzo6KFswLTlhLWZBLUZdezEsNH06Pyl7MCw2fSlcXC8oMTJbMC04XXwxWzAxXVswLTldfFsxLTldP1swLTldKSQvO1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg2MDM5Mi9kZXRlcm1pbmUtaWYtc3RyaW5nLWlzLWluLWJhc2U2NC11c2luZy1qYXZhc2NyaXB0XG5leHBvcnQgY29uc3QgYmFzZTY0ID0gL14kfF4oPzpbMC05YS16QS1aKy9dezR9KSooPzooPzpbMC05YS16QS1aKy9dezJ9PT0pfCg/OlswLTlhLXpBLVorL117M309KSk/JC87XG5leHBvcnQgY29uc3QgYmFzZTY0dXJsID0gL15bQS1aYS16MC05Xy1dKiQvO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA2MTc5L3JlZ3VsYXItZXhwcmVzc2lvbi10by1tYXRjaC1kbnMtaG9zdG5hbWUtb3ItaXAtYWRkcmVzc1xuLy8gZXhwb3J0IGNvbnN0IGhvc3RuYW1lOiBSZWdFeHAgPSAvXihbYS16QS1aMC05LV0rXFwuKSpbYS16QS1aMC05LV0rJC87XG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSAvXig/PS57MSwyNTN9XFwuPyQpW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbLTAtOWEtekEtWl17MCw2MX1bMC05YS16QS1aXSk/KSpcXC4/JC87XG5leHBvcnQgY29uc3QgZG9tYWluID0gL14oW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/XFwuKStbYS16QS1aXXsyLH0kLztcbi8vIGh0dHBzOi8vYmxvZy5zdGV2ZW5sZXZpdGhhbi5jb20vYXJjaGl2ZXMvdmFsaWRhdGUtcGhvbmUtbnVtYmVyI3I0LTMgKHJlZ2V4IHNhbnMgc3BhY2VzKVxuLy8gRS4xNjQ6IGxlYWRpbmcgZGlnaXQgbXVzdCBiZSAxLTk7IHRvdGFsIGRpZ2l0cyAoZXhjbHVkaW5nICcrJykgYmV0d2VlbiA3LTE1XG5leHBvcnQgY29uc3QgZTE2NCA9IC9eXFwrWzEtOV1cXGR7NiwxNH0kLztcbi8vIGNvbnN0IGRhdGVTb3VyY2UgPSBgKChcXFxcZFxcXFxkWzI0NjhdWzA0OF18XFxcXGRcXFxcZFsxMzU3OV1bMjZdfFxcXFxkXFxcXGQwWzQ4XXxbMDI0NjhdWzA0OF0wMHxbMTM1NzldWzI2XTAwKS0wMi0yOXxcXFxcZHs0fS0oKDBbMTM1NzhdfDFbMDJdKS0oMFsxLTldfFsxMl1cXFxcZHwzWzAxXSl8KDBbNDY5XXwxMSktKDBbMS05XXxbMTJdXFxcXGR8MzApfCgwMiktKDBbMS05XXwxXFxcXGR8MlswLThdKSkpYDtcbmNvbnN0IGRhdGVTb3VyY2UgPSBgKD86KD86XFxcXGRcXFxcZFsyNDY4XVswNDhdfFxcXFxkXFxcXGRbMTM1NzldWzI2XXxcXFxcZFxcXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxcXGR7NH0tKD86KD86MFsxMzU3OF18MVswMl0pLSg/OjBbMS05XXxbMTJdXFxcXGR8M1swMV0pfCg/OjBbNDY5XXwxMSktKD86MFsxLTldfFsxMl1cXFxcZHwzMCl8KD86MDIpLSg/OjBbMS05XXwxXFxcXGR8MlswLThdKSkpYDtcbmV4cG9ydCBjb25zdCBkYXRlID0gLypAX19QVVJFX18qLyBuZXcgUmVnRXhwKGBeJHtkYXRlU291cmNlfSRgKTtcbmZ1bmN0aW9uIHRpbWVTb3VyY2UoYXJncykge1xuICAgIGNvbnN0IGhobW0gPSBgKD86WzAxXVxcXFxkfDJbMC0zXSk6WzAtNV1cXFxcZGA7XG4gICAgY29uc3QgcmVnZXggPSB0eXBlb2YgYXJncy5wcmVjaXNpb24gPT09IFwibnVtYmVyXCIgPyBhcmdzLnByZWNpc2lvbiA9PT0gLTEgPyBgJHtoaG1tfWAgOiBhcmdzLnByZWNpc2lvbiA9PT0gMCA/IGAke2hobW19OlswLTVdXFxcXGRgIDogYCR7aGhtbX06WzAtNV1cXFxcZFxcXFwuXFxcXGR7JHthcmdzLnByZWNpc2lvbn19YCA6IGAke2hobW19KD86OlswLTVdXFxcXGQoPzpcXFxcLlxcXFxkKyk/KT9gO1xuICAgIHJldHVybiByZWdleDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0aW1lKGFyZ3MpIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7dGltZVNvdXJjZShhcmdzKX0kYCk7XG59XG4vLyBBZGFwdGVkIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzMxNDMyMzFcbmV4cG9ydCBmdW5jdGlvbiBkYXRldGltZShhcmdzKSB7XG4gICAgY29uc3QgdGltZSA9IHRpbWVTb3VyY2Uoe1xuICAgICAgICBwcmVjaXNpb246IGFyZ3MucHJlY2lzaW9uXG4gICAgfSk7XG4gICAgY29uc3Qgb3B0cyA9IFtcbiAgICAgICAgXCJaXCJcbiAgICBdO1xuICAgIGlmIChhcmdzLmxvY2FsKSBvcHRzLnB1c2goXCJcIik7XG4gICAgLy8gaWYgKGFyZ3Mub2Zmc2V0KSBvcHRzLnB1c2goYChbKy1dXFxcXGR7Mn06XFxcXGR7Mn0pYCk7XG4gICAgaWYgKGFyZ3Mub2Zmc2V0KSBvcHRzLnB1c2goYChbKy1dKD86WzAxXVxcXFxkfDJbMC0zXSk6WzAtNV1cXFxcZClgKTtcbiAgICBjb25zdCB0aW1lUmVnZXggPSBgJHt0aW1lfSg/OiR7b3B0cy5qb2luKFwifFwiKX0pYDtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7ZGF0ZVNvdXJjZX1UKD86JHt0aW1lUmVnZXh9KSRgKTtcbn1cbmV4cG9ydCBjb25zdCBzdHJpbmcgPSAocGFyYW1zKT0+e1xuICAgIGNvbnN0IHJlZ2V4ID0gcGFyYW1zID8gYFtcXFxcc1xcXFxTXXske3BhcmFtcz8ubWluaW11bSA/PyAwfSwke3BhcmFtcz8ubWF4aW11bSA/PyBcIlwifX1gIDogYFtcXFxcc1xcXFxTXSpgO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHtyZWdleH0kYCk7XG59O1xuZXhwb3J0IGNvbnN0IGJpZ2ludCA9IC9eLT9cXGQrbj8kLztcbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0gL14tP1xcZCskLztcbmV4cG9ydCBjb25zdCBudW1iZXIgPSAvXi0/XFxkKyg/OlxcLlxcZCspPyQvO1xuZXhwb3J0IGNvbnN0IGJvb2xlYW4gPSAvXig/OnRydWV8ZmFsc2UpJC9pO1xuY29uc3QgX251bGwgPSAvXm51bGwkL2k7XG5leHBvcnQgeyBfbnVsbCBhcyBudWxsIH07XG5jb25zdCBfdW5kZWZpbmVkID0gL151bmRlZmluZWQkL2k7XG5leHBvcnQgeyBfdW5kZWZpbmVkIGFzIHVuZGVmaW5lZCB9O1xuLy8gcmVnZXggZm9yIHN0cmluZyB3aXRoIG5vIHVwcGVyY2FzZSBsZXR0ZXJzXG5leHBvcnQgY29uc3QgbG93ZXJjYXNlID0gL15bXkEtWl0qJC87XG4vLyByZWdleCBmb3Igc3RyaW5nIHdpdGggbm8gbG93ZXJjYXNlIGxldHRlcnNcbmV4cG9ydCBjb25zdCB1cHBlcmNhc2UgPSAvXlteYS16XSokLztcbi8vIHJlZ2V4IGZvciBoZXhhZGVjaW1hbCBzdHJpbmdzIChhbnkgbGVuZ3RoKVxuZXhwb3J0IGNvbnN0IGhleCA9IC9eWzAtOWEtZkEtRl0qJC87XG4vLyBIYXNoIHJlZ2V4ZXMgZm9yIGRpZmZlcmVudCBhbGdvcml0aG1zIGFuZCBlbmNvZGluZ3Ncbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYmFzZTY0IHJlZ2V4IHdpdGggZXhhY3QgbGVuZ3RoIGFuZCBwYWRkaW5nXG5mdW5jdGlvbiBmaXhlZEJhc2U2NChib2R5TGVuZ3RoLCBwYWRkaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Ky9deyR7Ym9keUxlbmd0aH19JHtwYWRkaW5nfSRgKTtcbn1cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYmFzZTY0dXJsIHJlZ2V4IHdpdGggZXhhY3QgbGVuZ3RoIChubyBwYWRkaW5nKVxuZnVuY3Rpb24gZml4ZWRCYXNlNjR1cmwobGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Xy1deyR7bGVuZ3RofX0kYCk7XG59XG4vLyBNRDUgKDE2IGJ5dGVzKTogYmFzZTY0ID0gMjQgY2hhcnMgdG90YWwgKDIyICsgXCI9PVwiKVxuZXhwb3J0IGNvbnN0IG1kNV9oZXggPSAvXlswLTlhLWZBLUZdezMyfSQvO1xuZXhwb3J0IGNvbnN0IG1kNV9iYXNlNjQgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0KDIyLCBcIj09XCIpO1xuZXhwb3J0IGNvbnN0IG1kNV9iYXNlNjR1cmwgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0dXJsKDIyKTtcbi8vIFNIQTEgKDIwIGJ5dGVzKTogYmFzZTY0ID0gMjggY2hhcnMgdG90YWwgKDI3ICsgXCI9XCIpXG5leHBvcnQgY29uc3Qgc2hhMV9oZXggPSAvXlswLTlhLWZBLUZdezQwfSQvO1xuZXhwb3J0IGNvbnN0IHNoYTFfYmFzZTY0ID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NCgyNywgXCI9XCIpO1xuZXhwb3J0IGNvbnN0IHNoYTFfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCgyNyk7XG4vLyBTSEEyNTYgKDMyIGJ5dGVzKTogYmFzZTY0ID0gNDQgY2hhcnMgdG90YWwgKDQzICsgXCI9XCIpXG5leHBvcnQgY29uc3Qgc2hhMjU2X2hleCA9IC9eWzAtOWEtZkEtRl17NjR9JC87XG5leHBvcnQgY29uc3Qgc2hhMjU2X2Jhc2U2NCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjQoNDMsIFwiPVwiKTtcbmV4cG9ydCBjb25zdCBzaGEyNTZfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCg0Myk7XG4vLyBTSEEzODQgKDQ4IGJ5dGVzKTogYmFzZTY0ID0gNjQgY2hhcnMgdG90YWwgKG5vIHBhZGRpbmcpXG5leHBvcnQgY29uc3Qgc2hhMzg0X2hleCA9IC9eWzAtOWEtZkEtRl17OTZ9JC87XG5leHBvcnQgY29uc3Qgc2hhMzg0X2Jhc2U2NCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjQoNjQsIFwiXCIpO1xuZXhwb3J0IGNvbnN0IHNoYTM4NF9iYXNlNjR1cmwgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0dXJsKDY0KTtcbi8vIFNIQTUxMiAoNjQgYnl0ZXMpOiBiYXNlNjQgPSA4OCBjaGFycyB0b3RhbCAoODYgKyBcIj09XCIpXG5leHBvcnQgY29uc3Qgc2hhNTEyX2hleCA9IC9eWzAtOWEtZkEtRl17MTI4fSQvO1xuZXhwb3J0IGNvbnN0IHNoYTUxMl9iYXNlNjQgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0KDg2LCBcIj09XCIpO1xuZXhwb3J0IGNvbnN0IHNoYTUxMl9iYXNlNjR1cmwgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0dXJsKDg2KTtcbiIsICIvLyBpbXBvcnQgeyAkWm9kVHlwZSB9IGZyb20gXCIuL3NjaGVtYXMuanNcIjtcbmltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4vY29yZS5qc1wiO1xuaW1wb3J0ICogYXMgcmVnZXhlcyBmcm9tIFwiLi9yZWdleGVzLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2sgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrXCIsIChpbnN0LCBkZWYpPT57XG4gICAgdmFyIF9hO1xuICAgIGluc3QuX3pvZCA/PyAoaW5zdC5fem9kID0ge30pO1xuICAgIGluc3QuX3pvZC5kZWYgPSBkZWY7XG4gICAgKF9hID0gaW5zdC5fem9kKS5vbmF0dGFjaCA/PyAoX2Eub25hdHRhY2ggPSBbXSk7XG59KTtcbmNvbnN0IG51bWVyaWNPcmlnaW5NYXAgPSB7XG4gICAgbnVtYmVyOiBcIm51bWJlclwiLFxuICAgIGJpZ2ludDogXCJiaWdpbnRcIixcbiAgICBvYmplY3Q6IFwiZGF0ZVwiXG59O1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0xlc3NUaGFuID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0xlc3NUaGFuXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBvcmlnaW4gPSBudW1lcmljT3JpZ2luTWFwW3R5cGVvZiBkZWYudmFsdWVdO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KT0+e1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBjb25zdCBjdXJyID0gKGRlZi5pbmNsdXNpdmUgPyBiYWcubWF4aW11bSA6IGJhZy5leGNsdXNpdmVNYXhpbXVtKSA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGlmIChkZWYudmFsdWUgPCBjdXJyKSB7XG4gICAgICAgICAgICBpZiAoZGVmLmluY2x1c2l2ZSkgYmFnLm1heGltdW0gPSBkZWYudmFsdWU7XG4gICAgICAgICAgICBlbHNlIGJhZy5leGNsdXNpdmVNYXhpbXVtID0gZGVmLnZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGlmIChkZWYuaW5jbHVzaXZlID8gcGF5bG9hZC52YWx1ZSA8PSBkZWYudmFsdWUgOiBwYXlsb2FkLnZhbHVlIDwgZGVmLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgIG1heGltdW06IHR5cGVvZiBkZWYudmFsdWUgPT09IFwib2JqZWN0XCIgPyBkZWYudmFsdWUuZ2V0VGltZSgpIDogZGVmLnZhbHVlLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGRlZi5pbmNsdXNpdmUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0dyZWF0ZXJUaGFuID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0dyZWF0ZXJUaGFuXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBvcmlnaW4gPSBudW1lcmljT3JpZ2luTWFwW3R5cGVvZiBkZWYudmFsdWVdO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KT0+e1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBjb25zdCBjdXJyID0gKGRlZi5pbmNsdXNpdmUgPyBiYWcubWluaW11bSA6IGJhZy5leGNsdXNpdmVNaW5pbXVtKSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGlmIChkZWYudmFsdWUgPiBjdXJyKSB7XG4gICAgICAgICAgICBpZiAoZGVmLmluY2x1c2l2ZSkgYmFnLm1pbmltdW0gPSBkZWYudmFsdWU7XG4gICAgICAgICAgICBlbHNlIGJhZy5leGNsdXNpdmVNaW5pbXVtID0gZGVmLnZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGlmIChkZWYuaW5jbHVzaXZlID8gcGF5bG9hZC52YWx1ZSA+PSBkZWYudmFsdWUgOiBwYXlsb2FkLnZhbHVlID4gZGVmLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBjb2RlOiBcInRvb19zbWFsbFwiLFxuICAgICAgICAgICAgbWluaW11bTogdHlwZW9mIGRlZi52YWx1ZSA9PT0gXCJvYmplY3RcIiA/IGRlZi52YWx1ZS5nZXRUaW1lKCkgOiBkZWYudmFsdWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZGVmLmluY2x1c2l2ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTXVsdGlwbGVPZiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tNdWx0aXBsZU9mXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCk9PntcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSBpbnN0Ll96b2QuYmFnKS5tdWx0aXBsZU9mID8/IChfYS5tdWx0aXBsZU9mID0gZGVmLnZhbHVlKTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCk9PntcbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlICE9PSB0eXBlb2YgZGVmLnZhbHVlKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgbWl4IG51bWJlciBhbmQgYmlnaW50IGluIG11bHRpcGxlX29mIGNoZWNrLlwiKTtcbiAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHR5cGVvZiBwYXlsb2FkLnZhbHVlID09PSBcImJpZ2ludFwiID8gcGF5bG9hZC52YWx1ZSAlIGRlZi52YWx1ZSA9PT0gQmlnSW50KDApIDogdXRpbC5mbG9hdFNhZmVSZW1haW5kZXIocGF5bG9hZC52YWx1ZSwgZGVmLnZhbHVlKSA9PT0gMDtcbiAgICAgICAgaWYgKGlzTXVsdGlwbGUpIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IHR5cGVvZiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgY29kZTogXCJub3RfbXVsdGlwbGVfb2ZcIixcbiAgICAgICAgICAgIGRpdmlzb3I6IGRlZi52YWx1ZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0XG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tOdW1iZXJGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTnVtYmVyRm9ybWF0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTsgLy8gbm8gZm9ybWF0IGNoZWNrc1xuICAgIGRlZi5mb3JtYXQgPSBkZWYuZm9ybWF0IHx8IFwiZmxvYXQ2NFwiO1xuICAgIGNvbnN0IGlzSW50ID0gZGVmLmZvcm1hdD8uaW5jbHVkZXMoXCJpbnRcIik7XG4gICAgY29uc3Qgb3JpZ2luID0gaXNJbnQgPyBcImludFwiIDogXCJudW1iZXJcIjtcbiAgICBjb25zdCBbbWluaW11bSwgbWF4aW11bV0gPSB1dGlsLk5VTUJFUl9GT1JNQVRfUkFOR0VTW2RlZi5mb3JtYXRdO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KT0+e1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcuZm9ybWF0ID0gZGVmLmZvcm1hdDtcbiAgICAgICAgYmFnLm1pbmltdW0gPSBtaW5pbXVtO1xuICAgICAgICBiYWcubWF4aW11bSA9IG1heGltdW07XG4gICAgICAgIGlmIChpc0ludCkgYmFnLnBhdHRlcm4gPSByZWdleGVzLmludGVnZXI7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKGlzSW50KSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgLy8gaW52YWxpZF9mb3JtYXQgaXNzdWVcbiAgICAgICAgICAgICAgICAvLyBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAvLyAgIGV4cGVjdGVkOiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgICAgIC8vICAgZm9ybWF0OiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgICAgIC8vICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgIC8vICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgLy8gICBpbnN0LFxuICAgICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgICAgIC8vIGludmFsaWRfdHlwZSBpc3N1ZVxuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogb3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGRlZi5mb3JtYXQsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgIGluc3RcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvLyBub3RfbXVsdGlwbGVfb2YgaXNzdWVcbiAgICAgICAgICAgIC8vIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgLy8gICBjb2RlOiBcIm5vdF9tdWx0aXBsZV9vZlwiLFxuICAgICAgICAgICAgLy8gICBvcmlnaW46IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAvLyAgIGlucHV0LFxuICAgICAgICAgICAgLy8gICBpbnN0LFxuICAgICAgICAgICAgLy8gICBkaXZpc29yOiAxLFxuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGlucHV0KSkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdG9vX2JpZ1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJ0b29fYmlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyB0b29fc21hbGxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX3NtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCA8IG1pbmltdW0pIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG9yaWdpbjogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBjb2RlOiBcInRvb19zbWFsbFwiLFxuICAgICAgICAgICAgICAgIG1pbmltdW0sXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCA+IG1heGltdW0pIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG9yaWdpbjogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgICAgICBtYXhpbXVtLFxuICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tCaWdJbnRGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrQmlnSW50Rm9ybWF0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTsgLy8gbm8gZm9ybWF0IGNoZWNrc1xuICAgIGNvbnN0IFttaW5pbXVtLCBtYXhpbXVtXSA9IHV0aWwuQklHSU5UX0ZPUk1BVF9SQU5HRVNbZGVmLmZvcm1hdF07XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpPT57XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5mb3JtYXQgPSBkZWYuZm9ybWF0O1xuICAgICAgICBiYWcubWluaW11bSA9IG1pbmltdW07XG4gICAgICAgIGJhZy5tYXhpbXVtID0gbWF4aW11bTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCk9PntcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoaW5wdXQgPCBtaW5pbXVtKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwiYmlnaW50XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICBtaW5pbXVtOiBtaW5pbXVtLFxuICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgPiBtYXhpbXVtKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwiYmlnaW50XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgY29kZTogXCJ0b29fYmlnXCIsXG4gICAgICAgICAgICAgICAgbWF4aW11bSxcbiAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTWF4U2l6ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tNYXhTaXplXCIsIChpbnN0LCBkZWYpPT57XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKT0+e1xuICAgICAgICBjb25zdCB2YWwgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICByZXR1cm4gIXV0aWwubnVsbGlzaCh2YWwpICYmIHZhbC5zaXplICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpPT57XG4gICAgICAgIGNvbnN0IGN1cnIgPSBpbnN0Ll96b2QuYmFnLm1heGltdW0gPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICBpZiAoZGVmLm1heGltdW0gPCBjdXJyKSBpbnN0Ll96b2QuYmFnLm1heGltdW0gPSBkZWYubWF4aW11bTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCk9PntcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBjb25zdCBzaXplID0gaW5wdXQuc2l6ZTtcbiAgICAgICAgaWYgKHNpemUgPD0gZGVmLm1heGltdW0pIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IHV0aWwuZ2V0U2l6YWJsZU9yaWdpbihpbnB1dCksXG4gICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgIG1heGltdW06IGRlZi5tYXhpbXVtLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja01pblNpemUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWluU2l6ZVwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIHZhciBfYTtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIChfYSA9IGluc3QuX3pvZC5kZWYpLndoZW4gPz8gKF9hLndoZW4gPSAocGF5bG9hZCk9PntcbiAgICAgICAgY29uc3QgdmFsID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgcmV0dXJuICF1dGlsLm51bGxpc2godmFsKSAmJiB2YWwuc2l6ZSAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KT0+e1xuICAgICAgICBjb25zdCBjdXJyID0gaW5zdC5fem9kLmJhZy5taW5pbXVtID8/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICAgICAgaWYgKGRlZi5taW5pbXVtID4gY3VycikgaW5zdC5fem9kLmJhZy5taW5pbXVtID0gZGVmLm1pbmltdW07XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGlucHV0LnNpemU7XG4gICAgICAgIGlmIChzaXplID49IGRlZi5taW5pbXVtKSByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiB1dGlsLmdldFNpemFibGVPcmlnaW4oaW5wdXQpLFxuICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5pbXVtLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja1NpemVFcXVhbHMgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrU2l6ZUVxdWFsc1wiLCAoaW5zdCwgZGVmKT0+e1xuICAgIHZhciBfYTtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIChfYSA9IGluc3QuX3pvZC5kZWYpLndoZW4gPz8gKF9hLndoZW4gPSAocGF5bG9hZCk9PntcbiAgICAgICAgY29uc3QgdmFsID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgcmV0dXJuICF1dGlsLm51bGxpc2godmFsKSAmJiB2YWwuc2l6ZSAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KT0+e1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcubWluaW11bSA9IGRlZi5zaXplO1xuICAgICAgICBiYWcubWF4aW11bSA9IGRlZi5zaXplO1xuICAgICAgICBiYWcuc2l6ZSA9IGRlZi5zaXplO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKT0+e1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IHNpemUgPSBpbnB1dC5zaXplO1xuICAgICAgICBpZiAoc2l6ZSA9PT0gZGVmLnNpemUpIHJldHVybjtcbiAgICAgICAgY29uc3QgdG9vQmlnID0gc2l6ZSA+IGRlZi5zaXplO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbjogdXRpbC5nZXRTaXphYmxlT3JpZ2luKGlucHV0KSxcbiAgICAgICAgICAgIC4uLnRvb0JpZyA/IHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgICAgICBtYXhpbXVtOiBkZWYuc2l6ZVxuICAgICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcInRvb19zbWFsbFwiLFxuICAgICAgICAgICAgICAgIG1pbmltdW06IGRlZi5zaXplXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTWF4TGVuZ3RoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja01heExlbmd0aFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIHZhciBfYTtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIChfYSA9IGluc3QuX3pvZC5kZWYpLndoZW4gPz8gKF9hLndoZW4gPSAocGF5bG9hZCk9PntcbiAgICAgICAgY29uc3QgdmFsID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgcmV0dXJuICF1dGlsLm51bGxpc2godmFsKSAmJiB2YWwubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpPT57XG4gICAgICAgIGNvbnN0IGN1cnIgPSBpbnN0Ll96b2QuYmFnLm1heGltdW0gPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICBpZiAoZGVmLm1heGltdW0gPCBjdXJyKSBpbnN0Ll96b2QuYmFnLm1heGltdW0gPSBkZWYubWF4aW11bTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCk9PntcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggPD0gZGVmLm1heGltdW0pIHJldHVybjtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gdXRpbC5nZXRMZW5ndGhhYmxlT3JpZ2luKGlucHV0KTtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgIG1heGltdW06IGRlZi5tYXhpbXVtLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja01pbkxlbmd0aCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tNaW5MZW5ndGhcIiwgKGluc3QsIGRlZik9PntcbiAgICB2YXIgX2E7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICAoX2EgPSBpbnN0Ll96b2QuZGVmKS53aGVuID8/IChfYS53aGVuID0gKHBheWxvYWQpPT57XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KT0+e1xuICAgICAgICBjb25zdCBjdXJyID0gaW5zdC5fem9kLmJhZy5taW5pbXVtID8/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWTtcbiAgICAgICAgaWYgKGRlZi5taW5pbXVtID4gY3VycikgaW5zdC5fem9kLmJhZy5taW5pbXVtID0gZGVmLm1pbmltdW07XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID49IGRlZi5taW5pbXVtKSByZXR1cm47XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IHV0aWwuZ2V0TGVuZ3RoYWJsZU9yaWdpbihpbnB1dCk7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5pbXVtLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0xlbmd0aEVxdWFscyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tMZW5ndGhFcXVhbHNcIiwgKGluc3QsIGRlZik9PntcbiAgICB2YXIgX2E7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICAoX2EgPSBpbnN0Ll96b2QuZGVmKS53aGVuID8/IChfYS53aGVuID0gKHBheWxvYWQpPT57XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KT0+e1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcubWluaW11bSA9IGRlZi5sZW5ndGg7XG4gICAgICAgIGJhZy5tYXhpbXVtID0gZGVmLmxlbmd0aDtcbiAgICAgICAgYmFnLmxlbmd0aCA9IGRlZi5sZW5ndGg7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID09PSBkZWYubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IHV0aWwuZ2V0TGVuZ3RoYWJsZU9yaWdpbihpbnB1dCk7XG4gICAgICAgIGNvbnN0IHRvb0JpZyA9IGxlbmd0aCA+IGRlZi5sZW5ndGg7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgLi4udG9vQmlnID8ge1xuICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgICAgIG1heGltdW06IGRlZi5sZW5ndGhcbiAgICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICBtaW5pbXVtOiBkZWYubGVuZ3RoXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrU3RyaW5nRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1N0cmluZ0Zvcm1hdFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIHZhciBfYSwgX2I7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCk9PntcbiAgICAgICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICAgICAgYmFnLmZvcm1hdCA9IGRlZi5mb3JtYXQ7XG4gICAgICAgIGlmIChkZWYucGF0dGVybikge1xuICAgICAgICAgICAgYmFnLnBhdHRlcm5zID8/IChiYWcucGF0dGVybnMgPSBuZXcgU2V0KCkpO1xuICAgICAgICAgICAgYmFnLnBhdHRlcm5zLmFkZChkZWYucGF0dGVybik7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZGVmLnBhdHRlcm4pIChfYSA9IGluc3QuX3pvZCkuY2hlY2sgPz8gKF9hLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGRlZi5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmIChkZWYucGF0dGVybi50ZXN0KHBheWxvYWQudmFsdWUpKSByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAuLi5kZWYucGF0dGVybiA/IHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiBkZWYucGF0dGVybi50b1N0cmluZygpXG4gICAgICAgICAgICB9IDoge30sXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZWxzZSAoX2IgPSBpbnN0Ll96b2QpLmNoZWNrID8/IChfYi5jaGVjayA9ICgpPT57fSk7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tSZWdleCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tSZWdleFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RDaGVja1N0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGRlZi5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmIChkZWYucGF0dGVybi50ZXN0KHBheWxvYWQudmFsdWUpKSByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcInJlZ2V4XCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIHBhdHRlcm46IGRlZi5wYXR0ZXJuLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0xvd2VyQ2FzZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tMb3dlckNhc2VcIiwgKGluc3QsIGRlZik9PntcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmxvd2VyY2FzZSk7XG4gICAgJFpvZENoZWNrU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja1VwcGVyQ2FzZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tVcHBlckNhc2VcIiwgKGluc3QsIGRlZik9PntcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnVwcGVyY2FzZSk7XG4gICAgJFpvZENoZWNrU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0luY2x1ZGVzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0luY2x1ZGVzXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBlc2NhcGVkUmVnZXggPSB1dGlsLmVzY2FwZVJlZ2V4KGRlZi5pbmNsdWRlcyk7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAodHlwZW9mIGRlZi5wb3NpdGlvbiA9PT0gXCJudW1iZXJcIiA/IGBeLnske2RlZi5wb3NpdGlvbn19JHtlc2NhcGVkUmVnZXh9YCA6IGVzY2FwZWRSZWdleCk7XG4gICAgZGVmLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KT0+e1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcucGF0dGVybnMgPz8gKGJhZy5wYXR0ZXJucyA9IG5ldyBTZXQoKSk7XG4gICAgICAgIGJhZy5wYXR0ZXJucy5hZGQocGF0dGVybik7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGlmIChwYXlsb2FkLnZhbHVlLmluY2x1ZGVzKGRlZi5pbmNsdWRlcywgZGVmLnBvc2l0aW9uKSkgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJpbmNsdWRlc1wiLFxuICAgICAgICAgICAgaW5jbHVkZXM6IGRlZi5pbmNsdWRlcyxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0XG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tTdGFydHNXaXRoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1N0YXJ0c1dpdGhcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKGBeJHt1dGlsLmVzY2FwZVJlZ2V4KGRlZi5wcmVmaXgpfS4qYCk7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcGF0dGVybik7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpPT57XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5wYXR0ZXJucyA/PyAoYmFnLnBhdHRlcm5zID0gbmV3IFNldCgpKTtcbiAgICAgICAgYmFnLnBhdHRlcm5zLmFkZChwYXR0ZXJuKTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCk9PntcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUuc3RhcnRzV2l0aChkZWYucHJlZml4KSkgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJzdGFydHNfd2l0aFwiLFxuICAgICAgICAgICAgcHJlZml4OiBkZWYucHJlZml4LFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0VuZHNXaXRoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0VuZHNXaXRoXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgLioke3V0aWwuZXNjYXBlUmVnZXgoZGVmLnN1ZmZpeCl9JGApO1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHBhdHRlcm4pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KT0+e1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcucGF0dGVybnMgPz8gKGJhZy5wYXR0ZXJucyA9IG5ldyBTZXQoKSk7XG4gICAgICAgIGJhZy5wYXR0ZXJucy5hZGQocGF0dGVybik7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGlmIChwYXlsb2FkLnZhbHVlLmVuZHNXaXRoKGRlZi5zdWZmaXgpKSByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImVuZHNfd2l0aFwiLFxuICAgICAgICAgICAgc3VmZml4OiBkZWYuc3VmZml4LFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vICAgICRab2RDaGVja1Byb3BlcnR5ICAgIC8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZnVuY3Rpb24gaGFuZGxlQ2hlY2tQcm9wZXJ0eVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIHByb3BlcnR5KSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMocHJvcGVydHksIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgJFpvZENoZWNrUHJvcGVydHkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrUHJvcGVydHlcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKT0+e1xuICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuc2NoZW1hLl96b2QucnVuKHtcbiAgICAgICAgICAgIHZhbHVlOiBwYXlsb2FkLnZhbHVlW2RlZi5wcm9wZXJ0eV0sXG4gICAgICAgICAgICBpc3N1ZXM6IFtdXG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KT0+aGFuZGxlQ2hlY2tQcm9wZXJ0eVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIGRlZi5wcm9wZXJ0eSkpO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZUNoZWNrUHJvcGVydHlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBkZWYucHJvcGVydHkpO1xuICAgICAgICByZXR1cm47XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja01pbWVUeXBlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja01pbWVUeXBlXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBtaW1lU2V0ID0gbmV3IFNldChkZWYubWltZSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpPT57XG4gICAgICAgIGluc3QuX3pvZC5iYWcubWltZSA9IGRlZi5taW1lO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKT0+e1xuICAgICAgICBpZiAobWltZVNldC5oYXMocGF5bG9hZC52YWx1ZS50eXBlKSkgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF92YWx1ZVwiLFxuICAgICAgICAgICAgdmFsdWVzOiBkZWYubWltZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLnR5cGUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja092ZXJ3cml0ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tPdmVyd3JpdGVcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKT0+e1xuICAgICAgICBwYXlsb2FkLnZhbHVlID0gZGVmLnR4KHBheWxvYWQudmFsdWUpO1xuICAgIH07XG59KTtcbiIsICJleHBvcnQgY2xhc3MgRG9jIHtcbiAgICBjb25zdHJ1Y3RvcihhcmdzID0gW10pe1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBbXTtcbiAgICAgICAgdGhpcy5pbmRlbnQgPSAwO1xuICAgICAgICBpZiAodGhpcykgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG4gICAgaW5kZW50ZWQoZm4pIHtcbiAgICAgICAgdGhpcy5pbmRlbnQgKz0gMTtcbiAgICAgICAgZm4odGhpcyk7XG4gICAgICAgIHRoaXMuaW5kZW50IC09IDE7XG4gICAgfVxuICAgIHdyaXRlKGFyZykge1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBhcmcodGhpcywge1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbjogXCJzeW5jXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXJnKHRoaXMsIHtcbiAgICAgICAgICAgICAgICBleGVjdXRpb246IFwiYXN5bmNcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGVudCA9IGFyZztcbiAgICAgICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpLmZpbHRlcigoeCk9PngpO1xuICAgICAgICBjb25zdCBtaW5JbmRlbnQgPSBNYXRoLm1pbiguLi5saW5lcy5tYXAoKHgpPT54Lmxlbmd0aCAtIHgudHJpbVN0YXJ0KCkubGVuZ3RoKSk7XG4gICAgICAgIGNvbnN0IGRlZGVudGVkID0gbGluZXMubWFwKCh4KT0+eC5zbGljZShtaW5JbmRlbnQpKS5tYXAoKHgpPT5cIiBcIi5yZXBlYXQodGhpcy5pbmRlbnQgKiAyKSArIHgpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZGVkZW50ZWQpe1xuICAgICAgICAgICAgdGhpcy5jb250ZW50LnB1c2gobGluZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgY29uc3QgRiA9IEZ1bmN0aW9uO1xuICAgICAgICBjb25zdCBhcmdzID0gdGhpcz8uYXJncztcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXM/LmNvbnRlbnQgPz8gW1xuICAgICAgICAgICAgYGBcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgbGluZXMgPSBbXG4gICAgICAgICAgICAuLi5jb250ZW50Lm1hcCgoeCk9PmAgICR7eH1gKVxuICAgICAgICBdO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lcy5qb2luKFwiXFxuXCIpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBGKC4uLmFyZ3MsIGxpbmVzLmpvaW4oXCJcXG5cIikpO1xuICAgIH1cbn1cbiIsICJleHBvcnQgY29uc3QgdmVyc2lvbiA9IHtcbiAgICBtYWpvcjogNCxcbiAgICBtaW5vcjogMyxcbiAgICBwYXRjaDogNlxufTtcbiIsICJpbXBvcnQgKiBhcyBjaGVja3MgZnJvbSBcIi4vY2hlY2tzLmpzXCI7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuL2NvcmUuanNcIjtcbmltcG9ydCB7IERvYyB9IGZyb20gXCIuL2RvYy5qc1wiO1xuaW1wb3J0IHsgcGFyc2UsIHBhcnNlQXN5bmMsIHNhZmVQYXJzZSwgc2FmZVBhcnNlQXN5bmMgfSBmcm9tIFwiLi9wYXJzZS5qc1wiO1xuaW1wb3J0ICogYXMgcmVnZXhlcyBmcm9tIFwiLi9yZWdleGVzLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tIFwiLi92ZXJzaW9ucy5qc1wiO1xuZXhwb3J0IGNvbnN0ICRab2RUeXBlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RUeXBlXCIsIChpbnN0LCBkZWYpPT57XG4gICAgdmFyIF9hO1xuICAgIGluc3QgPz8gKGluc3QgPSB7fSk7XG4gICAgaW5zdC5fem9kLmRlZiA9IGRlZjsgLy8gc2V0IF9kZWYgcHJvcGVydHlcbiAgICBpbnN0Ll96b2QuYmFnID0gaW5zdC5fem9kLmJhZyB8fCB7fTsgLy8gaW5pdGlhbGl6ZSBfYmFnIG9iamVjdFxuICAgIGluc3QuX3pvZC52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICBjb25zdCBjaGVja3MgPSBbXG4gICAgICAgIC4uLmluc3QuX3pvZC5kZWYuY2hlY2tzID8/IFtdXG4gICAgXTtcbiAgICAvLyBpZiBpbnN0IGlzIGl0c2VsZiBhIGNoZWNrcy4kWm9kQ2hlY2ssIHJ1biBpdCBhcyBhIGNoZWNrXG4gICAgaWYgKGluc3QuX3pvZC50cmFpdHMuaGFzKFwiJFpvZENoZWNrXCIpKSB7XG4gICAgICAgIGNoZWNrcy51bnNoaWZ0KGluc3QpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGNoIG9mIGNoZWNrcyl7XG4gICAgICAgIGZvciAoY29uc3QgZm4gb2YgY2guX3pvZC5vbmF0dGFjaCl7XG4gICAgICAgICAgICBmbihpbnN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hlY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBkZWZlcnJlZCBpbml0aWFsaXplclxuICAgICAgICAvLyBpbnN0Ll96b2QucGFyc2UgaXMgbm90IHlldCBkZWZpbmVkXG4gICAgICAgIChfYSA9IGluc3QuX3pvZCkuZGVmZXJyZWQgPz8gKF9hLmRlZmVycmVkID0gW10pO1xuICAgICAgICBpbnN0Ll96b2QuZGVmZXJyZWQ/LnB1c2goKCk9PntcbiAgICAgICAgICAgIGluc3QuX3pvZC5ydW4gPSBpbnN0Ll96b2QucGFyc2U7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJ1bkNoZWNrcyA9IChwYXlsb2FkLCBjaGVja3MsIGN0eCk9PntcbiAgICAgICAgICAgIGxldCBpc0Fib3J0ZWQgPSB1dGlsLmFib3J0ZWQocGF5bG9hZCk7XG4gICAgICAgICAgICBsZXQgYXN5bmNSZXN1bHQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIGNoZWNrcyl7XG4gICAgICAgICAgICAgICAgaWYgKGNoLl96b2QuZGVmLndoZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkUnVuID0gY2guX3pvZC5kZWYud2hlbihwYXlsb2FkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRSdW4pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyTGVuID0gcGF5bG9hZC5pc3N1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IF8gPSBjaC5fem9kLmNoZWNrKHBheWxvYWQpO1xuICAgICAgICAgICAgICAgIGlmIChfIGluc3RhbmNlb2YgUHJvbWlzZSAmJiBjdHg/LmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXN5bmNSZXN1bHQgfHwgXyBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNSZXN1bHQgPSAoYXN5bmNSZXN1bHQgPz8gUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oYXN5bmMgKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IF87XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0TGVuID0gcGF5bG9hZC5pc3N1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRMZW4gPT09IGN1cnJMZW4pIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNBYm9ydGVkKSBpc0Fib3J0ZWQgPSB1dGlsLmFib3J0ZWQocGF5bG9hZCwgY3Vyckxlbik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRMZW4gPSBwYXlsb2FkLmlzc3Vlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0TGVuID09PSBjdXJyTGVuKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Fib3J0ZWQpIGlzQWJvcnRlZCA9IHV0aWwuYWJvcnRlZChwYXlsb2FkLCBjdXJyTGVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXN5bmNSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNSZXN1bHQudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBoYW5kbGVDYW5hcnlSZXN1bHQgPSAoY2FuYXJ5LCBwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgICAgICAvLyBhYm9ydCBpZiB0aGUgY2FuYXJ5IGlzIGFib3J0ZWRcbiAgICAgICAgICAgIGlmICh1dGlsLmFib3J0ZWQoY2FuYXJ5KSkge1xuICAgICAgICAgICAgICAgIGNhbmFyeS5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FuYXJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcnVuIGNoZWNrcyBmaXJzdCwgdGhlblxuICAgICAgICAgICAgY29uc3QgY2hlY2tSZXN1bHQgPSBydW5DaGVja3MocGF5bG9hZCwgY2hlY2tzLCBjdHgpO1xuICAgICAgICAgICAgaWYgKGNoZWNrUmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdHguYXN5bmMgPT09IGZhbHNlKSB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGVja1Jlc3VsdC50aGVuKChjaGVja1Jlc3VsdCk9Pmluc3QuX3pvZC5wYXJzZShjaGVja1Jlc3VsdCwgY3R4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdC5fem9kLnBhcnNlKGNoZWNrUmVzdWx0LCBjdHgpO1xuICAgICAgICB9O1xuICAgICAgICBpbnN0Ll96b2QucnVuID0gKHBheWxvYWQsIGN0eCk9PntcbiAgICAgICAgICAgIGlmIChjdHguc2tpcENoZWNrcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0Ll96b2QucGFyc2UocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBydW4gY2FuYXJ5XG4gICAgICAgICAgICAgICAgLy8gaW5pdGlhbCBwYXNzIChubyBjaGVja3MpXG4gICAgICAgICAgICAgICAgY29uc3QgY2FuYXJ5ID0gaW5zdC5fem9kLnBhcnNlKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlczogW11cbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmN0eCxcbiAgICAgICAgICAgICAgICAgICAgc2tpcENoZWNrczogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChjYW5hcnkgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5hcnkudGhlbigoY2FuYXJ5KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNhbmFyeVJlc3VsdChjYW5hcnksIHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQ2FuYXJ5UmVzdWx0KGNhbmFyeSwgcGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZvcndhcmRcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGluc3QuX3pvZC5wYXJzZShwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmFzeW5jID09PSBmYWxzZSkgdGhyb3cgbmV3IGNvcmUuJFpvZEFzeW5jRXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKHJlc3VsdCk9PnJ1bkNoZWNrcyhyZXN1bHQsIGNoZWNrcywgY3R4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcnVuQ2hlY2tzKHJlc3VsdCwgY2hlY2tzLCBjdHgpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvLyBMYXp5IGluaXRpYWxpemUgfnN0YW5kYXJkIHRvIGF2b2lkIGNyZWF0aW5nIG9iamVjdHMgZm9yIGV2ZXJ5IHNjaGVtYVxuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0LCBcIn5zdGFuZGFyZFwiLCAoKT0+KHtcbiAgICAgICAgICAgIHZhbGlkYXRlOiAodmFsdWUpPT57XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgciA9IHNhZmVQYXJzZShpbnN0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByLnN1Y2Nlc3MgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogci5kYXRhXG4gICAgICAgICAgICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IHIuZXJyb3I/Lmlzc3Vlc1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhZmVQYXJzZUFzeW5jKGluc3QsIHZhbHVlKS50aGVuKChyKT0+ci5zdWNjZXNzID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByLmRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiByLmVycm9yPy5pc3N1ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZW5kb3I6IFwiem9kXCIsXG4gICAgICAgICAgICB2ZXJzaW9uOiAxXG4gICAgICAgIH0pKTtcbn0pO1xuZXhwb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi91dGlsLmpzXCI7XG5leHBvcnQgY29uc3QgJFpvZFN0cmluZyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kU3RyaW5nXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gW1xuICAgICAgICAuLi5pbnN0Py5fem9kLmJhZz8ucGF0dGVybnMgPz8gW11cbiAgICBdLnBvcCgpID8/IHJlZ2V4ZXMuc3RyaW5nKGluc3QuX3pvZC5iYWcpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfKT0+e1xuICAgICAgICBpZiAoZGVmLmNvZXJjZSkgdHJ5IHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBTdHJpbmcocGF5bG9hZC52YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZC52YWx1ZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFN0cmluZ0Zvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kU3RyaW5nRm9ybWF0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgLy8gY2hlY2sgaW5pdGlhbGl6YXRpb24gbXVzdCBjb21lIGZpcnN0XG4gICAgY2hlY2tzLiRab2RDaGVja1N0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgJFpvZFN0cmluZy5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kR1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kR1VJRFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZ3VpZCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kVVVJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVVVJRFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGlmIChkZWYudmVyc2lvbikge1xuICAgICAgICBjb25zdCB2ZXJzaW9uTWFwID0ge1xuICAgICAgICAgICAgdjE6IDEsXG4gICAgICAgICAgICB2MjogMixcbiAgICAgICAgICAgIHYzOiAzLFxuICAgICAgICAgICAgdjQ6IDQsXG4gICAgICAgICAgICB2NTogNSxcbiAgICAgICAgICAgIHY2OiA2LFxuICAgICAgICAgICAgdjc6IDcsXG4gICAgICAgICAgICB2ODogOFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB2ID0gdmVyc2lvbk1hcFtkZWYudmVyc2lvbl07XG4gICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVVUlEIHZlcnNpb246IFwiJHtkZWYudmVyc2lvbn1cImApO1xuICAgICAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnV1aWQodikpO1xuICAgIH0gZWxzZSBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnV1aWQoKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRW1haWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEVtYWlsXCIsIChpbnN0LCBkZWYpPT57XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5lbWFpbCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kVVJMID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RVUkxcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCk9PntcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFRyaW0gd2hpdGVzcGFjZSBmcm9tIGlucHV0XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gcGF5bG9hZC52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHRyaW1tZWQpO1xuICAgICAgICAgICAgaWYgKGRlZi5ob3N0bmFtZSkge1xuICAgICAgICAgICAgICAgIGRlZi5ob3N0bmFtZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGlmICghZGVmLmhvc3RuYW1lLnRlc3QodXJsLmhvc3RuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW52YWxpZCBob3N0bmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogZGVmLmhvc3RuYW1lLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWYucHJvdG9jb2wpIHtcbiAgICAgICAgICAgICAgICBkZWYucHJvdG9jb2wubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoIWRlZi5wcm90b2NvbC50ZXN0KHVybC5wcm90b2NvbC5lbmRzV2l0aChcIjpcIikgPyB1cmwucHJvdG9jb2wuc2xpY2UoMCwgLTEpIDogdXJsLnByb3RvY29sKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW52YWxpZCBwcm90b2NvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogZGVmLnByb3RvY29sLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNldCB0aGUgb3V0cHV0IHZhbHVlIGJhc2VkIG9uIG5vcm1hbGl6ZSBmbGFnXG4gICAgICAgICAgICBpZiAoZGVmLm5vcm1hbGl6ZSkge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBub3JtYWxpemVkIFVSTFxuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSB1cmwuaHJlZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIGlucHV0ICh0cmltbWVkKVxuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSB0cmltbWVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcInVybFwiLFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RFbW9qaSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRW1vamlcIiwgKGluc3QsIGRlZik9PntcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmVtb2ppKCkpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE5hbm9JRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTmFub0lEXCIsIChpbnN0LCBkZWYpPT57XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5uYW5vaWQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENVSURcIiwgKGluc3QsIGRlZik9PntcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmN1aWQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENVSUQyID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDVUlEMlwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuY3VpZDIpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFVMSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFVMSURcIiwgKGluc3QsIGRlZik9PntcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnVsaWQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFhJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kWElEXCIsIChpbnN0LCBkZWYpPT57XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy54aWQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEtTVUlEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RLU1VJRFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMua3N1aWQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZElTT0RhdGVUaW1lID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJU09EYXRlVGltZVwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZGF0ZXRpbWUoZGVmKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kSVNPRGF0ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSVNPRGF0ZVwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZGF0ZSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kSVNPVGltZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSVNPVGltZVwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMudGltZShkZWYpKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJU09EdXJhdGlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSVNPRHVyYXRpb25cIiwgKGluc3QsIGRlZik9PntcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmR1cmF0aW9uKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJUHY0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJUHY0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5pcHY0KTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuYmFnLmZvcm1hdCA9IGBpcHY0YDtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJUHY2ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJUHY2XCIsIChpbnN0LCBkZWYpPT57XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5pcHY2KTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuYmFnLmZvcm1hdCA9IGBpcHY2YDtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCk9PntcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIG5ldyBVUkwoYGh0dHA6Ly9bJHtwYXlsb2FkLnZhbHVlfV1gKTtcbiAgICAgICAgLy8gcmV0dXJuO1xuICAgICAgICB9IGNhdGNoICB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImlwdjZcIixcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTUFDID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RNQUNcIiwgKGluc3QsIGRlZik9PntcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLm1hYyhkZWYuZGVsaW1pdGVyKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmJhZy5mb3JtYXQgPSBgbWFjYDtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDSURSdjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENJRFJ2NFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuY2lkcnY0KTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDSURSdjYgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENJRFJ2NlwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuY2lkcnY2KTsgLy8gbm90IHVzZWQgZm9yIHZhbGlkYXRpb25cbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCk9PntcbiAgICAgICAgY29uc3QgcGFydHMgPSBwYXlsb2FkLnZhbHVlLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgY29uc3QgW2FkZHJlc3MsIHByZWZpeF0gPSBwYXJ0cztcbiAgICAgICAgICAgIGlmICghcHJlZml4KSB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeE51bSA9IE51bWJlcihwcmVmaXgpO1xuICAgICAgICAgICAgaWYgKGAke3ByZWZpeE51bX1gICE9PSBwcmVmaXgpIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgaWYgKHByZWZpeE51bSA8IDAgfHwgcHJlZml4TnVtID4gMTI4KSB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIG5ldyBVUkwoYGh0dHA6Ly9bJHthZGRyZXNzfV1gKTtcbiAgICAgICAgfSBjYXRjaCAge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJjaWRydjZcIixcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAgIFpvZEJhc2U2NCAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRCYXNlNjQoZGF0YSkge1xuICAgIGlmIChkYXRhID09PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZGF0YS5sZW5ndGggJSA0ICE9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBhdG9iKGRhdGEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgJFpvZEJhc2U2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQmFzZTY0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5iYXNlNjQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5iYWcuY29udGVudEVuY29kaW5nID0gXCJiYXNlNjRcIjtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCk9PntcbiAgICAgICAgaWYgKGlzVmFsaWRCYXNlNjQocGF5bG9hZC52YWx1ZSkpIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiYmFzZTY0XCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gICBab2RCYXNlNjQgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQmFzZTY0VVJMKGRhdGEpIHtcbiAgICBpZiAoIXJlZ2V4ZXMuYmFzZTY0dXJsLnRlc3QoZGF0YSkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBiYXNlNjQgPSBkYXRhLnJlcGxhY2UoL1stX10vZywgKGMpPT5jID09PSBcIi1cIiA/IFwiK1wiIDogXCIvXCIpO1xuICAgIGNvbnN0IHBhZGRlZCA9IGJhc2U2NC5wYWRFbmQoTWF0aC5jZWlsKGJhc2U2NC5sZW5ndGggLyA0KSAqIDQsIFwiPVwiKTtcbiAgICByZXR1cm4gaXNWYWxpZEJhc2U2NChwYWRkZWQpO1xufVxuZXhwb3J0IGNvbnN0ICRab2RCYXNlNjRVUkwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEJhc2U2NFVSTFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuYmFzZTY0dXJsKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuYmFnLmNvbnRlbnRFbmNvZGluZyA9IFwiYmFzZTY0dXJsXCI7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGlmIChpc1ZhbGlkQmFzZTY0VVJMKHBheWxvYWQudmFsdWUpKSByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImJhc2U2NHVybFwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnRcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RFMTY0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RFMTY0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5lMTY0KTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICAgWm9kSldUICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEpXVCh0b2tlbiwgYWxnb3JpdGhtID0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRva2Vuc1BhcnRzID0gdG9rZW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAodG9rZW5zUGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IFtoZWFkZXJdID0gdG9rZW5zUGFydHM7XG4gICAgICAgIGlmICghaGVhZGVyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgcGFyc2VkSGVhZGVyID0gSlNPTi5wYXJzZShhdG9iKGhlYWRlcikpO1xuICAgICAgICBpZiAoXCJ0eXBcIiBpbiBwYXJzZWRIZWFkZXIgJiYgcGFyc2VkSGVhZGVyPy50eXAgIT09IFwiSldUXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFwYXJzZWRIZWFkZXIuYWxnKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChhbGdvcml0aG0gJiYgKCEoXCJhbGdcIiBpbiBwYXJzZWRIZWFkZXIpIHx8IHBhcnNlZEhlYWRlci5hbGcgIT09IGFsZ29yaXRobSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0ICRab2RKV1QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEpXVFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKT0+e1xuICAgICAgICBpZiAoaXNWYWxpZEpXVChwYXlsb2FkLnZhbHVlLCBkZWYuYWxnKSkgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJqd3RcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0XG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDdXN0b21TdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCk9PntcbiAgICAgICAgaWYgKGRlZi5mbihwYXlsb2FkLnZhbHVlKSkgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogZGVmLmZvcm1hdCxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0XG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTnVtYmVyID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROdW1iZXJcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSBpbnN0Ll96b2QuYmFnLnBhdHRlcm4gPz8gcmVnZXhlcy5udW1iZXI7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpPT57XG4gICAgICAgIGlmIChkZWYuY29lcmNlKSB0cnkge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IE51bWJlcihwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiICYmICFOdW1iZXIuaXNOYU4oaW5wdXQpICYmIE51bWJlci5pc0Zpbml0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlY2VpdmVkID0gdHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiID8gTnVtYmVyLmlzTmFOKGlucHV0KSA/IFwiTmFOXCIgOiAhTnVtYmVyLmlzRmluaXRlKGlucHV0KSA/IFwiSW5maW5pdHlcIiA6IHVuZGVmaW5lZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJudW1iZXJcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAuLi5yZWNlaXZlZCA/IHtcbiAgICAgICAgICAgICAgICByZWNlaXZlZFxuICAgICAgICAgICAgfSA6IHt9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE51bWJlckZvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTnVtYmVyRm9ybWF0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgY2hlY2tzLiRab2RDaGVja051bWJlckZvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgJFpvZE51bWJlci5pbml0KGluc3QsIGRlZik7IC8vIG5vIGZvcm1hdCBjaGVja3Ncbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RCb29sZWFuID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RCb29sZWFuXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gcmVnZXhlcy5ib29sZWFuO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KT0+e1xuICAgICAgICBpZiAoZGVmLmNvZXJjZSkgdHJ5IHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBCb29sZWFuKHBheWxvYWQudmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwiYm9vbGVhblwiKSByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEJpZ0ludCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQmlnSW50XCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gcmVnZXhlcy5iaWdpbnQ7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpPT57XG4gICAgICAgIGlmIChkZWYuY29lcmNlKSB0cnkge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IEJpZ0ludChwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlID09PSBcImJpZ2ludFwiKSByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJiaWdpbnRcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3RcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQmlnSW50Rm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RCaWdJbnRGb3JtYXRcIiwgKGluc3QsIGRlZik9PntcbiAgICBjaGVja3MuJFpvZENoZWNrQmlnSW50Rm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICAkWm9kQmlnSW50LmluaXQoaW5zdCwgZGVmKTsgLy8gbm8gZm9ybWF0IGNoZWNrc1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFN5bWJvbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kU3ltYm9sXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KT0+e1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3ltYm9sXCIpIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcInN5bWJvbFwiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RVbmRlZmluZWQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFVuZGVmaW5lZFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IHJlZ2V4ZXMudW5kZWZpbmVkO1xuICAgIGluc3QuX3pvZC52YWx1ZXMgPSBuZXcgU2V0KFtcbiAgICAgICAgdW5kZWZpbmVkXG4gICAgXSk7XG4gICAgaW5zdC5fem9kLm9wdGluID0gXCJvcHRpb25hbFwiO1xuICAgIGluc3QuX3pvZC5vcHRvdXQgPSBcIm9wdGlvbmFsXCI7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwidW5kZWZpbmVkXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE51bGwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE51bGxcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSByZWdleGVzLm51bGw7XG4gICAgaW5zdC5fem9kLnZhbHVlcyA9IG5ldyBTZXQoW1xuICAgICAgICBudWxsXG4gICAgXSk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJudWxsXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEFueSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQW55XCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkKT0+cGF5bG9hZDtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RVbmtub3duID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RVbmtub3duXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkKT0+cGF5bG9hZDtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROZXZlciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTmV2ZXJcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpPT57XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibmV2ZXJcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3RcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kVm9pZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVm9pZFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCk9PntcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJ2b2lkXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZERhdGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZERhdGVcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpPT57XG4gICAgICAgIGlmIChkZWYuY29lcmNlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXcgRGF0ZShwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF9lcnIpIHt9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBjb25zdCBpc0RhdGUgPSBpbnB1dCBpbnN0YW5jZW9mIERhdGU7XG4gICAgICAgIGNvbnN0IGlzVmFsaWREYXRlID0gaXNEYXRlICYmICFOdW1iZXIuaXNOYU4oaW5wdXQuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKGlzVmFsaWREYXRlKSByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJkYXRlXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAuLi5pc0RhdGUgPyB7XG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IFwiSW52YWxpZCBEYXRlXCJcbiAgICAgICAgICAgIH0gOiB7fSxcbiAgICAgICAgICAgIGluc3RcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZUFycmF5UmVzdWx0KHJlc3VsdCwgZmluYWwsIGluZGV4KSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGluZGV4LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgfVxuICAgIGZpbmFsLnZhbHVlW2luZGV4XSA9IHJlc3VsdC52YWx1ZTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kQXJyYXkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEFycmF5XCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3RcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IEFycmF5KGlucHV0Lmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHByb21zID0gW107XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gaW5wdXRbaV07XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuZWxlbWVudC5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXVxuICAgICAgICAgICAgfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcHJvbXMucHVzaChyZXN1bHQudGhlbigocmVzdWx0KT0+aGFuZGxlQXJyYXlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVBcnJheVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9tcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKT0+cGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7IC8vaGFuZGxlQXJyYXlSZXN1bHRzQXN5bmMocGFyc2VSZXN1bHRzLCBmaW5hbCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlUHJvcGVydHlSZXN1bHQocmVzdWx0LCBmaW5hbCwga2V5LCBpbnB1dCwgaXNPcHRpb25hbE91dCkge1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAvLyBGb3Igb3B0aW9uYWwtb3V0IHNjaGVtYXMsIGlnbm9yZSBlcnJvcnMgb24gYWJzZW50IGtleXNcbiAgICAgICAgaWYgKGlzT3B0aW9uYWxPdXQgJiYgIShrZXkgaW4gaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoa2V5IGluIGlucHV0KSB7XG4gICAgICAgICAgICBmaW5hbC52YWx1ZVtrZXldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZmluYWwudmFsdWVba2V5XSA9IHJlc3VsdC52YWx1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBub3JtYWxpemVEZWYoZGVmKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZi5zaGFwZSk7XG4gICAgZm9yIChjb25zdCBrIG9mIGtleXMpe1xuICAgICAgICBpZiAoIWRlZi5zaGFwZT8uW2tdPy5fem9kPy50cmFpdHM/LmhhcyhcIiRab2RUeXBlXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCBhdCBrZXkgXCIke2t9XCI6IGV4cGVjdGVkIGEgWm9kIHNjaGVtYWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG9rZXlzID0gdXRpbC5vcHRpb25hbEtleXMoZGVmLnNoYXBlKTtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5kZWYsXG4gICAgICAgIGtleXMsXG4gICAgICAgIGtleVNldDogbmV3IFNldChrZXlzKSxcbiAgICAgICAgbnVtS2V5czoga2V5cy5sZW5ndGgsXG4gICAgICAgIG9wdGlvbmFsS2V5czogbmV3IFNldChva2V5cylcbiAgICB9O1xufVxuZnVuY3Rpb24gaGFuZGxlQ2F0Y2hhbGwocHJvbXMsIGlucHV0LCBwYXlsb2FkLCBjdHgsIGRlZiwgaW5zdCkge1xuICAgIGNvbnN0IHVucmVjb2duaXplZCA9IFtdO1xuICAgIC8vIGl0ZXJhdGUgb3ZlciBpbnB1dCBrZXlzXG4gICAgY29uc3Qga2V5U2V0ID0gZGVmLmtleVNldDtcbiAgICBjb25zdCBfY2F0Y2hhbGwgPSBkZWYuY2F0Y2hhbGwuX3pvZDtcbiAgICBjb25zdCB0ID0gX2NhdGNoYWxsLmRlZi50eXBlO1xuICAgIGNvbnN0IGlzT3B0aW9uYWxPdXQgPSBfY2F0Y2hhbGwub3B0b3V0ID09PSBcIm9wdGlvbmFsXCI7XG4gICAgZm9yKGNvbnN0IGtleSBpbiBpbnB1dCl7XG4gICAgICAgIGlmIChrZXlTZXQuaGFzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAodCA9PT0gXCJuZXZlclwiKSB7XG4gICAgICAgICAgICB1bnJlY29nbml6ZWQucHVzaChrZXkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgciA9IF9jYXRjaGFsbC5ydW4oe1xuICAgICAgICAgICAgdmFsdWU6IGlucHV0W2tleV0sXG4gICAgICAgICAgICBpc3N1ZXM6IFtdXG4gICAgICAgIH0sIGN0eCk7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcHJvbXMucHVzaChyLnRoZW4oKHIpPT5oYW5kbGVQcm9wZXJ0eVJlc3VsdChyLCBwYXlsb2FkLCBrZXksIGlucHV0LCBpc09wdGlvbmFsT3V0KSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlUHJvcGVydHlSZXN1bHQociwgcGF5bG9hZCwga2V5LCBpbnB1dCwgaXNPcHRpb25hbE91dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHVucmVjb2duaXplZC5sZW5ndGgpIHtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcInVucmVjb2duaXplZF9rZXlzXCIsXG4gICAgICAgICAgICBrZXlzOiB1bnJlY29nbml6ZWQsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3RcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghcHJvbXMubGVuZ3RoKSByZXR1cm4gcGF5bG9hZDtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbXMpLnRoZW4oKCk9PntcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgJFpvZE9iamVjdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kT2JqZWN0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgLy8gcmVxdWlyZXMgY2FzdCBiZWNhdXNlIHRlY2huaWNhbGx5ICRab2RPYmplY3QgZG9lc24ndCBleHRlbmRcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgLy8gY29uc3Qgc2ggPSBkZWYuc2hhcGU7XG4gICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVmLCBcInNoYXBlXCIpO1xuICAgIGlmICghZGVzYz8uZ2V0KSB7XG4gICAgICAgIGNvbnN0IHNoID0gZGVmLnNoYXBlO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVmLCBcInNoYXBlXCIsIHtcbiAgICAgICAgICAgIGdldDogKCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTaCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc2hcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkZWYsIFwic2hhcGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmV3U2hcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3U2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBfbm9ybWFsaXplZCA9IHV0aWwuY2FjaGVkKCgpPT5ub3JtYWxpemVEZWYoZGVmKSk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwcm9wVmFsdWVzXCIsICgpPT57XG4gICAgICAgIGNvbnN0IHNoYXBlID0gZGVmLnNoYXBlO1xuICAgICAgICBjb25zdCBwcm9wVmFsdWVzID0ge307XG4gICAgICAgIGZvcihjb25zdCBrZXkgaW4gc2hhcGUpe1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzaGFwZVtrZXldLl96b2Q7XG4gICAgICAgICAgICBpZiAoZmllbGQudmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcFZhbHVlc1trZXldID8/IChwcm9wVmFsdWVzW2tleV0gPSBuZXcgU2V0KCkpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiBmaWVsZC52YWx1ZXMpcHJvcFZhbHVlc1trZXldLmFkZCh2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcFZhbHVlcztcbiAgICB9KTtcbiAgICBjb25zdCBpc09iamVjdCA9IHV0aWwuaXNPYmplY3Q7XG4gICAgY29uc3QgY2F0Y2hhbGwgPSBkZWYuY2F0Y2hhbGw7XG4gICAgbGV0IHZhbHVlO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIHZhbHVlID8/ICh2YWx1ZSA9IF9ub3JtYWxpemVkLnZhbHVlKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSB7fTtcbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB2YWx1ZS5zaGFwZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdmFsdWUua2V5cyl7XG4gICAgICAgICAgICBjb25zdCBlbCA9IHNoYXBlW2tleV07XG4gICAgICAgICAgICBjb25zdCBpc09wdGlvbmFsT3V0ID0gZWwuX3pvZC5vcHRvdXQgPT09IFwib3B0aW9uYWxcIjtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBlbC5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGlucHV0W2tleV0sXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXVxuICAgICAgICAgICAgfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2goci50aGVuKChyKT0+aGFuZGxlUHJvcGVydHlSZXN1bHQociwgcGF5bG9hZCwga2V5LCBpbnB1dCwgaXNPcHRpb25hbE91dCkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlUHJvcGVydHlSZXN1bHQociwgcGF5bG9hZCwga2V5LCBpbnB1dCwgaXNPcHRpb25hbE91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjYXRjaGFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21zLmxlbmd0aCA/IFByb21pc2UuYWxsKHByb21zKS50aGVuKCgpPT5wYXlsb2FkKSA6IHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhbmRsZUNhdGNoYWxsKHByb21zLCBpbnB1dCwgcGF5bG9hZCwgY3R4LCBfbm9ybWFsaXplZC52YWx1ZSwgaW5zdCk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RPYmplY3RKSVQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE9iamVjdEpJVFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIC8vIHJlcXVpcmVzIGNhc3QgYmVjYXVzZSB0ZWNobmljYWxseSAkWm9kT2JqZWN0IGRvZXNuJ3QgZXh0ZW5kXG4gICAgJFpvZE9iamVjdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3Qgc3VwZXJQYXJzZSA9IGluc3QuX3pvZC5wYXJzZTtcbiAgICBjb25zdCBfbm9ybWFsaXplZCA9IHV0aWwuY2FjaGVkKCgpPT5ub3JtYWxpemVEZWYoZGVmKSk7XG4gICAgY29uc3QgZ2VuZXJhdGVGYXN0cGFzcyA9IChzaGFwZSk9PntcbiAgICAgICAgY29uc3QgZG9jID0gbmV3IERvYyhbXG4gICAgICAgICAgICBcInNoYXBlXCIsXG4gICAgICAgICAgICBcInBheWxvYWRcIixcbiAgICAgICAgICAgIFwiY3R4XCJcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBfbm9ybWFsaXplZC52YWx1ZTtcbiAgICAgICAgY29uc3QgcGFyc2VTdHIgPSAoa2V5KT0+e1xuICAgICAgICAgICAgY29uc3QgayA9IHV0aWwuZXNjKGtleSk7XG4gICAgICAgICAgICByZXR1cm4gYHNoYXBlWyR7a31dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7a31dLCBpc3N1ZXM6IFtdIH0sIGN0eClgO1xuICAgICAgICB9O1xuICAgICAgICBkb2Mud3JpdGUoYGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtgKTtcbiAgICAgICAgY29uc3QgaWRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBub3JtYWxpemVkLmtleXMpe1xuICAgICAgICAgICAgaWRzW2tleV0gPSBga2V5XyR7Y291bnRlcisrfWA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQTogcHJlc2VydmUga2V5IG9yZGVyIHtcbiAgICAgICAgZG9jLndyaXRlKGBjb25zdCBuZXdSZXN1bHQgPSB7fTtgKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygbm9ybWFsaXplZC5rZXlzKXtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaWRzW2tleV07XG4gICAgICAgICAgICBjb25zdCBrID0gdXRpbC5lc2Moa2V5KTtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHNoYXBlW2tleV07XG4gICAgICAgICAgICBjb25zdCBpc09wdGlvbmFsT3V0ID0gc2NoZW1hPy5fem9kPy5vcHRvdXQgPT09IFwib3B0aW9uYWxcIjtcbiAgICAgICAgICAgIGRvYy53cml0ZShgY29uc3QgJHtpZH0gPSAke3BhcnNlU3RyKGtleSl9O2ApO1xuICAgICAgICAgICAgaWYgKGlzT3B0aW9uYWxPdXQpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3Igb3B0aW9uYWwtb3V0IHNjaGVtYXMsIGlnbm9yZSBlcnJvcnMgb24gYWJzZW50IGtleXNcbiAgICAgICAgICAgICAgICBkb2Mud3JpdGUoYFxuICAgICAgICBpZiAoJHtpZH0uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgIGlmICgke2t9IGluIGlucHV0KSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3VlcyA9IHBheWxvYWQuaXNzdWVzLmNvbmNhdCgke2lkfS5pc3N1ZXMubWFwKGlzcyA9PiAoe1xuICAgICAgICAgICAgICAuLi5pc3MsXG4gICAgICAgICAgICAgIHBhdGg6IGlzcy5wYXRoID8gWyR7a30sIC4uLmlzcy5wYXRoXSA6IFske2t9XVxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICgke2lkfS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCR7a30gaW4gaW5wdXQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdFske2t9XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3UmVzdWx0WyR7a31dID0gJHtpZH0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICBgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9jLndyaXRlKGBcbiAgICAgICAgaWYgKCR7aWR9Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICBwYXlsb2FkLmlzc3VlcyA9IHBheWxvYWQuaXNzdWVzLmNvbmNhdCgke2lkfS5pc3N1ZXMubWFwKGlzcyA9PiAoe1xuICAgICAgICAgICAgLi4uaXNzLFxuICAgICAgICAgICAgcGF0aDogaXNzLnBhdGggPyBbJHtrfSwgLi4uaXNzLnBhdGhdIDogWyR7a31dXG4gICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKCR7aWR9LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoJHtrfSBpbiBpbnB1dCkge1xuICAgICAgICAgICAgbmV3UmVzdWx0WyR7a31dID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdSZXN1bHRbJHtrfV0gPSAke2lkfS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgIGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRvYy53cml0ZShgcGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDtgKTtcbiAgICAgICAgZG9jLndyaXRlKGByZXR1cm4gcGF5bG9hZDtgKTtcbiAgICAgICAgY29uc3QgZm4gPSBkb2MuY29tcGlsZSgpO1xuICAgICAgICByZXR1cm4gKHBheWxvYWQsIGN0eCk9PmZuKHNoYXBlLCBwYXlsb2FkLCBjdHgpO1xuICAgIH07XG4gICAgbGV0IGZhc3RwYXNzO1xuICAgIGNvbnN0IGlzT2JqZWN0ID0gdXRpbC5pc09iamVjdDtcbiAgICBjb25zdCBqaXQgPSAhY29yZS5nbG9iYWxDb25maWcuaml0bGVzcztcbiAgICBjb25zdCBhbGxvd3NFdmFsID0gdXRpbC5hbGxvd3NFdmFsO1xuICAgIGNvbnN0IGZhc3RFbmFibGVkID0gaml0ICYmIGFsbG93c0V2YWwudmFsdWU7IC8vICYmICFkZWYuY2F0Y2hhbGw7XG4gICAgY29uc3QgY2F0Y2hhbGwgPSBkZWYuY2F0Y2hhbGw7XG4gICAgbGV0IHZhbHVlO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIHZhbHVlID8/ICh2YWx1ZSA9IF9ub3JtYWxpemVkLnZhbHVlKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChqaXQgJiYgZmFzdEVuYWJsZWQgJiYgY3R4Py5hc3luYyA9PT0gZmFsc2UgJiYgY3R4LmppdGxlc3MgIT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIGFsd2F5cyBzeW5jaHJvbm91c1xuICAgICAgICAgICAgaWYgKCFmYXN0cGFzcykgZmFzdHBhc3MgPSBnZW5lcmF0ZUZhc3RwYXNzKGRlZi5zaGFwZSk7XG4gICAgICAgICAgICBwYXlsb2FkID0gZmFzdHBhc3MocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmICghY2F0Y2hhbGwpIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNhdGNoYWxsKFtdLCBpbnB1dCwgcGF5bG9hZCwgY3R4LCB2YWx1ZSwgaW5zdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyUGFyc2UocGF5bG9hZCwgY3R4KTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVVbmlvblJlc3VsdHMocmVzdWx0cywgZmluYWwsIGluc3QsIGN0eCkge1xuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpe1xuICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGZpbmFsLnZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5vbmFib3J0ZWQgPSByZXN1bHRzLmZpbHRlcigocik9PiF1dGlsLmFib3J0ZWQocikpO1xuICAgIGlmIChub25hYm9ydGVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmaW5hbC52YWx1ZSA9IG5vbmFib3J0ZWRbMF0udmFsdWU7XG4gICAgICAgIHJldHVybiBub25hYm9ydGVkWzBdO1xuICAgIH1cbiAgICBmaW5hbC5pc3N1ZXMucHVzaCh7XG4gICAgICAgIGNvZGU6IFwiaW52YWxpZF91bmlvblwiLFxuICAgICAgICBpbnB1dDogZmluYWwudmFsdWUsXG4gICAgICAgIGluc3QsXG4gICAgICAgIGVycm9yczogcmVzdWx0cy5tYXAoKHJlc3VsdCk9PnJlc3VsdC5pc3N1ZXMubWFwKChpc3MpPT51dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSlcbiAgICB9KTtcbiAgICByZXR1cm4gZmluYWw7XG59XG5leHBvcnQgY29uc3QgJFpvZFVuaW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RVbmlvblwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpPT5kZWYub3B0aW9ucy5zb21lKChvKT0+by5fem9kLm9wdGluID09PSBcIm9wdGlvbmFsXCIpID8gXCJvcHRpb25hbFwiIDogdW5kZWZpbmVkKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKT0+ZGVmLm9wdGlvbnMuc29tZSgobyk9Pm8uX3pvZC5vcHRvdXQgPT09IFwib3B0aW9uYWxcIikgPyBcIm9wdGlvbmFsXCIgOiB1bmRlZmluZWQpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpPT57XG4gICAgICAgIGlmIChkZWYub3B0aW9ucy5ldmVyeSgobyk9Pm8uX3pvZC52YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNldChkZWYub3B0aW9ucy5mbGF0TWFwKChvcHRpb24pPT5BcnJheS5mcm9tKG9wdGlvbi5fem9kLnZhbHVlcykpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicGF0dGVyblwiLCAoKT0+e1xuICAgICAgICBpZiAoZGVmLm9wdGlvbnMuZXZlcnkoKG8pPT5vLl96b2QucGF0dGVybikpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5zID0gZGVmLm9wdGlvbnMubWFwKChvKT0+by5fem9kLnBhdHRlcm4pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oJHtwYXR0ZXJucy5tYXAoKHApPT51dGlsLmNsZWFuUmVnZXgocC5zb3VyY2UpKS5qb2luKFwifFwiKX0pJGApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgY29uc3Qgc2luZ2xlID0gZGVmLm9wdGlvbnMubGVuZ3RoID09PSAxO1xuICAgIGNvbnN0IGZpcnN0ID0gZGVmLm9wdGlvbnNbMF0uX3pvZC5ydW47XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCk9PntcbiAgICAgICAgaWYgKHNpbmdsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0KHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFzeW5jID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgZGVmLm9wdGlvbnMpe1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uLl96b2QucnVuKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdXG4gICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgICAgICBhc3luYyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFzeW5jKSByZXR1cm4gaGFuZGxlVW5pb25SZXN1bHRzKHJlc3VsdHMsIHBheWxvYWQsIGluc3QsIGN0eCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRzKS50aGVuKChyZXN1bHRzKT0+e1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVVuaW9uUmVzdWx0cyhyZXN1bHRzLCBwYXlsb2FkLCBpbnN0LCBjdHgpO1xuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVFeGNsdXNpdmVVbmlvblJlc3VsdHMocmVzdWx0cywgZmluYWwsIGluc3QsIGN0eCkge1xuICAgIGNvbnN0IHN1Y2Nlc3NlcyA9IHJlc3VsdHMuZmlsdGVyKChyKT0+ci5pc3N1ZXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAoc3VjY2Vzc2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBmaW5hbC52YWx1ZSA9IHN1Y2Nlc3Nlc1swXS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGZpbmFsO1xuICAgIH1cbiAgICBpZiAoc3VjY2Vzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBObyBtYXRjaGVzIC0gc2FtZSBhcyByZWd1bGFyIHVuaW9uXG4gICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF91bmlvblwiLFxuICAgICAgICAgICAgaW5wdXQ6IGZpbmFsLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGVycm9yczogcmVzdWx0cy5tYXAoKHJlc3VsdCk9PnJlc3VsdC5pc3N1ZXMubWFwKChpc3MpPT51dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSlcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTXVsdGlwbGUgbWF0Y2hlcyAtIGV4Y2x1c2l2ZSB1bmlvbiBmYWlsdXJlXG4gICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF91bmlvblwiLFxuICAgICAgICAgICAgaW5wdXQ6IGZpbmFsLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmluYWw7XG59XG5leHBvcnQgY29uc3QgJFpvZFhvciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kWG9yXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFVuaW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBkZWYuaW5jbHVzaXZlID0gZmFsc2U7XG4gICAgY29uc3Qgc2luZ2xlID0gZGVmLm9wdGlvbnMubGVuZ3RoID09PSAxO1xuICAgIGNvbnN0IGZpcnN0ID0gZGVmLm9wdGlvbnNbMF0uX3pvZC5ydW47XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCk9PntcbiAgICAgICAgaWYgKHNpbmdsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0KHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFzeW5jID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgZGVmLm9wdGlvbnMpe1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uLl96b2QucnVuKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdXG4gICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgICAgICAgICBhc3luYyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghYXN5bmMpIHJldHVybiBoYW5kbGVFeGNsdXNpdmVVbmlvblJlc3VsdHMocmVzdWx0cywgcGF5bG9hZCwgaW5zdCwgY3R4KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdHMpLnRoZW4oKHJlc3VsdHMpPT57XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXhjbHVzaXZlVW5pb25SZXN1bHRzKHJlc3VsdHMsIHBheWxvYWQsIGluc3QsIGN0eCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRGlzY3JpbWluYXRlZFVuaW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2REaXNjcmltaW5hdGVkVW5pb25cIiwgKGluc3QsIGRlZik9PntcbiAgICBkZWYuaW5jbHVzaXZlID0gZmFsc2U7XG4gICAgJFpvZFVuaW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBfc3VwZXIgPSBpbnN0Ll96b2QucGFyc2U7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwcm9wVmFsdWVzXCIsICgpPT57XG4gICAgICAgIGNvbnN0IHByb3BWYWx1ZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgZGVmLm9wdGlvbnMpe1xuICAgICAgICAgICAgY29uc3QgcHYgPSBvcHRpb24uX3pvZC5wcm9wVmFsdWVzO1xuICAgICAgICAgICAgaWYgKCFwdiB8fCBPYmplY3Qua2V5cyhwdikubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggXCIke2RlZi5vcHRpb25zLmluZGV4T2Yob3B0aW9uKX1cImApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocHYpKXtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BWYWx1ZXNba10pIHByb3BWYWx1ZXNba10gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWwgb2Ygdil7XG4gICAgICAgICAgICAgICAgICAgIHByb3BWYWx1ZXNba10uYWRkKHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wVmFsdWVzO1xuICAgIH0pO1xuICAgIGNvbnN0IGRpc2MgPSB1dGlsLmNhY2hlZCgoKT0+e1xuICAgICAgICBjb25zdCBvcHRzID0gZGVmLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCBvIG9mIG9wdHMpe1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gby5fem9kLnByb3BWYWx1ZXM/LltkZWYuZGlzY3JpbWluYXRvcl07XG4gICAgICAgICAgICBpZiAoIXZhbHVlcyB8fCB2YWx1ZXMuc2l6ZSA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4IFwiJHtkZWYub3B0aW9ucy5pbmRleE9mKG8pfVwiYCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKXtcbiAgICAgICAgICAgICAgICBpZiAobWFwLmhhcyh2KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBkaXNjcmltaW5hdG9yIHZhbHVlIFwiJHtTdHJpbmcodil9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWFwLnNldCh2LCBvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFwO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCF1dGlsLmlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdCA9IGRpc2MudmFsdWUuZ2V0KGlucHV0Py5bZGVmLmRpc2NyaW1pbmF0b3JdKTtcbiAgICAgICAgaWYgKG9wdCkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdC5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYudW5pb25GYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlcihwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3JcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdW5pb25cIixcbiAgICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgICBub3RlOiBcIk5vIG1hdGNoaW5nIGRpc2NyaW1pbmF0b3JcIixcbiAgICAgICAgICAgIGRpc2NyaW1pbmF0b3I6IGRlZi5kaXNjcmltaW5hdG9yLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBwYXRoOiBbXG4gICAgICAgICAgICAgICAgZGVmLmRpc2NyaW1pbmF0b3JcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEludGVyc2VjdGlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSW50ZXJzZWN0aW9uXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgbGVmdCA9IGRlZi5sZWZ0Ll96b2QucnVuKHtcbiAgICAgICAgICAgIHZhbHVlOiBpbnB1dCxcbiAgICAgICAgICAgIGlzc3VlczogW11cbiAgICAgICAgfSwgY3R4KTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBkZWYucmlnaHQuX3pvZC5ydW4oe1xuICAgICAgICAgICAgdmFsdWU6IGlucHV0LFxuICAgICAgICAgICAgaXNzdWVzOiBbXVxuICAgICAgICB9LCBjdHgpO1xuICAgICAgICBjb25zdCBhc3luYyA9IGxlZnQgaW5zdGFuY2VvZiBQcm9taXNlIHx8IHJpZ2h0IGluc3RhbmNlb2YgUHJvbWlzZTtcbiAgICAgICAgaWYgKGFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgICAgcmlnaHRcbiAgICAgICAgICAgIF0pLnRoZW4oKFtsZWZ0LCByaWdodF0pPT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVyc2VjdGlvblJlc3VsdHMocGF5bG9hZCwgbGVmdCwgcmlnaHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhbmRsZUludGVyc2VjdGlvblJlc3VsdHMocGF5bG9hZCwgbGVmdCwgcmlnaHQpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIG1lcmdlVmFsdWVzKGEsIGIpIHtcbiAgICAvLyBjb25zdCBhVHlwZSA9IHBhcnNlLnQoYSk7XG4gICAgLy8gY29uc3QgYlR5cGUgPSBwYXJzZS50KGIpO1xuICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgIGRhdGE6IGFcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlICYmICthID09PSArYikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICBkYXRhOiBhXG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICh1dGlsLmlzUGxhaW5PYmplY3QoYSkgJiYgdXRpbC5pc1BsYWluT2JqZWN0KGIpKSB7XG4gICAgICAgIGNvbnN0IGJLZXlzID0gT2JqZWN0LmtleXMoYik7XG4gICAgICAgIGNvbnN0IHNoYXJlZEtleXMgPSBPYmplY3Qua2V5cyhhKS5maWx0ZXIoKGtleSk9PmJLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBuZXdPYmogPSB7XG4gICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgLi4uYlxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBzaGFyZWRLZXlzKXtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoYVtrZXldLCBiW2tleV0pO1xuICAgICAgICAgICAgaWYgKCFzaGFyZWRWYWx1ZS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VFcnJvclBhdGg6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNoYXJlZFZhbHVlLm1lcmdlRXJyb3JQYXRoXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBzaGFyZWRWYWx1ZS5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgIGRhdGE6IG5ld09ialxuICAgICAgICB9O1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1lcmdlRXJyb3JQYXRoOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdBcnJheSA9IFtdO1xuICAgICAgICBmb3IobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhLmxlbmd0aDsgaW5kZXgrKyl7XG4gICAgICAgICAgICBjb25zdCBpdGVtQSA9IGFbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgaXRlbUIgPSBiW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoaXRlbUEsIGl0ZW1CKTtcbiAgICAgICAgICAgIGlmICghc2hhcmVkVmFsdWUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lcmdlRXJyb3JQYXRoOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNoYXJlZFZhbHVlLm1lcmdlRXJyb3JQYXRoXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3QXJyYXkucHVzaChzaGFyZWRWYWx1ZS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICBkYXRhOiBuZXdBcnJheVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIG1lcmdlRXJyb3JQYXRoOiBbXVxuICAgIH07XG59XG5mdW5jdGlvbiBoYW5kbGVJbnRlcnNlY3Rpb25SZXN1bHRzKHJlc3VsdCwgbGVmdCwgcmlnaHQpIHtcbiAgICAvLyBUcmFjayB3aGljaCBzaWRlKHMpIHJlcG9ydCBlYWNoIGtleSBhcyB1bnJlY29nbml6ZWRcbiAgICBjb25zdCB1bnJlY0tleXMgPSBuZXcgTWFwKCk7XG4gICAgbGV0IHVucmVjSXNzdWU7XG4gICAgZm9yIChjb25zdCBpc3Mgb2YgbGVmdC5pc3N1ZXMpe1xuICAgICAgICBpZiAoaXNzLmNvZGUgPT09IFwidW5yZWNvZ25pemVkX2tleXNcIikge1xuICAgICAgICAgICAgdW5yZWNJc3N1ZSA/PyAodW5yZWNJc3N1ZSA9IGlzcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgaXNzLmtleXMpe1xuICAgICAgICAgICAgICAgIGlmICghdW5yZWNLZXlzLmhhcyhrKSkgdW5yZWNLZXlzLnNldChrLCB7fSk7XG4gICAgICAgICAgICAgICAgdW5yZWNLZXlzLmdldChrKS5sID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5pc3N1ZXMucHVzaChpc3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3QgaXNzIG9mIHJpZ2h0Lmlzc3Vlcyl7XG4gICAgICAgIGlmIChpc3MuY29kZSA9PT0gXCJ1bnJlY29nbml6ZWRfa2V5c1wiKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgaXNzLmtleXMpe1xuICAgICAgICAgICAgICAgIGlmICghdW5yZWNLZXlzLmhhcyhrKSkgdW5yZWNLZXlzLnNldChrLCB7fSk7XG4gICAgICAgICAgICAgICAgdW5yZWNLZXlzLmdldChrKS5yID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5pc3N1ZXMucHVzaChpc3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJlcG9ydCBvbmx5IGtleXMgdW5yZWNvZ25pemVkIGJ5IEJPVEggc2lkZXNcbiAgICBjb25zdCBib3RoS2V5cyA9IFtcbiAgICAgICAgLi4udW5yZWNLZXlzXG4gICAgXS5maWx0ZXIoKFssIGZdKT0+Zi5sICYmIGYucikubWFwKChba10pPT5rKTtcbiAgICBpZiAoYm90aEtleXMubGVuZ3RoICYmIHVucmVjSXNzdWUpIHtcbiAgICAgICAgcmVzdWx0Lmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLnVucmVjSXNzdWUsXG4gICAgICAgICAgICBrZXlzOiBib3RoS2V5c1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHV0aWwuYWJvcnRlZChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIGNvbnN0IG1lcmdlZCA9IG1lcmdlVmFsdWVzKGxlZnQudmFsdWUsIHJpZ2h0LnZhbHVlKTtcbiAgICBpZiAoIW1lcmdlZC52YWxpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVubWVyZ2FibGUgaW50ZXJzZWN0aW9uLiBFcnJvciBwYXRoOiBgICsgYCR7SlNPTi5zdHJpbmdpZnkobWVyZ2VkLm1lcmdlRXJyb3JQYXRoKX1gKTtcbiAgICB9XG4gICAgcmVzdWx0LnZhbHVlID0gbWVyZ2VkLmRhdGE7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBjb25zdCAkWm9kVHVwbGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFR1cGxlXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IGl0ZW1zID0gZGVmLml0ZW1zO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJ0dXBsZVwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IFtdO1xuICAgICAgICBjb25zdCBwcm9tcyA9IFtdO1xuICAgICAgICBjb25zdCByZXZlcnNlZEluZGV4ID0gW1xuICAgICAgICAgICAgLi4uaXRlbXNcbiAgICAgICAgXS5yZXZlcnNlKCkuZmluZEluZGV4KChpdGVtKT0+aXRlbS5fem9kLm9wdGluICE9PSBcIm9wdGlvbmFsXCIpO1xuICAgICAgICBjb25zdCBvcHRTdGFydCA9IHJldmVyc2VkSW5kZXggPT09IC0xID8gMCA6IGl0ZW1zLmxlbmd0aCAtIHJldmVyc2VkSW5kZXg7XG4gICAgICAgIGlmICghZGVmLnJlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvb0JpZyA9IGlucHV0Lmxlbmd0aCA+IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gaW5wdXQubGVuZ3RoIDwgb3B0U3RhcnQgLSAxO1xuICAgICAgICAgICAgaWYgKHRvb0JpZyB8fCB0b29TbWFsbCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi50b29CaWcgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW06IGl0ZW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGl0ZW1zLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiBcImFycmF5XCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IC0xO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpe1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgaWYgKGkgPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgPj0gb3B0U3RhcnQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaXRlbS5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGlucHV0W2ldLFxuICAgICAgICAgICAgICAgIGlzc3VlczogW11cbiAgICAgICAgICAgIH0sIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2gocmVzdWx0LnRoZW4oKHJlc3VsdCk9PmhhbmRsZVR1cGxlUmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgaSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVHVwbGVSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLnJlc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBpbnB1dC5zbGljZShpdGVtcy5sZW5ndGgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbCBvZiByZXN0KXtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLnJlc3QuX3pvZC5ydW4oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWwsXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlczogW11cbiAgICAgICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21zLnB1c2gocmVzdWx0LnRoZW4oKHJlc3VsdCk9PmhhbmRsZVR1cGxlUmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgaSkpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVUdXBsZVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvbXMubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5hbGwocHJvbXMpLnRoZW4oKCk9PnBheWxvYWQpO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVUdXBsZVJlc3VsdChyZXN1bHQsIGZpbmFsLCBpbmRleCkge1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhpbmRleCwgcmVzdWx0Lmlzc3VlcykpO1xuICAgIH1cbiAgICBmaW5hbC52YWx1ZVtpbmRleF0gPSByZXN1bHQudmFsdWU7XG59XG5leHBvcnQgY29uc3QgJFpvZFJlY29yZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kUmVjb3JkXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCF1dGlsLmlzUGxhaW5PYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJyZWNvcmRcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3RcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZGVmLmtleVR5cGUuX3pvZC52YWx1ZXM7XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZEtleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB2YWx1ZXMpe1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBrZXkgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIikge1xuICAgICAgICAgICAgICAgICAgICByZWNvcmRLZXlzLmFkZCh0eXBlb2Yga2V5ID09PSBcIm51bWJlclwiID8ga2V5LnRvU3RyaW5nKCkgOiBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYudmFsdWVUeXBlLl96b2QucnVuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpbnB1dFtrZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBbXVxuICAgICAgICAgICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbXMucHVzaChyZXN1bHQudGhlbigocmVzdWx0KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwgcmVzdWx0Lmlzc3VlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlW2tleV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwgcmVzdWx0Lmlzc3VlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZVtrZXldID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHVucmVjb2duaXplZDtcbiAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gaW5wdXQpe1xuICAgICAgICAgICAgICAgIGlmICghcmVjb3JkS2V5cy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB1bnJlY29nbml6ZWQgPSB1bnJlY29nbml6ZWQgPz8gW107XG4gICAgICAgICAgICAgICAgICAgIHVucmVjb2duaXplZC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHVucmVjb2duaXplZCAmJiB1bnJlY29nbml6ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBcInVucmVjb2duaXplZF9rZXlzXCIsXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgICAgICBrZXlzOiB1bnJlY29nbml6ZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhpbnB1dCkpe1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFwiX19wcm90b19fXCIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGxldCBrZXlSZXN1bHQgPSBkZWYua2V5VHlwZS5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBrZXksXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlczogW11cbiAgICAgICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmIChrZXlSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHlcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE51bWVyaWMgc3RyaW5nIGZhbGxiYWNrOiBpZiBrZXkgaXMgYSBudW1lcmljIHN0cmluZyBhbmQgZmFpbGVkLCByZXRyeSB3aXRoIE51bWJlcihrZXkpXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHoubnVtYmVyKCksIHoubGl0ZXJhbChbMSwgMiwgM10pLCBhbmQgdW5pb25zIGNvbnRhaW5pbmcgbnVtZXJpYyBsaXRlcmFsc1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrTnVtZXJpY0tleSA9IHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgJiYgcmVnZXhlcy5udW1iZXIudGVzdChrZXkpICYmIGtleVJlc3VsdC5pc3N1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChjaGVja051bWVyaWNLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV0cnlSZXN1bHQgPSBkZWYua2V5VHlwZS5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogTnVtYmVyKGtleSksXG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdXG4gICAgICAgICAgICAgICAgICAgIH0sIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeVJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHlcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5UmVzdWx0Lmlzc3Vlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleVJlc3VsdCA9IHJldHJ5UmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXlSZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmLm1vZGUgPT09IFwibG9vc2VcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzcyB0aHJvdWdoIHVuY2hhbmdlZFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZVtrZXldID0gaW5wdXRba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgXCJzdHJpY3RcIiBiZWhhdmlvcjogZXJyb3Igb24gaW52YWxpZCBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9rZXlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IFwicmVjb3JkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBrZXlSZXN1bHQuaXNzdWVzLm1hcCgoaXNzKT0+dXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi52YWx1ZVR5cGUuX3pvZC5ydW4oe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5wdXRba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBbXVxuICAgICAgICAgICAgICAgIH0sIGN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbXMucHVzaChyZXN1bHQudGhlbigocmVzdWx0KT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhrZXksIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWVba2V5UmVzdWx0LnZhbHVlXSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhrZXksIHJlc3VsdC5pc3N1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlW2tleVJlc3VsdC52YWx1ZV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9tcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKT0+cGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RNYXAgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE1hcFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KT0+e1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghKGlucHV0IGluc3RhbmNlb2YgTWFwKSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibWFwXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21zID0gW107XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGlucHV0KXtcbiAgICAgICAgICAgIGNvbnN0IGtleVJlc3VsdCA9IGRlZi5rZXlUeXBlLl96b2QucnVuKHtcbiAgICAgICAgICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICAgICAgICAgIGlzc3VlczogW11cbiAgICAgICAgICAgIH0sIGN0eCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVJlc3VsdCA9IGRlZi52YWx1ZVR5cGUuX3pvZC5ydW4oe1xuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdXG4gICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKGtleVJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UgfHwgdmFsdWVSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcHJvbXMucHVzaChQcm9taXNlLmFsbChbXG4gICAgICAgICAgICAgICAgICAgIGtleVJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVSZXN1bHRcbiAgICAgICAgICAgICAgICBdKS50aGVuKChba2V5UmVzdWx0LCB2YWx1ZVJlc3VsdF0pPT57XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZU1hcFJlc3VsdChrZXlSZXN1bHQsIHZhbHVlUmVzdWx0LCBwYXlsb2FkLCBrZXksIGlucHV0LCBpbnN0LCBjdHgpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlTWFwUmVzdWx0KGtleVJlc3VsdCwgdmFsdWVSZXN1bHQsIHBheWxvYWQsIGtleSwgaW5wdXQsIGluc3QsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb21zLmxlbmd0aCkgcmV0dXJuIFByb21pc2UuYWxsKHByb21zKS50aGVuKCgpPT5wYXlsb2FkKTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlTWFwUmVzdWx0KGtleVJlc3VsdCwgdmFsdWVSZXN1bHQsIGZpbmFsLCBrZXksIGlucHV0LCBpbnN0LCBjdHgpIHtcbiAgICBpZiAoa2V5UmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHV0aWwucHJvcGVydHlLZXlUeXBlcy5oYXModHlwZW9mIGtleSkpIHtcbiAgICAgICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwga2V5UmVzdWx0Lmlzc3VlcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9rZXlcIixcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwibWFwXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IGtleVJlc3VsdC5pc3N1ZXMubWFwKChpc3MpPT51dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhbHVlUmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHV0aWwucHJvcGVydHlLZXlUeXBlcy5oYXModHlwZW9mIGtleSkpIHtcbiAgICAgICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwgdmFsdWVSZXN1bHQuaXNzdWVzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luOiBcIm1hcFwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9lbGVtZW50XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IHZhbHVlUmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcyk9PnV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaW5hbC52YWx1ZS5zZXQoa2V5UmVzdWx0LnZhbHVlLCB2YWx1ZVJlc3VsdC52YWx1ZSk7XG59XG5leHBvcnQgY29uc3QgJFpvZFNldCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kU2V0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCEoaW5wdXQgaW5zdGFuY2VvZiBTZXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcInNldFwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ldyBTZXQoKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGlucHV0KXtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi52YWx1ZVR5cGUuX3pvZC5ydW4oe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICAgIGlzc3VlczogW11cbiAgICAgICAgICAgIH0sIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2gocmVzdWx0LnRoZW4oKHJlc3VsdCk9PmhhbmRsZVNldFJlc3VsdChyZXN1bHQsIHBheWxvYWQpKSk7XG4gICAgICAgICAgICB9IGVsc2UgaGFuZGxlU2V0UmVzdWx0KHJlc3VsdCwgcGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb21zLmxlbmd0aCkgcmV0dXJuIFByb21pc2UuYWxsKHByb21zKS50aGVuKCgpPT5wYXlsb2FkKTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlU2V0UmVzdWx0KHJlc3VsdCwgZmluYWwpIHtcbiAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4ucmVzdWx0Lmlzc3Vlcyk7XG4gICAgfVxuICAgIGZpbmFsLnZhbHVlLmFkZChyZXN1bHQudmFsdWUpO1xufVxuZXhwb3J0IGNvbnN0ICRab2RFbnVtID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RFbnVtXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IHZhbHVlcyA9IHV0aWwuZ2V0RW51bVZhbHVlcyhkZWYuZW50cmllcyk7XG4gICAgY29uc3QgdmFsdWVzU2V0ID0gbmV3IFNldCh2YWx1ZXMpO1xuICAgIGluc3QuX3pvZC52YWx1ZXMgPSB2YWx1ZXNTZXQ7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSBuZXcgUmVnRXhwKGBeKCR7dmFsdWVzLmZpbHRlcigoayk9PnV0aWwucHJvcGVydHlLZXlUeXBlcy5oYXModHlwZW9mIGspKS5tYXAoKG8pPT50eXBlb2YgbyA9PT0gXCJzdHJpbmdcIiA/IHV0aWwuZXNjYXBlUmVnZXgobykgOiBvLnRvU3RyaW5nKCkpLmpvaW4oXCJ8XCIpfSkkYCk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlc1NldC5oYXMoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF92YWx1ZVwiLFxuICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZExpdGVyYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZExpdGVyYWxcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaWYgKGRlZi52YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgbGl0ZXJhbCBzY2hlbWEgd2l0aCBubyB2YWxpZCB2YWx1ZXNcIik7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBTZXQoZGVmLnZhbHVlcyk7XG4gICAgaW5zdC5fem9kLnZhbHVlcyA9IHZhbHVlcztcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IG5ldyBSZWdFeHAoYF4oJHtkZWYudmFsdWVzLm1hcCgobyk9PnR5cGVvZiBvID09PSBcInN0cmluZ1wiID8gdXRpbC5lc2NhcGVSZWdleChvKSA6IG8gPyB1dGlsLmVzY2FwZVJlZ2V4KG8udG9TdHJpbmcoKSkgOiBTdHJpbmcobykpLmpvaW4oXCJ8XCIpfSkkYCk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlcy5oYXMoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF92YWx1ZVwiLFxuICAgICAgICAgICAgdmFsdWVzOiBkZWYudmFsdWVzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEZpbGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEZpbGVcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBGaWxlKSByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJmaWxlXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFRyYW5zZm9ybSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVHJhbnNmb3JtXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RFbmNvZGVFcnJvcihpbnN0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IF9vdXQgPSBkZWYudHJhbnNmb3JtKHBheWxvYWQudmFsdWUsIHBheWxvYWQpO1xuICAgICAgICBpZiAoY3R4LmFzeW5jKSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBfb3V0IGluc3RhbmNlb2YgUHJvbWlzZSA/IF9vdXQgOiBQcm9taXNlLnJlc29sdmUoX291dCk7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0LnRoZW4oKG91dHB1dCk9PntcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9vdXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBfb3V0O1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVPcHRpb25hbFJlc3VsdChyZXN1bHQsIGlucHV0KSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoICYmIGlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgY29uc3QgJFpvZE9wdGlvbmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RPcHRpb25hbFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2Qub3B0aW4gPSBcIm9wdGlvbmFsXCI7XG4gICAgaW5zdC5fem9kLm9wdG91dCA9IFwib3B0aW9uYWxcIjtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKT0+e1xuICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyA/IG5ldyBTZXQoW1xuICAgICAgICAgICAgLi4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyxcbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICBdKSA6IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInBhdHRlcm5cIiwgKCk9PntcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IGRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO1xuICAgICAgICByZXR1cm4gcGF0dGVybiA/IG5ldyBSZWdFeHAoYF4oJHt1dGlsLmNsZWFuUmVnZXgocGF0dGVybi5zb3VyY2UpfSk/JGApIDogdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIGlmIChkZWYuaW5uZXJUeXBlLl96b2Qub3B0aW4gPT09IFwib3B0aW9uYWxcIikge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiByZXN1bHQudGhlbigocik9PmhhbmRsZU9wdGlvbmFsUmVzdWx0KHIsIHBheWxvYWQudmFsdWUpKTtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVPcHRpb25hbFJlc3VsdChyZXN1bHQsIHBheWxvYWQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXlsb2FkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RFeGFjdE9wdGlvbmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RFeGFjdE9wdGlvbmFsXCIsIChpbnN0LCBkZWYpPT57XG4gICAgLy8gQ2FsbCBwYXJlbnQgaW5pdCAtIGluaGVyaXRzIG9wdGluL29wdG91dCA9IFwib3B0aW9uYWxcIlxuICAgICRab2RPcHRpb25hbC5pbml0KGluc3QsIGRlZik7XG4gICAgLy8gT3ZlcnJpZGUgdmFsdWVzL3BhdHRlcm4gdG8gTk9UIGFkZCB1bmRlZmluZWRcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKT0+ZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwYXR0ZXJuXCIsICgpPT5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybik7XG4gICAgLy8gT3ZlcnJpZGUgcGFyc2UgdG8ganVzdCBkZWxlZ2F0ZSAobm8gdW5kZWZpbmVkIGhhbmRsaW5nKVxuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROdWxsYWJsZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTnVsbGFibGVcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKT0+ZGVmLmlubmVyVHlwZS5fem9kLm9wdGluKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKT0+ZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwYXR0ZXJuXCIsICgpPT57XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBkZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgUmVnRXhwKGBeKCR7dXRpbC5jbGVhblJlZ2V4KHBhdHRlcm4uc291cmNlKX18bnVsbCkkYCkgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCk9PntcbiAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMgPyBuZXcgU2V0KFtcbiAgICAgICAgICAgIC4uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMsXG4gICAgICAgICAgICBudWxsXG4gICAgICAgIF0pIDogdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIC8vIEZvcndhcmQgZGlyZWN0aW9uIChkZWNvZGUpOiBhbGxvdyBudWxsIHRvIHBhc3MgdGhyb3VnaFxuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2REZWZhdWx0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2REZWZhdWx0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIC8vIGluc3QuX3pvZC5xaW4gPSBcInRydWVcIjtcbiAgICBpbnN0Ll96b2Qub3B0aW4gPSBcIm9wdGlvbmFsXCI7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCk9PmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yd2FyZCBkaXJlY3Rpb24gKGRlY29kZSk6IGFwcGx5IGRlZmF1bHRzIGZvciB1bmRlZmluZWQgaW5wdXRcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IGRlZi5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqICRab2REZWZhdWx0IHJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWUgaW1tZWRpYXRlbHkgaW4gZm9yd2FyZCBkaXJlY3Rpb24uXG4gICAgICAgICAgICAgKiBJdCBkb2Vzbid0IHBhc3MgdGhlIGRlZmF1bHQgdmFsdWUgaW50byB0aGUgdmFsaWRhdG9yIChcInByZWZhdWx0XCIpLiBUaGVyZSdzIG5vIHJlYXNvbiB0byBwYXNzIHRoZSBkZWZhdWx0IHZhbHVlIHRocm91Z2ggdmFsaWRhdGlvbi4gVGhlIHZhbGlkaXR5IG9mIHRoZSBkZWZhdWx0IGlzIGVuZm9yY2VkIGJ5IFR5cGVTY3JpcHQgc3RhdGljYWxseS4gT3RoZXJ3aXNlLCBpdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdXNlciB0byBlbnN1cmUgdGhlIGRlZmF1bHQgaXMgdmFsaWQuIEluIHRoZSBjYXNlIG9mIHBpcGVzIHdpdGggZGl2ZXJnZW50IGluL291dCB0eXBlcywgeW91IGNhbiBzcGVjaWZ5IHRoZSBkZWZhdWx0IG9uIHRoZSBgaW5gIHNjaGVtYSBvZiB5b3VyIFpvZFBpcGUgdG8gc2V0IGEgXCJwcmVmYXVsdFwiIGZvciB0aGUgcGlwZS4gICAqLyByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3J3YXJkIGRpcmVjdGlvbjogY29udGludWUgd2l0aCBkZWZhdWx0IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KT0+aGFuZGxlRGVmYXVsdFJlc3VsdChyZXN1bHQsIGRlZikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVEZWZhdWx0UmVzdWx0KHJlc3VsdCwgZGVmKTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVEZWZhdWx0UmVzdWx0KHBheWxvYWQsIGRlZikge1xuICAgIGlmIChwYXlsb2FkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IGRlZi5kZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkO1xufVxuZXhwb3J0IGNvbnN0ICRab2RQcmVmYXVsdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kUHJlZmF1bHRcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLm9wdGluID0gXCJvcHRpb25hbFwiO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpPT5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KT0+e1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvcndhcmQgZGlyZWN0aW9uIChkZWNvZGUpOiBhcHBseSBwcmVmYXVsdCBmb3IgdW5kZWZpbmVkIGlucHV0XG4gICAgICAgIGlmIChwYXlsb2FkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROb25PcHRpb25hbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTm9uT3B0aW9uYWxcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCk9PntcbiAgICAgICAgY29uc3QgdiA9IGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7XG4gICAgICAgIHJldHVybiB2ID8gbmV3IFNldChbXG4gICAgICAgICAgICAuLi52XG4gICAgICAgIF0uZmlsdGVyKCh4KT0+eCAhPT0gdW5kZWZpbmVkKSkgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCk9PntcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpPT5oYW5kbGVOb25PcHRpb25hbFJlc3VsdChyZXN1bHQsIGluc3QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlTm9uT3B0aW9uYWxSZXN1bHQocmVzdWx0LCBpbnN0KTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVOb25PcHRpb25hbFJlc3VsdChwYXlsb2FkLCBpbnN0KSB7XG4gICAgaWYgKCFwYXlsb2FkLmlzc3Vlcy5sZW5ndGggJiYgcGF5bG9hZC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3RcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkO1xufVxuZXhwb3J0IGNvbnN0ICRab2RTdWNjZXNzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RTdWNjZXNzXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RFbmNvZGVFcnJvcihcIlpvZFN1Y2Nlc3NcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpPT57XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHJlc3VsdC5pc3N1ZXMubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHJlc3VsdC5pc3N1ZXMubGVuZ3RoID09PSAwO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENhdGNoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDYXRjaFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpPT5kZWYuaW5uZXJUeXBlLl96b2Qub3B0aW4pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0b3V0XCIsICgpPT5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKT0+ZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCk9PntcbiAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3J3YXJkIGRpcmVjdGlvbiAoZGVjb2RlKTogYXBwbHkgY2F0Y2ggbG9naWNcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyZXN1bHQpPT57XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IGRlZi5jYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlczogcmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcyk9PnV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gZGVmLmNhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiByZXN1bHQuaXNzdWVzLm1hcCgoaXNzKT0+dXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROYU4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE5hTlwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCk9PntcbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlICE9PSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNOYU4ocGF5bG9hZC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibmFuXCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFBpcGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFBpcGVcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCk9PmRlZi5pbi5fem9kLnZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKT0+ZGVmLmluLl96b2Qub3B0aW4pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0b3V0XCIsICgpPT5kZWYub3V0Ll96b2Qub3B0b3V0KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInByb3BWYWx1ZXNcIiwgKCk9PmRlZi5pbi5fem9kLnByb3BWYWx1ZXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpPT57XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gZGVmLm91dC5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJpZ2h0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByaWdodC50aGVuKChyaWdodCk9PmhhbmRsZVBpcGVSZXN1bHQocmlnaHQsIGRlZi5pbiwgY3R4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlUGlwZVJlc3VsdChyaWdodCwgZGVmLmluLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxlZnQgPSBkZWYuaW4uX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKGxlZnQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gbGVmdC50aGVuKChsZWZ0KT0+aGFuZGxlUGlwZVJlc3VsdChsZWZ0LCBkZWYub3V0LCBjdHgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlUGlwZVJlc3VsdChsZWZ0LCBkZWYub3V0LCBjdHgpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVBpcGVSZXN1bHQobGVmdCwgbmV4dCwgY3R4KSB7XG4gICAgaWYgKGxlZnQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAvLyBwcmV2ZW50IGZ1cnRoZXIgY2hlY2tzXG4gICAgICAgIGxlZnQuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBsZWZ0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dC5fem9kLnJ1bih7XG4gICAgICAgIHZhbHVlOiBsZWZ0LnZhbHVlLFxuICAgICAgICBpc3N1ZXM6IGxlZnQuaXNzdWVzXG4gICAgfSwgY3R4KTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kQ29kZWMgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENvZGVjXCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpPT5kZWYuaW4uX3pvZC52YWx1ZXMpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0aW5cIiwgKCk9PmRlZi5pbi5fem9kLm9wdGluKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKT0+ZGVmLm91dC5fem9kLm9wdG91dCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwcm9wVmFsdWVzXCIsICgpPT5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KT0+e1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBjdHguZGlyZWN0aW9uIHx8IFwiZm9yd2FyZFwiO1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBcImZvcndhcmRcIikge1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGRlZi5pbi5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgaWYgKGxlZnQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQudGhlbigobGVmdCk9PmhhbmRsZUNvZGVjQVJlc3VsdChsZWZ0LCBkZWYsIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNvZGVjQVJlc3VsdChsZWZ0LCBkZWYsIGN0eCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGRlZi5vdXQuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyaWdodCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmlnaHQudGhlbigocmlnaHQpPT5oYW5kbGVDb2RlY0FSZXN1bHQocmlnaHQsIGRlZiwgY3R4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQ29kZWNBUmVzdWx0KHJpZ2h0LCBkZWYsIGN0eCk7XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVDb2RlY0FSZXN1bHQocmVzdWx0LCBkZWYsIGN0eCkge1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAvLyBwcmV2ZW50IGZ1cnRoZXIgY2hlY2tzXG4gICAgICAgIHJlc3VsdC5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aW9uID0gY3R4LmRpcmVjdGlvbiB8fCBcImZvcndhcmRcIjtcbiAgICBpZiAoZGlyZWN0aW9uID09PSBcImZvcndhcmRcIikge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IGRlZi50cmFuc2Zvcm0ocmVzdWx0LnZhbHVlLCByZXN1bHQpO1xuICAgICAgICBpZiAodHJhbnNmb3JtZWQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWQudGhlbigodmFsdWUpPT5oYW5kbGVDb2RlY1R4UmVzdWx0KHJlc3VsdCwgdmFsdWUsIGRlZi5vdXQsIGN0eCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVDb2RlY1R4UmVzdWx0KHJlc3VsdCwgdHJhbnNmb3JtZWQsIGRlZi5vdXQsIGN0eCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSBkZWYucmV2ZXJzZVRyYW5zZm9ybShyZXN1bHQudmFsdWUsIHJlc3VsdCk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZC50aGVuKCh2YWx1ZSk9PmhhbmRsZUNvZGVjVHhSZXN1bHQocmVzdWx0LCB2YWx1ZSwgZGVmLmluLCBjdHgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlQ29kZWNUeFJlc3VsdChyZXN1bHQsIHRyYW5zZm9ybWVkLCBkZWYuaW4sIGN0eCk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQ29kZWNUeFJlc3VsdChsZWZ0LCB2YWx1ZSwgbmV4dFNjaGVtYSwgY3R4KSB7XG4gICAgLy8gQ2hlY2sgaWYgdHJhbnNmb3JtIGFkZGVkIGFueSBpc3N1ZXNcbiAgICBpZiAobGVmdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGxlZnQuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBsZWZ0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dFNjaGVtYS5fem9kLnJ1bih7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpc3N1ZXM6IGxlZnQuaXNzdWVzXG4gICAgfSwgY3R4KTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kUmVhZG9ubHkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFJlYWRvbmx5XCIsIChpbnN0LCBkZWYpPT57XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKT0+ZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpPT5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpPT5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRpbik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCk9PmRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCk9PntcbiAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oaGFuZGxlUmVhZG9ubHlSZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYW5kbGVSZWFkb25seVJlc3VsdChyZXN1bHQpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVJlYWRvbmx5UmVzdWx0KHBheWxvYWQpIHtcbiAgICBwYXlsb2FkLnZhbHVlID0gT2JqZWN0LmZyZWV6ZShwYXlsb2FkLnZhbHVlKTtcbiAgICByZXR1cm4gcGF5bG9hZDtcbn1cbmV4cG9ydCBjb25zdCAkWm9kVGVtcGxhdGVMaXRlcmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RUZW1wbGF0ZUxpdGVyYWxcIiwgKGluc3QsIGRlZik9PntcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgcmVnZXhQYXJ0cyA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBkZWYucGFydHMpe1xuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwib2JqZWN0XCIgJiYgcGFydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaXMgWm9kIHNjaGVtYVxuICAgICAgICAgICAgaWYgKCFwYXJ0Ll96b2QucGF0dGVybikge1xuICAgICAgICAgICAgICAgIC8vIGlmICghc291cmNlKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQsIG5vIHBhdHRlcm4gZm91bmQ6ICR7W1xuICAgICAgICAgICAgICAgICAgICAuLi5wYXJ0Ll96b2QudHJhaXRzXG4gICAgICAgICAgICAgICAgXS5zaGlmdCgpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcGFydC5fem9kLnBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHAgPyBwYXJ0Ll96b2QucGF0dGVybi5zb3VyY2UgOiBwYXJ0Ll96b2QucGF0dGVybjtcbiAgICAgICAgICAgIGlmICghc291cmNlKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0OiAke3BhcnQuX3pvZC50cmFpdHN9YCk7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHNvdXJjZS5zdGFydHNXaXRoKFwiXlwiKSA/IDEgOiAwO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gc291cmNlLmVuZHNXaXRoKFwiJFwiKSA/IHNvdXJjZS5sZW5ndGggLSAxIDogc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgIHJlZ2V4UGFydHMucHVzaChzb3VyY2Uuc2xpY2Uoc3RhcnQsIGVuZCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcnQgPT09IG51bGwgfHwgdXRpbC5wcmltaXRpdmVUeXBlcy5oYXModHlwZW9mIHBhcnQpKSB7XG4gICAgICAgICAgICByZWdleFBhcnRzLnB1c2godXRpbC5lc2NhcGVSZWdleChgJHtwYXJ0fWApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7cGFydH1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IG5ldyBSZWdFeHAoYF4ke3JlZ2V4UGFydHMuam9pbihcIlwiKX0kYCk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpPT57XG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZC52YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGluc3QuX3pvZC5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmICghaW5zdC5fem9kLnBhdHRlcm4udGVzdChwYXlsb2FkLnZhbHVlKSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBkZWYuZm9ybWF0ID8/IFwidGVtcGxhdGVfbGl0ZXJhbFwiLFxuICAgICAgICAgICAgICAgIHBhdHRlcm46IGluc3QuX3pvZC5wYXR0ZXJuLnNvdXJjZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEZ1bmN0aW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RGdW5jdGlvblwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll9kZWYgPSBkZWY7XG4gICAgaW5zdC5fem9kLmRlZiA9IGRlZjtcbiAgICBpbnN0LmltcGxlbWVudCA9IChmdW5jKT0+e1xuICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW1wbGVtZW50KCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gaW5zdC5fZGVmLmlucHV0ID8gcGFyc2UoaW5zdC5fZGVmLmlucHV0LCBhcmdzKSA6IGFyZ3M7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LmFwcGx5KGZ1bmMsIHRoaXMsIHBhcnNlZEFyZ3MpO1xuICAgICAgICAgICAgaWYgKGluc3QuX2RlZi5vdXRwdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2UoaW5zdC5fZGVmLm91dHB1dCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBpbnN0LmltcGxlbWVudEFzeW5jID0gKGZ1bmMpPT57XG4gICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbXBsZW1lbnRBc3luYygpIG11c3QgYmUgY2FsbGVkIHdpdGggYSBmdW5jdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IGluc3QuX2RlZi5pbnB1dCA/IGF3YWl0IHBhcnNlQXN5bmMoaW5zdC5fZGVmLmlucHV0LCBhcmdzKSA6IGFyZ3M7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBSZWZsZWN0LmFwcGx5KGZ1bmMsIHRoaXMsIHBhcnNlZEFyZ3MpO1xuICAgICAgICAgICAgaWYgKGluc3QuX2RlZi5vdXRwdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcGFyc2VBc3luYyhpbnN0Ll9kZWYub3V0cHV0LCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KT0+e1xuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQudmFsdWUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJmdW5jdGlvblwiLFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3RcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgb3V0cHV0IGlzIGEgcHJvbWlzZSB0eXBlIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgdXNlIGFzeW5jIGltcGxlbWVudGF0aW9uXG4gICAgICAgIGNvbnN0IGhhc1Byb21pc2VPdXRwdXQgPSBpbnN0Ll9kZWYub3V0cHV0ICYmIGluc3QuX2RlZi5vdXRwdXQuX3pvZC5kZWYudHlwZSA9PT0gXCJwcm9taXNlXCI7XG4gICAgICAgIGlmIChoYXNQcm9taXNlT3V0cHV0KSB7XG4gICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gaW5zdC5pbXBsZW1lbnRBc3luYyhwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBpbnN0LmltcGxlbWVudChwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xuICAgIGluc3QuaW5wdXQgPSAoLi4uYXJncyk9PntcbiAgICAgICAgY29uc3QgRiA9IGluc3QuY29uc3RydWN0b3I7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEYoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgICAgICAgICBpbnB1dDogbmV3ICRab2RUdXBsZSh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidHVwbGVcIixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgICAgICAgIHJlc3Q6IGFyZ3NbMV1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvdXRwdXQ6IGluc3QuX2RlZi5vdXRwdXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRih7XG4gICAgICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICBpbnB1dDogYXJnc1swXSxcbiAgICAgICAgICAgIG91dHB1dDogaW5zdC5fZGVmLm91dHB1dFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGluc3Qub3V0cHV0ID0gKG91dHB1dCk9PntcbiAgICAgICAgY29uc3QgRiA9IGluc3QuY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiBuZXcgRih7XG4gICAgICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICBpbnB1dDogaW5zdC5fZGVmLmlucHV0LFxuICAgICAgICAgICAgb3V0cHV0XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGluc3Q7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kUHJvbWlzZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kUHJvbWlzZVwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KT0+e1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBheWxvYWQudmFsdWUpLnRoZW4oKGlubmVyKT0+ZGVmLmlubmVyVHlwZS5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgdmFsdWU6IGlubmVyLFxuICAgICAgICAgICAgICAgIGlzc3VlczogW11cbiAgICAgICAgICAgIH0sIGN0eCkpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTGF6eSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTGF6eVwiLCAoaW5zdCwgZGVmKT0+e1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICAvLyBsZXQgX2lubmVyVHlwZSE6IGFueTtcbiAgICAvLyB1dGlsLmRlZmluZUxhenkoZGVmLCBcImdldHRlclwiLCAoKSA9PiB7XG4gICAgLy8gICBpZiAoIV9pbm5lclR5cGUpIHtcbiAgICAvLyAgICAgX2lubmVyVHlwZSA9IGRlZi5nZXR0ZXIoKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIHJldHVybiAoKSA9PiBfaW5uZXJUeXBlO1xuICAgIC8vIH0pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwiaW5uZXJUeXBlXCIsICgpPT5kZWYuZ2V0dGVyKCkpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicGF0dGVyblwiLCAoKT0+aW5zdC5fem9kLmlubmVyVHlwZT8uX3pvZD8ucGF0dGVybik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwcm9wVmFsdWVzXCIsICgpPT5pbnN0Ll96b2QuaW5uZXJUeXBlPy5fem9kPy5wcm9wVmFsdWVzKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpPT5pbnN0Ll96b2QuaW5uZXJUeXBlPy5fem9kPy5vcHRpbiA/PyB1bmRlZmluZWQpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0b3V0XCIsICgpPT5pbnN0Ll96b2QuaW5uZXJUeXBlPy5fem9kPy5vcHRvdXQgPz8gdW5kZWZpbmVkKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KT0+e1xuICAgICAgICBjb25zdCBpbm5lciA9IGluc3QuX3pvZC5pbm5lclR5cGU7XG4gICAgICAgIHJldHVybiBpbm5lci5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ3VzdG9tID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDdXN0b21cIiwgKGluc3QsIGRlZik9PntcbiAgICBjaGVja3MuJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF8pPT57XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpPT57XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgciA9IGRlZi5mbihpbnB1dCk7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHIudGhlbigocik9PmhhbmRsZVJlZmluZVJlc3VsdChyLCBwYXlsb2FkLCBpbnB1dCwgaW5zdCkpO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVJlZmluZVJlc3VsdChyLCBwYXlsb2FkLCBpbnB1dCwgaW5zdCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVSZWZpbmVSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpbnB1dCwgaW5zdCkge1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IF9pc3MgPSB7XG4gICAgICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgcGF0aDogW1xuICAgICAgICAgICAgICAgIC4uLmluc3QuX3pvZC5kZWYucGF0aCA/PyBbXVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhaW5zdC5fem9kLmRlZi5hYm9ydFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5zdC5fem9kLmRlZi5wYXJhbXMpIF9pc3MucGFyYW1zID0gaW5zdC5fem9kLmRlZi5wYXJhbXM7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2godXRpbC5pc3N1ZShfaXNzKSk7XG4gICAgfVxufVxuIiwgImV4cG9ydCB7IGRlZmF1bHQgYXMgYXIgfSBmcm9tIFwiLi9hci5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBheiB9IGZyb20gXCIuL2F6LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJlIH0gZnJvbSBcIi4vYmUuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYmcgfSBmcm9tIFwiLi9iZy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjYSB9IGZyb20gXCIuL2NhLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNzIH0gZnJvbSBcIi4vY3MuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGEgfSBmcm9tIFwiLi9kYS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkZSB9IGZyb20gXCIuL2RlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVuIH0gZnJvbSBcIi4vZW4uanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZW8gfSBmcm9tIFwiLi9lby5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBlcyB9IGZyb20gXCIuL2VzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZhIH0gZnJvbSBcIi4vZmEuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmkgfSBmcm9tIFwiLi9maS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmciB9IGZyb20gXCIuL2ZyLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZyQ0EgfSBmcm9tIFwiLi9mci1DQS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoZSB9IGZyb20gXCIuL2hlLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh1IH0gZnJvbSBcIi4vaHUuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaHkgfSBmcm9tIFwiLi9oeS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBpZCB9IGZyb20gXCIuL2lkLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGlzIH0gZnJvbSBcIi4vaXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaXQgfSBmcm9tIFwiLi9pdC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBqYSB9IGZyb20gXCIuL2phLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGthIH0gZnJvbSBcIi4va2EuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMga2ggfSBmcm9tIFwiLi9raC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBrbSB9IGZyb20gXCIuL2ttLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGtvIH0gZnJvbSBcIi4va28uanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbHQgfSBmcm9tIFwiLi9sdC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtayB9IGZyb20gXCIuL21rLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1zIH0gZnJvbSBcIi4vbXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbmwgfSBmcm9tIFwiLi9ubC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBubyB9IGZyb20gXCIuL25vLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG90YSB9IGZyb20gXCIuL290YS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcyB9IGZyb20gXCIuL3BzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBsIH0gZnJvbSBcIi4vcGwuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHQgfSBmcm9tIFwiLi9wdC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBydSB9IGZyb20gXCIuL3J1LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNsIH0gZnJvbSBcIi4vc2wuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3YgfSBmcm9tIFwiLi9zdi5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0YSB9IGZyb20gXCIuL3RhLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRoIH0gZnJvbSBcIi4vdGguanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdHIgfSBmcm9tIFwiLi90ci5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1YSB9IGZyb20gXCIuL3VhLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHVrIH0gZnJvbSBcIi4vdWsuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXIgfSBmcm9tIFwiLi91ci5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB1eiB9IGZyb20gXCIuL3V6LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZpIH0gZnJvbSBcIi4vdmkuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgemhDTiB9IGZyb20gXCIuL3poLUNOLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHpoVFcgfSBmcm9tIFwiLi96aC1UVy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB5byB9IGZyb20gXCIuL3lvLmpzXCI7XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpPT57XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDYyRFx1MDYzMVx1MDY0MVwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA2MjNcdTA2NDYgXHUwNjRBXHUwNjJEXHUwNjQ4XHUwNjRBXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJcdTA2MjhcdTA2MjdcdTA2NEFcdTA2MkFcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNjIzXHUwNjQ2IFx1MDY0QVx1MDYyRFx1MDY0OFx1MDY0QVwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDYzOVx1MDY0Nlx1MDYzNVx1MDYzMVwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA2MjNcdTA2NDYgXHUwNjRBXHUwNjJEXHUwNjQ4XHUwNjRBXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDYzOVx1MDY0Nlx1MDYzNVx1MDYzMVwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA2MjNcdTA2NDYgXHUwNjRBXHUwNjJEXHUwNjQ4XHUwNjRBXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIlx1MDY0NVx1MDYyRlx1MDYyRVx1MDY0NFwiLFxuICAgICAgICBlbWFpbDogXCJcdTA2MjhcdTA2MzFcdTA2NEFcdTA2MkYgXHUwNjI1XHUwNjQ0XHUwNjQzXHUwNjJBXHUwNjMxXHUwNjQ4XHUwNjQ2XHUwNjRBXCIsXG4gICAgICAgIHVybDogXCJcdTA2MzFcdTA2MjdcdTA2MjhcdTA2MzdcIixcbiAgICAgICAgZW1vamk6IFwiXHUwNjI1XHUwNjRBXHUwNjQ1XHUwNjQ4XHUwNjJDXHUwNjRBXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIlx1MDYyQVx1MDYyN1x1MDYzMVx1MDY0QVx1MDYyRSBcdTA2NDhcdTA2NDhcdTA2NDJcdTA2MkEgXHUwNjI4XHUwNjQ1XHUwNjM5XHUwNjRBXHUwNjI3XHUwNjMxIElTT1wiLFxuICAgICAgICBkYXRlOiBcIlx1MDYyQVx1MDYyN1x1MDYzMVx1MDY0QVx1MDYyRSBcdTA2MjhcdTA2NDVcdTA2MzlcdTA2NEFcdTA2MjdcdTA2MzEgSVNPXCIsXG4gICAgICAgIHRpbWU6IFwiXHUwNjQ4XHUwNjQyXHUwNjJBIFx1MDYyOFx1MDY0NVx1MDYzOVx1MDY0QVx1MDYyN1x1MDYzMSBJU09cIixcbiAgICAgICAgZHVyYXRpb246IFwiXHUwNjQ1XHUwNjJGXHUwNjI5IFx1MDYyOFx1MDY0NVx1MDYzOVx1MDY0QVx1MDYyN1x1MDYzMSBJU09cIixcbiAgICAgICAgaXB2NDogXCJcdTA2MzlcdTA2NDZcdTA2NDhcdTA2MjdcdTA2NDYgSVB2NFwiLFxuICAgICAgICBpcHY2OiBcIlx1MDYzOVx1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NiBJUHY2XCIsXG4gICAgICAgIGNpZHJ2NDogXCJcdTA2NDVcdTA2MkZcdTA2NDkgXHUwNjM5XHUwNjQ2XHUwNjI3XHUwNjQ4XHUwNjRBXHUwNjQ2IFx1MDYyOFx1MDYzNVx1MDY0QVx1MDYzQVx1MDYyOSBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJcdTA2NDVcdTA2MkZcdTA2NDkgXHUwNjM5XHUwNjQ2XHUwNjI3XHUwNjQ4XHUwNjRBXHUwNjQ2IFx1MDYyOFx1MDYzNVx1MDY0QVx1MDYzQVx1MDYyOSBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCJcdTA2NDZcdTA2NEVcdTA2MzUgXHUwNjI4XHUwNjJBXHUwNjMxXHUwNjQ1XHUwNjRBXHUwNjMyIGJhc2U2NC1lbmNvZGVkXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJcdTA2NDZcdTA2NEVcdTA2MzUgXHUwNjI4XHUwNjJBXHUwNjMxXHUwNjQ1XHUwNjRBXHUwNjMyIGJhc2U2NHVybC1lbmNvZGVkXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIlx1MDY0Nlx1MDY0RVx1MDYzNSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjQ3XHUwNjRBXHUwNjI2XHUwNjI5IEpTT05cIixcbiAgICAgICAgZTE2NDogXCJcdTA2MzFcdTA2NDJcdTA2NDUgXHUwNjQ3XHUwNjI3XHUwNjJBXHUwNjQxIFx1MDYyOFx1MDY0NVx1MDYzOVx1MDY0QVx1MDYyN1x1MDYzMSBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiXHUwNjQ1XHUwNjJGXHUwNjJFXHUwNjQ0XCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCJcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpPT57XG4gICAgICAgIHN3aXRjaChpc3N1ZS5jb2RlKXtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjQ1XHUwNjJGXHUwNjJFXHUwNjQ0XHUwNjI3XHUwNjJBIFx1MDYzQVx1MDY0QVx1MDYzMSBcdTA2NDVcdTA2NDJcdTA2MjhcdTA2NDhcdTA2NDRcdTA2Mjk6IFx1MDY0QVx1MDY0MVx1MDYyQVx1MDYzMVx1MDYzNiBcdTA2MjVcdTA2MkZcdTA2MkVcdTA2MjdcdTA2NDQgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfVx1MDYwQyBcdTA2NDhcdTA2NDRcdTA2NDNcdTA2NDYgXHUwNjJBXHUwNjQ1IFx1MDYyNVx1MDYyRlx1MDYyRVx1MDYyN1x1MDY0NCAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2NDVcdTA2MkZcdTA2MkVcdTA2NDRcdTA2MjdcdTA2MkEgXHUwNjNBXHUwNjRBXHUwNjMxIFx1MDY0NVx1MDY0Mlx1MDYyOFx1MDY0OFx1MDY0NFx1MDYyOTogXHUwNjRBXHUwNjQxXHUwNjJBXHUwNjMxXHUwNjM2IFx1MDYyNVx1MDYyRlx1MDYyRVx1MDYyN1x1MDY0NCAke2V4cGVjdGVkfVx1MDYwQyBcdTA2NDhcdTA2NDRcdTA2NDNcdTA2NDYgXHUwNjJBXHUwNjQ1IFx1MDYyNVx1MDYyRlx1MDYyRVx1MDYyN1x1MDY0NCAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBcdTA2NDVcdTA2MkZcdTA2MkVcdTA2NDRcdTA2MjdcdTA2MkEgXHUwNjNBXHUwNjRBXHUwNjMxIFx1MDY0NVx1MDY0Mlx1MDYyOFx1MDY0OFx1MDY0NFx1MDYyOTogXHUwNjRBXHUwNjQxXHUwNjJBXHUwNjMxXHUwNjM2IFx1MDYyNVx1MDYyRlx1MDYyRVx1MDYyN1x1MDY0NCAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDYyN1x1MDYyRVx1MDYyQVx1MDY0QVx1MDYyN1x1MDYzMSBcdTA2M0FcdTA2NEFcdTA2MzEgXHUwNjQ1XHUwNjQyXHUwNjI4XHUwNjQ4XHUwNjQ0OiBcdTA2NEFcdTA2MkFcdTA2NDhcdTA2NDJcdTA2MzkgXHUwNjI3XHUwNjQ2XHUwNjJBXHUwNjQyXHUwNjI3XHUwNjIxIFx1MDYyM1x1MDYyRFx1MDYyRiBcdTA2NDdcdTA2MzBcdTA2NDcgXHUwNjI3XHUwNjQ0XHUwNjJFXHUwNjRBXHUwNjI3XHUwNjMxXHUwNjI3XHUwNjJBOiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGAgXHUwNjIzXHUwNjQzXHUwNjI4XHUwNjMxIFx1MDY0NVx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2NDRcdTA2MjdcdTA2MzJcdTA2NDU6IFx1MDY0QVx1MDY0MVx1MDYyQVx1MDYzMVx1MDYzNiBcdTA2MjNcdTA2NDYgXHUwNjJBXHUwNjQzXHUwNjQ4XHUwNjQ2ICR7aXNzdWUub3JpZ2luID8/IFwiXHUwNjI3XHUwNjQ0XHUwNjQyXHUwNjRBXHUwNjQ1XHUwNjI5XCJ9ICR7YWRqfSAke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcIlx1MDYzOVx1MDY0Nlx1MDYzNVx1MDYzMVwifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjIzXHUwNjQzXHUwNjI4XHUwNjMxIFx1MDY0NVx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2NDRcdTA2MjdcdTA2MzJcdTA2NDU6IFx1MDY0QVx1MDY0MVx1MDYyQVx1MDYzMVx1MDYzNiBcdTA2MjNcdTA2NDYgXHUwNjJBXHUwNjQzXHUwNjQ4XHUwNjQ2ICR7aXNzdWUub3JpZ2luID8/IFwiXHUwNjI3XHUwNjQ0XHUwNjQyXHUwNjRBXHUwNjQ1XHUwNjI5XCJ9ICR7YWRqfSAke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2MjNcdTA2MzVcdTA2M0FcdTA2MzEgXHUwNjQ1XHUwNjQ2IFx1MDYyN1x1MDY0NFx1MDY0NFx1MDYyN1x1MDYzMlx1MDY0NTogXHUwNjRBXHUwNjQxXHUwNjJBXHUwNjMxXHUwNjM2IFx1MDY0NFx1MDY0MCAke2lzc3VlLm9yaWdpbn0gXHUwNjIzXHUwNjQ2IFx1MDY0QVx1MDY0M1x1MDY0OFx1MDY0NiAke2Fkan0gJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDYyM1x1MDYzNVx1MDYzQVx1MDYzMSBcdTA2NDVcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjQ0XHUwNjI3XHUwNjMyXHUwNjQ1OiBcdTA2NEFcdTA2NDFcdTA2MkFcdTA2MzFcdTA2MzYgXHUwNjQ0XHUwNjQwICR7aXNzdWUub3JpZ2lufSBcdTA2MjNcdTA2NDYgXHUwNjRBXHUwNjQzXHUwNjQ4XHUwNjQ2ICR7YWRqfSAke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgXHUwNjQ2XHUwNjRFXHUwNjM1IFx1MDYzQVx1MDY0QVx1MDYzMSBcdTA2NDVcdTA2NDJcdTA2MjhcdTA2NDhcdTA2NDQ6IFx1MDY0QVx1MDYyQ1x1MDYyOCBcdTA2MjNcdTA2NDYgXHUwNjRBXHUwNjI4XHUwNjJGXHUwNjIzIFx1MDYyOFx1MDY0MCBcIiR7aXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgXHUwNjQ2XHUwNjRFXHUwNjM1IFx1MDYzQVx1MDY0QVx1MDYzMSBcdTA2NDVcdTA2NDJcdTA2MjhcdTA2NDhcdTA2NDQ6IFx1MDY0QVx1MDYyQ1x1MDYyOCBcdTA2MjNcdTA2NDYgXHUwNjRBXHUwNjQ2XHUwNjJBXHUwNjQ3XHUwNjRBIFx1MDYyOFx1MDY0MCBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgXHUwNjQ2XHUwNjRFXHUwNjM1IFx1MDYzQVx1MDY0QVx1MDYzMSBcdTA2NDVcdTA2NDJcdTA2MjhcdTA2NDhcdTA2NDQ6IFx1MDY0QVx1MDYyQ1x1MDYyOCBcdTA2MjNcdTA2NDYgXHUwNjRBXHUwNjJBXHUwNjM2XHUwNjQ1XHUwNjUxXHUwNjRFXHUwNjQ2IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSByZXR1cm4gYFx1MDY0Nlx1MDY0RVx1MDYzNSBcdTA2M0FcdTA2NEFcdTA2MzEgXHUwNjQ1XHUwNjQyXHUwNjI4XHUwNjQ4XHUwNjQ0OiBcdTA2NEFcdTA2MkNcdTA2MjggXHUwNjIzXHUwNjQ2IFx1MDY0QVx1MDYzN1x1MDYyN1x1MDYyOFx1MDY0MiBcdTA2MjdcdTA2NDRcdTA2NDZcdTA2NDVcdTA2MzcgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9IFx1MDYzQVx1MDY0QVx1MDYzMSBcdTA2NDVcdTA2NDJcdTA2MjhcdTA2NDhcdTA2NDRgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDYzMVx1MDY0Mlx1MDY0NSBcdTA2M0FcdTA2NEFcdTA2MzEgXHUwNjQ1XHUwNjQyXHUwNjI4XHUwNjQ4XHUwNjQ0OiBcdTA2NEFcdTA2MkNcdTA2MjggXHUwNjIzXHUwNjQ2IFx1MDY0QVx1MDY0M1x1MDY0OFx1MDY0NiBcdTA2NDVcdTA2NDYgXHUwNjQ1XHUwNjM2XHUwNjI3XHUwNjM5XHUwNjQxXHUwNjI3XHUwNjJBICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2NDVcdTA2MzlcdTA2MzFcdTA2NDEke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiXHUwNjI3XHUwNjJBXCIgOiBcIlwifSBcdTA2M0FcdTA2MzFcdTA2NEFcdTA2Mjgke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiXHUwNjI5XCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCJcdTA2MEMgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0NVx1MDYzOVx1MDYzMVx1MDY0MSBcdTA2M0FcdTA2NEFcdTA2MzEgXHUwNjQ1XHUwNjQyXHUwNjI4XHUwNjQ4XHUwNjQ0IFx1MDY0MVx1MDY0QSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcdTA2NDVcdTA2MkZcdTA2MkVcdTA2NDQgXHUwNjNBXHUwNjRBXHUwNjMxIFx1MDY0NVx1MDY0Mlx1MDYyOFx1MDY0OFx1MDY0NFwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjQ1XHUwNjJGXHUwNjJFXHUwNjQ0IFx1MDYzQVx1MDY0QVx1MDYzMSBcdTA2NDVcdTA2NDJcdTA2MjhcdTA2NDhcdTA2NDQgXHUwNjQxXHUwNjRBICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlx1MDY0NVx1MDYyRlx1MDYyRVx1MDY0NCBcdTA2M0FcdTA2NEFcdTA2MzEgXHUwNjQ1XHUwNjQyXHUwNjI4XHUwNjQ4XHUwNjQ0XCI7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwic2ltdm9sXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIm9sbWFsXHUwMTMxZFx1MDEzMXJcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJheXRcIixcbiAgICAgICAgICAgIHZlcmI6IFwib2xtYWxcdTAxMzFkXHUwMTMxclwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcImVsZW1lbnRcIixcbiAgICAgICAgICAgIHZlcmI6IFwib2xtYWxcdTAxMzFkXHUwMTMxclwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW50XCIsXG4gICAgICAgICAgICB2ZXJiOiBcIm9sbWFsXHUwMTMxZFx1MDEzMXJcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiaW5wdXRcIixcbiAgICAgICAgZW1haWw6IFwiZW1haWwgYWRkcmVzc1wiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBkYXRldGltZVwiLFxuICAgICAgICBkYXRlOiBcIklTTyBkYXRlXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIHRpbWVcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIGR1cmF0aW9uXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCBhZGRyZXNzXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiBhZGRyZXNzXCIsXG4gICAgICAgIGNpZHJ2NDogXCJJUHY0IHJhbmdlXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2IHJhbmdlXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtZW5jb2RlZCBzdHJpbmdcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybC1lbmNvZGVkIHN0cmluZ1wiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIHN0cmluZ1wiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IG51bWJlclwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiaW5wdXRcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBZYW5sXHUwMTMxXHUwMTVGIGRcdTAyNTl5XHUwMjU5cjogZ1x1MDBGNnpsXHUwMjU5bmlsXHUwMjU5biBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBkYXhpbCBvbGFuICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFlhbmxcdTAxMzFcdTAxNUYgZFx1MDI1OXlcdTAyNTlyOiBnXHUwMEY2emxcdTAyNTluaWxcdTAyNTluICR7ZXhwZWN0ZWR9LCBkYXhpbCBvbGFuICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYFlhbmxcdTAxMzFcdTAxNUYgZFx1MDI1OXlcdTAyNTlyOiBnXHUwMEY2emxcdTAyNTluaWxcdTAyNTluICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgWWFubFx1MDEzMVx1MDE1RiBzZVx1MDBFN2ltOiBhXHUwMTVGYVx1MDExRlx1MDEzMWRha1x1MDEzMWxhcmRhbiBiaXJpIG9sbWFsXHUwMTMxZFx1MDEzMXI6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYFx1MDBDN294IGJcdTAwRjZ5XHUwMEZDazogZ1x1MDBGNnpsXHUwMjU5bmlsXHUwMjU5biAke2lzc3VlLm9yaWdpbiA/PyBcImRcdTAyNTl5XHUwMjU5clwifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRcIn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDBDN294IGJcdTAwRjZ5XHUwMEZDazogZ1x1MDBGNnpsXHUwMjU5bmlsXHUwMjU5biAke2lzc3VlLm9yaWdpbiA/PyBcImRcdTAyNTl5XHUwMjU5clwifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBcdTAwQzdveCBraVx1MDBFN2lrOiBnXHUwMEY2emxcdTAyNTluaWxcdTAyNTluICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDBDN294IGtpXHUwMEU3aWs6IGdcdTAwRjZ6bFx1MDI1OW5pbFx1MDI1OW4gJHtpc3N1ZS5vcmlnaW59ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikgcmV0dXJuIGBZYW5sXHUwMTMxXHUwMTVGIG1cdTAyNTl0bjogXCIke19pc3N1ZS5wcmVmaXh9XCIgaWxcdTAyNTkgYmFcdTAxNUZsYW1hbFx1MDEzMWRcdTAxMzFyYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgWWFubFx1MDEzMVx1MDE1RiBtXHUwMjU5dG46IFwiJHtfaXNzdWUuc3VmZml4fVwiIGlsXHUwMjU5IGJpdG1cdTAyNTlsaWRpcmA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgWWFubFx1MDEzMVx1MDE1RiBtXHUwMjU5dG46IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCIgZGF4aWwgb2xtYWxcdTAxMzFkXHUwMTMxcmA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgWWFubFx1MDEzMVx1MDE1RiBtXHUwMjU5dG46ICR7X2lzc3VlLnBhdHRlcm59IFx1MDE1RmFibG9udW5hIHV5XHUwMTFGdW4gb2xtYWxcdTAxMzFkXHUwMTMxcmA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgWWFubFx1MDEzMVx1MDE1RiAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgWWFubFx1MDEzMVx1MDE1RiBcdTAyNTlkXHUwMjU5ZDogJHtpc3N1ZS5kaXZpc29yfSBpbFx1MDI1OSBiXHUwMEY2bFx1MDBGQ25cdTAyNTkgYmlsXHUwMjU5biBvbG1hbFx1MDEzMWRcdTAxMzFyYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVGFuXHUwMTMxbm1heWFuIGFcdTAwRTdhciR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJsYXJcIiA6IFwiXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufSBkYXhpbGluZFx1MDI1OSB5YW5sXHUwMTMxXHUwMTVGIGFcdTAwRTdhcmA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIllhbmxcdTAxMzFcdTAxNUYgZFx1MDI1OXlcdTAyNTlyXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbn0gZGF4aWxpbmRcdTAyNTkgeWFubFx1MDEzMVx1MDE1RiBkXHUwMjU5eVx1MDI1OXJgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFlhbmxcdTAxMzFcdTAxNUYgZFx1MDI1OXlcdTAyNTlyYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuZnVuY3Rpb24gZ2V0QmVsYXJ1c2lhblBsdXJhbChjb3VudCwgb25lLCBmZXcsIG1hbnkpIHtcbiAgICBjb25zdCBhYnNDb3VudCA9IE1hdGguYWJzKGNvdW50KTtcbiAgICBjb25zdCBsYXN0RGlnaXQgPSBhYnNDb3VudCAlIDEwO1xuICAgIGNvbnN0IGxhc3RUd29EaWdpdHMgPSBhYnNDb3VudCAlIDEwMDtcbiAgICBpZiAobGFzdFR3b0RpZ2l0cyA+PSAxMSAmJiBsYXN0VHdvRGlnaXRzIDw9IDE5KSB7XG4gICAgICAgIHJldHVybiBtYW55O1xuICAgIH1cbiAgICBpZiAobGFzdERpZ2l0ID09PSAxKSB7XG4gICAgICAgIHJldHVybiBvbmU7XG4gICAgfVxuICAgIGlmIChsYXN0RGlnaXQgPj0gMiAmJiBsYXN0RGlnaXQgPD0gNCkge1xuICAgICAgICByZXR1cm4gZmV3O1xuICAgIH1cbiAgICByZXR1cm4gbWFueTtcbn1cbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwiXHUwNDQxXHUwNDU2XHUwNDNDXHUwNDMyXHUwNDMwXHUwNDNCXCIsXG4gICAgICAgICAgICAgICAgZmV3OiBcIlx1MDQ0MVx1MDQ1Nlx1MDQzQ1x1MDQzMlx1MDQzMFx1MDQzQlx1MDQ0QlwiLFxuICAgICAgICAgICAgICAgIG1hbnk6IFwiXHUwNDQxXHUwNDU2XHUwNDNDXHUwNDMyXHUwNDMwXHUwNDNCXHUwNDMwXHUwNDVFXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MDQzQ1x1MDQzNVx1MDQ0Nlx1MDQ0Q1wiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiB7XG4gICAgICAgICAgICAgICAgb25lOiBcIlx1MDQ0RFx1MDQzQlx1MDQzNVx1MDQzQ1x1MDQzNVx1MDQzRFx1MDQ0MlwiLFxuICAgICAgICAgICAgICAgIGZldzogXCJcdTA0NERcdTA0M0JcdTA0MzVcdTA0M0NcdTA0MzVcdTA0M0RcdTA0NDJcdTA0NEJcIixcbiAgICAgICAgICAgICAgICBtYW55OiBcIlx1MDQ0RFx1MDQzQlx1MDQzNVx1MDQzQ1x1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQzMFx1MDQ1RVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyYjogXCJcdTA0M0NcdTA0MzVcdTA0NDZcdTA0NENcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwiXHUwNDREXHUwNDNCXHUwNDM1XHUwNDNDXHUwNDM1XHUwNDNEXHUwNDQyXCIsXG4gICAgICAgICAgICAgICAgZmV3OiBcIlx1MDQ0RFx1MDQzQlx1MDQzNVx1MDQzQ1x1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQ0QlwiLFxuICAgICAgICAgICAgICAgIG1hbnk6IFwiXHUwNDREXHUwNDNCXHUwNDM1XHUwNDNDXHUwNDM1XHUwNDNEXHUwNDQyXHUwNDMwXHUwNDVFXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MDQzQ1x1MDQzNVx1MDQ0Nlx1MDQ0Q1wiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwiXHUwNDMxXHUwNDMwXHUwNDM5XHUwNDQyXCIsXG4gICAgICAgICAgICAgICAgZmV3OiBcIlx1MDQzMVx1MDQzMFx1MDQzOVx1MDQ0Mlx1MDQ0QlwiLFxuICAgICAgICAgICAgICAgIG1hbnk6IFwiXHUwNDMxXHUwNDMwXHUwNDM5XHUwNDQyXHUwNDMwXHUwNDVFXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MDQzQ1x1MDQzNVx1MDQ0Nlx1MDQ0Q1wiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJcdTA0NDNcdTA0MzJcdTA0M0VcdTA0MzRcIixcbiAgICAgICAgZW1haWw6IFwiZW1haWwgXHUwNDMwXHUwNDM0XHUwNDQwXHUwNDMwXHUwNDQxXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiXHUwNDREXHUwNDNDXHUwNDNFXHUwNDM0XHUwNDM3XHUwNDU2XCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBcdTA0MzRcdTA0MzBcdTA0NDJcdTA0MzAgXHUwNDU2IFx1MDQ0N1x1MDQzMFx1MDQ0MVwiLFxuICAgICAgICBkYXRlOiBcIklTTyBcdTA0MzRcdTA0MzBcdTA0NDJcdTA0MzBcIixcbiAgICAgICAgdGltZTogXCJJU08gXHUwNDQ3XHUwNDMwXHUwNDQxXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTyBcdTA0M0ZcdTA0NDBcdTA0MzBcdTA0NDZcdTA0NEZcdTA0MzNcdTA0M0JcdTA0MzBcdTA0NDFcdTA0NDZcdTA0NENcIixcbiAgICAgICAgaXB2NDogXCJJUHY0IFx1MDQzMFx1MDQzNFx1MDQ0MFx1MDQzMFx1MDQ0MVwiLFxuICAgICAgICBpcHY2OiBcIklQdjYgXHUwNDMwXHUwNDM0XHUwNDQwXHUwNDMwXHUwNDQxXCIsXG4gICAgICAgIGNpZHJ2NDogXCJJUHY0IFx1MDQzNFx1MDQ0Qlx1MDQ0Rlx1MDQzRlx1MDQzMFx1MDQzN1x1MDQzRVx1MDQzRFwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2NiBcdTA0MzRcdTA0NEJcdTA0NEZcdTA0M0ZcdTA0MzBcdTA0MzdcdTA0M0VcdTA0M0RcIixcbiAgICAgICAgYmFzZTY0OiBcIlx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQzRVx1MDQzQSBcdTA0NDMgXHUwNDQ0XHUwNDMwXHUwNDQwXHUwNDNDXHUwNDMwXHUwNDQ2XHUwNDM1IGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiXHUwNDQwXHUwNDMwXHUwNDM0XHUwNDNFXHUwNDNBIFx1MDQ0MyBcdTA0NDRcdTA0MzBcdTA0NDBcdTA0M0NcdTA0MzBcdTA0NDZcdTA0MzUgYmFzZTY0dXJsXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04gXHUwNDQwXHUwNDMwXHUwNDM0XHUwNDNFXHUwNDNBXCIsXG4gICAgICAgIGUxNjQ6IFwiXHUwNDNEXHUwNDQzXHUwNDNDXHUwNDMwXHUwNDQwIEUuMTY0XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJcdTA0NDNcdTA0MzJcdTA0M0VcdTA0MzRcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIlx1MDQzQlx1MDQ1Nlx1MDQzQVwiLFxuICAgICAgICBhcnJheTogXCJcdTA0M0NcdTA0MzBcdTA0NDFcdTA0NTZcdTA0NUVcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MURcdTA0NEZcdTA0M0ZcdTA0NDBcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M0JcdTA0NENcdTA0M0RcdTA0NEIgXHUwNDVFXHUwNDMyXHUwNDNFXHUwNDM0OiBcdTA0NDdcdTA0MzBcdTA0M0FcdTA0MzBcdTA0NUVcdTA0NDFcdTA0NEYgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgXHUwNDMwXHUwNDQyXHUwNDQwXHUwNDRCXHUwNDNDXHUwNDMwXHUwNDNEXHUwNDMwICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQ0Rlx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQ0QiBcdTA0NUVcdTA0MzJcdTA0M0VcdTA0MzQ6IFx1MDQ0N1x1MDQzMFx1MDQzQVx1MDQzMFx1MDQ1RVx1MDQ0MVx1MDQ0RiAke2V4cGVjdGVkfSwgXHUwNDMwXHUwNDQyXHUwNDQwXHUwNDRCXHUwNDNDXHUwNDMwXHUwNDNEXHUwNDMwICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYFx1MDQxRFx1MDQ0Rlx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQ0QiBcdTA0NUVcdTA0MzJcdTA0M0VcdTA0MzQ6IFx1MDQ0N1x1MDQzMFx1MDQzQVx1MDQzMFx1MDQzQlx1MDQzMFx1MDQ0MVx1MDQ0RiAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQ0Rlx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQ0QiBcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NEJcdTA0NEZcdTA0M0RcdTA0NDI6IFx1MDQ0N1x1MDQzMFx1MDQzQVx1MDQzMFx1MDQ1RVx1MDQ0MVx1MDQ0RiBcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M0QgXHUwNDM3ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IE51bWJlcihpc3N1ZS5tYXhpbXVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXQgPSBnZXRCZWxhcnVzaWFuUGx1cmFsKG1heFZhbHVlLCBzaXppbmcudW5pdC5vbmUsIHNpemluZy51bml0LmZldywgc2l6aW5nLnVuaXQubWFueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxN1x1MDQzMFx1MDQzRFx1MDQzMFx1MDQzNFx1MDQ0Mlx1MDQzMCBcdTA0MzJcdTA0NEZcdTA0M0JcdTA0NTZcdTA0M0FcdTA0NTY6IFx1MDQ0N1x1MDQzMFx1MDQzQVx1MDQzMFx1MDQzQlx1MDQzMFx1MDQ0MVx1MDQ0RiwgXHUwNDQ4XHUwNDQyXHUwNDNFICR7aXNzdWUub3JpZ2luID8/IFwiXHUwNDM3XHUwNDNEXHUwNDMwXHUwNDQ3XHUwNDREXHUwNDNEXHUwNDNEXHUwNDM1XCJ9IFx1MDQzRlx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzRFx1MDQzRFx1MDQzMCAke3NpemluZy52ZXJifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHt1bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MTdcdTA0MzBcdTA0M0RcdTA0MzBcdTA0MzRcdTA0NDJcdTA0MzAgXHUwNDMyXHUwNDRGXHUwNDNCXHUwNDU2XHUwNDNBXHUwNDU2OiBcdTA0NDdcdTA0MzBcdTA0M0FcdTA0MzBcdTA0M0JcdTA0MzBcdTA0NDFcdTA0NEYsIFx1MDQ0OFx1MDQ0Mlx1MDQzRSAke2lzc3VlLm9yaWdpbiA/PyBcIlx1MDQzN1x1MDQzRFx1MDQzMFx1MDQ0N1x1MDQ0RFx1MDQzRFx1MDQzRFx1MDQzNVwifSBcdTA0M0ZcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M0RcdTA0M0RcdTA0MzAgXHUwNDMxXHUwNDRCXHUwNDQ2XHUwNDRDICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5WYWx1ZSA9IE51bWJlcihpc3N1ZS5taW5pbXVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXQgPSBnZXRCZWxhcnVzaWFuUGx1cmFsKG1pblZhbHVlLCBzaXppbmcudW5pdC5vbmUsIHNpemluZy51bml0LmZldywgc2l6aW5nLnVuaXQubWFueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxN1x1MDQzMFx1MDQzRFx1MDQzMFx1MDQzNFx1MDQ0Mlx1MDQzMCBcdTA0M0NcdTA0MzBcdTA0M0JcdTA0NEI6IFx1MDQ0N1x1MDQzMFx1MDQzQVx1MDQzMFx1MDQzQlx1MDQzMFx1MDQ0MVx1MDQ0RiwgXHUwNDQ4XHUwNDQyXHUwNDNFICR7aXNzdWUub3JpZ2lufSBcdTA0M0ZcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M0RcdTA0M0RcdTA0MzAgJHtzaXppbmcudmVyYn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7dW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDE3XHUwNDMwXHUwNDNEXHUwNDMwXHUwNDM0XHUwNDQyXHUwNDMwIFx1MDQzQ1x1MDQzMFx1MDQzQlx1MDQ0QjogXHUwNDQ3XHUwNDMwXHUwNDNBXHUwNDMwXHUwNDNCXHUwNDMwXHUwNDQxXHUwNDRGLCBcdTA0NDhcdTA0NDJcdTA0M0UgJHtpc3N1ZS5vcmlnaW59IFx1MDQzRlx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzRFx1MDQzRFx1MDQzMCBcdTA0MzFcdTA0NEJcdTA0NDZcdTA0NEMgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSByZXR1cm4gYFx1MDQxRFx1MDQ0Rlx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQ0QiBcdTA0NDBcdTA0MzBcdTA0MzRcdTA0M0VcdTA0M0E6IFx1MDQzRlx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzRFx1MDQzNVx1MDQzRCBcdTA0M0ZcdTA0MzBcdTA0NDdcdTA0NEJcdTA0M0RcdTA0MzBcdTA0NDZcdTA0NDZcdTA0MzAgXHUwNDM3IFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgXHUwNDFEXHUwNDRGXHUwNDNGXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNCXHUwNDRDXHUwNDNEXHUwNDRCIFx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQzRVx1MDQzQTogXHUwNDNGXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNEXHUwNDM1XHUwNDNEIFx1MDQzN1x1MDQzMFx1MDQzQVx1MDQzMFx1MDQzRFx1MDQ0N1x1MDQzMlx1MDQzMFx1MDQ0Nlx1MDQ0Nlx1MDQzMCBcdTA0M0RcdTA0MzAgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYFx1MDQxRFx1MDQ0Rlx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQ0QiBcdTA0NDBcdTA0MzBcdTA0MzRcdTA0M0VcdTA0M0E6IFx1MDQzRlx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzRFx1MDQzNVx1MDQzRCBcdTA0MzdcdTA0M0NcdTA0NEZcdTA0NDhcdTA0NDdcdTA0MzBcdTA0NDZcdTA0NEMgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgXHUwNDFEXHUwNDRGXHUwNDNGXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNCXHUwNDRDXHUwNDNEXHUwNDRCIFx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQzRVx1MDQzQTogXHUwNDNGXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNEXHUwNDM1XHUwNDNEIFx1MDQzMFx1MDQzNFx1MDQzRlx1MDQzMFx1MDQzMlx1MDQ0Rlx1MDQzNFx1MDQzMFx1MDQ0Nlx1MDQ0QyBcdTA0NDhcdTA0MzBcdTA0MzFcdTA0M0JcdTA0M0VcdTA0M0RcdTA0NDMgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQ0Rlx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQ0QiAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDRGXHUwNDNGXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNCXHUwNDRDXHUwNDNEXHUwNDRCIFx1MDQzQlx1MDQ1Nlx1MDQzQTogXHUwNDNGXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNEXHUwNDM1XHUwNDNEIFx1MDQzMVx1MDQ0Qlx1MDQ0Nlx1MDQ0QyBcdTA0M0FcdTA0NDBcdTA0MzBcdTA0NDJcdTA0M0RcdTA0NEJcdTA0M0MgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzRlx1MDQzMFx1MDQzN1x1MDQzRFx1MDQzMFx1MDQzRFx1MDQ0QiAke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiXHUwNDNBXHUwNDNCXHUwNDRFXHUwNDQ3XHUwNDRCXCIgOiBcIlx1MDQzQVx1MDQzQlx1MDQ0RVx1MDQ0N1wifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MURcdTA0NEZcdTA0M0ZcdTA0NDBcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M0JcdTA0NENcdTA0M0RcdTA0NEIgXHUwNDNBXHUwNDNCXHUwNDRFXHUwNDQ3IFx1MDQ0MyAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcdTA0MURcdTA0NEZcdTA0M0ZcdTA0NDBcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M0JcdTA0NENcdTA0M0RcdTA0NEIgXHUwNDVFXHUwNDMyXHUwNDNFXHUwNDM0XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MURcdTA0NEZcdTA0M0ZcdTA0NDBcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M0JcdTA0NENcdTA0M0RcdTA0MzBcdTA0MzUgXHUwNDM3XHUwNDNEXHUwNDMwXHUwNDQ3XHUwNDREXHUwNDNEXHUwNDNEXHUwNDM1IFx1MDQ1RSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQ0Rlx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQ0QiBcdTA0NUVcdTA0MzJcdTA0M0VcdTA0MzRgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpPT57XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDQ0MVx1MDQzOFx1MDQzQ1x1MDQzMlx1MDQzRVx1MDQzQlx1MDQzMFwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA0MzRcdTA0MzAgXHUwNDQxXHUwNDRBXHUwNDM0XHUwNDRBXHUwNDQwXHUwNDM2XHUwNDMwXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJcdTA0MzFcdTA0MzBcdTA0MzlcdTA0NDJcdTA0MzBcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNDM0XHUwNDMwIFx1MDQ0MVx1MDQ0QVx1MDQzNFx1MDQ0QVx1MDQ0MFx1MDQzNlx1MDQzMFwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDQzNVx1MDQzQlx1MDQzNVx1MDQzQ1x1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQzMFwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA0MzRcdTA0MzAgXHUwNDQxXHUwNDRBXHUwNDM0XHUwNDRBXHUwNDQwXHUwNDM2XHUwNDMwXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDQzNVx1MDQzQlx1MDQzNVx1MDQzQ1x1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQzMFwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA0MzRcdTA0MzAgXHUwNDQxXHUwNDRBXHUwNDM0XHUwNDRBXHUwNDQwXHUwNDM2XHUwNDMwXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIlx1MDQzMlx1MDQ0NVx1MDQzRVx1MDQzNFwiLFxuICAgICAgICBlbWFpbDogXCJcdTA0MzhcdTA0M0NcdTA0MzVcdTA0MzlcdTA0M0IgXHUwNDMwXHUwNDM0XHUwNDQwXHUwNDM1XHUwNDQxXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiXHUwNDM1XHUwNDNDXHUwNDNFXHUwNDM0XHUwNDM2XHUwNDM4XCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBcdTA0MzJcdTA0NDBcdTA0MzVcdTA0M0NcdTA0MzVcIixcbiAgICAgICAgZGF0ZTogXCJJU08gXHUwNDM0XHUwNDMwXHUwNDQyXHUwNDMwXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIFx1MDQzMlx1MDQ0MFx1MDQzNVx1MDQzQ1x1MDQzNVwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08gXHUwNDNGXHUwNDQwXHUwNDNFXHUwNDM0XHUwNDRBXHUwNDNCXHUwNDM2XHUwNDM4XHUwNDQyXHUwNDM1XHUwNDNCXHUwNDNEXHUwNDNFXHUwNDQxXHUwNDQyXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCBcdTA0MzBcdTA0MzRcdTA0NDBcdTA0MzVcdTA0NDFcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IFx1MDQzMFx1MDQzNFx1MDQ0MFx1MDQzNVx1MDQ0MVwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NCBcdTA0MzRcdTA0MzhcdTA0MzBcdTA0M0ZcdTA0MzBcdTA0MzdcdTA0M0VcdTA0M0RcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYgXHUwNDM0XHUwNDM4XHUwNDMwXHUwNDNGXHUwNDMwXHUwNDM3XHUwNDNFXHUwNDNEXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtXHUwNDNBXHUwNDNFXHUwNDM0XHUwNDM4XHUwNDQwXHUwNDMwXHUwNDNEIFx1MDQzRFx1MDQzOFx1MDQzN1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsLVx1MDQzQVx1MDQzRVx1MDQzNFx1MDQzOFx1MDQ0MFx1MDQzMFx1MDQzRCBcdTA0M0RcdTA0MzhcdTA0MzdcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiBcdTA0M0RcdTA0MzhcdTA0MzdcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NCBcdTA0M0RcdTA0M0VcdTA0M0NcdTA0MzVcdTA0NDBcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIlx1MDQzMlx1MDQ0NVx1MDQzRVx1MDQzNFwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwiXHUwNDQ3XHUwNDM4XHUwNDQxXHUwNDNCXHUwNDNFXCIsXG4gICAgICAgIGFycmF5OiBcIlx1MDQzQ1x1MDQzMFx1MDQ0MVx1MDQzOFx1MDQzMlwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzMFx1MDQzQlx1MDQzOFx1MDQzNFx1MDQzNVx1MDQzRCBcdTA0MzJcdTA0NDVcdTA0M0VcdTA0MzQ6IFx1MDQzRVx1MDQ0N1x1MDQzMFx1MDQzQVx1MDQzMlx1MDQzMFx1MDQzRCBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBcdTA0M0ZcdTA0M0VcdTA0M0JcdTA0NDNcdTA0NDdcdTA0MzVcdTA0M0QgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDNCXHUwNDM4XHUwNDM0XHUwNDM1XHUwNDNEIFx1MDQzMlx1MDQ0NVx1MDQzRVx1MDQzNDogXHUwNDNFXHUwNDQ3XHUwNDMwXHUwNDNBXHUwNDMyXHUwNDMwXHUwNDNEICR7ZXhwZWN0ZWR9LCBcdTA0M0ZcdTA0M0VcdTA0M0JcdTA0NDNcdTA0NDdcdTA0MzVcdTA0M0QgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDNCXHUwNDM4XHUwNDM0XHUwNDM1XHUwNDNEIFx1MDQzMlx1MDQ0NVx1MDQzRVx1MDQzNDogXHUwNDNFXHUwNDQ3XHUwNDMwXHUwNDNBXHUwNDMyXHUwNDMwXHUwNDNEICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDNCXHUwNDM4XHUwNDM0XHUwNDNEXHUwNDMwIFx1MDQzRVx1MDQzRlx1MDQ0Nlx1MDQzOFx1MDQ0RjogXHUwNDNFXHUwNDQ3XHUwNDMwXHUwNDNBXHUwNDMyXHUwNDMwXHUwNDNEXHUwNDNFIFx1MDQzNVx1MDQzNFx1MDQzRFx1MDQzRSBcdTA0M0VcdTA0NDIgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHJldHVybiBgXHUwNDIyXHUwNDMyXHUwNDRBXHUwNDQwXHUwNDM0XHUwNDM1IFx1MDQzM1x1MDQzRVx1MDQzQlx1MDQ0Rlx1MDQzQ1x1MDQzRTogXHUwNDNFXHUwNDQ3XHUwNDMwXHUwNDNBXHUwNDMyXHUwNDMwIFx1MDQ0MVx1MDQzNSAke2lzc3VlLm9yaWdpbiA/PyBcIlx1MDQ0MVx1MDQ0Mlx1MDQzRVx1MDQzOVx1MDQzRFx1MDQzRVx1MDQ0MVx1MDQ0MlwifSBcdTA0MzRcdTA0MzAgXHUwNDQxXHUwNDRBXHUwNDM0XHUwNDRBXHUwNDQwXHUwNDM2XHUwNDMwICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiXHUwNDM1XHUwNDNCXHUwNDM1XHUwNDNDXHUwNDM1XHUwNDNEXHUwNDQyXHUwNDMwXCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MjJcdTA0MzJcdTA0NEFcdTA0NDBcdTA0MzRcdTA0MzUgXHUwNDMzXHUwNDNFXHUwNDNCXHUwNDRGXHUwNDNDXHUwNDNFOiBcdTA0M0VcdTA0NDdcdTA0MzBcdTA0M0FcdTA0MzJcdTA0MzAgXHUwNDQxXHUwNDM1ICR7aXNzdWUub3JpZ2luID8/IFwiXHUwNDQxXHUwNDQyXHUwNDNFXHUwNDM5XHUwNDNEXHUwNDNFXHUwNDQxXHUwNDQyXCJ9IFx1MDQzNFx1MDQzMCBcdTA0MzFcdTA0NEFcdTA0MzRcdTA0MzUgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDIyXHUwNDMyXHUwNDRBXHUwNDQwXHUwNDM0XHUwNDM1IFx1MDQzQ1x1MDQzMFx1MDQzQlx1MDQzQVx1MDQzRTogXHUwNDNFXHUwNDQ3XHUwNDMwXHUwNDNBXHUwNDMyXHUwNDMwIFx1MDQ0MVx1MDQzNSAke2lzc3VlLm9yaWdpbn0gXHUwNDM0XHUwNDMwIFx1MDQ0MVx1MDQ0QVx1MDQzNFx1MDQ0QVx1MDQ0MFx1MDQzNlx1MDQzMCAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDIyXHUwNDMyXHUwNDRBXHUwNDQwXHUwNDM0XHUwNDM1IFx1MDQzQ1x1MDQzMFx1MDQzQlx1MDQzQVx1MDQzRTogXHUwNDNFXHUwNDQ3XHUwNDMwXHUwNDNBXHUwNDMyXHUwNDMwIFx1MDQ0MVx1MDQzNSAke2lzc3VlLm9yaWdpbn0gXHUwNDM0XHUwNDMwIFx1MDQzMVx1MDQ0QVx1MDQzNFx1MDQzNSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDNCXHUwNDM4XHUwNDM0XHUwNDM1XHUwNDNEIFx1MDQzRFx1MDQzOFx1MDQzNzogXHUwNDQyXHUwNDQwXHUwNDRGXHUwNDMxXHUwNDMyXHUwNDMwIFx1MDQzNFx1MDQzMCBcdTA0MzdcdTA0MzBcdTA0M0ZcdTA0M0VcdTA0NDdcdTA0MzJcdTA0MzAgXHUwNDQxIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBcdTA0MURcdTA0MzVcdTA0MzJcdTA0MzBcdTA0M0JcdTA0MzhcdTA0MzRcdTA0MzVcdTA0M0QgXHUwNDNEXHUwNDM4XHUwNDM3OiBcdTA0NDJcdTA0NDBcdTA0NEZcdTA0MzFcdTA0MzJcdTA0MzAgXHUwNDM0XHUwNDMwIFx1MDQzN1x1MDQzMFx1MDQzMlx1MDQ0QVx1MDQ0MFx1MDQ0OFx1MDQzMlx1MDQzMCBcdTA0NDEgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzMFx1MDQzQlx1MDQzOFx1MDQzNFx1MDQzNVx1MDQzRCBcdTA0M0RcdTA0MzhcdTA0Mzc6IFx1MDQ0Mlx1MDQ0MFx1MDQ0Rlx1MDQzMVx1MDQzMlx1MDQzMCBcdTA0MzRcdTA0MzAgXHUwNDMyXHUwNDNBXHUwNDNCXHUwNDRFXHUwNDQ3XHUwNDMyXHUwNDMwIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzMFx1MDQzQlx1MDQzOFx1MDQzNFx1MDQzNVx1MDQzRCBcdTA0M0RcdTA0MzhcdTA0Mzc6IFx1MDQ0Mlx1MDQ0MFx1MDQ0Rlx1MDQzMVx1MDQzMlx1MDQzMCBcdTA0MzRcdTA0MzAgXHUwNDQxXHUwNDRBXHUwNDMyXHUwNDNGXHUwNDMwXHUwNDM0XHUwNDMwIFx1MDQ0MSAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbnZhbGlkX2FkaiA9IFwiXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDNCXHUwNDM4XHUwNDM0XHUwNDM1XHUwNDNEXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVtb2ppXCIpIGludmFsaWRfYWRqID0gXCJcdTA0MURcdTA0MzVcdTA0MzJcdTA0MzBcdTA0M0JcdTA0MzhcdTA0MzRcdTA0M0RcdTA0M0VcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZGF0ZXRpbWVcIikgaW52YWxpZF9hZGogPSBcIlx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzMFx1MDQzQlx1MDQzOFx1MDQzNFx1MDQzRFx1MDQzRVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJkYXRlXCIpIGludmFsaWRfYWRqID0gXCJcdTA0MURcdTA0MzVcdTA0MzJcdTA0MzBcdTA0M0JcdTA0MzhcdTA0MzRcdTA0M0RcdTA0MzBcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwidGltZVwiKSBpbnZhbGlkX2FkaiA9IFwiXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDNCXHUwNDM4XHUwNDM0XHUwNDNEXHUwNDNFXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImR1cmF0aW9uXCIpIGludmFsaWRfYWRqID0gXCJcdTA0MURcdTA0MzVcdTA0MzJcdTA0MzBcdTA0M0JcdTA0MzhcdTA0MzRcdTA0M0RcdTA0MzBcIjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2ludmFsaWRfYWRqfSAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDNCXHUwNDM4XHUwNDM0XHUwNDNEXHUwNDNFIFx1MDQ0N1x1MDQzOFx1MDQ0MVx1MDQzQlx1MDQzRTogXHUwNDQyXHUwNDQwXHUwNDRGXHUwNDMxXHUwNDMyXHUwNDMwIFx1MDQzNFx1MDQzMCBcdTA0MzFcdTA0NEFcdTA0MzRcdTA0MzUgXHUwNDNBXHUwNDQwXHUwNDMwXHUwNDQyXHUwNDNEXHUwNDNFIFx1MDQzRFx1MDQzMCAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM3XHUwNDNGXHUwNDNFXHUwNDM3XHUwNDNEXHUwNDMwXHUwNDQyJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlx1MDQzOFwiIDogXCJcIn0gXHUwNDNBXHUwNDNCXHUwNDRFXHUwNDQ3JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlx1MDQzRVx1MDQzMlx1MDQzNVwiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDNCXHUwNDM4XHUwNDM0XHUwNDM1XHUwNDNEIFx1MDQzQVx1MDQzQlx1MDQ0RVx1MDQ0NyBcdTA0MzIgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDNCXHUwNDM4XHUwNDM0XHUwNDM1XHUwNDNEIFx1MDQzMlx1MDQ0NVx1MDQzRVx1MDQzNFwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDNCXHUwNDM4XHUwNDM0XHUwNDNEXHUwNDMwIFx1MDQ0MVx1MDQ0Mlx1MDQzRVx1MDQzOVx1MDQzRFx1MDQzRVx1MDQ0MVx1MDQ0MiBcdTA0MzIgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MURcdTA0MzVcdTA0MzJcdTA0MzBcdTA0M0JcdTA0MzhcdTA0MzRcdTA0MzVcdTA0M0QgXHUwNDMyXHUwNDQ1XHUwNDNFXHUwNDM0YDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJjYXJcdTAwRTBjdGVyc1wiLFxuICAgICAgICAgICAgdmVyYjogXCJjb250ZW5pclwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiYnl0ZXNcIixcbiAgICAgICAgICAgIHZlcmI6IFwiY29udGVuaXJcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW50c1wiLFxuICAgICAgICAgICAgdmVyYjogXCJjb250ZW5pclwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW50c1wiLFxuICAgICAgICAgICAgdmVyYjogXCJjb250ZW5pclwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJlbnRyYWRhXCIsXG4gICAgICAgIGVtYWlsOiBcImFkcmVcdTAwRTdhIGVsZWN0clx1MDBGMm5pY2FcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJkYXRhIGkgaG9yYSBJU09cIixcbiAgICAgICAgZGF0ZTogXCJkYXRhIElTT1wiLFxuICAgICAgICB0aW1lOiBcImhvcmEgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcImR1cmFkYSBJU09cIixcbiAgICAgICAgaXB2NDogXCJhZHJlXHUwMEU3YSBJUHY0XCIsXG4gICAgICAgIGlwdjY6IFwiYWRyZVx1MDBFN2EgSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwicmFuZyBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJyYW5nIElQdjZcIixcbiAgICAgICAgYmFzZTY0OiBcImNhZGVuYSBjb2RpZmljYWRhIGVuIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiY2FkZW5hIGNvZGlmaWNhZGEgZW4gYmFzZTY0dXJsXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcImNhZGVuYSBKU09OXCIsXG4gICAgICAgIGUxNjQ6IFwiblx1MDBGQW1lcm8gRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcImVudHJhZGFcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUaXB1cyBpbnZcdTAwRTBsaWQ6IHMnZXNwZXJhdmEgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgcydoYSByZWJ1dCAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUaXB1cyBpbnZcdTAwRTBsaWQ6IHMnZXNwZXJhdmEgJHtleHBlY3RlZH0sIHMnaGEgcmVidXQgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgVmFsb3IgaW52XHUwMEUwbGlkOiBzJ2VzcGVyYXZhICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgT3BjaVx1MDBGMyBpbnZcdTAwRTBsaWRhOiBzJ2VzcGVyYXZhIHVuYSBkZSAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwiIG8gXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCJjb20gYSBtXHUwMEUweGltXCIgOiBcIm1lbnlzIGRlXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYE1hc3NhIGdyYW46IHMnZXNwZXJhdmEgcXVlICR7aXNzdWUub3JpZ2luID8/IFwiZWwgdmFsb3JcIn0gY29udGluZ3VcdTAwRTlzICR7YWRqfSAke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRzXCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBNYXNzYSBncmFuOiBzJ2VzcGVyYXZhIHF1ZSAke2lzc3VlLm9yaWdpbiA/PyBcImVsIHZhbG9yXCJ9IGZvcyAke2Fkan0gJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcImNvbSBhIG1cdTAwRURuaW1cIiA6IFwibVx1MDBFOXMgZGVcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgTWFzc2EgcGV0aXQ6IHMnZXNwZXJhdmEgcXVlICR7aXNzdWUub3JpZ2lufSBjb250aW5ndVx1MDBFOXMgJHthZGp9ICR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBNYXNzYSBwZXRpdDogcydlc3BlcmF2YSBxdWUgJHtpc3N1ZS5vcmlnaW59IGZvcyAke2Fkan0gJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEZvcm1hdCBpbnZcdTAwRTBsaWQ6IGhhIGRlIGNvbWVuXHUwMEU3YXIgYW1iIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBGb3JtYXQgaW52XHUwMEUwbGlkOiBoYSBkJ2FjYWJhciBhbWIgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYEZvcm1hdCBpbnZcdTAwRTBsaWQ6IGhhIGQnaW5jbG91cmUgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgRm9ybWF0IGludlx1MDBFMGxpZDogaGEgZGUgY29pbmNpZGlyIGFtYiBlbCBwYXRyXHUwMEYzICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGb3JtYXQgaW52XHUwMEUwbGlkIHBlciBhICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOXHUwMEZBbWVybyBpbnZcdTAwRTBsaWQ6IGhhIGRlIHNlciBtXHUwMEZBbHRpcGxlIGRlICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBDbGF1JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJ9IG5vIHJlY29uZWd1ZGEke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQ2xhdSBpbnZcdTAwRTBsaWRhIGEgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiRW50cmFkYSBpbnZcdTAwRTBsaWRhXCI7IC8vIENvdWxkIGFsc28gYmUgXCJUaXB1cyBkJ3VuaVx1MDBGMyBpbnZcdTAwRTBsaWRcIiBidXQgXCJFbnRyYWRhIGludlx1MDBFMGxpZGFcIiBpcyBtb3JlIGdlbmVyYWxcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEVsZW1lbnQgaW52XHUwMEUwbGlkIGEgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFbnRyYWRhIGludlx1MDBFMGxpZGFgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpPT57XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiBcInpuYWtcdTAxNkZcIixcbiAgICAgICAgICAgIHZlcmI6IFwibVx1MDBFRHRcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJhanRcdTAxNkZcIixcbiAgICAgICAgICAgIHZlcmI6IFwibVx1MDBFRHRcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJwcnZrXHUwMTZGXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIm1cdTAwRUR0XCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcInBydmtcdTAxNkZcIixcbiAgICAgICAgICAgIHZlcmI6IFwibVx1MDBFRHRcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwicmVndWxcdTAwRTFyblx1MDBFRCB2XHUwMEZEcmF6XCIsXG4gICAgICAgIGVtYWlsOiBcImUtbWFpbG92XHUwMEUxIGFkcmVzYVwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcImRhdHVtIGEgXHUwMTBEYXMgdmUgZm9ybVx1MDBFMXR1IElTT1wiLFxuICAgICAgICBkYXRlOiBcImRhdHVtIHZlIGZvcm1cdTAwRTF0dSBJU09cIixcbiAgICAgICAgdGltZTogXCJcdTAxMERhcyB2ZSBmb3JtXHUwMEUxdHUgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcImRvYmEgdHJ2XHUwMEUxblx1MDBFRCBJU09cIixcbiAgICAgICAgaXB2NDogXCJJUHY0IGFkcmVzYVwiLFxuICAgICAgICBpcHY2OiBcIklQdjYgYWRyZXNhXCIsXG4gICAgICAgIGNpZHJ2NDogXCJyb3pzYWggSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwicm96c2FoIElQdjZcIixcbiAgICAgICAgYmFzZTY0OiBcIlx1MDE1OWV0XHUwMTFCemVjIHpha1x1MDBGM2RvdmFuXHUwMEZEIHZlIGZvcm1cdTAwRTF0dSBiYXNlNjRcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcIlx1MDE1OWV0XHUwMTFCemVjIHpha1x1MDBGM2RvdmFuXHUwMEZEIHZlIGZvcm1cdTAwRTF0dSBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiXHUwMTU5ZXRcdTAxMUJ6ZWMgdmUgZm9ybVx1MDBFMXR1IEpTT05cIixcbiAgICAgICAgZTE2NDogXCJcdTAxMERcdTAwRURzbG8gRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcInZzdHVwXCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJcdTAxMERcdTAwRURzbG9cIixcbiAgICAgICAgc3RyaW5nOiBcIlx1MDE1OWV0XHUwMTFCemVjXCIsXG4gICAgICAgIGZ1bmN0aW9uOiBcImZ1bmtjZVwiLFxuICAgICAgICBhcnJheTogXCJwb2xlXCJcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpPT57XG4gICAgICAgIHN3aXRjaChpc3N1ZS5jb2RlKXtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmVwbGF0blx1MDBGRCB2c3R1cDogb1x1MDEwRGVrXHUwMEUxdlx1MDBFMW5vIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIG9iZHJcdTAxN0Vlbm8gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmVwbGF0blx1MDBGRCB2c3R1cDogb1x1MDEwRGVrXHUwMEUxdlx1MDBFMW5vICR7ZXhwZWN0ZWR9LCBvYmRyXHUwMTdFZW5vICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYE5lcGxhdG5cdTAwRkQgdnN0dXA6IG9cdTAxMERla1x1MDBFMXZcdTAwRTFubyAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5lcGxhdG5cdTAwRTEgbW9cdTAxN0Vub3N0OiBvXHUwMTBEZWtcdTAwRTF2XHUwMEUxbmEgamVkbmEgeiBob2Rub3QgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgSG9kbm90YSBqZSBwXHUwMTU5XHUwMEVEbGlcdTAxNjEgdmVsa1x1MDBFMTogJHtpc3N1ZS5vcmlnaW4gPz8gXCJob2Rub3RhXCJ9IG11c1x1MDBFRCBtXHUwMEVEdCAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcInBydmtcdTAxNkZcIn1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSG9kbm90YSBqZSBwXHUwMTU5XHUwMEVEbGlcdTAxNjEgdmVsa1x1MDBFMTogJHtpc3N1ZS5vcmlnaW4gPz8gXCJob2Rub3RhXCJ9IG11c1x1MDBFRCBiXHUwMEZEdCAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBIb2Rub3RhIGplIHBcdTAxNTlcdTAwRURsaVx1MDE2MSBtYWxcdTAwRTE6ICR7aXNzdWUub3JpZ2luID8/IFwiaG9kbm90YVwifSBtdXNcdTAwRUQgbVx1MDBFRHQgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJwcnZrXHUwMTZGXCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEhvZG5vdGEgamUgcFx1MDE1OVx1MDBFRGxpXHUwMTYxIG1hbFx1MDBFMTogJHtpc3N1ZS5vcmlnaW4gPz8gXCJob2Rub3RhXCJ9IG11c1x1MDBFRCBiXHUwMEZEdCAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgTmVwbGF0blx1MDBGRCBcdTAxNTlldFx1MDExQnplYzogbXVzXHUwMEVEIHphXHUwMTBEXHUwMEVEbmF0IG5hIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgTmVwbGF0blx1MDBGRCBcdTAxNTlldFx1MDExQnplYzogbXVzXHUwMEVEIGtvblx1MDEwRGl0IG5hIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBOZXBsYXRuXHUwMEZEIFx1MDE1OWV0XHUwMTFCemVjOiBtdXNcdTAwRUQgb2JzYWhvdmF0IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSByZXR1cm4gYE5lcGxhdG5cdTAwRkQgXHUwMTU5ZXRcdTAxMUJ6ZWM6IG11c1x1MDBFRCBvZHBvdlx1MDBFRGRhdCB2em9ydSAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmVwbGF0blx1MDBGRCBmb3JtXHUwMEUxdCAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmVwbGF0blx1MDBFOSBcdTAxMERcdTAwRURzbG86IG11c1x1MDBFRCBiXHUwMEZEdCBuXHUwMEUxc29ia2VtICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXpuXHUwMEUxbVx1MDBFOSBrbFx1MDBFRFx1MDEwRGU6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmVwbGF0blx1MDBGRCBrbFx1MDBFRFx1MDEwRCB2ICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIk5lcGxhdG5cdTAwRkQgdnN0dXBcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5lcGxhdG5cdTAwRTEgaG9kbm90YSB2ICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmVwbGF0blx1MDBGRCB2c3R1cGA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwidGVnblwiLFxuICAgICAgICAgICAgdmVyYjogXCJoYXZkZVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiYnl0ZXNcIixcbiAgICAgICAgICAgIHZlcmI6IFwiaGF2ZGVcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW50ZXJcIixcbiAgICAgICAgICAgIHZlcmI6IFwiaW5kZWhvbGR0XCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcImVsZW1lbnRlclwiLFxuICAgICAgICAgICAgdmVyYjogXCJpbmRlaG9sZHRcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiaW5wdXRcIixcbiAgICAgICAgZW1haWw6IFwiZS1tYWlsYWRyZXNzZVwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBkYXRvLSBvZyBrbG9ra2VzbFx1MDBFNnRcIixcbiAgICAgICAgZGF0ZTogXCJJU08tZGF0b1wiLFxuICAgICAgICB0aW1lOiBcIklTTy1rbG9ra2VzbFx1MDBFNnRcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPLXZhcmlnaGVkXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NC1vbXJcdTAwRTVkZVwiLFxuICAgICAgICBpcHY2OiBcIklQdjYtb21yXHUwMEU1ZGVcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQtc3Bla3RydW1cIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYtc3Bla3RydW1cIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NC1rb2RldCBzdHJlbmdcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybC1rb2RldCBzdHJlbmdcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTi1zdHJlbmdcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NC1udW1tZXJcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcImlucHV0XCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIHN0cmluZzogXCJzdHJlbmdcIixcbiAgICAgICAgbnVtYmVyOiBcInRhbFwiLFxuICAgICAgICBib29sZWFuOiBcImJvb2xlYW5cIixcbiAgICAgICAgYXJyYXk6IFwibGlzdGVcIixcbiAgICAgICAgb2JqZWN0OiBcIm9iamVrdFwiLFxuICAgICAgICBzZXQ6IFwic1x1MDBFNnRcIixcbiAgICAgICAgZmlsZTogXCJmaWxcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlndCBpbnB1dDogZm9ydmVudGVkZSBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBmaWsgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVWd5bGRpZ3QgaW5wdXQ6IGZvcnZlbnRlZGUgJHtleHBlY3RlZH0sIGZpayAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBVZ3lsZGlnIHZcdTAwRTZyZGk6IGZvcnZlbnRlZGUgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlndCB2YWxnOiBmb3J2ZW50ZWRlIGVuIGFmIGZcdTAwRjhsZ2VuZGUgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLm9yaWdpbl0gPz8gaXNzdWUub3JpZ2luO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYEZvciBzdG9yOiBmb3J2ZW50ZWRlICR7b3JpZ2luID8/IFwidmFsdWVcIn0gJHtzaXppbmcudmVyYn0gJHthZGp9ICR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbWVudGVyXCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGb3Igc3RvcjogZm9ydmVudGVkZSAke29yaWdpbiA/PyBcInZhbHVlXCJ9IGhhdmRlICR7YWRqfSAke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gVHlwZURpY3Rpb25hcnlbaXNzdWUub3JpZ2luXSA/PyBpc3N1ZS5vcmlnaW47XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgRm9yIGxpbGxlOiBmb3J2ZW50ZWRlICR7b3JpZ2lufSAke3NpemluZy52ZXJifSAke2Fkan0gJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEZvciBsaWxsZTogZm9ydmVudGVkZSAke29yaWdpbn0gaGF2ZGUgJHthZGp9ICR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikgcmV0dXJuIGBVZ3lsZGlnIHN0cmVuZzogc2thbCBzdGFydGUgbWVkIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgVWd5bGRpZyBzdHJlbmc6IHNrYWwgZW5kZSBtZWQgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYFVneWxkaWcgc3RyZW5nOiBza2FsIGluZGVob2xkZSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBVZ3lsZGlnIHN0cmVuZzogc2thbCBtYXRjaGUgbVx1MDBGOG5zdGVyZXQgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWd0IHRhbDogc2thbCB2XHUwMEU2cmUgZGVsZWxpZ3QgbWVkICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiVWtlbmR0ZSBuXHUwMEY4Z2xlclwiIDogXCJVa2VuZHQgblx1MDBGOGdsZVwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIG5cdTAwRjhnbGUgaSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJVZ3lsZGlndCBpbnB1dDogbWF0Y2hlciBpbmdlbiBhZiBkZSB0aWxsYWR0ZSB0eXBlclwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVWd5bGRpZyB2XHUwMEU2cmRpIGkgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlndCBpbnB1dGA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiWmVpY2hlblwiLFxuICAgICAgICAgICAgdmVyYjogXCJ6dSBoYWJlblwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiQnl0ZXNcIixcbiAgICAgICAgICAgIHZlcmI6IFwienUgaGFiZW5cIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJFbGVtZW50ZVwiLFxuICAgICAgICAgICAgdmVyYjogXCJ6dSBoYWJlblwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJFbGVtZW50ZVwiLFxuICAgICAgICAgICAgdmVyYjogXCJ6dSBoYWJlblwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJFaW5nYWJlXCIsXG4gICAgICAgIGVtYWlsOiBcIkUtTWFpbC1BZHJlc3NlXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiRW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPLURhdHVtIHVuZCAtVWhyemVpdFwiLFxuICAgICAgICBkYXRlOiBcIklTTy1EYXR1bVwiLFxuICAgICAgICB0aW1lOiBcIklTTy1VaHJ6ZWl0XCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTy1EYXVlclwiLFxuICAgICAgICBpcHY0OiBcIklQdjQtQWRyZXNzZVwiLFxuICAgICAgICBpcHY2OiBcIklQdjYtQWRyZXNzZVwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NC1CZXJlaWNoXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2LUJlcmVpY2hcIixcbiAgICAgICAgYmFzZTY0OiBcIkJhc2U2NC1jb2RpZXJ0ZXIgU3RyaW5nXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJCYXNlNjQtVVJMLWNvZGllcnRlciBTdHJpbmdcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTi1TdHJpbmdcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NC1OdW1tZXJcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIkVpbmdhYmVcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIlphaGxcIixcbiAgICAgICAgYXJyYXk6IFwiQXJyYXlcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBVbmdcdTAwRkNsdGlnZSBFaW5nYWJlOiBlcndhcnRldCBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBlcmhhbHRlbiAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBVbmdcdTAwRkNsdGlnZSBFaW5nYWJlOiBlcndhcnRldCAke2V4cGVjdGVkfSwgZXJoYWx0ZW4gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgVW5nXHUwMEZDbHRpZ2UgRWluZ2FiZTogZXJ3YXJ0ZXQgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVbmdcdTAwRkNsdGlnZSBPcHRpb246IGVyd2FydGV0IGVpbmUgdm9uICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYFp1IGdyb1x1MDBERjogZXJ3YXJ0ZXQsIGRhc3MgJHtpc3N1ZS5vcmlnaW4gPz8gXCJXZXJ0XCJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiRWxlbWVudGVcIn0gaGF0YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBadSBncm9cdTAwREY6IGVyd2FydGV0LCBkYXNzICR7aXNzdWUub3JpZ2luID8/IFwiV2VydFwifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gaXN0YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgWnUga2xlaW46IGVyd2FydGV0LCBkYXNzICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH0gaGF0YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFp1IGtsZWluOiBlcndhcnRldCwgZGFzcyAke2lzc3VlLm9yaWdpbn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9IGlzdGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikgcmV0dXJuIGBVbmdcdTAwRkNsdGlnZXIgU3RyaW5nOiBtdXNzIG1pdCBcIiR7X2lzc3VlLnByZWZpeH1cIiBiZWdpbm5lbmA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSByZXR1cm4gYFVuZ1x1MDBGQ2x0aWdlciBTdHJpbmc6IG11c3MgbWl0IFwiJHtfaXNzdWUuc3VmZml4fVwiIGVuZGVuYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBVbmdcdTAwRkNsdGlnZXIgU3RyaW5nOiBtdXNzIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCIgZW50aGFsdGVuYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBVbmdcdTAwRkNsdGlnZXIgU3RyaW5nOiBtdXNzIGRlbSBNdXN0ZXIgJHtfaXNzdWUucGF0dGVybn0gZW50c3ByZWNoZW5gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVuZ1x1MDBGQ2x0aWc6ICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVbmdcdTAwRkNsdGlnZSBaYWhsOiBtdXNzIGVpbiBWaWVsZmFjaGVzIHZvbiAke2lzc3VlLmRpdmlzb3J9IHNlaW5gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiVW5iZWthbm50ZSBTY2hsXHUwMEZDc3NlbFwiIDogXCJVbmJla2FubnRlciBTY2hsXHUwMEZDc3NlbFwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVbmdcdTAwRkNsdGlnZXIgU2NobFx1MDBGQ3NzZWwgaW4gJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiVW5nXHUwMEZDbHRpZ2UgRWluZ2FiZVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVW5nXHUwMEZDbHRpZ2VyIFdlcnQgaW4gJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVbmdcdTAwRkNsdGlnZSBFaW5nYWJlYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJjaGFyYWN0ZXJzXCIsXG4gICAgICAgICAgICB2ZXJiOiBcInRvIGhhdmVcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJ5dGVzXCIsXG4gICAgICAgICAgICB2ZXJiOiBcInRvIGhhdmVcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJpdGVtc1wiLFxuICAgICAgICAgICAgdmVyYjogXCJ0byBoYXZlXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcIml0ZW1zXCIsXG4gICAgICAgICAgICB2ZXJiOiBcInRvIGhhdmVcIlxuICAgICAgICB9LFxuICAgICAgICBtYXA6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiZW50cmllc1wiLFxuICAgICAgICAgICAgdmVyYjogXCJ0byBoYXZlXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImlucHV0XCIsXG4gICAgICAgIGVtYWlsOiBcImVtYWlsIGFkZHJlc3NcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gZGF0ZXRpbWVcIixcbiAgICAgICAgZGF0ZTogXCJJU08gZGF0ZVwiLFxuICAgICAgICB0aW1lOiBcIklTTyB0aW1lXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTyBkdXJhdGlvblwiLFxuICAgICAgICBpcHY0OiBcIklQdjQgYWRkcmVzc1wiLFxuICAgICAgICBpcHY2OiBcIklQdjYgYWRkcmVzc1wiLFxuICAgICAgICBtYWM6IFwiTUFDIGFkZHJlc3NcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgcmFuZ2VcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYgcmFuZ2VcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NC1lbmNvZGVkIHN0cmluZ1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsLWVuY29kZWQgc3RyaW5nXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04gc3RyaW5nXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQgbnVtYmVyXCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJpbnB1dFwiXG4gICAgfTtcbiAgICAvLyB0eXBlIG5hbWVzOiBtaXNzaW5nIGtleXMgPSBkbyBub3QgdHJhbnNsYXRlICh1c2UgcmF3IHZhbHVlIHZpYSA/PyBmYWxsYmFjaylcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgLy8gQ29tcGF0aWJpbGl0eTogXCJuYW5cIiAtPiBcIk5hTlwiIGZvciBkaXNwbGF5XG4gICAgICAgIG5hbjogXCJOYU5cIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHtleHBlY3RlZH0sIHJlY2VpdmVkICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYEludmFsaWQgaW5wdXQ6IGV4cGVjdGVkICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBvcHRpb246IGV4cGVjdGVkIG9uZSBvZiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBUb28gYmlnOiBleHBlY3RlZCAke2lzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCJ9IHRvIGhhdmUgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW50c1wifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVG9vIGJpZzogZXhwZWN0ZWQgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2YWx1ZVwifSB0byBiZSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUb28gc21hbGw6IGV4cGVjdGVkICR7aXNzdWUub3JpZ2lufSB0byBoYXZlICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUb28gc21hbGw6IGV4cGVjdGVkICR7aXNzdWUub3JpZ2lufSB0byBiZSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBzdHJpbmc6IG11c3Qgc3RhcnQgd2l0aCBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgSW52YWxpZCBzdHJpbmc6IG11c3QgZW5kIHdpdGggXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYEludmFsaWQgc3RyaW5nOiBtdXN0IGluY2x1ZGUgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgSW52YWxpZCBzdHJpbmc6IG11c3QgbWF0Y2ggcGF0dGVybiAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBudW1iZXI6IG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVW5yZWNvZ25pemVkIGtleSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBJbnZhbGlkIGtleSBpbiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJJbnZhbGlkIGlucHV0XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBJbnZhbGlkIHZhbHVlIGluICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBpbnB1dGA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwia2FyYWt0cm9qblwiLFxuICAgICAgICAgICAgdmVyYjogXCJoYXZpXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJiYWp0b2puXCIsXG4gICAgICAgICAgICB2ZXJiOiBcImhhdmlcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW50b2puXCIsXG4gICAgICAgICAgICB2ZXJiOiBcImhhdmlcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiZWxlbWVudG9qblwiLFxuICAgICAgICAgICAgdmVyYjogXCJoYXZpXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImVuaWdvXCIsXG4gICAgICAgIGVtYWlsOiBcInJldGFkcmVzb1wiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb1x1MDExRGlvXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTy1kYXRvdGVtcG9cIixcbiAgICAgICAgZGF0ZTogXCJJU08tZGF0b1wiLFxuICAgICAgICB0aW1lOiBcIklTTy10ZW1wb1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08tZGFcdTAxNkRyb1wiLFxuICAgICAgICBpcHY0OiBcIklQdjQtYWRyZXNvXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2Ni1hZHJlc29cIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQtcmFuZ29cIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYtcmFuZ29cIixcbiAgICAgICAgYmFzZTY0OiBcIjY0LXVtZSBrb2RpdGEga2FyYWt0cmFyb1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiVVJMLTY0LXVtZSBrb2RpdGEga2FyYWt0cmFyb1wiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OLWthcmFrdHJhcm9cIixcbiAgICAgICAgZTE2NDogXCJFLjE2NC1ub21icm9cIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcImVuaWdvXCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJub21icm9cIixcbiAgICAgICAgYXJyYXk6IFwidGFiZWxvXCIsXG4gICAgICAgIG51bGw6IFwic2VudmFsb3JhXCJcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpPT57XG4gICAgICAgIHN3aXRjaChpc3N1ZS5jb2RlKXtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmV2YWxpZGEgZW5pZ286IGF0ZW5kaVx1MDExRGlzIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIHJpY2V2aVx1MDExRGlzICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmFsaWRhIGVuaWdvOiBhdGVuZGlcdTAxMURpcyAke2V4cGVjdGVkfSwgcmljZXZpXHUwMTFEaXMgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgTmV2YWxpZGEgZW5pZ286IGF0ZW5kaVx1MDExRGlzICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgTmV2YWxpZGEgb3BjaW86IGF0ZW5kaVx1MDExRGlzIHVudSBlbCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBUcm8gZ3JhbmRhOiBhdGVuZGlcdTAxMURpcyBrZSAke2lzc3VlLm9yaWdpbiA/PyBcInZhbG9yb1wifSBoYXZ1ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbWVudG9qblwifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVHJvIGdyYW5kYTogYXRlbmRpXHUwMTFEaXMga2UgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2YWxvcm9cIn0gaGF2dSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUcm8gbWFsZ3JhbmRhOiBhdGVuZGlcdTAxMURpcyBrZSAke2lzc3VlLm9yaWdpbn0gaGF2dSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVHJvIG1hbGdyYW5kYTogYXRlbmRpXHUwMTFEaXMga2UgJHtpc3N1ZS5vcmlnaW59IGVzdHUgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSByZXR1cm4gYE5ldmFsaWRhIGthcmFrdHJhcm86IGRldmFzIGtvbWVuY2lcdTAxMURpIHBlciBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSByZXR1cm4gYE5ldmFsaWRhIGthcmFrdHJhcm86IGRldmFzIGZpbmlcdTAxMURpIHBlciBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgTmV2YWxpZGEga2FyYWt0cmFybzogZGV2YXMgaW5rbHV6aXZpIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSByZXR1cm4gYE5ldmFsaWRhIGthcmFrdHJhcm86IGRldmFzIGtvbmdydWkga3VuIGxhIG1vZGVsbyAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmV2YWxpZGEgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmFsaWRhIG5vbWJybzogZGV2YXMgZXN0aSBvYmxvIGRlICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZWtvbmF0YSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJqXCIgOiBcIlwifSBcdTAxNURsb3NpbG8ke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwialwiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmV2YWxpZGEgXHUwMTVEbG9zaWxvIGVuICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIk5ldmFsaWRhIGVuaWdvXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZhbGlkYSB2YWxvcm8gZW4gJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZhbGlkYSBlbmlnb2A7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiY2FyYWN0ZXJlc1wiLFxuICAgICAgICAgICAgdmVyYjogXCJ0ZW5lclwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiYnl0ZXNcIixcbiAgICAgICAgICAgIHZlcmI6IFwidGVuZXJcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW50b3NcIixcbiAgICAgICAgICAgIHZlcmI6IFwidGVuZXJcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiZWxlbWVudG9zXCIsXG4gICAgICAgICAgICB2ZXJiOiBcInRlbmVyXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImVudHJhZGFcIixcbiAgICAgICAgZW1haWw6IFwiZGlyZWNjaVx1MDBGM24gZGUgY29ycmVvIGVsZWN0clx1MDBGM25pY29cIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJmZWNoYSB5IGhvcmEgSVNPXCIsXG4gICAgICAgIGRhdGU6IFwiZmVjaGEgSVNPXCIsXG4gICAgICAgIHRpbWU6IFwiaG9yYSBJU09cIixcbiAgICAgICAgZHVyYXRpb246IFwiZHVyYWNpXHUwMEYzbiBJU09cIixcbiAgICAgICAgaXB2NDogXCJkaXJlY2NpXHUwMEYzbiBJUHY0XCIsXG4gICAgICAgIGlwdjY6IFwiZGlyZWNjaVx1MDBGM24gSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwicmFuZ28gSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwicmFuZ28gSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwiY2FkZW5hIGNvZGlmaWNhZGEgZW4gYmFzZTY0XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJVUkwgY29kaWZpY2FkYSBlbiBiYXNlNjRcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiY2FkZW5hIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJuXHUwMEZBbWVybyBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiZW50cmFkYVwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBzdHJpbmc6IFwidGV4dG9cIixcbiAgICAgICAgbnVtYmVyOiBcIm5cdTAwRkFtZXJvXCIsXG4gICAgICAgIGJvb2xlYW46IFwiYm9vbGVhbm9cIixcbiAgICAgICAgYXJyYXk6IFwiYXJyZWdsb1wiLFxuICAgICAgICBvYmplY3Q6IFwib2JqZXRvXCIsXG4gICAgICAgIHNldDogXCJjb25qdW50b1wiLFxuICAgICAgICBmaWxlOiBcImFyY2hpdm9cIixcbiAgICAgICAgZGF0ZTogXCJmZWNoYVwiLFxuICAgICAgICBiaWdpbnQ6IFwiblx1MDBGQW1lcm8gZ3JhbmRlXCIsXG4gICAgICAgIHN5bWJvbDogXCJzXHUwMEVEbWJvbG9cIixcbiAgICAgICAgdW5kZWZpbmVkOiBcImluZGVmaW5pZG9cIixcbiAgICAgICAgbnVsbDogXCJudWxvXCIsXG4gICAgICAgIGZ1bmN0aW9uOiBcImZ1bmNpXHUwMEYzblwiLFxuICAgICAgICBtYXA6IFwibWFwYVwiLFxuICAgICAgICByZWNvcmQ6IFwicmVnaXN0cm9cIixcbiAgICAgICAgdHVwbGU6IFwidHVwbGFcIixcbiAgICAgICAgZW51bTogXCJlbnVtZXJhY2lcdTAwRjNuXCIsXG4gICAgICAgIHVuaW9uOiBcInVuaVx1MDBGM25cIixcbiAgICAgICAgbGl0ZXJhbDogXCJsaXRlcmFsXCIsXG4gICAgICAgIHByb21pc2U6IFwicHJvbWVzYVwiLFxuICAgICAgICB2b2lkOiBcInZhY1x1MDBFRG9cIixcbiAgICAgICAgbmV2ZXI6IFwibnVuY2FcIixcbiAgICAgICAgdW5rbm93bjogXCJkZXNjb25vY2lkb1wiLFxuICAgICAgICBhbnk6IFwiY3VhbHF1aWVyYVwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVudHJhZGEgaW52XHUwMEUxbGlkYTogc2UgZXNwZXJhYmEgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgcmVjaWJpZG8gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRW50cmFkYSBpbnZcdTAwRTFsaWRhOiBzZSBlc3BlcmFiYSAke2V4cGVjdGVkfSwgcmVjaWJpZG8gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgRW50cmFkYSBpbnZcdTAwRTFsaWRhOiBzZSBlc3BlcmFiYSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9wY2lcdTAwRjNuIGludlx1MDBFMWxpZGE6IHNlIGVzcGVyYWJhIHVuYSBkZSAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gVHlwZURpY3Rpb25hcnlbaXNzdWUub3JpZ2luXSA/PyBpc3N1ZS5vcmlnaW47XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHJldHVybiBgRGVtYXNpYWRvIGdyYW5kZTogc2UgZXNwZXJhYmEgcXVlICR7b3JpZ2luID8/IFwidmFsb3JcIn0gdHV2aWVyYSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRvc1wifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRGVtYXNpYWRvIGdyYW5kZTogc2UgZXNwZXJhYmEgcXVlICR7b3JpZ2luID8/IFwidmFsb3JcIn0gZnVlcmEgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLm9yaWdpbl0gPz8gaXNzdWUub3JpZ2luO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYERlbWFzaWFkbyBwZXF1ZVx1MDBGMW86IHNlIGVzcGVyYWJhIHF1ZSAke29yaWdpbn0gdHV2aWVyYSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRGVtYXNpYWRvIHBlcXVlXHUwMEYxbzogc2UgZXNwZXJhYmEgcXVlICR7b3JpZ2lufSBmdWVyYSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgQ2FkZW5hIGludlx1MDBFMWxpZGE6IGRlYmUgY29tZW56YXIgY29uIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgQ2FkZW5hIGludlx1MDBFMWxpZGE6IGRlYmUgdGVybWluYXIgZW4gXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYENhZGVuYSBpbnZcdTAwRTFsaWRhOiBkZWJlIGluY2x1aXIgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgQ2FkZW5hIGludlx1MDBFMWxpZGE6IGRlYmUgY29pbmNpZGlyIGNvbiBlbCBwYXRyXHUwMEYzbiAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSW52XHUwMEUxbGlkbyAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTlx1MDBGQW1lcm8gaW52XHUwMEUxbGlkbzogZGViZSBzZXIgbVx1MDBGQWx0aXBsbyBkZSAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTGxhdmUke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn0gZGVzY29ub2NpZGEke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTGxhdmUgaW52XHUwMEUxbGlkYSBlbiAke1R5cGVEaWN0aW9uYXJ5W2lzc3VlLm9yaWdpbl0gPz8gaXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIkVudHJhZGEgaW52XHUwMEUxbGlkYVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVmFsb3IgaW52XHUwMEUxbGlkbyBlbiAke1R5cGVEaWN0aW9uYXJ5W2lzc3VlLm9yaWdpbl0gPz8gaXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgRW50cmFkYSBpbnZcdTAwRTFsaWRhYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJcdTA2QTlcdTA2MjdcdTA2MzFcdTA2MjdcdTA2QTlcdTA2MkFcdTA2MzFcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNjJGXHUwNjI3XHUwNjM0XHUwNjJBXHUwNjQ3IFx1MDYyOFx1MDYyN1x1MDYzNFx1MDYyRlwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwNjI4XHUwNjI3XHUwNkNDXHUwNjJBXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MDYyRlx1MDYyN1x1MDYzNFx1MDYyQVx1MDY0NyBcdTA2MjhcdTA2MjdcdTA2MzRcdTA2MkZcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJcdTA2MjJcdTA2Q0NcdTA2MkFcdTA2NDVcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNjJGXHUwNjI3XHUwNjM0XHUwNjJBXHUwNjQ3IFx1MDYyOFx1MDYyN1x1MDYzNFx1MDYyRlwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJcdTA2MjJcdTA2Q0NcdTA2MkFcdTA2NDVcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNjJGXHUwNjI3XHUwNjM0XHUwNjJBXHUwNjQ3IFx1MDYyOFx1MDYyN1x1MDYzNFx1MDYyRlwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJcdTA2NDhcdTA2MzFcdTA2NDhcdTA2MkZcdTA2Q0NcIixcbiAgICAgICAgZW1haWw6IFwiXHUwNjIyXHUwNjJGXHUwNjMxXHUwNjMzIFx1MDYyN1x1MDZDQ1x1MDY0NVx1MDZDQ1x1MDY0NFwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcIlx1MDYyN1x1MDZDQ1x1MDY0NVx1MDY0OFx1MDYyQ1x1MDZDQ1wiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJcdTA2MkFcdTA2MjdcdTA2MzFcdTA2Q0NcdTA2MkUgXHUwNjQ4IFx1MDYzMlx1MDY0NVx1MDYyN1x1MDY0NiBcdTA2MjdcdTA2Q0NcdTA2MzJcdTA2NDhcIixcbiAgICAgICAgZGF0ZTogXCJcdTA2MkFcdTA2MjdcdTA2MzFcdTA2Q0NcdTA2MkUgXHUwNjI3XHUwNkNDXHUwNjMyXHUwNjQ4XCIsXG4gICAgICAgIHRpbWU6IFwiXHUwNjMyXHUwNjQ1XHUwNjI3XHUwNjQ2IFx1MDYyN1x1MDZDQ1x1MDYzMlx1MDY0OFwiLFxuICAgICAgICBkdXJhdGlvbjogXCJcdTA2NDVcdTA2MkZcdTA2MkEgXHUwNjMyXHUwNjQ1XHUwNjI3XHUwNjQ2IFx1MDYyN1x1MDZDQ1x1MDYzMlx1MDY0OFwiLFxuICAgICAgICBpcHY0OiBcIklQdjQgXHUwNjIyXHUwNjJGXHUwNjMxXHUwNjMzXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiBcdTA2MjJcdTA2MkZcdTA2MzFcdTA2MzNcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgXHUwNjJGXHUwNjI3XHUwNjQ1XHUwNjQ2XHUwNjQ3XCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2IFx1MDYyRlx1MDYyN1x1MDY0NVx1MDY0Nlx1MDY0N1wiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0LWVuY29kZWQgXHUwNjMxXHUwNjM0XHUwNjJBXHUwNjQ3XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwtZW5jb2RlZCBcdTA2MzFcdTA2MzRcdTA2MkFcdTA2NDdcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiBcdTA2MzFcdTA2MzRcdTA2MkFcdTA2NDdcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NCBcdTA2MzlcdTA2MkZcdTA2MkZcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIlx1MDY0OFx1MDYzMVx1MDY0OFx1MDYyRlx1MDZDQ1wiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwiXHUwNjM5XHUwNjJGXHUwNjJGXCIsXG4gICAgICAgIGFycmF5OiBcIlx1MDYyMlx1MDYzMVx1MDYyN1x1MDZDQ1x1MDY0N1wiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0OFx1MDYzMVx1MDY0OFx1MDYyRlx1MDZDQyBcdTA2NDZcdTA2MjdcdTA2NDVcdTA2MzlcdTA2MkFcdTA2MjhcdTA2MzE6IFx1MDY0NVx1MDZDQ1x1MjAwQ1x1MDYyOFx1MDYyN1x1MDZDQ1x1MDYzM1x1MDYyQSBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9IFx1MDY0NVx1MDZDQ1x1MjAwQ1x1MDYyOFx1MDY0OFx1MDYyRlx1MDYwQyAke3JlY2VpdmVkfSBcdTA2MkZcdTA2MzFcdTA2Q0NcdTA2MjdcdTA2NDFcdTA2MkEgXHUwNjM0XHUwNjJGYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0OFx1MDYzMVx1MDY0OFx1MDYyRlx1MDZDQyBcdTA2NDZcdTA2MjdcdTA2NDVcdTA2MzlcdTA2MkFcdTA2MjhcdTA2MzE6IFx1MDY0NVx1MDZDQ1x1MjAwQ1x1MDYyOFx1MDYyN1x1MDZDQ1x1MDYzM1x1MDYyQSAke2V4cGVjdGVkfSBcdTA2NDVcdTA2Q0NcdTIwMENcdTA2MjhcdTA2NDhcdTA2MkZcdTA2MEMgJHtyZWNlaXZlZH0gXHUwNjJGXHUwNjMxXHUwNkNDXHUwNjI3XHUwNjQxXHUwNjJBIFx1MDYzNFx1MDYyRmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0OFx1MDYzMVx1MDY0OFx1MDYyRlx1MDZDQyBcdTA2NDZcdTA2MjdcdTA2NDVcdTA2MzlcdTA2MkFcdTA2MjhcdTA2MzE6IFx1MDY0NVx1MDZDQ1x1MjAwQ1x1MDYyOFx1MDYyN1x1MDZDQ1x1MDYzM1x1MDYyQSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9IFx1MDY0NVx1MDZDQ1x1MjAwQ1x1MDYyOFx1MDY0OFx1MDYyRmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNkFGXHUwNjMyXHUwNkNDXHUwNjQ2XHUwNjQ3IFx1MDY0Nlx1MDYyN1x1MDY0NVx1MDYzOVx1MDYyQVx1MDYyOFx1MDYzMTogXHUwNjQ1XHUwNkNDXHUyMDBDXHUwNjI4XHUwNjI3XHUwNkNDXHUwNjMzXHUwNjJBIFx1MDZDQ1x1MDZBOVx1MDZDQyBcdTA2MjdcdTA2MzIgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9IFx1MDY0NVx1MDZDQ1x1MjAwQ1x1MDYyOFx1MDY0OFx1MDYyRmA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDYyRVx1MDZDQ1x1MDY0NFx1MDZDQyBcdTA2MjhcdTA2MzJcdTA2MzFcdTA2QUY6ICR7aXNzdWUub3JpZ2luID8/IFwiXHUwNjQ1XHUwNjQyXHUwNjJGXHUwNjI3XHUwNjMxXCJ9IFx1MDYyOFx1MDYyN1x1MDZDQ1x1MDYyRiAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcIlx1MDYzOVx1MDY0Nlx1MDYzNVx1MDYzMVwifSBcdTA2MjhcdTA2MjdcdTA2MzRcdTA2MkZgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjJFXHUwNkNDXHUwNjQ0XHUwNkNDIFx1MDYyOFx1MDYzMlx1MDYzMVx1MDZBRjogJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdTA2NDVcdTA2NDJcdTA2MkZcdTA2MjdcdTA2MzFcIn0gXHUwNjI4XHUwNjI3XHUwNkNDXHUwNjJGICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSBcdTA2MjhcdTA2MjdcdTA2MzRcdTA2MkZgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2MkVcdTA2Q0NcdTA2NDRcdTA2Q0MgXHUwNkE5XHUwNjQ4XHUwNjg2XHUwNkE5OiAke2lzc3VlLm9yaWdpbn0gXHUwNjI4XHUwNjI3XHUwNkNDXHUwNjJGICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fSBcdTA2MjhcdTA2MjdcdTA2MzRcdTA2MkZgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjJFXHUwNkNDXHUwNjQ0XHUwNkNDIFx1MDZBOVx1MDY0OFx1MDY4Nlx1MDZBOTogJHtpc3N1ZS5vcmlnaW59IFx1MDYyOFx1MDYyN1x1MDZDQ1x1MDYyRiAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gXHUwNjI4XHUwNjI3XHUwNjM0XHUwNjJGYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDYzMVx1MDYzNFx1MDYyQVx1MDY0NyBcdTA2NDZcdTA2MjdcdTA2NDVcdTA2MzlcdTA2MkFcdTA2MjhcdTA2MzE6IFx1MDYyOFx1MDYyN1x1MDZDQ1x1MDYyRiBcdTA2MjhcdTA2MjcgXCIke19pc3N1ZS5wcmVmaXh9XCIgXHUwNjM0XHUwNjMxXHUwNjQ4XHUwNjM5IFx1MDYzNFx1MDY0OFx1MDYyRmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjMxXHUwNjM0XHUwNjJBXHUwNjQ3IFx1MDY0Nlx1MDYyN1x1MDY0NVx1MDYzOVx1MDYyQVx1MDYyOFx1MDYzMTogXHUwNjI4XHUwNjI3XHUwNkNDXHUwNjJGIFx1MDYyOFx1MDYyNyBcIiR7X2lzc3VlLnN1ZmZpeH1cIiBcdTA2MkFcdTA2NDVcdTA2MjdcdTA2NDUgXHUwNjM0XHUwNjQ4XHUwNjJGYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDYzMVx1MDYzNFx1MDYyQVx1MDY0NyBcdTA2NDZcdTA2MjdcdTA2NDVcdTA2MzlcdTA2MkFcdTA2MjhcdTA2MzE6IFx1MDYyOFx1MDYyN1x1MDZDQ1x1MDYyRiBcdTA2MzRcdTA2MjdcdTA2NDVcdTA2NDQgXCIke19pc3N1ZS5pbmNsdWRlc31cIiBcdTA2MjhcdTA2MjdcdTA2MzRcdTA2MkZgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjMxXHUwNjM0XHUwNjJBXHUwNjQ3IFx1MDY0Nlx1MDYyN1x1MDY0NVx1MDYzOVx1MDYyQVx1MDYyOFx1MDYzMTogXHUwNjI4XHUwNjI3XHUwNkNDXHUwNjJGIFx1MDYyOFx1MDYyNyBcdTA2MjdcdTA2NDRcdTA2QUZcdTA2NDhcdTA2Q0MgJHtfaXNzdWUucGF0dGVybn0gXHUwNjQ1XHUwNjM3XHUwNjI3XHUwNjI4XHUwNjQyXHUwNjJBIFx1MDYyRlx1MDYyN1x1MDYzNFx1MDYyQVx1MDY0NyBcdTA2MjhcdTA2MjdcdTA2MzRcdTA2MkZgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH0gXHUwNjQ2XHUwNjI3XHUwNjQ1XHUwNjM5XHUwNjJBXHUwNjI4XHUwNjMxYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2MzlcdTA2MkZcdTA2MkYgXHUwNjQ2XHUwNjI3XHUwNjQ1XHUwNjM5XHUwNjJBXHUwNjI4XHUwNjMxOiBcdTA2MjhcdTA2MjdcdTA2Q0NcdTA2MkYgXHUwNjQ1XHUwNjM2XHUwNjMxXHUwNjI4ICR7aXNzdWUuZGl2aXNvcn0gXHUwNjI4XHUwNjI3XHUwNjM0XHUwNjJGYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNkE5XHUwNjQ0XHUwNkNDXHUwNjJGJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlx1MDY0N1x1MDYyN1x1MDZDQ1wiIDogXCJcIn0gXHUwNjQ2XHUwNjI3XHUwNjM0XHUwNjQ2XHUwNjI3XHUwNjMzOiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDZBOVx1MDY0NFx1MDZDQ1x1MDYyRiBcdTA2NDZcdTA2MjdcdTA2MzRcdTA2NDZcdTA2MjdcdTA2MzMgXHUwNjJGXHUwNjMxICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjQ4XHUwNjMxXHUwNjQ4XHUwNjJGXHUwNkNDIFx1MDY0Nlx1MDYyN1x1MDY0NVx1MDYzOVx1MDYyQVx1MDYyOFx1MDYzMWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2NDVcdTA2NDJcdTA2MkZcdTA2MjdcdTA2MzEgXHUwNjQ2XHUwNjI3XHUwNjQ1XHUwNjM5XHUwNjJBXHUwNjI4XHUwNjMxIFx1MDYyRlx1MDYzMSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0OFx1MDYzMVx1MDY0OFx1MDYyRlx1MDZDQyBcdTA2NDZcdTA2MjdcdTA2NDVcdTA2MzlcdTA2MkFcdTA2MjhcdTA2MzFgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpPT57XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiBcIm1lcmtraVx1MDBFNFwiLFxuICAgICAgICAgICAgc3ViamVjdDogXCJtZXJra2lqb25vblwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwidGF2dWFcIixcbiAgICAgICAgICAgIHN1YmplY3Q6IFwidGllZG9zdG9uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiYWxraW90YVwiLFxuICAgICAgICAgICAgc3ViamVjdDogXCJsaXN0YW5cIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiYWxraW90YVwiLFxuICAgICAgICAgICAgc3ViamVjdDogXCJqb3Vrb25cIlxuICAgICAgICB9LFxuICAgICAgICBudW1iZXI6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXCIsXG4gICAgICAgICAgICBzdWJqZWN0OiBcImx1dnVuXCJcbiAgICAgICAgfSxcbiAgICAgICAgYmlnaW50OiB7XG4gICAgICAgICAgICB1bml0OiBcIlwiLFxuICAgICAgICAgICAgc3ViamVjdDogXCJzdXVyZW4ga29rb25haXNsdXZ1blwiXG4gICAgICAgIH0sXG4gICAgICAgIGludDoge1xuICAgICAgICAgICAgdW5pdDogXCJcIixcbiAgICAgICAgICAgIHN1YmplY3Q6IFwia29rb25haXNsdXZ1blwiXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXCIsXG4gICAgICAgICAgICBzdWJqZWN0OiBcInBcdTAwRTRpdlx1MDBFNG1cdTAwRTRcdTAwRTRyXHUwMEU0blwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJzXHUwMEU0XHUwMEU0bm5cdTAwRjZsbGluZW4gbGF1c2VrZVwiLFxuICAgICAgICBlbWFpbDogXCJzXHUwMEU0aGtcdTAwRjZwb3N0aW9zb2l0ZVwiLFxuICAgICAgICB1cmw6IFwiVVJMLW9zb2l0ZVwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08tYWlrYWxlaW1hXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPLXBcdTAwRTRpdlx1MDBFNG1cdTAwRTRcdTAwRTRyXHUwMEU0XCIsXG4gICAgICAgIHRpbWU6IFwiSVNPLWFpa2FcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPLWtlc3RvXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NC1vc29pdGVcIixcbiAgICAgICAgaXB2NjogXCJJUHY2LW9zb2l0ZVwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NC1hbHVlXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2LWFsdWVcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NC1rb29kYXR0dSBtZXJra2lqb25vXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwta29vZGF0dHUgbWVya2tpam9ub1wiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OLW1lcmtraWpvbm9cIixcbiAgICAgICAgZTE2NDogXCJFLjE2NC1sdWt1XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJ0ZW1wbGFhdHRpbWVya2tpam9ub1wiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFZpcmhlZWxsaW5lbiB0eXlwcGk6IG9kb3RldHRpaW4gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgb2xpICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFZpcmhlZWxsaW5lbiB0eXlwcGk6IG9kb3RldHRpaW4gJHtleHBlY3RlZH0sIG9saSAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBWaXJoZWVsbGluZW4gc3lcdTAwRjZ0ZTogdFx1MDBFNHl0eXkgb2xsYSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFZpcmhlZWxsaW5lbiB2YWxpbnRhOiB0XHUwMEU0eXR5eSBvbGxhIHlrc2kgc2V1cmFhdmlzdGE6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYExpaWFuIHN1dXJpOiAke3NpemluZy5zdWJqZWN0fSB0XHUwMEU0eXR5eSBvbGxhICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWAudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTGlpYW4gc3V1cmk6IGFydm9uIHRcdTAwRTR5dHl5IG9sbGEgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgTGlpYW4gcGllbmk6ICR7c2l6aW5nLnN1YmplY3R9IHRcdTAwRTR5dHl5IG9sbGEgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YC50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBMaWlhbiBwaWVuaTogYXJ2b24gdFx1MDBFNHl0eXkgb2xsYSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgVmlyaGVlbGxpbmVuIHN5XHUwMEY2dGU6IHRcdTAwRTR5dHl5IGFsa2FhIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgVmlyaGVlbGxpbmVuIHN5XHUwMEY2dGU6IHRcdTAwRTR5dHl5IGxvcHB1YSBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgVmlyaGVlbGxpbmVuIHN5XHUwMEY2dGU6IHRcdTAwRTR5dHl5IHNpc1x1MDBFNGx0XHUwMEU0XHUwMEU0IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFZpcmhlZWxsaW5lbiBzeVx1MDBGNnRlOiB0XHUwMEU0eXR5eSB2YXN0YXRhIHNcdTAwRTRcdTAwRTRublx1MDBGNmxsaXN0XHUwMEU0IGxhdXNla2V0dGEgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVmlyaGVlbGxpbmVuICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBWaXJoZWVsbGluZW4gbHVrdTogdFx1MDBFNHl0eXkgb2xsYSBsdXZ1biAke2lzc3VlLmRpdmlzb3J9IG1vbmlrZXJ0YWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJUdW50ZW1hdHRvbWF0IGF2YWltZXRcIiA6IFwiVHVudGVtYXRvbiBhdmFpblwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiVmlyaGVlbGxpbmVuIGF2YWluIHRpZXR1ZWVzc2FcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiVmlyaGVlbGxpbmVuIHVuaW9uaVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlZpcmhlZWxsaW5lbiBhcnZvIGpvdWtvc3NhXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgVmlyaGVlbGxpbmVuIHN5XHUwMEY2dGVgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpPT57XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiBcImNhcmFjdFx1MDBFOHJlc1wiLFxuICAgICAgICAgICAgdmVyYjogXCJhdm9pclwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwib2N0ZXRzXCIsXG4gICAgICAgICAgICB2ZXJiOiBcImF2b2lyXCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwMEU5bFx1MDBFOW1lbnRzXCIsXG4gICAgICAgICAgICB2ZXJiOiBcImF2b2lyXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDBFOWxcdTAwRTltZW50c1wiLFxuICAgICAgICAgICAgdmVyYjogXCJhdm9pclwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJlbnRyXHUwMEU5ZVwiLFxuICAgICAgICBlbWFpbDogXCJhZHJlc3NlIGUtbWFpbFwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcImRhdGUgZXQgaGV1cmUgSVNPXCIsXG4gICAgICAgIGRhdGU6IFwiZGF0ZSBJU09cIixcbiAgICAgICAgdGltZTogXCJoZXVyZSBJU09cIixcbiAgICAgICAgZHVyYXRpb246IFwiZHVyXHUwMEU5ZSBJU09cIixcbiAgICAgICAgaXB2NDogXCJhZHJlc3NlIElQdjRcIixcbiAgICAgICAgaXB2NjogXCJhZHJlc3NlIElQdjZcIixcbiAgICAgICAgY2lkcnY0OiBcInBsYWdlIElQdjRcIixcbiAgICAgICAgY2lkcnY2OiBcInBsYWdlIElQdjZcIixcbiAgICAgICAgYmFzZTY0OiBcImNoYVx1MDBFRW5lIGVuY29kXHUwMEU5ZSBlbiBiYXNlNjRcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImNoYVx1MDBFRW5lIGVuY29kXHUwMEU5ZSBlbiBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiY2hhXHUwMEVFbmUgSlNPTlwiLFxuICAgICAgICBlMTY0OiBcIm51bVx1MDBFOXJvIEUuMTY0XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJlbnRyXHUwMEU5ZVwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwibm9tYnJlXCIsXG4gICAgICAgIGFycmF5OiBcInRhYmxlYXVcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFbnRyXHUwMEU5ZSBpbnZhbGlkZSA6IGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0gYXR0ZW5kdSwgJHtyZWNlaXZlZH0gcmVcdTAwRTd1YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVudHJcdTAwRTllIGludmFsaWRlIDogJHtleHBlY3RlZH0gYXR0ZW5kdSwgJHtyZWNlaXZlZH0gcmVcdTAwRTd1YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYEVudHJcdTAwRTllIGludmFsaWRlIDogJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfSBhdHRlbmR1YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9wdGlvbiBpbnZhbGlkZSA6IHVuZSB2YWxldXIgcGFybWkgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9IGF0dGVuZHVlYDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHJldHVybiBgVHJvcCBncmFuZCA6ICR7aXNzdWUub3JpZ2luID8/IFwidmFsZXVyXCJ9IGRvaXQgJHtzaXppbmcudmVyYn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJcdTAwRTlsXHUwMEU5bWVudChzKVwifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVHJvcCBncmFuZCA6ICR7aXNzdWUub3JpZ2luID8/IFwidmFsZXVyXCJ9IGRvaXQgXHUwMEVBdHJlICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRyb3AgcGV0aXQgOiAke2lzc3VlLm9yaWdpbn0gZG9pdCAke3NpemluZy52ZXJifSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVHJvcCBwZXRpdCA6ICR7aXNzdWUub3JpZ2lufSBkb2l0IFx1MDBFQXRyZSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgQ2hhXHUwMEVFbmUgaW52YWxpZGUgOiBkb2l0IGNvbW1lbmNlciBwYXIgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBDaGFcdTAwRUVuZSBpbnZhbGlkZSA6IGRvaXQgc2UgdGVybWluZXIgcGFyIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBDaGFcdTAwRUVuZSBpbnZhbGlkZSA6IGRvaXQgaW5jbHVyZSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBDaGFcdTAwRUVuZSBpbnZhbGlkZSA6IGRvaXQgY29ycmVzcG9uZHJlIGF1IG1vZFx1MDBFOGxlICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fSBpbnZhbGlkZWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTm9tYnJlIGludmFsaWRlIDogZG9pdCBcdTAwRUF0cmUgdW4gbXVsdGlwbGUgZGUgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYENsXHUwMEU5JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJ9IG5vbiByZWNvbm51ZSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifSA6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQ2xcdTAwRTkgaW52YWxpZGUgZGFucyAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJFbnRyXHUwMEU5ZSBpbnZhbGlkZVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVmFsZXVyIGludmFsaWRlIGRhbnMgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFbnRyXHUwMEU5ZSBpbnZhbGlkZWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiY2FyYWN0XHUwMEU4cmVzXCIsXG4gICAgICAgICAgICB2ZXJiOiBcImF2b2lyXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJvY3RldHNcIixcbiAgICAgICAgICAgIHZlcmI6IFwiYXZvaXJcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJcdTAwRTlsXHUwMEU5bWVudHNcIixcbiAgICAgICAgICAgIHZlcmI6IFwiYXZvaXJcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwMEU5bFx1MDBFOW1lbnRzXCIsXG4gICAgICAgICAgICB2ZXJiOiBcImF2b2lyXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImVudHJcdTAwRTllXCIsXG4gICAgICAgIGVtYWlsOiBcImFkcmVzc2UgY291cnJpZWxcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJkYXRlLWhldXJlIElTT1wiLFxuICAgICAgICBkYXRlOiBcImRhdGUgSVNPXCIsXG4gICAgICAgIHRpbWU6IFwiaGV1cmUgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcImR1clx1MDBFOWUgSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiYWRyZXNzZSBJUHY0XCIsXG4gICAgICAgIGlwdjY6IFwiYWRyZXNzZSBJUHY2XCIsXG4gICAgICAgIGNpZHJ2NDogXCJwbGFnZSBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJwbGFnZSBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCJjaGFcdTAwRUVuZSBlbmNvZFx1MDBFOWUgZW4gYmFzZTY0XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJjaGFcdTAwRUVuZSBlbmNvZFx1MDBFOWUgZW4gYmFzZTY0dXJsXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcImNoYVx1MDBFRW5lIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJudW1cdTAwRTlybyBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiZW50clx1MDBFOWVcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFbnRyXHUwMEU5ZSBpbnZhbGlkZSA6IGF0dGVuZHUgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgcmVcdTAwRTd1ICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVudHJcdTAwRTllIGludmFsaWRlIDogYXR0ZW5kdSAke2V4cGVjdGVkfSwgcmVcdTAwRTd1ICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYEVudHJcdTAwRTllIGludmFsaWRlIDogYXR0ZW5kdSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9wdGlvbiBpbnZhbGlkZSA6IGF0dGVuZHUgbCd1bmUgZGVzIHZhbGV1cnMgc3VpdmFudGVzICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCJcdTIyNjRcIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBUcm9wIGdyYW5kIDogYXR0ZW5kdSBxdWUgJHtpc3N1ZS5vcmlnaW4gPz8gXCJsYSB2YWxldXJcIn0gYWl0ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVHJvcCBncmFuZCA6IGF0dGVuZHUgcXVlICR7aXNzdWUub3JpZ2luID8/IFwibGEgdmFsZXVyXCJ9IHNvaXQgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIlx1MjI2NVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRyb3AgcGV0aXQgOiBhdHRlbmR1IHF1ZSAke2lzc3VlLm9yaWdpbn0gYWl0ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUcm9wIHBldGl0IDogYXR0ZW5kdSBxdWUgJHtpc3N1ZS5vcmlnaW59IHNvaXQgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYENoYVx1MDBFRW5lIGludmFsaWRlIDogZG9pdCBjb21tZW5jZXIgcGFyIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBDaGFcdTAwRUVuZSBpbnZhbGlkZSA6IGRvaXQgc2UgdGVybWluZXIgcGFyIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBDaGFcdTAwRUVuZSBpbnZhbGlkZSA6IGRvaXQgaW5jbHVyZSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBDaGFcdTAwRUVuZSBpbnZhbGlkZSA6IGRvaXQgY29ycmVzcG9uZHJlIGF1IG1vdGlmICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fSBpbnZhbGlkZWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTm9tYnJlIGludmFsaWRlIDogZG9pdCBcdTAwRUF0cmUgdW4gbXVsdGlwbGUgZGUgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYENsXHUwMEU5JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJ9IG5vbiByZWNvbm51ZSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifSA6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQ2xcdTAwRTkgaW52YWxpZGUgZGFucyAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJFbnRyXHUwMEU5ZSBpbnZhbGlkZVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVmFsZXVyIGludmFsaWRlIGRhbnMgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFbnRyXHUwMEU5ZSBpbnZhbGlkZWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICAvLyBIZWJyZXcgbGFiZWxzICsgZ3JhbW1hdGljYWwgZ2VuZGVyXG4gICAgY29uc3QgVHlwZU5hbWVzID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVERVx1MDVEN1x1MDVFOFx1MDVENVx1MDVENlx1MDVFQVwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcImZcIlxuICAgICAgICB9LFxuICAgICAgICBudW1iZXI6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVERVx1MDVFMVx1MDVFNFx1MDVFOFwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICBib29sZWFuOiB7XG4gICAgICAgICAgICBsYWJlbDogXCJcdTA1RTJcdTA1RThcdTA1REEgXHUwNUQxXHUwNUQ1XHUwNURDXHUwNUQ5XHUwNUQwXHUwNUUwXHUwNUQ5XCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIGJpZ2ludDoge1xuICAgICAgICAgICAgbGFiZWw6IFwiQmlnSW50XCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGU6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVFQVx1MDVEMFx1MDVFOFx1MDVEOVx1MDVEQVwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgbGFiZWw6IFwiXHUwNURFXHUwNUUyXHUwNUU4XHUwNURBXCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgbGFiZWw6IFwiXHUwNUQwXHUwNUQ1XHUwNUQxXHUwNUQ5XHUwNUQ5XHUwNUU3XHUwNUQ4XCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIG51bGw6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVFMlx1MDVFOFx1MDVEQSBcdTA1RThcdTA1RDlcdTA1RTcgKG51bGwpXCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIHVuZGVmaW5lZDoge1xuICAgICAgICAgICAgbGFiZWw6IFwiXHUwNUUyXHUwNUU4XHUwNURBIFx1MDVEQ1x1MDVEMCBcdTA1REVcdTA1RDVcdTA1RDJcdTA1RDNcdTA1RTggKHVuZGVmaW5lZClcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJtXCJcbiAgICAgICAgfSxcbiAgICAgICAgc3ltYm9sOiB7XG4gICAgICAgICAgICBsYWJlbDogXCJcdTA1RTFcdTA1RDlcdTA1REVcdTA1RDFcdTA1RDVcdTA1REMgKFN5bWJvbClcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJtXCJcbiAgICAgICAgfSxcbiAgICAgICAgZnVuY3Rpb246IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVFNFx1MDVENVx1MDVFMFx1MDVFN1x1MDVFNlx1MDVEOVx1MDVENFwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcImZcIlxuICAgICAgICB9LFxuICAgICAgICBtYXA6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVERVx1MDVFNFx1MDVENCAoTWFwKVwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcImZcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVFN1x1MDVEMVx1MDVENVx1MDVFNlx1MDVENCAoU2V0KVwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcImZcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICBsYWJlbDogXCJcdTA1RTdcdTA1RDVcdTA1RDFcdTA1RTVcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJtXCJcbiAgICAgICAgfSxcbiAgICAgICAgcHJvbWlzZToge1xuICAgICAgICAgICAgbGFiZWw6IFwiUHJvbWlzZVwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICBOYU46IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIk5hTlwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICB1bmtub3duOiB7XG4gICAgICAgICAgICBsYWJlbDogXCJcdTA1RTJcdTA1RThcdTA1REEgXHUwNURDXHUwNUQwIFx1MDVEOVx1MDVEM1x1MDVENVx1MDVFMlwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgbGFiZWw6IFwiXHUwNUUyXHUwNUU4XHUwNURBXCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIFNpemluZyB1bml0cyBmb3Igc2l6ZS1yZWxhdGVkIG1lc3NhZ2VzICsgbG9jYWxpemVkIG9yaWdpbiBsYWJlbHNcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwNUVBXHUwNUQ1XHUwNUQ1XHUwNUQ5XHUwNUREXCIsXG4gICAgICAgICAgICBzaG9ydExhYmVsOiBcIlx1MDVFN1x1MDVFNlx1MDVFOFwiLFxuICAgICAgICAgICAgbG9uZ0xhYmVsOiBcIlx1MDVEMFx1MDVFOFx1MDVENVx1MDVEQVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwNUQxXHUwNUQ5XHUwNUQ5XHUwNUQ4XHUwNUQ5XHUwNUREXCIsXG4gICAgICAgICAgICBzaG9ydExhYmVsOiBcIlx1MDVFN1x1MDVEOFx1MDVERlwiLFxuICAgICAgICAgICAgbG9uZ0xhYmVsOiBcIlx1MDVEMlx1MDVEM1x1MDVENVx1MDVEQ1wiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDVFNFx1MDVFOFx1MDVEOVx1MDVEOFx1MDVEOVx1MDVERFwiLFxuICAgICAgICAgICAgc2hvcnRMYWJlbDogXCJcdTA1RTdcdTA1RDhcdTA1REZcIixcbiAgICAgICAgICAgIGxvbmdMYWJlbDogXCJcdTA1RDJcdTA1RDNcdTA1RDVcdTA1RENcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwNUU0XHUwNUU4XHUwNUQ5XHUwNUQ4XHUwNUQ5XHUwNUREXCIsXG4gICAgICAgICAgICBzaG9ydExhYmVsOiBcIlx1MDVFN1x1MDVEOFx1MDVERlwiLFxuICAgICAgICAgICAgbG9uZ0xhYmVsOiBcIlx1MDVEMlx1MDVEM1x1MDVENVx1MDVEQ1wiXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlcjoge1xuICAgICAgICAgICAgdW5pdDogXCJcIixcbiAgICAgICAgICAgIHNob3J0TGFiZWw6IFwiXHUwNUU3XHUwNUQ4XHUwNURGXCIsXG4gICAgICAgICAgICBsb25nTGFiZWw6IFwiXHUwNUQyXHUwNUQzXHUwNUQ1XHUwNURDXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gSGVscGVycyBcdTIwMTQgbGFiZWxzLCBhcnRpY2xlcywgYW5kIHZlcmJzXG4gICAgY29uc3QgdHlwZUVudHJ5ID0gKHQpPT50ID8gVHlwZU5hbWVzW3RdIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHR5cGVMYWJlbCA9ICh0KT0+e1xuICAgICAgICBjb25zdCBlID0gdHlwZUVudHJ5KHQpO1xuICAgICAgICBpZiAoZSkgcmV0dXJuIGUubGFiZWw7XG4gICAgICAgIC8vIGZhbGxiYWNrOiBzaG93IHJhdyBzdHJpbmcgaWYgdW5rbm93blxuICAgICAgICByZXR1cm4gdCA/PyBUeXBlTmFtZXMudW5rbm93bi5sYWJlbDtcbiAgICB9O1xuICAgIGNvbnN0IHdpdGhEZWZpbml0ZSA9ICh0KT0+YFx1MDVENCR7dHlwZUxhYmVsKHQpfWA7XG4gICAgY29uc3QgdmVyYkZvciA9ICh0KT0+e1xuICAgICAgICBjb25zdCBlID0gdHlwZUVudHJ5KHQpO1xuICAgICAgICBjb25zdCBnZW5kZXIgPSBlPy5nZW5kZXIgPz8gXCJtXCI7XG4gICAgICAgIHJldHVybiBnZW5kZXIgPT09IFwiZlwiID8gXCJcdTA1RTZcdTA1RThcdTA1RDlcdTA1REJcdTA1RDQgXHUwNURDXHUwNUQ0XHUwNUQ5XHUwNUQ1XHUwNUVBXCIgOiBcIlx1MDVFNlx1MDVFOFx1MDVEOVx1MDVEQSBcdTA1RENcdTA1RDRcdTA1RDlcdTA1RDVcdTA1RUFcIjtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNpemluZyA9IChvcmlnaW4pPT57XG4gICAgICAgIGlmICghb3JpZ2luKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH07XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVFN1x1MDVEQ1x1MDVEOFwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICBlbWFpbDoge1xuICAgICAgICAgICAgbGFiZWw6IFwiXHUwNURCXHUwNUVBXHUwNUQ1XHUwNUQxXHUwNUVBIFx1MDVEMFx1MDVEOVx1MDVERVx1MDVEOVx1MDVEOVx1MDVEQ1wiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcImZcIlxuICAgICAgICB9LFxuICAgICAgICB1cmw6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVEQlx1MDVFQVx1MDVENVx1MDVEMVx1MDVFQSBcdTA1RThcdTA1RTlcdTA1RUFcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJmXCJcbiAgICAgICAgfSxcbiAgICAgICAgZW1vamk6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVEMFx1MDVEOVx1MDVERVx1MDVENVx1MDVEMidcdTA1RDlcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJtXCJcbiAgICAgICAgfSxcbiAgICAgICAgdXVpZDoge1xuICAgICAgICAgICAgbGFiZWw6IFwiVVVJRFwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICBuYW5vaWQ6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIm5hbm9pZFwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICBndWlkOiB7XG4gICAgICAgICAgICBsYWJlbDogXCJHVUlEXCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIGN1aWQ6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcImN1aWRcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJtXCJcbiAgICAgICAgfSxcbiAgICAgICAgY3VpZDI6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcImN1aWQyXCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIHVsaWQ6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlVMSURcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJtXCJcbiAgICAgICAgfSxcbiAgICAgICAgeGlkOiB7XG4gICAgICAgICAgICBsYWJlbDogXCJYSURcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJtXCJcbiAgICAgICAgfSxcbiAgICAgICAga3N1aWQ6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIktTVUlEXCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIGRhdGV0aW1lOiB7XG4gICAgICAgICAgICBsYWJlbDogXCJcdTA1RUFcdTA1RDBcdTA1RThcdTA1RDlcdTA1REEgXHUwNUQ1XHUwNUQ2XHUwNURFXHUwNURGIElTT1wiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICBsYWJlbDogXCJcdTA1RUFcdTA1RDBcdTA1RThcdTA1RDlcdTA1REEgSVNPXCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWU6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVENlx1MDVERVx1MDVERiBJU09cIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJtXCJcbiAgICAgICAgfSxcbiAgICAgICAgZHVyYXRpb246IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVERVx1MDVFOVx1MDVEQSBcdTA1RDZcdTA1REVcdTA1REYgSVNPXCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIGlwdjQ6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVEQlx1MDVFQVx1MDVENVx1MDVEMVx1MDVFQSBJUHY0XCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwiZlwiXG4gICAgICAgIH0sXG4gICAgICAgIGlwdjY6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVEQlx1MDVFQVx1MDVENVx1MDVEMVx1MDVFQSBJUHY2XCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwiZlwiXG4gICAgICAgIH0sXG4gICAgICAgIGNpZHJ2NDoge1xuICAgICAgICAgICAgbGFiZWw6IFwiXHUwNUQ4XHUwNUQ1XHUwNUQ1XHUwNUQ3IElQdjRcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJtXCJcbiAgICAgICAgfSxcbiAgICAgICAgY2lkcnY2OiB7XG4gICAgICAgICAgICBsYWJlbDogXCJcdTA1RDhcdTA1RDVcdTA1RDVcdTA1RDcgSVB2NlwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICBiYXNlNjQ6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVERVx1MDVEN1x1MDVFOFx1MDVENVx1MDVENlx1MDVFQSBcdTA1RDFcdTA1RDFcdTA1RTFcdTA1RDlcdTA1RTEgNjRcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJmXCJcbiAgICAgICAgfSxcbiAgICAgICAgYmFzZTY0dXJsOiB7XG4gICAgICAgICAgICBsYWJlbDogXCJcdTA1REVcdTA1RDdcdTA1RThcdTA1RDVcdTA1RDZcdTA1RUEgXHUwNUQxXHUwNUQxXHUwNUUxXHUwNUQ5XHUwNUUxIDY0IFx1MDVEQ1x1MDVEQlx1MDVFQVx1MDVENVx1MDVEMVx1MDVENVx1MDVFQSBcdTA1RThcdTA1RTlcdTA1RUFcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJmXCJcbiAgICAgICAgfSxcbiAgICAgICAganNvbl9zdHJpbmc6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVERVx1MDVEN1x1MDVFOFx1MDVENVx1MDVENlx1MDVFQSBKU09OXCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwiZlwiXG4gICAgICAgIH0sXG4gICAgICAgIGUxNjQ6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVERVx1MDVFMVx1MDVFNFx1MDVFOCBFLjE2NFwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICBqd3Q6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIkpXVFwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICBlbmRzX3dpdGg6IHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlx1MDVFN1x1MDVEQ1x1MDVEOFwiLFxuICAgICAgICAgICAgZ2VuZGVyOiBcIm1cIlxuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlczoge1xuICAgICAgICAgICAgbGFiZWw6IFwiXHUwNUU3XHUwNURDXHUwNUQ4XCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIGxvd2VyY2FzZToge1xuICAgICAgICAgICAgbGFiZWw6IFwiXHUwNUU3XHUwNURDXHUwNUQ4XCIsXG4gICAgICAgICAgICBnZW5kZXI6IFwibVwiXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXJ0c193aXRoOiB7XG4gICAgICAgICAgICBsYWJlbDogXCJcdTA1RTdcdTA1RENcdTA1RDhcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJtXCJcbiAgICAgICAgfSxcbiAgICAgICAgdXBwZXJjYXNlOiB7XG4gICAgICAgICAgICBsYWJlbDogXCJcdTA1RTdcdTA1RENcdTA1RDhcIixcbiAgICAgICAgICAgIGdlbmRlcjogXCJtXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhwZWN0ZWQgdHlwZTogc2hvdyB3aXRob3V0IGRlZmluaXRlIGFydGljbGUgZm9yIGNsZWFyZXIgSGVicmV3XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkS2V5ID0gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbZXhwZWN0ZWRLZXkgPz8gXCJcIl0gPz8gdHlwZUxhYmVsKGV4cGVjdGVkS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVjZWl2ZWQ6IHNob3cgbG9jYWxpemVkIGxhYmVsIGlmIGtub3duLCBvdGhlcndpc2UgY29uc3RydWN0b3IvcmF3XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyBUeXBlTmFtZXNbcmVjZWl2ZWRUeXBlXT8ubGFiZWwgPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNUU3XHUwNURDXHUwNUQ4IFx1MDVEQ1x1MDVEMCBcdTA1RUFcdTA1RTdcdTA1RDlcdTA1REY6IFx1MDVFNlx1MDVFOFx1MDVEOVx1MDVEQSBcdTA1RENcdTA1RDRcdTA1RDlcdTA1RDVcdTA1RUEgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgXHUwNUQ0XHUwNUVBXHUwNUU3XHUwNUQxXHUwNURDICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDVFN1x1MDVEQ1x1MDVEOCBcdTA1RENcdTA1RDAgXHUwNUVBXHUwNUU3XHUwNUQ5XHUwNURGOiBcdTA1RTZcdTA1RThcdTA1RDlcdTA1REEgXHUwNURDXHUwNUQ0XHUwNUQ5XHUwNUQ1XHUwNUVBICR7ZXhwZWN0ZWR9LCBcdTA1RDRcdTA1RUFcdTA1RTdcdTA1RDFcdTA1REMgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA1RTJcdTA1RThcdTA1REEgXHUwNURDXHUwNUQwIFx1MDVFQVx1MDVFN1x1MDVEOVx1MDVERjogXHUwNUQ0XHUwNUUyXHUwNUU4XHUwNURBIFx1MDVEN1x1MDVEOVx1MDVEOVx1MDVEMSBcdTA1RENcdTA1RDRcdTA1RDlcdTA1RDVcdTA1RUEgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gSm9pbiB2YWx1ZXMgd2l0aCBwcm9wZXIgSGVicmV3IGZvcm1hdHRpbmdcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBpc3N1ZS52YWx1ZXMubWFwKCh2KT0+dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUodikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA1RTJcdTA1RThcdTA1REEgXHUwNURDXHUwNUQwIFx1MDVFQVx1MDVFN1x1MDVEOVx1MDVERjogXHUwNUQ0XHUwNUQwXHUwNUU0XHUwNUU5XHUwNUU4XHUwNUQ1XHUwNUQ5XHUwNUQ1XHUwNUVBIFx1MDVENFx1MDVERVx1MDVFQVx1MDVEMFx1MDVEOVx1MDVERVx1MDVENVx1MDVFQSBcdTA1RDRcdTA1REYgJHtzdHJpbmdpZmllZFswXX0gXHUwNUQwXHUwNUQ1ICR7c3RyaW5naWZpZWRbMV19YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgMysgdmFsdWVzOiBcImFcIiwgXCJiXCIgXHUwNUQwXHUwNUQ1IFwiY1wiXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RWYWx1ZSA9IHN0cmluZ2lmaWVkW3N0cmluZ2lmaWVkLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0VmFsdWVzID0gc3RyaW5naWZpZWQuc2xpY2UoMCwgLTEpLmpvaW4oXCIsIFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA1RTJcdTA1RThcdTA1REEgXHUwNURDXHUwNUQwIFx1MDVFQVx1MDVFN1x1MDVEOVx1MDVERjogXHUwNUQ0XHUwNUQwXHUwNUU0XHUwNUU5XHUwNUU4XHUwNUQ1XHUwNUQ5XHUwNUQ1XHUwNUVBIFx1MDVENFx1MDVERVx1MDVFQVx1MDVEMFx1MDVEOVx1MDVERVx1MDVENVx1MDVFQSBcdTA1RDRcdTA1REYgJHtyZXN0VmFsdWVzfSBcdTA1RDBcdTA1RDUgJHtsYXN0VmFsdWV9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSB3aXRoRGVmaW5pdGUoaXNzdWUub3JpZ2luID8/IFwidmFsdWVcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc3N1ZS5vcmlnaW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIHN0cmluZ3MgLSBtb3JlIG5hdHVyYWwgSGVicmV3XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7c2l6aW5nPy5sb25nTGFiZWwgPz8gXCJcdTA1RDBcdTA1RThcdTA1RDVcdTA1REFcIn0gXHUwNURFXHUwNUQzXHUwNUQ5OiAke3N1YmplY3R9IFx1MDVFNlx1MDVFOFx1MDVEOVx1MDVEQlx1MDVENCBcdTA1RENcdTA1RDRcdTA1REJcdTA1RDlcdTA1REMgJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nPy51bml0ID8/IFwiXCJ9ICR7aXNzdWUuaW5jbHVzaXZlID8gXCJcdTA1RDBcdTA1RDUgXHUwNUU0XHUwNUQ3XHUwNUQ1XHUwNUVBXCIgOiBcIlx1MDVEQ1x1MDVEQlx1MDVEQyBcdTA1RDRcdTA1RDlcdTA1RDVcdTA1RUFcdTA1RThcIn1gLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNzdWUub3JpZ2luID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOYXR1cmFsIEhlYnJldyBmb3IgbnVtYmVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGFyaXNvbiA9IGlzc3VlLmluY2x1c2l2ZSA/IGBcdTA1RTdcdTA1RDhcdTA1REYgXHUwNUQwXHUwNUQ1IFx1MDVFOVx1MDVENVx1MDVENVx1MDVENCBcdTA1REMtJHtpc3N1ZS5tYXhpbXVtfWAgOiBgXHUwNUU3XHUwNUQ4XHUwNURGIFx1MDVERS0ke2lzc3VlLm1heGltdW19YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNUQyXHUwNUQzXHUwNUQ1XHUwNURDIFx1MDVERVx1MDVEM1x1MDVEOTogJHtzdWJqZWN0fSBcdTA1RTZcdTA1RThcdTA1RDlcdTA1REEgXHUwNURDXHUwNUQ0XHUwNUQ5XHUwNUQ1XHUwNUVBICR7Y29tcGFyaXNvbn1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc3N1ZS5vcmlnaW4gPT09IFwiYXJyYXlcIiB8fCBpc3N1ZS5vcmlnaW4gPT09IFwic2V0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5hdHVyYWwgSGVicmV3IGZvciBhcnJheXMgYW5kIHNldHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBpc3N1ZS5vcmlnaW4gPT09IFwic2V0XCIgPyBcIlx1MDVFNlx1MDVFOFx1MDVEOVx1MDVEQlx1MDVENFwiIDogXCJcdTA1RTZcdTA1RThcdTA1RDlcdTA1REFcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmlzb24gPSBpc3N1ZS5pbmNsdXNpdmUgPyBgJHtpc3N1ZS5tYXhpbXVtfSAke3NpemluZz8udW5pdCA/PyBcIlwifSBcdTA1RDBcdTA1RDUgXHUwNUU0XHUwNUQ3XHUwNUQ1XHUwNUVBYCA6IGBcdTA1RTRcdTA1RDdcdTA1RDVcdTA1RUEgXHUwNURFLSR7aXNzdWUubWF4aW11bX0gJHtzaXppbmc/LnVuaXQgPz8gXCJcIn1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA1RDJcdTA1RDNcdTA1RDVcdTA1REMgXHUwNURFXHUwNUQzXHUwNUQ5OiAke3N1YmplY3R9ICR7dmVyYn0gXHUwNURDXHUwNUQ0XHUwNURCXHUwNUQ5XHUwNURDICR7Y29tcGFyaXNvbn1gLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmUgPSB2ZXJiRm9yKGlzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nPy51bml0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7c2l6aW5nLmxvbmdMYWJlbH0gXHUwNURFXHUwNUQzXHUwNUQ5OiAke3N1YmplY3R9ICR7YmV9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3NpemluZz8ubG9uZ0xhYmVsID8/IFwiXHUwNUQyXHUwNUQzXHUwNUQ1XHUwNURDXCJ9IFx1MDVERVx1MDVEM1x1MDVEOTogJHtzdWJqZWN0fSAke2JlfSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJqZWN0ID0gd2l0aERlZmluaXRlKGlzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNzdWUub3JpZ2luID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBzdHJpbmdzIC0gbW9yZSBuYXR1cmFsIEhlYnJld1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3NpemluZz8uc2hvcnRMYWJlbCA/PyBcIlx1MDVFN1x1MDVFNlx1MDVFOFwifSBcdTA1REVcdTA1RDNcdTA1RDk6ICR7c3ViamVjdH0gXHUwNUU2XHUwNUU4XHUwNUQ5XHUwNURCXHUwNUQ0IFx1MDVEQ1x1MDVENFx1MDVEQlx1MDVEOVx1MDVEQyAke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmc/LnVuaXQgPz8gXCJcIn0gJHtpc3N1ZS5pbmNsdXNpdmUgPyBcIlx1MDVEMFx1MDVENSBcdTA1RDlcdTA1RDVcdTA1RUFcdTA1RThcIiA6IFwiXHUwNURDXHUwNUU0XHUwNUQ3XHUwNUQ1XHUwNUVBXCJ9YC50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc3VlLm9yaWdpbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmF0dXJhbCBIZWJyZXcgZm9yIG51bWJlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmlzb24gPSBpc3N1ZS5pbmNsdXNpdmUgPyBgXHUwNUQyXHUwNUQzXHUwNUQ1XHUwNURDIFx1MDVEMFx1MDVENSBcdTA1RTlcdTA1RDVcdTA1RDVcdTA1RDQgXHUwNURDLSR7aXNzdWUubWluaW11bX1gIDogYFx1MDVEMlx1MDVEM1x1MDVENVx1MDVEQyBcdTA1REUtJHtpc3N1ZS5taW5pbXVtfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDVFN1x1MDVEOFx1MDVERiBcdTA1REVcdTA1RDNcdTA1RDk6ICR7c3ViamVjdH0gXHUwNUU2XHUwNUU4XHUwNUQ5XHUwNURBIFx1MDVEQ1x1MDVENFx1MDVEOVx1MDVENVx1MDVFQSAke2NvbXBhcmlzb259YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNzdWUub3JpZ2luID09PSBcImFycmF5XCIgfHwgaXNzdWUub3JpZ2luID09PSBcInNldFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOYXR1cmFsIEhlYnJldyBmb3IgYXJyYXlzIGFuZCBzZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJiID0gaXNzdWUub3JpZ2luID09PSBcInNldFwiID8gXCJcdTA1RTZcdTA1RThcdTA1RDlcdTA1REJcdTA1RDRcIiA6IFwiXHUwNUU2XHUwNUU4XHUwNUQ5XHUwNURBXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHNpbmd1bGFyIChtaW5pbXVtID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc3VlLm1pbmltdW0gPT09IDEgJiYgaXNzdWUuaW5jbHVzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2luZ3VsYXJQaHJhc2UgPSBpc3N1ZS5vcmlnaW4gPT09IFwic2V0XCIgPyBcIlx1MDVEQ1x1MDVFNFx1MDVEN1x1MDVENVx1MDVFQSBcdTA1RTRcdTA1RThcdTA1RDlcdTA1RDggXHUwNUQwXHUwNUQ3XHUwNUQzXCIgOiBcIlx1MDVEQ1x1MDVFNFx1MDVEN1x1MDVENVx1MDVFQSBcdTA1RTRcdTA1RThcdTA1RDlcdTA1RDggXHUwNUQwXHUwNUQ3XHUwNUQzXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA1RTdcdTA1RDhcdTA1REYgXHUwNURFXHUwNUQzXHUwNUQ5OiAke3N1YmplY3R9ICR7dmVyYn0gXHUwNURDXHUwNUQ0XHUwNURCXHUwNUQ5XHUwNURDICR7c2luZ3VsYXJQaHJhc2V9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmlzb24gPSBpc3N1ZS5pbmNsdXNpdmUgPyBgJHtpc3N1ZS5taW5pbXVtfSAke3NpemluZz8udW5pdCA/PyBcIlwifSBcdTA1RDBcdTA1RDUgXHUwNUQ5XHUwNUQ1XHUwNUVBXHUwNUU4YCA6IGBcdTA1RDlcdTA1RDVcdTA1RUFcdTA1RTggXHUwNURFLSR7aXNzdWUubWluaW11bX0gJHtzaXppbmc/LnVuaXQgPz8gXCJcIn1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA1RTdcdTA1RDhcdTA1REYgXHUwNURFXHUwNUQzXHUwNUQ5OiAke3N1YmplY3R9ICR7dmVyYn0gXHUwNURDXHUwNUQ0XHUwNURCXHUwNUQ5XHUwNURDICR7Y29tcGFyaXNvbn1gLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmUgPSB2ZXJiRm9yKGlzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nPy51bml0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7c2l6aW5nLnNob3J0TGFiZWx9IFx1MDVERVx1MDVEM1x1MDVEOTogJHtzdWJqZWN0fSAke2JlfSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtzaXppbmc/LnNob3J0TGFiZWwgPz8gXCJcdTA1RTdcdTA1RDhcdTA1REZcIn0gXHUwNURFXHUwNUQzXHUwNUQ5OiAke3N1YmplY3R9ICR7YmV9ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXBwbHkgdG8gc3RyaW5ncyBcdTIwMTQgdXNlIGZlbWluaW5lIGdyYW1tYXIgKyBcdTA1RDRcdTA1RjMgXHUwNUQ0XHUwNUQ5XHUwNUQzXHUwNUQ5XHUwNUUyXHUwNUQ0XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgXHUwNUQ0XHUwNURFXHUwNUQ3XHUwNUU4XHUwNUQ1XHUwNUQ2XHUwNUVBIFx1MDVEN1x1MDVEOVx1MDVEOVx1MDVEMVx1MDVFQSBcdTA1RENcdTA1RDRcdTA1RUFcdTA1RDdcdTA1RDlcdTA1REMgXHUwNUQxIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgXHUwNUQ0XHUwNURFXHUwNUQ3XHUwNUU4XHUwNUQ1XHUwNUQ2XHUwNUVBIFx1MDVEN1x1MDVEOVx1MDVEOVx1MDVEMVx1MDVFQSBcdTA1RENcdTA1RDRcdTA1RTFcdTA1RUFcdTA1RDlcdTA1RDlcdTA1REQgXHUwNUQxIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBcdTA1RDRcdTA1REVcdTA1RDdcdTA1RThcdTA1RDVcdTA1RDZcdTA1RUEgXHUwNUQ3XHUwNUQ5XHUwNUQ5XHUwNUQxXHUwNUVBIFx1MDVEQ1x1MDVEQlx1MDVEQ1x1MDVENVx1MDVEQyBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBcdTA1RDRcdTA1REVcdTA1RDdcdTA1RThcdTA1RDVcdTA1RDZcdTA1RUEgXHUwNUQ3XHUwNUQ5XHUwNUQ5XHUwNUQxXHUwNUVBIFx1MDVEQ1x1MDVENFx1MDVFQVx1MDVEMFx1MDVEOVx1MDVERCBcdTA1RENcdTA1RUFcdTA1RDFcdTA1RTBcdTA1RDlcdTA1RUEgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgZ2VuZGVyIGFncmVlbWVudCBmb3IgZm9ybWF0c1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3VuRW50cnkgPSBGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3VuID0gbm91bkVudHJ5Py5sYWJlbCA/PyBfaXNzdWUuZm9ybWF0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZW5kZXIgPSBub3VuRW50cnk/LmdlbmRlciA/PyBcIm1cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqZWN0aXZlID0gZ2VuZGVyID09PSBcImZcIiA/IFwiXHUwNUVBXHUwNUU3XHUwNUQ5XHUwNUUwXHUwNUQ0XCIgOiBcIlx1MDVFQVx1MDVFN1x1MDVEOVx1MDVERlwiO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bm91bn0gXHUwNURDXHUwNUQwICR7YWRqZWN0aXZlfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNURFXHUwNUUxXHUwNUU0XHUwNUU4IFx1MDVEQ1x1MDVEMCBcdTA1RUFcdTA1RTdcdTA1RDlcdTA1REY6IFx1MDVEN1x1MDVEOVx1MDVEOVx1MDVEMSBcdTA1RENcdTA1RDRcdTA1RDlcdTA1RDVcdTA1RUEgXHUwNURFXHUwNURCXHUwNUU0XHUwNURDXHUwNUQ0IFx1MDVFOVx1MDVEQyAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNURFXHUwNUU0XHUwNUVBXHUwNUQ3JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlx1MDVENVx1MDVFQVwiIDogXCJcIn0gXHUwNURDXHUwNUQwIFx1MDVERVx1MDVENlx1MDVENVx1MDVENCR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJcdTA1RDlcdTA1RERcIiA6IFwiXHUwNUQ0XCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNUU5XHUwNUQzXHUwNUQ0IFx1MDVEQ1x1MDVEMCBcdTA1RUFcdTA1RTdcdTA1RDlcdTA1REYgXHUwNUQxXHUwNUQwXHUwNUQ1XHUwNUQxXHUwNUQ5XHUwNUQ5XHUwNUU3XHUwNUQ4YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlx1MDVFN1x1MDVEQ1x1MDVEOCBcdTA1RENcdTA1RDAgXHUwNUVBXHUwNUU3XHUwNUQ5XHUwNURGXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZSA9IHdpdGhEZWZpbml0ZShpc3N1ZS5vcmlnaW4gPz8gXCJhcnJheVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA1RTJcdTA1RThcdTA1REEgXHUwNURDXHUwNUQwIFx1MDVFQVx1MDVFN1x1MDVEOVx1MDVERiBcdTA1RDEke3BsYWNlfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDVFN1x1MDVEQ1x1MDVEOCBcdTA1RENcdTA1RDAgXHUwNUVBXHUwNUU3XHUwNUQ5XHUwNURGYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJrYXJha3RlclwiLFxuICAgICAgICAgICAgdmVyYjogXCJsZWd5ZW5cIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJ5dGVcIixcbiAgICAgICAgICAgIHZlcmI6IFwibGVneWVuXCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiZWxlbVwiLFxuICAgICAgICAgICAgdmVyYjogXCJsZWd5ZW5cIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiZWxlbVwiLFxuICAgICAgICAgICAgdmVyYjogXCJsZWd5ZW5cIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiYmVtZW5ldFwiLFxuICAgICAgICBlbWFpbDogXCJlbWFpbCBjXHUwMEVEbVwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBpZFx1MDE1MWJcdTAwRTlseWVnXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPIGRcdTAwRTF0dW1cIixcbiAgICAgICAgdGltZTogXCJJU08gaWRcdTAxNTFcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIGlkXHUwMTUxaW50ZXJ2YWxsdW1cIixcbiAgICAgICAgaXB2NDogXCJJUHY0IGNcdTAwRURtXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiBjXHUwMEVEbVwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NCB0YXJ0b21cdTAwRTFueVwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2NiB0YXJ0b21cdTAwRTFueVwiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0LWtcdTAwRjNkb2x0IHN0cmluZ1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsLWtcdTAwRjNkb2x0IHN0cmluZ1wiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIHN0cmluZ1wiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IHN6XHUwMEUxbVwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiYmVtZW5ldFwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwic3pcdTAwRTFtXCIsXG4gICAgICAgIGFycmF5OiBcInRcdTAwRjZtYlwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDBDOXJ2XHUwMEU5bnl0ZWxlbiBiZW1lbmV0OiBhIHZcdTAwRTFydCBcdTAwRTlydFx1MDBFOWsgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgYSBrYXBvdHQgXHUwMEU5cnRcdTAwRTlrICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDBDOXJ2XHUwMEU5bnl0ZWxlbiBiZW1lbmV0OiBhIHZcdTAwRTFydCBcdTAwRTlydFx1MDBFOWsgJHtleHBlY3RlZH0sIGEga2Fwb3R0IFx1MDBFOXJ0XHUwMEU5ayAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBcdTAwQzlydlx1MDBFOW55dGVsZW4gYmVtZW5ldDogYSB2XHUwMEUxcnQgXHUwMEU5cnRcdTAwRTlrICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwMEM5cnZcdTAwRTlueXRlbGVuIG9wY2lcdTAwRjM6IHZhbGFtZWx5aWsgXHUwMEU5cnRcdTAwRTlrIHZcdTAwRTFydCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBUXHUwMEZBbCBuYWd5OiAke2lzc3VlLm9yaWdpbiA/PyBcIlx1MDBFOXJ0XHUwMEU5a1wifSBtXHUwMEU5cmV0ZSB0XHUwMEZBbCBuYWd5ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbVwifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVFx1MDBGQWwgbmFneTogYSBiZW1lbmV0aSBcdTAwRTlydFx1MDBFOWsgJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdTAwRTlydFx1MDBFOWtcIn0gdFx1MDBGQWwgbmFneTogJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgVFx1MDBGQWwga2ljc2k6IGEgYmVtZW5ldGkgXHUwMEU5cnRcdTAwRTlrICR7aXNzdWUub3JpZ2lufSBtXHUwMEU5cmV0ZSB0XHUwMEZBbCBraWNzaSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVFx1MDBGQWwga2ljc2k6IGEgYmVtZW5ldGkgXHUwMEU5cnRcdTAwRTlrICR7aXNzdWUub3JpZ2lufSB0XHUwMEZBbCBraWNzaSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgXHUwMEM5cnZcdTAwRTlueXRlbGVuIHN0cmluZzogXCIke19pc3N1ZS5wcmVmaXh9XCIgXHUwMEU5cnRcdTAwRTlra2VsIGtlbGwga2V6ZFx1MDE1MWRuaWVgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBcdTAwQzlydlx1MDBFOW55dGVsZW4gc3RyaW5nOiBcIiR7X2lzc3VlLnN1ZmZpeH1cIiBcdTAwRTlydFx1MDBFOWtrZWwga2VsbCB2XHUwMEU5Z3pcdTAxNTFkbmllYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBcdTAwQzlydlx1MDBFOW55dGVsZW4gc3RyaW5nOiBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiIFx1MDBFOXJ0XHUwMEU5a2V0IGtlbGwgdGFydGFsbWF6bmlhYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBcdTAwQzlydlx1MDBFOW55dGVsZW4gc3RyaW5nOiAke19pc3N1ZS5wYXR0ZXJufSBtaW50XHUwMEUxbmFrIGtlbGwgbWVnZmVsZWxuaWVgO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDBDOXJ2XHUwMEU5bnl0ZWxlbiAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwMEM5cnZcdTAwRTlueXRlbGVuIHN6XHUwMEUxbTogJHtpc3N1ZS5kaXZpc29yfSB0XHUwMEY2YmJzelx1MDBGNnJcdTAwRjZzXHUwMEU5bmVrIGtlbGwgbGVubmllYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgSXNtZXJldGxlbiBrdWxjcyR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTAwQzlydlx1MDBFOW55dGVsZW4ga3VsY3MgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXHUwMEM5cnZcdTAwRTlueXRlbGVuIGJlbWVuZXRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDBDOXJ2XHUwMEU5bnl0ZWxlbiBcdTAwRTlydFx1MDBFOWs6ICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwMEM5cnZcdTAwRTlueXRlbGVuIGJlbWVuZXRgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5mdW5jdGlvbiBnZXRBcm1lbmlhblBsdXJhbChjb3VudCwgb25lLCBtYW55KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKGNvdW50KSA9PT0gMSA/IG9uZSA6IG1hbnk7XG59XG5mdW5jdGlvbiB3aXRoRGVmaW5pdGVBcnRpY2xlKHdvcmQpIHtcbiAgICBpZiAoIXdvcmQpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHZvd2VscyA9IFtcbiAgICAgICAgXCJcdTA1NjFcIixcbiAgICAgICAgXCJcdTA1NjVcIixcbiAgICAgICAgXCJcdTA1NjhcIixcbiAgICAgICAgXCJcdTA1NkJcIixcbiAgICAgICAgXCJcdTA1NzhcIixcbiAgICAgICAgXCJcdTA1NzhcdTA1ODJcIixcbiAgICAgICAgXCJcdTA1ODVcIlxuICAgIF07XG4gICAgY29uc3QgbGFzdENoYXIgPSB3b3JkW3dvcmQubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIHdvcmQgKyAodm93ZWxzLmluY2x1ZGVzKGxhc3RDaGFyKSA/IFwiXHUwNTc2XCIgOiBcIlx1MDU2OFwiKTtcbn1cbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwiXHUwNTc2XHUwNTc3XHUwNTYxXHUwNTc2XCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCJcdTA1NzZcdTA1NzdcdTA1NjFcdTA1NzZcdTA1NzZcdTA1NjVcdTA1ODBcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTY1XHUwNTc2XHUwNTYxXHUwNTZDXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDoge1xuICAgICAgICAgICAgICAgIG9uZTogXCJcdTA1NjJcdTA1NjFcdTA1NzVcdTA1NjlcIixcbiAgICAgICAgICAgICAgICBtYW55OiBcIlx1MDU2Mlx1MDU2MVx1MDU3NVx1MDU2OVx1MDU2NVx1MDU4MFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyYjogXCJcdTA1NzhcdTA1ODJcdTA1NzZcdTA1NjVcdTA1NzZcdTA1NjFcdTA1NkNcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDoge1xuICAgICAgICAgICAgICAgIG9uZTogXCJcdTA1N0ZcdTA1NjFcdTA1ODBcdTA1ODBcIixcbiAgICAgICAgICAgICAgICBtYW55OiBcIlx1MDU3Rlx1MDU2MVx1MDU4MFx1MDU4MFx1MDU2NVx1MDU4MFwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyYjogXCJcdTA1NzhcdTA1ODJcdTA1NzZcdTA1NjVcdTA1NzZcdTA1NjFcdTA1NkNcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwiXHUwNTdGXHUwNTYxXHUwNTgwXHUwNTgwXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCJcdTA1N0ZcdTA1NjFcdTA1ODBcdTA1ODBcdTA1NjVcdTA1ODBcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTY1XHUwNTc2XHUwNTYxXHUwNTZDXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIlx1MDU3NFx1MDU3OFx1MDU4Mlx1MDU3Rlx1MDU4NFwiLFxuICAgICAgICBlbWFpbDogXCJcdTA1NjdcdTA1NkMuIFx1MDU3MFx1MDU2MVx1MDU3RFx1MDU4MVx1MDU2NVwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcIlx1MDU2N1x1MDU3NFx1MDU3OFx1MDU3Qlx1MDU2QlwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gXHUwNTYxXHUwNTc0XHUwNTdEXHUwNTYxXHUwNTY5XHUwNTZCXHUwNTdFIFx1MDU4NyBcdTA1NkFcdTA1NjFcdTA1NzRcIixcbiAgICAgICAgZGF0ZTogXCJJU08gXHUwNTYxXHUwNTc0XHUwNTdEXHUwNTYxXHUwNTY5XHUwNTZCXHUwNTdFXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIFx1MDU2QVx1MDU2MVx1MDU3NFwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08gXHUwNTdGXHUwNTg3XHUwNTc4XHUwNTcyXHUwNTc4XHUwNTgyXHUwNTY5XHUwNTc1XHUwNTc4XHUwNTgyXHUwNTc2XCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCBcdTA1NzBcdTA1NjFcdTA1N0RcdTA1ODFcdTA1NjVcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IFx1MDU3MFx1MDU2MVx1MDU3RFx1MDU4MVx1MDU2NVwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NCBcdTA1NzRcdTA1NkJcdTA1N0JcdTA1NjFcdTA1NkZcdTA1NjFcdTA1NzVcdTA1ODRcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYgXHUwNTc0XHUwNTZCXHUwNTdCXHUwNTYxXHUwNTZGXHUwNTYxXHUwNTc1XHUwNTg0XCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQgXHUwNTcxXHUwNTg3XHUwNTYxXHUwNTc5XHUwNTYxXHUwNTgzXHUwNTc4XHUwNTdFIFx1MDU3Rlx1MDU3OFx1MDU3MlwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsIFx1MDU3MVx1MDU4N1x1MDU2MVx1MDU3OVx1MDU2MVx1MDU4M1x1MDU3OFx1MDU3RSBcdTA1N0ZcdTA1NzhcdTA1NzJcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiBcdTA1N0ZcdTA1NzhcdTA1NzJcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NCBcdTA1NzBcdTA1NjFcdTA1NzRcdTA1NjFcdTA1ODBcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIlx1MDU3NFx1MDU3OFx1MDU4Mlx1MDU3Rlx1MDU4NFwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwiXHUwNTY5XHUwNTZCXHUwNTdFXCIsXG4gICAgICAgIGFycmF5OiBcIlx1MDU2Nlx1MDU2MVx1MDU3Nlx1MDU2M1x1MDU3RVx1MDU2MVx1MDU2RVwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDU0RFx1MDU2RFx1MDU2MVx1MDU2QyBcdTA1NzRcdTA1NzhcdTA1ODJcdTA1N0ZcdTA1ODRcdTA1NjFcdTA1NjNcdTA1ODBcdTA1NzhcdTA1ODJcdTA1NzRcdTIwMjQgXHUwNTdEXHUwNTdBXHUwNTYxXHUwNTdEXHUwNTdFXHUwNTc4XHUwNTgyXHUwNTc0IFx1MDU2N1x1MDU4MCBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBcdTA1N0RcdTA1N0ZcdTA1NjFcdTA1ODFcdTA1N0VcdTA1NjVcdTA1NkMgXHUwNTY3ICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDU0RFx1MDU2RFx1MDU2MVx1MDU2QyBcdTA1NzRcdTA1NzhcdTA1ODJcdTA1N0ZcdTA1ODRcdTA1NjFcdTA1NjNcdTA1ODBcdTA1NzhcdTA1ODJcdTA1NzRcdTIwMjQgXHUwNTdEXHUwNTdBXHUwNTYxXHUwNTdEXHUwNTdFXHUwNTc4XHUwNTgyXHUwNTc0IFx1MDU2N1x1MDU4MCAke2V4cGVjdGVkfSwgXHUwNTdEXHUwNTdGXHUwNTYxXHUwNTgxXHUwNTdFXHUwNTY1XHUwNTZDIFx1MDU2NyAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBcdTA1NERcdTA1NkRcdTA1NjFcdTA1NkMgXHUwNTc0XHUwNTc4XHUwNTgyXHUwNTdGXHUwNTg0XHUwNTYxXHUwNTYzXHUwNTgwXHUwNTc4XHUwNTgyXHUwNTc0XHUyMDI0IFx1MDU3RFx1MDU3QVx1MDU2MVx1MDU3RFx1MDU3RVx1MDU3OFx1MDU4Mlx1MDU3NCBcdTA1NjdcdTA1ODAgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMV0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA1NERcdTA1NkRcdTA1NjFcdTA1NkMgXHUwNTdGXHUwNTYxXHUwNTgwXHUwNTYyXHUwNTY1XHUwNTgwXHUwNTYxXHUwNTZGXHUyMDI0IFx1MDU3RFx1MDU3QVx1MDU2MVx1MDU3RFx1MDU3RVx1MDU3OFx1MDU4Mlx1MDU3NCBcdTA1NjdcdTA1ODAgXHUwNTcwXHUwNTY1XHUwNTdGXHUwNTg3XHUwNTc1XHUwNTYxXHUwNTZDXHUwNTc2XHUwNTY1XHUwNTgwXHUwNTZCXHUwNTgxIFx1MDU3NFx1MDU2NVx1MDU2Rlx1MDU2OFx1MDU1RCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4VmFsdWUgPSBOdW1iZXIoaXNzdWUubWF4aW11bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bml0ID0gZ2V0QXJtZW5pYW5QbHVyYWwobWF4VmFsdWUsIHNpemluZy51bml0Lm9uZSwgc2l6aW5nLnVuaXQubWFueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDU0OVx1MDU2MVx1MDU4M1x1MDU2MVx1MDU2Nlx1MDU2MVx1MDU3Nlx1MDU4MSBcdTA1NzRcdTA1NjVcdTA1NkUgXHUwNTYxXHUwNTgwXHUwNTZBXHUwNTY1XHUwNTg0XHUyMDI0IFx1MDU3RFx1MDU3QVx1MDU2MVx1MDU3RFx1MDU3RVx1MDU3OFx1MDU4Mlx1MDU3NCBcdTA1NjcsIFx1MDU3OFx1MDU4MCAke3dpdGhEZWZpbml0ZUFydGljbGUoaXNzdWUub3JpZ2luID8/IFwiXHUwNTYxXHUwNTgwXHUwNTZBXHUwNTY1XHUwNTg0XCIpfSBcdTA1NkZcdTA1NzhcdTA1ODJcdTA1NzZcdTA1NjVcdTA1NzZcdTA1NjEgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7dW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNTQ5XHUwNTYxXHUwNTgzXHUwNTYxXHUwNTY2XHUwNTYxXHUwNTc2XHUwNTgxIFx1MDU3NFx1MDU2NVx1MDU2RSBcdTA1NjFcdTA1ODBcdTA1NkFcdTA1NjVcdTA1ODRcdTIwMjQgXHUwNTdEXHUwNTdBXHUwNTYxXHUwNTdEXHUwNTdFXHUwNTc4XHUwNTgyXHUwNTc0IFx1MDU2NywgXHUwNTc4XHUwNTgwICR7d2l0aERlZmluaXRlQXJ0aWNsZShpc3N1ZS5vcmlnaW4gPz8gXCJcdTA1NjFcdTA1ODBcdTA1NkFcdTA1NjVcdTA1ODRcIil9IFx1MDU2Q1x1MDU2Qlx1MDU3Nlx1MDU2QiAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluVmFsdWUgPSBOdW1iZXIoaXNzdWUubWluaW11bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bml0ID0gZ2V0QXJtZW5pYW5QbHVyYWwobWluVmFsdWUsIHNpemluZy51bml0Lm9uZSwgc2l6aW5nLnVuaXQubWFueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDU0OVx1MDU2MVx1MDU4M1x1MDU2MVx1MDU2Nlx1MDU2MVx1MDU3Nlx1MDU4MSBcdTA1ODNcdTA1NzhcdTA1ODRcdTA1ODAgXHUwNTYxXHUwNTgwXHUwNTZBXHUwNTY1XHUwNTg0XHUyMDI0IFx1MDU3RFx1MDU3QVx1MDU2MVx1MDU3RFx1MDU3RVx1MDU3OFx1MDU4Mlx1MDU3NCBcdTA1NjcsIFx1MDU3OFx1MDU4MCAke3dpdGhEZWZpbml0ZUFydGljbGUoaXNzdWUub3JpZ2luKX0gXHUwNTZGXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTY1XHUwNTc2XHUwNTYxICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3VuaXR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDU0OVx1MDU2MVx1MDU4M1x1MDU2MVx1MDU2Nlx1MDU2MVx1MDU3Nlx1MDU4MSBcdTA1ODNcdTA1NzhcdTA1ODRcdTA1ODAgXHUwNTYxXHUwNTgwXHUwNTZBXHUwNTY1XHUwNTg0XHUyMDI0IFx1MDU3RFx1MDU3QVx1MDU2MVx1MDU3RFx1MDU3RVx1MDU3OFx1MDU4Mlx1MDU3NCBcdTA1NjcsIFx1MDU3OFx1MDU4MCAke3dpdGhEZWZpbml0ZUFydGljbGUoaXNzdWUub3JpZ2luKX0gXHUwNTZDXHUwNTZCXHUwNTc2XHUwNTZCICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikgcmV0dXJuIGBcdTA1NERcdTA1NkRcdTA1NjFcdTA1NkMgXHUwNTdGXHUwNTc4XHUwNTcyXHUyMDI0IFx1MDU3QVx1MDU2NVx1MDU3Rlx1MDU4NCBcdTA1NjcgXHUwNTdEXHUwNTZGXHUwNTdEXHUwNTdFXHUwNTZCIFwiJHtfaXNzdWUucHJlZml4fVwiLVx1MDU3OFx1MDU3RWA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSByZXR1cm4gYFx1MDU0RFx1MDU2RFx1MDU2MVx1MDU2QyBcdTA1N0ZcdTA1NzhcdTA1NzJcdTIwMjQgXHUwNTdBXHUwNTY1XHUwNTdGXHUwNTg0IFx1MDU2NyBcdTA1NjFcdTA1N0VcdTA1NjFcdTA1ODBcdTA1N0ZcdTA1N0VcdTA1NkIgXCIke19pc3N1ZS5zdWZmaXh9XCItXHUwNTc4XHUwNTdFYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBcdTA1NERcdTA1NkRcdTA1NjFcdTA1NkMgXHUwNTdGXHUwNTc4XHUwNTcyXHUyMDI0IFx1MDU3QVx1MDU2NVx1MDU3Rlx1MDU4NCBcdTA1NjcgXHUwNTdBXHUwNTYxXHUwNTgwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTYxXHUwNTZGXHUwNTZCIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSByZXR1cm4gYFx1MDU0RFx1MDU2RFx1MDU2MVx1MDU2QyBcdTA1N0ZcdTA1NzhcdTA1NzJcdTIwMjQgXHUwNTdBXHUwNTY1XHUwNTdGXHUwNTg0IFx1MDU2NyBcdTA1NzBcdTA1NjFcdTA1NzRcdTA1NjFcdTA1N0FcdTA1NjFcdTA1N0ZcdTA1NjFcdTA1N0RcdTA1NkRcdTA1NjFcdTA1NzZcdTA1NkIgJHtfaXNzdWUucGF0dGVybn0gXHUwNTcxXHUwNTg3XHUwNTYxXHUwNTc5XHUwNTYxXHUwNTgzXHUwNTZCXHUwNTc2YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA1NERcdTA1NkRcdTA1NjFcdTA1NkMgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDU0RFx1MDU2RFx1MDU2MVx1MDU2QyBcdTA1NjlcdTA1NkJcdTA1N0VcdTIwMjQgXHUwNTdBXHUwNTY1XHUwNTdGXHUwNTg0IFx1MDU2NyBcdTA1NjJcdTA1NjFcdTA1NjZcdTA1NzRcdTA1NjFcdTA1N0FcdTA1NjFcdTA1N0ZcdTA1NkJcdTA1NkYgXHUwNTZDXHUwNTZCXHUwNTc2XHUwNTZCICR7aXNzdWUuZGl2aXNvcn0tXHUwNTZCYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNTQ5XHUwNTczXHUwNTYxXHUwNTc2XHUwNTYxXHUwNTc5XHUwNTdFXHUwNTYxXHUwNTZFIFx1MDU2Mlx1MDU2MVx1MDU3Nlx1MDU2MVx1MDU2Q1x1MDU2QiR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJcdTA1NzZcdTA1NjVcdTA1ODBcIiA6IFwiXCJ9LiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDU0RFx1MDU2RFx1MDU2MVx1MDU2QyBcdTA1NjJcdTA1NjFcdTA1NzZcdTA1NjFcdTA1NkNcdTA1NkIgJHt3aXRoRGVmaW5pdGVBcnRpY2xlKGlzc3VlLm9yaWdpbil9LVx1MDU3OFx1MDU4Mlx1MDU3NGA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlx1MDU0RFx1MDU2RFx1MDU2MVx1MDU2QyBcdTA1NzRcdTA1NzhcdTA1ODJcdTA1N0ZcdTA1ODRcdTA1NjFcdTA1NjNcdTA1ODBcdTA1NzhcdTA1ODJcdTA1NzRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDU0RFx1MDU2RFx1MDU2MVx1MDU2QyBcdTA1NjFcdTA1ODBcdTA1NkFcdTA1NjVcdTA1ODQgJHt3aXRoRGVmaW5pdGVBcnRpY2xlKGlzc3VlLm9yaWdpbil9LVx1MDU3OFx1MDU4Mlx1MDU3NGA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNTREXHUwNTZEXHUwNTYxXHUwNTZDIFx1MDU3NFx1MDU3OFx1MDU4Mlx1MDU3Rlx1MDU4NFx1MDU2MVx1MDU2M1x1MDU4MFx1MDU3OFx1MDU4Mlx1MDU3NGA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwia2FyYWt0ZXJcIixcbiAgICAgICAgICAgIHZlcmI6IFwibWVtaWxpa2lcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJ5dGVcIixcbiAgICAgICAgICAgIHZlcmI6IFwibWVtaWxpa2lcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJpdGVtXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIm1lbWlsaWtpXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcIml0ZW1cIixcbiAgICAgICAgICAgIHZlcmI6IFwibWVtaWxpa2lcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiaW5wdXRcIixcbiAgICAgICAgZW1haWw6IFwiYWxhbWF0IGVtYWlsXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiZW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwidGFuZ2dhbCBkYW4gd2FrdHUgZm9ybWF0IElTT1wiLFxuICAgICAgICBkYXRlOiBcInRhbmdnYWwgZm9ybWF0IElTT1wiLFxuICAgICAgICB0aW1lOiBcImphbSBmb3JtYXQgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcImR1cmFzaSBmb3JtYXQgSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiYWxhbWF0IElQdjRcIixcbiAgICAgICAgaXB2NjogXCJhbGFtYXQgSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwicmVudGFuZyBhbGFtYXQgSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwicmVudGFuZyBhbGFtYXQgSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwic3RyaW5nIGRlbmdhbiBlbmtvZGUgYmFzZTY0XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJzdHJpbmcgZGVuZ2FuIGVua29kZSBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwic3RyaW5nIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJhbmdrYSBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiaW5wdXRcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnB1dCB0aWRhayB2YWxpZDogZGloYXJhcGthbiBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBkaXRlcmltYSAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnB1dCB0aWRhayB2YWxpZDogZGloYXJhcGthbiAke2V4cGVjdGVkfSwgZGl0ZXJpbWEgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgSW5wdXQgdGlkYWsgdmFsaWQ6IGRpaGFyYXBrYW4gJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBQaWxpaGFuIHRpZGFrIHZhbGlkOiBkaWhhcmFwa2FuIHNhbGFoIHNhdHUgZGFyaSAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBUZXJsYWx1IGJlc2FyOiBkaWhhcmFwa2FuICR7aXNzdWUub3JpZ2luID8/IFwidmFsdWVcIn0gbWVtaWxpa2kgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW5cIn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlcmxhbHUgYmVzYXI6IGRpaGFyYXBrYW4gJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2YWx1ZVwifSBtZW5qYWRpICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlcmxhbHUga2VjaWw6IGRpaGFyYXBrYW4gJHtpc3N1ZS5vcmlnaW59IG1lbWlsaWtpICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUZXJsYWx1IGtlY2lsOiBkaWhhcmFwa2FuICR7aXNzdWUub3JpZ2lufSBtZW5qYWRpICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikgcmV0dXJuIGBTdHJpbmcgdGlkYWsgdmFsaWQ6IGhhcnVzIGRpbXVsYWkgZGVuZ2FuIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgU3RyaW5nIHRpZGFrIHZhbGlkOiBoYXJ1cyBiZXJha2hpciBkZW5nYW4gXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYFN0cmluZyB0aWRhayB2YWxpZDogaGFydXMgbWVueWVydGFrYW4gXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgU3RyaW5nIHRpZGFrIHZhbGlkOiBoYXJ1cyBzZXN1YWkgcG9sYSAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH0gdGlkYWsgdmFsaWRgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEFuZ2thIHRpZGFrIHZhbGlkOiBoYXJ1cyBrZWxpcGF0YW4gZGFyaSAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgS3VuY2kgdGlkYWsgZGlrZW5hbGkgJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEt1bmNpIHRpZGFrIHZhbGlkIGRpICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIklucHV0IHRpZGFrIHZhbGlkXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOaWxhaSB0aWRhayB2YWxpZCBkaSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYElucHV0IHRpZGFrIHZhbGlkYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJzdGFmaVwiLFxuICAgICAgICAgICAgdmVyYjogXCJhXHUwMEYwIGhhZmFcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJcdTAwRTZ0aVwiLFxuICAgICAgICAgICAgdmVyYjogXCJhXHUwMEYwIGhhZmFcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJobHV0aVwiLFxuICAgICAgICAgICAgdmVyYjogXCJhXHUwMEYwIGhhZmFcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiaGx1dGlcIixcbiAgICAgICAgICAgIHZlcmI6IFwiYVx1MDBGMCBoYWZhXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImdpbGRpXCIsXG4gICAgICAgIGVtYWlsOiBcIm5ldGZhbmdcIixcbiAgICAgICAgdXJsOiBcInZlZnNsXHUwMEYzXHUwMEYwXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBkYWdzZXRuaW5nIG9nIHRcdTAwRURtaVwiLFxuICAgICAgICBkYXRlOiBcIklTTyBkYWdzZXRuaW5nXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIHRcdTAwRURtaVwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08gdFx1MDBFRG1hbGVuZ2RcIixcbiAgICAgICAgaXB2NDogXCJJUHY0IGFkZHJlc3NcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IGFkZHJlc3NcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgcmFuZ2VcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYgcmFuZ2VcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NC1lbmNvZGVkIHN0cmVuZ3VyXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwtZW5jb2RlZCBzdHJlbmd1clwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIHN0cmVuZ3VyXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQgdFx1MDBGNmx1Z2lsZGlcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcImdpbGRpXCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJuXHUwMEZBbWVyXCIsXG4gICAgICAgIGFycmF5OiBcImZ5bGtpXCJcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpPT57XG4gICAgICAgIHN3aXRjaChpc3N1ZS5jb2RlKXtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgUmFuZ3QgZ2lsZGk6IFx1MDBERVx1MDBGQSBzbFx1MDBGM3N0IGlubiAke3JlY2VpdmVkfSBcdTAwRkVhciBzZW0gXHUwMEUxIGFcdTAwRjAgdmVyYSBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFJhbmd0IGdpbGRpOiBcdTAwREVcdTAwRkEgc2xcdTAwRjNzdCBpbm4gJHtyZWNlaXZlZH0gXHUwMEZFYXIgc2VtIFx1MDBFMSBhXHUwMEYwIHZlcmEgJHtleHBlY3RlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgUmFuZ3QgZ2lsZGk6IGdlcnQgclx1MDBFMVx1MDBGMCBmeXJpciAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDBEM2dpbHQgdmFsOiBtXHUwMEUxIHZlcmEgZWl0dCBhZiBlZnRpcmZhcmFuZGkgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHJldHVybiBgT2Ygc3RcdTAwRjNydDogZ2VydCBlciByXHUwMEUxXHUwMEYwIGZ5cmlyIGFcdTAwRjAgJHtpc3N1ZS5vcmlnaW4gPz8gXCJnaWxkaVwifSBoYWZpICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiaGx1dGlcIn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE9mIHN0XHUwMEYzcnQ6IGdlcnQgZXIgclx1MDBFMVx1MDBGMCBmeXJpciBhXHUwMEYwICR7aXNzdWUub3JpZ2luID8/IFwiZ2lsZGlcIn0gc1x1MDBFOSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBPZiBsXHUwMEVEdGlcdTAwRjA6IGdlcnQgZXIgclx1MDBFMVx1MDBGMCBmeXJpciBhXHUwMEYwICR7aXNzdWUub3JpZ2lufSBoYWZpICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBPZiBsXHUwMEVEdGlcdTAwRjA6IGdlcnQgZXIgclx1MDBFMVx1MDBGMCBmeXJpciBhXHUwMEYwICR7aXNzdWUub3JpZ2lufSBzXHUwMEU5ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTAwRDNnaWxkdXIgc3RyZW5ndXI6IHZlclx1MDBGMHVyIGFcdTAwRjAgYnlyamEgXHUwMEUxIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBcdTAwRDNnaWxkdXIgc3RyZW5ndXI6IHZlclx1MDBGMHVyIGFcdTAwRjAgZW5kYSBcdTAwRTEgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYFx1MDBEM2dpbGR1ciBzdHJlbmd1cjogdmVyXHUwMEYwdXIgYVx1MDBGMCBpbm5paGFsZGEgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgXHUwMEQzZ2lsZHVyIHN0cmVuZ3VyOiB2ZXJcdTAwRjB1ciBhXHUwMEYwIGZ5bGdqYSBteW5zdHJpICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBSYW5ndCAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgUlx1MDBGNm5nIHRhbGE6IHZlclx1MDBGMHVyIGFcdTAwRjAgdmVyYSBtYXJnZmVsZGkgYWYgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDBEM1x1MDBGRWVra3QgJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcImlyIGx5a2xhclwiIDogXCJ1ciBseWtpbGxcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgUmFuZ3VyIGx5a2lsbCBcdTAwRUQgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUmFuZ3QgZ2lsZGlcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFJhbmd0IGdpbGRpIFx1MDBFRCAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFJhbmd0IGdpbGRpYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJjYXJhdHRlcmlcIixcbiAgICAgICAgICAgIHZlcmI6IFwiYXZlcmVcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJ5dGVcIixcbiAgICAgICAgICAgIHZlcmI6IFwiYXZlcmVcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW50aVwiLFxuICAgICAgICAgICAgdmVyYjogXCJhdmVyZVwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW50aVwiLFxuICAgICAgICAgICAgdmVyYjogXCJhdmVyZVwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJpbnB1dFwiLFxuICAgICAgICBlbWFpbDogXCJpbmRpcml6em8gZW1haWxcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJkYXRhIGUgb3JhIElTT1wiLFxuICAgICAgICBkYXRlOiBcImRhdGEgSVNPXCIsXG4gICAgICAgIHRpbWU6IFwib3JhIElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJkdXJhdGEgSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiaW5kaXJpenpvIElQdjRcIixcbiAgICAgICAgaXB2NjogXCJpbmRpcml6em8gSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwiaW50ZXJ2YWxsbyBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJpbnRlcnZhbGxvIElQdjZcIixcbiAgICAgICAgYmFzZTY0OiBcInN0cmluZ2EgY29kaWZpY2F0YSBpbiBiYXNlNjRcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcIlVSTCBjb2RpZmljYXRhIGluIGJhc2U2NFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJzdHJpbmdhIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJudW1lcm8gRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcImlucHV0XCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJudW1lcm9cIixcbiAgICAgICAgYXJyYXk6IFwidmV0dG9yZVwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYElucHV0IG5vbiB2YWxpZG86IGF0dGVzbyBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCByaWNldnV0byAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnB1dCBub24gdmFsaWRvOiBhdHRlc28gJHtleHBlY3RlZH0sIHJpY2V2dXRvICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYElucHV0IG5vbiB2YWxpZG86IGF0dGVzbyAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9wemlvbmUgbm9uIHZhbGlkYTogYXR0ZXNvIHVubyB0cmEgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHJldHVybiBgVHJvcHBvIGdyYW5kZTogJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2YWxvcmVcIn0gZGV2ZSBhdmVyZSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRpXCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUcm9wcG8gZ3JhbmRlOiAke2lzc3VlLm9yaWdpbiA/PyBcInZhbG9yZVwifSBkZXZlIGVzc2VyZSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUcm9wcG8gcGljY29sbzogJHtpc3N1ZS5vcmlnaW59IGRldmUgYXZlcmUgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRyb3BwbyBwaWNjb2xvOiAke2lzc3VlLm9yaWdpbn0gZGV2ZSBlc3NlcmUgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSByZXR1cm4gYFN0cmluZ2Egbm9uIHZhbGlkYTogZGV2ZSBpbml6aWFyZSBjb24gXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBTdHJpbmdhIG5vbiB2YWxpZGE6IGRldmUgdGVybWluYXJlIGNvbiBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgU3RyaW5nYSBub24gdmFsaWRhOiBkZXZlIGluY2x1ZGVyZSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBTdHJpbmdhIG5vbiB2YWxpZGE6IGRldmUgY29ycmlzcG9uZGVyZSBhbCBwYXR0ZXJuICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBJbnZhbGlkICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOdW1lcm8gbm9uIHZhbGlkbzogZGV2ZSBlc3NlcmUgdW4gbXVsdGlwbG8gZGkgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYENoaWF2JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcImlcIiA6IFwiZVwifSBub24gcmljb25vc2NpdXQke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiZVwiIDogXCJhXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYENoaWF2ZSBub24gdmFsaWRhIGluICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIklucHV0IG5vbiB2YWxpZG9cIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFZhbG9yZSBub24gdmFsaWRvIGluICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgSW5wdXQgbm9uIHZhbGlkb2A7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHU2NTg3XHU1QjU3XCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MzA2N1x1MzA0Mlx1MzA4QlwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUzMEQwXHUzMEE0XHUzMEM4XCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MzA2N1x1MzA0Mlx1MzA4QlwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1ODk4MVx1N0QyMFwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTMwNjdcdTMwNDJcdTMwOEJcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHU4OTgxXHU3RDIwXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MzA2N1x1MzA0Mlx1MzA4QlwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJcdTUxNjVcdTUyOUJcdTUwMjRcIixcbiAgICAgICAgZW1haWw6IFwiXHUzMEUxXHUzMEZDXHUzMEVCXHUzMEEyXHUzMEM5XHUzMEVDXHUzMEI5XCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiXHU3RDc1XHU2NTg3XHU1QjU3XCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTT1x1NjVFNVx1NjY0MlwiLFxuICAgICAgICBkYXRlOiBcIklTT1x1NjVFNVx1NEVEOFwiLFxuICAgICAgICB0aW1lOiBcIklTT1x1NjY0Mlx1NTIzQlwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU09cdTY3MUZcdTk1OTNcIixcbiAgICAgICAgaXB2NDogXCJJUHY0XHUzMEEyXHUzMEM5XHUzMEVDXHUzMEI5XCIsXG4gICAgICAgIGlwdjY6IFwiSVB2Nlx1MzBBMlx1MzBDOVx1MzBFQ1x1MzBCOVwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NFx1N0JDNFx1NTZGMlwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2Nlx1N0JDNFx1NTZGMlwiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0XHUzMEE4XHUzMEYzXHUzMEIzXHUzMEZDXHUzMEM5XHU2NTg3XHU1QjU3XHU1MjE3XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmxcdTMwQThcdTMwRjNcdTMwQjNcdTMwRkNcdTMwQzlcdTY1ODdcdTVCNTdcdTUyMTdcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTlx1NjU4N1x1NUI1N1x1NTIxN1wiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0XHU3NTZBXHU1M0Y3XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJcdTUxNjVcdTUyOUJcdTUwMjRcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIlx1NjU3MFx1NTAyNFwiLFxuICAgICAgICBhcnJheTogXCJcdTkxNERcdTUyMTdcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTcxMjFcdTUyQjlcdTMwNkFcdTUxNjVcdTUyOUI6IGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH1cdTMwNENcdTY3MUZcdTVGODVcdTMwNTVcdTMwOENcdTMwN0VcdTMwNTdcdTMwNUZcdTMwNENcdTMwMDEke3JlY2VpdmVkfVx1MzA0Q1x1NTE2NVx1NTI5Qlx1MzA1NVx1MzA4Q1x1MzA3RVx1MzA1N1x1MzA1RmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTcxMjFcdTUyQjlcdTMwNkFcdTUxNjVcdTUyOUI6ICR7ZXhwZWN0ZWR9XHUzMDRDXHU2NzFGXHU1Rjg1XHUzMDU1XHUzMDhDXHUzMDdFXHUzMDU3XHUzMDVGXHUzMDRDXHUzMDAxJHtyZWNlaXZlZH1cdTMwNENcdTUxNjVcdTUyOUJcdTMwNTVcdTMwOENcdTMwN0VcdTMwNTdcdTMwNUZgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgXHU3MTIxXHU1MkI5XHUzMDZBXHU1MTY1XHU1MjlCOiAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9XHUzMDRDXHU2NzFGXHU1Rjg1XHUzMDU1XHUzMDhDXHUzMDdFXHUzMDU3XHUzMDVGYDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1NzEyMVx1NTJCOVx1MzA2QVx1OTA3OFx1NjI5RTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcIlx1MzAwMVwiKX1cdTMwNkVcdTMwNDRcdTMwNUFcdTMwOENcdTMwNEJcdTMwNjdcdTMwNDJcdTMwOEJcdTVGQzVcdTg5ODFcdTMwNENcdTMwNDJcdTMwOEFcdTMwN0VcdTMwNTlgO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiXHU0RUU1XHU0RTBCXHUzMDY3XHUzMDQyXHUzMDhCXCIgOiBcIlx1MzA4OFx1MzA4QVx1NUMwRlx1MzA1NVx1MzA0NFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBcdTU5MjdcdTMwNERcdTMwNTlcdTMwNEVcdTMwOEJcdTUwMjQ6ICR7aXNzdWUub3JpZ2luID8/IFwiXHU1MDI0XCJ9XHUzMDZGJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9JHtzaXppbmcudW5pdCA/PyBcIlx1ODk4MVx1N0QyMFwifSR7YWRqfVx1NUZDNVx1ODk4MVx1MzA0Q1x1MzA0Mlx1MzA4QVx1MzA3RVx1MzA1OWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHU1OTI3XHUzMDREXHUzMDU5XHUzMDRFXHUzMDhCXHU1MDI0OiAke2lzc3VlLm9yaWdpbiA/PyBcIlx1NTAyNFwifVx1MzA2RiR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSR7YWRqfVx1NUZDNVx1ODk4MVx1MzA0Q1x1MzA0Mlx1MzA4QVx1MzA3RVx1MzA1OWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCJcdTRFRTVcdTRFMEFcdTMwNjdcdTMwNDJcdTMwOEJcIiA6IFwiXHUzMDg4XHUzMDhBXHU1OTI3XHUzMDREXHUzMDQ0XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYFx1NUMwRlx1MzA1NVx1MzA1OVx1MzA0RVx1MzA4Qlx1NTAyNDogJHtpc3N1ZS5vcmlnaW59XHUzMDZGJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9JHtzaXppbmcudW5pdH0ke2Fkan1cdTVGQzVcdTg5ODFcdTMwNENcdTMwNDJcdTMwOEFcdTMwN0VcdTMwNTlgO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1NUMwRlx1MzA1NVx1MzA1OVx1MzA0RVx1MzA4Qlx1NTAyNDogJHtpc3N1ZS5vcmlnaW59XHUzMDZGJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9JHthZGp9XHU1RkM1XHU4OTgxXHUzMDRDXHUzMDQyXHUzMDhBXHUzMDdFXHUzMDU5YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSByZXR1cm4gYFx1NzEyMVx1NTJCOVx1MzA2QVx1NjU4N1x1NUI1N1x1NTIxNzogXCIke19pc3N1ZS5wcmVmaXh9XCJcdTMwNjdcdTU5Q0JcdTMwN0VcdTMwOEJcdTVGQzVcdTg5ODFcdTMwNENcdTMwNDJcdTMwOEFcdTMwN0VcdTMwNTlgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBcdTcxMjFcdTUyQjlcdTMwNkFcdTY1ODdcdTVCNTdcdTUyMTc6IFwiJHtfaXNzdWUuc3VmZml4fVwiXHUzMDY3XHU3RDQyXHUzMDhGXHUzMDhCXHU1RkM1XHU4OTgxXHUzMDRDXHUzMDQyXHUzMDhBXHUzMDdFXHUzMDU5YDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBcdTcxMjFcdTUyQjlcdTMwNkFcdTY1ODdcdTVCNTdcdTUyMTc6IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJcdTMwOTJcdTU0MkJcdTMwODBcdTVGQzVcdTg5ODFcdTMwNENcdTMwNDJcdTMwOEFcdTMwN0VcdTMwNTlgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSByZXR1cm4gYFx1NzEyMVx1NTJCOVx1MzA2QVx1NjU4N1x1NUI1N1x1NTIxNzogXHUzMEQxXHUzMEJGXHUzMEZDXHUzMEYzJHtfaXNzdWUucGF0dGVybn1cdTMwNkJcdTRFMDBcdTgxRjRcdTMwNTlcdTMwOEJcdTVGQzVcdTg5ODFcdTMwNENcdTMwNDJcdTMwOEFcdTMwN0VcdTMwNTlgO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1NzEyMVx1NTJCOVx1MzA2QSR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTcxMjFcdTUyQjlcdTMwNkFcdTY1NzBcdTUwMjQ6ICR7aXNzdWUuZGl2aXNvcn1cdTMwNkVcdTUwMERcdTY1NzBcdTMwNjdcdTMwNDJcdTMwOEJcdTVGQzVcdTg5ODFcdTMwNENcdTMwNDJcdTMwOEFcdTMwN0VcdTMwNTlgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdThBOERcdThCNThcdTMwNTVcdTMwOENcdTMwNjZcdTMwNDRcdTMwNkFcdTMwNDRcdTMwQURcdTMwRkMke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiXHU3RkE0XCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCJcdTMwMDFcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59XHU1MTg1XHUzMDZFXHU3MTIxXHU1MkI5XHUzMDZBXHUzMEFEXHUzMEZDYDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXHU3MTIxXHU1MkI5XHUzMDZBXHU1MTY1XHU1MjlCXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbn1cdTUxODVcdTMwNkVcdTcxMjFcdTUyQjlcdTMwNkFcdTUwMjRgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1NzEyMVx1NTJCOVx1MzA2QVx1NTE2NVx1NTI5QmA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUxMEUxXHUxMEQ4XHUxMERCXHUxMEQxXHUxMEREXHUxMERBXHUxMEREXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MTBFM1x1MTBEQ1x1MTBEM1x1MTBEMCBcdTEwRThcdTEwRDRcdTEwRDhcdTEwRUFcdTEwRDBcdTEwRDVcdTEwRDNcdTEwRDRcdTEwRTFcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MTBEMVx1MTBEMFx1MTBEOFx1MTBFMlx1MTBEOFwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTEwRTNcdTEwRENcdTEwRDNcdTEwRDAgXHUxMEU4XHUxMEQ0XHUxMEQ4XHUxMEVBXHUxMEQwXHUxMEQ1XHUxMEQzXHUxMEQ0XHUxMEUxXCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUxMEQ0XHUxMERBXHUxMEQ0XHUxMERCXHUxMEQ0XHUxMERDXHUxMEUyXHUxMEQ4XCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MTBFM1x1MTBEQ1x1MTBEM1x1MTBEMCBcdTEwRThcdTEwRDRcdTEwRDhcdTEwRUFcdTEwRDBcdTEwRDVcdTEwRDNcdTEwRDRcdTEwRTFcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUxMEQ0XHUxMERBXHUxMEQ0XHUxMERCXHUxMEQ0XHUxMERDXHUxMEUyXHUxMEQ4XCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MTBFM1x1MTBEQ1x1MTBEM1x1MTBEMCBcdTEwRThcdTEwRDRcdTEwRDhcdTEwRUFcdTEwRDBcdTEwRDVcdTEwRDNcdTEwRDRcdTEwRTFcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiXHUxMEU4XHUxMEQ0XHUxMEU3XHUxMEQ1XHUxMEQwXHUxMERDXHUxMEQwXCIsXG4gICAgICAgIGVtYWlsOiBcIlx1MTBENFx1MTBEQS1cdTEwRTRcdTEwRERcdTEwRTFcdTEwRTJcdTEwRDhcdTEwRTEgXHUxMERCXHUxMEQ4XHUxMEUxXHUxMEQwXHUxMERCXHUxMEQwXHUxMEUwXHUxMEQ3XHUxMEQ4XCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiXHUxMEQ0XHUxMERCXHUxMEREXHUxMEVGXHUxMEQ4XCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIlx1MTBEN1x1MTBEMFx1MTBFMFx1MTBEOFx1MTBFNlx1MTBEOC1cdTEwRDNcdTEwRTBcdTEwRERcIixcbiAgICAgICAgZGF0ZTogXCJcdTEwRDdcdTEwRDBcdTEwRTBcdTEwRDhcdTEwRTZcdTEwRDhcIixcbiAgICAgICAgdGltZTogXCJcdTEwRDNcdTEwRTBcdTEwRERcIixcbiAgICAgICAgZHVyYXRpb246IFwiXHUxMEVFXHUxMEQwXHUxMERDXHUxMEQyXHUxMEUwXHUxMEVCXHUxMERBXHUxMEQ4XHUxMEQ1XHUxMEREXHUxMEQxXHUxMEQwXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCBcdTEwREJcdTEwRDhcdTEwRTFcdTEwRDBcdTEwREJcdTEwRDBcdTEwRTBcdTEwRDdcdTEwRDhcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IFx1MTBEQlx1MTBEOFx1MTBFMVx1MTBEMFx1MTBEQlx1MTBEMFx1MTBFMFx1MTBEN1x1MTBEOFwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NCBcdTEwRDNcdTEwRDhcdTEwRDBcdTEwREVcdTEwRDBcdTEwRDZcdTEwRERcdTEwRENcdTEwRDhcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYgXHUxMEQzXHUxMEQ4XHUxMEQwXHUxMERFXHUxMEQwXHUxMEQ2XHUxMEREXHUxMERDXHUxMEQ4XCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtXHUxMEQ5XHUxMEREXHUxMEQzXHUxMEQ4XHUxMEUwXHUxMEQ0XHUxMEQxXHUxMEUzXHUxMERBXHUxMEQ4IFx1MTBFMVx1MTBFMlx1MTBFMFx1MTBEOFx1MTBEQ1x1MTBEMlx1MTBEOFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsLVx1MTBEOVx1MTBERFx1MTBEM1x1MTBEOFx1MTBFMFx1MTBENFx1MTBEMVx1MTBFM1x1MTBEQVx1MTBEOCBcdTEwRTFcdTEwRTJcdTEwRTBcdTEwRDhcdTEwRENcdTEwRDJcdTEwRDhcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiBcdTEwRTFcdTEwRTJcdTEwRTBcdTEwRDhcdTEwRENcdTEwRDJcdTEwRDhcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NCBcdTEwRENcdTEwRERcdTEwREJcdTEwRDRcdTEwRTBcdTEwRDhcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIlx1MTBFOFx1MTBENFx1MTBFN1x1MTBENVx1MTBEMFx1MTBEQ1x1MTBEMFwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwiXHUxMEUwXHUxMEQ4XHUxMEVBXHUxMEVFXHUxMEQ1XHUxMEQ4XCIsXG4gICAgICAgIHN0cmluZzogXCJcdTEwRTFcdTEwRTJcdTEwRTBcdTEwRDhcdTEwRENcdTEwRDJcdTEwRDhcIixcbiAgICAgICAgYm9vbGVhbjogXCJcdTEwRDFcdTEwRTNcdTEwREFcdTEwRDRcdTEwRDBcdTEwRENcdTEwRDhcIixcbiAgICAgICAgZnVuY3Rpb246IFwiXHUxMEU0XHUxMEUzXHUxMERDXHUxMEU1XHUxMEVBXHUxMEQ4XHUxMEQwXCIsXG4gICAgICAgIGFycmF5OiBcIlx1MTBEQlx1MTBEMFx1MTBFMVx1MTBEOFx1MTBENVx1MTBEOFwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MTBEMFx1MTBFMFx1MTBEMFx1MTBFMVx1MTBFQ1x1MTBERFx1MTBFMFx1MTBEOCBcdTEwRThcdTEwRDRcdTEwRTdcdTEwRDVcdTEwRDBcdTEwRENcdTEwRDA6IFx1MTBEQlx1MTBERFx1MTBFMVx1MTBEMFx1MTBEQVx1MTBERFx1MTBEM1x1MTBEQ1x1MTBENFx1MTBEQVx1MTBEOCBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBcdTEwREJcdTEwRDhcdTEwRTZcdTEwRDRcdTEwRDFcdTEwRTNcdTEwREFcdTEwRDggJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUxMEQwXHUxMEUwXHUxMEQwXHUxMEUxXHUxMEVDXHUxMEREXHUxMEUwXHUxMEQ4IFx1MTBFOFx1MTBENFx1MTBFN1x1MTBENVx1MTBEMFx1MTBEQ1x1MTBEMDogXHUxMERCXHUxMEREXHUxMEUxXHUxMEQwXHUxMERBXHUxMEREXHUxMEQzXHUxMERDXHUxMEQ0XHUxMERBXHUxMEQ4ICR7ZXhwZWN0ZWR9LCBcdTEwREJcdTEwRDhcdTEwRTZcdTEwRDRcdTEwRDFcdTEwRTNcdTEwREFcdTEwRDggJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgXHUxMEQwXHUxMEUwXHUxMEQwXHUxMEUxXHUxMEVDXHUxMEREXHUxMEUwXHUxMEQ4IFx1MTBFOFx1MTBENFx1MTBFN1x1MTBENVx1MTBEMFx1MTBEQ1x1MTBEMDogXHUxMERCXHUxMEREXHUxMEUxXHUxMEQwXHUxMERBXHUxMEREXHUxMEQzXHUxMERDXHUxMEQ0XHUxMERBXHUxMEQ4ICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgXHUxMEQwXHUxMEUwXHUxMEQwXHUxMEUxXHUxMEVDXHUxMEREXHUxMEUwXHUxMEQ4IFx1MTBENVx1MTBEMFx1MTBFMFx1MTBEOFx1MTBEMFx1MTBEQ1x1MTBFMlx1MTBEODogXHUxMERCXHUxMEREXHUxMEUxXHUxMEQwXHUxMERBXHUxMEREXHUxMEQzXHUxMERDXHUxMEQ0XHUxMERBXHUxMEQ4XHUxMEQwIFx1MTBENFx1MTBFMFx1MTBENy1cdTEwRDRcdTEwRTBcdTEwRDdcdTEwRDggJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9LVx1MTBEM1x1MTBEMFx1MTBEQ2A7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYFx1MTBENlx1MTBENFx1MTBEM1x1MTBEQlx1MTBENFx1MTBFMlx1MTBEMFx1MTBEMyBcdTEwRDNcdTEwRDhcdTEwRDNcdTEwRDg6IFx1MTBEQlx1MTBERFx1MTBFMVx1MTBEMFx1MTBEQVx1MTBERFx1MTBEM1x1MTBEQ1x1MTBENFx1MTBEQVx1MTBEOCAke2lzc3VlLm9yaWdpbiA/PyBcIlx1MTBEQlx1MTBEQ1x1MTBEOFx1MTBFOFx1MTBENVx1MTBEQ1x1MTBENFx1MTBEQVx1MTBERFx1MTBEMVx1MTBEMFwifSAke3NpemluZy52ZXJifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MTBENlx1MTBENFx1MTBEM1x1MTBEQlx1MTBENFx1MTBFMlx1MTBEMFx1MTBEMyBcdTEwRDNcdTEwRDhcdTEwRDNcdTEwRDg6IFx1MTBEQlx1MTBERFx1MTBFMVx1MTBEMFx1MTBEQVx1MTBERFx1MTBEM1x1MTBEQ1x1MTBENFx1MTBEQVx1MTBEOCAke2lzc3VlLm9yaWdpbiA/PyBcIlx1MTBEQlx1MTBEQ1x1MTBEOFx1MTBFOFx1MTBENVx1MTBEQ1x1MTBENFx1MTBEQVx1MTBERFx1MTBEMVx1MTBEMFwifSBcdTEwRDhcdTEwRTdcdTEwRERcdTEwRTEgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUxMEQ2XHUxMEQ0XHUxMEQzXHUxMERCXHUxMEQ0XHUxMEUyXHUxMEQwXHUxMEQzIFx1MTBERVx1MTBEMFx1MTBFMlx1MTBEMFx1MTBFMFx1MTBEMDogXHUxMERCXHUxMEREXHUxMEUxXHUxMEQwXHUxMERBXHUxMEREXHUxMEQzXHUxMERDXHUxMEQ0XHUxMERBXHUxMEQ4ICR7aXNzdWUub3JpZ2lufSAke3NpemluZy52ZXJifSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUxMEQ2XHUxMEQ0XHUxMEQzXHUxMERCXHUxMEQ0XHUxMEUyXHUxMEQwXHUxMEQzIFx1MTBERVx1MTBEMFx1MTBFMlx1MTBEMFx1MTBFMFx1MTBEMDogXHUxMERCXHUxMEREXHUxMEUxXHUxMEQwXHUxMERBXHUxMEREXHUxMEQzXHUxMERDXHUxMEQ0XHUxMERBXHUxMEQ4ICR7aXNzdWUub3JpZ2lufSBcdTEwRDhcdTEwRTdcdTEwRERcdTEwRTEgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MTBEMFx1MTBFMFx1MTBEMFx1MTBFMVx1MTBFQ1x1MTBERFx1MTBFMFx1MTBEOCBcdTEwRTFcdTEwRTJcdTEwRTBcdTEwRDhcdTEwRENcdTEwRDJcdTEwRDg6IFx1MTBFM1x1MTBEQ1x1MTBEM1x1MTBEMCBcdTEwRDhcdTEwRUNcdTEwRTdcdTEwRDRcdTEwRDFcdTEwRERcdTEwRDNcdTEwRDRcdTEwRTEgXCIke19pc3N1ZS5wcmVmaXh9XCItXHUxMEQ4XHUxMEQ3YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBcdTEwRDBcdTEwRTBcdTEwRDBcdTEwRTFcdTEwRUNcdTEwRERcdTEwRTBcdTEwRDggXHUxMEUxXHUxMEUyXHUxMEUwXHUxMEQ4XHUxMERDXHUxMEQyXHUxMEQ4OiBcdTEwRTNcdTEwRENcdTEwRDNcdTEwRDAgXHUxMERCXHUxMEQ3XHUxMEQwXHUxMEQ1XHUxMEUwXHUxMEQzXHUxMEQ0XHUxMEQxXHUxMEREXHUxMEQzXHUxMEQ0XHUxMEUxIFwiJHtfaXNzdWUuc3VmZml4fVwiLVx1MTBEOFx1MTBEN2A7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgXHUxMEQwXHUxMEUwXHUxMEQwXHUxMEUxXHUxMEVDXHUxMEREXHUxMEUwXHUxMEQ4IFx1MTBFMVx1MTBFMlx1MTBFMFx1MTBEOFx1MTBEQ1x1MTBEMlx1MTBEODogXHUxMEUzXHUxMERDXHUxMEQzXHUxMEQwIFx1MTBFOFx1MTBENFx1MTBEOFx1MTBFQVx1MTBEMFx1MTBENVx1MTBEM1x1MTBENFx1MTBFMSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiLVx1MTBFMWA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgXHUxMEQwXHUxMEUwXHUxMEQwXHUxMEUxXHUxMEVDXHUxMEREXHUxMEUwXHUxMEQ4IFx1MTBFMVx1MTBFMlx1MTBFMFx1MTBEOFx1MTBEQ1x1MTBEMlx1MTBEODogXHUxMEUzXHUxMERDXHUxMEQzXHUxMEQwIFx1MTBFOFx1MTBENFx1MTBENFx1MTBFMVx1MTBEMFx1MTBEMVx1MTBEMFx1MTBEQlx1MTBENFx1MTBEMVx1MTBERFx1MTBEM1x1MTBENFx1MTBFMSBcdTEwRThcdTEwRDBcdTEwRDFcdTEwREFcdTEwRERcdTEwRENcdTEwRTEgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MTBEMFx1MTBFMFx1MTBEMFx1MTBFMVx1MTBFQ1x1MTBERFx1MTBFMFx1MTBEOCAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUxMEQwXHUxMEUwXHUxMEQwXHUxMEUxXHUxMEVDXHUxMEREXHUxMEUwXHUxMEQ4IFx1MTBFMFx1MTBEOFx1MTBFQVx1MTBFRVx1MTBENVx1MTBEODogXHUxMEUzXHUxMERDXHUxMEQzXHUxMEQwIFx1MTBEOFx1MTBFN1x1MTBERFx1MTBFMSAke2lzc3VlLmRpdmlzb3J9LVx1MTBEOFx1MTBFMSBcdTEwRUZcdTEwRDRcdTEwRTBcdTEwRDBcdTEwRDNcdTEwRDhgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTEwRTNcdTEwRUFcdTEwRENcdTEwRERcdTEwRDFcdTEwRDggXHUxMEQyXHUxMEQwXHUxMEUxXHUxMEQwXHUxMEU2XHUxMEQ0XHUxMEQxJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlx1MTBENFx1MTBEMVx1MTBEOFwiIDogXCJcdTEwRDhcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUxMEQwXHUxMEUwXHUxMEQwXHUxMEUxXHUxMEVDXHUxMEREXHUxMEUwXHUxMEQ4IFx1MTBEMlx1MTBEMFx1MTBFMVx1MTBEMFx1MTBFNlx1MTBENFx1MTBEMVx1MTBEOCAke2lzc3VlLm9yaWdpbn0tXHUxMEU4XHUxMEQ4YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXHUxMEQwXHUxMEUwXHUxMEQwXHUxMEUxXHUxMEVDXHUxMEREXHUxMEUwXHUxMEQ4IFx1MTBFOFx1MTBENFx1MTBFN1x1MTBENVx1MTBEMFx1MTBEQ1x1MTBEMFwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUxMEQwXHUxMEUwXHUxMEQwXHUxMEUxXHUxMEVDXHUxMEREXHUxMEUwXHUxMEQ4IFx1MTBEQlx1MTBEQ1x1MTBEOFx1MTBFOFx1MTBENVx1MTBEQ1x1MTBENFx1MTBEQVx1MTBERFx1MTBEMVx1MTBEMCAke2lzc3VlLm9yaWdpbn0tXHUxMEU4XHUxMEQ4YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTEwRDBcdTEwRTBcdTEwRDBcdTEwRTFcdTEwRUNcdTEwRERcdTEwRTBcdTEwRDggXHUxMEU4XHUxMEQ0XHUxMEU3XHUxMEQ1XHUxMEQwXHUxMERDXHUxMEQwYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJcdTE3OEZcdTE3QkRcdTE3QTJcdTE3ODBcdTE3RDJcdTE3OUZcdTE3OUFcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUxNzgyXHUxN0JEXHUxNzlBXHUxNzk4XHUxN0I2XHUxNzkzXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJcdTE3OTRcdTE3QzNcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUxNzgyXHUxN0JEXHUxNzlBXHUxNzk4XHUxN0I2XHUxNzkzXCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUxNzkyXHUxN0I2XHUxNzhGXHUxN0JCXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MTc4Mlx1MTdCRFx1MTc5QVx1MTc5OFx1MTdCNlx1MTc5M1wiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJcdTE3OTJcdTE3QjZcdTE3OEZcdTE3QkJcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUxNzgyXHUxN0JEXHUxNzlBXHUxNzk4XHUxN0I2XHUxNzkzXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIlx1MTc5MVx1MTdCN1x1MTc5M1x1MTdEMlx1MTc5M1x1MTc5M1x1MTdEMFx1MTc5OVx1MTc5NFx1MTc4OVx1MTdEMlx1MTc4NVx1MTdCQ1x1MTc5QlwiLFxuICAgICAgICBlbWFpbDogXCJcdTE3QTJcdTE3QjZcdTE3OUZcdTE3OTlcdTE3OEFcdTE3RDJcdTE3OEJcdTE3QjZcdTE3OTNcdTE3QTJcdTE3Q0FcdTE3QjhcdTE3OThcdTE3QzJcdTE3OUJcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJcdTE3OUZcdTE3ODlcdTE3RDJcdTE3ODlcdTE3QjZcdTE3QTJcdTE3QjZcdTE3OUFcdTE3OThcdTE3RDJcdTE3OThcdTE3OEVcdTE3Q0RcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiXHUxNzgwXHUxN0I2XHUxNzlCXHUxNzk0XHUxNzlBXHUxN0I3XHUxNzg1XHUxN0QyXHUxNzg2XHUxN0MxXHUxNzkxIFx1MTc5M1x1MTdCN1x1MTc4NFx1MTc5OFx1MTdDOVx1MTdDNFx1MTc4NCBJU09cIixcbiAgICAgICAgZGF0ZTogXCJcdTE3ODBcdTE3QjZcdTE3OUJcdTE3OTRcdTE3OUFcdTE3QjdcdTE3ODVcdTE3RDJcdTE3ODZcdTE3QzFcdTE3OTEgSVNPXCIsXG4gICAgICAgIHRpbWU6IFwiXHUxNzk4XHUxN0M5XHUxN0M0XHUxNzg0IElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJcdTE3OUFcdTE3OTlcdTE3QzhcdTE3OTZcdTE3QzFcdTE3OUIgSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiXHUxN0EyXHUxN0I2XHUxNzlGXHUxNzk5XHUxNzhBXHUxN0QyXHUxNzhCXHUxN0I2XHUxNzkzIElQdjRcIixcbiAgICAgICAgaXB2NjogXCJcdTE3QTJcdTE3QjZcdTE3OUZcdTE3OTlcdTE3OEFcdTE3RDJcdTE3OEJcdTE3QjZcdTE3OTMgSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwiXHUxNzhBXHUxN0MyXHUxNzkzXHUxN0EyXHUxN0I2XHUxNzlGXHUxNzk5XHUxNzhBXHUxN0QyXHUxNzhCXHUxN0I2XHUxNzkzIElQdjRcIixcbiAgICAgICAgY2lkcnY2OiBcIlx1MTc4QVx1MTdDMlx1MTc5M1x1MTdBMlx1MTdCNlx1MTc5Rlx1MTc5OVx1MTc4QVx1MTdEMlx1MTc4Qlx1MTdCNlx1MTc5MyBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCJcdTE3ODFcdTE3RDJcdTE3OUZcdTE3QzJcdTE3QTJcdTE3ODBcdTE3RDJcdTE3OUZcdTE3OUFcdTE3QTJcdTE3Q0FcdTE3QjdcdTE3ODBcdTE3QkNcdTE3OEEgYmFzZTY0XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJcdTE3ODFcdTE3RDJcdTE3OUZcdTE3QzJcdTE3QTJcdTE3ODBcdTE3RDJcdTE3OUZcdTE3OUFcdTE3QTJcdTE3Q0FcdTE3QjdcdTE3ODBcdTE3QkNcdTE3OEEgYmFzZTY0dXJsXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIlx1MTc4MVx1MTdEMlx1MTc5Rlx1MTdDMlx1MTdBMlx1MTc4MFx1MTdEMlx1MTc5Rlx1MTc5QSBKU09OXCIsXG4gICAgICAgIGUxNjQ6IFwiXHUxNzlCXHUxN0MxXHUxNzgxIEUuMTY0XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJcdTE3OTFcdTE3QjdcdTE3OTNcdTE3RDJcdTE3OTNcdTE3OTNcdTE3RDBcdTE3OTlcdTE3OTRcdTE3ODlcdTE3RDJcdTE3ODVcdTE3QkNcdTE3OUJcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIlx1MTc5Qlx1MTdDMVx1MTc4MVwiLFxuICAgICAgICBhcnJheTogXCJcdTE3QTJcdTE3QjZcdTE3OUFcdTE3QzEgKEFycmF5KVwiLFxuICAgICAgICBudWxsOiBcIlx1MTc4Mlx1MTdEMlx1MTc5OFx1MTdCNlx1MTc5M1x1MTc4Rlx1MTc5OFx1MTdEMlx1MTc5Qlx1MTdDMyAobnVsbClcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTE3OTFcdTE3QjdcdTE3OTNcdTE3RDJcdTE3OTNcdTE3OTNcdTE3RDBcdTE3OTlcdTE3OTRcdTE3ODlcdTE3RDJcdTE3ODVcdTE3QkNcdTE3OUJcdTE3OThcdTE3QjdcdTE3OTNcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QjlcdTE3OThcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QkNcdTE3OUNcdTE3RDYgXHUxNzhGXHUxN0QyXHUxNzlBXHUxN0JDXHUxNzlDXHUxNzgwXHUxN0I2XHUxNzlBIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0gXHUxNzk0XHUxN0M5XHUxN0JCXHUxNzkzXHUxN0QyXHUxNzhGXHUxN0MyXHUxNzkxXHUxNzkxXHUxN0JEXHUxNzlCXHUxNzk0XHUxN0I2XHUxNzkzICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MTc5MVx1MTdCN1x1MTc5M1x1MTdEMlx1MTc5M1x1MTc5M1x1MTdEMFx1MTc5OVx1MTc5NFx1MTc4OVx1MTdEMlx1MTc4NVx1MTdCQ1x1MTc5Qlx1MTc5OFx1MTdCN1x1MTc5M1x1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCOVx1MTc5OFx1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCQ1x1MTc5Q1x1MTdENiBcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QkNcdTE3OUNcdTE3ODBcdTE3QjZcdTE3OUEgJHtleHBlY3RlZH0gXHUxNzk0XHUxN0M5XHUxN0JCXHUxNzkzXHUxN0QyXHUxNzhGXHUxN0MyXHUxNzkxXHUxNzkxXHUxN0JEXHUxNzlCXHUxNzk0XHUxN0I2XHUxNzkzICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYFx1MTc5MVx1MTdCN1x1MTc5M1x1MTdEMlx1MTc5M1x1MTc5M1x1MTdEMFx1MTc5OVx1MTc5NFx1MTc4OVx1MTdEMlx1MTc4NVx1MTdCQ1x1MTc5Qlx1MTc5OFx1MTdCN1x1MTc5M1x1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCOVx1MTc5OFx1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCQ1x1MTc5Q1x1MTdENiBcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QkNcdTE3OUNcdTE3ODBcdTE3QjZcdTE3OUEgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTE3ODdcdTE3OThcdTE3RDJcdTE3OUFcdTE3QkVcdTE3OUZcdTE3OThcdTE3QjdcdTE3OTNcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QjlcdTE3OThcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QkNcdTE3OUNcdTE3RDYgXHUxNzhGXHUxN0QyXHUxNzlBXHUxN0JDXHUxNzlDXHUxNzg3XHUxN0I2XHUxNzk4XHUxN0JEXHUxNzk5XHUxNzgwXHUxN0QyXHUxNzkzXHUxN0JCXHUxNzg0XHUxNzg1XHUxN0M2XHUxNzhFXHUxN0M0XHUxNzk4ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYFx1MTc5Mlx1MTdDNlx1MTc5Nlx1MTdDMVx1MTc4MFx1MTdENiBcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QkNcdTE3OUNcdTE3ODBcdTE3QjZcdTE3OUEgJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdTE3OEZcdTE3OThcdTE3RDJcdTE3OUJcdTE3QzNcIn0gJHthZGp9ICR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiXHUxNzkyXHUxN0I2XHUxNzhGXHUxN0JCXCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTE3OTJcdTE3QzZcdTE3OTZcdTE3QzFcdTE3ODBcdTE3RDYgXHUxNzhGXHUxN0QyXHUxNzlBXHUxN0JDXHUxNzlDXHUxNzgwXHUxN0I2XHUxNzlBICR7aXNzdWUub3JpZ2luID8/IFwiXHUxNzhGXHUxNzk4XHUxN0QyXHUxNzlCXHUxN0MzXCJ9ICR7YWRqfSAke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTE3OEZcdTE3QkNcdTE3ODVcdTE3OTZcdTE3QzFcdTE3ODBcdTE3RDYgXHUxNzhGXHUxN0QyXHUxNzlBXHUxN0JDXHUxNzlDXHUxNzgwXHUxN0I2XHUxNzlBICR7aXNzdWUub3JpZ2lufSAke2Fkan0gJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MTc4Rlx1MTdCQ1x1MTc4NVx1MTc5Nlx1MTdDMVx1MTc4MFx1MTdENiBcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QkNcdTE3OUNcdTE3ODBcdTE3QjZcdTE3OUEgJHtpc3N1ZS5vcmlnaW59ICR7YWRqfSAke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUxNzgxXHUxN0QyXHUxNzlGXHUxN0MyXHUxN0EyXHUxNzgwXHUxN0QyXHUxNzlGXHUxNzlBXHUxNzk4XHUxN0I3XHUxNzkzXHUxNzhGXHUxN0QyXHUxNzlBXHUxN0I5XHUxNzk4XHUxNzhGXHUxN0QyXHUxNzlBXHUxN0JDXHUxNzlDXHUxN0Q2IFx1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCQ1x1MTc5Q1x1MTc4NVx1MTdCNlx1MTc5NFx1MTdDQlx1MTc5NVx1MTdEMlx1MTc4Rlx1MTdCRVx1MTc5OFx1MTc4QVx1MTdDNFx1MTc5OSBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgXHUxNzgxXHUxN0QyXHUxNzlGXHUxN0MyXHUxN0EyXHUxNzgwXHUxN0QyXHUxNzlGXHUxNzlBXHUxNzk4XHUxN0I3XHUxNzkzXHUxNzhGXHUxN0QyXHUxNzlBXHUxN0I5XHUxNzk4XHUxNzhGXHUxN0QyXHUxNzlBXHUxN0JDXHUxNzlDXHUxN0Q2IFx1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCQ1x1MTc5Q1x1MTc5NFx1MTc4OVx1MTdEMlx1MTc4NVx1MTc5NFx1MTdDQlx1MTc4QVx1MTdDNFx1MTc5OSBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgXHUxNzgxXHUxN0QyXHUxNzlGXHUxN0MyXHUxN0EyXHUxNzgwXHUxN0QyXHUxNzlGXHUxNzlBXHUxNzk4XHUxN0I3XHUxNzkzXHUxNzhGXHUxN0QyXHUxNzlBXHUxN0I5XHUxNzk4XHUxNzhGXHUxN0QyXHUxNzlBXHUxN0JDXHUxNzlDXHUxN0Q2IFx1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCQ1x1MTc5Q1x1MTc5OFx1MTdCNlx1MTc5MyBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBcdTE3ODFcdTE3RDJcdTE3OUZcdTE3QzJcdTE3QTJcdTE3ODBcdTE3RDJcdTE3OUZcdTE3OUFcdTE3OThcdTE3QjdcdTE3OTNcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QjlcdTE3OThcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QkNcdTE3OUNcdTE3RDYgXHUxNzhGXHUxN0QyXHUxNzlBXHUxN0JDXHUxNzlDXHUxNzhGXHUxN0MyXHUxNzk1XHUxN0QyXHUxNzgyXHUxN0JDXHUxNzk1XHUxN0QyXHUxNzgyXHUxNzg0XHUxNzkzXHUxN0I5XHUxNzg0XHUxNzkxXHUxNzk4XHUxN0QyXHUxNzlBXHUxNzg0XHUxN0NCXHUxNzhBXHUxN0MyXHUxNzlCXHUxNzk0XHUxN0I2XHUxNzkzXHUxNzgwXHUxN0M2XHUxNzhFXHUxNzhGXHUxN0NCICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTE3OThcdTE3QjdcdTE3OTNcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QjlcdTE3OThcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QkNcdTE3OUNcdTE3RDYgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MTc5Qlx1MTdDMVx1MTc4MVx1MTc5OFx1MTdCN1x1MTc5M1x1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCOVx1MTc5OFx1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCQ1x1MTc5Q1x1MTdENiBcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QkNcdTE3OUNcdTE3OEZcdTE3QzJcdTE3ODdcdTE3QjZcdTE3OTZcdTE3QTBcdTE3QkJcdTE3ODJcdTE3QkJcdTE3OEVcdTE3OTNcdTE3QzMgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MTc5QVx1MTc4MFx1MTc4M1x1MTdCRVx1MTc4OVx1MTc5Rlx1MTdDNFx1MTc5OFx1MTdCN1x1MTc5M1x1MTc5Rlx1MTdEMlx1MTc4Mlx1MTdCNlx1MTc5Qlx1MTdDQlx1MTdENiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MTc5Rlx1MTdDNFx1MTc5OFx1MTdCN1x1MTc5M1x1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCOVx1MTc5OFx1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCQ1x1MTc5Q1x1MTc5M1x1MTdDNVx1MTc4MFx1MTdEMlx1MTc5M1x1MTdCQlx1MTc4NCAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MTc5MVx1MTdCN1x1MTc5M1x1MTdEMlx1MTc5M1x1MTc5M1x1MTdEMFx1MTc5OVx1MTc5OFx1MTdCN1x1MTc5M1x1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCOVx1MTc5OFx1MTc4Rlx1MTdEMlx1MTc5QVx1MTdCQ1x1MTc5Q2A7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTE3OTFcdTE3QjdcdTE3OTNcdTE3RDJcdTE3OTNcdTE3OTNcdTE3RDBcdTE3OTlcdTE3OThcdTE3QjdcdTE3OTNcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QjlcdTE3OThcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QkNcdTE3OUNcdTE3OTNcdTE3QzVcdTE3ODBcdTE3RDJcdTE3OTNcdTE3QkJcdTE3ODQgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTE3OTFcdTE3QjdcdTE3OTNcdTE3RDJcdTE3OTNcdTE3OTNcdTE3RDBcdTE3OTlcdTE3OThcdTE3QjdcdTE3OTNcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QjlcdTE3OThcdTE3OEZcdTE3RDJcdTE3OUFcdTE3QkNcdTE3OUNgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAiaW1wb3J0IGttIGZyb20gXCIuL2ttLmpzXCI7XG4vKiogQGRlcHJlY2F0ZWQgVXNlIGBrbWAgaW5zdGVhZC4gKi8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGttKCk7XG59XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpPT57XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1QkIzOFx1Qzc5MFwiLFxuICAgICAgICAgICAgdmVyYjogXCJ0byBoYXZlXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJcdUJDMTRcdUM3NzRcdUQyQjhcIixcbiAgICAgICAgICAgIHZlcmI6IFwidG8gaGF2ZVwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1QUMxQ1wiLFxuICAgICAgICAgICAgdmVyYjogXCJ0byBoYXZlXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1QUMxQ1wiLFxuICAgICAgICAgICAgdmVyYjogXCJ0byBoYXZlXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIlx1Qzc4NVx1QjgyNVwiLFxuICAgICAgICBlbWFpbDogXCJcdUM3NzRcdUJBNTRcdUM3N0MgXHVDOEZDXHVDMThDXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiXHVDNzc0XHVCQUE4XHVDOUMwXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBcdUIwQTBcdUM5RENcdUMyRENcdUFDMDRcIixcbiAgICAgICAgZGF0ZTogXCJJU08gXHVCMEEwXHVDOURDXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIFx1QzJEQ1x1QUMwNFwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08gXHVBRTMwXHVBQzA0XCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCBcdUM4RkNcdUMxOENcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IFx1QzhGQ1x1QzE4Q1wiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NCBcdUJDOTRcdUM3MDRcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYgXHVCQzk0XHVDNzA0XCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQgXHVDNzc4XHVDRjU0XHVCNTI5IFx1QkIzOFx1Qzc5MFx1QzVGNFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsIFx1Qzc3OFx1Q0Y1NFx1QjUyOSBcdUJCMzhcdUM3OTBcdUM1RjRcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiBcdUJCMzhcdUM3OTBcdUM1RjRcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NCBcdUJDODhcdUQ2MzhcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIlx1Qzc4NVx1QjgyNVwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1Qzc5OFx1QkFCQlx1QjQxQyBcdUM3ODVcdUI4MjU6IFx1QzYwOFx1QzBDMSBcdUQwQzBcdUM3ODVcdUM3NDAgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgXHVCQzFCXHVDNzQwIFx1RDBDMFx1Qzc4NVx1Qzc0MCAke3JlY2VpdmVkfVx1Qzc4NVx1QjJDOFx1QjJFNGA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdUM3OThcdUJBQkJcdUI0MUMgXHVDNzg1XHVCODI1OiBcdUM2MDhcdUMwQzEgXHVEMEMwXHVDNzg1XHVDNzQwICR7ZXhwZWN0ZWR9LCBcdUJDMUJcdUM3NDAgXHVEMEMwXHVDNzg1XHVDNzQwICR7cmVjZWl2ZWR9XHVDNzg1XHVCMkM4XHVCMkU0YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYFx1Qzc5OFx1QkFCQlx1QjQxQyBcdUM3ODVcdUI4MjU6IFx1QUMxMlx1Qzc0MCAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9IFx1Qzc3NFx1QzVCNFx1QzU3QyBcdUQ1NjlcdUIyQzhcdUIyRTRgO1xuICAgICAgICAgICAgICAgIHJldHVybiBgXHVDNzk4XHVCQUJCXHVCNDFDIFx1QzYzNVx1QzE1ODogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcIlx1QjYxMFx1QjI5NCBcIil9IFx1QzkxMSBcdUQ1NThcdUIwOThcdUM1RUNcdUM1N0MgXHVENTY5XHVCMkM4XHVCMkU0YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIlx1Qzc3NFx1RDU1OFwiIDogXCJcdUJCRjhcdUI5Q0NcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VmZml4ID0gYWRqID09PSBcIlx1QkJGOFx1QjlDQ1wiID8gXCJcdUM3NzRcdUM1QjRcdUM1N0MgXHVENTY5XHVCMkM4XHVCMkU0XCIgOiBcIlx1QzVFQ1x1QzU3QyBcdUQ1NjlcdUIyQzhcdUIyRTRcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuaXQgPSBzaXppbmc/LnVuaXQgPz8gXCJcdUM2OTRcdUMxOENcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGAke2lzc3VlLm9yaWdpbiA/PyBcIlx1QUMxMlwifVx1Qzc3NCBcdUIxMDhcdUJCMzQgXHVEMDdEXHVCMkM4XHVCMkU0OiAke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0ke3VuaXR9ICR7YWRqfSR7c3VmZml4fWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdUFDMTJcIn1cdUM3NzQgXHVCMTA4XHVCQjM0IFx1RDA3RFx1QjJDOFx1QjJFNDogJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7YWRqfSR7c3VmZml4fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCJcdUM3NzRcdUMwQzFcIiA6IFwiXHVDRDA4XHVBQ0ZDXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGFkaiA9PT0gXCJcdUM3NzRcdUMwQzFcIiA/IFwiXHVDNzc0XHVDNUI0XHVDNTdDIFx1RDU2OVx1QjJDOFx1QjJFNFwiIDogXCJcdUM1RUNcdUM1N0MgXHVENTY5XHVCMkM4XHVCMkU0XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1bml0ID0gc2l6aW5nPy51bml0ID8/IFwiXHVDNjk0XHVDMThDXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdUFDMTJcIn1cdUM3NzQgXHVCMTA4XHVCQjM0IFx1Qzc5MVx1QzJCNVx1QjJDOFx1QjJFNDogJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9JHt1bml0fSAke2Fkan0ke3N1ZmZpeH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdUFDMTJcIn1cdUM3NzQgXHVCMTA4XHVCQjM0IFx1Qzc5MVx1QzJCNVx1QjJDOFx1QjJFNDogJHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7YWRqfSR7c3VmZml4fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdUM3OThcdUJBQkJcdUI0MUMgXHVCQjM4XHVDNzkwXHVDNUY0OiBcIiR7X2lzc3VlLnByZWZpeH1cIihcdUM3M0MpXHVCODVDIFx1QzJEQ1x1Qzc5MVx1RDU3NFx1QzU3QyBcdUQ1NjlcdUIyQzhcdUIyRTRgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSByZXR1cm4gYFx1Qzc5OFx1QkFCQlx1QjQxQyBcdUJCMzhcdUM3OTBcdUM1RjQ6IFwiJHtfaXNzdWUuc3VmZml4fVwiKFx1QzczQylcdUI4NUMgXHVCMDVEXHVCMDk4XHVDNTdDIFx1RDU2OVx1QjJDOFx1QjJFNGA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgXHVDNzk4XHVCQUJCXHVCNDFDIFx1QkIzOFx1Qzc5MFx1QzVGNDogXCIke19pc3N1ZS5pbmNsdWRlc31cIlx1Qzc0NChcdUI5N0MpIFx1RDNFQ1x1RDU2OFx1RDU3NFx1QzU3QyBcdUQ1NjlcdUIyQzhcdUIyRTRgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSByZXR1cm4gYFx1Qzc5OFx1QkFCQlx1QjQxQyBcdUJCMzhcdUM3OTBcdUM1RjQ6IFx1QzgxNVx1QUREQ1x1QzJERCAke19pc3N1ZS5wYXR0ZXJufSBcdUQzMjhcdUQxMzRcdUFDRkMgXHVDNzdDXHVDRTU4XHVENTc0XHVDNTdDIFx1RDU2OVx1QjJDOFx1QjJFNGA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHVDNzk4XHVCQUJCXHVCNDFDICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdUM3OThcdUJBQkJcdUI0MUMgXHVDMjJCXHVDNzkwOiAke2lzc3VlLmRpdmlzb3J9XHVDNzU4IFx1QkMzMFx1QzIxOFx1QzVFQ1x1QzU3QyBcdUQ1NjlcdUIyQzhcdUIyRTRgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdUM3NzhcdUMyRERcdUQ1NjAgXHVDMjE4IFx1QzVDNlx1QjI5NCBcdUQwQTQ6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHVDNzk4XHVCQUJCXHVCNDFDIFx1RDBBNDogJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdUM3OThcdUJBQkJcdUI0MUMgXHVDNzg1XHVCODI1YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1Qzc5OFx1QkFCQlx1QjQxQyBcdUFDMTI6ICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHVDNzk4XHVCQUJCXHVCNDFDIFx1Qzc4NVx1QjgyNWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGNhcGl0YWxpemVGaXJzdENoYXJhY3RlciA9ICh0ZXh0KT0+e1xuICAgIHJldHVybiB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKTtcbn07XG5mdW5jdGlvbiBnZXRVbml0VHlwZUZyb21OdW1iZXIobnVtYmVyKSB7XG4gICAgY29uc3QgYWJzID0gTWF0aC5hYnMobnVtYmVyKTtcbiAgICBjb25zdCBsYXN0ID0gYWJzICUgMTA7XG4gICAgY29uc3QgbGFzdDIgPSBhYnMgJSAxMDA7XG4gICAgaWYgKGxhc3QyID49IDExICYmIGxhc3QyIDw9IDE5IHx8IGxhc3QgPT09IDApIHJldHVybiBcIm1hbnlcIjtcbiAgICBpZiAobGFzdCA9PT0gMSkgcmV0dXJuIFwib25lXCI7XG4gICAgcmV0dXJuIFwiZmV3XCI7XG59XG5jb25zdCBlcnJvciA9ICgpPT57XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiB7XG4gICAgICAgICAgICAgICAgb25lOiBcInNpbWJvbGlzXCIsXG4gICAgICAgICAgICAgICAgZmV3OiBcInNpbWJvbGlhaVwiLFxuICAgICAgICAgICAgICAgIG1hbnk6IFwic2ltYm9saVx1MDE3M1wiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmVyYjoge1xuICAgICAgICAgICAgICAgIHNtYWxsZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBcInR1cmkgYlx1MDE2QnRpIG5lIGlsZ2Vzblx1MDExNyBrYWlwXCIsXG4gICAgICAgICAgICAgICAgICAgIG5vdEluY2x1c2l2ZTogXCJ0dXJpIGJcdTAxNkJ0aSB0cnVtcGVzblx1MDExNyBrYWlwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJpZ2dlcjoge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IFwidHVyaSBiXHUwMTZCdGkgbmUgdHJ1bXBlc25cdTAxMTcga2FpcFwiLFxuICAgICAgICAgICAgICAgICAgICBub3RJbmNsdXNpdmU6IFwidHVyaSBiXHUwMTZCdGkgaWxnZXNuXHUwMTE3IGthaXBcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDoge1xuICAgICAgICAgICAgICAgIG9uZTogXCJiYWl0YXNcIixcbiAgICAgICAgICAgICAgICBmZXc6IFwiYmFpdGFpXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCJiYWl0XHUwMTczXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiB7XG4gICAgICAgICAgICAgICAgc21hbGxlcjoge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IFwidHVyaSBiXHUwMTZCdGkgbmUgZGlkZXNuaXMga2FpcFwiLFxuICAgICAgICAgICAgICAgICAgICBub3RJbmNsdXNpdmU6IFwidHVyaSBiXHUwMTZCdGkgbWFcdTAxN0Vlc25pcyBrYWlwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJpZ2dlcjoge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IFwidHVyaSBiXHUwMTZCdGkgbmUgbWFcdTAxN0Vlc25pcyBrYWlwXCIsXG4gICAgICAgICAgICAgICAgICAgIG5vdEluY2x1c2l2ZTogXCJ0dXJpIGJcdTAxNkJ0aSBkaWRlc25pcyBrYWlwXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiB7XG4gICAgICAgICAgICAgICAgb25lOiBcImVsZW1lbnRcdTAxMDVcIixcbiAgICAgICAgICAgICAgICBmZXc6IFwiZWxlbWVudHVzXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCJlbGVtZW50XHUwMTczXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiB7XG4gICAgICAgICAgICAgICAgc21hbGxlcjoge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IFwidHVyaSB0dXJcdTAxMTd0aSBuZSBkYXVnaWF1IGthaXBcIixcbiAgICAgICAgICAgICAgICAgICAgbm90SW5jbHVzaXZlOiBcInR1cmkgdHVyXHUwMTE3dGkgbWFcdTAxN0VpYXUga2FpcFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiaWdnZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBcInR1cmkgdHVyXHUwMTE3dGkgbmUgbWFcdTAxN0VpYXUga2FpcFwiLFxuICAgICAgICAgICAgICAgICAgICBub3RJbmNsdXNpdmU6IFwidHVyaSB0dXJcdTAxMTd0aSBkYXVnaWF1IGthaXBcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiB7XG4gICAgICAgICAgICAgICAgb25lOiBcImVsZW1lbnRcdTAxMDVcIixcbiAgICAgICAgICAgICAgICBmZXc6IFwiZWxlbWVudHVzXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCJlbGVtZW50XHUwMTczXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiB7XG4gICAgICAgICAgICAgICAgc21hbGxlcjoge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IFwidHVyaSB0dXJcdTAxMTd0aSBuZSBkYXVnaWF1IGthaXBcIixcbiAgICAgICAgICAgICAgICAgICAgbm90SW5jbHVzaXZlOiBcInR1cmkgdHVyXHUwMTE3dGkgbWFcdTAxN0VpYXUga2FpcFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiaWdnZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiBcInR1cmkgdHVyXHUwMTE3dGkgbmUgbWFcdTAxN0VpYXUga2FpcFwiLFxuICAgICAgICAgICAgICAgICAgICBub3RJbmNsdXNpdmU6IFwidHVyaSB0dXJcdTAxMTd0aSBkYXVnaWF1IGthaXBcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbiwgdW5pdFR5cGUsIGluY2x1c2l2ZSwgdGFyZ2V0U2hvdWxkQmUpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1bml0OiByZXN1bHQudW5pdFt1bml0VHlwZV0sXG4gICAgICAgICAgICB2ZXJiOiByZXN1bHQudmVyYlt0YXJnZXRTaG91bGRCZV1baW5jbHVzaXZlID8gXCJpbmNsdXNpdmVcIiA6IFwibm90SW5jbHVzaXZlXCJdXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIlx1MDEyRnZlc3Rpc1wiLFxuICAgICAgICBlbWFpbDogXCJlbC4gcGFcdTAxNjF0byBhZHJlc2FzXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiamF1c3R1a2FzXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBkYXRhIGlyIGxhaWthc1wiLFxuICAgICAgICBkYXRlOiBcIklTTyBkYXRhXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIGxhaWthc1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08gdHJ1a21cdTAxMTdcIixcbiAgICAgICAgaXB2NDogXCJJUHY0IGFkcmVzYXNcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IGFkcmVzYXNcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgdGlua2xvIHByZWZpa3NhcyAoQ0lEUilcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYgdGlua2xvIHByZWZpa3NhcyAoQ0lEUilcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NCB1XHUwMTdFa29kdW90YSBlaWx1dFx1MDExN1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsIHVcdTAxN0Vrb2R1b3RhIGVpbHV0XHUwMTE3XCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04gZWlsdXRcdTAxMTdcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NCBudW1lcmlzXCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJcdTAxMkZ2ZXN0aXNcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcInNrYWlcdTAxMERpdXNcIixcbiAgICAgICAgYmlnaW50OiBcInN2ZWlrYXNpcyBza2FpXHUwMTBEaXVzXCIsXG4gICAgICAgIHN0cmluZzogXCJlaWx1dFx1MDExN1wiLFxuICAgICAgICBib29sZWFuOiBcImxvZ2luXHUwMTE3IHJlaWtcdTAxNjFtXHUwMTE3XCIsXG4gICAgICAgIHVuZGVmaW5lZDogXCJuZWFwaWJyXHUwMTE3XHUwMTdFdGEgcmVpa1x1MDE2MW1cdTAxMTdcIixcbiAgICAgICAgZnVuY3Rpb246IFwiZnVua2NpamFcIixcbiAgICAgICAgc3ltYm9sOiBcInNpbWJvbGlzXCIsXG4gICAgICAgIGFycmF5OiBcIm1hc3l2YXNcIixcbiAgICAgICAgb2JqZWN0OiBcIm9iamVrdGFzXCIsXG4gICAgICAgIG51bGw6IFwibnVsaW5cdTAxMTcgcmVpa1x1MDE2MW1cdTAxMTdcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBHYXV0YXMgdGlwYXMgJHtyZWNlaXZlZH0sIG8gdGlrXHUwMTE3dGFzaSAtIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgR2F1dGFzIHRpcGFzICR7cmVjZWl2ZWR9LCBvIHRpa1x1MDExN3Rhc2kgLSAke2V4cGVjdGVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBQcml2YWxvIGJcdTAxNkJ0aSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFByaXZhbG8gYlx1MDE2QnRpIHZpZW5hcyBpXHUwMTYxICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfSBwYXNpcmlua2ltXHUwMTczYDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW4gPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5vcmlnaW5dID8/IGlzc3VlLm9yaWdpbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbiwgZ2V0VW5pdFR5cGVGcm9tTnVtYmVyKE51bWJlcihpc3N1ZS5tYXhpbXVtKSksIGlzc3VlLmluY2x1c2l2ZSA/PyBmYWxzZSwgXCJzbWFsbGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nPy52ZXJiKSByZXR1cm4gYCR7Y2FwaXRhbGl6ZUZpcnN0Q2hhcmFjdGVyKG9yaWdpbiA/PyBpc3N1ZS5vcmlnaW4gPz8gXCJyZWlrXHUwMTYxbVx1MDExN1wiKX0gJHtzaXppbmcudmVyYn0gJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW50XHUwMTczXCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCJuZSBkaWRlc25pcyBrYWlwXCIgOiBcIm1hXHUwMTdFZXNuaXMga2FpcFwiO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7Y2FwaXRhbGl6ZUZpcnN0Q2hhcmFjdGVyKG9yaWdpbiA/PyBpc3N1ZS5vcmlnaW4gPz8gXCJyZWlrXHUwMTYxbVx1MDExN1wiKX0gdHVyaSBiXHUwMTZCdGkgJHthZGp9ICR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZz8udW5pdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbiA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLm9yaWdpbl0gPz8gaXNzdWUub3JpZ2luO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luLCBnZXRVbml0VHlwZUZyb21OdW1iZXIoTnVtYmVyKGlzc3VlLm1pbmltdW0pKSwgaXNzdWUuaW5jbHVzaXZlID8/IGZhbHNlLCBcImJpZ2dlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZz8udmVyYikgcmV0dXJuIGAke2NhcGl0YWxpemVGaXJzdENoYXJhY3RlcihvcmlnaW4gPz8gaXNzdWUub3JpZ2luID8/IFwicmVpa1x1MDE2MW1cdTAxMTdcIil9ICR7c2l6aW5nLnZlcmJ9ICR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbWVudFx1MDE3M1wifWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwibmUgbWFcdTAxN0Vlc25pcyBrYWlwXCIgOiBcImRpZGVzbmlzIGthaXBcIjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2NhcGl0YWxpemVGaXJzdENoYXJhY3RlcihvcmlnaW4gPz8gaXNzdWUub3JpZ2luID8/IFwicmVpa1x1MDE2MW1cdTAxMTdcIil9IHR1cmkgYlx1MDE2QnRpICR7YWRqfSAke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmc/LnVuaXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVpbHV0XHUwMTE3IHByaXZhbG8gcHJhc2lkXHUwMTE3dGkgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSByZXR1cm4gYEVpbHV0XHUwMTE3IHByaXZhbG8gcGFzaWJhaWd0aSBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgRWlsdXRcdTAxMTcgcHJpdmFsbyBcdTAxMkZ0cmF1a3RpIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSByZXR1cm4gYEVpbHV0XHUwMTE3IHByaXZhbG8gYXRpdGlrdGkgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5ldGVpc2luZ2FzICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBTa2FpXHUwMTBEaXVzIHByaXZhbG8gYlx1MDE2QnRpICR7aXNzdWUuZGl2aXNvcn0ga2FydG90aW5pcy5gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZWF0cGFcdTAxN0VpbnQke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiaVwiIDogXCJhc1wifSByYWt0JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcImFpXCIgOiBcImFzXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSYXN0YXMga2xhaWRpbmdhcyByYWt0YXNcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiS2xhaWRpbmdhIFx1MDEyRnZlc3Rpc1wiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gVHlwZURpY3Rpb25hcnlbaXNzdWUub3JpZ2luXSA/PyBpc3N1ZS5vcmlnaW47XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtjYXBpdGFsaXplRmlyc3RDaGFyYWN0ZXIob3JpZ2luID8/IGlzc3VlLm9yaWdpbiA/PyBcInJlaWtcdTAxNjFtXHUwMTE3XCIpfSB0dXJpIGtsYWlkaW5nXHUwMTA1IFx1MDEyRnZlc3RcdTAxMkZgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiS2xhaWRpbmdhIFx1MDEyRnZlc3Rpc1wiO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpPT57XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDQzN1x1MDQzRFx1MDQzMFx1MDQ0Nlx1MDQzOFwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA0MzRcdTA0MzAgXHUwNDM4XHUwNDNDXHUwNDMwXHUwNDMwXHUwNDQyXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJcdTA0MzFcdTA0MzBcdTA0NThcdTA0NDJcdTA0MzhcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNDM0XHUwNDMwIFx1MDQzOFx1MDQzQ1x1MDQzMFx1MDQzMFx1MDQ0MlwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDQ0MVx1MDQ0Mlx1MDQzMFx1MDQzMlx1MDQzQVx1MDQzOFwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA0MzRcdTA0MzAgXHUwNDM4XHUwNDNDXHUwNDMwXHUwNDMwXHUwNDQyXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDQ0MVx1MDQ0Mlx1MDQzMFx1MDQzMlx1MDQzQVx1MDQzOFwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA0MzRcdTA0MzAgXHUwNDM4XHUwNDNDXHUwNDMwXHUwNDMwXHUwNDQyXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIlx1MDQzMlx1MDQzRFx1MDQzNVx1MDQ0MVwiLFxuICAgICAgICBlbWFpbDogXCJcdTA0MzBcdTA0MzRcdTA0NDBcdTA0MzVcdTA0NDFcdTA0MzAgXHUwNDNEXHUwNDMwIFx1MDQzNS1cdTA0M0ZcdTA0M0VcdTA0NDhcdTA0NDJcdTA0MzBcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJcdTA0MzVcdTA0M0NcdTA0M0VcdTA0NUZcdTA0MzhcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPIFx1MDQzNFx1MDQzMFx1MDQ0Mlx1MDQ0M1x1MDQzQyBcdTA0MzggXHUwNDMyXHUwNDQwXHUwNDM1XHUwNDNDXHUwNDM1XCIsXG4gICAgICAgIGRhdGU6IFwiSVNPIFx1MDQzNFx1MDQzMFx1MDQ0Mlx1MDQ0M1x1MDQzQ1wiLFxuICAgICAgICB0aW1lOiBcIklTTyBcdTA0MzJcdTA0NDBcdTA0MzVcdTA0M0NcdTA0MzVcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIFx1MDQzMlx1MDQ0MFx1MDQzNVx1MDQzQ1x1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzNVx1MDQ1QVx1MDQzNVwiLFxuICAgICAgICBpcHY0OiBcIklQdjQgXHUwNDMwXHUwNDM0XHUwNDQwXHUwNDM1XHUwNDQxXHUwNDMwXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiBcdTA0MzBcdTA0MzRcdTA0NDBcdTA0MzVcdTA0NDFcdTA0MzBcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgXHUwNDNFXHUwNDNGXHUwNDQxXHUwNDM1XHUwNDMzXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2IFx1MDQzRVx1MDQzRlx1MDQ0MVx1MDQzNVx1MDQzM1wiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0LVx1MDQzNVx1MDQzRFx1MDQzQVx1MDQzRVx1MDQzNFx1MDQzOFx1MDQ0MFx1MDQzMFx1MDQzRFx1MDQzMCBcdTA0M0RcdTA0MzhcdTA0MzdcdTA0MzBcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybC1cdTA0MzVcdTA0M0RcdTA0M0FcdTA0M0VcdTA0MzRcdTA0MzhcdTA0NDBcdTA0MzBcdTA0M0RcdTA0MzAgXHUwNDNEXHUwNDM4XHUwNDM3XHUwNDMwXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04gXHUwNDNEXHUwNDM4XHUwNDM3XHUwNDMwXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQgXHUwNDMxXHUwNDQwXHUwNDNFXHUwNDU4XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJcdTA0MzJcdTA0M0RcdTA0MzVcdTA0NDFcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIlx1MDQzMVx1MDQ0MFx1MDQzRVx1MDQ1OFwiLFxuICAgICAgICBhcnJheTogXCJcdTA0M0RcdTA0MzhcdTA0MzdcdTA0MzBcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MTNcdTA0NDBcdTA0MzVcdTA0NDhcdTA0MzVcdTA0M0QgXHUwNDMyXHUwNDNEXHUwNDM1XHUwNDQxOiBcdTA0NDFcdTA0MzUgXHUwNDNFXHUwNDQ3XHUwNDM1XHUwNDNBXHUwNDQzXHUwNDMyXHUwNDMwIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIFx1MDQzRlx1MDQ0MFx1MDQzOFx1MDQzQ1x1MDQzNVx1MDQzRFx1MDQzRSAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MTNcdTA0NDBcdTA0MzVcdTA0NDhcdTA0MzVcdTA0M0QgXHUwNDMyXHUwNDNEXHUwNDM1XHUwNDQxOiBcdTA0NDFcdTA0MzUgXHUwNDNFXHUwNDQ3XHUwNDM1XHUwNDNBXHUwNDQzXHUwNDMyXHUwNDMwICR7ZXhwZWN0ZWR9LCBcdTA0M0ZcdTA0NDBcdTA0MzhcdTA0M0NcdTA0MzVcdTA0M0RcdTA0M0UgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MTNcdTA0NDBcdTA0MzVcdTA0NDhcdTA0MzBcdTA0M0RcdTA0MzAgXHUwNDNFXHUwNDNGXHUwNDQ2XHUwNDM4XHUwNDU4XHUwNDMwOiBcdTA0NDFcdTA0MzUgXHUwNDNFXHUwNDQ3XHUwNDM1XHUwNDNBXHUwNDQzXHUwNDMyXHUwNDMwIFx1MDQzNVx1MDQzNFx1MDQzRFx1MDQzMCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBcdTA0MUZcdTA0NDBcdTA0MzVcdTA0M0NcdTA0M0RcdTA0M0VcdTA0MzNcdTA0NDMgXHUwNDMzXHUwNDNFXHUwNDNCXHUwNDM1XHUwNDNDOiBcdTA0NDFcdTA0MzUgXHUwNDNFXHUwNDQ3XHUwNDM1XHUwNDNBXHUwNDQzXHUwNDMyXHUwNDMwICR7aXNzdWUub3JpZ2luID8/IFwiXHUwNDMyXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDNEXHUwNDNFXHUwNDQxXHUwNDQyXHUwNDMwXCJ9IFx1MDQzNFx1MDQzMCBcdTA0MzhcdTA0M0NcdTA0MzAgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJcdTA0MzVcdTA0M0JcdTA0MzVcdTA0M0NcdTA0MzVcdTA0M0RcdTA0NDJcdTA0MzhcIn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRlx1MDQ0MFx1MDQzNVx1MDQzQ1x1MDQzRFx1MDQzRVx1MDQzM1x1MDQ0MyBcdTA0MzNcdTA0M0VcdTA0M0JcdTA0MzVcdTA0M0M6IFx1MDQ0MVx1MDQzNSBcdTA0M0VcdTA0NDdcdTA0MzVcdTA0M0FcdTA0NDNcdTA0MzJcdTA0MzAgJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdTA0MzJcdTA0NDBcdTA0MzVcdTA0MzRcdTA0M0RcdTA0M0VcdTA0NDFcdTA0NDJcdTA0MzBcIn0gXHUwNDM0XHUwNDMwIFx1MDQzMVx1MDQzOFx1MDQzNFx1MDQzNSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MUZcdTA0NDBcdTA0MzVcdTA0M0NcdTA0M0RcdTA0M0VcdTA0MzNcdTA0NDMgXHUwNDNDXHUwNDMwXHUwNDNCOiBcdTA0NDFcdTA0MzUgXHUwNDNFXHUwNDQ3XHUwNDM1XHUwNDNBXHUwNDQzXHUwNDMyXHUwNDMwICR7aXNzdWUub3JpZ2lufSBcdTA0MzRcdTA0MzAgXHUwNDM4XHUwNDNDXHUwNDMwICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MUZcdTA0NDBcdTA0MzVcdTA0M0NcdTA0M0RcdTA0M0VcdTA0MzNcdTA0NDMgXHUwNDNDXHUwNDMwXHUwNDNCOiBcdTA0NDFcdTA0MzUgXHUwNDNFXHUwNDQ3XHUwNDM1XHUwNDNBXHUwNDQzXHUwNDMyXHUwNDMwICR7aXNzdWUub3JpZ2lufSBcdTA0MzRcdTA0MzAgXHUwNDMxXHUwNDM4XHUwNDM0XHUwNDM1ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MURcdTA0MzVcdTA0MzJcdTA0MzBcdTA0MzZcdTA0MzVcdTA0NDdcdTA0M0FcdTA0MzAgXHUwNDNEXHUwNDM4XHUwNDM3XHUwNDMwOiBcdTA0M0NcdTA0M0VcdTA0NDBcdTA0MzAgXHUwNDM0XHUwNDMwIFx1MDQzN1x1MDQzMFx1MDQzRlx1MDQzRVx1MDQ0N1x1MDQzRFx1MDQ0M1x1MDQzMlx1MDQzMCBcdTA0NDFcdTA0M0UgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzMFx1MDQzNlx1MDQzNVx1MDQ0N1x1MDQzQVx1MDQzMCBcdTA0M0RcdTA0MzhcdTA0MzdcdTA0MzA6IFx1MDQzQ1x1MDQzRVx1MDQ0MFx1MDQzMCBcdTA0MzRcdTA0MzAgXHUwNDM3XHUwNDMwXHUwNDMyXHUwNDQwXHUwNDQ4XHUwNDQzXHUwNDMyXHUwNDMwIFx1MDQ0MVx1MDQzRSBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDM2XHUwNDM1XHUwNDQ3XHUwNDNBXHUwNDMwIFx1MDQzRFx1MDQzOFx1MDQzN1x1MDQzMDogXHUwNDNDXHUwNDNFXHUwNDQwXHUwNDMwIFx1MDQzNFx1MDQzMCBcdTA0MzJcdTA0M0FcdTA0M0JcdTA0NDNcdTA0NDdcdTA0NDNcdTA0MzJcdTA0MzAgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDMwXHUwNDM2XHUwNDM1XHUwNDQ3XHUwNDNBXHUwNDMwIFx1MDQzRFx1MDQzOFx1MDQzN1x1MDQzMDogXHUwNDNDXHUwNDNFXHUwNDQwXHUwNDMwIFx1MDQzNFx1MDQzMCBcdTA0M0VcdTA0MzRcdTA0MzNcdTA0M0VcdTA0MzBcdTA0NDBcdTA0MzAgXHUwNDNEXHUwNDMwIFx1MDQzRlx1MDQzMFx1MDQ0Mlx1MDQzNVx1MDQ0MFx1MDQzRFx1MDQzRVx1MDQ0MiAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDEzXHUwNDQwXHUwNDM1XHUwNDQ4XHUwNDM1XHUwNDNEIFx1MDQzMVx1MDQ0MFx1MDQzRVx1MDQ1ODogXHUwNDNDXHUwNDNFXHUwNDQwXHUwNDMwIFx1MDQzNFx1MDQzMCBcdTA0MzFcdTA0MzhcdTA0MzRcdTA0MzUgXHUwNDM0XHUwNDM1XHUwNDNCXHUwNDM4XHUwNDMyIFx1MDQ0MVx1MDQzRSAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlx1MDQxRFx1MDQzNVx1MDQzRlx1MDQ0MFx1MDQzNVx1MDQzRlx1MDQzRVx1MDQzN1x1MDQzRFx1MDQzMFx1MDQzNVx1MDQzRFx1MDQzOCBcdTA0M0FcdTA0M0JcdTA0NDNcdTA0NDdcdTA0MzVcdTA0MzJcdTA0MzhcIiA6IFwiXHUwNDFEXHUwNDM1XHUwNDNGXHUwNDQwXHUwNDM1XHUwNDNGXHUwNDNFXHUwNDM3XHUwNDNEXHUwNDMwXHUwNDM1XHUwNDNEIFx1MDQzQVx1MDQzQlx1MDQ0M1x1MDQ0N1wifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MTNcdTA0NDBcdTA0MzVcdTA0NDhcdTA0MzVcdTA0M0QgXHUwNDNBXHUwNDNCXHUwNDQzXHUwNDQ3IFx1MDQzMlx1MDQzRSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcdTA0MTNcdTA0NDBcdTA0MzVcdTA0NDhcdTA0MzVcdTA0M0QgXHUwNDMyXHUwNDNEXHUwNDM1XHUwNDQxXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MTNcdTA0NDBcdTA0MzVcdTA0NDhcdTA0M0RcdTA0MzAgXHUwNDMyXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDNEXHUwNDNFXHUwNDQxXHUwNDQyIFx1MDQzMlx1MDQzRSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxM1x1MDQ0MFx1MDQzNVx1MDQ0OFx1MDQzNVx1MDQzRCBcdTA0MzJcdTA0M0RcdTA0MzVcdTA0NDFgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpPT57XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiBcImFrc2FyYVwiLFxuICAgICAgICAgICAgdmVyYjogXCJtZW1wdW55YWlcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJhaXRcIixcbiAgICAgICAgICAgIHZlcmI6IFwibWVtcHVueWFpXCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiZWxlbWVuXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIm1lbXB1bnlhaVwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW5cIixcbiAgICAgICAgICAgIHZlcmI6IFwibWVtcHVueWFpXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImlucHV0XCIsXG4gICAgICAgIGVtYWlsOiBcImFsYW1hdCBlLW1lbFwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcInRhcmlraCBtYXNhIElTT1wiLFxuICAgICAgICBkYXRlOiBcInRhcmlraCBJU09cIixcbiAgICAgICAgdGltZTogXCJtYXNhIElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJ0ZW1wb2ggSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiYWxhbWF0IElQdjRcIixcbiAgICAgICAgaXB2NjogXCJhbGFtYXQgSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwianVsYXQgSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwianVsYXQgSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwic3RyaW5nIGRpa29ka2FuIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwic3RyaW5nIGRpa29ka2FuIGJhc2U2NHVybFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJzdHJpbmcgSlNPTlwiLFxuICAgICAgICBlMTY0OiBcIm5vbWJvciBFLjE2NFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiaW5wdXRcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIm5vbWJvclwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYElucHV0IHRpZGFrIHNhaDogZGlqYW5na2EgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgZGl0ZXJpbWEgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgSW5wdXQgdGlkYWsgc2FoOiBkaWphbmdrYSAke2V4cGVjdGVkfSwgZGl0ZXJpbWEgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgSW5wdXQgdGlkYWsgc2FoOiBkaWphbmdrYSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFBpbGloYW4gdGlkYWsgc2FoOiBkaWphbmdrYSBzYWxhaCBzYXR1IGRhcmlwYWRhICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYFRlcmxhbHUgYmVzYXI6IGRpamFuZ2thICR7aXNzdWUub3JpZ2luID8/IFwibmlsYWlcIn0gJHtzaXppbmcudmVyYn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW5cIn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlcmxhbHUgYmVzYXI6IGRpamFuZ2thICR7aXNzdWUub3JpZ2luID8/IFwibmlsYWlcIn0gYWRhbGFoICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlcmxhbHUga2VjaWw6IGRpamFuZ2thICR7aXNzdWUub3JpZ2lufSAke3NpemluZy52ZXJifSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVGVybGFsdSBrZWNpbDogZGlqYW5na2EgJHtpc3N1ZS5vcmlnaW59IGFkYWxhaCAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgU3RyaW5nIHRpZGFrIHNhaDogbWVzdGkgYmVybXVsYSBkZW5nYW4gXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBTdHJpbmcgdGlkYWsgc2FoOiBtZXN0aSBiZXJha2hpciBkZW5nYW4gXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYFN0cmluZyB0aWRhayBzYWg6IG1lc3RpIG1lbmdhbmR1bmdpIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSByZXR1cm4gYFN0cmluZyB0aWRhayBzYWg6IG1lc3RpIHNlcGFkYW4gZGVuZ2FuIGNvcmFrICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fSB0aWRhayBzYWhgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5vbWJvciB0aWRhayBzYWg6IHBlcmx1IGdhbmRhYW4gJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEt1bmNpIHRpZGFrIGRpa2VuYWxpOiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEt1bmNpIHRpZGFrIHNhaCBkYWxhbSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJJbnB1dCB0aWRhayBzYWhcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5pbGFpIHRpZGFrIHNhaCBkYWxhbSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYElucHV0IHRpZGFrIHNhaGA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwidGVrZW5zXCIsXG4gICAgICAgICAgICB2ZXJiOiBcImhlZWZ0XCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJieXRlc1wiLFxuICAgICAgICAgICAgdmVyYjogXCJoZWVmdFwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcImVsZW1lbnRlblwiLFxuICAgICAgICAgICAgdmVyYjogXCJoZWVmdFwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW50ZW5cIixcbiAgICAgICAgICAgIHZlcmI6IFwiaGVlZnRcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiaW52b2VyXCIsXG4gICAgICAgIGVtYWlsOiBcImVtYWlsYWRyZXNcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gZGF0dW0gZW4gdGlqZFwiLFxuICAgICAgICBkYXRlOiBcIklTTyBkYXR1bVwiLFxuICAgICAgICB0aW1lOiBcIklTTyB0aWpkXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTyBkdXVyXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NC1hZHJlc1wiLFxuICAgICAgICBpcHY2OiBcIklQdjYtYWRyZXNcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQtYmVyZWlrXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2LWJlcmVpa1wiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0LWdlY29kZWVyZGUgdGVrc3RcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NCBVUkwtZ2Vjb2RlZXJkZSB0ZWtzdFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIHN0cmluZ1wiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0LW51bW1lclwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiaW52b2VyXCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJnZXRhbFwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE9uZ2VsZGlnZSBpbnZvZXI6IHZlcndhY2h0IGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIG9udHZpbmcgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgT25nZWxkaWdlIGludm9lcjogdmVyd2FjaHQgJHtleHBlY3RlZH0sIG9udHZpbmcgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgT25nZWxkaWdlIGludm9lcjogdmVyd2FjaHQgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPbmdlbGRpZ2Ugb3B0aWU6IHZlcndhY2h0IFx1MDBFOVx1MDBFOW4gdmFuICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb25nTmFtZSA9IGlzc3VlLm9yaWdpbiA9PT0gXCJkYXRlXCIgPyBcImxhYXRcIiA6IGlzc3VlLm9yaWdpbiA9PT0gXCJzdHJpbmdcIiA/IFwibGFuZ1wiIDogXCJncm9vdFwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYFRlICR7bG9uZ05hbWV9OiB2ZXJ3YWNodCBkYXQgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ3YWFyZGVcIn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW50ZW5cIn0gJHtzaXppbmcudmVyYn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlICR7bG9uZ05hbWV9OiB2ZXJ3YWNodCBkYXQgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ3YWFyZGVcIn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9IGlzYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3J0TmFtZSA9IGlzc3VlLm9yaWdpbiA9PT0gXCJkYXRlXCIgPyBcInZyb2VnXCIgOiBpc3N1ZS5vcmlnaW4gPT09IFwic3RyaW5nXCIgPyBcImtvcnRcIiA6IFwia2xlaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBUZSAke3Nob3J0TmFtZX06IHZlcndhY2h0IGRhdCAke2lzc3VlLm9yaWdpbn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9ICR7c2l6aW5nLnZlcmJ9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRlICR7c2hvcnROYW1lfTogdmVyd2FjaHQgZGF0ICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gaXNgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgT25nZWxkaWdlIHRla3N0OiBtb2V0IG1ldCBcIiR7X2lzc3VlLnByZWZpeH1cIiBiZWdpbm5lbmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgT25nZWxkaWdlIHRla3N0OiBtb2V0IG9wIFwiJHtfaXNzdWUuc3VmZml4fVwiIGVpbmRpZ2VuYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBPbmdlbGRpZ2UgdGVrc3Q6IG1vZXQgXCIke19pc3N1ZS5pbmNsdWRlc31cIiBiZXZhdHRlbmA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgT25nZWxkaWdlIHRla3N0OiBtb2V0IG92ZXJlZW5rb21lbiBtZXQgcGF0cm9vbiAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgT25nZWxkaWc6ICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPbmdlbGRpZyBnZXRhbDogbW9ldCBlZW4gdmVlbHZvdWQgdmFuICR7aXNzdWUuZGl2aXNvcn0gemlqbmA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9uYmVrZW5kZSBrZXkke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgT25nZWxkaWdlIGtleSBpbiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJPbmdlbGRpZ2UgaW52b2VyXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPbmdlbGRpZ2Ugd2FhcmRlIGluICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgT25nZWxkaWdlIGludm9lcmA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwidGVnblwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTAwRTUgaGFcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJ5dGVzXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MDBFNSBoYVwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcImVsZW1lbnRlclwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTAwRTUgaW5uZWhvbGRlXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcImVsZW1lbnRlclwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTAwRTUgaW5uZWhvbGRlXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImlucHV0XCIsXG4gICAgICAgIGVtYWlsOiBcImUtcG9zdGFkcmVzc2VcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gZGF0by0gb2cga2xva2tlc2xldHRcIixcbiAgICAgICAgZGF0ZTogXCJJU08tZGF0b1wiLFxuICAgICAgICB0aW1lOiBcIklTTy1rbG9ra2VzbGV0dFwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08tdmFyaWdoZXRcIixcbiAgICAgICAgaXB2NDogXCJJUHY0LW9tclx1MDBFNWRlXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2Ni1vbXJcdTAwRTVkZVwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NC1zcGVrdGVyXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2LXNwZWt0ZXJcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NC1lbmtvZGV0IHN0cmVuZ1wiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsLWVua29kZXQgc3RyZW5nXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04tc3RyZW5nXCIsXG4gICAgICAgIGUxNjQ6IFwiRS4xNjQtbnVtbWVyXCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJpbnB1dFwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwidGFsbFwiLFxuICAgICAgICBhcnJheTogXCJsaXN0ZVwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgaW5wdXQ6IGZvcnZlbnRldCBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBmaWtrICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgaW5wdXQ6IGZvcnZlbnRldCAke2V4cGVjdGVkfSwgZmlrayAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBVZ3lsZGlnIHZlcmRpOiBmb3J2ZW50ZXQgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIHZhbGc6IGZvcnZlbnRldCBlbiBhdiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBGb3Igc3Rvcih0KTogZm9ydmVudGV0ICR7aXNzdWUub3JpZ2luID8/IFwidmFsdWVcIn0gdGlsIFx1MDBFNSBoYSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRlclwifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRm9yIHN0b3IodCk6IGZvcnZlbnRldCAke2lzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCJ9IHRpbCBcdTAwRTUgaGEgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgRm9yIGxpdGUobik6IGZvcnZlbnRldCAke2lzc3VlLm9yaWdpbn0gdGlsIFx1MDBFNSBoYSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRm9yIGxpdGUobik6IGZvcnZlbnRldCAke2lzc3VlLm9yaWdpbn0gdGlsIFx1MDBFNSBoYSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgVWd5bGRpZyBzdHJlbmc6IG1cdTAwRTUgc3RhcnRlIG1lZCBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSByZXR1cm4gYFVneWxkaWcgc3RyZW5nOiBtXHUwMEU1IGVuZGUgbWVkIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBVZ3lsZGlnIHN0cmVuZzogbVx1MDBFNSBpbm5laG9sZGUgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgVWd5bGRpZyBzdHJlbmc6IG1cdTAwRTUgbWF0Y2hlIG1cdTAwRjhuc3RlcmV0ICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIHRhbGw6IG1cdTAwRTUgdlx1MDBFNnJlIGV0IG11bHRpcGx1bSBhdiAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlVramVudGUgblx1MDBGOGtsZXJcIiA6IFwiVWtqZW50IG5cdTAwRjhra2VsXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFVneWxkaWcgblx1MDBGOGtrZWwgaSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJVZ3lsZGlnIGlucHV0XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIHZlcmRpIGkgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBVZ3lsZGlnIGlucHV0YDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJoYXJmXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIm9sbWFsXHUwMTMxZFx1MDEzMXJcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJheXRcIixcbiAgICAgICAgICAgIHZlcmI6IFwib2xtYWxcdTAxMzFkXHUwMTMxclwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcInVuc3VyXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIm9sbWFsXHUwMTMxZFx1MDEzMXJcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwidW5zdXJcIixcbiAgICAgICAgICAgIHZlcmI6IFwib2xtYWxcdTAxMzFkXHUwMTMxclwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJnaXJlblwiLFxuICAgICAgICBlbWFpbDogXCJlcG9zdGFnXHUwMEUyaFwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBoZW5nXHUwMEUybVx1MDEzMVwiLFxuICAgICAgICBkYXRlOiBcIklTTyB0YXJpaGlcIixcbiAgICAgICAgdGltZTogXCJJU08gemFtYW5cdTAxMzFcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIG1cdTAwRkNkZGV0aVwiLFxuICAgICAgICBpcHY0OiBcIklQdjQgbmlcdTAxNUZcdTAwRTJuXHUwMTMxXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiBuaVx1MDE1Rlx1MDBFMm5cdTAxMzFcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgbWVuemlsaVwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2NiBtZW56aWxpXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtXHUwMTVGaWZyZWxpIG1ldGluXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwtXHUwMTVGaWZyZWxpIG1ldGluXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIkpTT04gbWV0aW5cIixcbiAgICAgICAgZTE2NDogXCJFLjE2NCBzYXlcdTAxMzFzXHUwMTMxXCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJnaXJlblwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwibnVtYXJhXCIsXG4gICAgICAgIGFycmF5OiBcInNhZlwiLFxuICAgICAgICBudWxsOiBcImdheWJcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGXHUwMEUyc2l0IGdpcmVuOiB1bXVsYW4gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgYWxcdTAxMzFuYW4gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRlx1MDBFMnNpdCBnaXJlbjogdW11bGFuICR7ZXhwZWN0ZWR9LCBhbFx1MDEzMW5hbiAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBGXHUwMEUyc2l0IGdpcmVuOiB1bXVsYW4gJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBGXHUwMEUyc2l0IHRlcmNpaDogbVx1MDBGQnRlYmVybGVyICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYEZhemxhIGJcdTAwRkN5XHUwMEZDazogJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2YWx1ZVwifSwgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJlbGVtZW50c1wifSBzYWhpcCBvbG1hbFx1MDEzMXlkXHUwMTMxLmA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRmF6bGEgYlx1MDBGQ3lcdTAwRkNrOiAke2lzc3VlLm9yaWdpbiA/PyBcInZhbHVlXCJ9LCAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gb2xtYWxcdTAxMzF5ZFx1MDEzMS5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGYXpsYSBrXHUwMEZDXHUwMEU3XHUwMEZDazogJHtpc3N1ZS5vcmlnaW59LCAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH0gc2FoaXAgb2xtYWxcdTAxMzF5ZFx1MDEzMS5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgRmF6bGEga1x1MDBGQ1x1MDBFN1x1MDBGQ2s6ICR7aXNzdWUub3JpZ2lufSwgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9IG9sbWFsXHUwMTMxeWRcdTAxMzEuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSByZXR1cm4gYEZcdTAwRTJzaXQgbWV0aW46IFwiJHtfaXNzdWUucHJlZml4fVwiIGlsZSBiYVx1MDE1RmxhbWFsXHUwMTMxLmA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSByZXR1cm4gYEZcdTAwRTJzaXQgbWV0aW46IFwiJHtfaXNzdWUuc3VmZml4fVwiIGlsZSBiaXRtZWxpLmA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgRlx1MDBFMnNpdCBtZXRpbjogXCIke19pc3N1ZS5pbmNsdWRlc31cIiBpaHRpdlx1MDBFMiBldG1lbGkuYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBGXHUwMEUyc2l0IG1ldGluOiAke19pc3N1ZS5wYXR0ZXJufSBuYWtcdTAxNUZcdTAxMzFuYSB1eW1hbFx1MDEzMS5gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEZcdTAwRTJzaXQgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEZcdTAwRTJzaXQgc2F5XHUwMTMxOiAke2lzc3VlLmRpdmlzb3J9IGthdFx1MDEzMSBvbG1hbFx1MDEzMXlkXHUwMTMxLmA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFRhblx1MDEzMW5tYXlhbiBhbmFodGFyICR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbn0gaVx1MDBFN2luIHRhblx1MDEzMW5tYXlhbiBhbmFodGFyIHZhci5gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJHaXJlbiB0YW5cdTAxMzFuYW1hZFx1MDEzMS5cIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufSBpXHUwMEU3aW4gdGFuXHUwMTMxbm1heWFuIGtcdTAxMzF5bWV0IHZhci5gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEtcdTAxMzF5bWV0IHRhblx1MDEzMW5hbWFkXHUwMTMxLmA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwNjJBXHUwNjQ4XHUwNkE5XHUwNjRBXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MDY0OFx1MDY0NFx1MDYzMVx1MDY0QVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwNjI4XHUwNjI3XHUwNkNDXHUwNjdDXHUwNjMzXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MDY0OFx1MDY0NFx1MDYzMVx1MDY0QVwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDYyQVx1MDY0OFx1MDZBOVx1MDY0QVwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA2NDhcdTA2NDRcdTA2MzFcdTA2NEFcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwNjJBXHUwNjQ4XHUwNkE5XHUwNjRBXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MDY0OFx1MDY0NFx1MDYzMVx1MDY0QVwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJcdTA2NDhcdTA2MzFcdTA2NDhcdTA2MkZcdTA2NEFcIixcbiAgICAgICAgZW1haWw6IFwiXHUwNjI4XHUwNjMxXHUwNkNDXHUwNjlBXHUwNjQ2XHUwNjI3XHUwNjQ0XHUwNkNDXHUwNkE5XCIsXG4gICAgICAgIHVybDogXCJcdTA2Q0NcdTA2NDggXHUwNjIyXHUwNjMxIFx1MDYyN1x1MDY0NFwiLFxuICAgICAgICBlbW9qaTogXCJcdTA2MjdcdTA2Q0NcdTA2NDVcdTA2NDhcdTA2MkNcdTA2NEFcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiXHUwNjQ2XHUwNkNDXHUwNjdDXHUwNjQ3IFx1MDYyN1x1MDY0OCBcdTA2NDhcdTA2MkVcdTA2MkFcIixcbiAgICAgICAgZGF0ZTogXCJcdTA2NDZcdTA2RDBcdTA2N0NcdTA2NDdcIixcbiAgICAgICAgdGltZTogXCJcdTA2NDhcdTA2MkVcdTA2MkFcIixcbiAgICAgICAgZHVyYXRpb246IFwiXHUwNjQ1XHUwNjQ4XHUwNjJGXHUwNjQ3XCIsXG4gICAgICAgIGlwdjQ6IFwiXHUwNjJGIElQdjQgXHUwNjdFXHUwNjJBXHUwNjQ3XCIsXG4gICAgICAgIGlwdjY6IFwiXHUwNjJGIElQdjYgXHUwNjdFXHUwNjJBXHUwNjQ3XCIsXG4gICAgICAgIGNpZHJ2NDogXCJcdTA2MkYgSVB2NCBcdTA2MzNcdTA2MjdcdTA2MkRcdTA2NDdcIixcbiAgICAgICAgY2lkcnY2OiBcIlx1MDYyRiBJUHY2IFx1MDYzM1x1MDYyN1x1MDYyRFx1MDY0N1wiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0LWVuY29kZWQgXHUwNjQ1XHUwNjJBXHUwNjQ2XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwtZW5jb2RlZCBcdTA2NDVcdTA2MkFcdTA2NDZcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiBcdTA2NDVcdTA2MkFcdTA2NDZcIixcbiAgICAgICAgZTE2NDogXCJcdTA2MkYgRS4xNjQgXHUwNjM0XHUwNjQ1XHUwNkQwXHUwNjMxXHUwNjQ3XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJcdTA2NDhcdTA2MzFcdTA2NDhcdTA2MkZcdTA2NEFcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIlx1MDYzOVx1MDYyRlx1MDYyRlwiLFxuICAgICAgICBhcnJheTogXCJcdTA2MjdcdTA2MzFcdTA2RDBcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2NDZcdTA2MjdcdTA2MzNcdTA2NDUgXHUwNjQ4XHUwNjMxXHUwNjQ4XHUwNjJGXHUwNjRBOiBcdTA2MjhcdTA2MjdcdTA2Q0NcdTA2MkYgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSBcdTA2NDhcdTA2MjdcdTA2Q0MsIFx1MDY0NVx1MDZBQlx1MDYzMSAke3JlY2VpdmVkfSBcdTA2MkFcdTA2MzFcdTA2NDRcdTA2MjdcdTA2MzNcdTA2NDcgXHUwNjM0XHUwNjQ4YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0Nlx1MDYyN1x1MDYzM1x1MDY0NSBcdTA2NDhcdTA2MzFcdTA2NDhcdTA2MkZcdTA2NEE6IFx1MDYyOFx1MDYyN1x1MDZDQ1x1MDYyRiAke2V4cGVjdGVkfSBcdTA2NDhcdTA2MjdcdTA2Q0MsIFx1MDY0NVx1MDZBQlx1MDYzMSAke3JlY2VpdmVkfSBcdTA2MkFcdTA2MzFcdTA2NDRcdTA2MjdcdTA2MzNcdTA2NDcgXHUwNjM0XHUwNjQ4YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjQ2XHUwNjI3XHUwNjMzXHUwNjQ1IFx1MDY0OFx1MDYzMVx1MDY0OFx1MDYyRlx1MDY0QTogXHUwNjI4XHUwNjI3XHUwNkNDXHUwNjJGICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX0gXHUwNjQ4XHUwNjI3XHUwNkNDYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2NDZcdTA2MjdcdTA2MzNcdTA2NDUgXHUwNjI3XHUwNjQ2XHUwNjJBXHUwNjJFXHUwNjI3XHUwNjI4OiBcdTA2MjhcdTA2MjdcdTA2Q0NcdTA2MkYgXHUwNkNDXHUwNjQ4IFx1MDY0NFx1MDY0NyAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX0gXHUwNjg1XHUwNjJFXHUwNjQ3IFx1MDY0OFx1MDYyN1x1MDZDQ2A7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY4OVx1MDZDQ1x1MDYzMSBcdTA2NDRcdTA2NDhcdTA2Q0M6ICR7aXNzdWUub3JpZ2luID8/IFwiXHUwNjI3XHUwNjMxXHUwNjMyXHUwNjlBXHUwNjJBXCJ9IFx1MDYyOFx1MDYyN1x1MDZDQ1x1MDYyRiAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcIlx1MDYzOVx1MDY0Nlx1MDYzNVx1MDYzMVx1MDY0OFx1MDY0Nlx1MDY0N1wifSBcdTA2NDhcdTA2NDRcdTA2MzFcdTA2NEFgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjg5XHUwNkNDXHUwNjMxIFx1MDY0NFx1MDY0OFx1MDZDQzogJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdTA2MjdcdTA2MzFcdTA2MzJcdTA2OUFcdTA2MkFcIn0gXHUwNjI4XHUwNjI3XHUwNkNDXHUwNjJGICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSBcdTA2NDhcdTA2NEFgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2ODlcdTA2Q0NcdTA2MzEgXHUwNkE5XHUwNjQ4XHUwNjg2XHUwNjQ2XHUwNkNDOiAke2lzc3VlLm9yaWdpbn0gXHUwNjI4XHUwNjI3XHUwNkNDXHUwNjJGICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fSBcdTA2NDhcdTA2NDRcdTA2MzFcdTA2NEFgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjg5XHUwNkNDXHUwNjMxIFx1MDZBOVx1MDY0OFx1MDY4Nlx1MDY0Nlx1MDZDQzogJHtpc3N1ZS5vcmlnaW59IFx1MDYyOFx1MDYyN1x1MDZDQ1x1MDYyRiAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gXHUwNjQ4XHUwNjRBYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0Nlx1MDYyN1x1MDYzM1x1MDY0NSBcdTA2NDVcdTA2MkFcdTA2NDY6IFx1MDYyOFx1MDYyN1x1MDZDQ1x1MDYyRiBcdTA2MkYgXCIke19pc3N1ZS5wcmVmaXh9XCIgXHUwNjMzXHUwNjMxXHUwNjQ3IFx1MDY3RVx1MDZDQ1x1MDY0NCBcdTA2MzRcdTA2NEFgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0Nlx1MDYyN1x1MDYzM1x1MDY0NSBcdTA2NDVcdTA2MkFcdTA2NDY6IFx1MDYyOFx1MDYyN1x1MDZDQ1x1MDYyRiBcdTA2MkYgXCIke19pc3N1ZS5zdWZmaXh9XCIgXHUwNjMzXHUwNjMxXHUwNjQ3IFx1MDY3RVx1MDYyN1x1MDZDQyBcdTA2MkFcdTA2NDcgXHUwNjQ4XHUwNjMxXHUwNjMzXHUwNjRBXHUwNjk2XHUwNjRBYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0Nlx1MDYyN1x1MDYzM1x1MDY0NSBcdTA2NDVcdTA2MkFcdTA2NDY6IFx1MDYyOFx1MDYyN1x1MDZDQ1x1MDYyRiBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiIFx1MDY0OFx1MDY0NFx1MDYzMVx1MDY0QWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2NDZcdTA2MjdcdTA2MzNcdTA2NDUgXHUwNjQ1XHUwNjJBXHUwNjQ2OiBcdTA2MjhcdTA2MjdcdTA2Q0NcdTA2MkYgXHUwNjJGICR7X2lzc3VlLnBhdHRlcm59IFx1MDYzM1x1MDYzMVx1MDY0NyBcdTA2NDVcdTA2MzdcdTA2MjdcdTA2MjhcdTA2NDJcdTA2MkEgXHUwNjQ4XHUwNjQ0XHUwNjMxXHUwNjRBYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9IFx1MDY0Nlx1MDYyN1x1MDYzM1x1MDY0NSBcdTA2MkZcdTA2Q0NgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0Nlx1MDYyN1x1MDYzM1x1MDY0NSBcdTA2MzlcdTA2MkZcdTA2MkY6IFx1MDYyOFx1MDYyN1x1MDZDQ1x1MDYyRiBcdTA2MkYgJHtpc3N1ZS5kaXZpc29yfSBcdTA2NDVcdTA2MzZcdTA2MzFcdTA2MjggXHUwNjQ4XHUwNjRBYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjQ2XHUwNjI3XHUwNjMzXHUwNjQ1ICR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJcdTA2QTlcdTA2NDRcdTA2Q0NcdTA2ODlcdTA2NDhcdTA2NDZcdTA2NDdcIiA6IFwiXHUwNkE5XHUwNjQ0XHUwNkNDXHUwNjg5XCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0Nlx1MDYyN1x1MDYzM1x1MDY0NSBcdTA2QTlcdTA2NDRcdTA2Q0NcdTA2ODkgXHUwNjdFXHUwNjQ3ICR7aXNzdWUub3JpZ2lufSBcdTA2QTlcdTA2RDBgO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDY0Nlx1MDYyN1x1MDYzM1x1MDY0NVx1MDY0NyBcdTA2NDhcdTA2MzFcdTA2NDhcdTA2MkZcdTA2NEFgO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjQ2XHUwNjI3XHUwNjMzXHUwNjQ1IFx1MDYzOVx1MDY0Nlx1MDYzNVx1MDYzMSBcdTA2N0VcdTA2NDcgJHtpc3N1ZS5vcmlnaW59IFx1MDZBOVx1MDZEMGA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjQ2XHUwNjI3XHUwNjMzXHUwNjQ1XHUwNjQ3IFx1MDY0OFx1MDYzMVx1MDY0OFx1MDYyRlx1MDY0QWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiem5ha1x1MDBGM3dcIixcbiAgICAgICAgICAgIHZlcmI6IFwibWllXHUwMTA3XCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJiYWp0XHUwMEYzd1wiLFxuICAgICAgICAgICAgdmVyYjogXCJtaWVcdTAxMDdcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW50XHUwMEYzd1wiLFxuICAgICAgICAgICAgdmVyYjogXCJtaWVcdTAxMDdcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiZWxlbWVudFx1MDBGM3dcIixcbiAgICAgICAgICAgIHZlcmI6IFwibWllXHUwMTA3XCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcInd5cmFcdTAxN0NlbmllXCIsXG4gICAgICAgIGVtYWlsOiBcImFkcmVzIGVtYWlsXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiZW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiZGF0YSBpIGdvZHppbmEgdyBmb3JtYWNpZSBJU09cIixcbiAgICAgICAgZGF0ZTogXCJkYXRhIHcgZm9ybWFjaWUgSVNPXCIsXG4gICAgICAgIHRpbWU6IFwiZ29kemluYSB3IGZvcm1hY2llIElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJjemFzIHRyd2FuaWEgSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiYWRyZXMgSVB2NFwiLFxuICAgICAgICBpcHY2OiBcImFkcmVzIElQdjZcIixcbiAgICAgICAgY2lkcnY0OiBcInpha3JlcyBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJ6YWtyZXMgSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwiY2lcdTAxMDVnIHpuYWtcdTAwRjN3IHpha29kb3dhbnkgdyBmb3JtYWNpZSBiYXNlNjRcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImNpXHUwMTA1ZyB6bmFrXHUwMEYzdyB6YWtvZG93YW55IHcgZm9ybWFjaWUgYmFzZTY0dXJsXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcImNpXHUwMTA1ZyB6bmFrXHUwMEYzdyB3IGZvcm1hY2llIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJsaWN6YmEgRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIndlalx1MDE1QmNpZVwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwibGljemJhXCIsXG4gICAgICAgIGFycmF5OiBcInRhYmxpY2FcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOaWVwcmF3aWRcdTAxNDJvd2UgZGFuZSB3ZWpcdTAxNUJjaW93ZTogb2N6ZWtpd2FubyBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBvdHJ6eW1hbm8gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmllcHJhd2lkXHUwMTQyb3dlIGRhbmUgd2VqXHUwMTVCY2lvd2U6IG9jemVraXdhbm8gJHtleHBlY3RlZH0sIG90cnp5bWFubyAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBOaWVwcmF3aWRcdTAxNDJvd2UgZGFuZSB3ZWpcdTAxNUJjaW93ZTogb2N6ZWtpd2FubyAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5pZXByYXdpZFx1MDE0Mm93YSBvcGNqYTogb2N6ZWtpd2FubyBqZWRuZWogeiB3YXJ0b1x1MDE1QmNpICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFphIGR1XHUwMTdDYSB3YXJ0b1x1MDE1Qlx1MDEwNzogb2N6ZWtpd2FubywgXHUwMTdDZSAke2lzc3VlLm9yaWdpbiA/PyBcIndhcnRvXHUwMTVCXHUwMTA3XCJ9IGJcdTAxMTlkemllIG1pZVx1MDEwNyAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRcdTAwRjN3XCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFpieXQgZHVcdTAxN0MoeS9hL2UpOiBvY3pla2l3YW5vLCBcdTAxN0NlICR7aXNzdWUub3JpZ2luID8/IFwid2FydG9cdTAxNUJcdTAxMDdcIn0gYlx1MDExOWR6aWUgd3lub3NpXHUwMTA3ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFphIG1hXHUwMTQyYSB3YXJ0b1x1MDE1Qlx1MDEwNzogb2N6ZWtpd2FubywgXHUwMTdDZSAke2lzc3VlLm9yaWdpbiA/PyBcIndhcnRvXHUwMTVCXHUwMTA3XCJ9IGJcdTAxMTlkemllIG1pZVx1MDEwNyAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRcdTAwRjN3XCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFpieXQgbWFcdTAxNDIoeS9hL2UpOiBvY3pla2l3YW5vLCBcdTAxN0NlICR7aXNzdWUub3JpZ2luID8/IFwid2FydG9cdTAxNUJcdTAxMDdcIn0gYlx1MDExOWR6aWUgd3lub3NpXHUwMTA3ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikgcmV0dXJuIGBOaWVwcmF3aWRcdTAxNDJvd3kgY2lcdTAxMDVnIHpuYWtcdTAwRjN3OiBtdXNpIHphY3p5bmFcdTAxMDcgc2lcdTAxMTkgb2QgXCIke19pc3N1ZS5wcmVmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBOaWVwcmF3aWRcdTAxNDJvd3kgY2lcdTAxMDVnIHpuYWtcdTAwRjN3OiBtdXNpIGtvXHUwMTQ0Y3p5XHUwMTA3IHNpXHUwMTE5IG5hIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBOaWVwcmF3aWRcdTAxNDJvd3kgY2lcdTAxMDVnIHpuYWtcdTAwRjN3OiBtdXNpIHphd2llcmFcdTAxMDcgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgTmllcHJhd2lkXHUwMTQyb3d5IGNpXHUwMTA1ZyB6bmFrXHUwMEYzdzogbXVzaSBvZHBvd2lhZGFcdTAxMDcgd3pvcmNvd2kgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5pZXByYXdpZFx1MDE0Mm93KHkvYS9lKSAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmllcHJhd2lkXHUwMTQyb3dhIGxpY3piYTogbXVzaSBieVx1MDEwNyB3aWVsb2tyb3Rub1x1MDE1QmNpXHUwMTA1ICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOaWVyb3pwb3puYW5lIGtsdWN6ZSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOaWVwcmF3aWRcdTAxNDJvd3kga2x1Y3ogdyAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJOaWVwcmF3aWRcdTAxNDJvd2UgZGFuZSB3ZWpcdTAxNUJjaW93ZVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmllcHJhd2lkXHUwMTQyb3dhIHdhcnRvXHUwMTVCXHUwMTA3IHcgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOaWVwcmF3aWRcdTAxNDJvd2UgZGFuZSB3ZWpcdTAxNUJjaW93ZWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiY2FyYWN0ZXJlc1wiLFxuICAgICAgICAgICAgdmVyYjogXCJ0ZXJcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJ5dGVzXCIsXG4gICAgICAgICAgICB2ZXJiOiBcInRlclwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcIml0ZW5zXCIsXG4gICAgICAgICAgICB2ZXJiOiBcInRlclwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJpdGVuc1wiLFxuICAgICAgICAgICAgdmVyYjogXCJ0ZXJcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwicGFkclx1MDBFM29cIixcbiAgICAgICAgZW1haWw6IFwiZW5kZXJlXHUwMEU3byBkZSBlLW1haWxcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJkYXRhIGUgaG9yYSBJU09cIixcbiAgICAgICAgZGF0ZTogXCJkYXRhIElTT1wiLFxuICAgICAgICB0aW1lOiBcImhvcmEgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcImR1cmFcdTAwRTdcdTAwRTNvIElTT1wiLFxuICAgICAgICBpcHY0OiBcImVuZGVyZVx1MDBFN28gSVB2NFwiLFxuICAgICAgICBpcHY2OiBcImVuZGVyZVx1MDBFN28gSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwiZmFpeGEgZGUgSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwiZmFpeGEgZGUgSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwidGV4dG8gY29kaWZpY2FkbyBlbSBiYXNlNjRcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcIlVSTCBjb2RpZmljYWRhIGVtIGJhc2U2NFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJ0ZXh0byBKU09OXCIsXG4gICAgICAgIGUxNjQ6IFwiblx1MDBGQW1lcm8gRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcImVudHJhZGFcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIm5cdTAwRkFtZXJvXCIsXG4gICAgICAgIG51bGw6IFwibnVsb1wiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFRpcG8gaW52XHUwMEUxbGlkbzogZXNwZXJhZG8gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgcmVjZWJpZG8gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVGlwbyBpbnZcdTAwRTFsaWRvOiBlc3BlcmFkbyAke2V4cGVjdGVkfSwgcmVjZWJpZG8gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgRW50cmFkYSBpbnZcdTAwRTFsaWRhOiBlc3BlcmFkbyAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9wXHUwMEU3XHUwMEUzbyBpbnZcdTAwRTFsaWRhOiBlc3BlcmFkYSB1bWEgZGFzICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYE11aXRvIGdyYW5kZTogZXNwZXJhZG8gcXVlICR7aXNzdWUub3JpZ2luID8/IFwidmFsb3JcIn0gdGl2ZXNzZSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRvc1wifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTXVpdG8gZ3JhbmRlOiBlc3BlcmFkbyBxdWUgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2YWxvclwifSBmb3NzZSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBNdWl0byBwZXF1ZW5vOiBlc3BlcmFkbyBxdWUgJHtpc3N1ZS5vcmlnaW59IHRpdmVzc2UgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE11aXRvIHBlcXVlbm86IGVzcGVyYWRvIHF1ZSAke2lzc3VlLm9yaWdpbn0gZm9zc2UgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSByZXR1cm4gYFRleHRvIGludlx1MDBFMWxpZG86IGRldmUgY29tZVx1MDBFN2FyIGNvbSBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSByZXR1cm4gYFRleHRvIGludlx1MDBFMWxpZG86IGRldmUgdGVybWluYXIgY29tIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBUZXh0byBpbnZcdTAwRTFsaWRvOiBkZXZlIGluY2x1aXIgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgVGV4dG8gaW52XHUwMEUxbGlkbzogZGV2ZSBjb3JyZXNwb25kZXIgYW8gcGFkclx1MDBFM28gJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9IGludlx1MDBFMWxpZG9gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5cdTAwRkFtZXJvIGludlx1MDBFMWxpZG86IGRldmUgc2VyIG1cdTAwRkFsdGlwbG8gZGUgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYENoYXZlJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJ9IGRlc2NvbmhlY2lkYSR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBDaGF2ZSBpbnZcdTAwRTFsaWRhIGVtICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIkVudHJhZGEgaW52XHUwMEUxbGlkYVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgVmFsb3IgaW52XHUwMEUxbGlkbyBlbSAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYENhbXBvIGludlx1MDBFMWxpZG9gO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5mdW5jdGlvbiBnZXRSdXNzaWFuUGx1cmFsKGNvdW50LCBvbmUsIGZldywgbWFueSkge1xuICAgIGNvbnN0IGFic0NvdW50ID0gTWF0aC5hYnMoY291bnQpO1xuICAgIGNvbnN0IGxhc3REaWdpdCA9IGFic0NvdW50ICUgMTA7XG4gICAgY29uc3QgbGFzdFR3b0RpZ2l0cyA9IGFic0NvdW50ICUgMTAwO1xuICAgIGlmIChsYXN0VHdvRGlnaXRzID49IDExICYmIGxhc3RUd29EaWdpdHMgPD0gMTkpIHtcbiAgICAgICAgcmV0dXJuIG1hbnk7XG4gICAgfVxuICAgIGlmIChsYXN0RGlnaXQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG9uZTtcbiAgICB9XG4gICAgaWYgKGxhc3REaWdpdCA+PSAyICYmIGxhc3REaWdpdCA8PSA0KSB7XG4gICAgICAgIHJldHVybiBmZXc7XG4gICAgfVxuICAgIHJldHVybiBtYW55O1xufVxuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDoge1xuICAgICAgICAgICAgICAgIG9uZTogXCJcdTA0NDFcdTA0MzhcdTA0M0NcdTA0MzJcdTA0M0VcdTA0M0JcIixcbiAgICAgICAgICAgICAgICBmZXc6IFwiXHUwNDQxXHUwNDM4XHUwNDNDXHUwNDMyXHUwNDNFXHUwNDNCXHUwNDMwXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCJcdTA0NDFcdTA0MzhcdTA0M0NcdTA0MzJcdTA0M0VcdTA0M0JcdTA0M0VcdTA0MzJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNDM4XHUwNDNDXHUwNDM1XHUwNDQyXHUwNDRDXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDoge1xuICAgICAgICAgICAgICAgIG9uZTogXCJcdTA0MzFcdTA0MzBcdTA0MzlcdTA0NDJcIixcbiAgICAgICAgICAgICAgICBmZXc6IFwiXHUwNDMxXHUwNDMwXHUwNDM5XHUwNDQyXHUwNDMwXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCJcdTA0MzFcdTA0MzBcdTA0MzlcdTA0NDJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNDM4XHUwNDNDXHUwNDM1XHUwNDQyXHUwNDRDXCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IHtcbiAgICAgICAgICAgICAgICBvbmU6IFwiXHUwNDREXHUwNDNCXHUwNDM1XHUwNDNDXHUwNDM1XHUwNDNEXHUwNDQyXCIsXG4gICAgICAgICAgICAgICAgZmV3OiBcIlx1MDQ0RFx1MDQzQlx1MDQzNVx1MDQzQ1x1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQzMFwiLFxuICAgICAgICAgICAgICAgIG1hbnk6IFwiXHUwNDREXHUwNDNCXHUwNDM1XHUwNDNDXHUwNDM1XHUwNDNEXHUwNDQyXHUwNDNFXHUwNDMyXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MDQzOFx1MDQzQ1x1MDQzNVx1MDQ0Mlx1MDQ0Q1wiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDoge1xuICAgICAgICAgICAgICAgIG9uZTogXCJcdTA0NERcdTA0M0JcdTA0MzVcdTA0M0NcdTA0MzVcdTA0M0RcdTA0NDJcIixcbiAgICAgICAgICAgICAgICBmZXc6IFwiXHUwNDREXHUwNDNCXHUwNDM1XHUwNDNDXHUwNDM1XHUwNDNEXHUwNDQyXHUwNDMwXCIsXG4gICAgICAgICAgICAgICAgbWFueTogXCJcdTA0NERcdTA0M0JcdTA0MzVcdTA0M0NcdTA0MzVcdTA0M0RcdTA0NDJcdTA0M0VcdTA0MzJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNDM4XHUwNDNDXHUwNDM1XHUwNDQyXHUwNDRDXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIlx1MDQzMlx1MDQzMlx1MDQzRVx1MDQzNFwiLFxuICAgICAgICBlbWFpbDogXCJlbWFpbCBcdTA0MzBcdTA0MzRcdTA0NDBcdTA0MzVcdTA0NDFcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJcdTA0NERcdTA0M0NcdTA0M0VcdTA0MzRcdTA0MzdcdTA0MzhcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPIFx1MDQzNFx1MDQzMFx1MDQ0Mlx1MDQzMCBcdTA0MzggXHUwNDMyXHUwNDQwXHUwNDM1XHUwNDNDXHUwNDRGXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPIFx1MDQzNFx1MDQzMFx1MDQ0Mlx1MDQzMFwiLFxuICAgICAgICB0aW1lOiBcIklTTyBcdTA0MzJcdTA0NDBcdTA0MzVcdTA0M0NcdTA0NEZcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIFx1MDQzNFx1MDQzQlx1MDQzOFx1MDQ0Mlx1MDQzNVx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQzRVx1MDQ0MVx1MDQ0Mlx1MDQ0Q1wiLFxuICAgICAgICBpcHY0OiBcIklQdjQgXHUwNDMwXHUwNDM0XHUwNDQwXHUwNDM1XHUwNDQxXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiBcdTA0MzBcdTA0MzRcdTA0NDBcdTA0MzVcdTA0NDFcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgXHUwNDM0XHUwNDM4XHUwNDMwXHUwNDNGXHUwNDMwXHUwNDM3XHUwNDNFXHUwNDNEXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2IFx1MDQzNFx1MDQzOFx1MDQzMFx1MDQzRlx1MDQzMFx1MDQzN1x1MDQzRVx1MDQzRFwiLFxuICAgICAgICBiYXNlNjQ6IFwiXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDNFXHUwNDNBXHUwNDMwIFx1MDQzMiBcdTA0NDRcdTA0M0VcdTA0NDBcdTA0M0NcdTA0MzBcdTA0NDJcdTA0MzUgYmFzZTY0XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJcdTA0NDFcdTA0NDJcdTA0NDBcdTA0M0VcdTA0M0FcdTA0MzAgXHUwNDMyIFx1MDQ0NFx1MDQzRVx1MDQ0MFx1MDQzQ1x1MDQzMFx1MDQ0Mlx1MDQzNSBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTiBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0M0VcdTA0M0FcdTA0MzBcIixcbiAgICAgICAgZTE2NDogXCJcdTA0M0RcdTA0M0VcdTA0M0NcdTA0MzVcdTA0NDAgRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIlx1MDQzMlx1MDQzMlx1MDQzRVx1MDQzNFwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiLFxuICAgICAgICBudW1iZXI6IFwiXHUwNDQ3XHUwNDM4XHUwNDQxXHUwNDNCXHUwNDNFXCIsXG4gICAgICAgIGFycmF5OiBcIlx1MDQzQ1x1MDQzMFx1MDQ0MVx1MDQ0MVx1MDQzOFx1MDQzMlwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzRFx1MDQ0Qlx1MDQzOSBcdTA0MzJcdTA0MzJcdTA0M0VcdTA0MzQ6IFx1MDQzRVx1MDQzNlx1MDQzOFx1MDQzNFx1MDQzMFx1MDQzQlx1MDQzRVx1MDQ0MVx1MDQ0QyBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBcdTA0M0ZcdTA0M0VcdTA0M0JcdTA0NDNcdTA0NDdcdTA0MzVcdTA0M0RcdTA0M0UgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDM1XHUwNDQwXHUwNDNEXHUwNDRCXHUwNDM5IFx1MDQzMlx1MDQzMlx1MDQzRVx1MDQzNDogXHUwNDNFXHUwNDM2XHUwNDM4XHUwNDM0XHUwNDMwXHUwNDNCXHUwNDNFXHUwNDQxXHUwNDRDICR7ZXhwZWN0ZWR9LCBcdTA0M0ZcdTA0M0VcdTA0M0JcdTA0NDNcdTA0NDdcdTA0MzVcdTA0M0RcdTA0M0UgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDM1XHUwNDQwXHUwNDNEXHUwNDRCXHUwNDM5IFx1MDQzMlx1MDQzMlx1MDQzRVx1MDQzNDogXHUwNDNFXHUwNDM2XHUwNDM4XHUwNDM0XHUwNDMwXHUwNDNCXHUwNDNFXHUwNDQxXHUwNDRDICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDM1XHUwNDQwXHUwNDNEXHUwNDRCXHUwNDM5IFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQzMFx1MDQzRFx1MDQ0MjogXHUwNDNFXHUwNDM2XHUwNDM4XHUwNDM0XHUwNDMwXHUwNDNCXHUwNDNFXHUwNDQxXHUwNDRDIFx1MDQzRVx1MDQzNFx1MDQzRFx1MDQzRSBcdTA0MzhcdTA0MzcgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gTnVtYmVyKGlzc3VlLm1heGltdW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pdCA9IGdldFJ1c3NpYW5QbHVyYWwobWF4VmFsdWUsIHNpemluZy51bml0Lm9uZSwgc2l6aW5nLnVuaXQuZmV3LCBzaXppbmcudW5pdC5tYW55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDIxXHUwNDNCXHUwNDM4XHUwNDQ4XHUwNDNBXHUwNDNFXHUwNDNDIFx1MDQzMVx1MDQzRVx1MDQzQlx1MDQ0Q1x1MDQ0OFx1MDQzRVx1MDQzNSBcdTA0MzdcdTA0M0RcdTA0MzBcdTA0NDdcdTA0MzVcdTA0M0RcdTA0MzhcdTA0MzU6IFx1MDQzRVx1MDQzNlx1MDQzOFx1MDQzNFx1MDQzMFx1MDQzQlx1MDQzRVx1MDQ0MVx1MDQ0QywgXHUwNDQ3XHUwNDQyXHUwNDNFICR7aXNzdWUub3JpZ2luID8/IFwiXHUwNDM3XHUwNDNEXHUwNDMwXHUwNDQ3XHUwNDM1XHUwNDNEXHUwNDM4XHUwNDM1XCJ9IFx1MDQzMVx1MDQ0M1x1MDQzNFx1MDQzNVx1MDQ0MiBcdTA0MzhcdTA0M0NcdTA0MzVcdTA0NDJcdTA0NEMgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7dW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDIxXHUwNDNCXHUwNDM4XHUwNDQ4XHUwNDNBXHUwNDNFXHUwNDNDIFx1MDQzMVx1MDQzRVx1MDQzQlx1MDQ0Q1x1MDQ0OFx1MDQzRVx1MDQzNSBcdTA0MzdcdTA0M0RcdTA0MzBcdTA0NDdcdTA0MzVcdTA0M0RcdTA0MzhcdTA0MzU6IFx1MDQzRVx1MDQzNlx1MDQzOFx1MDQzNFx1MDQzMFx1MDQzQlx1MDQzRVx1MDQ0MVx1MDQ0QywgXHUwNDQ3XHUwNDQyXHUwNDNFICR7aXNzdWUub3JpZ2luID8/IFwiXHUwNDM3XHUwNDNEXHUwNDMwXHUwNDQ3XHUwNDM1XHUwNDNEXHUwNDM4XHUwNDM1XCJ9IFx1MDQzMVx1MDQ0M1x1MDQzNFx1MDQzNVx1MDQ0MiAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWluVmFsdWUgPSBOdW1iZXIoaXNzdWUubWluaW11bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bml0ID0gZ2V0UnVzc2lhblBsdXJhbChtaW5WYWx1ZSwgc2l6aW5nLnVuaXQub25lLCBzaXppbmcudW5pdC5mZXcsIHNpemluZy51bml0Lm1hbnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MjFcdTA0M0JcdTA0MzhcdTA0NDhcdTA0M0FcdTA0M0VcdTA0M0MgXHUwNDNDXHUwNDMwXHUwNDNCXHUwNDM1XHUwNDNEXHUwNDRDXHUwNDNBXHUwNDNFXHUwNDM1IFx1MDQzN1x1MDQzRFx1MDQzMFx1MDQ0N1x1MDQzNVx1MDQzRFx1MDQzOFx1MDQzNTogXHUwNDNFXHUwNDM2XHUwNDM4XHUwNDM0XHUwNDMwXHUwNDNCXHUwNDNFXHUwNDQxXHUwNDRDLCBcdTA0NDdcdTA0NDJcdTA0M0UgJHtpc3N1ZS5vcmlnaW59IFx1MDQzMVx1MDQ0M1x1MDQzNFx1MDQzNVx1MDQ0MiBcdTA0MzhcdTA0M0NcdTA0MzVcdTA0NDJcdTA0NEMgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7dW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDIxXHUwNDNCXHUwNDM4XHUwNDQ4XHUwNDNBXHUwNDNFXHUwNDNDIFx1MDQzQ1x1MDQzMFx1MDQzQlx1MDQzNVx1MDQzRFx1MDQ0Q1x1MDQzQVx1MDQzRVx1MDQzNSBcdTA0MzdcdTA0M0RcdTA0MzBcdTA0NDdcdTA0MzVcdTA0M0RcdTA0MzhcdTA0MzU6IFx1MDQzRVx1MDQzNlx1MDQzOFx1MDQzNFx1MDQzMFx1MDQzQlx1MDQzRVx1MDQ0MVx1MDQ0QywgXHUwNDQ3XHUwNDQyXHUwNDNFICR7aXNzdWUub3JpZ2lufSBcdTA0MzFcdTA0NDNcdTA0MzRcdTA0MzVcdTA0NDIgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzRFx1MDQzMFx1MDQ0RiBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0M0VcdTA0M0FcdTA0MzA6IFx1MDQzNFx1MDQzRVx1MDQzQlx1MDQzNlx1MDQzRFx1MDQzMCBcdTA0M0RcdTA0MzBcdTA0NDdcdTA0MzhcdTA0M0RcdTA0MzBcdTA0NDJcdTA0NENcdTA0NDFcdTA0NEYgXHUwNDQxIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDM1XHUwNDQwXHUwNDNEXHUwNDMwXHUwNDRGIFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzRVx1MDQzQVx1MDQzMDogXHUwNDM0XHUwNDNFXHUwNDNCXHUwNDM2XHUwNDNEXHUwNDMwIFx1MDQzN1x1MDQzMFx1MDQzQVx1MDQzMFx1MDQzRFx1MDQ0N1x1MDQzOFx1MDQzMlx1MDQzMFx1MDQ0Mlx1MDQ0Q1x1MDQ0MVx1MDQ0RiBcdTA0M0RcdTA0MzAgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzRFx1MDQzMFx1MDQ0RiBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0M0VcdTA0M0FcdTA0MzA6IFx1MDQzNFx1MDQzRVx1MDQzQlx1MDQzNlx1MDQzRFx1MDQzMCBcdTA0NDFcdTA0M0VcdTA0MzRcdTA0MzVcdTA0NDBcdTA0MzZcdTA0MzBcdTA0NDJcdTA0NEMgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDM1XHUwNDQwXHUwNDNEXHUwNDMwXHUwNDRGIFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzRVx1MDQzQVx1MDQzMDogXHUwNDM0XHUwNDNFXHUwNDNCXHUwNDM2XHUwNDNEXHUwNDMwIFx1MDQ0MVx1MDQzRVx1MDQzRVx1MDQ0Mlx1MDQzMlx1MDQzNVx1MDQ0Mlx1MDQ0MVx1MDQ0Mlx1MDQzMlx1MDQzRVx1MDQzMlx1MDQzMFx1MDQ0Mlx1MDQ0QyBcdTA0NDhcdTA0MzBcdTA0MzFcdTA0M0JcdTA0M0VcdTA0M0RcdTA0NDMgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzRFx1MDQ0Qlx1MDQzOSAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDMyXHUwNDM1XHUwNDQwXHUwNDNEXHUwNDNFXHUwNDM1IFx1MDQ0N1x1MDQzOFx1MDQ0MVx1MDQzQlx1MDQzRTogXHUwNDM0XHUwNDNFXHUwNDNCXHUwNDM2XHUwNDNEXHUwNDNFIFx1MDQzMVx1MDQ0Qlx1MDQ0Mlx1MDQ0QyBcdTA0M0FcdTA0NDBcdTA0MzBcdTA0NDJcdTA0M0RcdTA0NEJcdTA0M0MgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzRlx1MDQzRVx1MDQzN1x1MDQzRFx1MDQzMFx1MDQzRFx1MDQzRCR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJcdTA0NEJcdTA0MzVcIiA6IFwiXHUwNDRCXHUwNDM5XCJ9IFx1MDQzQVx1MDQzQlx1MDQ0RVx1MDQ0NyR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJcdTA0MzhcIiA6IFwiXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzRFx1MDQ0Qlx1MDQzOSBcdTA0M0FcdTA0M0JcdTA0NEVcdTA0NDcgXHUwNDMyICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzRFx1MDQ0Qlx1MDQzNSBcdTA0MzJcdTA0NDVcdTA0M0VcdTA0MzRcdTA0M0RcdTA0NEJcdTA0MzUgXHUwNDM0XHUwNDMwXHUwNDNEXHUwNDNEXHUwNDRCXHUwNDM1XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MURcdTA0MzVcdTA0MzJcdTA0MzVcdTA0NDBcdTA0M0RcdTA0M0VcdTA0MzUgXHUwNDM3XHUwNDNEXHUwNDMwXHUwNDQ3XHUwNDM1XHUwNDNEXHUwNDM4XHUwNDM1IFx1MDQzMiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzRFx1MDQ0Qlx1MDQzNSBcdTA0MzJcdTA0NDVcdTA0M0VcdTA0MzRcdTA0M0RcdTA0NEJcdTA0MzUgXHUwNDM0XHUwNDMwXHUwNDNEXHUwNDNEXHUwNDRCXHUwNDM1YDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJ6bmFrb3ZcIixcbiAgICAgICAgICAgIHZlcmI6IFwiaW1ldGlcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcImJhanRvdlwiLFxuICAgICAgICAgICAgdmVyYjogXCJpbWV0aVwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcImVsZW1lbnRvdlwiLFxuICAgICAgICAgICAgdmVyYjogXCJpbWV0aVwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJlbGVtZW50b3ZcIixcbiAgICAgICAgICAgIHZlcmI6IFwiaW1ldGlcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwidm5vc1wiLFxuICAgICAgICBlbWFpbDogXCJlLXBvXHUwMTYxdG5pIG5hc2xvdlwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTTyBkYXR1bSBpbiBcdTAxMERhc1wiLFxuICAgICAgICBkYXRlOiBcIklTTyBkYXR1bVwiLFxuICAgICAgICB0aW1lOiBcIklTTyBcdTAxMERhc1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08gdHJhamFuamVcIixcbiAgICAgICAgaXB2NDogXCJJUHY0IG5hc2xvdlwiLFxuICAgICAgICBpcHY2OiBcIklQdjYgbmFzbG92XCIsXG4gICAgICAgIGNpZHJ2NDogXCJvYnNlZyBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJvYnNlZyBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQga29kaXJhbiBuaXpcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybCBrb2RpcmFuIG5pelwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIG5pelwiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IFx1MDE2MXRldmlsa2FcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcInZub3NcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIlx1MDE2MXRldmlsb1wiLFxuICAgICAgICBhcnJheTogXCJ0YWJlbGFcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZlbGphdmVuIHZub3M6IHByaVx1MDEwRGFrb3Zhbm8gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgcHJlamV0byAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZlbGphdmVuIHZub3M6IHByaVx1MDEwRGFrb3Zhbm8gJHtleHBlY3RlZH0sIHByZWpldG8gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgTmV2ZWxqYXZlbiB2bm9zOiBwcmlcdTAxMERha292YW5vICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgTmV2ZWxqYXZuYSBtb1x1MDE3RW5vc3Q6IHByaVx1MDEwRGFrb3Zhbm8gZW5vIGl6bWVkICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYFByZXZlbGlrbzogcHJpXHUwMTBEYWtvdmFubywgZGEgYm8gJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2cmVkbm9zdFwifSBpbWVsbyAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcImVsZW1lbnRvdlwifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgUHJldmVsaWtvOiBwcmlcdTAxMERha292YW5vLCBkYSBibyAke2lzc3VlLm9yaWdpbiA/PyBcInZyZWRub3N0XCJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFByZW1hamhubzogcHJpXHUwMTBEYWtvdmFubywgZGEgYm8gJHtpc3N1ZS5vcmlnaW59IGltZWxvICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBQcmVtYWpobm86IHByaVx1MDEwRGFrb3Zhbm8sIGRhIGJvICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgTmV2ZWxqYXZlbiBuaXo6IG1vcmEgc2UgemFcdTAxMERldGkgeiBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgTmV2ZWxqYXZlbiBuaXo6IG1vcmEgc2Uga29uXHUwMTBEYXRpIHogXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYE5ldmVsamF2ZW4gbml6OiBtb3JhIHZzZWJvdmF0aSBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBOZXZlbGphdmVuIG5pejogbW9yYSB1c3RyZXphdGkgdnpvcmN1ICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZlbGphdmVuICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZlbGphdm5vIFx1MDE2MXRldmlsbzogbW9yYSBiaXRpIHZlXHUwMTBEa3JhdG5payAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTmVwcmVwb3puYW4ke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiaSBrbGp1XHUwMTBEaVwiIDogXCIga2xqdVx1MDEwRFwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOZXZlbGphdmVuIGtsanVcdTAxMEQgdiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJOZXZlbGphdmVuIHZub3NcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5ldmVsamF2bmEgdnJlZG5vc3QgdiAke2lzc3VlLm9yaWdpbn1gO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJOZXZlbGphdmVuIHZub3NcIjtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJ0ZWNrZW5cIixcbiAgICAgICAgICAgIHZlcmI6IFwiYXR0IGhhXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJieXRlc1wiLFxuICAgICAgICAgICAgdmVyYjogXCJhdHQgaGFcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJvYmpla3RcIixcbiAgICAgICAgICAgIHZlcmI6IFwiYXR0IGlubmVoXHUwMEU1bGxhXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcIm9iamVrdFwiLFxuICAgICAgICAgICAgdmVyYjogXCJhdHQgaW5uZWhcdTAwRTVsbGFcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwicmVndWxqXHUwMEU0cnQgdXR0cnlja1wiLFxuICAgICAgICBlbWFpbDogXCJlLXBvc3RhZHJlc3NcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08tZGF0dW0gb2NoIHRpZFwiLFxuICAgICAgICBkYXRlOiBcIklTTy1kYXR1bVwiLFxuICAgICAgICB0aW1lOiBcIklTTy10aWRcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPLXZhcmFrdGlnaGV0XCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NC1pbnRlcnZhbGxcIixcbiAgICAgICAgaXB2NjogXCJJUHY2LWludGVydmFsbFwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NC1zcGVrdHJ1bVwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2Ni1zcGVrdHJ1bVwiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0LWtvZGFkIHN0clx1MDBFNG5nXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwta29kYWQgc3RyXHUwMEU0bmdcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTi1zdHJcdTAwRTRuZ1wiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0LW51bW1lclwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwibWFsbC1saXRlcmFsXCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJhbnRhbFwiLFxuICAgICAgICBhcnJheTogXCJsaXN0YVwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE9naWx0aWcgaW5tYXRuaW5nOiBmXHUwMEY2cnZcdTAwRTRudGF0IGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIGZpY2sgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgT2dpbHRpZyBpbm1hdG5pbmc6IGZcdTAwRjZydlx1MDBFNG50YXQgJHtleHBlY3RlZH0sIGZpY2sgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgT2dpbHRpZyBpbm1hdG5pbmc6IGZcdTAwRjZydlx1MDBFNG50YXQgJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPZ2lsdGlndCB2YWw6IGZcdTAwRjZydlx1MDBFNG50YWRlIGVuIGF2ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEZcdTAwRjZyIHN0b3IodCk6IGZcdTAwRjZydlx1MDBFNG50YWRlICR7aXNzdWUub3JpZ2luID8/IFwidlx1MDBFNHJkZXRcIn0gYXR0IGhhICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiZWxlbWVudFwifWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGXHUwMEY2ciBzdG9yKHQpOiBmXHUwMEY2cnZcdTAwRTRudGF0ICR7aXNzdWUub3JpZ2luID8/IFwidlx1MDBFNHJkZXRcIn0gYXR0IGhhICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEZcdTAwRjZyIGxpdGUodCk6IGZcdTAwRjZydlx1MDBFNG50YWRlICR7aXNzdWUub3JpZ2luID8/IFwidlx1MDBFNHJkZXRcIn0gYXR0IGhhICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBGXHUwMEY2ciBsaXRlKHQpOiBmXHUwMEY2cnZcdTAwRTRudGFkZSAke2lzc3VlLm9yaWdpbiA/PyBcInZcdTAwRTRyZGV0XCJ9IGF0dCBoYSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgT2dpbHRpZyBzdHJcdTAwRTRuZzogbVx1MDBFNXN0ZSBiXHUwMEY2cmphIG1lZCBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgT2dpbHRpZyBzdHJcdTAwRTRuZzogbVx1MDBFNXN0ZSBzbHV0YSBtZWQgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYE9naWx0aWcgc3RyXHUwMEU0bmc6IG1cdTAwRTVzdGUgaW5uZWhcdTAwRTVsbGEgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgT2dpbHRpZyBzdHJcdTAwRTRuZzogbVx1MDBFNXN0ZSBtYXRjaGEgbVx1MDBGNm5zdHJldCBcIiR7X2lzc3VlLnBhdHRlcm59XCJgO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE9naWx0aWcodCkgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE9naWx0aWd0IHRhbDogbVx1MDBFNXN0ZSB2YXJhIGVuIG11bHRpcGVsIGF2ICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiT2tcdTAwRTRuZGEgbnlja2xhclwiIDogXCJPa1x1MDBFNG5kIG55Y2tlbFwifTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPZ2lsdGlnIG55Y2tlbCBpICR7aXNzdWUub3JpZ2luID8/IFwidlx1MDBFNHJkZXRcIn1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJPZ2lsdGlnIGlucHV0XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBPZ2lsdGlndCB2XHUwMEU0cmRlIGkgJHtpc3N1ZS5vcmlnaW4gPz8gXCJ2XHUwMEU0cmRldFwifWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgT2dpbHRpZyBpbnB1dGA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwQjhFXHUwQkI0XHUwQkMxXHUwQkE0XHUwQkNEXHUwQkE0XHUwQkMxXHUwQjk1XHUwQkNEXHUwQjk1XHUwQkIzXHUwQkNEXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MEI5NVx1MEJDQVx1MEJBM1x1MEJDRFx1MEI5Rlx1MEJCRlx1MEJCMFx1MEJDMVx1MEI5NVx1MEJDRFx1MEI5NSBcdTBCQjVcdTBCQzdcdTBCQTNcdTBCQ0RcdTBCOUZcdTBCQzFcdTBCQUVcdTBCQ0RcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MEJBQVx1MEJDOFx1MEI5Rlx1MEJDRFx1MEI5Rlx1MEJDMVx1MEI5NVx1MEJCM1x1MEJDRFwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTBCOTVcdTBCQ0FcdTBCQTNcdTBCQ0RcdTBCOUZcdTBCQkZcdTBCQjBcdTBCQzFcdTBCOTVcdTBCQ0RcdTBCOTUgXHUwQkI1XHUwQkM3XHUwQkEzXHUwQkNEXHUwQjlGXHUwQkMxXHUwQkFFXHUwQkNEXCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwQjg5XHUwQkIxXHUwQkMxXHUwQkFBXHUwQkNEXHUwQkFBXHUwQkMxXHUwQjk1XHUwQkIzXHUwQkNEXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MEI5NVx1MEJDQVx1MEJBM1x1MEJDRFx1MEI5Rlx1MEJCRlx1MEJCMFx1MEJDMVx1MEI5NVx1MEJDRFx1MEI5NSBcdTBCQjVcdTBCQzdcdTBCQTNcdTBCQ0RcdTBCOUZcdTBCQzFcdTBCQUVcdTBCQ0RcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwQjg5XHUwQkIxXHUwQkMxXHUwQkFBXHUwQkNEXHUwQkFBXHUwQkMxXHUwQjk1XHUwQkIzXHUwQkNEXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MEI5NVx1MEJDQVx1MEJBM1x1MEJDRFx1MEI5Rlx1MEJCRlx1MEJCMFx1MEJDMVx1MEI5NVx1MEJDRFx1MEI5NSBcdTBCQjVcdTBCQzdcdTBCQTNcdTBCQ0RcdTBCOUZcdTBCQzFcdTBCQUVcdTBCQ0RcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiXHUwQjg5XHUwQkIzXHUwQkNEXHUwQkIzXHUwQkMwXHUwQjlGXHUwQkMxXCIsXG4gICAgICAgIGVtYWlsOiBcIlx1MEJBRVx1MEJCRlx1MEJBOVx1MEJDRFx1MEJBOVx1MEI5RVx1MEJDRFx1MEI5QVx1MEJCMlx1MEJDRCBcdTBCQUVcdTBCQzFcdTBCOTVcdTBCQjVcdTBCQjBcdTBCQkZcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gXHUwQkE0XHUwQkM3XHUwQkE0XHUwQkJGIFx1MEJBOFx1MEJDN1x1MEJCMFx1MEJBRVx1MEJDRFwiLFxuICAgICAgICBkYXRlOiBcIklTTyBcdTBCQTRcdTBCQzdcdTBCQTRcdTBCQkZcIixcbiAgICAgICAgdGltZTogXCJJU08gXHUwQkE4XHUwQkM3XHUwQkIwXHUwQkFFXHUwQkNEXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcIklTTyBcdTBCOTVcdTBCQkVcdTBCQjIgXHUwQjg1XHUwQkIzXHUwQkI1XHUwQkMxXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCBcdTBCQUVcdTBCQzFcdTBCOTVcdTBCQjVcdTBCQjBcdTBCQkZcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IFx1MEJBRVx1MEJDMVx1MEI5NVx1MEJCNVx1MEJCMFx1MEJCRlwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NCBcdTBCQjVcdTBCQjBcdTBCQUVcdTBCQ0RcdTBCQUFcdTBCQzFcIixcbiAgICAgICAgY2lkcnY2OiBcIklQdjYgXHUwQkI1XHUwQkIwXHUwQkFFXHUwQkNEXHUwQkFBXHUwQkMxXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQtZW5jb2RlZCBcdTBCOUFcdTBCQjBcdTBCQUVcdTBCQ0RcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybC1lbmNvZGVkIFx1MEI5QVx1MEJCMFx1MEJBRVx1MEJDRFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIFx1MEI5QVx1MEJCMFx1MEJBRVx1MEJDRFwiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IFx1MEI4RVx1MEJBM1x1MEJDRFwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiaW5wdXRcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIlx1MEI4RVx1MEJBM1x1MEJDRFwiLFxuICAgICAgICBhcnJheTogXCJcdTBCODVcdTBCQTNcdTBCQkZcIixcbiAgICAgICAgbnVsbDogXCJcdTBCQjVcdTBCQzZcdTBCQjFcdTBCQzFcdTBCQUVcdTBCQzhcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTBCQTRcdTBCQjVcdTBCQjFcdTBCQkVcdTBCQTkgXHUwQjg5XHUwQkIzXHUwQkNEXHUwQkIzXHUwQkMwXHUwQjlGXHUwQkMxOiBcdTBCOEVcdTBCQTRcdTBCQkZcdTBCQjBcdTBCQ0RcdTBCQUFcdTBCQkVcdTBCQjBcdTBCQ0RcdTBCOTVcdTBCQ0RcdTBCOTVcdTBCQUFcdTBCQ0RcdTBCQUFcdTBCOUZcdTBCQ0RcdTBCOUZcdTBCQTRcdTBCQzEgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgXHUwQkFBXHUwQkM2XHUwQkIxXHUwQkFBXHUwQkNEXHUwQkFBXHUwQjlGXHUwQkNEXHUwQjlGXHUwQkE0XHUwQkMxICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MEJBNFx1MEJCNVx1MEJCMVx1MEJCRVx1MEJBOSBcdTBCODlcdTBCQjNcdTBCQ0RcdTBCQjNcdTBCQzBcdTBCOUZcdTBCQzE6IFx1MEI4RVx1MEJBNFx1MEJCRlx1MEJCMFx1MEJDRFx1MEJBQVx1MEJCRVx1MEJCMFx1MEJDRFx1MEI5NVx1MEJDRFx1MEI5NVx1MEJBQVx1MEJDRFx1MEJBQVx1MEI5Rlx1MEJDRFx1MEI5Rlx1MEJBNFx1MEJDMSAke2V4cGVjdGVkfSwgXHUwQkFBXHUwQkM2XHUwQkIxXHUwQkFBXHUwQkNEXHUwQkFBXHUwQjlGXHUwQkNEXHUwQjlGXHUwQkE0XHUwQkMxICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYFx1MEJBNFx1MEJCNVx1MEJCMVx1MEJCRVx1MEJBOSBcdTBCODlcdTBCQjNcdTBCQ0RcdTBCQjNcdTBCQzBcdTBCOUZcdTBCQzE6IFx1MEI4RVx1MEJBNFx1MEJCRlx1MEJCMFx1MEJDRFx1MEJBQVx1MEJCRVx1MEJCMFx1MEJDRFx1MEI5NVx1MEJDRFx1MEI5NVx1MEJBQVx1MEJDRFx1MEJBQVx1MEI5Rlx1MEJDRFx1MEI5Rlx1MEJBNFx1MEJDMSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MEJBNFx1MEJCNVx1MEJCMVx1MEJCRVx1MEJBOSBcdTBCQjVcdTBCQkZcdTBCQjBcdTBCQzFcdTBCQUFcdTBCQ0RcdTBCQUFcdTBCQUVcdTBCQ0Q6IFx1MEI4RVx1MEJBNFx1MEJCRlx1MEJCMFx1MEJDRFx1MEJBQVx1MEJCRVx1MEJCMFx1MEJDRFx1MEI5NVx1MEJDRFx1MEI5NVx1MEJBQVx1MEJDRFx1MEJBQVx1MEI5Rlx1MEJDRFx1MEI5Rlx1MEJBNFx1MEJDMSAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX0gXHUwQjg3XHUwQkIyXHUwQkNEIFx1MEI5Mlx1MEJBOVx1MEJDRFx1MEJCMVx1MEJDMWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MEJBRVx1MEJCRlx1MEI5NSBcdTBCQUFcdTBCQzZcdTBCQjBcdTBCQkZcdTBCQUZcdTBCQTRcdTBCQzE6IFx1MEI4RVx1MEJBNFx1MEJCRlx1MEJCMFx1MEJDRFx1MEJBQVx1MEJCRVx1MEJCMFx1MEJDRFx1MEI5NVx1MEJDRFx1MEI5NVx1MEJBQVx1MEJDRFx1MEJBQVx1MEI5Rlx1MEJDRFx1MEI5Rlx1MEJBNFx1MEJDMSAke2lzc3VlLm9yaWdpbiA/PyBcIlx1MEJBRVx1MEJBNFx1MEJCRlx1MEJBQVx1MEJDRFx1MEJBQVx1MEJDMVwifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcIlx1MEI4OVx1MEJCMVx1MEJDMVx1MEJBQVx1MEJDRFx1MEJBQVx1MEJDMVx1MEI5NVx1MEJCM1x1MEJDRFwifSBcdTBCODZcdTBCOTUgXHUwQjg3XHUwQkIwXHUwQkMxXHUwQjk1XHUwQkNEXHUwQjk1IFx1MEJCNVx1MEJDN1x1MEJBM1x1MEJDRFx1MEI5Rlx1MEJDMVx1MEJBRVx1MEJDRGA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTBCQUVcdTBCQkZcdTBCOTUgXHUwQkFBXHUwQkM2XHUwQkIwXHUwQkJGXHUwQkFGXHUwQkE0XHUwQkMxOiBcdTBCOEVcdTBCQTRcdTBCQkZcdTBCQjBcdTBCQ0RcdTBCQUFcdTBCQkVcdTBCQjBcdTBCQ0RcdTBCOTVcdTBCQ0RcdTBCOTVcdTBCQUFcdTBCQ0RcdTBCQUFcdTBCOUZcdTBCQ0RcdTBCOUZcdTBCQTRcdTBCQzEgJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdTBCQUVcdTBCQTRcdTBCQkZcdTBCQUFcdTBCQ0RcdTBCQUFcdTBCQzFcIn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9IFx1MEI4Nlx1MEI5NSBcdTBCODdcdTBCQjBcdTBCQzFcdTBCOTVcdTBCQ0RcdTBCOTUgXHUwQkI1XHUwQkM3XHUwQkEzXHUwQkNEXHUwQjlGXHUwQkMxXHUwQkFFXHUwQkNEYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwQkFFXHUwQkJGXHUwQjk1XHUwQjlBXHUwQkNEIFx1MEI5QVx1MEJCRlx1MEJCMVx1MEJCRlx1MEJBRlx1MEJBNFx1MEJDMTogXHUwQjhFXHUwQkE0XHUwQkJGXHUwQkIwXHUwQkNEXHUwQkFBXHUwQkJFXHUwQkIwXHUwQkNEXHUwQjk1XHUwQkNEXHUwQjk1XHUwQkFBXHUwQkNEXHUwQkFBXHUwQjlGXHUwQkNEXHUwQjlGXHUwQkE0XHUwQkMxICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH0gXHUwQjg2XHUwQjk1IFx1MEI4N1x1MEJCMFx1MEJDMVx1MEI5NVx1MEJDRFx1MEI5NSBcdTBCQjVcdTBCQzdcdTBCQTNcdTBCQ0RcdTBCOUZcdTBCQzFcdTBCQUVcdTBCQ0RgOyAvL1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwQkFFXHUwQkJGXHUwQjk1XHUwQjlBXHUwQkNEIFx1MEI5QVx1MEJCRlx1MEJCMVx1MEJCRlx1MEJBRlx1MEJBNFx1MEJDMTogXHUwQjhFXHUwQkE0XHUwQkJGXHUwQkIwXHUwQkNEXHUwQkFBXHUwQkJFXHUwQkIwXHUwQkNEXHUwQjk1XHUwQkNEXHUwQjk1XHUwQkFBXHUwQkNEXHUwQkFBXHUwQjlGXHUwQkNEXHUwQjlGXHUwQkE0XHUwQkMxICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gXHUwQjg2XHUwQjk1IFx1MEI4N1x1MEJCMFx1MEJDMVx1MEI5NVx1MEJDRFx1MEI5NSBcdTBCQjVcdTBCQzdcdTBCQTNcdTBCQ0RcdTBCOUZcdTBCQzFcdTBCQUVcdTBCQ0RgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgXHUwQkE0XHUwQkI1XHUwQkIxXHUwQkJFXHUwQkE5IFx1MEI5QVx1MEJCMFx1MEJBRVx1MEJDRDogXCIke19pc3N1ZS5wcmVmaXh9XCIgXHUwQjg3XHUwQkIyXHUwQkNEIFx1MEJBNFx1MEJDQVx1MEI5Rlx1MEI5OVx1MEJDRFx1MEI5NSBcdTBCQjVcdTBCQzdcdTBCQTNcdTBCQ0RcdTBCOUZcdTBCQzFcdTBCQUVcdTBCQ0RgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBcdTBCQTRcdTBCQjVcdTBCQjFcdTBCQkVcdTBCQTkgXHUwQjlBXHUwQkIwXHUwQkFFXHUwQkNEOiBcIiR7X2lzc3VlLnN1ZmZpeH1cIiBcdTBCODdcdTBCQjJcdTBCQ0QgXHUwQkFFXHUwQkMxXHUwQjlGXHUwQkJGXHUwQkI1XHUwQjlGXHUwQkM4XHUwQkFGIFx1MEJCNVx1MEJDN1x1MEJBM1x1MEJDRFx1MEI5Rlx1MEJDMVx1MEJBRVx1MEJDRGA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgXHUwQkE0XHUwQkI1XHUwQkIxXHUwQkJFXHUwQkE5IFx1MEI5QVx1MEJCMFx1MEJBRVx1MEJDRDogXCIke19pc3N1ZS5pbmNsdWRlc31cIiBcdTBCOTAgXHUwQjg5XHUwQkIzXHUwQkNEXHUwQkIzXHUwQjlGXHUwQjk1XHUwQkNEXHUwQjk1IFx1MEJCNVx1MEJDN1x1MEJBM1x1MEJDRFx1MEI5Rlx1MEJDMVx1MEJBRVx1MEJDRGA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgXHUwQkE0XHUwQkI1XHUwQkIxXHUwQkJFXHUwQkE5IFx1MEI5QVx1MEJCMFx1MEJBRVx1MEJDRDogJHtfaXNzdWUucGF0dGVybn0gXHUwQkFFXHUwQkMxXHUwQkIxXHUwQkM4XHUwQkFBXHUwQkJFXHUwQjlGXHUwQkNEXHUwQjlGXHUwQkMxXHUwQjlGXHUwQkE5XHUwQkNEIFx1MEJBQVx1MEJDQVx1MEJCMFx1MEJDMVx1MEJBOFx1MEJDRFx1MEJBNCBcdTBCQjVcdTBCQzdcdTBCQTNcdTBCQ0RcdTBCOUZcdTBCQzFcdTBCQUVcdTBCQ0RgO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MEJBNFx1MEJCNVx1MEJCMVx1MEJCRVx1MEJBOSAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwQkE0XHUwQkI1XHUwQkIxXHUwQkJFXHUwQkE5IFx1MEI4RVx1MEJBM1x1MEJDRDogJHtpc3N1ZS5kaXZpc29yfSBcdTBCODdcdTBCQTlcdTBCQ0QgXHUwQkFBXHUwQkIyXHUwQkFFXHUwQkJFXHUwQjk1IFx1MEI4N1x1MEJCMFx1MEJDMVx1MEI5NVx1MEJDRFx1MEI5NSBcdTBCQjVcdTBCQzdcdTBCQTNcdTBCQ0RcdTBCOUZcdTBCQzFcdTBCQUVcdTBCQ0RgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTBCODVcdTBCOUZcdTBCQzhcdTBCQUZcdTBCQkVcdTBCQjNcdTBCQUVcdTBCQ0QgXHUwQkE0XHUwQkM2XHUwQkIwXHUwQkJGXHUwQkFGXHUwQkJFXHUwQkE0IFx1MEJCNVx1MEJCRlx1MEI5QVx1MEJDOCR7aXNzdWUua2V5cy5sZW5ndGggPiAxID8gXCJcdTBCOTVcdTBCQjNcdTBCQ0RcIiA6IFwiXCJ9OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS5rZXlzLCBcIiwgXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufSBcdTBCODdcdTBCQjJcdTBCQ0QgXHUwQkE0XHUwQkI1XHUwQkIxXHUwQkJFXHUwQkE5IFx1MEJCNVx1MEJCRlx1MEI5QVx1MEJDOGA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlx1MEJBNFx1MEJCNVx1MEJCMVx1MEJCRVx1MEJBOSBcdTBCODlcdTBCQjNcdTBCQ0RcdTBCQjNcdTBCQzBcdTBCOUZcdTBCQzFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufSBcdTBCODdcdTBCQjJcdTBCQ0QgXHUwQkE0XHUwQkI1XHUwQkIxXHUwQkJFXHUwQkE5IFx1MEJBRVx1MEJBNFx1MEJCRlx1MEJBQVx1MEJDRFx1MEJBQVx1MEJDMWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwQkE0XHUwQkI1XHUwQkIxXHUwQkJFXHUwQkE5IFx1MEI4OVx1MEJCM1x1MEJDRFx1MEJCM1x1MEJDMFx1MEI5Rlx1MEJDMWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwRTE1XHUwRTMxXHUwRTI3XHUwRTJEXHUwRTMxXHUwRTAxXHUwRTI5XHUwRTIzXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MEUwNFx1MEUyN1x1MEUyM1x1MEUyMVx1MEUzNVwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwRTQ0XHUwRTFBXHUwRTE1XHUwRTRDXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MEUwNFx1MEUyN1x1MEUyM1x1MEUyMVx1MEUzNVwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MEUyM1x1MEUzMlx1MEUyMlx1MEUwMVx1MEUzMlx1MEUyM1wiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTBFMDRcdTBFMjdcdTBFMjNcdTBFMjFcdTBFMzVcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwRTIzXHUwRTMyXHUwRTIyXHUwRTAxXHUwRTMyXHUwRTIzXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MEUwNFx1MEUyN1x1MEUyM1x1MEUyMVx1MEUzNVwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJcdTBFMDJcdTBFNDlcdTBFMkRcdTBFMjFcdTBFMzlcdTBFMjVcdTBFMTdcdTBFMzVcdTBFNDhcdTBFMUJcdTBFNDlcdTBFMkRcdTBFMTlcIixcbiAgICAgICAgZW1haWw6IFwiXHUwRTE3XHUwRTM1XHUwRTQ4XHUwRTJEXHUwRTIyXHUwRTM5XHUwRTQ4XHUwRTJEXHUwRTM1XHUwRTQwXHUwRTIxXHUwRTI1XCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiXHUwRTJEXHUwRTM0XHUwRTQyXHUwRTIxXHUwRTA4XHUwRTM0XCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIlx1MEUyN1x1MEUzMVx1MEUxOVx1MEUxN1x1MEUzNVx1MEU0OFx1MEU0MFx1MEUyN1x1MEUyNVx1MEUzMlx1MEU0MVx1MEUxQVx1MEUxQSBJU09cIixcbiAgICAgICAgZGF0ZTogXCJcdTBFMjdcdTBFMzFcdTBFMTlcdTBFMTdcdTBFMzVcdTBFNDhcdTBFNDFcdTBFMUFcdTBFMUEgSVNPXCIsXG4gICAgICAgIHRpbWU6IFwiXHUwRTQwXHUwRTI3XHUwRTI1XHUwRTMyXHUwRTQxXHUwRTFBXHUwRTFBIElTT1wiLFxuICAgICAgICBkdXJhdGlvbjogXCJcdTBFMEFcdTBFNDhcdTBFMjdcdTBFMDdcdTBFNDBcdTBFMjdcdTBFMjVcdTBFMzJcdTBFNDFcdTBFMUFcdTBFMUEgSVNPXCIsXG4gICAgICAgIGlwdjQ6IFwiXHUwRTE3XHUwRTM1XHUwRTQ4XHUwRTJEXHUwRTIyXHUwRTM5XHUwRTQ4IElQdjRcIixcbiAgICAgICAgaXB2NjogXCJcdTBFMTdcdTBFMzVcdTBFNDhcdTBFMkRcdTBFMjJcdTBFMzlcdTBFNDggSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwiXHUwRTBBXHUwRTQ4XHUwRTI3XHUwRTA3IElQIFx1MEU0MVx1MEUxQVx1MEUxQSBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJcdTBFMEFcdTBFNDhcdTBFMjdcdTBFMDcgSVAgXHUwRTQxXHUwRTFBXHUwRTFBIElQdjZcIixcbiAgICAgICAgYmFzZTY0OiBcIlx1MEUwMlx1MEU0OVx1MEUyRFx1MEUwNFx1MEUyN1x1MEUzMlx1MEUyMVx1MEU0MVx1MEUxQVx1MEUxQSBCYXNlNjRcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcIlx1MEUwMlx1MEU0OVx1MEUyRFx1MEUwNFx1MEUyN1x1MEUzMlx1MEUyMVx1MEU0MVx1MEUxQVx1MEUxQSBCYXNlNjQgXHUwRTJBXHUwRTMzXHUwRTJCXHUwRTIzXHUwRTMxXHUwRTFBIFVSTFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJcdTBFMDJcdTBFNDlcdTBFMkRcdTBFMDRcdTBFMjdcdTBFMzJcdTBFMjFcdTBFNDFcdTBFMUFcdTBFMUEgSlNPTlwiLFxuICAgICAgICBlMTY0OiBcIlx1MEU0MFx1MEUxQVx1MEUyRFx1MEUyM1x1MEU0Q1x1MEU0Mlx1MEUxN1x1MEUyM1x1MEUyOFx1MEUzMVx1MEUxRVx1MEUxN1x1MEU0Q1x1MEUyM1x1MEUzMFx1MEUyQlx1MEUyN1x1MEU0OFx1MEUzMlx1MEUwN1x1MEUxQlx1MEUyM1x1MEUzMFx1MEU0MFx1MEUxN1x1MEUyOCAoRS4xNjQpXCIsXG4gICAgICAgIGp3dDogXCJcdTBFNDJcdTBFMTdcdTBFNDBcdTBFMDRcdTBFMTkgSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiXHUwRTAyXHUwRTQ5XHUwRTJEXHUwRTIxXHUwRTM5XHUwRTI1XHUwRTE3XHUwRTM1XHUwRTQ4XHUwRTFCXHUwRTQ5XHUwRTJEXHUwRTE5XCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJcdTBFMTVcdTBFMzFcdTBFMjdcdTBFNDBcdTBFMjVcdTBFMDJcIixcbiAgICAgICAgYXJyYXk6IFwiXHUwRTJEXHUwRTMyXHUwRTIzXHUwRTRDXHUwRTQwXHUwRTIzXHUwRTIyXHUwRTRDIChBcnJheSlcIixcbiAgICAgICAgbnVsbDogXCJcdTBFNDRcdTBFMjFcdTBFNDhcdTBFMjFcdTBFMzVcdTBFMDRcdTBFNDhcdTBFMzIgKG51bGwpXCJcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpPT57XG4gICAgICAgIHN3aXRjaChpc3N1ZS5jb2RlKXtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwRTFCXHUwRTIzXHUwRTMwXHUwRTQwXHUwRTIwXHUwRTE3XHUwRTAyXHUwRTQ5XHUwRTJEXHUwRTIxXHUwRTM5XHUwRTI1XHUwRTQ0XHUwRTIxXHUwRTQ4XHUwRTE2XHUwRTM5XHUwRTAxXHUwRTE1XHUwRTQ5XHUwRTJEXHUwRTA3OiBcdTBFMDRcdTBFMjdcdTBFMjNcdTBFNDBcdTBFMUJcdTBFNDdcdTBFMTkgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSBcdTBFNDFcdTBFMTVcdTBFNDhcdTBFNDRcdTBFMTRcdTBFNDlcdTBFMjNcdTBFMzFcdTBFMUEgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwRTFCXHUwRTIzXHUwRTMwXHUwRTQwXHUwRTIwXHUwRTE3XHUwRTAyXHUwRTQ5XHUwRTJEXHUwRTIxXHUwRTM5XHUwRTI1XHUwRTQ0XHUwRTIxXHUwRTQ4XHUwRTE2XHUwRTM5XHUwRTAxXHUwRTE1XHUwRTQ5XHUwRTJEXHUwRTA3OiBcdTBFMDRcdTBFMjdcdTBFMjNcdTBFNDBcdTBFMUJcdTBFNDdcdTBFMTkgJHtleHBlY3RlZH0gXHUwRTQxXHUwRTE1XHUwRTQ4XHUwRTQ0XHUwRTE0XHUwRTQ5XHUwRTIzXHUwRTMxXHUwRTFBICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYFx1MEUwNFx1MEU0OFx1MEUzMlx1MEU0NFx1MEUyMVx1MEU0OFx1MEUxNlx1MEUzOVx1MEUwMVx1MEUxNVx1MEU0OVx1MEUyRFx1MEUwNzogXHUwRTA0XHUwRTI3XHUwRTIzXHUwRTQwXHUwRTFCXHUwRTQ3XHUwRTE5ICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwRTE1XHUwRTMxXHUwRTI3XHUwRTQwXHUwRTI1XHUwRTM3XHUwRTJEXHUwRTAxXHUwRTQ0XHUwRTIxXHUwRTQ4XHUwRTE2XHUwRTM5XHUwRTAxXHUwRTE1XHUwRTQ5XHUwRTJEXHUwRTA3OiBcdTBFMDRcdTBFMjdcdTBFMjNcdTBFNDBcdTBFMUJcdTBFNDdcdTBFMTlcdTBFMkJcdTBFMTlcdTBFMzZcdTBFNDhcdTBFMDdcdTBFNDNcdTBFMTkgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIlx1MEU0NFx1MEUyMVx1MEU0OFx1MEU0MFx1MEUwMVx1MEUzNFx1MEUxOVwiIDogXCJcdTBFMTlcdTBFNDlcdTBFMkRcdTBFMjJcdTBFMDFcdTBFMjdcdTBFNDhcdTBFMzJcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHJldHVybiBgXHUwRTQwXHUwRTAxXHUwRTM0XHUwRTE5XHUwRTAxXHUwRTMzXHUwRTJCXHUwRTE5XHUwRTE0OiAke2lzc3VlLm9yaWdpbiA/PyBcIlx1MEUwNFx1MEU0OFx1MEUzMlwifSBcdTBFMDRcdTBFMjdcdTBFMjNcdTBFMjFcdTBFMzUke2Fkan0gJHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJcdTBFMjNcdTBFMzJcdTBFMjJcdTBFMDFcdTBFMzJcdTBFMjNcIn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MEU0MFx1MEUwMVx1MEUzNFx1MEUxOVx1MEUwMVx1MEUzM1x1MEUyQlx1MEUxOVx1MEUxNDogJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdTBFMDRcdTBFNDhcdTBFMzJcIn0gXHUwRTA0XHUwRTI3XHUwRTIzXHUwRTIxXHUwRTM1JHthZGp9ICR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCJcdTBFMkRcdTBFMjJcdTBFNDhcdTBFMzJcdTBFMDdcdTBFMTlcdTBFNDlcdTBFMkRcdTBFMjJcIiA6IFwiXHUwRTIxXHUwRTMyXHUwRTAxXHUwRTAxXHUwRTI3XHUwRTQ4XHUwRTMyXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MEUxOVx1MEU0OVx1MEUyRFx1MEUyMlx1MEUwMVx1MEUyN1x1MEU0OFx1MEUzMlx1MEUwMVx1MEUzM1x1MEUyQlx1MEUxOVx1MEUxNDogJHtpc3N1ZS5vcmlnaW59IFx1MEUwNFx1MEUyN1x1MEUyM1x1MEUyMVx1MEUzNSR7YWRqfSAke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwRTE5XHUwRTQ5XHUwRTJEXHUwRTIyXHUwRTAxXHUwRTI3XHUwRTQ4XHUwRTMyXHUwRTAxXHUwRTMzXHUwRTJCXHUwRTE5XHUwRTE0OiAke2lzc3VlLm9yaWdpbn0gXHUwRTA0XHUwRTI3XHUwRTIzXHUwRTIxXHUwRTM1JHthZGp9ICR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTBFMjNcdTBFMzlcdTBFMUJcdTBFNDFcdTBFMUFcdTBFMUFcdTBFNDRcdTBFMjFcdTBFNDhcdTBFMTZcdTBFMzlcdTBFMDFcdTBFMTVcdTBFNDlcdTBFMkRcdTBFMDc6IFx1MEUwMlx1MEU0OVx1MEUyRFx1MEUwNFx1MEUyN1x1MEUzMlx1MEUyMVx1MEUxNVx1MEU0OVx1MEUyRFx1MEUwN1x1MEUwMlx1MEUzNlx1MEU0OVx1MEUxOVx1MEUxNVx1MEU0OVx1MEUxOVx1MEUxNFx1MEU0OVx1MEUyN1x1MEUyMiBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgXHUwRTIzXHUwRTM5XHUwRTFCXHUwRTQxXHUwRTFBXHUwRTFBXHUwRTQ0XHUwRTIxXHUwRTQ4XHUwRTE2XHUwRTM5XHUwRTAxXHUwRTE1XHUwRTQ5XHUwRTJEXHUwRTA3OiBcdTBFMDJcdTBFNDlcdTBFMkRcdTBFMDRcdTBFMjdcdTBFMzJcdTBFMjFcdTBFMTVcdTBFNDlcdTBFMkRcdTBFMDdcdTBFMjVcdTBFMDdcdTBFMTdcdTBFNDlcdTBFMzJcdTBFMjJcdTBFMTRcdTBFNDlcdTBFMjdcdTBFMjIgXCIke19pc3N1ZS5zdWZmaXh9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJpbmNsdWRlc1wiKSByZXR1cm4gYFx1MEUyM1x1MEUzOVx1MEUxQlx1MEU0MVx1MEUxQVx1MEUxQVx1MEU0NFx1MEUyMVx1MEU0OFx1MEUxNlx1MEUzOVx1MEUwMVx1MEUxNVx1MEU0OVx1MEUyRFx1MEUwNzogXHUwRTAyXHUwRTQ5XHUwRTJEXHUwRTA0XHUwRTI3XHUwRTMyXHUwRTIxXHUwRTE1XHUwRTQ5XHUwRTJEXHUwRTA3XHUwRTIxXHUwRTM1IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCIgXHUwRTJEXHUwRTIyXHUwRTM5XHUwRTQ4XHUwRTQzXHUwRTE5XHUwRTAyXHUwRTQ5XHUwRTJEXHUwRTA0XHUwRTI3XHUwRTMyXHUwRTIxYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBcdTBFMjNcdTBFMzlcdTBFMUJcdTBFNDFcdTBFMUFcdTBFMUFcdTBFNDRcdTBFMjFcdTBFNDhcdTBFMTZcdTBFMzlcdTBFMDFcdTBFMTVcdTBFNDlcdTBFMkRcdTBFMDc6IFx1MEUxNVx1MEU0OVx1MEUyRFx1MEUwN1x1MEUxNVx1MEUyM1x1MEUwN1x1MEUwMVx1MEUzMVx1MEUxQVx1MEUyM1x1MEUzOVx1MEUxQlx1MEU0MVx1MEUxQVx1MEUxQVx1MEUxN1x1MEUzNVx1MEU0OFx1MEUwMVx1MEUzM1x1MEUyQlx1MEUxOVx1MEUxNCAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwRTIzXHUwRTM5XHUwRTFCXHUwRTQxXHUwRTFBXHUwRTFBXHUwRTQ0XHUwRTIxXHUwRTQ4XHUwRTE2XHUwRTM5XHUwRTAxXHUwRTE1XHUwRTQ5XHUwRTJEXHUwRTA3OiAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwRTE1XHUwRTMxXHUwRTI3XHUwRTQwXHUwRTI1XHUwRTAyXHUwRTQ0XHUwRTIxXHUwRTQ4XHUwRTE2XHUwRTM5XHUwRTAxXHUwRTE1XHUwRTQ5XHUwRTJEXHUwRTA3OiBcdTBFMTVcdTBFNDlcdTBFMkRcdTBFMDdcdTBFNDBcdTBFMUJcdTBFNDdcdTBFMTlcdTBFMDhcdTBFMzNcdTBFMTlcdTBFMjdcdTBFMTlcdTBFMTdcdTBFMzVcdTBFNDhcdTBFMkJcdTBFMzJcdTBFMjNcdTBFMTRcdTBFNDlcdTBFMjdcdTBFMjIgJHtpc3N1ZS5kaXZpc29yfSBcdTBFNDRcdTBFMTRcdTBFNDlcdTBFMjVcdTBFMDdcdTBFMTVcdTBFMzFcdTBFMjdgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTBFMUVcdTBFMUFcdTBFMDRcdTBFMzVcdTBFMjJcdTBFNENcdTBFMTdcdTBFMzVcdTBFNDhcdTBFNDRcdTBFMjFcdTBFNDhcdTBFMjNcdTBFMzlcdTBFNDlcdTBFMDhcdTBFMzFcdTBFMDE6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwRTA0XHUwRTM1XHUwRTIyXHUwRTRDXHUwRTQ0XHUwRTIxXHUwRTQ4XHUwRTE2XHUwRTM5XHUwRTAxXHUwRTE1XHUwRTQ5XHUwRTJEXHUwRTA3XHUwRTQzXHUwRTE5ICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlx1MEUwMlx1MEU0OVx1MEUyRFx1MEUyMVx1MEUzOVx1MEUyNVx1MEU0NFx1MEUyMVx1MEU0OFx1MEUxNlx1MEUzOVx1MEUwMVx1MEUxNVx1MEU0OVx1MEUyRFx1MEUwNzogXHUwRTQ0XHUwRTIxXHUwRTQ4XHUwRTE1XHUwRTIzXHUwRTA3XHUwRTAxXHUwRTMxXHUwRTFBXHUwRTIzXHUwRTM5XHUwRTFCXHUwRTQxXHUwRTFBXHUwRTFBXHUwRTIyXHUwRTM5XHUwRTQwXHUwRTE5XHUwRTM1XHUwRTIyXHUwRTE5XHUwRTE3XHUwRTM1XHUwRTQ4XHUwRTAxXHUwRTMzXHUwRTJCXHUwRTE5XHUwRTE0XHUwRTQ0XHUwRTI3XHUwRTQ5XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTBFMDJcdTBFNDlcdTBFMkRcdTBFMjFcdTBFMzlcdTBFMjVcdTBFNDRcdTBFMjFcdTBFNDhcdTBFMTZcdTBFMzlcdTBFMDFcdTBFMTVcdTBFNDlcdTBFMkRcdTBFMDdcdTBFNDNcdTBFMTkgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTBFMDJcdTBFNDlcdTBFMkRcdTBFMjFcdTBFMzlcdTBFMjVcdTBFNDRcdTBFMjFcdTBFNDhcdTBFMTZcdTBFMzlcdTBFMDFcdTBFMTVcdTBFNDlcdTBFMkRcdTBFMDdgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpPT57XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiBcImthcmFrdGVyXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIm9sbWFsXHUwMTMxXCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJiYXl0XCIsXG4gICAgICAgICAgICB2ZXJiOiBcIm9sbWFsXHUwMTMxXCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwMEY2XHUwMTFGZVwiLFxuICAgICAgICAgICAgdmVyYjogXCJvbG1hbFx1MDEzMVwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJcdTAwRjZcdTAxMUZlXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIm9sbWFsXHUwMTMxXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcImdpcmRpXCIsXG4gICAgICAgIGVtYWlsOiBcImUtcG9zdGEgYWRyZXNpXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiZW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiSVNPIHRhcmloIHZlIHNhYXRcIixcbiAgICAgICAgZGF0ZTogXCJJU08gdGFyaWhcIixcbiAgICAgICAgdGltZTogXCJJU08gc2FhdFwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU08gc1x1MDBGQ3JlXCIsXG4gICAgICAgIGlwdjQ6IFwiSVB2NCBhZHJlc2lcIixcbiAgICAgICAgaXB2NjogXCJJUHY2IGFkcmVzaVwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NCBhcmFsXHUwMTMxXHUwMTFGXHUwMTMxXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2IGFyYWxcdTAxMzFcdTAxMUZcdTAxMzFcIixcbiAgICAgICAgYmFzZTY0OiBcImJhc2U2NCBpbGUgXHUwMTVGaWZyZWxlbm1pXHUwMTVGIG1ldGluXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmwgaWxlIFx1MDE1RmlmcmVsZW5taVx1MDE1RiBtZXRpblwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIGRpemVzaVwiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IHNheVx1MDEzMXNcdTAxMzFcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIlx1MDE1RWFibG9uIGRpemVzaVwiXG4gICAgfTtcbiAgICBjb25zdCBUeXBlRGljdGlvbmFyeSA9IHtcbiAgICAgICAgbmFuOiBcIk5hTlwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEdlXHUwMEU3ZXJzaXogZGVcdTAxMUZlcjogYmVrbGVuZW4gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgYWxcdTAxMzFuYW4gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgR2VcdTAwRTdlcnNpeiBkZVx1MDExRmVyOiBiZWtsZW5lbiAke2V4cGVjdGVkfSwgYWxcdTAxMzFuYW4gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgR2VcdTAwRTdlcnNpeiBkZVx1MDExRmVyOiBiZWtsZW5lbiAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYEdlXHUwMEU3ZXJzaXogc2VcdTAwRTdlbmVrOiBhXHUwMTVGYVx1MDExRlx1MDEzMWRha2lsZXJkZW4gYmlyaSBvbG1hbFx1MDEzMTogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHJldHVybiBgXHUwMEM3b2sgYlx1MDBGQ3lcdTAwRkNrOiBiZWtsZW5lbiAke2lzc3VlLm9yaWdpbiA/PyBcImRlXHUwMTFGZXJcIn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJcdTAwRjZcdTAxMUZlXCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTAwQzdvayBiXHUwMEZDeVx1MDBGQ2s6IGJla2xlbmVuICR7aXNzdWUub3JpZ2luID8/IFwiZGVcdTAxMUZlclwifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBcdTAwQzdvayBrXHUwMEZDXHUwMEU3XHUwMEZDazogYmVrbGVuZW4gJHtpc3N1ZS5vcmlnaW59ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwMEM3b2sga1x1MDBGQ1x1MDBFN1x1MDBGQ2s6IGJla2xlbmVuICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgR2VcdTAwRTdlcnNpeiBtZXRpbjogXCIke19pc3N1ZS5wcmVmaXh9XCIgaWxlIGJhXHUwMTVGbGFtYWxcdTAxMzFgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBHZVx1MDBFN2Vyc2l6IG1ldGluOiBcIiR7X2lzc3VlLnN1ZmZpeH1cIiBpbGUgYml0bWVsaWA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgR2VcdTAwRTdlcnNpeiBtZXRpbjogXCIke19pc3N1ZS5pbmNsdWRlc31cIiBpXHUwMEU3ZXJtZWxpYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBHZVx1MDBFN2Vyc2l6IG1ldGluOiAke19pc3N1ZS5wYXR0ZXJufSBkZXNlbmluZSB1eW1hbFx1MDEzMWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgR2VcdTAwRTdlcnNpeiAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgR2VcdTAwRTdlcnNpeiBzYXlcdTAxMzE6ICR7aXNzdWUuZGl2aXNvcn0gaWxlIHRhbSBiXHUwMEY2bFx1MDBGQ25lYmlsbWVsaWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFRhblx1MDEzMW5tYXlhbiBhbmFodGFyJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcImxhclwiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IGlcdTAwRTdpbmRlIGdlXHUwMEU3ZXJzaXogYW5haHRhcmA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIkdlXHUwMEU3ZXJzaXogZGVcdTAxMUZlclwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IGlcdTAwRTdpbmRlIGdlXHUwMEU3ZXJzaXogZGVcdTAxMUZlcmA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgR2VcdTAwRTdlcnNpeiBkZVx1MDExRmVyYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJcdTA0NDFcdTA0MzhcdTA0M0NcdTA0MzJcdTA0M0VcdTA0M0JcdTA0NTZcdTA0MzJcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNDNDXHUwNDMwXHUwNDQyXHUwNDM4XHUwNDNDXHUwNDM1XCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJcdTA0MzFcdTA0MzBcdTA0MzlcdTA0NDJcdTA0NTZcdTA0MzJcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNDNDXHUwNDMwXHUwNDQyXHUwNDM4XHUwNDNDXHUwNDM1XCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwNDM1XHUwNDNCXHUwNDM1XHUwNDNDXHUwNDM1XHUwNDNEXHUwNDQyXHUwNDU2XHUwNDMyXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1MDQzQ1x1MDQzMFx1MDQ0Mlx1MDQzOFx1MDQzQ1x1MDQzNVwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJcdTA0MzVcdTA0M0JcdTA0MzVcdTA0M0NcdTA0MzVcdTA0M0RcdTA0NDJcdTA0NTZcdTA0MzJcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNDNDXHUwNDMwXHUwNDQyXHUwNDM4XHUwNDNDXHUwNDM1XCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIlx1MDQzMlx1MDQ0NVx1MDQ1Nlx1MDQzNFx1MDQzRFx1MDQ1NiBcdTA0MzRcdTA0MzBcdTA0M0RcdTA0NTZcIixcbiAgICAgICAgZW1haWw6IFwiXHUwNDMwXHUwNDM0XHUwNDQwXHUwNDM1XHUwNDQxXHUwNDMwIFx1MDQzNVx1MDQzQlx1MDQzNVx1MDQzQVx1MDQ0Mlx1MDQ0MFx1MDQzRVx1MDQzRFx1MDQzRFx1MDQzRVx1MDQ1NyBcdTA0M0ZcdTA0M0VcdTA0NDhcdTA0NDJcdTA0MzhcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJcdTA0MzVcdTA0M0NcdTA0M0VcdTA0MzRcdTA0MzdcdTA0NTZcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiXHUwNDM0XHUwNDMwXHUwNDQyXHUwNDMwIFx1MDQ0Mlx1MDQzMCBcdTA0NDdcdTA0MzBcdTA0NDEgSVNPXCIsXG4gICAgICAgIGRhdGU6IFwiXHUwNDM0XHUwNDMwXHUwNDQyXHUwNDMwIElTT1wiLFxuICAgICAgICB0aW1lOiBcIlx1MDQ0N1x1MDQzMFx1MDQ0MSBJU09cIixcbiAgICAgICAgZHVyYXRpb246IFwiXHUwNDQyXHUwNDQwXHUwNDM4XHUwNDMyXHUwNDMwXHUwNDNCXHUwNDU2XHUwNDQxXHUwNDQyXHUwNDRDIElTT1wiLFxuICAgICAgICBpcHY0OiBcIlx1MDQzMFx1MDQzNFx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzMCBJUHY0XCIsXG4gICAgICAgIGlwdjY6IFwiXHUwNDMwXHUwNDM0XHUwNDQwXHUwNDM1XHUwNDQxXHUwNDMwIElQdjZcIixcbiAgICAgICAgY2lkcnY0OiBcIlx1MDQzNFx1MDQ1Nlx1MDQzMFx1MDQzRlx1MDQzMFx1MDQzN1x1MDQzRVx1MDQzRCBJUHY0XCIsXG4gICAgICAgIGNpZHJ2NjogXCJcdTA0MzRcdTA0NTZcdTA0MzBcdTA0M0ZcdTA0MzBcdTA0MzdcdTA0M0VcdTA0M0QgSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwiXHUwNDQwXHUwNDRGXHUwNDM0XHUwNDNFXHUwNDNBIFx1MDQ0MyBcdTA0M0FcdTA0M0VcdTA0MzRcdTA0NDNcdTA0MzJcdTA0MzBcdTA0M0RcdTA0M0RcdTA0NTYgYmFzZTY0XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJcdTA0NDBcdTA0NEZcdTA0MzRcdTA0M0VcdTA0M0EgXHUwNDQzIFx1MDQzQVx1MDQzRVx1MDQzNFx1MDQ0M1x1MDQzMlx1MDQzMFx1MDQzRFx1MDQzRFx1MDQ1NiBiYXNlNjR1cmxcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiXHUwNDQwXHUwNDRGXHUwNDM0XHUwNDNFXHUwNDNBIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJcdTA0M0RcdTA0M0VcdTA0M0NcdTA0MzVcdTA0NDAgRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIlx1MDQzMlx1MDQ0NVx1MDQ1Nlx1MDQzNFx1MDQzRFx1MDQ1NiBcdTA0MzRcdTA0MzBcdTA0M0RcdTA0NTZcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIlx1MDQ0N1x1MDQzOFx1MDQ0MVx1MDQzQlx1MDQzRVwiLFxuICAgICAgICBhcnJheTogXCJcdTA0M0NcdTA0MzBcdTA0NDFcdTA0MzhcdTA0MzJcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MURcdTA0MzVcdTA0M0ZcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzhcdTA0M0JcdTA0NENcdTA0M0RcdTA0NTYgXHUwNDMyXHUwNDQ1XHUwNDU2XHUwNDM0XHUwNDNEXHUwNDU2IFx1MDQzNFx1MDQzMFx1MDQzRFx1MDQ1NjogXHUwNDNFXHUwNDQ3XHUwNDU2XHUwNDNBXHUwNDQzXHUwNDU0XHUwNDQyXHUwNDRDXHUwNDQxXHUwNDRGIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0sIFx1MDQzRVx1MDQ0Mlx1MDQ0MFx1MDQzOFx1MDQzQ1x1MDQzMFx1MDQzRFx1MDQzRSAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MURcdTA0MzVcdTA0M0ZcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzhcdTA0M0JcdTA0NENcdTA0M0RcdTA0NTYgXHUwNDMyXHUwNDQ1XHUwNDU2XHUwNDM0XHUwNDNEXHUwNDU2IFx1MDQzNFx1MDQzMFx1MDQzRFx1MDQ1NjogXHUwNDNFXHUwNDQ3XHUwNDU2XHUwNDNBXHUwNDQzXHUwNDU0XHUwNDQyXHUwNDRDXHUwNDQxXHUwNDRGICR7ZXhwZWN0ZWR9LCBcdTA0M0VcdTA0NDJcdTA0NDBcdTA0MzhcdTA0M0NcdTA0MzBcdTA0M0RcdTA0M0UgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDNGXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM4XHUwNDNCXHUwNDRDXHUwNDNEXHUwNDU2IFx1MDQzMlx1MDQ0NVx1MDQ1Nlx1MDQzNFx1MDQzRFx1MDQ1NiBcdTA0MzRcdTA0MzBcdTA0M0RcdTA0NTY6IFx1MDQzRVx1MDQ0N1x1MDQ1Nlx1MDQzQVx1MDQ0M1x1MDQ1NFx1MDQ0Mlx1MDQ0Q1x1MDQ0MVx1MDQ0RiAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzOFx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQzMCBcdTA0M0VcdTA0M0ZcdTA0NDZcdTA0NTZcdTA0NEY6IFx1MDQzRVx1MDQ0N1x1MDQ1Nlx1MDQzQVx1MDQ0M1x1MDQ1NFx1MDQ0Mlx1MDQ0Q1x1MDQ0MVx1MDQ0RiBcdTA0M0VcdTA0MzRcdTA0M0RcdTA0MzUgXHUwNDM3ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYFx1MDQxN1x1MDQzMFx1MDQzRFx1MDQzMFx1MDQzNFx1MDQ0Mlx1MDQzRSBcdTA0MzJcdTA0MzVcdTA0M0JcdTA0MzhcdTA0M0FcdTA0MzU6IFx1MDQzRVx1MDQ0N1x1MDQ1Nlx1MDQzQVx1MDQ0M1x1MDQ1NFx1MDQ0Mlx1MDQ0Q1x1MDQ0MVx1MDQ0RiwgXHUwNDQ5XHUwNDNFICR7aXNzdWUub3JpZ2luID8/IFwiXHUwNDM3XHUwNDNEXHUwNDMwXHUwNDQ3XHUwNDM1XHUwNDNEXHUwNDNEXHUwNDRGXCJ9ICR7c2l6aW5nLnZlcmJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiXHUwNDM1XHUwNDNCXHUwNDM1XHUwNDNDXHUwNDM1XHUwNDNEXHUwNDQyXHUwNDU2XHUwNDMyXCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MTdcdTA0MzBcdTA0M0RcdTA0MzBcdTA0MzRcdTA0NDJcdTA0M0UgXHUwNDMyXHUwNDM1XHUwNDNCXHUwNDM4XHUwNDNBXHUwNDM1OiBcdTA0M0VcdTA0NDdcdTA0NTZcdTA0M0FcdTA0NDNcdTA0NTRcdTA0NDJcdTA0NENcdTA0NDFcdTA0NEYsIFx1MDQ0OVx1MDQzRSAke2lzc3VlLm9yaWdpbiA/PyBcIlx1MDQzN1x1MDQzRFx1MDQzMFx1MDQ0N1x1MDQzNVx1MDQzRFx1MDQzRFx1MDQ0RlwifSBcdTA0MzFcdTA0NDNcdTA0MzRcdTA0MzUgJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDE3XHUwNDMwXHUwNDNEXHUwNDMwXHUwNDM0XHUwNDQyXHUwNDNFIFx1MDQzQ1x1MDQzMFx1MDQzQlx1MDQzNTogXHUwNDNFXHUwNDQ3XHUwNDU2XHUwNDNBXHUwNDQzXHUwNDU0XHUwNDQyXHUwNDRDXHUwNDQxXHUwNDRGLCBcdTA0NDlcdTA0M0UgJHtpc3N1ZS5vcmlnaW59ICR7c2l6aW5nLnZlcmJ9ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MTdcdTA0MzBcdTA0M0RcdTA0MzBcdTA0MzRcdTA0NDJcdTA0M0UgXHUwNDNDXHUwNDMwXHUwNDNCXHUwNDM1OiBcdTA0M0VcdTA0NDdcdTA0NTZcdTA0M0FcdTA0NDNcdTA0NTRcdTA0NDJcdTA0NENcdTA0NDFcdTA0NEYsIFx1MDQ0OVx1MDQzRSAke2lzc3VlLm9yaWdpbn0gXHUwNDMxXHUwNDQzXHUwNDM0XHUwNDM1ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikgcmV0dXJuIGBcdTA0MURcdTA0MzVcdTA0M0ZcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzhcdTA0M0JcdTA0NENcdTA0M0RcdTA0MzhcdTA0MzkgXHUwNDQwXHUwNDRGXHUwNDM0XHUwNDNFXHUwNDNBOiBcdTA0M0ZcdTA0M0VcdTA0MzJcdTA0MzhcdTA0M0RcdTA0MzVcdTA0M0QgXHUwNDNGXHUwNDNFXHUwNDQ3XHUwNDM4XHUwNDNEXHUwNDMwXHUwNDQyXHUwNDM4XHUwNDQxXHUwNDRGIFx1MDQzNyBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzOFx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQzOFx1MDQzOSBcdTA0NDBcdTA0NEZcdTA0MzRcdTA0M0VcdTA0M0E6IFx1MDQzRlx1MDQzRVx1MDQzMlx1MDQzOFx1MDQzRFx1MDQzNVx1MDQzRCBcdTA0MzdcdTA0MzBcdTA0M0FcdTA0NTZcdTA0M0RcdTA0NDdcdTA0NDNcdTA0MzJcdTA0MzBcdTA0NDJcdTA0MzhcdTA0NDFcdTA0NEYgXHUwNDNEXHUwNDMwIFwiJHtfaXNzdWUuc3VmZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBcdTA0MURcdTA0MzVcdTA0M0ZcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzhcdTA0M0JcdTA0NENcdTA0M0RcdTA0MzhcdTA0MzkgXHUwNDQwXHUwNDRGXHUwNDM0XHUwNDNFXHUwNDNBOiBcdTA0M0ZcdTA0M0VcdTA0MzJcdTA0MzhcdTA0M0RcdTA0MzVcdTA0M0QgXHUwNDNDXHUwNDU2XHUwNDQxXHUwNDQyXHUwNDM4XHUwNDQyXHUwNDM4IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzOFx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQzOFx1MDQzOSBcdTA0NDBcdTA0NEZcdTA0MzRcdTA0M0VcdTA0M0E6IFx1MDQzRlx1MDQzRVx1MDQzMlx1MDQzOFx1MDQzRFx1MDQzNVx1MDQzRCBcdTA0MzJcdTA0NTZcdTA0MzRcdTA0M0ZcdTA0M0VcdTA0MzJcdTA0NTZcdTA0MzRcdTA0MzBcdTA0NDJcdTA0MzggXHUwNDQ4XHUwNDMwXHUwNDMxXHUwNDNCXHUwNDNFXHUwNDNEXHUwNDQzICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MURcdTA0MzVcdTA0M0ZcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzhcdTA0M0JcdTA0NENcdTA0M0RcdTA0MzhcdTA0MzkgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzOFx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQzNSBcdTA0NDdcdTA0MzhcdTA0NDFcdTA0M0JcdTA0M0U6IFx1MDQzRlx1MDQzRVx1MDQzMlx1MDQzOFx1MDQzRFx1MDQzRFx1MDQzRSBcdTA0MzFcdTA0NDNcdTA0NDJcdTA0MzggXHUwNDNBXHUwNDQwXHUwNDMwXHUwNDQyXHUwNDNEXHUwNDM4XHUwNDNDICR7aXNzdWUuZGl2aXNvcn1gO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA0MURcdTA0MzVcdTA0NDBcdTA0M0VcdTA0MzdcdTA0M0ZcdTA0NTZcdTA0MzdcdTA0M0RcdTA0MzBcdTA0M0RcdTA0MzhcdTA0MzkgXHUwNDNBXHUwNDNCXHUwNDRFXHUwNDQ3JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlx1MDQ1NlwiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDNGXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM4XHUwNDNCXHUwNDRDXHUwNDNEXHUwNDM4XHUwNDM5IFx1MDQzQVx1MDQzQlx1MDQ0RVx1MDQ0NyBcdTA0NDMgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXHUwNDFEXHUwNDM1XHUwNDNGXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM4XHUwNDNCXHUwNDRDXHUwNDNEXHUwNDU2IFx1MDQzMlx1MDQ0NVx1MDQ1Nlx1MDQzNFx1MDQzRFx1MDQ1NiBcdTA0MzRcdTA0MzBcdTA0M0RcdTA0NTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDQxRFx1MDQzNVx1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzOFx1MDQzQlx1MDQ0Q1x1MDQzRFx1MDQzNSBcdTA0MzdcdTA0M0RcdTA0MzBcdTA0NDdcdTA0MzVcdTA0M0RcdTA0M0RcdTA0NEYgXHUwNDQzICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNDFEXHUwNDM1XHUwNDNGXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM4XHUwNDNCXHUwNDRDXHUwNDNEXHUwNDU2IFx1MDQzMlx1MDQ0NVx1MDQ1Nlx1MDQzNFx1MDQzRFx1MDQ1NiBcdTA0MzRcdTA0MzBcdTA0M0RcdTA0NTZgO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAiaW1wb3J0IHVrIGZyb20gXCIuL3VrLmpzXCI7XG4vKiogQGRlcHJlY2F0ZWQgVXNlIGB1a2AgaW5zdGVhZC4gKi8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHVrKCk7XG59XG4iLCAiaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBlcnJvciA9ICgpPT57XG4gICAgY29uc3QgU2l6YWJsZSA9IHtcbiAgICAgICAgc3RyaW5nOiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDYyRFx1MDYzMVx1MDY0OFx1MDY0MVwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA2QzFcdTA2NDhcdTA2NDZcdTA2MjdcIlxuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDYyOFx1MDYyN1x1MDYyNlx1MDY3OVx1MDYzM1wiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA2QzFcdTA2NDhcdTA2NDZcdTA2MjdcIlxuICAgICAgICB9LFxuICAgICAgICBhcnJheToge1xuICAgICAgICAgICAgdW5pdDogXCJcdTA2MjJcdTA2MjZcdTA2NzlcdTA2NDVcdTA2MzJcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHUwNkMxXHUwNjQ4XHUwNjQ2XHUwNjI3XCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1MDYyMlx1MDYyNlx1MDY3OVx1MDY0NVx1MDYzMlwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTA2QzFcdTA2NDhcdTA2NDZcdTA2MjdcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiXHUwNjI3XHUwNjQ2IFx1MDY3RVx1MDY3OVwiLFxuICAgICAgICBlbWFpbDogXCJcdTA2MjdcdTA2Q0MgXHUwNjQ1XHUwNkNDXHUwNjQ0IFx1MDYyN1x1MDZDQ1x1MDY4OFx1MDYzMVx1MDZDQ1x1MDYzM1wiLFxuICAgICAgICB1cmw6IFwiXHUwNkNDXHUwNjQ4IFx1MDYyMlx1MDYzMSBcdTA2MjdcdTA2Q0NcdTA2NDRcIixcbiAgICAgICAgZW1vamk6IFwiXHUwNjI3XHUwNkNDXHUwNjQ1XHUwNjQ4XHUwNjJDXHUwNkNDXCIsXG4gICAgICAgIHV1aWQ6IFwiXHUwNkNDXHUwNjQ4IFx1MDZDQ1x1MDY0OCBcdTA2MjJcdTA2MjZcdTA2Q0MgXHUwNjg4XHUwNkNDXCIsXG4gICAgICAgIHV1aWR2NDogXCJcdTA2Q0NcdTA2NDggXHUwNkNDXHUwNjQ4IFx1MDYyMlx1MDYyNlx1MDZDQyBcdTA2ODhcdTA2Q0MgXHUwNjQ4XHUwNkNDIDRcIixcbiAgICAgICAgdXVpZHY2OiBcIlx1MDZDQ1x1MDY0OCBcdTA2Q0NcdTA2NDggXHUwNjIyXHUwNjI2XHUwNkNDIFx1MDY4OFx1MDZDQyBcdTA2NDhcdTA2Q0MgNlwiLFxuICAgICAgICBuYW5vaWQ6IFwiXHUwNjQ2XHUwNkNDXHUwNjQ2XHUwNjQ4IFx1MDYyMlx1MDYyNlx1MDZDQyBcdTA2ODhcdTA2Q0NcIixcbiAgICAgICAgZ3VpZDogXCJcdTA2MkNcdTA2Q0MgXHUwNkNDXHUwNjQ4IFx1MDYyMlx1MDYyNlx1MDZDQyBcdTA2ODhcdTA2Q0NcIixcbiAgICAgICAgY3VpZDogXCJcdTA2MzNcdTA2Q0MgXHUwNkNDXHUwNjQ4IFx1MDYyMlx1MDYyNlx1MDZDQyBcdTA2ODhcdTA2Q0NcIixcbiAgICAgICAgY3VpZDI6IFwiXHUwNjMzXHUwNkNDIFx1MDZDQ1x1MDY0OCBcdTA2MjJcdTA2MjZcdTA2Q0MgXHUwNjg4XHUwNkNDIDJcIixcbiAgICAgICAgdWxpZDogXCJcdTA2Q0NcdTA2NDggXHUwNjI3XHUwNkNDXHUwNjQ0IFx1MDYyMlx1MDYyNlx1MDZDQyBcdTA2ODhcdTA2Q0NcIixcbiAgICAgICAgeGlkOiBcIlx1MDYyN1x1MDZDQ1x1MDZBOVx1MDYzMyBcdTA2MjJcdTA2MjZcdTA2Q0MgXHUwNjg4XHUwNkNDXCIsXG4gICAgICAgIGtzdWlkOiBcIlx1MDZBOVx1MDZEMiBcdTA2MjdcdTA2Q0NcdTA2MzMgXHUwNkNDXHUwNjQ4IFx1MDYyMlx1MDYyNlx1MDZDQyBcdTA2ODhcdTA2Q0NcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiXHUwNjIyXHUwNjI2XHUwNkNDIFx1MDYyN1x1MDZDQ1x1MDYzMyBcdTA2MjdcdTA2NDggXHUwNjg4XHUwNkNDXHUwNjc5IFx1MDY3OVx1MDYyN1x1MDYyNlx1MDY0NVwiLFxuICAgICAgICBkYXRlOiBcIlx1MDYyMlx1MDYyNlx1MDZDQyBcdTA2MjdcdTA2Q0NcdTA2MzMgXHUwNjI3XHUwNjQ4IFx1MDYyQVx1MDYyN1x1MDYzMVx1MDZDQ1x1MDYyRVwiLFxuICAgICAgICB0aW1lOiBcIlx1MDYyMlx1MDYyNlx1MDZDQyBcdTA2MjdcdTA2Q0NcdTA2MzMgXHUwNjI3XHUwNjQ4IFx1MDY0OFx1MDY0Mlx1MDYyQVwiLFxuICAgICAgICBkdXJhdGlvbjogXCJcdTA2MjJcdTA2MjZcdTA2Q0MgXHUwNjI3XHUwNkNDXHUwNjMzIFx1MDYyN1x1MDY0OCBcdTA2NDVcdTA2MkZcdTA2MkFcIixcbiAgICAgICAgaXB2NDogXCJcdTA2MjJcdTA2MjZcdTA2Q0MgXHUwNjdFXHUwNkNDIFx1MDY0OFx1MDZDQyA0IFx1MDYyN1x1MDZDQ1x1MDY4OFx1MDYzMVx1MDZDQ1x1MDYzM1wiLFxuICAgICAgICBpcHY2OiBcIlx1MDYyMlx1MDYyNlx1MDZDQyBcdTA2N0VcdTA2Q0MgXHUwNjQ4XHUwNkNDIDYgXHUwNjI3XHUwNkNDXHUwNjg4XHUwNjMxXHUwNkNDXHUwNjMzXCIsXG4gICAgICAgIGNpZHJ2NDogXCJcdTA2MjJcdTA2MjZcdTA2Q0MgXHUwNjdFXHUwNkNDIFx1MDY0OFx1MDZDQyA0IFx1MDYzMVx1MDZDQ1x1MDY0Nlx1MDYyQ1wiLFxuICAgICAgICBjaWRydjY6IFwiXHUwNjIyXHUwNjI2XHUwNkNDIFx1MDY3RVx1MDZDQyBcdTA2NDhcdTA2Q0MgNiBcdTA2MzFcdTA2Q0NcdTA2NDZcdTA2MkNcIixcbiAgICAgICAgYmFzZTY0OiBcIlx1MDYyOFx1MDZDQ1x1MDYzMyA2NCBcdTA2MjdcdTA2NDYgXHUwNkE5XHUwNjQ4XHUwNjg4XHUwNjg4IFx1MDYzM1x1MDY3OVx1MDYzMVx1MDY0Nlx1MDZBRlwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiXHUwNjI4XHUwNkNDXHUwNjMzIDY0IFx1MDZDQ1x1MDY0OCBcdTA2MjJcdTA2MzEgXHUwNjI3XHUwNkNDXHUwNjQ0IFx1MDYyN1x1MDY0NiBcdTA2QTlcdTA2NDhcdTA2ODhcdTA2ODggXHUwNjMzXHUwNjc5XHUwNjMxXHUwNjQ2XHUwNkFGXCIsXG4gICAgICAgIGpzb25fc3RyaW5nOiBcIlx1MDYyQ1x1MDZEMiBcdTA2MjdcdTA2Q0NcdTA2MzMgXHUwNjI3XHUwNjQ4IFx1MDYyN1x1MDZDQ1x1MDY0NiBcdTA2MzNcdTA2NzlcdTA2MzFcdTA2NDZcdTA2QUZcIixcbiAgICAgICAgZTE2NDogXCJcdTA2MjdcdTA2Q0MgMTY0IFx1MDY0Nlx1MDY0NVx1MDYyOFx1MDYzMVwiLFxuICAgICAgICBqd3Q6IFwiXHUwNjJDXHUwNkQyIFx1MDY4OFx1MDYyOFx1MDY0NFx1MDZDQ1x1MDY0OCBcdTA2NzlcdTA2Q0NcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJcdTA2MjdcdTA2NDYgXHUwNjdFXHUwNjc5XCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJcdTA2NDZcdTA2NDVcdTA2MjhcdTA2MzFcIixcbiAgICAgICAgYXJyYXk6IFwiXHUwNjIyXHUwNjMxXHUwNkQyXCIsXG4gICAgICAgIG51bGw6IFwiXHUwNjQ2XHUwNjQ0XCJcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpPT57XG4gICAgICAgIHN3aXRjaChpc3N1ZS5jb2RlKXtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjNBXHUwNjQ0XHUwNjM3IFx1MDYyN1x1MDY0NiBcdTA2N0VcdTA2Nzk6IGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH0gXHUwNjQ1XHUwNjJBXHUwNjQ4XHUwNjQyXHUwNjM5IFx1MDYyQVx1MDZCRVx1MDYyN1x1MDYwQyAke3JlY2VpdmVkfSBcdTA2NDVcdTA2NDhcdTA2MzVcdTA2NDhcdTA2NDQgXHUwNkMxXHUwNjQ4XHUwNjI3YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDYzQVx1MDY0NFx1MDYzNyBcdTA2MjdcdTA2NDYgXHUwNjdFXHUwNjc5OiAke2V4cGVjdGVkfSBcdTA2NDVcdTA2MkFcdTA2NDhcdTA2NDJcdTA2MzkgXHUwNjJBXHUwNkJFXHUwNjI3XHUwNjBDICR7cmVjZWl2ZWR9IFx1MDY0NVx1MDY0OFx1MDYzNVx1MDY0OFx1MDY0NCBcdTA2QzFcdTA2NDhcdTA2MjdgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgXHUwNjNBXHUwNjQ0XHUwNjM3IFx1MDYyN1x1MDY0NiBcdTA2N0VcdTA2Nzk6ICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX0gXHUwNjQ1XHUwNjJBXHUwNjQ4XHUwNjQyXHUwNjM5IFx1MDYyQVx1MDZCRVx1MDYyN2A7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2M0FcdTA2NDRcdTA2MzcgXHUwNjIyXHUwNjdFXHUwNjM0XHUwNjQ2OiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX0gXHUwNjQ1XHUwNkNDXHUwNkJBIFx1MDYzM1x1MDZEMiBcdTA2MjdcdTA2Q0NcdTA2QTkgXHUwNjQ1XHUwNjJBXHUwNjQ4XHUwNjQyXHUwNjM5IFx1MDYyQVx1MDZCRVx1MDYyN2A7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYFx1MDYyOFx1MDZDMVx1MDYyQSBcdTA2MjhcdTA2OTFcdTA2Mjc6ICR7aXNzdWUub3JpZ2luID8/IFwiXHUwNjQ4XHUwNkNDXHUwNjQ0XHUwNkNDXHUwNjQ4XCJ9IFx1MDZBOVx1MDZEMiAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcIlx1MDYzOVx1MDY0Nlx1MDYyN1x1MDYzNVx1MDYzMVwifSBcdTA2QzFcdTA2NDhcdTA2NDZcdTA2RDIgXHUwNjQ1XHUwNjJBXHUwNjQ4XHUwNjQyXHUwNjM5IFx1MDYyQVx1MDZCRVx1MDZEMmA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjI4XHUwNkMxXHUwNjJBIFx1MDYyOFx1MDY5MVx1MDYyNzogJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdTA2NDhcdTA2Q0NcdTA2NDRcdTA2Q0NcdTA2NDhcIn0gXHUwNkE5XHUwNjI3ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSBcdTA2QzFcdTA2NDhcdTA2NDZcdTA2MjcgXHUwNjQ1XHUwNjJBXHUwNjQ4XHUwNjQyXHUwNjM5IFx1MDYyQVx1MDZCRVx1MDYyN2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDYyOFx1MDZDMVx1MDYyQSBcdTA2ODZcdTA2QkVcdTA2NDhcdTA2NzlcdTA2Mjc6ICR7aXNzdWUub3JpZ2lufSBcdTA2QTlcdTA2RDIgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9IFx1MDZDMVx1MDY0OFx1MDY0Nlx1MDZEMiBcdTA2NDVcdTA2MkFcdTA2NDhcdTA2NDJcdTA2MzkgXHUwNjJBXHUwNkJFXHUwNkQyYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDYyOFx1MDZDMVx1MDYyQSBcdTA2ODZcdTA2QkVcdTA2NDhcdTA2NzlcdTA2Mjc6ICR7aXNzdWUub3JpZ2lufSBcdTA2QTlcdTA2MjcgJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9IFx1MDZDMVx1MDY0OFx1MDY0Nlx1MDYyNyBcdTA2NDVcdTA2MkFcdTA2NDhcdTA2NDJcdTA2MzkgXHUwNjJBXHUwNkJFXHUwNjI3YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDYzQVx1MDY0NFx1MDYzNyBcdTA2MzNcdTA2NzlcdTA2MzFcdTA2NDZcdTA2QUY6IFwiJHtfaXNzdWUucHJlZml4fVwiIFx1MDYzM1x1MDZEMiBcdTA2MzRcdTA2MzFcdTA2NDhcdTA2MzkgXHUwNkMxXHUwNjQ4XHUwNjQ2XHUwNjI3IFx1MDY4Nlx1MDYyN1x1MDZDMVx1MDZDQ1x1MDZEMmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgXHUwNjNBXHUwNjQ0XHUwNjM3IFx1MDYzM1x1MDY3OVx1MDYzMVx1MDY0Nlx1MDZBRjogXCIke19pc3N1ZS5zdWZmaXh9XCIgXHUwNjdFXHUwNjMxIFx1MDYyRVx1MDYyQVx1MDY0NSBcdTA2QzFcdTA2NDhcdTA2NDZcdTA2MjcgXHUwNjg2XHUwNjI3XHUwNkMxXHUwNkNDXHUwNkQyYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBcdTA2M0FcdTA2NDRcdTA2MzcgXHUwNjMzXHUwNjc5XHUwNjMxXHUwNjQ2XHUwNkFGOiBcIiR7X2lzc3VlLmluY2x1ZGVzfVwiIFx1MDYzNFx1MDYyN1x1MDY0NVx1MDY0NCBcdTA2QzFcdTA2NDhcdTA2NDZcdTA2MjcgXHUwNjg2XHUwNjI3XHUwNkMxXHUwNkNDXHUwNkQyYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwicmVnZXhcIikgcmV0dXJuIGBcdTA2M0FcdTA2NDRcdTA2MzcgXHUwNjMzXHUwNjc5XHUwNjMxXHUwNjQ2XHUwNkFGOiBcdTA2N0VcdTA2Q0NcdTA2NzlcdTA2MzFcdTA2NDYgJHtfaXNzdWUucGF0dGVybn0gXHUwNjMzXHUwNkQyIFx1MDY0NVx1MDZDQ1x1MDY4NiBcdTA2QzFcdTA2NDhcdTA2NDZcdTA2MjcgXHUwNjg2XHUwNjI3XHUwNkMxXHUwNkNDXHUwNkQyYDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2M0FcdTA2NDRcdTA2MzcgJHtGb3JtYXREaWN0aW9uYXJ5W19pc3N1ZS5mb3JtYXRdID8/IGlzc3VlLmZvcm1hdH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJub3RfbXVsdGlwbGVfb2ZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDYzQVx1MDY0NFx1MDYzNyBcdTA2NDZcdTA2NDVcdTA2MjhcdTA2MzE6ICR7aXNzdWUuZGl2aXNvcn0gXHUwNkE5XHUwNjI3IFx1MDY0NVx1MDYzNlx1MDYyN1x1MDYzOVx1MDY0MSBcdTA2QzFcdTA2NDhcdTA2NDZcdTA2MjcgXHUwNjg2XHUwNjI3XHUwNkMxXHUwNkNDXHUwNkQyYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHUwNjNBXHUwNkNDXHUwNjMxIFx1MDYyQVx1MDYzM1x1MDY0NFx1MDZDQ1x1MDY0NSBcdTA2MzRcdTA2MkZcdTA2QzEgXHUwNkE5XHUwNkNDJHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcIlx1MDYzMlwiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiXHUwNjBDIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbn0gXHUwNjQ1XHUwNkNDXHUwNkJBIFx1MDYzQVx1MDY0NFx1MDYzNyBcdTA2QTlcdTA2Q0NgO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcdTA2M0FcdTA2NDRcdTA2MzcgXHUwNjI3XHUwNjQ2IFx1MDY3RVx1MDY3OVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IFx1MDY0NVx1MDZDQ1x1MDZCQSBcdTA2M0FcdTA2NDRcdTA2MzcgXHUwNjQ4XHUwNkNDXHUwNjQ0XHUwNkNDXHUwNjQ4YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTA2M0FcdTA2NDRcdTA2MzcgXHUwNjI3XHUwNjQ2IFx1MDY3RVx1MDY3OWA7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiYmVsZ2lcIixcbiAgICAgICAgICAgIHZlcmI6IFwiYm9cdTIwMThsaXNoaSBrZXJha1wiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiYmF5dFwiLFxuICAgICAgICAgICAgdmVyYjogXCJib1x1MjAxOGxpc2hpIGtlcmFrXCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiZWxlbWVudFwiLFxuICAgICAgICAgICAgdmVyYjogXCJib1x1MjAxOGxpc2hpIGtlcmFrXCJcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgICB1bml0OiBcImVsZW1lbnRcIixcbiAgICAgICAgICAgIHZlcmI6IFwiYm9cdTIwMThsaXNoaSBrZXJha1wiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJraXJpc2hcIixcbiAgICAgICAgZW1haWw6IFwiZWxla3Ryb24gcG9jaHRhIG1hbnppbGlcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gc2FuYSB2YSB2YXF0aVwiLFxuICAgICAgICBkYXRlOiBcIklTTyBzYW5hXCIsXG4gICAgICAgIHRpbWU6IFwiSVNPIHZhcXRcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIGRhdm9taXlsaWtcIixcbiAgICAgICAgaXB2NDogXCJJUHY0IG1hbnppbFwiLFxuICAgICAgICBpcHY2OiBcIklQdjYgbWFuemlsXCIsXG4gICAgICAgIG1hYzogXCJNQUMgbWFuemlsXCIsXG4gICAgICAgIGNpZHJ2NDogXCJJUHY0IGRpYXBhem9uXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2IGRpYXBhem9uXCIsXG4gICAgICAgIGJhc2U2NDogXCJiYXNlNjQga29kbGFuZ2FuIHNhdHJcIixcbiAgICAgICAgYmFzZTY0dXJsOiBcImJhc2U2NHVybCBrb2RsYW5nYW4gc2F0clwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIHNhdHJcIixcbiAgICAgICAgZTE2NDogXCJFLjE2NCByYXFhbVwiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwia2lyaXNoXCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJyYXFhbVwiLFxuICAgICAgICBhcnJheTogXCJtYXNzaXZcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOb3RvXHUyMDE4Z1x1MjAxOHJpIGtpcmlzaDoga3V0aWxnYW4gaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgcWFidWwgcWlsaW5nYW4gJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgTm90b1x1MjAxOGdcdTIwMThyaSBraXJpc2g6IGt1dGlsZ2FuICR7ZXhwZWN0ZWR9LCBxYWJ1bCBxaWxpbmdhbiAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdmFsdWVcIjpcbiAgICAgICAgICAgICAgICBpZiAoaXNzdWUudmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGBOb3RvXHUyMDE4Z1x1MjAxOHJpIGtpcmlzaDoga3V0aWxnYW4gJHt1dGlsLnN0cmluZ2lmeVByaW1pdGl2ZShpc3N1ZS52YWx1ZXNbMF0pfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOb3RvXHUyMDE4Z1x1MjAxOHJpIHZhcmlhbnQ6IHF1eWlkYWdpbGFyZGFuIGJpcmkga3V0aWxnYW4gJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUudmFsdWVzLCBcInxcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ0b29fYmlnXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIjw9XCIgOiBcIjxcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHJldHVybiBgSnVkYSBrYXR0YToga3V0aWxnYW4gJHtpc3N1ZS5vcmlnaW4gPz8gXCJxaXltYXRcIn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9ICR7c2l6aW5nLnZlcmJ9YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBKdWRhIGthdHRhOiBrdXRpbGdhbiAke2lzc3VlLm9yaWdpbiA/PyBcInFpeW1hdFwifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJ0b29fc21hbGxcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPj1cIiA6IFwiPlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBKdWRhIGtpY2hpazoga3V0aWxnYW4gJHtpc3N1ZS5vcmlnaW59ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fSAke3NpemluZy52ZXJifWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBKdWRhIGtpY2hpazoga3V0aWxnYW4gJHtpc3N1ZS5vcmlnaW59ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZm9ybWF0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwic3RhcnRzX3dpdGhcIikgcmV0dXJuIGBOb3RvXHUyMDE4Z1x1MjAxOHJpIHNhdHI6IFwiJHtfaXNzdWUucHJlZml4fVwiIGJpbGFuIGJvc2hsYW5pc2hpIGtlcmFrYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgTm90b1x1MjAxOGdcdTIwMThyaSBzYXRyOiBcIiR7X2lzc3VlLnN1ZmZpeH1cIiBiaWxhbiB0dWdhc2hpIGtlcmFrYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBOb3RvXHUyMDE4Z1x1MjAxOHJpIHNhdHI6IFwiJHtfaXNzdWUuaW5jbHVkZXN9XCIgbmkgb1x1MjAxOHogaWNoaWdhIG9saXNoaSBrZXJha2A7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgTm90b1x1MjAxOGdcdTIwMThyaSBzYXRyOiAke19pc3N1ZS5wYXR0ZXJufSBzaGFibG9uaWdhIG1vcyBrZWxpc2hpIGtlcmFrYDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBOb3RvXHUyMDE4Z1x1MjAxOHJpICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOb3RvXHUyMDE4Z1x1MjAxOHJpIHJhcWFtOiAke2lzc3VlLmRpdmlzb3J9IG5pbmcga2FycmFsaXNpIGJvXHUyMDE4bGlzaGkga2VyYWtgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBOb21hXHUyMDE5bHVtIGthbGl0JHtpc3N1ZS5rZXlzLmxlbmd0aCA+IDEgPyBcImxhclwiIDogXCJcIn06ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IGRhZ2kga2FsaXQgbm90b1x1MjAxOGdcdTIwMThyaWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIk5vdG9cdTIwMThnXHUyMDE4cmkga2lyaXNoXCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbn0gZGEgbm90b1x1MjAxOGdcdTIwMThyaSBxaXltYXRgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYE5vdG9cdTIwMThnXHUyMDE4cmkga2lyaXNoYDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJrXHUwMEZEIHRcdTFFRjFcIixcbiAgICAgICAgICAgIHZlcmI6IFwiY1x1MDBGM1wiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiYnl0ZVwiLFxuICAgICAgICAgICAgdmVyYjogXCJjXHUwMEYzXCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwicGhcdTFFQTduIHRcdTFFRURcIixcbiAgICAgICAgICAgIHZlcmI6IFwiY1x1MDBGM1wiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJwaFx1MUVBN24gdFx1MUVFRFwiLFxuICAgICAgICAgICAgdmVyYjogXCJjXHUwMEYzXCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIlx1MDExMVx1MUVBN3Ugdlx1MDBFMG9cIixcbiAgICAgICAgZW1haWw6IFwiXHUwMTExXHUxRUNCYSBjaFx1MUVDOSBlbWFpbFwiLFxuICAgICAgICB1cmw6IFwiVVJMXCIsXG4gICAgICAgIGVtb2ppOiBcImVtb2ppXCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIm5nXHUwMEUweSBnaVx1MUVERCBJU09cIixcbiAgICAgICAgZGF0ZTogXCJuZ1x1MDBFMHkgSVNPXCIsXG4gICAgICAgIHRpbWU6IFwiZ2lcdTFFREQgSVNPXCIsXG4gICAgICAgIGR1cmF0aW9uOiBcImtob1x1MUVBM25nIHRoXHUxRUREaSBnaWFuIElTT1wiLFxuICAgICAgICBpcHY0OiBcIlx1MDExMVx1MUVDQmEgY2hcdTFFQzkgSVB2NFwiLFxuICAgICAgICBpcHY2OiBcIlx1MDExMVx1MUVDQmEgY2hcdTFFQzkgSVB2NlwiLFxuICAgICAgICBjaWRydjQ6IFwiZFx1MUVBM2kgSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwiZFx1MUVBM2kgSVB2NlwiLFxuICAgICAgICBiYXNlNjQ6IFwiY2h1XHUxRUQ3aSBtXHUwMEUzIGhcdTAwRjNhIGJhc2U2NFwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiY2h1XHUxRUQ3aSBtXHUwMEUzIGhcdTAwRjNhIGJhc2U2NHVybFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJjaHVcdTFFRDdpIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJzXHUxRUQxIEUuMTY0XCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJcdTAxMTFcdTFFQTd1IHZcdTAwRTBvXCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJzXHUxRUQxXCIsXG4gICAgICAgIGFycmF5OiBcIm1cdTFFQTNuZ1wiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDExMFx1MUVBN3Ugdlx1MDBFMG8ga2hcdTAwRjRuZyBoXHUxRUUzcCBsXHUxRUM3OiBtb25nIFx1MDExMVx1MUVFM2kgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfSwgbmhcdTFFQURuIFx1MDExMVx1MDFCMFx1MUVFM2MgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHUwMTEwXHUxRUE3dSB2XHUwMEUwbyBraFx1MDBGNG5nIGhcdTFFRTNwIGxcdTFFQzc6IG1vbmcgXHUwMTExXHUxRUUzaSAke2V4cGVjdGVkfSwgbmhcdTFFQURuIFx1MDExMVx1MDFCMFx1MUVFM2MgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgXHUwMTEwXHUxRUE3dSB2XHUwMEUwbyBraFx1MDBGNG5nIGhcdTFFRTNwIGxcdTFFQzc6IG1vbmcgXHUwMTExXHUxRUUzaSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFRcdTAwRjl5IGNoXHUxRUNEbiBraFx1MDBGNG5nIGhcdTFFRTNwIGxcdTFFQzc6IG1vbmcgXHUwMTExXHUxRUUzaSBtXHUxRUQ5dCB0cm9uZyBjXHUwMEUxYyBnaVx1MDBFMSB0clx1MUVDQiAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBRdVx1MDBFMSBsXHUxRURCbjogbW9uZyBcdTAxMTFcdTFFRTNpICR7aXNzdWUub3JpZ2luID8/IFwiZ2lcdTAwRTEgdHJcdTFFQ0JcIn0gJHtzaXppbmcudmVyYn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXQgPz8gXCJwaFx1MUVBN24gdFx1MUVFRFwifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgUXVcdTAwRTEgbFx1MUVEQm46IG1vbmcgXHUwMTExXHUxRUUzaSAke2lzc3VlLm9yaWdpbiA/PyBcImdpXHUwMEUxIHRyXHUxRUNCXCJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFF1XHUwMEUxIG5oXHUxRUNGOiBtb25nIFx1MDExMVx1MUVFM2kgJHtpc3N1ZS5vcmlnaW59ICR7c2l6aW5nLnZlcmJ9ICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBRdVx1MDBFMSBuaFx1MUVDRjogbW9uZyBcdTAxMTFcdTFFRTNpICR7aXNzdWUub3JpZ2lufSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgQ2h1XHUxRUQ3aSBraFx1MDBGNG5nIGhcdTFFRTNwIGxcdTFFQzc6IHBoXHUxRUEzaSBiXHUxRUFGdCBcdTAxMTFcdTFFQTd1IGJcdTFFQjFuZyBcIiR7X2lzc3VlLnByZWZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImVuZHNfd2l0aFwiKSByZXR1cm4gYENodVx1MUVEN2kga2hcdTAwRjRuZyBoXHUxRUUzcCBsXHUxRUM3OiBwaFx1MUVBM2kga1x1MUVCRnQgdGhcdTAwRkFjIGJcdTFFQjFuZyBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgQ2h1XHUxRUQ3aSBraFx1MDBGNG5nIGhcdTFFRTNwIGxcdTFFQzc6IHBoXHUxRUEzaSBiYW8gZ1x1MUVEM20gXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgQ2h1XHUxRUQ3aSBraFx1MDBGNG5nIGhcdTFFRTNwIGxcdTFFQzc6IHBoXHUxRUEzaSBraFx1MUVEQnAgdlx1MUVEQmkgbVx1MUVBQnUgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9IGtoXHUwMEY0bmcgaFx1MUVFM3AgbFx1MUVDN2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgU1x1MUVEMSBraFx1MDBGNG5nIGhcdTFFRTNwIGxcdTFFQzc6IHBoXHUxRUEzaSBsXHUwMEUwIGJcdTFFRDlpIHNcdTFFRDEgY1x1MUVFN2EgJHtpc3N1ZS5kaXZpc29yfWA7XG4gICAgICAgICAgICBjYXNlIFwidW5yZWNvZ25pemVkX2tleXNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEtoXHUwMEYzYSBraFx1MDBGNG5nIFx1MDExMVx1MDFCMFx1MUVFM2MgbmhcdTFFQURuIGRcdTFFQTFuZzogJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUua2V5cywgXCIsIFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfa2V5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBLaFx1MDBGM2Ega2hcdTAwRjRuZyBoXHUxRUUzcCBsXHUxRUM3IHRyb25nICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlx1MDExMFx1MUVBN3Ugdlx1MDBFMG8ga2hcdTAwRjRuZyBoXHUxRUUzcCBsXHUxRUM3XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBHaVx1MDBFMSB0clx1MUVDQiBraFx1MDBGNG5nIGhcdTFFRTNwIGxcdTFFQzcgdHJvbmcgJHtpc3N1ZS5vcmlnaW59YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTAxMTBcdTFFQTd1IHZcdTAwRTBvIGtoXHUwMEY0bmcgaFx1MUVFM3AgbFx1MUVDN2A7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHU1QjU3XHU3QjI2XCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1NTMwNVx1NTQyQlwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHU1QjU3XHU4MjgyXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1NTMwNVx1NTQyQlwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcIlx1OTg3OVwiLFxuICAgICAgICAgICAgdmVyYjogXCJcdTUzMDVcdTU0MkJcIlxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHU5ODc5XCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1NTMwNVx1NTQyQlwiXG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZ1bmN0aW9uIGdldFNpemluZyhvcmlnaW4pIHtcbiAgICAgICAgcmV0dXJuIFNpemFibGVbb3JpZ2luXSA/PyBudWxsO1xuICAgIH1cbiAgICBjb25zdCBGb3JtYXREaWN0aW9uYXJ5ID0ge1xuICAgICAgICByZWdleDogXCJcdThGOTNcdTUxNjVcIixcbiAgICAgICAgZW1haWw6IFwiXHU3NTM1XHU1QjUwXHU5MEFFXHU0RUY2XCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiXHU4ODY4XHU2MEM1XHU3QjI2XHU1M0Y3XCIsXG4gICAgICAgIHV1aWQ6IFwiVVVJRFwiLFxuICAgICAgICB1dWlkdjQ6IFwiVVVJRHY0XCIsXG4gICAgICAgIHV1aWR2NjogXCJVVUlEdjZcIixcbiAgICAgICAgbmFub2lkOiBcIm5hbm9pZFwiLFxuICAgICAgICBndWlkOiBcIkdVSURcIixcbiAgICAgICAgY3VpZDogXCJjdWlkXCIsXG4gICAgICAgIGN1aWQyOiBcImN1aWQyXCIsXG4gICAgICAgIHVsaWQ6IFwiVUxJRFwiLFxuICAgICAgICB4aWQ6IFwiWElEXCIsXG4gICAgICAgIGtzdWlkOiBcIktTVUlEXCIsXG4gICAgICAgIGRhdGV0aW1lOiBcIklTT1x1NjVFNVx1NjcxRlx1NjVGNlx1OTVGNFwiLFxuICAgICAgICBkYXRlOiBcIklTT1x1NjVFNVx1NjcxRlwiLFxuICAgICAgICB0aW1lOiBcIklTT1x1NjVGNlx1OTVGNFwiLFxuICAgICAgICBkdXJhdGlvbjogXCJJU09cdTY1RjZcdTk1N0ZcIixcbiAgICAgICAgaXB2NDogXCJJUHY0XHU1NzMwXHU1NzQwXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2Nlx1NTczMFx1NTc0MFwiLFxuICAgICAgICBjaWRydjQ6IFwiSVB2NFx1N0Y1MVx1NkJCNVwiLFxuICAgICAgICBjaWRydjY6IFwiSVB2Nlx1N0Y1MVx1NkJCNVwiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0XHU3RjE2XHU3ODAxXHU1QjU3XHU3QjI2XHU0RTMyXCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJiYXNlNjR1cmxcdTdGMTZcdTc4MDFcdTVCNTdcdTdCMjZcdTRFMzJcIixcbiAgICAgICAganNvbl9zdHJpbmc6IFwiSlNPTlx1NUI1N1x1N0IyNlx1NEUzMlwiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0XHU1M0Y3XHU3ODAxXCIsXG4gICAgICAgIGp3dDogXCJKV1RcIixcbiAgICAgICAgdGVtcGxhdGVfbGl0ZXJhbDogXCJcdThGOTNcdTUxNjVcIlxuICAgIH07XG4gICAgY29uc3QgVHlwZURpY3Rpb25hcnkgPSB7XG4gICAgICAgIG5hbjogXCJOYU5cIixcbiAgICAgICAgbnVtYmVyOiBcIlx1NjU3MFx1NUI1N1wiLFxuICAgICAgICBhcnJheTogXCJcdTY1NzBcdTdFQzRcIixcbiAgICAgICAgbnVsbDogXCJcdTdBN0FcdTUwM0MobnVsbClcIlxuICAgIH07XG4gICAgcmV0dXJuIChpc3N1ZSk9PntcbiAgICAgICAgc3dpdGNoKGlzc3VlLmNvZGUpe1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdHlwZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBUeXBlRGljdGlvbmFyeVtpc3N1ZS5leHBlY3RlZF0gPz8gaXNzdWUuZXhwZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkVHlwZSA9IHV0aWwucGFyc2VkVHlwZShpc3N1ZS5pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVkID0gVHlwZURpY3Rpb25hcnlbcmVjZWl2ZWRUeXBlXSA/PyByZWNlaXZlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXltBLVpdLy50ZXN0KGlzc3VlLmV4cGVjdGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTY1RTBcdTY1NDhcdThGOTNcdTUxNjVcdUZGMUFcdTY3MUZcdTY3MUIgaW5zdGFuY2VvZiAke2lzc3VlLmV4cGVjdGVkfVx1RkYwQ1x1NUI5RVx1OTY0NVx1NjNBNVx1NjUzNiAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTY1RTBcdTY1NDhcdThGOTNcdTUxNjVcdUZGMUFcdTY3MUZcdTY3MUIgJHtleHBlY3RlZH1cdUZGMENcdTVCOUVcdTk2NDVcdTYzQTVcdTY1MzYgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3ZhbHVlXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLnZhbHVlcy5sZW5ndGggPT09IDEpIHJldHVybiBgXHU2NUUwXHU2NTQ4XHU4RjkzXHU1MTY1XHVGRjFBXHU2NzFGXHU2NzFCICR7dXRpbC5zdHJpbmdpZnlQcmltaXRpdmUoaXNzdWUudmFsdWVzWzBdKX1gO1xuICAgICAgICAgICAgICAgIHJldHVybiBgXHU2NUUwXHU2NTQ4XHU5MDA5XHU5ODc5XHVGRjFBXHU2NzFGXHU2NzFCXHU0RUU1XHU0RTBCXHU0RTRCXHU0RTAwICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLnZhbHVlcywgXCJ8XCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwidG9vX2JpZ1wiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI8PVwiIDogXCI8XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSByZXR1cm4gYFx1NjU3MFx1NTAzQ1x1OEZDN1x1NTkyN1x1RkYxQVx1NjcxRlx1NjcxQiAke2lzc3VlLm9yaWdpbiA/PyBcIlx1NTAzQ1wifSAke2Fkan0ke2lzc3VlLm1heGltdW0udG9TdHJpbmcoKX0gJHtzaXppbmcudW5pdCA/PyBcIlx1NEUyQVx1NTE0M1x1N0QyMFwifWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHU2NTcwXHU1MDNDXHU4RkM3XHU1OTI3XHVGRjFBXHU2NzFGXHU2NzFCICR7aXNzdWUub3JpZ2luID8/IFwiXHU1MDNDXCJ9ICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1NjU3MFx1NTAzQ1x1OEZDN1x1NUMwRlx1RkYxQVx1NjcxRlx1NjcxQiAke2lzc3VlLm9yaWdpbn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1NjU3MFx1NTAzQ1x1OEZDN1x1NUMwRlx1RkYxQVx1NjcxRlx1NjcxQiAke2lzc3VlLm9yaWdpbn0gJHthZGp9JHtpc3N1ZS5taW5pbXVtLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9mb3JtYXRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9pc3N1ZSA9IGlzc3VlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJzdGFydHNfd2l0aFwiKSByZXR1cm4gYFx1NjVFMFx1NjU0OFx1NUI1N1x1N0IyNlx1NEUzMlx1RkYxQVx1NUZDNVx1OTg3Qlx1NEVFNSBcIiR7X2lzc3VlLnByZWZpeH1cIiBcdTVGMDBcdTU5MzRgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJlbmRzX3dpdGhcIikgcmV0dXJuIGBcdTY1RTBcdTY1NDhcdTVCNTdcdTdCMjZcdTRFMzJcdUZGMUFcdTVGQzVcdTk4N0JcdTRFRTUgXCIke19pc3N1ZS5zdWZmaXh9XCIgXHU3RUQzXHU1QzNFYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiaW5jbHVkZXNcIikgcmV0dXJuIGBcdTY1RTBcdTY1NDhcdTVCNTdcdTdCMjZcdTRFMzJcdUZGMUFcdTVGQzVcdTk4N0JcdTUzMDVcdTU0MkIgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgXHU2NUUwXHU2NTQ4XHU1QjU3XHU3QjI2XHU0RTMyXHVGRjFBXHU1RkM1XHU5ODdCXHU2RUUxXHU4REIzXHU2QjYzXHU1MjE5XHU4ODY4XHU4RkJFXHU1RjBGICR7X2lzc3VlLnBhdHRlcm59YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTY1RTBcdTY1NDgke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHU2NUUwXHU2NTQ4XHU2NTcwXHU1QjU3XHVGRjFBXHU1RkM1XHU5ODdCXHU2NjJGICR7aXNzdWUuZGl2aXNvcn0gXHU3Njg0XHU1MDBEXHU2NTcwYDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHU1MUZBXHU3M0IwXHU2NzJBXHU3N0U1XHU3Njg0XHU5NTJFKGtleSk6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgJHtpc3N1ZS5vcmlnaW59IFx1NEUyRFx1NzY4NFx1OTUyRShrZXkpXHU2NUUwXHU2NTQ4YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3VuaW9uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXHU2NUUwXHU2NTQ4XHU4RjkzXHU1MTY1XCI7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9lbGVtZW50XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2lzc3VlLm9yaWdpbn0gXHU0RTJEXHU1MzA1XHU1NDJCXHU2NUUwXHU2NTQ4XHU1MDNDKHZhbHVlKWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBgXHU2NUUwXHU2NTQ4XHU4RjkzXHU1MTY1YDtcbiAgICAgICAgfVxuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlRXJyb3I6IGVycm9yKClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4uL2NvcmUvdXRpbC5qc1wiO1xuY29uc3QgZXJyb3IgPSAoKT0+e1xuICAgIGNvbnN0IFNpemFibGUgPSB7XG4gICAgICAgIHN0cmluZzoge1xuICAgICAgICAgICAgdW5pdDogXCJcdTVCNTdcdTUxNDNcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHU2NEMxXHU2NzA5XCJcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZToge1xuICAgICAgICAgICAgdW5pdDogXCJcdTRGNERcdTUxNDNcdTdENDRcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHU2NEMxXHU2NzA5XCJcbiAgICAgICAgfSxcbiAgICAgICAgYXJyYXk6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHU5ODA1XHU3NkVFXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIlx1NjRDMVx1NjcwOVwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJcdTk4MDVcdTc2RUVcIixcbiAgICAgICAgICAgIHZlcmI6IFwiXHU2NEMxXHU2NzA5XCJcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0U2l6aW5nKG9yaWdpbikge1xuICAgICAgICByZXR1cm4gU2l6YWJsZVtvcmlnaW5dID8/IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IEZvcm1hdERpY3Rpb25hcnkgPSB7XG4gICAgICAgIHJlZ2V4OiBcIlx1OEYzOFx1NTE2NVwiLFxuICAgICAgICBlbWFpbDogXCJcdTkwRjVcdTRFRjZcdTU3MzBcdTU3NDBcIixcbiAgICAgICAgdXJsOiBcIlVSTFwiLFxuICAgICAgICBlbW9qaTogXCJlbW9qaVwiLFxuICAgICAgICB1dWlkOiBcIlVVSURcIixcbiAgICAgICAgdXVpZHY0OiBcIlVVSUR2NFwiLFxuICAgICAgICB1dWlkdjY6IFwiVVVJRHY2XCIsXG4gICAgICAgIG5hbm9pZDogXCJuYW5vaWRcIixcbiAgICAgICAgZ3VpZDogXCJHVUlEXCIsXG4gICAgICAgIGN1aWQ6IFwiY3VpZFwiLFxuICAgICAgICBjdWlkMjogXCJjdWlkMlwiLFxuICAgICAgICB1bGlkOiBcIlVMSURcIixcbiAgICAgICAgeGlkOiBcIlhJRFwiLFxuICAgICAgICBrc3VpZDogXCJLU1VJRFwiLFxuICAgICAgICBkYXRldGltZTogXCJJU08gXHU2NUU1XHU2NzFGXHU2NjQyXHU5NTkzXCIsXG4gICAgICAgIGRhdGU6IFwiSVNPIFx1NjVFNVx1NjcxRlwiLFxuICAgICAgICB0aW1lOiBcIklTTyBcdTY2NDJcdTk1OTNcIixcbiAgICAgICAgZHVyYXRpb246IFwiSVNPIFx1NjcxRlx1OTU5M1wiLFxuICAgICAgICBpcHY0OiBcIklQdjQgXHU0RjREXHU1NzQwXCIsXG4gICAgICAgIGlwdjY6IFwiSVB2NiBcdTRGNERcdTU3NDBcIixcbiAgICAgICAgY2lkcnY0OiBcIklQdjQgXHU3QkM0XHU1NzBEXCIsXG4gICAgICAgIGNpZHJ2NjogXCJJUHY2IFx1N0JDNFx1NTcwRFwiLFxuICAgICAgICBiYXNlNjQ6IFwiYmFzZTY0IFx1N0RFOFx1NzhCQ1x1NUI1N1x1NEUzMlwiLFxuICAgICAgICBiYXNlNjR1cmw6IFwiYmFzZTY0dXJsIFx1N0RFOFx1NzhCQ1x1NUI1N1x1NEUzMlwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJKU09OIFx1NUI1N1x1NEUzMlwiLFxuICAgICAgICBlMTY0OiBcIkUuMTY0IFx1NjU3OFx1NTAzQ1wiLFxuICAgICAgICBqd3Q6IFwiSldUXCIsXG4gICAgICAgIHRlbXBsYXRlX2xpdGVyYWw6IFwiXHU4RjM4XHU1MTY1XCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCJcbiAgICB9O1xuICAgIHJldHVybiAoaXNzdWUpPT57XG4gICAgICAgIHN3aXRjaChpc3N1ZS5jb2RlKXtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX3R5cGVcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gVHlwZURpY3Rpb25hcnlbaXNzdWUuZXhwZWN0ZWRdID8/IGlzc3VlLmV4cGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZFR5cGUgPSB1dGlsLnBhcnNlZFR5cGUoaXNzdWUuaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNlaXZlZCA9IFR5cGVEaWN0aW9uYXJ5W3JlY2VpdmVkVHlwZV0gPz8gcmVjZWl2ZWRUeXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoL15bQS1aXS8udGVzdChpc3N1ZS5leHBlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHU3MTIxXHU2NTQ4XHU3Njg0XHU4RjM4XHU1MTY1XHU1MDNDXHVGRjFBXHU5ODEwXHU2NzFGXHU3MEJBIGluc3RhbmNlb2YgJHtpc3N1ZS5leHBlY3RlZH1cdUZGMENcdTRGNDZcdTY1MzZcdTUyMzAgJHtyZWNlaXZlZH1gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHU3MTIxXHU2NTQ4XHU3Njg0XHU4RjM4XHU1MTY1XHU1MDNDXHVGRjFBXHU5ODEwXHU2NzFGXHU3MEJBICR7ZXhwZWN0ZWR9XHVGRjBDXHU0RjQ2XHU2NTM2XHU1MjMwICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYFx1NzEyMVx1NjU0OFx1NzY4NFx1OEYzOFx1NTE2NVx1NTAzQ1x1RkYxQVx1OTgxMFx1NjcxRlx1NzBCQSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1NzEyMVx1NjU0OFx1NzY4NFx1OTA3OFx1OTgwNVx1RkYxQVx1OTgxMFx1NjcxRlx1NzBCQVx1NEVFNVx1NEUwQlx1NTE3Nlx1NEUyRFx1NEU0Qlx1NEUwMCAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBcdTY1NzhcdTUwM0NcdTkwNEVcdTU5MjdcdUZGMUFcdTk4MTBcdTY3MUYgJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdTUwM0NcIn0gXHU2MUM5XHU3MEJBICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0ID8/IFwiXHU1MDBCXHU1MTQzXHU3RDIwXCJ9YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTY1NzhcdTUwM0NcdTkwNEVcdTU5MjdcdUZGMUFcdTk4MTBcdTY3MUYgJHtpc3N1ZS5vcmlnaW4gPz8gXCJcdTUwM0NcIn0gXHU2MUM5XHU3MEJBICR7YWRqfSR7aXNzdWUubWF4aW11bS50b1N0cmluZygpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInRvb19zbWFsbFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqID0gaXNzdWUuaW5jbHVzaXZlID8gXCI+PVwiIDogXCI+XCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemluZyA9IGdldFNpemluZyhpc3N1ZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1NjU3OFx1NTAzQ1x1OTA0RVx1NUMwRlx1RkYxQVx1OTgxMFx1NjcxRiAke2lzc3VlLm9yaWdpbn0gXHU2MUM5XHU3MEJBICR7YWRqfSR7aXNzdWUubWluaW11bS50b1N0cmluZygpfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTY1NzhcdTUwM0NcdTkwNEVcdTVDMEZcdUZGMUFcdTk4MTBcdTY3MUYgJHtpc3N1ZS5vcmlnaW59IFx1NjFDOVx1NzBCQSAke2Fkan0ke2lzc3VlLm1pbmltdW0udG9TdHJpbmcoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHU3MTIxXHU2NTQ4XHU3Njg0XHU1QjU3XHU0RTMyXHVGRjFBXHU1RkM1XHU5ODA4XHU0RUU1IFwiJHtfaXNzdWUucHJlZml4fVwiIFx1OTU4Qlx1OTgyRGA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgXHU3MTIxXHU2NTQ4XHU3Njg0XHU1QjU3XHU0RTMyXHVGRjFBXHU1RkM1XHU5ODA4XHU0RUU1IFwiJHtfaXNzdWUuc3VmZml4fVwiIFx1N0Q1MFx1NUMzRWA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgXHU3MTIxXHU2NTQ4XHU3Njg0XHU1QjU3XHU0RTMyXHVGRjFBXHU1RkM1XHU5ODA4XHU1MzA1XHU1NDJCIFwiJHtfaXNzdWUuaW5jbHVkZXN9XCJgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZvcm1hdCA9PT0gXCJyZWdleFwiKSByZXR1cm4gYFx1NzEyMVx1NjU0OFx1NzY4NFx1NUI1N1x1NEUzMlx1RkYxQVx1NUZDNVx1OTgwOFx1N0IyNlx1NTQwOFx1NjgzQ1x1NUYwRiAke19pc3N1ZS5wYXR0ZXJufWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXHU3MTIxXHU2NTQ4XHU3Njg0ICR7Rm9ybWF0RGljdGlvbmFyeVtfaXNzdWUuZm9ybWF0XSA/PyBpc3N1ZS5mb3JtYXR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwibm90X211bHRpcGxlX29mXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTcxMjFcdTY1NDhcdTc2ODRcdTY1NzhcdTVCNTdcdUZGMUFcdTVGQzVcdTk4MDhcdTcwQkEgJHtpc3N1ZS5kaXZpc29yfSBcdTc2ODRcdTUwMERcdTY1NzhgO1xuICAgICAgICAgICAgY2FzZSBcInVucmVjb2duaXplZF9rZXlzXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcdTcxMjFcdTZDRDVcdThCNThcdTUyMjVcdTc2ODRcdTkzNzVcdTUwM0Mke2lzc3VlLmtleXMubGVuZ3RoID4gMSA/IFwiXHU1MDExXCIgOiBcIlwifVx1RkYxQSR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiXHUzMDAxXCIpfWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF9rZXlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufSBcdTRFMkRcdTY3MDlcdTcxMjFcdTY1NDhcdTc2ODRcdTkzNzVcdTUwM0NgO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfdW5pb25cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcdTcxMjFcdTY1NDhcdTc2ODRcdThGMzhcdTUxNjVcdTUwM0NcIjtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2VsZW1lbnRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7aXNzdWUub3JpZ2lufSBcdTRFMkRcdTY3MDlcdTcxMjFcdTY1NDhcdTc2ODRcdTUwM0NgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1NzEyMVx1NjU0OFx1NzY4NFx1OEYzOFx1NTE2NVx1NTAzQ2A7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZUVycm9yOiBlcnJvcigpXG4gICAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuLi9jb3JlL3V0aWwuanNcIjtcbmNvbnN0IGVycm9yID0gKCk9PntcbiAgICBjb25zdCBTaXphYmxlID0ge1xuICAgICAgICBzdHJpbmc6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiXHUwMEUwbWlcIixcbiAgICAgICAgICAgIHZlcmI6IFwiblx1MDBFRFwiXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IHtcbiAgICAgICAgICAgIHVuaXQ6IFwiYnl0ZXNcIixcbiAgICAgICAgICAgIHZlcmI6IFwiblx1MDBFRFwiXG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiB7XG4gICAgICAgICAgICB1bml0OiBcIm5rYW5cIixcbiAgICAgICAgICAgIHZlcmI6IFwiblx1MDBFRFwiXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgICAgdW5pdDogXCJua2FuXCIsXG4gICAgICAgICAgICB2ZXJiOiBcIm5cdTAwRURcIlxuICAgICAgICB9XG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRTaXppbmcob3JpZ2luKSB7XG4gICAgICAgIHJldHVybiBTaXphYmxlW29yaWdpbl0gPz8gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgRm9ybWF0RGljdGlvbmFyeSA9IHtcbiAgICAgICAgcmVnZXg6IFwiXHUxRUI5XHUwMzAwclx1MUVDRCBcdTAwRUNiXHUwMEUxd1x1MUVDRGxcdTAwRTlcIixcbiAgICAgICAgZW1haWw6IFwiXHUwMEUwZFx1MDBFRHJcdTFFQjlcdTAzMDFzXHUwMEVDIFx1MDBFQ21cdTFFQjlcdTAzMDFsXHUwMEVDXCIsXG4gICAgICAgIHVybDogXCJVUkxcIixcbiAgICAgICAgZW1vamk6IFwiZW1vamlcIixcbiAgICAgICAgdXVpZDogXCJVVUlEXCIsXG4gICAgICAgIHV1aWR2NDogXCJVVUlEdjRcIixcbiAgICAgICAgdXVpZHY2OiBcIlVVSUR2NlwiLFxuICAgICAgICBuYW5vaWQ6IFwibmFub2lkXCIsXG4gICAgICAgIGd1aWQ6IFwiR1VJRFwiLFxuICAgICAgICBjdWlkOiBcImN1aWRcIixcbiAgICAgICAgY3VpZDI6IFwiY3VpZDJcIixcbiAgICAgICAgdWxpZDogXCJVTElEXCIsXG4gICAgICAgIHhpZDogXCJYSURcIixcbiAgICAgICAga3N1aWQ6IFwiS1NVSURcIixcbiAgICAgICAgZGF0ZXRpbWU6IFwiXHUwMEUwa1x1MDBGM2tcdTAwRjIgSVNPXCIsXG4gICAgICAgIGRhdGU6IFwiXHUxRUNEalx1MUVDRFx1MDMwMSBJU09cIixcbiAgICAgICAgdGltZTogXCJcdTAwRTBrXHUwMEYza1x1MDBGMiBJU09cIixcbiAgICAgICAgZHVyYXRpb246IFwiXHUwMEUwa1x1MDBGM2tcdTAwRjIgdFx1MDBGMyBwXHUwMEU5IElTT1wiLFxuICAgICAgICBpcHY0OiBcIlx1MDBFMGRcdTAwRURyXHUxRUI5XHUwMzAxc1x1MDBFQyBJUHY0XCIsXG4gICAgICAgIGlwdjY6IFwiXHUwMEUwZFx1MDBFRHJcdTFFQjlcdTAzMDFzXHUwMEVDIElQdjZcIixcbiAgICAgICAgY2lkcnY0OiBcIlx1MDBFMGdiXHUwMEU4Z2JcdTAwRTggSVB2NFwiLFxuICAgICAgICBjaWRydjY6IFwiXHUwMEUwZ2JcdTAwRThnYlx1MDBFOCBJUHY2XCIsXG4gICAgICAgIGJhc2U2NDogXCJcdTFFQ0RcdTAzMDByXHUxRUNEXHUwMzAwIHRcdTAwRUQgYSBrXHUxRUNEXHUwMzAxIG5cdTAwRUQgYmFzZTY0XCIsXG4gICAgICAgIGJhc2U2NHVybDogXCJcdTFFQ0RcdTAzMDByXHUxRUNEXHUwMzAwIGJhc2U2NHVybFwiLFxuICAgICAgICBqc29uX3N0cmluZzogXCJcdTFFQ0RcdTAzMDByXHUxRUNEXHUwMzAwIEpTT05cIixcbiAgICAgICAgZTE2NDogXCJuXHUxRUNEXHUwMzAxbWJcdTAwRTAgRS4xNjRcIixcbiAgICAgICAgand0OiBcIkpXVFwiLFxuICAgICAgICB0ZW1wbGF0ZV9saXRlcmFsOiBcIlx1MUVCOVx1MDMwMHJcdTFFQ0QgXHUwMEVDYlx1MDBFMXdcdTFFQ0RsXHUwMEU5XCJcbiAgICB9O1xuICAgIGNvbnN0IFR5cGVEaWN0aW9uYXJ5ID0ge1xuICAgICAgICBuYW46IFwiTmFOXCIsXG4gICAgICAgIG51bWJlcjogXCJuXHUxRUNEXHUwMzAxbWJcdTAwRTBcIixcbiAgICAgICAgYXJyYXk6IFwiYWtvcFx1MUVDRFwiXG4gICAgfTtcbiAgICByZXR1cm4gKGlzc3VlKT0+e1xuICAgICAgICBzd2l0Y2goaXNzdWUuY29kZSl7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF90eXBlXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IFR5cGVEaWN0aW9uYXJ5W2lzc3VlLmV4cGVjdGVkXSA/PyBpc3N1ZS5leHBlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWRUeXBlID0gdXRpbC5wYXJzZWRUeXBlKGlzc3VlLmlucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjZWl2ZWQgPSBUeXBlRGljdGlvbmFyeVtyZWNlaXZlZFR5cGVdID8/IHJlY2VpdmVkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0EtWl0vLnRlc3QoaXNzdWUuZXhwZWN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDBDQ2JcdTAwRTF3XHUxRUNEbFx1MDBFOSBhXHUxRTYzXHUwMEVDXHUxRTYzZTogYSBuXHUwMEVEIGxcdTAwRTF0aSBmaSBpbnN0YW5jZW9mICR7aXNzdWUuZXhwZWN0ZWR9LCBcdTAwRTBtXHUxRUNEXHUwMzAwIGEgclx1MDBFRCAke3JlY2VpdmVkfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcdTAwQ0NiXHUwMEUxd1x1MUVDRGxcdTAwRTkgYVx1MUU2M1x1MDBFQ1x1MUU2M2U6IGEgblx1MDBFRCBsXHUwMEUxdGkgZmkgJHtleHBlY3RlZH0sIFx1MDBFMG1cdTFFQ0RcdTAzMDAgYSByXHUwMEVEICR7cmVjZWl2ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF92YWx1ZVwiOlxuICAgICAgICAgICAgICAgIGlmIChpc3N1ZS52YWx1ZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYFx1MDBDQ2JcdTAwRTF3XHUxRUNEbFx1MDBFOSBhXHUxRTYzXHUwMEVDXHUxRTYzZTogYSBuXHUwMEVEIGxcdTAwRTF0aSBmaSAke3V0aWwuc3RyaW5naWZ5UHJpbWl0aXZlKGlzc3VlLnZhbHVlc1swXSl9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFx1MDBDMFx1MUU2M1x1MDBFMHlcdTAwRTBuIGFcdTFFNjNcdTAwRUNcdTFFNjNlOiB5YW4gXHUxRUNEXHUwMzAwa2FuIGxcdTAwRTFyYSAke3V0aWwuam9pblZhbHVlcyhpc3N1ZS52YWx1ZXMsIFwifFwiKX1gO1xuICAgICAgICAgICAgY2FzZSBcInRvb19iaWdcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkaiA9IGlzc3VlLmluY2x1c2l2ZSA/IFwiPD1cIiA6IFwiPFwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXppbmcgPSBnZXRTaXppbmcoaXNzdWUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpemluZykgcmV0dXJuIGBUXHUwMEYzIHBcdTFFQ0RcdTAzMDAgalx1MDBGOTogYSBuXHUwMEVEIGxcdTAwRTF0aSBqXHUxRUI5XHUwMzAxIHBcdTAwRTkgJHtpc3N1ZS5vcmlnaW4gPz8gXCJpeWVcIn0gJHtzaXppbmcudmVyYn0gJHthZGp9JHtpc3N1ZS5tYXhpbXVtfSAke3NpemluZy51bml0fWA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgVFx1MDBGMyBwXHUxRUNEXHUwMzAwIGpcdTAwRjk6IGEgblx1MDBFRCBsXHUwMEUxdGkgalx1MUVCOVx1MDMwMSAke2Fkan0ke2lzc3VlLm1heGltdW19YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwidG9vX3NtYWxsXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGogPSBpc3N1ZS5pbmNsdXNpdmUgPyBcIj49XCIgOiBcIj5cIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6aW5nID0gZ2V0U2l6aW5nKGlzc3VlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaXppbmcpIHJldHVybiBgS1x1MDBFOXJcdTAwRTkganU6IGEgblx1MDBFRCBsXHUwMEUxdGkgalx1MUVCOVx1MDMwMSBwXHUwMEU5ICR7aXNzdWUub3JpZ2lufSAke3NpemluZy52ZXJifSAke2Fkan0ke2lzc3VlLm1pbmltdW19ICR7c2l6aW5nLnVuaXR9YDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBLXHUwMEU5clx1MDBFOSBqdTogYSBuXHUwMEVEIGxcdTAwRTF0aSBqXHUxRUI5XHUwMzAxICR7YWRqfSR7aXNzdWUubWluaW11bX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2Zvcm1hdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInN0YXJ0c193aXRoXCIpIHJldHVybiBgXHUxRUNDXHUwMzAwclx1MUVDRFx1MDMwMCBhXHUxRTYzXHUwMEVDXHUxRTYzZTogZ2JcdTFFQ0RcdTAzMDFkXHUxRUNEXHUwMzAwIGJcdTFFQjlcdTAzMDByXHUxRUI5XHUwMzAwIHBcdTFFQjlcdTAzMDBsXHUwMEZBIFwiJHtfaXNzdWUucHJlZml4fVwiYDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mb3JtYXQgPT09IFwiZW5kc193aXRoXCIpIHJldHVybiBgXHUxRUNDXHUwMzAwclx1MUVDRFx1MDMwMCBhXHUxRTYzXHUwMEVDXHUxRTYzZTogZ2JcdTFFQ0RcdTAzMDFkXHUxRUNEXHUwMzAwIHBhclx1MDBFRCBwXHUxRUI5XHUwMzAwbFx1MDBGQSBcIiR7X2lzc3VlLnN1ZmZpeH1cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcImluY2x1ZGVzXCIpIHJldHVybiBgXHUxRUNDXHUwMzAwclx1MUVDRFx1MDMwMCBhXHUxRTYzXHUwMEVDXHUxRTYzZTogZ2JcdTFFQ0RcdTAzMDFkXHUxRUNEXHUwMzAwIG5cdTAwRUQgXCIke19pc3N1ZS5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXNzdWUuZm9ybWF0ID09PSBcInJlZ2V4XCIpIHJldHVybiBgXHUxRUNDXHUwMzAwclx1MUVDRFx1MDMwMCBhXHUxRTYzXHUwMEVDXHUxRTYzZTogZ2JcdTFFQ0RcdTAzMDFkXHUxRUNEXHUwMzAwIGJcdTAwRTEgXHUwMEUwcFx1MUVCOVx1MUVCOXJcdTFFQjkgbXUgJHtfaXNzdWUucGF0dGVybn1gO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEFcdTFFNjNcdTAwRUNcdTFFNjNlOiAke0Zvcm1hdERpY3Rpb25hcnlbX2lzc3VlLmZvcm1hdF0gPz8gaXNzdWUuZm9ybWF0fWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIm5vdF9tdWx0aXBsZV9vZlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgTlx1MUVDRFx1MDMwMW1iXHUwMEUwIGFcdTFFNjNcdTAwRUNcdTFFNjNlOiBnYlx1MUVDRFx1MDMwMWRcdTFFQ0RcdTAzMDAgalx1MUVCOVx1MDMwMSBcdTAwRTh5XHUwMEUwIHBcdTAwRURwXHUwMEVEbiB0aSAke2lzc3VlLmRpdmlzb3J9YDtcbiAgICAgICAgICAgIGNhc2UgXCJ1bnJlY29nbml6ZWRfa2V5c1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQlx1MUVDRHRcdTAwRUNuXHUwMEVDIFx1MDBFMFx1MDBFQ21cdTFFQ0RcdTAzMDA6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGNhc2UgXCJpbnZhbGlkX2tleVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQlx1MUVDRHRcdTAwRUNuXHUwMEVDIGFcdTFFNjNcdTAwRUNcdTFFNjNlIG5cdTAwRURuXHUwMEZBICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBjYXNlIFwiaW52YWxpZF91bmlvblwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlx1MDBDQ2JcdTAwRTF3XHUxRUNEbFx1MDBFOSBhXHUxRTYzXHUwMEVDXHUxRTYzZVwiO1xuICAgICAgICAgICAgY2FzZSBcImludmFsaWRfZWxlbWVudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgSXllIGFcdTFFNjNcdTAwRUNcdTFFNjNlIG5cdTAwRURuXHUwMEZBICR7aXNzdWUub3JpZ2lufWA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlx1MDBDQ2JcdTAwRTF3XHUxRUNEbFx1MDBFOSBhXHUxRTYzXHUwMEVDXHUxRTYzZVwiO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsb2NhbGVFcnJvcjogZXJyb3IoKVxuICAgIH07XG59XG4iLCAidmFyIF9hO1xuZXhwb3J0IGNvbnN0ICRvdXRwdXQgPSBTeW1ib2woXCJab2RPdXRwdXRcIik7XG5leHBvcnQgY29uc3QgJGlucHV0ID0gU3ltYm9sKFwiWm9kSW5wdXRcIik7XG5leHBvcnQgY2xhc3MgJFpvZFJlZ2lzdHJ5IHtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLl9tYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICB0aGlzLl9pZG1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgYWRkKHNjaGVtYSwgLi4uX21ldGEpIHtcbiAgICAgICAgY29uc3QgbWV0YSA9IF9tZXRhWzBdO1xuICAgICAgICB0aGlzLl9tYXAuc2V0KHNjaGVtYSwgbWV0YSk7XG4gICAgICAgIGlmIChtZXRhICYmIHR5cGVvZiBtZXRhID09PSBcIm9iamVjdFwiICYmIFwiaWRcIiBpbiBtZXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9pZG1hcC5zZXQobWV0YS5pZCwgc2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgIHRoaXMuX2lkbWFwID0gbmV3IE1hcCgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgcmVtb3ZlKHNjaGVtYSkge1xuICAgICAgICBjb25zdCBtZXRhID0gdGhpcy5fbWFwLmdldChzY2hlbWEpO1xuICAgICAgICBpZiAobWV0YSAmJiB0eXBlb2YgbWV0YSA9PT0gXCJvYmplY3RcIiAmJiBcImlkXCIgaW4gbWV0YSkge1xuICAgICAgICAgICAgdGhpcy5faWRtYXAuZGVsZXRlKG1ldGEuaWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21hcC5kZWxldGUoc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldChzY2hlbWEpIHtcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMuX21hcC5nZXQoc2NoZW1hKSBhcyBhbnk7XG4gICAgICAgIC8vIGluaGVyaXQgbWV0YWRhdGFcbiAgICAgICAgY29uc3QgcCA9IHNjaGVtYS5fem9kLnBhcmVudDtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAgIGNvbnN0IHBtID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0KHApID8/IHt9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGVsZXRlIHBtLmlkOyAvLyBkbyBub3QgaW5oZXJpdCBpZFxuICAgICAgICAgICAgY29uc3QgZiA9IHtcbiAgICAgICAgICAgICAgICAuLi5wbSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9tYXAuZ2V0KHNjaGVtYSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZikubGVuZ3RoID8gZiA6IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbWFwLmdldChzY2hlbWEpO1xuICAgIH1cbiAgICBoYXMoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAuaGFzKHNjaGVtYSk7XG4gICAgfVxufVxuLy8gcmVnaXN0cmllc1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdHJ5KCkge1xuICAgIHJldHVybiBuZXcgJFpvZFJlZ2lzdHJ5KCk7XG59XG4oX2EgPSBnbG9iYWxUaGlzKS5fX3pvZF9nbG9iYWxSZWdpc3RyeSA/PyAoX2EuX196b2RfZ2xvYmFsUmVnaXN0cnkgPSByZWdpc3RyeSgpKTtcbmV4cG9ydCBjb25zdCBnbG9iYWxSZWdpc3RyeSA9IGdsb2JhbFRoaXMuX196b2RfZ2xvYmFsUmVnaXN0cnk7XG4iLCAiaW1wb3J0ICogYXMgY2hlY2tzIGZyb20gXCIuL2NoZWNrcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVnaXN0cmllcyBmcm9tIFwiLi9yZWdpc3RyaWVzLmpzXCI7XG5pbXBvcnQgKiBhcyBzY2hlbWFzIGZyb20gXCIuL3NjaGVtYXMuanNcIjtcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4vdXRpbC5qc1wiO1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc3RyaW5nKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZFN0cmluZyhDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGNvZXJjZTogdHJ1ZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZW1haWwoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZW1haWxcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2d1aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZ3VpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdXVpZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ1dWlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91dWlkdjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidXVpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgdmVyc2lvbjogXCJ2NFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91dWlkdjYoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidXVpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgdmVyc2lvbjogXCJ2NlwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91dWlkdjcoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidXVpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgdmVyc2lvbjogXCJ2N1wiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91cmwoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidXJsXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9lbW9qaShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJlbW9qaVwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbmFub2lkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcIm5hbm9pZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY3VpZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJjdWlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jdWlkMihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJjdWlkMlwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdWxpZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ1bGlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF94aWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwieGlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9rc3VpZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJrc3VpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaXB2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJpcHY0XCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pcHY2KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImlwdjZcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX21hYyhDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJtYWNcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NpZHJ2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJjaWRydjRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NpZHJ2NihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJjaWRydjZcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2Jhc2U2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJiYXNlNjRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2Jhc2U2NHVybChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJiYXNlNjR1cmxcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2UxNjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZTE2NFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfand0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImp3dFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFRpbWVQcmVjaXNpb24gPSB7XG4gICAgQW55OiBudWxsLFxuICAgIE1pbnV0ZTogLTEsXG4gICAgU2Vjb25kOiAwLFxuICAgIE1pbGxpc2Vjb25kOiAzLFxuICAgIE1pY3Jvc2Vjb25kOiA2XG59O1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaXNvRGF0ZVRpbWUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBvZmZzZXQ6IGZhbHNlLFxuICAgICAgICBsb2NhbDogZmFsc2UsXG4gICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaXNvRGF0ZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJkYXRlXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaXNvVGltZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ0aW1lXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgcHJlY2lzaW9uOiBudWxsLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pc29EdXJhdGlvbihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJkdXJhdGlvblwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX251bWJlcihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2NvZXJjZWROdW1iZXIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjb2VyY2U6IHRydWUsXG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ludChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwic2FmZWludFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9mbG9hdDMyKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgY2hlY2s6IFwibnVtYmVyX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIGZvcm1hdDogXCJmbG9hdDMyXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2Zsb2F0NjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjaGVjazogXCJudW1iZXJfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgZm9ybWF0OiBcImZsb2F0NjRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaW50MzIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICBjaGVjazogXCJudW1iZXJfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgZm9ybWF0OiBcImludDMyXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3VpbnQzMihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwidWludDMyXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2Jvb2xlYW4oQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZEJvb2xlYW4oQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9iaWdpbnQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jb2VyY2VkQmlnaW50KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJiaWdpbnRcIixcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pbnQ2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgIGNoZWNrOiBcImJpZ2ludF9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwiaW50NjRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdWludDY0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJiaWdpbnRcIixcbiAgICAgICAgY2hlY2s6IFwiYmlnaW50X2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIGZvcm1hdDogXCJ1aW50NjRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc3ltYm9sKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzeW1ib2xcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5kZWZpbmVkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ1bmRlZmluZWRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbnVsbChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVsbFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9hbnkoQ2xhc3MpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJhbnlcIlxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5rbm93bihDbGFzcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInVua25vd25cIlxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbmV2ZXIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm5ldmVyXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3ZvaWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInZvaWRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZGF0ZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jb2VyY2VkRGF0ZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICBjb2VyY2U6IHRydWUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25hbihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibmFuXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2x0KHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tMZXNzVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImxlc3NfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbHRlKHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tMZXNzVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImxlc3NfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiB0cnVlXG4gICAgfSk7XG59XG5leHBvcnQgeyAvKiogQGRlcHJlY2F0ZWQgVXNlIGB6Lmx0ZSgpYCBpbnN0ZWFkLiAqLyBfbHRlIGFzIF9tYXggfTtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2d0KHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tHcmVhdGVyVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImdyZWF0ZXJfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiBmYWxzZVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZ3RlKHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tHcmVhdGVyVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImdyZWF0ZXJfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiB0cnVlXG4gICAgfSk7XG59XG5leHBvcnQgeyAvKiogQGRlcHJlY2F0ZWQgVXNlIGB6Lmd0ZSgpYCBpbnN0ZWFkLiAqLyBfZ3RlIGFzIF9taW4gfTtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3Bvc2l0aXZlKHBhcmFtcykge1xuICAgIHJldHVybiBfZ3QoMCwgcGFyYW1zKTtcbn1cbi8vIG5lZ2F0aXZlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9uZWdhdGl2ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gX2x0KDAsIHBhcmFtcyk7XG59XG4vLyBub25wb3NpdGl2ZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbm9ucG9zaXRpdmUocGFyYW1zKSB7XG4gICAgcmV0dXJuIF9sdGUoMCwgcGFyYW1zKTtcbn1cbi8vIG5vbm5lZ2F0aXZlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9ub25uZWdhdGl2ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gX2d0ZSgwLCBwYXJhbXMpO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTXVsdGlwbGVPZih7XG4gICAgICAgIGNoZWNrOiBcIm11bHRpcGxlX29mXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHZhbHVlXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9tYXhTaXplKG1heGltdW0sIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja01heFNpemUoe1xuICAgICAgICBjaGVjazogXCJtYXhfc2l6ZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBtYXhpbXVtXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9taW5TaXplKG1pbmltdW0sIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja01pblNpemUoe1xuICAgICAgICBjaGVjazogXCJtaW5fc2l6ZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBtaW5pbXVtXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zaXplKHNpemUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja1NpemVFcXVhbHMoe1xuICAgICAgICBjaGVjazogXCJzaXplX2VxdWFsc1wiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBzaXplXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9tYXhMZW5ndGgobWF4aW11bSwgcGFyYW1zKSB7XG4gICAgY29uc3QgY2ggPSBuZXcgY2hlY2tzLiRab2RDaGVja01heExlbmd0aCh7XG4gICAgICAgIGNoZWNrOiBcIm1heF9sZW5ndGhcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbWF4aW11bVxuICAgIH0pO1xuICAgIHJldHVybiBjaDtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX21pbkxlbmd0aChtaW5pbXVtLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tNaW5MZW5ndGgoe1xuICAgICAgICBjaGVjazogXCJtaW5fbGVuZ3RoXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIG1pbmltdW1cbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2xlbmd0aChsZW5ndGgsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0xlbmd0aEVxdWFscyh7XG4gICAgICAgIGNoZWNrOiBcImxlbmd0aF9lcXVhbHNcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbGVuZ3RoXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9yZWdleChwYXR0ZXJuLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tSZWdleCh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcInJlZ2V4XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHBhdHRlcm5cbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2xvd2VyY2FzZShwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tMb3dlckNhc2Uoe1xuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGZvcm1hdDogXCJsb3dlcmNhc2VcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdXBwZXJjYXNlKHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja1VwcGVyQ2FzZSh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcInVwcGVyY2FzZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pbmNsdWRlcyhpbmNsdWRlcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrSW5jbHVkZXMoe1xuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGZvcm1hdDogXCJpbmNsdWRlc1wiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBpbmNsdWRlc1xuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc3RhcnRzV2l0aChwcmVmaXgsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja1N0YXJ0c1dpdGgoe1xuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGZvcm1hdDogXCJzdGFydHNfd2l0aFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBwcmVmaXhcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2VuZHNXaXRoKHN1ZmZpeCwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrRW5kc1dpdGgoe1xuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGZvcm1hdDogXCJlbmRzX3dpdGhcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgc3VmZml4XG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9wcm9wZXJ0eShwcm9wZXJ0eSwgc2NoZW1hLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tQcm9wZXJ0eSh7XG4gICAgICAgIGNoZWNrOiBcInByb3BlcnR5XCIsXG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX21pbWUodHlwZXMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja01pbWVUeXBlKHtcbiAgICAgICAgY2hlY2s6IFwibWltZV90eXBlXCIsXG4gICAgICAgIG1pbWU6IHR5cGVzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9vdmVyd3JpdGUodHgpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tPdmVyd3JpdGUoe1xuICAgICAgICBjaGVjazogXCJvdmVyd3JpdGVcIixcbiAgICAgICAgdHhcbiAgICB9KTtcbn1cbi8vIG5vcm1hbGl6ZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbm9ybWFsaXplKGZvcm0pIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpPT5pbnB1dC5ub3JtYWxpemUoZm9ybSkpO1xufVxuLy8gdHJpbVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdHJpbSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpPT5pbnB1dC50cmltKCkpO1xufVxuLy8gdG9Mb3dlckNhc2Vcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3RvTG93ZXJDYXNlKCkge1xuICAgIHJldHVybiBfb3ZlcndyaXRlKChpbnB1dCk9PmlucHV0LnRvTG93ZXJDYXNlKCkpO1xufVxuLy8gdG9VcHBlckNhc2Vcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3RvVXBwZXJDYXNlKCkge1xuICAgIHJldHVybiBfb3ZlcndyaXRlKChpbnB1dCk9PmlucHV0LnRvVXBwZXJDYXNlKCkpO1xufVxuLy8gc2x1Z2lmeVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc2x1Z2lmeSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpPT51dGlsLnNsdWdpZnkoaW5wdXQpKTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2FycmF5KENsYXNzLCBlbGVtZW50LCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICAvLyBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgLy8gICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgLy8gfSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdW5pb24oQ2xhc3MsIG9wdGlvbnMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfeG9yKENsYXNzLCBvcHRpb25zLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ1bmlvblwiLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9kaXNjcmltaW5hdGVkVW5pb24oQ2xhc3MsIGRpc2NyaW1pbmF0b3IsIG9wdGlvbnMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIGRpc2NyaW1pbmF0b3IsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ludGVyc2VjdGlvbihDbGFzcywgbGVmdCwgcmlnaHQpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgbGVmdCxcbiAgICAgICAgcmlnaHRcbiAgICB9KTtcbn1cbi8vIGV4cG9ydCBmdW5jdGlvbiBfdHVwbGUoXG4vLyAgIENsYXNzOiB1dGlsLlNjaGVtYUNsYXNzPHNjaGVtYXMuJFpvZFR1cGxlPixcbi8vICAgaXRlbXM6IFtdLFxuLy8gICBwYXJhbXM/OiBzdHJpbmcgfCAkWm9kVHVwbGVQYXJhbXNcbi8vICk6IHNjaGVtYXMuJFpvZFR1cGxlPFtdLCBudWxsPjtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3R1cGxlKENsYXNzLCBpdGVtcywgX3BhcmFtc09yUmVzdCwgX3BhcmFtcykge1xuICAgIGNvbnN0IGhhc1Jlc3QgPSBfcGFyYW1zT3JSZXN0IGluc3RhbmNlb2Ygc2NoZW1hcy4kWm9kVHlwZTtcbiAgICBjb25zdCBwYXJhbXMgPSBoYXNSZXN0ID8gX3BhcmFtcyA6IF9wYXJhbXNPclJlc3Q7XG4gICAgY29uc3QgcmVzdCA9IGhhc1Jlc3QgPyBfcGFyYW1zT3JSZXN0IDogbnVsbDtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ0dXBsZVwiLFxuICAgICAgICBpdGVtcyxcbiAgICAgICAgcmVzdCxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcmVjb3JkKENsYXNzLCBrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInJlY29yZFwiLFxuICAgICAgICBrZXlUeXBlLFxuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX21hcChDbGFzcywga2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdmFsdWVUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zZXQoQ2xhc3MsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZW51bShDbGFzcywgdmFsdWVzLCBwYXJhbXMpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gQXJyYXkuaXNBcnJheSh2YWx1ZXMpID8gT2JqZWN0LmZyb21FbnRyaWVzKHZhbHVlcy5tYXAoKHYpPT5bXG4gICAgICAgICAgICB2LFxuICAgICAgICAgICAgdlxuICAgICAgICBdKSkgOiB2YWx1ZXM7XG4gICAgLy8gaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgIC8vICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAvLyAgICAgZW50cmllc1t2YWx1ZV0gPSB2YWx1ZTtcbiAgICAvLyAgIH1cbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgT2JqZWN0LmFzc2lnbihlbnRyaWVzLCB2YWx1ZXMpO1xuICAgIC8vIH1cbiAgICAvLyBjb25zdCBlbnRyaWVzOiB1dGlsLkVudW1MaWtlID0ge307XG4gICAgLy8gZm9yIChjb25zdCB2YWwgb2YgdmFsdWVzKSB7XG4gICAgLy8gICBlbnRyaWVzW3ZhbF0gPSB2YWw7XG4gICAgLy8gfVxuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImVudW1cIixcbiAgICAgICAgZW50cmllcyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbi8qKiBAZGVwcmVjYXRlZCBUaGlzIEFQSSBoYXMgYmVlbiBtZXJnZWQgaW50byBgei5lbnVtKClgLiBVc2UgYHouZW51bSgpYCBpbnN0ZWFkLlxuICpcbiAqIGBgYHRzXG4gKiBlbnVtIENvbG9ycyB7IHJlZCwgZ3JlZW4sIGJsdWUgfVxuICogei5lbnVtKENvbG9ycyk7XG4gKiBgYGBcbiAqLyBleHBvcnQgZnVuY3Rpb24gX25hdGl2ZUVudW0oQ2xhc3MsIGVudHJpZXMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImVudW1cIixcbiAgICAgICAgZW50cmllcyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbGl0ZXJhbChDbGFzcywgdmFsdWUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImxpdGVyYWxcIixcbiAgICAgICAgdmFsdWVzOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW1xuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgXSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZmlsZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90cmFuc2Zvcm0oQ2xhc3MsIGZuKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidHJhbnNmb3JtXCIsXG4gICAgICAgIHRyYW5zZm9ybTogZm5cbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX29wdGlvbmFsKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJvcHRpb25hbFwiLFxuICAgICAgICBpbm5lclR5cGVcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX251bGxhYmxlKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJudWxsYWJsZVwiLFxuICAgICAgICBpbm5lclR5cGVcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2RlZmF1bHQoQ2xhc3MsIGlubmVyVHlwZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZGVmYXVsdFwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IGRlZmF1bHRWYWx1ZSgpIDogdXRpbC5zaGFsbG93Q2xvbmUoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbm9ub3B0aW9uYWwoQ2xhc3MsIGlubmVyVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibm9ub3B0aW9uYWxcIixcbiAgICAgICAgaW5uZXJUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdWNjZXNzKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICAgIGlubmVyVHlwZVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY2F0Y2goQ2xhc3MsIGlubmVyVHlwZSwgY2F0Y2hWYWx1ZSkge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImNhdGNoXCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICAgICAgY2F0Y2hWYWx1ZTogdHlwZW9mIGNhdGNoVmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IGNhdGNoVmFsdWUgOiAoKT0+Y2F0Y2hWYWx1ZVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcGlwZShDbGFzcywgaW5fLCBvdXQpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJwaXBlXCIsXG4gICAgICAgIGluOiBpbl8sXG4gICAgICAgIG91dFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcmVhZG9ubHkoQ2xhc3MsIGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInJlYWRvbmx5XCIsXG4gICAgICAgIGlubmVyVHlwZVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdGVtcGxhdGVMaXRlcmFsKENsYXNzLCBwYXJ0cywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidGVtcGxhdGVfbGl0ZXJhbFwiLFxuICAgICAgICBwYXJ0cyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbGF6eShDbGFzcywgZ2V0dGVyKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibGF6eVwiLFxuICAgICAgICBnZXR0ZXJcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3Byb21pc2UoQ2xhc3MsIGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInByb21pc2VcIixcbiAgICAgICAgaW5uZXJUeXBlXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jdXN0b20oQ2xhc3MsIGZuLCBfcGFyYW1zKSB7XG4gICAgY29uc3Qgbm9ybSA9IHV0aWwubm9ybWFsaXplUGFyYW1zKF9wYXJhbXMpO1xuICAgIG5vcm0uYWJvcnQgPz8gKG5vcm0uYWJvcnQgPSB0cnVlKTsgLy8gZGVmYXVsdCB0byBhYm9ydDpmYWxzZVxuICAgIGNvbnN0IHNjaGVtYSA9IG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIGNoZWNrOiBcImN1c3RvbVwiLFxuICAgICAgICBmbjogZm4sXG4gICAgICAgIC4uLm5vcm1cbiAgICB9KTtcbiAgICByZXR1cm4gc2NoZW1hO1xufVxuLy8gc2FtZSBhcyBfY3VzdG9tIGJ1dCBkZWZhdWx0cyB0byBhYm9ydDpmYWxzZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcmVmaW5lKENsYXNzLCBmbiwgX3BhcmFtcykge1xuICAgIGNvbnN0IHNjaGVtYSA9IG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiY3VzdG9tXCIsXG4gICAgICAgIGNoZWNrOiBcImN1c3RvbVwiLFxuICAgICAgICBmbjogZm4sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKF9wYXJhbXMpXG4gICAgfSk7XG4gICAgcmV0dXJuIHNjaGVtYTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3N1cGVyUmVmaW5lKGZuKSB7XG4gICAgY29uc3QgY2ggPSBfY2hlY2soKHBheWxvYWQpPT57XG4gICAgICAgIHBheWxvYWQuYWRkSXNzdWUgPSAoaXNzdWUpPT57XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlzc3VlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh1dGlsLmlzc3VlKGlzc3VlLCBwYXlsb2FkLnZhbHVlLCBjaC5fem9kLmRlZikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBmb3IgWm9kIDMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZhdGFsKSBfaXNzdWUuY29udGludWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBfaXNzdWUuY29kZSA/PyAoX2lzc3VlLmNvZGUgPSBcImN1c3RvbVwiKTtcbiAgICAgICAgICAgICAgICBfaXNzdWUuaW5wdXQgPz8gKF9pc3N1ZS5pbnB1dCA9IHBheWxvYWQudmFsdWUpO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5pbnN0ID8/IChfaXNzdWUuaW5zdCA9IGNoKTtcbiAgICAgICAgICAgICAgICBfaXNzdWUuY29udGludWUgPz8gKF9pc3N1ZS5jb250aW51ZSA9ICFjaC5fem9kLmRlZi5hYm9ydCk7IC8vIGFib3J0IGlzIGFsd2F5cyB1bmRlZmluZWQsIHNvIHRoaXMgaXMgYWx3YXlzIHRydWUuLi5cbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHV0aWwuaXNzdWUoX2lzc3VlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmbihwYXlsb2FkLnZhbHVlLCBwYXlsb2FkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY2g7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jaGVjayhmbiwgcGFyYW1zKSB7XG4gICAgY29uc3QgY2ggPSBuZXcgY2hlY2tzLiRab2RDaGVjayh7XG4gICAgICAgIGNoZWNrOiBcImN1c3RvbVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG4gICAgY2guX3pvZC5jaGVjayA9IGZuO1xuICAgIHJldHVybiBjaDtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmUoZGVzY3JpcHRpb24pIHtcbiAgICBjb25zdCBjaCA9IG5ldyBjaGVja3MuJFpvZENoZWNrKHtcbiAgICAgICAgY2hlY2s6IFwiZGVzY3JpYmVcIlxuICAgIH0pO1xuICAgIGNoLl96b2Qub25hdHRhY2ggPSBbXG4gICAgICAgIChpbnN0KT0+e1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSByZWdpc3RyaWVzLmdsb2JhbFJlZ2lzdHJ5LmdldChpbnN0KSA/PyB7fTtcbiAgICAgICAgICAgIHJlZ2lzdHJpZXMuZ2xvYmFsUmVnaXN0cnkuYWRkKGluc3QsIHtcbiAgICAgICAgICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICBdO1xuICAgIGNoLl96b2QuY2hlY2sgPSAoKT0+e307IC8vIG5vLW9wIGNoZWNrXG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBtZXRhKG1ldGFkYXRhKSB7XG4gICAgY29uc3QgY2ggPSBuZXcgY2hlY2tzLiRab2RDaGVjayh7XG4gICAgICAgIGNoZWNrOiBcIm1ldGFcIlxuICAgIH0pO1xuICAgIGNoLl96b2Qub25hdHRhY2ggPSBbXG4gICAgICAgIChpbnN0KT0+e1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSByZWdpc3RyaWVzLmdsb2JhbFJlZ2lzdHJ5LmdldChpbnN0KSA/PyB7fTtcbiAgICAgICAgICAgIHJlZ2lzdHJpZXMuZ2xvYmFsUmVnaXN0cnkuYWRkKGluc3QsIHtcbiAgICAgICAgICAgICAgICAuLi5leGlzdGluZyxcbiAgICAgICAgICAgICAgICAuLi5tZXRhZGF0YVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICBdO1xuICAgIGNoLl96b2QuY2hlY2sgPSAoKT0+e307IC8vIG5vLW9wIGNoZWNrXG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc3RyaW5nYm9vbChDbGFzc2VzLCBfcGFyYW1zKSB7XG4gICAgY29uc3QgcGFyYW1zID0gdXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyk7XG4gICAgbGV0IHRydXRoeUFycmF5ID0gcGFyYW1zLnRydXRoeSA/PyBbXG4gICAgICAgIFwidHJ1ZVwiLFxuICAgICAgICBcIjFcIixcbiAgICAgICAgXCJ5ZXNcIixcbiAgICAgICAgXCJvblwiLFxuICAgICAgICBcInlcIixcbiAgICAgICAgXCJlbmFibGVkXCJcbiAgICBdO1xuICAgIGxldCBmYWxzeUFycmF5ID0gcGFyYW1zLmZhbHN5ID8/IFtcbiAgICAgICAgXCJmYWxzZVwiLFxuICAgICAgICBcIjBcIixcbiAgICAgICAgXCJub1wiLFxuICAgICAgICBcIm9mZlwiLFxuICAgICAgICBcIm5cIixcbiAgICAgICAgXCJkaXNhYmxlZFwiXG4gICAgXTtcbiAgICBpZiAocGFyYW1zLmNhc2UgIT09IFwic2Vuc2l0aXZlXCIpIHtcbiAgICAgICAgdHJ1dGh5QXJyYXkgPSB0cnV0aHlBcnJheS5tYXAoKHYpPT50eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiA/IHYudG9Mb3dlckNhc2UoKSA6IHYpO1xuICAgICAgICBmYWxzeUFycmF5ID0gZmFsc3lBcnJheS5tYXAoKHYpPT50eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiA/IHYudG9Mb3dlckNhc2UoKSA6IHYpO1xuICAgIH1cbiAgICBjb25zdCB0cnV0aHlTZXQgPSBuZXcgU2V0KHRydXRoeUFycmF5KTtcbiAgICBjb25zdCBmYWxzeVNldCA9IG5ldyBTZXQoZmFsc3lBcnJheSk7XG4gICAgY29uc3QgX0NvZGVjID0gQ2xhc3Nlcy5Db2RlYyA/PyBzY2hlbWFzLiRab2RDb2RlYztcbiAgICBjb25zdCBfQm9vbGVhbiA9IENsYXNzZXMuQm9vbGVhbiA/PyBzY2hlbWFzLiRab2RCb29sZWFuO1xuICAgIGNvbnN0IF9TdHJpbmcgPSBDbGFzc2VzLlN0cmluZyA/PyBzY2hlbWFzLiRab2RTdHJpbmc7XG4gICAgY29uc3Qgc3RyaW5nU2NoZW1hID0gbmV3IF9TdHJpbmcoe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBlcnJvcjogcGFyYW1zLmVycm9yXG4gICAgfSk7XG4gICAgY29uc3QgYm9vbGVhblNjaGVtYSA9IG5ldyBfQm9vbGVhbih7XG4gICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICBlcnJvcjogcGFyYW1zLmVycm9yXG4gICAgfSk7XG4gICAgY29uc3QgY29kZWMgPSBuZXcgX0NvZGVjKHtcbiAgICAgICAgdHlwZTogXCJwaXBlXCIsXG4gICAgICAgIGluOiBzdHJpbmdTY2hlbWEsXG4gICAgICAgIG91dDogYm9vbGVhblNjaGVtYSxcbiAgICAgICAgdHJhbnNmb3JtOiAoaW5wdXQsIHBheWxvYWQpPT57XG4gICAgICAgICAgICBsZXQgZGF0YSA9IGlucHV0O1xuICAgICAgICAgICAgaWYgKHBhcmFtcy5jYXNlICE9PSBcInNlbnNpdGl2ZVwiKSBkYXRhID0gZGF0YS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKHRydXRoeVNldC5oYXMoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmFsc3lTZXQuaGFzKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3ZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcInN0cmluZ2Jvb2xcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50cnV0aHlTZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5mYWxzeVNldFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5zdDogY29kZWMsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmV2ZXJzZVRyYW5zZm9ybTogKGlucHV0LCBfcGF5bG9hZCk9PntcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnV0aHlBcnJheVswXSB8fCBcInRydWVcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHN5QXJyYXlbMF0gfHwgXCJmYWxzZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcGFyYW1zLmVycm9yXG4gICAgfSk7XG4gICAgcmV0dXJuIGNvZGVjO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc3RyaW5nRm9ybWF0KENsYXNzLCBmb3JtYXQsIGZuT3JSZWdleCwgX3BhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgcGFyYW1zID0gdXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyk7XG4gICAgY29uc3QgZGVmID0ge1xuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhfcGFyYW1zKSxcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQsXG4gICAgICAgIGZuOiB0eXBlb2YgZm5PclJlZ2V4ID09PSBcImZ1bmN0aW9uXCIgPyBmbk9yUmVnZXggOiAodmFsKT0+Zm5PclJlZ2V4LnRlc3QodmFsKSxcbiAgICAgICAgLi4ucGFyYW1zXG4gICAgfTtcbiAgICBpZiAoZm5PclJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIGRlZi5wYXR0ZXJuID0gZm5PclJlZ2V4O1xuICAgIH1cbiAgICBjb25zdCBpbnN0ID0gbmV3IENsYXNzKGRlZik7XG4gICAgcmV0dXJuIGluc3Q7XG59XG4iLCAiaW1wb3J0IHsgZ2xvYmFsUmVnaXN0cnkgfSBmcm9tIFwiLi9yZWdpc3RyaWVzLmpzXCI7XG4vLyBmdW5jdGlvbiBpbml0aWFsaXplQ29udGV4dDxUIGV4dGVuZHMgc2NoZW1hcy4kWm9kVHlwZT4oaW5wdXRzOiBKU09OU2NoZW1hR2VuZXJhdG9yUGFyYW1zPFQ+KTogVG9KU09OU2NoZW1hQ29udGV4dDxUPiB7XG4vLyAgIHJldHVybiB7XG4vLyAgICAgcHJvY2Vzc29yOiBpbnB1dHMucHJvY2Vzc29yLFxuLy8gICAgIG1ldGFkYXRhUmVnaXN0cnk6IGlucHV0cy5tZXRhZGF0YSA/PyBnbG9iYWxSZWdpc3RyeSxcbi8vICAgICB0YXJnZXQ6IGlucHV0cy50YXJnZXQgPz8gXCJkcmFmdC0yMDIwLTEyXCIsXG4vLyAgICAgdW5yZXByZXNlbnRhYmxlOiBpbnB1dHMudW5yZXByZXNlbnRhYmxlID8/IFwidGhyb3dcIixcbi8vICAgfTtcbi8vIH1cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQ29udGV4dChwYXJhbXMpIHtcbiAgICAvLyBOb3JtYWxpemUgdGFyZ2V0OiBjb252ZXJ0IG9sZCBub24taHlwaGVuYXRlZCB2ZXJzaW9ucyB0byBoeXBoZW5hdGVkIHZlcnNpb25zXG4gICAgbGV0IHRhcmdldCA9IHBhcmFtcz8udGFyZ2V0ID8/IFwiZHJhZnQtMjAyMC0xMlwiO1xuICAgIGlmICh0YXJnZXQgPT09IFwiZHJhZnQtNFwiKSB0YXJnZXQgPSBcImRyYWZ0LTA0XCI7XG4gICAgaWYgKHRhcmdldCA9PT0gXCJkcmFmdC03XCIpIHRhcmdldCA9IFwiZHJhZnQtMDdcIjtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm9jZXNzb3JzOiBwYXJhbXMucHJvY2Vzc29ycyA/PyB7fSxcbiAgICAgICAgbWV0YWRhdGFSZWdpc3RyeTogcGFyYW1zPy5tZXRhZGF0YSA/PyBnbG9iYWxSZWdpc3RyeSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICB1bnJlcHJlc2VudGFibGU6IHBhcmFtcz8udW5yZXByZXNlbnRhYmxlID8/IFwidGhyb3dcIixcbiAgICAgICAgb3ZlcnJpZGU6IHBhcmFtcz8ub3ZlcnJpZGUgPz8gKCgpPT57fSksXG4gICAgICAgIGlvOiBwYXJhbXM/LmlvID8/IFwib3V0cHV0XCIsXG4gICAgICAgIGNvdW50ZXI6IDAsXG4gICAgICAgIHNlZW46IG5ldyBNYXAoKSxcbiAgICAgICAgY3ljbGVzOiBwYXJhbXM/LmN5Y2xlcyA/PyBcInJlZlwiLFxuICAgICAgICByZXVzZWQ6IHBhcmFtcz8ucmV1c2VkID8/IFwiaW5saW5lXCIsXG4gICAgICAgIGV4dGVybmFsOiBwYXJhbXM/LmV4dGVybmFsID8/IHVuZGVmaW5lZFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvY2VzcyhzY2hlbWEsIGN0eCwgX3BhcmFtcyA9IHtcbiAgICBwYXRoOiBbXSxcbiAgICBzY2hlbWFQYXRoOiBbXVxufSkge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgLy8gY2hlY2sgZm9yIHNjaGVtYSBpbiBzZWVuc1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBpZiAoc2Vlbikge1xuICAgICAgICBzZWVuLmNvdW50Kys7XG4gICAgICAgIC8vIGNoZWNrIGlmIGN5Y2xlXG4gICAgICAgIGNvbnN0IGlzQ3ljbGUgPSBfcGFyYW1zLnNjaGVtYVBhdGguaW5jbHVkZXMoc2NoZW1hKTtcbiAgICAgICAgaWYgKGlzQ3ljbGUpIHtcbiAgICAgICAgICAgIHNlZW4uY3ljbGUgPSBfcGFyYW1zLnBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlZW4uc2NoZW1hO1xuICAgIH1cbiAgICAvLyBpbml0aWFsaXplXG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICBzY2hlbWE6IHt9LFxuICAgICAgICBjb3VudDogMSxcbiAgICAgICAgY3ljbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgcGF0aDogX3BhcmFtcy5wYXRoXG4gICAgfTtcbiAgICBjdHguc2Vlbi5zZXQoc2NoZW1hLCByZXN1bHQpO1xuICAgIC8vIGN1c3RvbSBtZXRob2Qgb3ZlcnJpZGVzIGRlZmF1bHQgYmVoYXZpb3JcbiAgICBjb25zdCBvdmVycmlkZVNjaGVtYSA9IHNjaGVtYS5fem9kLnRvSlNPTlNjaGVtYT8uKCk7XG4gICAgaWYgKG92ZXJyaWRlU2NoZW1hKSB7XG4gICAgICAgIHJlc3VsdC5zY2hlbWEgPSBvdmVycmlkZVNjaGVtYTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICAgICAgICAuLi5fcGFyYW1zLFxuICAgICAgICAgICAgc2NoZW1hUGF0aDogW1xuICAgICAgICAgICAgICAgIC4uLl9wYXJhbXMuc2NoZW1hUGF0aCxcbiAgICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwYXRoOiBfcGFyYW1zLnBhdGhcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNjaGVtYS5fem9kLnByb2Nlc3NKU09OU2NoZW1hKSB7XG4gICAgICAgICAgICBzY2hlbWEuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYShjdHgsIHJlc3VsdC5zY2hlbWEsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBfanNvbiA9IHJlc3VsdC5zY2hlbWE7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBjdHgucHJvY2Vzc29yc1tkZWYudHlwZV07XG4gICAgICAgICAgICBpZiAoIXByb2Nlc3Nvcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW3RvSlNPTlNjaGVtYV06IE5vbi1yZXByZXNlbnRhYmxlIHR5cGUgZW5jb3VudGVyZWQ6ICR7ZGVmLnR5cGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9jZXNzb3Ioc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHNjaGVtYS5fem9kLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgLy8gQWxzbyBzZXQgcmVmIGlmIHByb2Nlc3NvciBkaWRuJ3QgKGZvciBpbmhlcml0YW5jZSlcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnJlZikgcmVzdWx0LnJlZiA9IHBhcmVudDtcbiAgICAgICAgICAgIHByb2Nlc3MocGFyZW50LCBjdHgsIHBhcmFtcyk7XG4gICAgICAgICAgICBjdHguc2Vlbi5nZXQocGFyZW50KS5pc1BhcmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbWV0YWRhdGFcbiAgICBjb25zdCBtZXRhID0gY3R4Lm1ldGFkYXRhUmVnaXN0cnkuZ2V0KHNjaGVtYSk7XG4gICAgaWYgKG1ldGEpIE9iamVjdC5hc3NpZ24ocmVzdWx0LnNjaGVtYSwgbWV0YSk7XG4gICAgaWYgKGN0eC5pbyA9PT0gXCJpbnB1dFwiICYmIGlzVHJhbnNmb3JtaW5nKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gZXhhbXBsZXMvZGVmYXVsdHMgb25seSBhcHBseSB0byBvdXRwdXQgdHlwZSBvZiBwaXBlXG4gICAgICAgIGRlbGV0ZSByZXN1bHQuc2NoZW1hLmV4YW1wbGVzO1xuICAgICAgICBkZWxldGUgcmVzdWx0LnNjaGVtYS5kZWZhdWx0O1xuICAgIH1cbiAgICAvLyBzZXQgcHJlZmF1bHQgYXMgZGVmYXVsdFxuICAgIGlmIChjdHguaW8gPT09IFwiaW5wdXRcIiAmJiByZXN1bHQuc2NoZW1hLl9wcmVmYXVsdCkgKF9hID0gcmVzdWx0LnNjaGVtYSkuZGVmYXVsdCA/PyAoX2EuZGVmYXVsdCA9IHJlc3VsdC5zY2hlbWEuX3ByZWZhdWx0KTtcbiAgICBkZWxldGUgcmVzdWx0LnNjaGVtYS5fcHJlZmF1bHQ7XG4gICAgLy8gcHVsbGluZyBmcmVzaCBmcm9tIGN0eC5zZWVuIGluIGNhc2UgaXQgd2FzIG92ZXJ3cml0dGVuXG4gICAgY29uc3QgX3Jlc3VsdCA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHJldHVybiBfcmVzdWx0LnNjaGVtYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGVmcyhjdHgsIHNjaGVtYSkge1xuICAgIC8vIGl0ZXJhdGUgb3ZlciBzZWVuIG1hcDtcbiAgICBjb25zdCByb290ID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKCFyb290KSB0aHJvdyBuZXcgRXJyb3IoXCJVbnByb2Nlc3NlZCBzY2hlbWEuIFRoaXMgaXMgYSBidWcgaW4gWm9kLlwiKTtcbiAgICAvLyBUcmFjayBpZHMgdG8gZGV0ZWN0IGR1cGxpY2F0ZXMgYWNyb3NzIGRpZmZlcmVudCBzY2hlbWFzXG4gICAgY29uc3QgaWRUb1NjaGVtYSA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN0eC5zZWVuLmVudHJpZXMoKSl7XG4gICAgICAgIGNvbnN0IGlkID0gY3R4Lm1ldGFkYXRhUmVnaXN0cnkuZ2V0KGVudHJ5WzBdKT8uaWQ7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBpZFRvU2NoZW1hLmdldChpZCk7XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcgIT09IGVudHJ5WzBdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgc2NoZW1hIGlkIFwiJHtpZH1cIiBkZXRlY3RlZCBkdXJpbmcgSlNPTiBTY2hlbWEgY29udmVyc2lvbi4gVHdvIGRpZmZlcmVudCBzY2hlbWFzIGNhbm5vdCBzaGFyZSB0aGUgc2FtZSBpZCB3aGVuIGNvbnZlcnRlZCB0b2dldGhlci5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkVG9TY2hlbWEuc2V0KGlkLCBlbnRyeVswXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gcmV0dXJucyBhIHJlZiB0byB0aGUgc2NoZW1hXG4gICAgLy8gZGVmSWQgd2lsbCBiZSBlbXB0eSBpZiB0aGUgcmVmIHBvaW50cyB0byBhbiBleHRlcm5hbCBzY2hlbWEgKG9yICMpXG4gICAgY29uc3QgbWFrZVVSSSA9IChlbnRyeSk9PntcbiAgICAgICAgLy8gY29tcGFyaW5nIHRoZSBzZWVuIG9iamVjdHMgYmVjYXVzZSBzb21ldGltZXNcbiAgICAgICAgLy8gbXVsdGlwbGUgc2NoZW1hcyBtYXAgdG8gdGhlIHNhbWUgc2VlbiBvYmplY3QuXG4gICAgICAgIC8vIGUuZy4gbGF6eVxuICAgICAgICAvLyBleHRlcm5hbCBpcyBjb25maWd1cmVkXG4gICAgICAgIGNvbnN0IGRlZnNTZWdtZW50ID0gY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0yMDIwLTEyXCIgPyBcIiRkZWZzXCIgOiBcImRlZmluaXRpb25zXCI7XG4gICAgICAgIGlmIChjdHguZXh0ZXJuYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVybmFsSWQgPSBjdHguZXh0ZXJuYWwucmVnaXN0cnkuZ2V0KGVudHJ5WzBdKT8uaWQ7IC8vID8/IFwiX19zaGFyZWRcIjsvLyBgX19zY2hlbWEke2N0eC5jb3VudGVyKyt9YDtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHNjaGVtYSBpcyBpbiB0aGUgZXh0ZXJuYWwgcmVnaXN0cnlcbiAgICAgICAgICAgIGNvbnN0IHVyaUdlbmVyYXRvciA9IGN0eC5leHRlcm5hbC51cmkgPz8gKChpZCk9PmlkKTtcbiAgICAgICAgICAgIGlmIChleHRlcm5hbElkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmOiB1cmlHZW5lcmF0b3IoZXh0ZXJuYWxJZClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCBhZGQgdG8gX19zaGFyZWRcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZW50cnlbMV0uZGVmSWQgPz8gZW50cnlbMV0uc2NoZW1hLmlkID8/IGBzY2hlbWEke2N0eC5jb3VudGVyKyt9YDtcbiAgICAgICAgICAgIGVudHJ5WzFdLmRlZklkID0gaWQ7IC8vIHNldCBkZWZJZCBzbyBpdCB3aWxsIGJlIHJldXNlZCBpZiBuZWVkZWRcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGVmSWQ6IGlkLFxuICAgICAgICAgICAgICAgIHJlZjogYCR7dXJpR2VuZXJhdG9yKFwiX19zaGFyZWRcIil9Iy8ke2RlZnNTZWdtZW50fS8ke2lkfWBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5WzFdID09PSByb290KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlZjogXCIjXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2VsZi1jb250YWluZWQgc2NoZW1hXG4gICAgICAgIGNvbnN0IHVyaVByZWZpeCA9IGAjYDtcbiAgICAgICAgY29uc3QgZGVmVXJpUHJlZml4ID0gYCR7dXJpUHJlZml4fS8ke2RlZnNTZWdtZW50fS9gO1xuICAgICAgICBjb25zdCBkZWZJZCA9IGVudHJ5WzFdLnNjaGVtYS5pZCA/PyBgX19zY2hlbWEke2N0eC5jb3VudGVyKyt9YDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlZklkLFxuICAgICAgICAgICAgcmVmOiBkZWZVcmlQcmVmaXggKyBkZWZJZFxuICAgICAgICB9O1xuICAgIH07XG4gICAgLy8gc3RvcmVkIGNhY2hlZCB2ZXJzaW9uIGluIGBkZWZgIHByb3BlcnR5XG4gICAgLy8gcmVtb3ZlIGFsbCBwcm9wZXJ0aWVzLCBzZXQgJHJlZlxuICAgIGNvbnN0IGV4dHJhY3RUb0RlZiA9IChlbnRyeSk9PntcbiAgICAgICAgLy8gaWYgdGhlIHNjaGVtYSBpcyBhbHJlYWR5IGEgcmVmZXJlbmNlLCBkbyBub3QgZXh0cmFjdCBpdFxuICAgICAgICBpZiAoZW50cnlbMV0uc2NoZW1hLiRyZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVuID0gZW50cnlbMV07XG4gICAgICAgIGNvbnN0IHsgcmVmLCBkZWZJZCB9ID0gbWFrZVVSSShlbnRyeSk7XG4gICAgICAgIHNlZW4uZGVmID0ge1xuICAgICAgICAgICAgLi4uc2Vlbi5zY2hlbWFcbiAgICAgICAgfTtcbiAgICAgICAgLy8gZGVmSWQgd29uJ3QgYmUgc2V0IGlmIHRoZSBzY2hlbWEgaXMgYSByZWZlcmVuY2UgdG8gYW4gZXh0ZXJuYWwgc2NoZW1hXG4gICAgICAgIC8vIG9yIGlmIHRoZSBzY2hlbWEgaXMgdGhlIHJvb3Qgc2NoZW1hXG4gICAgICAgIGlmIChkZWZJZCkgc2Vlbi5kZWZJZCA9IGRlZklkO1xuICAgICAgICAvLyB3aXBlIGF3YXkgYWxsIHByb3BlcnRpZXMgZXhjZXB0ICRyZWZcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2Vlbi5zY2hlbWE7XG4gICAgICAgIGZvcihjb25zdCBrZXkgaW4gc2NoZW1hKXtcbiAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlbWEuJHJlZiA9IHJlZjtcbiAgICB9O1xuICAgIC8vIHRocm93IG9uIGN5Y2xlc1xuICAgIC8vIGJyZWFrIGN5Y2xlc1xuICAgIGlmIChjdHguY3ljbGVzID09PSBcInRocm93XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdHguc2Vlbi5lbnRyaWVzKCkpe1xuICAgICAgICAgICAgY29uc3Qgc2VlbiA9IGVudHJ5WzFdO1xuICAgICAgICAgICAgaWYgKHNlZW4uY3ljbGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZDogXCIgKyBgIy8ke3NlZW4uY3ljbGU/LmpvaW4oXCIvXCIpfS88cm9vdD5gICsgJ1xcblxcblNldCB0aGUgYGN5Y2xlc2AgcGFyYW1ldGVyIHRvIGBcInJlZlwiYCB0byByZXNvbHZlIGN5Y2xpY2FsIHNjaGVtYXMgd2l0aCBkZWZzLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGV4dHJhY3Qgc2NoZW1hcyBpbnRvICRkZWZzXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdHguc2Vlbi5lbnRyaWVzKCkpe1xuICAgICAgICBjb25zdCBzZWVuID0gZW50cnlbMV07XG4gICAgICAgIC8vIGNvbnZlcnQgcm9vdCBzY2hlbWEgdG8gIyAkcmVmXG4gICAgICAgIGlmIChzY2hlbWEgPT09IGVudHJ5WzBdKSB7XG4gICAgICAgICAgICBleHRyYWN0VG9EZWYoZW50cnkpOyAvLyB0aGlzIGhhcyBzcGVjaWFsIGhhbmRsaW5nIGZvciB0aGUgcm9vdCBzY2hlbWFcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4dHJhY3Qgc2NoZW1hcyB0aGF0IGFyZSBpbiB0aGUgZXh0ZXJuYWwgcmVnaXN0cnlcbiAgICAgICAgaWYgKGN0eC5leHRlcm5hbCkge1xuICAgICAgICAgICAgY29uc3QgZXh0ID0gY3R4LmV4dGVybmFsLnJlZ2lzdHJ5LmdldChlbnRyeVswXSk/LmlkO1xuICAgICAgICAgICAgaWYgKHNjaGVtYSAhPT0gZW50cnlbMF0gJiYgZXh0KSB7XG4gICAgICAgICAgICAgICAgZXh0cmFjdFRvRGVmKGVudHJ5KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBleHRyYWN0IHNjaGVtYXMgd2l0aCBgaWRgIG1ldGFcbiAgICAgICAgY29uc3QgaWQgPSBjdHgubWV0YWRhdGFSZWdpc3RyeS5nZXQoZW50cnlbMF0pPy5pZDtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBleHRyYWN0VG9EZWYoZW50cnkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYnJlYWsgY3ljbGVzXG4gICAgICAgIGlmIChzZWVuLmN5Y2xlKSB7XG4gICAgICAgICAgICAvLyBhbnlcbiAgICAgICAgICAgIGV4dHJhY3RUb0RlZihlbnRyeSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHRyYWN0IHJldXNlZCBzY2hlbWFzXG4gICAgICAgIGlmIChzZWVuLmNvdW50ID4gMSkge1xuICAgICAgICAgICAgaWYgKGN0eC5yZXVzZWQgPT09IFwicmVmXCIpIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0VG9EZWYoZW50cnkpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplKGN0eCwgc2NoZW1hKSB7XG4gICAgY29uc3Qgcm9vdCA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIGlmICghcm9vdCkgdGhyb3cgbmV3IEVycm9yKFwiVW5wcm9jZXNzZWQgc2NoZW1hLiBUaGlzIGlzIGEgYnVnIGluIFpvZC5cIik7XG4gICAgLy8gZmxhdHRlbiByZWZzIC0gaW5oZXJpdCBwcm9wZXJ0aWVzIGZyb20gcGFyZW50IHNjaGVtYXNcbiAgICBjb25zdCBmbGF0dGVuUmVmID0gKHpvZFNjaGVtYSk9PntcbiAgICAgICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldCh6b2RTY2hlbWEpO1xuICAgICAgICAvLyBhbHJlYWR5IHByb2Nlc3NlZFxuICAgICAgICBpZiAoc2Vlbi5yZWYgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2Vlbi5kZWYgPz8gc2Vlbi5zY2hlbWE7XG4gICAgICAgIGNvbnN0IF9jYWNoZWQgPSB7XG4gICAgICAgICAgICAuLi5zY2hlbWFcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVmID0gc2Vlbi5yZWY7XG4gICAgICAgIHNlZW4ucmVmID0gbnVsbDsgLy8gcHJldmVudCBpbmZpbml0ZSByZWN1cnNpb25cbiAgICAgICAgaWYgKHJlZikge1xuICAgICAgICAgICAgZmxhdHRlblJlZihyZWYpO1xuICAgICAgICAgICAgY29uc3QgcmVmU2VlbiA9IGN0eC5zZWVuLmdldChyZWYpO1xuICAgICAgICAgICAgY29uc3QgcmVmU2NoZW1hID0gcmVmU2Vlbi5zY2hlbWE7XG4gICAgICAgICAgICAvLyBtZXJnZSByZWZlcmVuY2VkIHNjaGVtYSBpbnRvIGN1cnJlbnRcbiAgICAgICAgICAgIGlmIChyZWZTY2hlbWEuJHJlZiAmJiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wN1wiIHx8IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMDRcIiB8fCBjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gb2xkZXIgZHJhZnRzIGNhbid0IGNvbWJpbmUgJHJlZiB3aXRoIG90aGVyIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICBzY2hlbWEuYWxsT2YgPSBzY2hlbWEuYWxsT2YgPz8gW107XG4gICAgICAgICAgICAgICAgc2NoZW1hLmFsbE9mLnB1c2gocmVmU2NoZW1hKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHJlZlNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZXN0b3JlIGNoaWxkJ3Mgb3duIHByb3BlcnRpZXMgKGNoaWxkIHdpbnMpXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwgX2NhY2hlZCk7XG4gICAgICAgICAgICBjb25zdCBpc1BhcmVudFJlZiA9IHpvZFNjaGVtYS5fem9kLnBhcmVudCA9PT0gcmVmO1xuICAgICAgICAgICAgLy8gRm9yIHBhcmVudCBjaGFpbiwgY2hpbGQgaXMgYSByZWZpbmVtZW50IC0gcmVtb3ZlIHBhcmVudC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICAgIGlmIChpc1BhcmVudFJlZikge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gc2NoZW1hKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCIkcmVmXCIgfHwga2V5ID09PSBcImFsbE9mXCIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gX2NhY2hlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdoZW4gcmVmIHdhcyBleHRyYWN0ZWQgdG8gJGRlZnMsIHJlbW92ZSBwcm9wZXJ0aWVzIHRoYXQgbWF0Y2ggdGhlIGRlZmluaXRpb25cbiAgICAgICAgICAgIGlmIChyZWZTY2hlbWEuJHJlZiAmJiByZWZTZWVuLmRlZikge1xuICAgICAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gc2NoZW1hKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCIkcmVmXCIgfHwga2V5ID09PSBcImFsbE9mXCIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5IGluIHJlZlNlZW4uZGVmICYmIEpTT04uc3RyaW5naWZ5KHNjaGVtYVtrZXldKSA9PT0gSlNPTi5zdHJpbmdpZnkocmVmU2Vlbi5kZWZba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBwYXJlbnQgd2FzIGV4dHJhY3RlZCAoaGFzICRyZWYpLCBwcm9wYWdhdGUgJHJlZiB0byB0aGlzIHNjaGVtYVxuICAgICAgICAvLyBUaGlzIGhhbmRsZXMgY2FzZXMgbGlrZTogcmVhZG9ubHkoKS5tZXRhKHtpZH0pLmRlc2NyaWJlKClcbiAgICAgICAgLy8gd2hlcmUgcHJvY2Vzc29yIHNldHMgcmVmIHRvIGlubmVyVHlwZSBidXQgcGFyZW50IHNob3VsZCBiZSByZWZlcmVuY2VkXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHpvZFNjaGVtYS5fem9kLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQgIT09IHJlZikge1xuICAgICAgICAgICAgLy8gRW5zdXJlIHBhcmVudCBpcyBwcm9jZXNzZWQgZmlyc3Qgc28gaXRzIGRlZiBoYXMgaW5oZXJpdGVkIHByb3BlcnRpZXNcbiAgICAgICAgICAgIGZsYXR0ZW5SZWYocGFyZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFNlZW4gPSBjdHguc2Vlbi5nZXQocGFyZW50KTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRTZWVuPy5zY2hlbWEuJHJlZikge1xuICAgICAgICAgICAgICAgIHNjaGVtYS4kcmVmID0gcGFyZW50U2Vlbi5zY2hlbWEuJHJlZjtcbiAgICAgICAgICAgICAgICAvLyBEZS1kdXBsaWNhdGUgd2l0aCBwYXJlbnQncyBkZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFNlZW4uZGVmKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBrZXkgaW4gc2NoZW1hKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFwiJHJlZlwiIHx8IGtleSA9PT0gXCJhbGxPZlwiKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gcGFyZW50U2Vlbi5kZWYgJiYgSlNPTi5zdHJpbmdpZnkoc2NoZW1hW2tleV0pID09PSBKU09OLnN0cmluZ2lmeShwYXJlbnRTZWVuLmRlZltrZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWFba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBleGVjdXRlIG92ZXJyaWRlc1xuICAgICAgICBjdHgub3ZlcnJpZGUoe1xuICAgICAgICAgICAgem9kU2NoZW1hOiB6b2RTY2hlbWEsXG4gICAgICAgICAgICBqc29uU2NoZW1hOiBzY2hlbWEsXG4gICAgICAgICAgICBwYXRoOiBzZWVuLnBhdGggPz8gW11cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFtcbiAgICAgICAgLi4uY3R4LnNlZW4uZW50cmllcygpXG4gICAgXS5yZXZlcnNlKCkpe1xuICAgICAgICBmbGF0dGVuUmVmKGVudHJ5WzBdKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgaWYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiKSB7XG4gICAgICAgIHJlc3VsdC4kc2NoZW1hID0gXCJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYVwiO1xuICAgIH0gZWxzZSBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wN1wiKSB7XG4gICAgICAgIHJlc3VsdC4kc2NoZW1hID0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIjtcbiAgICB9IGVsc2UgaWYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMDRcIikge1xuICAgICAgICByZXN1bHQuJHNjaGVtYSA9IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjXCI7XG4gICAgfSBlbHNlIGlmIChjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAvLyBPcGVuQVBJIDMuMCBzY2hlbWEgb2JqZWN0cyBzaG91bGQgbm90IGluY2x1ZGUgYSAkc2NoZW1hIHByb3BlcnR5XG4gICAgfSBlbHNlIHtcbiAgICAvLyBBcmJpdHJhcnkgc3RyaW5nIHZhbHVlcyBhcmUgYWxsb3dlZCBidXQgd29uJ3QgaGF2ZSBhICRzY2hlbWEgcHJvcGVydHkgc2V0XG4gICAgfVxuICAgIGlmIChjdHguZXh0ZXJuYWw/LnVyaSkge1xuICAgICAgICBjb25zdCBpZCA9IGN0eC5leHRlcm5hbC5yZWdpc3RyeS5nZXQoc2NoZW1hKT8uaWQ7XG4gICAgICAgIGlmICghaWQpIHRocm93IG5ldyBFcnJvcihcIlNjaGVtYSBpcyBtaXNzaW5nIGFuIGBpZGAgcHJvcGVydHlcIik7XG4gICAgICAgIHJlc3VsdC4kaWQgPSBjdHguZXh0ZXJuYWwudXJpKGlkKTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHJvb3QuZGVmID8/IHJvb3Quc2NoZW1hKTtcbiAgICAvLyBidWlsZCBkZWZzIG9iamVjdFxuICAgIGNvbnN0IGRlZnMgPSBjdHguZXh0ZXJuYWw/LmRlZnMgPz8ge307XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdHguc2Vlbi5lbnRyaWVzKCkpe1xuICAgICAgICBjb25zdCBzZWVuID0gZW50cnlbMV07XG4gICAgICAgIGlmIChzZWVuLmRlZiAmJiBzZWVuLmRlZklkKSB7XG4gICAgICAgICAgICBkZWZzW3NlZW4uZGVmSWRdID0gc2Vlbi5kZWY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2V0IGRlZmluaXRpb25zIGluIHJlc3VsdFxuICAgIGlmIChjdHguZXh0ZXJuYWwpIHt9IGVsc2Uge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGVmcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LiRkZWZzID0gZGVmcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmRlZmluaXRpb25zID0gZGVmcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIFwiZmluYWxpemVzXCIgdGhpcyBzY2hlbWEgYW5kIGVuc3VyZXMgYWxsIGN5Y2xlcyBhcmUgcmVtb3ZlZFxuICAgICAgICAvLyBlYWNoIGNhbGwgdG8gZmluYWxpemUoKSBpcyBmdW5jdGlvbmFsbHkgaW5kZXBlbmRlbnRcbiAgICAgICAgLy8gdGhvdWdoIHRoZSBzZWVuIG1hcCBpcyBzaGFyZWRcbiAgICAgICAgY29uc3QgZmluYWxpemVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXN1bHQpKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpbmFsaXplZCwgXCJ+c3RhbmRhcmRcIiwge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAuLi5zY2hlbWFbXCJ+c3RhbmRhcmRcIl0sXG4gICAgICAgICAgICAgICAganNvblNjaGVtYToge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dDogY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kKHNjaGVtYSwgXCJpbnB1dFwiLCBjdHgucHJvY2Vzc29ycyksXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dDogY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kKHNjaGVtYSwgXCJvdXRwdXRcIiwgY3R4LnByb2Nlc3NvcnMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmluYWxpemVkO1xuICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgY29udmVydGluZyBzY2hlbWEgdG8gSlNPTi5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNUcmFuc2Zvcm1pbmcoX3NjaGVtYSwgX2N0eCkge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPz8ge1xuICAgICAgICBzZWVuOiBuZXcgU2V0KClcbiAgICB9O1xuICAgIGlmIChjdHguc2Vlbi5oYXMoX3NjaGVtYSkpIHJldHVybiBmYWxzZTtcbiAgICBjdHguc2Vlbi5hZGQoX3NjaGVtYSk7XG4gICAgY29uc3QgZGVmID0gX3NjaGVtYS5fem9kLmRlZjtcbiAgICBpZiAoZGVmLnR5cGUgPT09IFwidHJhbnNmb3JtXCIpIHJldHVybiB0cnVlO1xuICAgIGlmIChkZWYudHlwZSA9PT0gXCJhcnJheVwiKSByZXR1cm4gaXNUcmFuc2Zvcm1pbmcoZGVmLmVsZW1lbnQsIGN0eCk7XG4gICAgaWYgKGRlZi50eXBlID09PSBcInNldFwiKSByZXR1cm4gaXNUcmFuc2Zvcm1pbmcoZGVmLnZhbHVlVHlwZSwgY3R4KTtcbiAgICBpZiAoZGVmLnR5cGUgPT09IFwibGF6eVwiKSByZXR1cm4gaXNUcmFuc2Zvcm1pbmcoZGVmLmdldHRlcigpLCBjdHgpO1xuICAgIGlmIChkZWYudHlwZSA9PT0gXCJwcm9taXNlXCIgfHwgZGVmLnR5cGUgPT09IFwib3B0aW9uYWxcIiB8fCBkZWYudHlwZSA9PT0gXCJub25vcHRpb25hbFwiIHx8IGRlZi50eXBlID09PSBcIm51bGxhYmxlXCIgfHwgZGVmLnR5cGUgPT09IFwicmVhZG9ubHlcIiB8fCBkZWYudHlwZSA9PT0gXCJkZWZhdWx0XCIgfHwgZGVmLnR5cGUgPT09IFwicHJlZmF1bHRcIikge1xuICAgICAgICByZXR1cm4gaXNUcmFuc2Zvcm1pbmcoZGVmLmlubmVyVHlwZSwgY3R4KTtcbiAgICB9XG4gICAgaWYgKGRlZi50eXBlID09PSBcImludGVyc2VjdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYubGVmdCwgY3R4KSB8fCBpc1RyYW5zZm9ybWluZyhkZWYucmlnaHQsIGN0eCk7XG4gICAgfVxuICAgIGlmIChkZWYudHlwZSA9PT0gXCJyZWNvcmRcIiB8fCBkZWYudHlwZSA9PT0gXCJtYXBcIikge1xuICAgICAgICByZXR1cm4gaXNUcmFuc2Zvcm1pbmcoZGVmLmtleVR5cGUsIGN0eCkgfHwgaXNUcmFuc2Zvcm1pbmcoZGVmLnZhbHVlVHlwZSwgY3R4KTtcbiAgICB9XG4gICAgaWYgKGRlZi50eXBlID09PSBcInBpcGVcIikge1xuICAgICAgICByZXR1cm4gaXNUcmFuc2Zvcm1pbmcoZGVmLmluLCBjdHgpIHx8IGlzVHJhbnNmb3JtaW5nKGRlZi5vdXQsIGN0eCk7XG4gICAgfVxuICAgIGlmIChkZWYudHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBmb3IoY29uc3Qga2V5IGluIGRlZi5zaGFwZSl7XG4gICAgICAgICAgICBpZiAoaXNUcmFuc2Zvcm1pbmcoZGVmLnNoYXBlW2tleV0sIGN0eCkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGRlZi50eXBlID09PSBcInVuaW9uXCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgZGVmLm9wdGlvbnMpe1xuICAgICAgICAgICAgaWYgKGlzVHJhbnNmb3JtaW5nKG9wdGlvbiwgY3R4KSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGVmLnR5cGUgPT09IFwidHVwbGVcIikge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGVmLml0ZW1zKXtcbiAgICAgICAgICAgIGlmIChpc1RyYW5zZm9ybWluZyhpdGVtLCBjdHgpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLnJlc3QgJiYgaXNUcmFuc2Zvcm1pbmcoZGVmLnJlc3QsIGN0eCkpIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHRvSlNPTlNjaGVtYSBtZXRob2QgZm9yIGEgc2NoZW1hIGluc3RhbmNlLlxuICogVGhpcyBlbmNhcHN1bGF0ZXMgdGhlIGxvZ2ljIG9mIGluaXRpYWxpemluZyBjb250ZXh0LCBwcm9jZXNzaW5nLCBleHRyYWN0aW5nIGRlZnMsIGFuZCBmaW5hbGl6aW5nLlxuICovIGV4cG9ydCBjb25zdCBjcmVhdGVUb0pTT05TY2hlbWFNZXRob2QgPSAoc2NoZW1hLCBwcm9jZXNzb3JzID0ge30pPT4ocGFyYW1zKT0+e1xuICAgICAgICBjb25zdCBjdHggPSBpbml0aWFsaXplQ29udGV4dCh7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwcm9jZXNzb3JzXG4gICAgICAgIH0pO1xuICAgICAgICBwcm9jZXNzKHNjaGVtYSwgY3R4KTtcbiAgICAgICAgZXh0cmFjdERlZnMoY3R4LCBzY2hlbWEpO1xuICAgICAgICByZXR1cm4gZmluYWxpemUoY3R4LCBzY2hlbWEpO1xuICAgIH07XG5leHBvcnQgY29uc3QgY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kID0gKHNjaGVtYSwgaW8sIHByb2Nlc3NvcnMgPSB7fSk9PihwYXJhbXMpPT57XG4gICAgICAgIGNvbnN0IHsgbGlicmFyeU9wdGlvbnMsIHRhcmdldCB9ID0gcGFyYW1zID8/IHt9O1xuICAgICAgICBjb25zdCBjdHggPSBpbml0aWFsaXplQ29udGV4dCh7XG4gICAgICAgICAgICAuLi5saWJyYXJ5T3B0aW9ucyA/PyB7fSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIGlvLFxuICAgICAgICAgICAgcHJvY2Vzc29yc1xuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2VzcyhzY2hlbWEsIGN0eCk7XG4gICAgICAgIGV4dHJhY3REZWZzKGN0eCwgc2NoZW1hKTtcbiAgICAgICAgcmV0dXJuIGZpbmFsaXplKGN0eCwgc2NoZW1hKTtcbiAgICB9O1xuIiwgImltcG9ydCB7IGV4dHJhY3REZWZzLCBmaW5hbGl6ZSwgaW5pdGlhbGl6ZUNvbnRleHQsIHByb2Nlc3MgfSBmcm9tIFwiLi90by1qc29uLXNjaGVtYS5qc1wiO1xuaW1wb3J0IHsgZ2V0RW51bVZhbHVlcyB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmNvbnN0IGZvcm1hdE1hcCA9IHtcbiAgICBndWlkOiBcInV1aWRcIixcbiAgICB1cmw6IFwidXJpXCIsXG4gICAgZGF0ZXRpbWU6IFwiZGF0ZS10aW1lXCIsXG4gICAganNvbl9zdHJpbmc6IFwianNvbi1zdHJpbmdcIixcbiAgICByZWdleDogXCJcIlxufTtcbi8vID09PT09PT09PT09PT09PT09PT09IFNJTVBMRSBUWVBFIFBST0NFU1NPUlMgPT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCBjb25zdCBzdHJpbmdQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKT0+e1xuICAgIGNvbnN0IGpzb24gPSBfanNvbjtcbiAgICBqc29uLnR5cGUgPSBcInN0cmluZ1wiO1xuICAgIGNvbnN0IHsgbWluaW11bSwgbWF4aW11bSwgZm9ybWF0LCBwYXR0ZXJucywgY29udGVudEVuY29kaW5nIH0gPSBzY2hlbWEuX3pvZC5iYWc7XG4gICAgaWYgKHR5cGVvZiBtaW5pbXVtID09PSBcIm51bWJlclwiKSBqc29uLm1pbkxlbmd0aCA9IG1pbmltdW07XG4gICAgaWYgKHR5cGVvZiBtYXhpbXVtID09PSBcIm51bWJlclwiKSBqc29uLm1heExlbmd0aCA9IG1heGltdW07XG4gICAgLy8gY3VzdG9tIHBhdHRlcm4gb3ZlcnJpZGVzIGZvcm1hdFxuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgICAganNvbi5mb3JtYXQgPSBmb3JtYXRNYXBbZm9ybWF0XSA/PyBmb3JtYXQ7XG4gICAgICAgIGlmIChqc29uLmZvcm1hdCA9PT0gXCJcIikgZGVsZXRlIGpzb24uZm9ybWF0OyAvLyBlbXB0eSBmb3JtYXQgaXMgbm90IHZhbGlkXG4gICAgICAgIC8vIEpTT04gU2NoZW1hIGZvcm1hdDogXCJ0aW1lXCIgcmVxdWlyZXMgYSBmdWxsIHRpbWUgd2l0aCBvZmZzZXQgb3IgWlxuICAgICAgICAvLyB6Lmlzby50aW1lKCkgZG9lcyBub3QgaW5jbHVkZSB0aW1lem9uZSBpbmZvcm1hdGlvbiwgc28gZm9ybWF0OiBcInRpbWVcIiBzaG91bGQgbmV2ZXIgYmUgdXNlZFxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgZGVsZXRlIGpzb24uZm9ybWF0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb250ZW50RW5jb2RpbmcpIGpzb24uY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nO1xuICAgIGlmIChwYXR0ZXJucyAmJiBwYXR0ZXJucy5zaXplID4gMCkge1xuICAgICAgICBjb25zdCByZWdleGVzID0gW1xuICAgICAgICAgICAgLi4ucGF0dGVybnNcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHJlZ2V4ZXMubGVuZ3RoID09PSAxKSBqc29uLnBhdHRlcm4gPSByZWdleGVzWzBdLnNvdXJjZTtcbiAgICAgICAgZWxzZSBpZiAocmVnZXhlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBqc29uLmFsbE9mID0gW1xuICAgICAgICAgICAgICAgIC4uLnJlZ2V4ZXMubWFwKChyZWdleCk9Pih7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA3XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIiA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9IDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiByZWdleC5zb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBudW1iZXJQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKT0+e1xuICAgIGNvbnN0IGpzb24gPSBfanNvbjtcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0sIGZvcm1hdCwgbXVsdGlwbGVPZiwgZXhjbHVzaXZlTWF4aW11bSwgZXhjbHVzaXZlTWluaW11bSB9ID0gc2NoZW1hLl96b2QuYmFnO1xuICAgIGlmICh0eXBlb2YgZm9ybWF0ID09PSBcInN0cmluZ1wiICYmIGZvcm1hdC5pbmNsdWRlcyhcImludFwiKSkganNvbi50eXBlID0gXCJpbnRlZ2VyXCI7XG4gICAgZWxzZSBqc29uLnR5cGUgPSBcIm51bWJlclwiO1xuICAgIGlmICh0eXBlb2YgZXhjbHVzaXZlTWluaW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIikge1xuICAgICAgICAgICAganNvbi5taW5pbXVtID0gZXhjbHVzaXZlTWluaW11bTtcbiAgICAgICAgICAgIGpzb24uZXhjbHVzaXZlTWluaW11bSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBqc29uLmV4Y2x1c2l2ZU1pbmltdW0gPSBleGNsdXNpdmVNaW5pbXVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbWluaW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBqc29uLm1pbmltdW0gPSBtaW5pbXVtO1xuICAgICAgICBpZiAodHlwZW9mIGV4Y2x1c2l2ZU1pbmltdW0gPT09IFwibnVtYmVyXCIgJiYgY3R4LnRhcmdldCAhPT0gXCJkcmFmdC0wNFwiKSB7XG4gICAgICAgICAgICBpZiAoZXhjbHVzaXZlTWluaW11bSA+PSBtaW5pbXVtKSBkZWxldGUganNvbi5taW5pbXVtO1xuICAgICAgICAgICAgZWxzZSBkZWxldGUganNvbi5leGNsdXNpdmVNaW5pbXVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXhjbHVzaXZlTWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIikge1xuICAgICAgICAgICAganNvbi5tYXhpbXVtID0gZXhjbHVzaXZlTWF4aW11bTtcbiAgICAgICAgICAgIGpzb24uZXhjbHVzaXZlTWF4aW11bSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBqc29uLmV4Y2x1c2l2ZU1heGltdW0gPSBleGNsdXNpdmVNYXhpbXVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBqc29uLm1heGltdW0gPSBtYXhpbXVtO1xuICAgICAgICBpZiAodHlwZW9mIGV4Y2x1c2l2ZU1heGltdW0gPT09IFwibnVtYmVyXCIgJiYgY3R4LnRhcmdldCAhPT0gXCJkcmFmdC0wNFwiKSB7XG4gICAgICAgICAgICBpZiAoZXhjbHVzaXZlTWF4aW11bSA8PSBtYXhpbXVtKSBkZWxldGUganNvbi5tYXhpbXVtO1xuICAgICAgICAgICAgZWxzZSBkZWxldGUganNvbi5leGNsdXNpdmVNYXhpbXVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbXVsdGlwbGVPZiA9PT0gXCJudW1iZXJcIikganNvbi5tdWx0aXBsZU9mID0gbXVsdGlwbGVPZjtcbn07XG5leHBvcnQgY29uc3QgYm9vbGVhblByb2Nlc3NvciA9IChfc2NoZW1hLCBfY3R4LCBqc29uLCBfcGFyYW1zKT0+e1xuICAgIGpzb24udHlwZSA9IFwiYm9vbGVhblwiO1xufTtcbmV4cG9ydCBjb25zdCBiaWdpbnRQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcyk9PntcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJpZ0ludCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBzeW1ib2xQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcyk9PntcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN5bWJvbHMgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgbnVsbFByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIGpzb24sIF9wYXJhbXMpPT57XG4gICAgaWYgKGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIikge1xuICAgICAgICBqc29uLnR5cGUgPSBcInN0cmluZ1wiO1xuICAgICAgICBqc29uLm51bGxhYmxlID0gdHJ1ZTtcbiAgICAgICAganNvbi5lbnVtID0gW1xuICAgICAgICAgICAgbnVsbFxuICAgICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGpzb24udHlwZSA9IFwibnVsbFwiO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdW5kZWZpbmVkUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpPT57XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmRlZmluZWQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3Qgdm9pZFByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKT0+e1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVm9pZCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBuZXZlclByb2Nlc3NvciA9IChfc2NoZW1hLCBfY3R4LCBqc29uLCBfcGFyYW1zKT0+e1xuICAgIGpzb24ubm90ID0ge307XG59O1xuZXhwb3J0IGNvbnN0IGFueVByb2Nlc3NvciA9IChfc2NoZW1hLCBfY3R4LCBfanNvbiwgX3BhcmFtcyk9Pntcbi8vIGVtcHR5IHNjaGVtYSBhY2NlcHRzIGFueXRoaW5nXG59O1xuZXhwb3J0IGNvbnN0IHVua25vd25Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgX2N0eCwgX2pzb24sIF9wYXJhbXMpPT57XG4vLyBlbXB0eSBzY2hlbWEgYWNjZXB0cyBhbnl0aGluZ1xufTtcbmV4cG9ydCBjb25zdCBkYXRlUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpPT57XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRlIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IGVudW1Qcm9jZXNzb3IgPSAoc2NoZW1hLCBfY3R4LCBqc29uLCBfcGFyYW1zKT0+e1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCB2YWx1ZXMgPSBnZXRFbnVtVmFsdWVzKGRlZi5lbnRyaWVzKTtcbiAgICAvLyBOdW1iZXIgZW51bXMgY2FuIGhhdmUgYm90aCBzdHJpbmcgYW5kIG51bWJlciB2YWx1ZXNcbiAgICBpZiAodmFsdWVzLmV2ZXJ5KCh2KT0+dHlwZW9mIHYgPT09IFwibnVtYmVyXCIpKSBqc29uLnR5cGUgPSBcIm51bWJlclwiO1xuICAgIGlmICh2YWx1ZXMuZXZlcnkoKHYpPT50eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikpIGpzb24udHlwZSA9IFwic3RyaW5nXCI7XG4gICAganNvbi5lbnVtID0gdmFsdWVzO1xufTtcbmV4cG9ydCBjb25zdCBsaXRlcmFsUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBqc29uLCBfcGFyYW1zKT0+e1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCB2YWxzID0gW107XG4gICAgZm9yIChjb25zdCB2YWwgb2YgZGVmLnZhbHVlcyl7XG4gICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxpdGVyYWwgYHVuZGVmaW5lZGAgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRvIG5vdCBhZGQgdG8gdmFsc1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09IFwiYmlnaW50XCIpIHtcbiAgICAgICAgICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgbGl0ZXJhbHMgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWxzLnB1c2goTnVtYmVyKHZhbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFscy5wdXNoKHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhbHMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gZG8gbm90aGluZyAoYW4gdW5kZWZpbmVkIGxpdGVyYWwgd2FzIHN0cmlwcGVkKVxuICAgIH0gZWxzZSBpZiAodmFscy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgdmFsID0gdmFsc1swXTtcbiAgICAgICAganNvbi50eXBlID0gdmFsID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2YgdmFsO1xuICAgICAgICBpZiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIikge1xuICAgICAgICAgICAganNvbi5lbnVtID0gW1xuICAgICAgICAgICAgICAgIHZhbFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGpzb24uY29uc3QgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFscy5ldmVyeSgodik9PnR5cGVvZiB2ID09PSBcIm51bWJlclwiKSkganNvbi50eXBlID0gXCJudW1iZXJcIjtcbiAgICAgICAgaWYgKHZhbHMuZXZlcnkoKHYpPT50eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikpIGpzb24udHlwZSA9IFwic3RyaW5nXCI7XG4gICAgICAgIGlmICh2YWxzLmV2ZXJ5KCh2KT0+dHlwZW9mIHYgPT09IFwiYm9vbGVhblwiKSkganNvbi50eXBlID0gXCJib29sZWFuXCI7XG4gICAgICAgIGlmICh2YWxzLmV2ZXJ5KCh2KT0+diA9PT0gbnVsbCkpIGpzb24udHlwZSA9IFwibnVsbFwiO1xuICAgICAgICBqc29uLmVudW0gPSB2YWxzO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgbmFuUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpPT57XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOYU4gY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdGVtcGxhdGVMaXRlcmFsUHJvY2Vzc29yID0gKHNjaGVtYSwgX2N0eCwganNvbiwgX3BhcmFtcyk9PntcbiAgICBjb25zdCBfanNvbiA9IGpzb247XG4gICAgY29uc3QgcGF0dGVybiA9IHNjaGVtYS5fem9kLnBhdHRlcm47XG4gICAgaWYgKCFwYXR0ZXJuKSB0aHJvdyBuZXcgRXJyb3IoXCJQYXR0ZXJuIG5vdCBmb3VuZCBpbiB0ZW1wbGF0ZSBsaXRlcmFsXCIpO1xuICAgIF9qc29uLnR5cGUgPSBcInN0cmluZ1wiO1xuICAgIF9qc29uLnBhdHRlcm4gPSBwYXR0ZXJuLnNvdXJjZTtcbn07XG5leHBvcnQgY29uc3QgZmlsZVByb2Nlc3NvciA9IChzY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpPT57XG4gICAgY29uc3QgX2pzb24gPSBqc29uO1xuICAgIGNvbnN0IGZpbGUgPSB7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJiaW5hcnlcIixcbiAgICAgICAgY29udGVudEVuY29kaW5nOiBcImJpbmFyeVwiXG4gICAgfTtcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0sIG1pbWUgfSA9IHNjaGVtYS5fem9kLmJhZztcbiAgICBpZiAobWluaW11bSAhPT0gdW5kZWZpbmVkKSBmaWxlLm1pbkxlbmd0aCA9IG1pbmltdW07XG4gICAgaWYgKG1heGltdW0gIT09IHVuZGVmaW5lZCkgZmlsZS5tYXhMZW5ndGggPSBtYXhpbXVtO1xuICAgIGlmIChtaW1lKSB7XG4gICAgICAgIGlmIChtaW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmlsZS5jb250ZW50TWVkaWFUeXBlID0gbWltZVswXTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2pzb24sIGZpbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfanNvbiwgZmlsZSk7IC8vIHNoYXJlZCBwcm9wcyBhdCByb290XG4gICAgICAgICAgICBfanNvbi5hbnlPZiA9IG1pbWUubWFwKChtKT0+KHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudE1lZGlhVHlwZTogbVxuICAgICAgICAgICAgICAgIH0pKTsgLy8gb25seSBjb250ZW50TWVkaWFUeXBlIGRpZmZlcnNcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oX2pzb24sIGZpbGUpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3Qgc3VjY2Vzc1Byb2Nlc3NvciA9IChfc2NoZW1hLCBfY3R4LCBqc29uLCBfcGFyYW1zKT0+e1xuICAgIGpzb24udHlwZSA9IFwiYm9vbGVhblwiO1xufTtcbmV4cG9ydCBjb25zdCBjdXN0b21Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcyk9PntcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkN1c3RvbSB0eXBlcyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBmdW5jdGlvblByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKT0+e1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRnVuY3Rpb24gdHlwZXMgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdHJhbnNmb3JtUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpPT57XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmFuc2Zvcm1zIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IG1hcFByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKT0+e1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWFwIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHNldFByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKT0+e1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2V0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT0gQ09NUE9TSVRFIFRZUEUgUFJPQ0VTU09SUyA9PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IGNvbnN0IGFycmF5UHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKT0+e1xuICAgIGNvbnN0IGpzb24gPSBfanNvbjtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgeyBtaW5pbXVtLCBtYXhpbXVtIH0gPSBzY2hlbWEuX3pvZC5iYWc7XG4gICAgaWYgKHR5cGVvZiBtaW5pbXVtID09PSBcIm51bWJlclwiKSBqc29uLm1pbkl0ZW1zID0gbWluaW11bTtcbiAgICBpZiAodHlwZW9mIG1heGltdW0gPT09IFwibnVtYmVyXCIpIGpzb24ubWF4SXRlbXMgPSBtYXhpbXVtO1xuICAgIGpzb24udHlwZSA9IFwiYXJyYXlcIjtcbiAgICBqc29uLml0ZW1zID0gcHJvY2VzcyhkZWYuZWxlbWVudCwgY3R4LCB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgcGF0aDogW1xuICAgICAgICAgICAgLi4ucGFyYW1zLnBhdGgsXG4gICAgICAgICAgICBcIml0ZW1zXCJcbiAgICAgICAgXVxuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCBvYmplY3RQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpPT57XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBqc29uLnR5cGUgPSBcIm9iamVjdFwiO1xuICAgIGpzb24ucHJvcGVydGllcyA9IHt9O1xuICAgIGNvbnN0IHNoYXBlID0gZGVmLnNoYXBlO1xuICAgIGZvcihjb25zdCBrZXkgaW4gc2hhcGUpe1xuICAgICAgICBqc29uLnByb3BlcnRpZXNba2V5XSA9IHByb2Nlc3Moc2hhcGVba2V5XSwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbXG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zLnBhdGgsXG4gICAgICAgICAgICAgICAgXCJwcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAga2V5XG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyByZXF1aXJlZCBrZXlzXG4gICAgY29uc3QgYWxsS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoc2hhcGUpKTtcbiAgICBjb25zdCByZXF1aXJlZEtleXMgPSBuZXcgU2V0KFtcbiAgICAgICAgLi4uYWxsS2V5c1xuICAgIF0uZmlsdGVyKChrZXkpPT57XG4gICAgICAgIGNvbnN0IHYgPSBkZWYuc2hhcGVba2V5XS5fem9kO1xuICAgICAgICBpZiAoY3R4LmlvID09PSBcImlucHV0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2Lm9wdGluID09PSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdi5vcHRvdXQgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBpZiAocmVxdWlyZWRLZXlzLnNpemUgPiAwKSB7XG4gICAgICAgIGpzb24ucmVxdWlyZWQgPSBBcnJheS5mcm9tKHJlcXVpcmVkS2V5cyk7XG4gICAgfVxuICAgIC8vIGNhdGNoYWxsXG4gICAgaWYgKGRlZi5jYXRjaGFsbD8uX3pvZC5kZWYudHlwZSA9PT0gXCJuZXZlclwiKSB7XG4gICAgICAgIC8vIHN0cmljdFxuICAgICAgICBqc29uLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICghZGVmLmNhdGNoYWxsKSB7XG4gICAgICAgIC8vIHJlZ3VsYXJcbiAgICAgICAgaWYgKGN0eC5pbyA9PT0gXCJvdXRwdXRcIikganNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoZGVmLmNhdGNoYWxsKSB7XG4gICAgICAgIGpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMgPSBwcm9jZXNzKGRlZi5jYXRjaGFsbCwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbXG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zLnBhdGgsXG4gICAgICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdW5pb25Qcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcyk9PntcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgLy8gRXhjbHVzaXZlIHVuaW9ucyAoaW5jbHVzaXZlID09PSBmYWxzZSkgdXNlIG9uZU9mIChleGFjdGx5IG9uZSBtYXRjaCkgaW5zdGVhZCBvZiBhbnlPZiAob25lIG9yIG1vcmUgbWF0Y2hlcylcbiAgICAvLyBUaGlzIGluY2x1ZGVzIGJvdGggei54b3IoKSBhbmQgZGlzY3JpbWluYXRlZCB1bmlvbnNcbiAgICBjb25zdCBpc0V4Y2x1c2l2ZSA9IGRlZi5pbmNsdXNpdmUgPT09IGZhbHNlO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBkZWYub3B0aW9ucy5tYXAoKHgsIGkpPT5wcm9jZXNzKHgsIGN0eCwge1xuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgcGF0aDogW1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtcy5wYXRoLFxuICAgICAgICAgICAgICAgIGlzRXhjbHVzaXZlID8gXCJvbmVPZlwiIDogXCJhbnlPZlwiLFxuICAgICAgICAgICAgICAgIGlcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSkpO1xuICAgIGlmIChpc0V4Y2x1c2l2ZSkge1xuICAgICAgICBqc29uLm9uZU9mID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgICBqc29uLmFueU9mID0gb3B0aW9ucztcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IGludGVyc2VjdGlvblByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgcGFyYW1zKT0+e1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCBhID0gcHJvY2VzcyhkZWYubGVmdCwgY3R4LCB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgcGF0aDogW1xuICAgICAgICAgICAgLi4ucGFyYW1zLnBhdGgsXG4gICAgICAgICAgICBcImFsbE9mXCIsXG4gICAgICAgICAgICAwXG4gICAgICAgIF1cbiAgICB9KTtcbiAgICBjb25zdCBiID0gcHJvY2VzcyhkZWYucmlnaHQsIGN0eCwge1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIHBhdGg6IFtcbiAgICAgICAgICAgIC4uLnBhcmFtcy5wYXRoLFxuICAgICAgICAgICAgXCJhbGxPZlwiLFxuICAgICAgICAgICAgMVxuICAgICAgICBdXG4gICAgfSk7XG4gICAgY29uc3QgaXNTaW1wbGVJbnRlcnNlY3Rpb24gPSAodmFsKT0+XCJhbGxPZlwiIGluIHZhbCAmJiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMTtcbiAgICBjb25zdCBhbGxPZiA9IFtcbiAgICAgICAgLi4uaXNTaW1wbGVJbnRlcnNlY3Rpb24oYSkgPyBhLmFsbE9mIDogW1xuICAgICAgICAgICAgYVxuICAgICAgICBdLFxuICAgICAgICAuLi5pc1NpbXBsZUludGVyc2VjdGlvbihiKSA/IGIuYWxsT2YgOiBbXG4gICAgICAgICAgICBiXG4gICAgICAgIF1cbiAgICBdO1xuICAgIGpzb24uYWxsT2YgPSBhbGxPZjtcbn07XG5leHBvcnQgY29uc3QgdHVwbGVQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpPT57XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBqc29uLnR5cGUgPSBcImFycmF5XCI7XG4gICAgY29uc3QgcHJlZml4UGF0aCA9IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiID8gXCJwcmVmaXhJdGVtc1wiIDogXCJpdGVtc1wiO1xuICAgIGNvbnN0IHJlc3RQYXRoID0gY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0yMDIwLTEyXCIgPyBcIml0ZW1zXCIgOiBjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIgPyBcIml0ZW1zXCIgOiBcImFkZGl0aW9uYWxJdGVtc1wiO1xuICAgIGNvbnN0IHByZWZpeEl0ZW1zID0gZGVmLml0ZW1zLm1hcCgoeCwgaSk9PnByb2Nlc3MoeCwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbXG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zLnBhdGgsXG4gICAgICAgICAgICAgICAgcHJlZml4UGF0aCxcbiAgICAgICAgICAgICAgICBpXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pKTtcbiAgICBjb25zdCByZXN0ID0gZGVmLnJlc3QgPyBwcm9jZXNzKGRlZi5yZXN0LCBjdHgsIHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBwYXRoOiBbXG4gICAgICAgICAgICAuLi5wYXJhbXMucGF0aCxcbiAgICAgICAgICAgIHJlc3RQYXRoLFxuICAgICAgICAgICAgLi4uY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiID8gW1xuICAgICAgICAgICAgICAgIGRlZi5pdGVtcy5sZW5ndGhcbiAgICAgICAgICAgIF0gOiBbXVxuICAgICAgICBdXG4gICAgfSkgOiBudWxsO1xuICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICBqc29uLnByZWZpeEl0ZW1zID0gcHJlZml4SXRlbXM7XG4gICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICBqc29uLml0ZW1zID0gcmVzdDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSB7XG4gICAgICAgIGpzb24uaXRlbXMgPSB7XG4gICAgICAgICAgICBhbnlPZjogcHJlZml4SXRlbXNcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgIGpzb24uaXRlbXMuYW55T2YucHVzaChyZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBqc29uLm1pbkl0ZW1zID0gcHJlZml4SXRlbXMubGVuZ3RoO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIGpzb24ubWF4SXRlbXMgPSBwcmVmaXhJdGVtcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBqc29uLml0ZW1zID0gcHJlZml4SXRlbXM7XG4gICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICBqc29uLmFkZGl0aW9uYWxJdGVtcyA9IHJlc3Q7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbGVuZ3RoXG4gICAgY29uc3QgeyBtaW5pbXVtLCBtYXhpbXVtIH0gPSBzY2hlbWEuX3pvZC5iYWc7XG4gICAgaWYgKHR5cGVvZiBtaW5pbXVtID09PSBcIm51bWJlclwiKSBqc29uLm1pbkl0ZW1zID0gbWluaW11bTtcbiAgICBpZiAodHlwZW9mIG1heGltdW0gPT09IFwibnVtYmVyXCIpIGpzb24ubWF4SXRlbXMgPSBtYXhpbXVtO1xufTtcbmV4cG9ydCBjb25zdCByZWNvcmRQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpPT57XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBqc29uLnR5cGUgPSBcIm9iamVjdFwiO1xuICAgIC8vIEZvciBsb29zZVJlY29yZCB3aXRoIHJlZ2V4IHBhdHRlcm5zLCB1c2UgcGF0dGVyblByb3BlcnRpZXNcbiAgICAvLyBUaGlzIGNvcnJlY3RseSByZXByZXNlbnRzIFwib25seSB2YWxpZGF0ZSBrZXlzIG1hdGNoaW5nIHRoZSBwYXR0ZXJuXCIgc2VtYW50aWNzXG4gICAgLy8gYW5kIGNvbXBvc2VzIHdlbGwgd2l0aCBhbGxPZiAoaW50ZXJzZWN0aW9ucylcbiAgICBjb25zdCBrZXlUeXBlID0gZGVmLmtleVR5cGU7XG4gICAgY29uc3Qga2V5QmFnID0ga2V5VHlwZS5fem9kLmJhZztcbiAgICBjb25zdCBwYXR0ZXJucyA9IGtleUJhZz8ucGF0dGVybnM7XG4gICAgaWYgKGRlZi5tb2RlID09PSBcImxvb3NlXCIgJiYgcGF0dGVybnMgJiYgcGF0dGVybnMuc2l6ZSA+IDApIHtcbiAgICAgICAgLy8gVXNlIHBhdHRlcm5Qcm9wZXJ0aWVzIGZvciBsb29zZVJlY29yZCB3aXRoIHJlZ2V4IHBhdHRlcm5zXG4gICAgICAgIGNvbnN0IHZhbHVlU2NoZW1hID0gcHJvY2VzcyhkZWYudmFsdWVUeXBlLCBjdHgsIHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIHBhdGg6IFtcbiAgICAgICAgICAgICAgICAuLi5wYXJhbXMucGF0aCxcbiAgICAgICAgICAgICAgICBcInBhdHRlcm5Qcm9wZXJ0aWVzXCIsXG4gICAgICAgICAgICAgICAgXCIqXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICAgIGpzb24ucGF0dGVyblByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKXtcbiAgICAgICAgICAgIGpzb24ucGF0dGVyblByb3BlcnRpZXNbcGF0dGVybi5zb3VyY2VdID0gdmFsdWVTY2hlbWE7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZhdWx0IGJlaGF2aW9yOiB1c2UgcHJvcGVydHlOYW1lcyArIGFkZGl0aW9uYWxQcm9wZXJ0aWVzXG4gICAgICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA3XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0yMDIwLTEyXCIpIHtcbiAgICAgICAgICAgIGpzb24ucHJvcGVydHlOYW1lcyA9IHByb2Nlc3MoZGVmLmtleVR5cGUsIGN0eCwge1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBwYXRoOiBbXG4gICAgICAgICAgICAgICAgICAgIC4uLnBhcmFtcy5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBcInByb3BlcnR5TmFtZXNcIlxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMgPSBwcm9jZXNzKGRlZi52YWx1ZVR5cGUsIGN0eCwge1xuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgcGF0aDogW1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtcy5wYXRoLFxuICAgICAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIlxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gQWRkIHJlcXVpcmVkIGZvciBrZXlzIHdpdGggZGlzY3JldGUgdmFsdWVzIChlbnVtLCBsaXRlcmFsLCBldGMuKVxuICAgIGNvbnN0IGtleVZhbHVlcyA9IGtleVR5cGUuX3pvZC52YWx1ZXM7XG4gICAgaWYgKGtleVZhbHVlcykge1xuICAgICAgICBjb25zdCB2YWxpZEtleVZhbHVlcyA9IFtcbiAgICAgICAgICAgIC4uLmtleVZhbHVlc1xuICAgICAgICBdLmZpbHRlcigodik9PnR5cGVvZiB2ID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2ID09PSBcIm51bWJlclwiKTtcbiAgICAgICAgaWYgKHZhbGlkS2V5VmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGpzb24ucmVxdWlyZWQgPSB2YWxpZEtleVZhbHVlcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5leHBvcnQgY29uc3QgbnVsbGFibGVQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcyk9PntcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgaW5uZXIgPSBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIikge1xuICAgICAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAgICAgIGpzb24ubnVsbGFibGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGpzb24uYW55T2YgPSBbXG4gICAgICAgICAgICBpbm5lcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm51bGxcIlxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3Qgbm9ub3B0aW9uYWxQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpPT57XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG59O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcyk9PntcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgcHJvY2VzcyhkZWYuaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gZGVmLmlubmVyVHlwZTtcbiAgICBqc29uLmRlZmF1bHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZi5kZWZhdWx0VmFsdWUpKTtcbn07XG5leHBvcnQgY29uc3QgcHJlZmF1bHRQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcyk9PntcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgcHJvY2VzcyhkZWYuaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gZGVmLmlubmVyVHlwZTtcbiAgICBpZiAoY3R4LmlvID09PSBcImlucHV0XCIpIGpzb24uX3ByZWZhdWx0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWYuZGVmYXVsdFZhbHVlKSk7XG59O1xuZXhwb3J0IGNvbnN0IGNhdGNoUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBqc29uLCBwYXJhbXMpPT57XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAgbGV0IGNhdGNoVmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgICAgY2F0Y2hWYWx1ZSA9IGRlZi5jYXRjaFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfSBjYXRjaCAge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEeW5hbWljIGNhdGNoIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG4gICAganNvbi5kZWZhdWx0ID0gY2F0Y2hWYWx1ZTtcbn07XG5leHBvcnQgY29uc3QgcGlwZVByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcyk9PntcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgaW5uZXJUeXBlID0gY3R4LmlvID09PSBcImlucHV0XCIgPyBkZWYuaW4uX3pvZC5kZWYudHlwZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGRlZi5vdXQgOiBkZWYuaW4gOiBkZWYub3V0O1xuICAgIHByb2Nlc3MoaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gaW5uZXJUeXBlO1xufTtcbmV4cG9ydCBjb25zdCByZWFkb25seVByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgcGFyYW1zKT0+e1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xuICAgIGpzb24ucmVhZE9ubHkgPSB0cnVlO1xufTtcbmV4cG9ydCBjb25zdCBwcm9taXNlUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKT0+e1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xufTtcbmV4cG9ydCBjb25zdCBvcHRpb25hbFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcyk9PntcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgcHJvY2VzcyhkZWYuaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gZGVmLmlubmVyVHlwZTtcbn07XG5leHBvcnQgY29uc3QgbGF6eVByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcyk9PntcbiAgICBjb25zdCBpbm5lclR5cGUgPSBzY2hlbWEuX3pvZC5pbm5lclR5cGU7XG4gICAgcHJvY2Vzcyhpbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBpbm5lclR5cGU7XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT0gQUxMIFBST0NFU1NPUlMgPT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCBjb25zdCBhbGxQcm9jZXNzb3JzID0ge1xuICAgIHN0cmluZzogc3RyaW5nUHJvY2Vzc29yLFxuICAgIG51bWJlcjogbnVtYmVyUHJvY2Vzc29yLFxuICAgIGJvb2xlYW46IGJvb2xlYW5Qcm9jZXNzb3IsXG4gICAgYmlnaW50OiBiaWdpbnRQcm9jZXNzb3IsXG4gICAgc3ltYm9sOiBzeW1ib2xQcm9jZXNzb3IsXG4gICAgbnVsbDogbnVsbFByb2Nlc3NvcixcbiAgICB1bmRlZmluZWQ6IHVuZGVmaW5lZFByb2Nlc3NvcixcbiAgICB2b2lkOiB2b2lkUHJvY2Vzc29yLFxuICAgIG5ldmVyOiBuZXZlclByb2Nlc3NvcixcbiAgICBhbnk6IGFueVByb2Nlc3NvcixcbiAgICB1bmtub3duOiB1bmtub3duUHJvY2Vzc29yLFxuICAgIGRhdGU6IGRhdGVQcm9jZXNzb3IsXG4gICAgZW51bTogZW51bVByb2Nlc3NvcixcbiAgICBsaXRlcmFsOiBsaXRlcmFsUHJvY2Vzc29yLFxuICAgIG5hbjogbmFuUHJvY2Vzc29yLFxuICAgIHRlbXBsYXRlX2xpdGVyYWw6IHRlbXBsYXRlTGl0ZXJhbFByb2Nlc3NvcixcbiAgICBmaWxlOiBmaWxlUHJvY2Vzc29yLFxuICAgIHN1Y2Nlc3M6IHN1Y2Nlc3NQcm9jZXNzb3IsXG4gICAgY3VzdG9tOiBjdXN0b21Qcm9jZXNzb3IsXG4gICAgZnVuY3Rpb246IGZ1bmN0aW9uUHJvY2Vzc29yLFxuICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtUHJvY2Vzc29yLFxuICAgIG1hcDogbWFwUHJvY2Vzc29yLFxuICAgIHNldDogc2V0UHJvY2Vzc29yLFxuICAgIGFycmF5OiBhcnJheVByb2Nlc3NvcixcbiAgICBvYmplY3Q6IG9iamVjdFByb2Nlc3NvcixcbiAgICB1bmlvbjogdW5pb25Qcm9jZXNzb3IsXG4gICAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25Qcm9jZXNzb3IsXG4gICAgdHVwbGU6IHR1cGxlUHJvY2Vzc29yLFxuICAgIHJlY29yZDogcmVjb3JkUHJvY2Vzc29yLFxuICAgIG51bGxhYmxlOiBudWxsYWJsZVByb2Nlc3NvcixcbiAgICBub25vcHRpb25hbDogbm9ub3B0aW9uYWxQcm9jZXNzb3IsXG4gICAgZGVmYXVsdDogZGVmYXVsdFByb2Nlc3NvcixcbiAgICBwcmVmYXVsdDogcHJlZmF1bHRQcm9jZXNzb3IsXG4gICAgY2F0Y2g6IGNhdGNoUHJvY2Vzc29yLFxuICAgIHBpcGU6IHBpcGVQcm9jZXNzb3IsXG4gICAgcmVhZG9ubHk6IHJlYWRvbmx5UHJvY2Vzc29yLFxuICAgIHByb21pc2U6IHByb21pc2VQcm9jZXNzb3IsXG4gICAgb3B0aW9uYWw6IG9wdGlvbmFsUHJvY2Vzc29yLFxuICAgIGxhenk6IGxhenlQcm9jZXNzb3Jcbn07XG5leHBvcnQgZnVuY3Rpb24gdG9KU09OU2NoZW1hKGlucHV0LCBwYXJhbXMpIHtcbiAgICBpZiAoXCJfaWRtYXBcIiBpbiBpbnB1dCkge1xuICAgICAgICAvLyBSZWdpc3RyeSBjYXNlXG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gaW5wdXQ7XG4gICAgICAgIGNvbnN0IGN0eCA9IGluaXRpYWxpemVDb250ZXh0KHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IGFsbFByb2Nlc3NvcnNcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRlZnMgPSB7fTtcbiAgICAgICAgLy8gRmlyc3QgcGFzczogcHJvY2VzcyBhbGwgc2NoZW1hcyB0byBidWlsZCB0aGUgc2VlbiBtYXBcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5faWRtYXAuZW50cmllcygpKXtcbiAgICAgICAgICAgIGNvbnN0IFtfLCBzY2hlbWFdID0gZW50cnk7XG4gICAgICAgICAgICBwcm9jZXNzKHNjaGVtYSwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY2hlbWFzID0ge307XG4gICAgICAgIGNvbnN0IGV4dGVybmFsID0ge1xuICAgICAgICAgICAgcmVnaXN0cnksXG4gICAgICAgICAgICB1cmk6IHBhcmFtcz8udXJpLFxuICAgICAgICAgICAgZGVmc1xuICAgICAgICB9O1xuICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbnRleHQgd2l0aCBleHRlcm5hbCBjb25maWd1cmF0aW9uXG4gICAgICAgIGN0eC5leHRlcm5hbCA9IGV4dGVybmFsO1xuICAgICAgICAvLyBTZWNvbmQgcGFzczogZW1pdCBlYWNoIHNjaGVtYVxuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlZ2lzdHJ5Ll9pZG1hcC5lbnRyaWVzKCkpe1xuICAgICAgICAgICAgY29uc3QgW2tleSwgc2NoZW1hXSA9IGVudHJ5O1xuICAgICAgICAgICAgZXh0cmFjdERlZnMoY3R4LCBzY2hlbWEpO1xuICAgICAgICAgICAgc2NoZW1hc1trZXldID0gZmluYWxpemUoY3R4LCBzY2hlbWEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkZWZzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZzU2VnbWVudCA9IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiID8gXCIkZGVmc1wiIDogXCJkZWZpbml0aW9uc1wiO1xuICAgICAgICAgICAgc2NoZW1hcy5fX3NoYXJlZCA9IHtcbiAgICAgICAgICAgICAgICBbZGVmc1NlZ21lbnRdOiBkZWZzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWFzXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIFNpbmdsZSBzY2hlbWEgY2FzZVxuICAgIGNvbnN0IGN0eCA9IGluaXRpYWxpemVDb250ZXh0KHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBwcm9jZXNzb3JzOiBhbGxQcm9jZXNzb3JzXG4gICAgfSk7XG4gICAgcHJvY2VzcyhpbnB1dCwgY3R4KTtcbiAgICBleHRyYWN0RGVmcyhjdHgsIGlucHV0KTtcbiAgICByZXR1cm4gZmluYWxpemUoY3R4LCBpbnB1dCk7XG59XG4iLCAiaW1wb3J0IHsgYWxsUHJvY2Vzc29ycyB9IGZyb20gXCIuL2pzb24tc2NoZW1hLXByb2Nlc3NvcnMuanNcIjtcbmltcG9ydCB7IGV4dHJhY3REZWZzLCBmaW5hbGl6ZSwgaW5pdGlhbGl6ZUNvbnRleHQsIHByb2Nlc3MgfSBmcm9tIFwiLi90by1qc29uLXNjaGVtYS5qc1wiO1xuLyoqXG4gKiBMZWdhY3kgY2xhc3MtYmFzZWQgaW50ZXJmYWNlIGZvciBKU09OIFNjaGVtYSBnZW5lcmF0aW9uLlxuICogVGhpcyBjbGFzcyB3cmFwcyB0aGUgbmV3IGZ1bmN0aW9uYWwgaW1wbGVtZW50YXRpb24gdG8gcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYHRvSlNPTlNjaGVtYWAgZnVuY3Rpb24gaW5zdGVhZCBmb3IgbmV3IGNvZGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIExlZ2FjeSB1c2FnZSAoc3RpbGwgc3VwcG9ydGVkKVxuICogY29uc3QgZ2VuID0gbmV3IEpTT05TY2hlbWFHZW5lcmF0b3IoeyB0YXJnZXQ6IFwiZHJhZnQtMDdcIiB9KTtcbiAqIGdlbi5wcm9jZXNzKHNjaGVtYSk7XG4gKiBjb25zdCByZXN1bHQgPSBnZW4uZW1pdChzY2hlbWEpO1xuICpcbiAqIC8vIFByZWZlcnJlZCBtb2Rlcm4gdXNhZ2VcbiAqIGNvbnN0IHJlc3VsdCA9IHRvSlNPTlNjaGVtYShzY2hlbWEsIHsgdGFyZ2V0OiBcImRyYWZ0LTA3XCIgfSk7XG4gKiBgYGBcbiAqLyBleHBvcnQgY2xhc3MgSlNPTlNjaGVtYUdlbmVyYXRvciB7XG4gICAgLyoqIEBkZXByZWNhdGVkIEFjY2VzcyB2aWEgY3R4IGluc3RlYWQgKi8gZ2V0IG1ldGFkYXRhUmVnaXN0cnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC5tZXRhZGF0YVJlZ2lzdHJ5O1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgQWNjZXNzIHZpYSBjdHggaW5zdGVhZCAqLyBnZXQgdGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudGFyZ2V0O1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgQWNjZXNzIHZpYSBjdHggaW5zdGVhZCAqLyBnZXQgdW5yZXByZXNlbnRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudW5yZXByZXNlbnRhYmxlO1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgQWNjZXNzIHZpYSBjdHggaW5zdGVhZCAqLyBnZXQgb3ZlcnJpZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0eC5vdmVycmlkZTtcbiAgICB9XG4gICAgLyoqIEBkZXByZWNhdGVkIEFjY2VzcyB2aWEgY3R4IGluc3RlYWQgKi8gZ2V0IGlvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHguaW87XG4gICAgfVxuICAgIC8qKiBAZGVwcmVjYXRlZCBBY2Nlc3MgdmlhIGN0eCBpbnN0ZWFkICovIGdldCBjb3VudGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHguY291bnRlcjtcbiAgICB9XG4gICAgc2V0IGNvdW50ZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jdHguY291bnRlciA9IHZhbHVlO1xuICAgIH1cbiAgICAvKiogQGRlcHJlY2F0ZWQgQWNjZXNzIHZpYSBjdHggaW5zdGVhZCAqLyBnZXQgc2VlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnNlZW47XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcyl7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSB0YXJnZXQgZm9yIGludGVybmFsIGNvbnRleHRcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRUYXJnZXQgPSBwYXJhbXM/LnRhcmdldCA/PyBcImRyYWZ0LTIwMjAtMTJcIjtcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRUYXJnZXQgPT09IFwiZHJhZnQtNFwiKSBub3JtYWxpemVkVGFyZ2V0ID0gXCJkcmFmdC0wNFwiO1xuICAgICAgICBpZiAobm9ybWFsaXplZFRhcmdldCA9PT0gXCJkcmFmdC03XCIpIG5vcm1hbGl6ZWRUYXJnZXQgPSBcImRyYWZ0LTA3XCI7XG4gICAgICAgIHRoaXMuY3R4ID0gaW5pdGlhbGl6ZUNvbnRleHQoe1xuICAgICAgICAgICAgcHJvY2Vzc29yczogYWxsUHJvY2Vzc29ycyxcbiAgICAgICAgICAgIHRhcmdldDogbm9ybWFsaXplZFRhcmdldCxcbiAgICAgICAgICAgIC4uLnBhcmFtcz8ubWV0YWRhdGEgJiYge1xuICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBwYXJhbXMubWV0YWRhdGFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi5wYXJhbXM/LnVucmVwcmVzZW50YWJsZSAmJiB7XG4gICAgICAgICAgICAgICAgdW5yZXByZXNlbnRhYmxlOiBwYXJhbXMudW5yZXByZXNlbnRhYmxlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4ucGFyYW1zPy5vdmVycmlkZSAmJiB7XG4gICAgICAgICAgICAgICAgb3ZlcnJpZGU6IHBhcmFtcy5vdmVycmlkZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLnBhcmFtcz8uaW8gJiYge1xuICAgICAgICAgICAgICAgIGlvOiBwYXJhbXMuaW9cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgYSBzY2hlbWEgdG8gcHJlcGFyZSBpdCBmb3IgSlNPTiBTY2hlbWEgZ2VuZXJhdGlvbi5cbiAgICAgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBlbWl0KCkuXG4gICAgICovIHByb2Nlc3Moc2NoZW1hLCBfcGFyYW1zID0ge1xuICAgICAgICBwYXRoOiBbXSxcbiAgICAgICAgc2NoZW1hUGF0aDogW11cbiAgICB9KSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzKHNjaGVtYSwgdGhpcy5jdHgsIF9wYXJhbXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWl0IHRoZSBmaW5hbCBKU09OIFNjaGVtYSBhZnRlciBwcm9jZXNzaW5nLlxuICAgICAqIE11c3QgY2FsbCBwcm9jZXNzKCkgZmlyc3QuXG4gICAgICovIGVtaXQoc2NoZW1hLCBfcGFyYW1zKSB7XG4gICAgICAgIC8vIEFwcGx5IGVtaXQgcGFyYW1zIHRvIHRoZSBjb250ZXh0XG4gICAgICAgIGlmIChfcGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoX3BhcmFtcy5jeWNsZXMpIHRoaXMuY3R4LmN5Y2xlcyA9IF9wYXJhbXMuY3ljbGVzO1xuICAgICAgICAgICAgaWYgKF9wYXJhbXMucmV1c2VkKSB0aGlzLmN0eC5yZXVzZWQgPSBfcGFyYW1zLnJldXNlZDtcbiAgICAgICAgICAgIGlmIChfcGFyYW1zLmV4dGVybmFsKSB0aGlzLmN0eC5leHRlcm5hbCA9IF9wYXJhbXMuZXh0ZXJuYWw7XG4gICAgICAgIH1cbiAgICAgICAgZXh0cmFjdERlZnModGhpcy5jdHgsIHNjaGVtYSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmFsaXplKHRoaXMuY3R4LCBzY2hlbWEpO1xuICAgICAgICAvLyBTdHJpcCB+c3RhbmRhcmQgcHJvcGVydHkgdG8gbWF0Y2ggb2xkIGltcGxlbWVudGF0aW9uJ3MgcmV0dXJuIHR5cGVcbiAgICAgICAgY29uc3QgeyBcIn5zdGFuZGFyZFwiOiBfLCAuLi5wbGFpblJlc3VsdCB9ID0gcmVzdWx0O1xuICAgICAgICByZXR1cm4gcGxhaW5SZXN1bHQ7XG4gICAgfVxufVxuIiwgImV4cG9ydCB7IH07XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0IHsgdXRpbCB9IGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgKiBhcyBwcm9jZXNzb3JzIGZyb20gXCIuLi9jb3JlL2pzb24tc2NoZW1hLXByb2Nlc3NvcnMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZCwgY3JlYXRlVG9KU09OU2NoZW1hTWV0aG9kIH0gZnJvbSBcIi4uL2NvcmUvdG8tanNvbi1zY2hlbWEuanNcIjtcbmltcG9ydCAqIGFzIGNoZWNrcyBmcm9tIFwiLi9jaGVja3MuanNcIjtcbmltcG9ydCAqIGFzIGlzbyBmcm9tIFwiLi9pc28uanNcIjtcbmltcG9ydCAqIGFzIHBhcnNlIGZyb20gXCIuL3BhcnNlLmpzXCI7XG5leHBvcnQgY29uc3QgWm9kVHlwZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RUeXBlXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgT2JqZWN0LmFzc2lnbihpbnN0W1wifnN0YW5kYXJkXCJdLCB7XG4gICAgICAgIGpzb25TY2hlbWE6IHtcbiAgICAgICAgICAgIGlucHV0OiBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2QoaW5zdCwgXCJpbnB1dFwiKSxcbiAgICAgICAgICAgIG91dHB1dDogY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kKGluc3QsIFwib3V0cHV0XCIpXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpbnN0LnRvSlNPTlNjaGVtYSA9IGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZChpbnN0LCB7fSk7XG4gICAgaW5zdC5kZWYgPSBkZWY7XG4gICAgaW5zdC50eXBlID0gZGVmLnR5cGU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwiX2RlZlwiLCB7XG4gICAgICAgIHZhbHVlOiBkZWZcbiAgICB9KTtcbiAgICAvLyBiYXNlIG1ldGhvZHNcbiAgICBpbnN0LmNoZWNrID0gKC4uLmNoZWNrcyk9PntcbiAgICAgICAgcmV0dXJuIGluc3QuY2xvbmUodXRpbC5tZXJnZURlZnMoZGVmLCB7XG4gICAgICAgICAgICBjaGVja3M6IFtcbiAgICAgICAgICAgICAgICAuLi5kZWYuY2hlY2tzID8/IFtdLFxuICAgICAgICAgICAgICAgIC4uLmNoZWNrcy5tYXAoKGNoKT0+dHlwZW9mIGNoID09PSBcImZ1bmN0aW9uXCIgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfem9kOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2s6IGNoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazogXCJjdXN0b21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25hdHRhY2g6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gOiBjaClcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSksIHtcbiAgICAgICAgICAgIHBhcmVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGluc3Qud2l0aCA9IGluc3QuY2hlY2s7XG4gICAgaW5zdC5jbG9uZSA9IChkZWYsIHBhcmFtcyk9PmNvcmUuY2xvbmUoaW5zdCwgZGVmLCBwYXJhbXMpO1xuICAgIGluc3QuYnJhbmQgPSAoKT0+aW5zdDtcbiAgICBpbnN0LnJlZ2lzdGVyID0gKHJlZywgbWV0YSk9PntcbiAgICAgICAgcmVnLmFkZChpbnN0LCBtZXRhKTtcbiAgICAgICAgcmV0dXJuIGluc3Q7XG4gICAgfTtcbiAgICAvLyBwYXJzaW5nXG4gICAgaW5zdC5wYXJzZSA9IChkYXRhLCBwYXJhbXMpPT5wYXJzZS5wYXJzZShpbnN0LCBkYXRhLCBwYXJhbXMsIHtcbiAgICAgICAgICAgIGNhbGxlZTogaW5zdC5wYXJzZVxuICAgICAgICB9KTtcbiAgICBpbnN0LnNhZmVQYXJzZSA9IChkYXRhLCBwYXJhbXMpPT5wYXJzZS5zYWZlUGFyc2UoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnBhcnNlQXN5bmMgPSBhc3luYyAoZGF0YSwgcGFyYW1zKT0+cGFyc2UucGFyc2VBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMsIHtcbiAgICAgICAgICAgIGNhbGxlZTogaW5zdC5wYXJzZUFzeW5jXG4gICAgICAgIH0pO1xuICAgIGluc3Quc2FmZVBhcnNlQXN5bmMgPSBhc3luYyAoZGF0YSwgcGFyYW1zKT0+cGFyc2Uuc2FmZVBhcnNlQXN5bmMoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnNwYSA9IGluc3Quc2FmZVBhcnNlQXN5bmM7XG4gICAgLy8gZW5jb2RpbmcvZGVjb2RpbmdcbiAgICBpbnN0LmVuY29kZSA9IChkYXRhLCBwYXJhbXMpPT5wYXJzZS5lbmNvZGUoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LmRlY29kZSA9IChkYXRhLCBwYXJhbXMpPT5wYXJzZS5kZWNvZGUoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LmVuY29kZUFzeW5jID0gYXN5bmMgKGRhdGEsIHBhcmFtcyk9PnBhcnNlLmVuY29kZUFzeW5jKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5kZWNvZGVBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpPT5wYXJzZS5kZWNvZGVBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3Quc2FmZUVuY29kZSA9IChkYXRhLCBwYXJhbXMpPT5wYXJzZS5zYWZlRW5jb2RlKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5zYWZlRGVjb2RlID0gKGRhdGEsIHBhcmFtcyk9PnBhcnNlLnNhZmVEZWNvZGUoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnNhZmVFbmNvZGVBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpPT5wYXJzZS5zYWZlRW5jb2RlQXN5bmMoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnNhZmVEZWNvZGVBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpPT5wYXJzZS5zYWZlRGVjb2RlQXN5bmMoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICAvLyByZWZpbmVtZW50c1xuICAgIGluc3QucmVmaW5lID0gKGNoZWNrLCBwYXJhbXMpPT5pbnN0LmNoZWNrKHJlZmluZShjaGVjaywgcGFyYW1zKSk7XG4gICAgaW5zdC5zdXBlclJlZmluZSA9IChyZWZpbmVtZW50KT0+aW5zdC5jaGVjayhzdXBlclJlZmluZShyZWZpbmVtZW50KSk7XG4gICAgaW5zdC5vdmVyd3JpdGUgPSAoZm4pPT5pbnN0LmNoZWNrKGNoZWNrcy5vdmVyd3JpdGUoZm4pKTtcbiAgICAvLyB3cmFwcGVyc1xuICAgIGluc3Qub3B0aW9uYWwgPSAoKT0+b3B0aW9uYWwoaW5zdCk7XG4gICAgaW5zdC5leGFjdE9wdGlvbmFsID0gKCk9PmV4YWN0T3B0aW9uYWwoaW5zdCk7XG4gICAgaW5zdC5udWxsYWJsZSA9ICgpPT5udWxsYWJsZShpbnN0KTtcbiAgICBpbnN0Lm51bGxpc2ggPSAoKT0+b3B0aW9uYWwobnVsbGFibGUoaW5zdCkpO1xuICAgIGluc3Qubm9ub3B0aW9uYWwgPSAocGFyYW1zKT0+bm9ub3B0aW9uYWwoaW5zdCwgcGFyYW1zKTtcbiAgICBpbnN0LmFycmF5ID0gKCk9PmFycmF5KGluc3QpO1xuICAgIGluc3Qub3IgPSAoYXJnKT0+dW5pb24oW1xuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGFyZ1xuICAgICAgICBdKTtcbiAgICBpbnN0LmFuZCA9IChhcmcpPT5pbnRlcnNlY3Rpb24oaW5zdCwgYXJnKTtcbiAgICBpbnN0LnRyYW5zZm9ybSA9ICh0eCk9PnBpcGUoaW5zdCwgdHJhbnNmb3JtKHR4KSk7XG4gICAgaW5zdC5kZWZhdWx0ID0gKGRlZik9Pl9kZWZhdWx0KGluc3QsIGRlZik7XG4gICAgaW5zdC5wcmVmYXVsdCA9IChkZWYpPT5wcmVmYXVsdChpbnN0LCBkZWYpO1xuICAgIC8vIGluc3QuY29hbGVzY2UgPSAoZGVmLCBwYXJhbXMpID0+IGNvYWxlc2NlKGluc3QsIGRlZiwgcGFyYW1zKTtcbiAgICBpbnN0LmNhdGNoID0gKHBhcmFtcyk9Pl9jYXRjaChpbnN0LCBwYXJhbXMpO1xuICAgIGluc3QucGlwZSA9ICh0YXJnZXQpPT5waXBlKGluc3QsIHRhcmdldCk7XG4gICAgaW5zdC5yZWFkb25seSA9ICgpPT5yZWFkb25seShpbnN0KTtcbiAgICAvLyBtZXRhXG4gICAgaW5zdC5kZXNjcmliZSA9IChkZXNjcmlwdGlvbik9PntcbiAgICAgICAgY29uc3QgY2wgPSBpbnN0LmNsb25lKCk7XG4gICAgICAgIGNvcmUuZ2xvYmFsUmVnaXN0cnkuYWRkKGNsLCB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwiZGVzY3JpcHRpb25cIiwge1xuICAgICAgICBnZXQgKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuZ2xvYmFsUmVnaXN0cnkuZ2V0KGluc3QpPy5kZXNjcmlwdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgaW5zdC5tZXRhID0gKC4uLmFyZ3MpPT57XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuZ2xvYmFsUmVnaXN0cnkuZ2V0KGluc3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsID0gaW5zdC5jbG9uZSgpO1xuICAgICAgICBjb3JlLmdsb2JhbFJlZ2lzdHJ5LmFkZChjbCwgYXJnc1swXSk7XG4gICAgICAgIHJldHVybiBjbDtcbiAgICB9O1xuICAgIC8vIGhlbHBlcnNcbiAgICBpbnN0LmlzT3B0aW9uYWwgPSAoKT0+aW5zdC5zYWZlUGFyc2UodW5kZWZpbmVkKS5zdWNjZXNzO1xuICAgIGluc3QuaXNOdWxsYWJsZSA9ICgpPT5pbnN0LnNhZmVQYXJzZShudWxsKS5zdWNjZXNzO1xuICAgIGluc3QuYXBwbHkgPSAoZm4pPT5mbihpbnN0KTtcbiAgICByZXR1cm4gaW5zdDtcbn0pO1xuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgY29uc3QgX1pvZFN0cmluZyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJfWm9kU3RyaW5nXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kU3RyaW5nLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLnN0cmluZ1Byb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICBpbnN0LmZvcm1hdCA9IGJhZy5mb3JtYXQgPz8gbnVsbDtcbiAgICBpbnN0Lm1pbkxlbmd0aCA9IGJhZy5taW5pbXVtID8/IG51bGw7XG4gICAgaW5zdC5tYXhMZW5ndGggPSBiYWcubWF4aW11bSA/PyBudWxsO1xuICAgIC8vIHZhbGlkYXRpb25zXG4gICAgaW5zdC5yZWdleCA9ICguLi5hcmdzKT0+aW5zdC5jaGVjayhjaGVja3MucmVnZXgoLi4uYXJncykpO1xuICAgIGluc3QuaW5jbHVkZXMgPSAoLi4uYXJncyk9Pmluc3QuY2hlY2soY2hlY2tzLmluY2x1ZGVzKC4uLmFyZ3MpKTtcbiAgICBpbnN0LnN0YXJ0c1dpdGggPSAoLi4uYXJncyk9Pmluc3QuY2hlY2soY2hlY2tzLnN0YXJ0c1dpdGgoLi4uYXJncykpO1xuICAgIGluc3QuZW5kc1dpdGggPSAoLi4uYXJncyk9Pmluc3QuY2hlY2soY2hlY2tzLmVuZHNXaXRoKC4uLmFyZ3MpKTtcbiAgICBpbnN0Lm1pbiA9ICguLi5hcmdzKT0+aW5zdC5jaGVjayhjaGVja3MubWluTGVuZ3RoKC4uLmFyZ3MpKTtcbiAgICBpbnN0Lm1heCA9ICguLi5hcmdzKT0+aW5zdC5jaGVjayhjaGVja3MubWF4TGVuZ3RoKC4uLmFyZ3MpKTtcbiAgICBpbnN0Lmxlbmd0aCA9ICguLi5hcmdzKT0+aW5zdC5jaGVjayhjaGVja3MubGVuZ3RoKC4uLmFyZ3MpKTtcbiAgICBpbnN0Lm5vbmVtcHR5ID0gKC4uLmFyZ3MpPT5pbnN0LmNoZWNrKGNoZWNrcy5taW5MZW5ndGgoMSwgLi4uYXJncykpO1xuICAgIGluc3QubG93ZXJjYXNlID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY2hlY2tzLmxvd2VyY2FzZShwYXJhbXMpKTtcbiAgICBpbnN0LnVwcGVyY2FzZSA9IChwYXJhbXMpPT5pbnN0LmNoZWNrKGNoZWNrcy51cHBlcmNhc2UocGFyYW1zKSk7XG4gICAgLy8gdHJhbnNmb3Jtc1xuICAgIGluc3QudHJpbSA9ICgpPT5pbnN0LmNoZWNrKGNoZWNrcy50cmltKCkpO1xuICAgIGluc3Qubm9ybWFsaXplID0gKC4uLmFyZ3MpPT5pbnN0LmNoZWNrKGNoZWNrcy5ub3JtYWxpemUoLi4uYXJncykpO1xuICAgIGluc3QudG9Mb3dlckNhc2UgPSAoKT0+aW5zdC5jaGVjayhjaGVja3MudG9Mb3dlckNhc2UoKSk7XG4gICAgaW5zdC50b1VwcGVyQ2FzZSA9ICgpPT5pbnN0LmNoZWNrKGNoZWNrcy50b1VwcGVyQ2FzZSgpKTtcbiAgICBpbnN0LnNsdWdpZnkgPSAoKT0+aW5zdC5jaGVjayhjaGVja3Muc2x1Z2lmeSgpKTtcbn0pO1xuZXhwb3J0IGNvbnN0IFpvZFN0cmluZyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RTdHJpbmdcIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RTdHJpbmcuaW5pdChpbnN0LCBkZWYpO1xuICAgIF9ab2RTdHJpbmcuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuZW1haWwgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhjb3JlLl9lbWFpbChab2RFbWFpbCwgcGFyYW1zKSk7XG4gICAgaW5zdC51cmwgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhjb3JlLl91cmwoWm9kVVJMLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmp3dCA9IChwYXJhbXMpPT5pbnN0LmNoZWNrKGNvcmUuX2p3dChab2RKV1QsIHBhcmFtcykpO1xuICAgIGluc3QuZW1vamkgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhjb3JlLl9lbW9qaShab2RFbW9qaSwgcGFyYW1zKSk7XG4gICAgaW5zdC5ndWlkID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fZ3VpZChab2RHVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LnV1aWQgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhjb3JlLl91dWlkKFpvZFVVSUQsIHBhcmFtcykpO1xuICAgIGluc3QudXVpZHY0ID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fdXVpZHY0KFpvZFVVSUQsIHBhcmFtcykpO1xuICAgIGluc3QudXVpZHY2ID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fdXVpZHY2KFpvZFVVSUQsIHBhcmFtcykpO1xuICAgIGluc3QudXVpZHY3ID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fdXVpZHY3KFpvZFVVSUQsIHBhcmFtcykpO1xuICAgIGluc3QubmFub2lkID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fbmFub2lkKFpvZE5hbm9JRCwgcGFyYW1zKSk7XG4gICAgaW5zdC5ndWlkID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fZ3VpZChab2RHVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LmN1aWQgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhjb3JlLl9jdWlkKFpvZENVSUQsIHBhcmFtcykpO1xuICAgIGluc3QuY3VpZDIgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhjb3JlLl9jdWlkMihab2RDVUlEMiwgcGFyYW1zKSk7XG4gICAgaW5zdC51bGlkID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fdWxpZChab2RVTElELCBwYXJhbXMpKTtcbiAgICBpbnN0LmJhc2U2NCA9IChwYXJhbXMpPT5pbnN0LmNoZWNrKGNvcmUuX2Jhc2U2NChab2RCYXNlNjQsIHBhcmFtcykpO1xuICAgIGluc3QuYmFzZTY0dXJsID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fYmFzZTY0dXJsKFpvZEJhc2U2NFVSTCwgcGFyYW1zKSk7XG4gICAgaW5zdC54aWQgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhjb3JlLl94aWQoWm9kWElELCBwYXJhbXMpKTtcbiAgICBpbnN0LmtzdWlkID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fa3N1aWQoWm9kS1NVSUQsIHBhcmFtcykpO1xuICAgIGluc3QuaXB2NCA9IChwYXJhbXMpPT5pbnN0LmNoZWNrKGNvcmUuX2lwdjQoWm9kSVB2NCwgcGFyYW1zKSk7XG4gICAgaW5zdC5pcHY2ID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5faXB2Nihab2RJUHY2LCBwYXJhbXMpKTtcbiAgICBpbnN0LmNpZHJ2NCA9IChwYXJhbXMpPT5pbnN0LmNoZWNrKGNvcmUuX2NpZHJ2NChab2RDSURSdjQsIHBhcmFtcykpO1xuICAgIGluc3QuY2lkcnY2ID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fY2lkcnY2KFpvZENJRFJ2NiwgcGFyYW1zKSk7XG4gICAgaW5zdC5lMTY0ID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fZTE2NChab2RFMTY0LCBwYXJhbXMpKTtcbiAgICAvLyBpc29cbiAgICBpbnN0LmRhdGV0aW1lID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soaXNvLmRhdGV0aW1lKHBhcmFtcykpO1xuICAgIGluc3QuZGF0ZSA9IChwYXJhbXMpPT5pbnN0LmNoZWNrKGlzby5kYXRlKHBhcmFtcykpO1xuICAgIGluc3QudGltZSA9IChwYXJhbXMpPT5pbnN0LmNoZWNrKGlzby50aW1lKHBhcmFtcykpO1xuICAgIGluc3QuZHVyYXRpb24gPSAocGFyYW1zKT0+aW5zdC5jaGVjayhpc28uZHVyYXRpb24ocGFyYW1zKSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmcocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3N0cmluZyhab2RTdHJpbmcsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kU3RyaW5nRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFN0cmluZ0Zvcm1hdFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgX1pvZFN0cmluZy5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCBab2RFbWFpbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RFbWFpbFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kRW1haWwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBlbWFpbChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZW1haWwoWm9kRW1haWwsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kR1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RHVUlEXCIsIChpbnN0LCBkZWYpPT57XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RHVUlELmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZ3VpZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZ3VpZChab2RHVUlELCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVVVJRFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kVVVJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHV1aWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3V1aWQoWm9kVVVJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3V1aWR2NChab2RVVUlELCBwYXJhbXMpO1xufVxuLy8gWm9kVVVJRHY2XG5leHBvcnQgZnVuY3Rpb24gdXVpZHY2KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91dWlkdjYoWm9kVVVJRCwgcGFyYW1zKTtcbn1cbi8vIFpvZFVVSUR2N1xuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NyhwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdXVpZHY3KFpvZFVVSUQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kVVJMID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVSTFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kVVJMLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdXJsKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91cmwoWm9kVVJMLCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGh0dHBVcmwocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VybChab2RVUkwsIHtcbiAgICAgICAgcHJvdG9jb2w6IC9eaHR0cHM/JC8sXG4gICAgICAgIGhvc3RuYW1lOiBjb3JlLnJlZ2V4ZXMuZG9tYWluLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRW1vamkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRW1vamlcIiwgKGluc3QsIGRlZik9PntcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZEVtb2ppLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZW1vamkocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2Vtb2ppKFpvZEVtb2ppLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZE5hbm9JRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2ROYW5vSURcIiwgKGluc3QsIGRlZik9PntcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZE5hbm9JRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG5hbm9pZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fbmFub2lkKFpvZE5hbm9JRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RDVUlEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZENVSURcIiwgKGluc3QsIGRlZik9PntcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZENVSUQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBjdWlkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9jdWlkKFpvZENVSUQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kQ1VJRDIgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ1VJRDJcIiwgKGluc3QsIGRlZik9PntcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZENVSUQyLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gY3VpZDIocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2N1aWQyKFpvZENVSUQyLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVMSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVUxJRFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kVUxJRC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVsaWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VsaWQoWm9kVUxJRCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RYSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kWElEXCIsIChpbnN0LCBkZWYpPT57XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RYSUQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB4aWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3hpZChab2RYSUQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kS1NVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kS1NVSURcIiwgKGluc3QsIGRlZik9PntcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZEtTVUlELmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24ga3N1aWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2tzdWlkKFpvZEtTVUlELCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZElQdjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kSVB2NFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kSVB2NC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlwdjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2lwdjQoWm9kSVB2NCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RNQUMgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTUFDXCIsIChpbnN0LCBkZWYpPT57XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RNQUMuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBtYWMocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX21hYyhab2RNQUMsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kSVB2NiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RJUHY2XCIsIChpbnN0LCBkZWYpPT57XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RJUHY2LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gaXB2NihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faXB2Nihab2RJUHY2LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZENJRFJ2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDSURSdjRcIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RDSURSdjQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBjaWRydjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2NpZHJ2NChab2RDSURSdjQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kQ0lEUnY2ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZENJRFJ2NlwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZENJRFJ2Ni5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGNpZHJ2NihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fY2lkcnY2KFpvZENJRFJ2NiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RCYXNlNjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQmFzZTY0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RCYXNlNjQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2Jhc2U2NChab2RCYXNlNjQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kQmFzZTY0VVJMID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEJhc2U2NFVSTFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQmFzZTY0VVJMLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0dXJsKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9iYXNlNjR1cmwoWm9kQmFzZTY0VVJMLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEUxNjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRTE2NFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kRTE2NC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGUxNjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2UxNjQoWm9kRTE2NCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RKV1QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kSldUXCIsIChpbnN0LCBkZWYpPT57XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RKV1QuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBqd3QocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2p3dChab2RKV1QsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kQ3VzdG9tU3RyaW5nRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEN1c3RvbVN0cmluZ0Zvcm1hdFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQ3VzdG9tU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nRm9ybWF0KGZvcm1hdCwgZm5PclJlZ2V4LCBfcGFyYW1zID0ge30pIHtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgZm9ybWF0LCBmbk9yUmVnZXgsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhvc3RuYW1lKF9wYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgXCJob3N0bmFtZVwiLCBjb3JlLnJlZ2V4ZXMuaG9zdG5hbWUsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhleChfcGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3N0cmluZ0Zvcm1hdChab2RDdXN0b21TdHJpbmdGb3JtYXQsIFwiaGV4XCIsIGNvcmUucmVnZXhlcy5oZXgsIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhc2goYWxnLCBwYXJhbXMpIHtcbiAgICBjb25zdCBlbmMgPSBwYXJhbXM/LmVuYyA/PyBcImhleFwiO1xuICAgIGNvbnN0IGZvcm1hdCA9IGAke2FsZ31fJHtlbmN9YDtcbiAgICBjb25zdCByZWdleCA9IGNvcmUucmVnZXhlc1tmb3JtYXRdO1xuICAgIGlmICghcmVnZXgpIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke2Zvcm1hdH1gKTtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nRm9ybWF0KFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCwgZm9ybWF0LCByZWdleCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2ROdW1iZXIgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTnVtYmVyXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kTnVtYmVyLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLm51bWJlclByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5ndCA9ICh2YWx1ZSwgcGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MuZ3QodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QuZ3RlID0gKHZhbHVlLCBwYXJhbXMpPT5pbnN0LmNoZWNrKGNoZWNrcy5ndGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QubWluID0gKHZhbHVlLCBwYXJhbXMpPT5pbnN0LmNoZWNrKGNoZWNrcy5ndGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QubHQgPSAodmFsdWUsIHBhcmFtcyk9Pmluc3QuY2hlY2soY2hlY2tzLmx0KHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmx0ZSA9ICh2YWx1ZSwgcGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MubHRlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9ICh2YWx1ZSwgcGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MubHRlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0LmludCA9IChwYXJhbXMpPT5pbnN0LmNoZWNrKGludChwYXJhbXMpKTtcbiAgICBpbnN0LnNhZmUgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhpbnQocGFyYW1zKSk7XG4gICAgaW5zdC5wb3NpdGl2ZSA9IChwYXJhbXMpPT5pbnN0LmNoZWNrKGNoZWNrcy5ndCgwLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm5vbm5lZ2F0aXZlID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY2hlY2tzLmd0ZSgwLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm5lZ2F0aXZlID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY2hlY2tzLmx0KDAsIHBhcmFtcykpO1xuICAgIGluc3Qubm9ucG9zaXRpdmUgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MubHRlKDAsIHBhcmFtcykpO1xuICAgIGluc3QubXVsdGlwbGVPZiA9ICh2YWx1ZSwgcGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MubXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5zdGVwID0gKHZhbHVlLCBwYXJhbXMpPT5pbnN0LmNoZWNrKGNoZWNrcy5tdWx0aXBsZU9mKHZhbHVlLCBwYXJhbXMpKTtcbiAgICAvLyBpbnN0LmZpbml0ZSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5maW5pdGUocGFyYW1zKSk7XG4gICAgaW5zdC5maW5pdGUgPSAoKT0+aW5zdDtcbiAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgIGluc3QubWluVmFsdWUgPSBNYXRoLm1heChiYWcubWluaW11bSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksIGJhZy5leGNsdXNpdmVNaW5pbXVtID8/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgPz8gbnVsbDtcbiAgICBpbnN0Lm1heFZhbHVlID0gTWF0aC5taW4oYmFnLm1heGltdW0gPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCBiYWcuZXhjbHVzaXZlTWF4aW11bSA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpID8/IG51bGw7XG4gICAgaW5zdC5pc0ludCA9IChiYWcuZm9ybWF0ID8/IFwiXCIpLmluY2x1ZGVzKFwiaW50XCIpIHx8IE51bWJlci5pc1NhZmVJbnRlZ2VyKGJhZy5tdWx0aXBsZU9mID8/IDAuNSk7XG4gICAgaW5zdC5pc0Zpbml0ZSA9IHRydWU7XG4gICAgaW5zdC5mb3JtYXQgPSBiYWcuZm9ybWF0ID8/IG51bGw7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBudW1iZXIocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX251bWJlcihab2ROdW1iZXIsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kTnVtYmVyRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE51bWJlckZvcm1hdFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZE51bWJlckZvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kTnVtYmVyLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGludChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faW50KFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdDMyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9mbG9hdDMyKFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdDY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9mbG9hdDY0KFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnQzMihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faW50MzIoWm9kTnVtYmVyRm9ybWF0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVpbnQzMihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdWludDMyKFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RCb29sZWFuID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEJvb2xlYW5cIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RCb29sZWFuLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLmJvb2xlYW5Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYm9vbGVhbihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fYm9vbGVhbihab2RCb29sZWFuLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZEJpZ0ludCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RCaWdJbnRcIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RCaWdJbnQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMuYmlnaW50UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lmd0ZSA9ICh2YWx1ZSwgcGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1pbiA9ICh2YWx1ZSwgcGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmd0ID0gKHZhbHVlLCBwYXJhbXMpPT5pbnN0LmNoZWNrKGNoZWNrcy5ndCh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5ndGUgPSAodmFsdWUsIHBhcmFtcyk9Pmluc3QuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5taW4gPSAodmFsdWUsIHBhcmFtcyk9Pmluc3QuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5sdCA9ICh2YWx1ZSwgcGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MubHQodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QubHRlID0gKHZhbHVlLCBwYXJhbXMpPT5pbnN0LmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QubWF4ID0gKHZhbHVlLCBwYXJhbXMpPT5pbnN0LmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QucG9zaXRpdmUgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MuZ3QoQmlnSW50KDApLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm5lZ2F0aXZlID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY2hlY2tzLmx0KEJpZ0ludCgwKSwgcGFyYW1zKSk7XG4gICAgaW5zdC5ub25wb3NpdGl2ZSA9IChwYXJhbXMpPT5pbnN0LmNoZWNrKGNoZWNrcy5sdGUoQmlnSW50KDApLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm5vbm5lZ2F0aXZlID0gKHBhcmFtcyk9Pmluc3QuY2hlY2soY2hlY2tzLmd0ZShCaWdJbnQoMCksIHBhcmFtcykpO1xuICAgIGluc3QubXVsdGlwbGVPZiA9ICh2YWx1ZSwgcGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MubXVsdGlwbGVPZih2YWx1ZSwgcGFyYW1zKSk7XG4gICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICBpbnN0Lm1pblZhbHVlID0gYmFnLm1pbmltdW0gPz8gbnVsbDtcbiAgICBpbnN0Lm1heFZhbHVlID0gYmFnLm1heGltdW0gPz8gbnVsbDtcbiAgICBpbnN0LmZvcm1hdCA9IGJhZy5mb3JtYXQgPz8gbnVsbDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGJpZ2ludChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fYmlnaW50KFpvZEJpZ0ludCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RCaWdJbnRGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQmlnSW50Rm9ybWF0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kQmlnSW50Rm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RCaWdJbnQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG4vLyBpbnQ2NFxuZXhwb3J0IGZ1bmN0aW9uIGludDY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pbnQ2NChab2RCaWdJbnRGb3JtYXQsIHBhcmFtcyk7XG59XG4vLyB1aW50NjRcbmV4cG9ydCBmdW5jdGlvbiB1aW50NjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VpbnQ2NChab2RCaWdJbnRGb3JtYXQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kU3ltYm9sID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFN5bWJvbFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZFN5bWJvbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKT0+cHJvY2Vzc29ycy5zeW1ib2xQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc3ltYm9sKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9zeW1ib2woWm9kU3ltYm9sLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVuZGVmaW5lZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RVbmRlZmluZWRcIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RVbmRlZmluZWQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMudW5kZWZpbmVkUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZnVuY3Rpb24gX3VuZGVmaW5lZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdW5kZWZpbmVkKFpvZFVuZGVmaW5lZCwgcGFyYW1zKTtcbn1cbmV4cG9ydCB7IF91bmRlZmluZWQgYXMgdW5kZWZpbmVkIH07XG5leHBvcnQgY29uc3QgWm9kTnVsbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2ROdWxsXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kTnVsbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKT0+cHJvY2Vzc29ycy5udWxsUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZnVuY3Rpb24gX251bGwocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX251bGwoWm9kTnVsbCwgcGFyYW1zKTtcbn1cbmV4cG9ydCB7IF9udWxsIGFzIG51bGwgfTtcbmV4cG9ydCBjb25zdCBab2RBbnkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQW55XCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kQW55LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLmFueVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBhbnkoKSB7XG4gICAgcmV0dXJuIGNvcmUuX2FueShab2RBbnkpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVua25vd24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVW5rbm93blwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZFVua25vd24uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMudW5rbm93blByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB1bmtub3duKCkge1xuICAgIHJldHVybiBjb3JlLl91bmtub3duKFpvZFVua25vd24pO1xufVxuZXhwb3J0IGNvbnN0IFpvZE5ldmVyID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE5ldmVyXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kTmV2ZXIuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMubmV2ZXJQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbmV2ZXIocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX25ldmVyKFpvZE5ldmVyLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFZvaWQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVm9pZFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZFZvaWQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMudm9pZFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmZ1bmN0aW9uIF92b2lkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl92b2lkKFpvZFZvaWQsIHBhcmFtcyk7XG59XG5leHBvcnQgeyBfdm9pZCBhcyB2b2lkIH07XG5leHBvcnQgY29uc3QgWm9kRGF0ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2REYXRlXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kRGF0ZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKT0+cHJvY2Vzc29ycy5kYXRlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lm1pbiA9ICh2YWx1ZSwgcGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9ICh2YWx1ZSwgcGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MubHRlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBjb25zdCBjID0gaW5zdC5fem9kLmJhZztcbiAgICBpbnN0Lm1pbkRhdGUgPSBjLm1pbmltdW0gPyBuZXcgRGF0ZShjLm1pbmltdW0pIDogbnVsbDtcbiAgICBpbnN0Lm1heERhdGUgPSBjLm1heGltdW0gPyBuZXcgRGF0ZShjLm1heGltdW0pIDogbnVsbDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGUocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2RhdGUoWm9kRGF0ZSwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RBcnJheSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RBcnJheVwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZEFycmF5LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLmFycmF5UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmVsZW1lbnQgPSBkZWYuZWxlbWVudDtcbiAgICBpbnN0Lm1pbiA9IChtaW5MZW5ndGgsIHBhcmFtcyk9Pmluc3QuY2hlY2soY2hlY2tzLm1pbkxlbmd0aChtaW5MZW5ndGgsIHBhcmFtcykpO1xuICAgIGluc3Qubm9uZW1wdHkgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MubWluTGVuZ3RoKDEsIHBhcmFtcykpO1xuICAgIGluc3QubWF4ID0gKG1heExlbmd0aCwgcGFyYW1zKT0+aW5zdC5jaGVjayhjaGVja3MubWF4TGVuZ3RoKG1heExlbmd0aCwgcGFyYW1zKSk7XG4gICAgaW5zdC5sZW5ndGggPSAobGVuLCBwYXJhbXMpPT5pbnN0LmNoZWNrKGNoZWNrcy5sZW5ndGgobGVuLCBwYXJhbXMpKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpPT5pbnN0LmVsZW1lbnQ7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBhcnJheShlbGVtZW50LCBwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fYXJyYXkoWm9kQXJyYXksIGVsZW1lbnQsIHBhcmFtcyk7XG59XG4vLyAua2V5b2ZcbmV4cG9ydCBmdW5jdGlvbiBrZXlvZihzY2hlbWEpIHtcbiAgICBjb25zdCBzaGFwZSA9IHNjaGVtYS5fem9kLmRlZi5zaGFwZTtcbiAgICByZXR1cm4gX2VudW0oT2JqZWN0LmtleXMoc2hhcGUpKTtcbn1cbmV4cG9ydCBjb25zdCBab2RPYmplY3QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kT2JqZWN0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kT2JqZWN0SklULmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLm9iamVjdFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QsIFwic2hhcGVcIiwgKCk9PntcbiAgICAgICAgcmV0dXJuIGRlZi5zaGFwZTtcbiAgICB9KTtcbiAgICBpbnN0LmtleW9mID0gKCk9Pl9lbnVtKE9iamVjdC5rZXlzKGluc3QuX3pvZC5kZWYuc2hhcGUpKTtcbiAgICBpbnN0LmNhdGNoYWxsID0gKGNhdGNoYWxsKT0+aW5zdC5jbG9uZSh7XG4gICAgICAgICAgICAuLi5pbnN0Ll96b2QuZGVmLFxuICAgICAgICAgICAgY2F0Y2hhbGw6IGNhdGNoYWxsXG4gICAgICAgIH0pO1xuICAgIGluc3QucGFzc3Rocm91Z2ggPSAoKT0+aW5zdC5jbG9uZSh7XG4gICAgICAgICAgICAuLi5pbnN0Ll96b2QuZGVmLFxuICAgICAgICAgICAgY2F0Y2hhbGw6IHVua25vd24oKVxuICAgICAgICB9KTtcbiAgICBpbnN0Lmxvb3NlID0gKCk9Pmluc3QuY2xvbmUoe1xuICAgICAgICAgICAgLi4uaW5zdC5fem9kLmRlZixcbiAgICAgICAgICAgIGNhdGNoYWxsOiB1bmtub3duKClcbiAgICAgICAgfSk7XG4gICAgaW5zdC5zdHJpY3QgPSAoKT0+aW5zdC5jbG9uZSh7XG4gICAgICAgICAgICAuLi5pbnN0Ll96b2QuZGVmLFxuICAgICAgICAgICAgY2F0Y2hhbGw6IG5ldmVyKClcbiAgICAgICAgfSk7XG4gICAgaW5zdC5zdHJpcCA9ICgpPT5pbnN0LmNsb25lKHtcbiAgICAgICAgICAgIC4uLmluc3QuX3pvZC5kZWYsXG4gICAgICAgICAgICBjYXRjaGFsbDogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgIGluc3QuZXh0ZW5kID0gKGluY29taW5nKT0+e1xuICAgICAgICByZXR1cm4gdXRpbC5leHRlbmQoaW5zdCwgaW5jb21pbmcpO1xuICAgIH07XG4gICAgaW5zdC5zYWZlRXh0ZW5kID0gKGluY29taW5nKT0+e1xuICAgICAgICByZXR1cm4gdXRpbC5zYWZlRXh0ZW5kKGluc3QsIGluY29taW5nKTtcbiAgICB9O1xuICAgIGluc3QubWVyZ2UgPSAob3RoZXIpPT51dGlsLm1lcmdlKGluc3QsIG90aGVyKTtcbiAgICBpbnN0LnBpY2sgPSAobWFzayk9PnV0aWwucGljayhpbnN0LCBtYXNrKTtcbiAgICBpbnN0Lm9taXQgPSAobWFzayk9PnV0aWwub21pdChpbnN0LCBtYXNrKTtcbiAgICBpbnN0LnBhcnRpYWwgPSAoLi4uYXJncyk9PnV0aWwucGFydGlhbChab2RPcHRpb25hbCwgaW5zdCwgYXJnc1swXSk7XG4gICAgaW5zdC5yZXF1aXJlZCA9ICguLi5hcmdzKT0+dXRpbC5yZXF1aXJlZChab2ROb25PcHRpb25hbCwgaW5zdCwgYXJnc1swXSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBvYmplY3Qoc2hhcGUsIHBhcmFtcykge1xuICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgc2hhcGU6IHNoYXBlID8/IHt9LFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdChkZWYpO1xufVxuLy8gc3RyaWN0T2JqZWN0XG5leHBvcnQgZnVuY3Rpb24gc3RyaWN0T2JqZWN0KHNoYXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHNoYXBlLFxuICAgICAgICBjYXRjaGFsbDogbmV2ZXIoKSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuLy8gbG9vc2VPYmplY3RcbmV4cG9ydCBmdW5jdGlvbiBsb29zZU9iamVjdChzaGFwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAgY2F0Y2hhbGw6IHVua25vd24oKSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVuaW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVuaW9uXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kVW5pb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMudW5pb25Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3Qub3B0aW9ucyA9IGRlZi5vcHRpb25zO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdW5pb24ob3B0aW9ucywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RVbmlvbih7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFhvciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RYb3JcIiwgKGluc3QsIGRlZik9PntcbiAgICBab2RVbmlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kWG9yLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLnVuaW9uUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lm9wdGlvbnMgPSBkZWYub3B0aW9ucztcbn0pO1xuLyoqIENyZWF0ZXMgYW4gZXhjbHVzaXZlIHVuaW9uIChYT1IpIHdoZXJlIGV4YWN0bHkgb25lIG9wdGlvbiBtdXN0IG1hdGNoLlxuICogVW5saWtlIHJlZ3VsYXIgdW5pb25zIHRoYXQgc3VjY2VlZCB3aGVuIGFueSBvcHRpb24gbWF0Y2hlcywgeG9yIGZhaWxzIGlmXG4gKiB6ZXJvIG9yIG1vcmUgdGhhbiBvbmUgb3B0aW9uIG1hdGNoZXMgdGhlIGlucHV0LiAqLyBleHBvcnQgZnVuY3Rpb24geG9yKG9wdGlvbnMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kWG9yKHtcbiAgICAgICAgdHlwZTogXCJ1bmlvblwiLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRGlzY3JpbWluYXRlZFVuaW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIFpvZFVuaW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2REaXNjcmltaW5hdGVkVW5pb24uaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZGlzY3JpbWluYXRlZFVuaW9uKGRpc2NyaW1pbmF0b3IsIG9wdGlvbnMsIHBhcmFtcykge1xuICAgIC8vIGNvbnN0IFtvcHRpb25zLCBwYXJhbXNdID0gYXJncztcbiAgICByZXR1cm4gbmV3IFpvZERpc2NyaW1pbmF0ZWRVbmlvbih7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgZGlzY3JpbWluYXRvcixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZEludGVyc2VjdGlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RJbnRlcnNlY3Rpb25cIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RJbnRlcnNlY3Rpb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMuaW50ZXJzZWN0aW9uUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdGlvbihsZWZ0LCByaWdodCkge1xuICAgIHJldHVybiBuZXcgWm9kSW50ZXJzZWN0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgICAgcmlnaHQ6IHJpZ2h0XG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kVHVwbGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVHVwbGVcIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RUdXBsZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKT0+cHJvY2Vzc29ycy50dXBsZVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5yZXN0ID0gKHJlc3QpPT5pbnN0LmNsb25lKHtcbiAgICAgICAgICAgIC4uLmluc3QuX3pvZC5kZWYsXG4gICAgICAgICAgICByZXN0OiByZXN0XG4gICAgICAgIH0pO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdHVwbGUoaXRlbXMsIF9wYXJhbXNPclJlc3QsIF9wYXJhbXMpIHtcbiAgICBjb25zdCBoYXNSZXN0ID0gX3BhcmFtc09yUmVzdCBpbnN0YW5jZW9mIGNvcmUuJFpvZFR5cGU7XG4gICAgY29uc3QgcGFyYW1zID0gaGFzUmVzdCA/IF9wYXJhbXMgOiBfcGFyYW1zT3JSZXN0O1xuICAgIGNvbnN0IHJlc3QgPSBoYXNSZXN0ID8gX3BhcmFtc09yUmVzdCA6IG51bGw7XG4gICAgcmV0dXJuIG5ldyBab2RUdXBsZSh7XG4gICAgICAgIHR5cGU6IFwidHVwbGVcIixcbiAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICByZXN0LFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kUmVjb3JkID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFJlY29yZFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZFJlY29yZC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKT0+cHJvY2Vzc29ycy5yZWNvcmRQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3Qua2V5VHlwZSA9IGRlZi5rZXlUeXBlO1xuICAgIGluc3QudmFsdWVUeXBlID0gZGVmLnZhbHVlVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHJlY29yZChrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kUmVjb3JkKHtcbiAgICAgICAgdHlwZTogXCJyZWNvcmRcIixcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbi8vIHR5cGUgYWxrc2pmID0gY29yZS5vdXRwdXQ8Y29yZS4kWm9kUmVjb3JkS2V5PjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aWFsUmVjb3JkKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgY29uc3QgayA9IGNvcmUuY2xvbmUoa2V5VHlwZSk7XG4gICAgay5fem9kLnZhbHVlcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgIHR5cGU6IFwicmVjb3JkXCIsXG4gICAgICAgIGtleVR5cGU6IGssXG4gICAgICAgIHZhbHVlVHlwZTogdmFsdWVUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbG9vc2VSZWNvcmQoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZFJlY29yZCh7XG4gICAgICAgIHR5cGU6IFwicmVjb3JkXCIsXG4gICAgICAgIGtleVR5cGUsXG4gICAgICAgIHZhbHVlVHlwZTogdmFsdWVUeXBlLFxuICAgICAgICBtb2RlOiBcImxvb3NlXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RNYXAgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTWFwXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kTWFwLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLm1hcFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5rZXlUeXBlID0gZGVmLmtleVR5cGU7XG4gICAgaW5zdC52YWx1ZVR5cGUgPSBkZWYudmFsdWVUeXBlO1xuICAgIGluc3QubWluID0gKC4uLmFyZ3MpPT5pbnN0LmNoZWNrKGNvcmUuX21pblNpemUoLi4uYXJncykpO1xuICAgIGluc3Qubm9uZW1wdHkgPSAocGFyYW1zKT0+aW5zdC5jaGVjayhjb3JlLl9taW5TaXplKDEsIHBhcmFtcykpO1xuICAgIGluc3QubWF4ID0gKC4uLmFyZ3MpPT5pbnN0LmNoZWNrKGNvcmUuX21heFNpemUoLi4uYXJncykpO1xuICAgIGluc3Quc2l6ZSA9ICguLi5hcmdzKT0+aW5zdC5jaGVjayhjb3JlLl9zaXplKC4uLmFyZ3MpKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG1hcChrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kTWFwKHtcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAga2V5VHlwZToga2V5VHlwZSxcbiAgICAgICAgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RTZXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kU2V0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kU2V0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLnNldFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5taW4gPSAoLi4uYXJncyk9Pmluc3QuY2hlY2soY29yZS5fbWluU2l6ZSguLi5hcmdzKSk7XG4gICAgaW5zdC5ub25lbXB0eSA9IChwYXJhbXMpPT5pbnN0LmNoZWNrKGNvcmUuX21pblNpemUoMSwgcGFyYW1zKSk7XG4gICAgaW5zdC5tYXggPSAoLi4uYXJncyk9Pmluc3QuY2hlY2soY29yZS5fbWF4U2l6ZSguLi5hcmdzKSk7XG4gICAgaW5zdC5zaXplID0gKC4uLmFyZ3MpPT5pbnN0LmNoZWNrKGNvcmUuX3NpemUoLi4uYXJncykpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc2V0KHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RTZXQoe1xuICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICB2YWx1ZVR5cGU6IHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZEVudW0gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRW51bVwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZEVudW0uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMuZW51bVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5lbnVtID0gZGVmLmVudHJpZXM7XG4gICAgaW5zdC5vcHRpb25zID0gT2JqZWN0LnZhbHVlcyhkZWYuZW50cmllcyk7XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoZGVmLmVudHJpZXMpKTtcbiAgICBpbnN0LmV4dHJhY3QgPSAodmFsdWVzLCBwYXJhbXMpPT57XG4gICAgICAgIGNvbnN0IG5ld0VudHJpZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe1xuICAgICAgICAgICAgaWYgKGtleXMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIG5ld0VudHJpZXNbdmFsdWVdID0gZGVmLmVudHJpZXNbdmFsdWVdO1xuICAgICAgICAgICAgfSBlbHNlIHRocm93IG5ldyBFcnJvcihgS2V5ICR7dmFsdWV9IG5vdCBmb3VuZCBpbiBlbnVtYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RFbnVtKHtcbiAgICAgICAgICAgIC4uLmRlZixcbiAgICAgICAgICAgIGNoZWNrczogW10sXG4gICAgICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICAgICAgZW50cmllczogbmV3RW50cmllc1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGluc3QuZXhjbHVkZSA9ICh2YWx1ZXMsIHBhcmFtcyk9PntcbiAgICAgICAgY29uc3QgbmV3RW50cmllcyA9IHtcbiAgICAgICAgICAgIC4uLmRlZi5lbnRyaWVzXG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKXtcbiAgICAgICAgICAgIGlmIChrZXlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3RW50cmllc1t2YWx1ZV07XG4gICAgICAgICAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHt2YWx1ZX0gbm90IGZvdW5kIGluIGVudW1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZEVudW0oe1xuICAgICAgICAgICAgLi4uZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgICAgICBlbnRyaWVzOiBuZXdFbnRyaWVzXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIF9lbnVtKHZhbHVlcywgcGFyYW1zKSB7XG4gICAgY29uc3QgZW50cmllcyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZXMubWFwKCh2KT0+W1xuICAgICAgICAgICAgdixcbiAgICAgICAgICAgIHZcbiAgICAgICAgXSkpIDogdmFsdWVzO1xuICAgIHJldHVybiBuZXcgWm9kRW51bSh7XG4gICAgICAgIHR5cGU6IFwiZW51bVwiLFxuICAgICAgICBlbnRyaWVzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG59XG5leHBvcnQgeyBfZW51bSBhcyBlbnVtIH07XG4vKiogQGRlcHJlY2F0ZWQgVGhpcyBBUEkgaGFzIGJlZW4gbWVyZ2VkIGludG8gYHouZW51bSgpYC4gVXNlIGB6LmVudW0oKWAgaW5zdGVhZC5cbiAqXG4gKiBgYGB0c1xuICogZW51bSBDb2xvcnMgeyByZWQsIGdyZWVuLCBibHVlIH1cbiAqIHouZW51bShDb2xvcnMpO1xuICogYGBgXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZUVudW0oZW50cmllcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RFbnVtKHtcbiAgICAgICAgdHlwZTogXCJlbnVtXCIsXG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RMaXRlcmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZExpdGVyYWxcIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RMaXRlcmFsLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLmxpdGVyYWxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudmFsdWVzID0gbmV3IFNldChkZWYudmFsdWVzKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldCAoKSB7XG4gICAgICAgICAgICBpZiAoZGVmLnZhbHVlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVmLnZhbHVlc1swXTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbGl0ZXJhbCh2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RMaXRlcmFsKHtcbiAgICAgICAgdHlwZTogXCJsaXRlcmFsXCIsXG4gICAgICAgIHZhbHVlczogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFtcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIF0sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcylcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RGaWxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEZpbGVcIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RGaWxlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLmZpbGVQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QubWluID0gKHNpemUsIHBhcmFtcyk9Pmluc3QuY2hlY2soY29yZS5fbWluU2l6ZShzaXplLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9IChzaXplLCBwYXJhbXMpPT5pbnN0LmNoZWNrKGNvcmUuX21heFNpemUoc2l6ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5taW1lID0gKHR5cGVzLCBwYXJhbXMpPT5pbnN0LmNoZWNrKGNvcmUuX21pbWUoQXJyYXkuaXNBcnJheSh0eXBlcykgPyB0eXBlcyA6IFtcbiAgICAgICAgICAgIHR5cGVzXG4gICAgICAgIF0sIHBhcmFtcykpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZmlsZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZmlsZShab2RGaWxlLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFRyYW5zZm9ybSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RUcmFuc2Zvcm1cIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RUcmFuc2Zvcm0uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMudHJhbnNmb3JtUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCk9PntcbiAgICAgICAgaWYgKF9jdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RFbmNvZGVFcnJvcihpbnN0LmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQuYWRkSXNzdWUgPSAoaXNzdWUpPT57XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlzc3VlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh1dGlsLmlzc3VlKGlzc3VlLCBwYXlsb2FkLnZhbHVlLCBkZWYpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZm9yIFpvZCAzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mYXRhbCkgX2lzc3VlLmNvbnRpbnVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgX2lzc3VlLmNvZGUgPz8gKF9pc3N1ZS5jb2RlID0gXCJjdXN0b21cIik7XG4gICAgICAgICAgICAgICAgX2lzc3VlLmlucHV0ID8/IChfaXNzdWUuaW5wdXQgPSBwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBfaXNzdWUuaW5zdCA/PyAoX2lzc3VlLmluc3QgPSBpbnN0KTtcbiAgICAgICAgICAgICAgICAvLyBfaXNzdWUuY29udGludWUgPz89IHRydWU7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh1dGlsLmlzc3VlKF9pc3N1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBkZWYudHJhbnNmb3JtKHBheWxvYWQudmFsdWUsIHBheWxvYWQpO1xuICAgICAgICBpZiAob3V0cHV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dC50aGVuKChvdXRwdXQpPT57XG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBvdXRwdXQ7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICByZXR1cm4gbmV3IFpvZFRyYW5zZm9ybSh7XG4gICAgICAgIHR5cGU6IFwidHJhbnNmb3JtXCIsXG4gICAgICAgIHRyYW5zZm9ybTogZm5cbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RPcHRpb25hbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RPcHRpb25hbFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZE9wdGlvbmFsLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLm9wdGlvbmFsUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpPT5pbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kT3B0aW9uYWwoe1xuICAgICAgICB0eXBlOiBcIm9wdGlvbmFsXCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRXhhY3RPcHRpb25hbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RFeGFjdE9wdGlvbmFsXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kRXhhY3RPcHRpb25hbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKT0+cHJvY2Vzc29ycy5vcHRpb25hbFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKT0+aW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBleGFjdE9wdGlvbmFsKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kRXhhY3RPcHRpb25hbCh7XG4gICAgICAgIHR5cGU6IFwib3B0aW9uYWxcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGVcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2ROdWxsYWJsZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2ROdWxsYWJsZVwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZE51bGxhYmxlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLm51bGxhYmxlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpPT5pbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG51bGxhYmxlKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kTnVsbGFibGUoe1xuICAgICAgICB0eXBlOiBcIm51bGxhYmxlXCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlXG4gICAgfSk7XG59XG4vLyBudWxsaXNoXG5leHBvcnQgZnVuY3Rpb24gbnVsbGlzaChpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gb3B0aW9uYWwobnVsbGFibGUoaW5uZXJUeXBlKSk7XG59XG5leHBvcnQgY29uc3QgWm9kRGVmYXVsdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2REZWZhdWx0XCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kRGVmYXVsdC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKT0+cHJvY2Vzc29ycy5kZWZhdWx0UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpPT5pbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbiAgICBpbnN0LnJlbW92ZURlZmF1bHQgPSBpbnN0LnVud3JhcDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIF9kZWZhdWx0KGlubmVyVHlwZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBab2REZWZhdWx0KHtcbiAgICAgICAgdHlwZTogXCJkZWZhdWx0XCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgICAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZGVmYXVsdFZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyBkZWZhdWx0VmFsdWUoKSA6IHV0aWwuc2hhbGxvd0Nsb25lKGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RQcmVmYXVsdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RQcmVmYXVsdFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZFByZWZhdWx0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLnByZWZhdWx0UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpPT5pbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZhdWx0KGlubmVyVHlwZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBab2RQcmVmYXVsdCh7XG4gICAgICAgIHR5cGU6IFwicHJlZmF1bHRcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IGRlZmF1bHRWYWx1ZSgpIDogdXRpbC5zaGFsbG93Q2xvbmUoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZE5vbk9wdGlvbmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE5vbk9wdGlvbmFsXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kTm9uT3B0aW9uYWwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMubm9ub3B0aW9uYWxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCk9Pmluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbm9ub3B0aW9uYWwoaW5uZXJUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZE5vbk9wdGlvbmFsKHtcbiAgICAgICAgdHlwZTogXCJub25vcHRpb25hbFwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFN1Y2Nlc3MgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kU3VjY2Vzc1wiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZFN1Y2Nlc3MuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMuc3VjY2Vzc1Byb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKT0+aW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kU3VjY2Vzcyh7XG4gICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZVxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZENhdGNoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZENhdGNoXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kQ2F0Y2guaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMuY2F0Y2hQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCk9Pmluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xuICAgIGluc3QucmVtb3ZlQ2F0Y2ggPSBpbnN0LnVud3JhcDtcbn0pO1xuZnVuY3Rpb24gX2NhdGNoKGlubmVyVHlwZSwgY2F0Y2hWYWx1ZSkge1xuICAgIHJldHVybiBuZXcgWm9kQ2F0Y2goe1xuICAgICAgICB0eXBlOiBcImNhdGNoXCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgICAgICBjYXRjaFZhbHVlOiB0eXBlb2YgY2F0Y2hWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gY2F0Y2hWYWx1ZSA6ICgpPT5jYXRjaFZhbHVlXG4gICAgfSk7XG59XG5leHBvcnQgeyBfY2F0Y2ggYXMgY2F0Y2ggfTtcbmV4cG9ydCBjb25zdCBab2ROYU4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTmFOXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kTmFOLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLm5hblByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBuYW4ocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX25hbihab2ROYU4sIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kUGlwZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RQaXBlXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kUGlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKT0+cHJvY2Vzc29ycy5waXBlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmluID0gZGVmLmluO1xuICAgIGluc3Qub3V0ID0gZGVmLm91dDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHBpcGUoaW5fLCBvdXQpIHtcbiAgICByZXR1cm4gbmV3IFpvZFBpcGUoe1xuICAgICAgICB0eXBlOiBcInBpcGVcIixcbiAgICAgICAgaW46IGluXyxcbiAgICAgICAgb3V0OiBvdXRcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RDb2RlYyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDb2RlY1wiLCAoaW5zdCwgZGVmKT0+e1xuICAgIFpvZFBpcGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZENvZGVjLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGVjKGluXywgb3V0LCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZENvZGVjKHtcbiAgICAgICAgdHlwZTogXCJwaXBlXCIsXG4gICAgICAgIGluOiBpbl8sXG4gICAgICAgIG91dDogb3V0LFxuICAgICAgICB0cmFuc2Zvcm06IHBhcmFtcy5kZWNvZGUsXG4gICAgICAgIHJldmVyc2VUcmFuc2Zvcm06IHBhcmFtcy5lbmNvZGVcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RSZWFkb25seSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RSZWFkb25seVwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZFJlYWRvbmx5LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpPT5wcm9jZXNzb3JzLnJlYWRvbmx5UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpPT5pbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRvbmx5KGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kUmVhZG9ubHkoe1xuICAgICAgICB0eXBlOiBcInJlYWRvbmx5XCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kVGVtcGxhdGVMaXRlcmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFRlbXBsYXRlTGl0ZXJhbFwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZFRlbXBsYXRlTGl0ZXJhbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKT0+cHJvY2Vzc29ycy50ZW1wbGF0ZUxpdGVyYWxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVMaXRlcmFsKHBhcnRzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZFRlbXBsYXRlTGl0ZXJhbCh7XG4gICAgICAgIHR5cGU6IFwidGVtcGxhdGVfbGl0ZXJhbFwiLFxuICAgICAgICBwYXJ0cyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKVxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZExhenkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTGF6eVwiLCAoaW5zdCwgZGVmKT0+e1xuICAgIGNvcmUuJFpvZExhenkuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMubGF6eVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKT0+aW5zdC5fem9kLmRlZi5nZXR0ZXIoKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGxhenkoZ2V0dGVyKSB7XG4gICAgcmV0dXJuIG5ldyBab2RMYXp5KHtcbiAgICAgICAgdHlwZTogXCJsYXp5XCIsXG4gICAgICAgIGdldHRlcjogZ2V0dGVyXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kUHJvbWlzZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RQcm9taXNlXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kUHJvbWlzZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKT0+cHJvY2Vzc29ycy5wcm9taXNlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpPT5pbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2UoaW5uZXJUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBab2RQcm9taXNlKHtcbiAgICAgICAgdHlwZTogXCJwcm9taXNlXCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRnVuY3Rpb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRnVuY3Rpb25cIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RGdW5jdGlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKT0+cHJvY2Vzc29ycy5mdW5jdGlvblByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBfZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgIHR5cGU6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgaW5wdXQ6IEFycmF5LmlzQXJyYXkocGFyYW1zPy5pbnB1dCkgPyB0dXBsZShwYXJhbXM/LmlucHV0KSA6IHBhcmFtcz8uaW5wdXQgPz8gYXJyYXkodW5rbm93bigpKSxcbiAgICAgICAgb3V0cHV0OiBwYXJhbXM/Lm91dHB1dCA/PyB1bmtub3duKClcbiAgICB9KTtcbn1cbmV4cG9ydCB7IF9mdW5jdGlvbiBhcyBmdW5jdGlvbiB9O1xuZXhwb3J0IGNvbnN0IFpvZEN1c3RvbSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDdXN0b21cIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RDdXN0b20uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcyk9PnByb2Nlc3NvcnMuY3VzdG9tUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuLy8gY3VzdG9tIGNoZWNrc1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrKGZuKSB7XG4gICAgY29uc3QgY2ggPSBuZXcgY29yZS4kWm9kQ2hlY2soe1xuICAgICAgICBjaGVjazogXCJjdXN0b21cIlxuICAgIH0pO1xuICAgIGNoLl96b2QuY2hlY2sgPSBmbjtcbiAgICByZXR1cm4gY2g7XG59XG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tKGZuLCBfcGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2N1c3RvbShab2RDdXN0b20sIGZuID8/ICgoKT0+dHJ1ZSksIF9wYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlZmluZShmbiwgX3BhcmFtcyA9IHt9KSB7XG4gICAgcmV0dXJuIGNvcmUuX3JlZmluZShab2RDdXN0b20sIGZuLCBfcGFyYW1zKTtcbn1cbi8vIHN1cGVyUmVmaW5lXG5leHBvcnQgZnVuY3Rpb24gc3VwZXJSZWZpbmUoZm4pIHtcbiAgICByZXR1cm4gY29yZS5fc3VwZXJSZWZpbmUoZm4pO1xufVxuLy8gUmUtZXhwb3J0IGRlc2NyaWJlIGFuZCBtZXRhIGZyb20gY29yZVxuZXhwb3J0IGNvbnN0IGRlc2NyaWJlID0gY29yZS5kZXNjcmliZTtcbmV4cG9ydCBjb25zdCBtZXRhID0gY29yZS5tZXRhO1xuZnVuY3Rpb24gX2luc3RhbmNlb2YoY2xzLCBwYXJhbXMgPSB7fSkge1xuICAgIGNvbnN0IGluc3QgPSBuZXcgWm9kQ3VzdG9tKHtcbiAgICAgICAgdHlwZTogXCJjdXN0b21cIixcbiAgICAgICAgY2hlY2s6IFwiY3VzdG9tXCIsXG4gICAgICAgIGZuOiAoZGF0YSk9PmRhdGEgaW5zdGFuY2VvZiBjbHMsXG4gICAgICAgIGFib3J0OiB0cnVlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpXG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmJhZy5DbGFzcyA9IGNscztcbiAgICAvLyBPdmVycmlkZSBjaGVjayB0byBlbWl0IGludmFsaWRfdHlwZSBpbnN0ZWFkIG9mIGN1c3RvbVxuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKT0+e1xuICAgICAgICBpZiAoIShwYXlsb2FkLnZhbHVlIGluc3RhbmNlb2YgY2xzKSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogY2xzLm5hbWUsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBwYXRoOiBbXG4gICAgICAgICAgICAgICAgICAgIC4uLmluc3QuX3pvZC5kZWYucGF0aCA/PyBbXVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gaW5zdDtcbn1cbmV4cG9ydCB7IF9pbnN0YW5jZW9mIGFzIGluc3RhbmNlb2YgfTtcbi8vIHN0cmluZ2Jvb2xcbmV4cG9ydCBjb25zdCBzdHJpbmdib29sID0gKC4uLmFyZ3MpPT5jb3JlLl9zdHJpbmdib29sKHtcbiAgICAgICAgQ29kZWM6IFpvZENvZGVjLFxuICAgICAgICBCb29sZWFuOiBab2RCb29sZWFuLFxuICAgICAgICBTdHJpbmc6IFpvZFN0cmluZ1xuICAgIH0sIC4uLmFyZ3MpO1xuZXhwb3J0IGZ1bmN0aW9uIGpzb24ocGFyYW1zKSB7XG4gICAgY29uc3QganNvblNjaGVtYSA9IGxhenkoKCk9PntcbiAgICAgICAgcmV0dXJuIHVuaW9uKFtcbiAgICAgICAgICAgIHN0cmluZyhwYXJhbXMpLFxuICAgICAgICAgICAgbnVtYmVyKCksXG4gICAgICAgICAgICBib29sZWFuKCksXG4gICAgICAgICAgICBfbnVsbCgpLFxuICAgICAgICAgICAgYXJyYXkoanNvblNjaGVtYSksXG4gICAgICAgICAgICByZWNvcmQoc3RyaW5nKCksIGpzb25TY2hlbWEpXG4gICAgICAgIF0pO1xuICAgIH0pO1xuICAgIHJldHVybiBqc29uU2NoZW1hO1xufVxuLy8gcHJlcHJvY2Vzc1xuLy8gLyoqIEBkZXByZWNhdGVkIFVzZSBgei5waXBlKClgIGFuZCBgei50cmFuc2Zvcm0oKWAgaW5zdGVhZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwcm9jZXNzKGZuLCBzY2hlbWEpIHtcbiAgICByZXR1cm4gcGlwZSh0cmFuc2Zvcm0oZm4pLCBzY2hlbWEpO1xufVxuIiwgImV4cG9ydCB7IF9sdCBhcyBsdCwgX2x0ZSBhcyBsdGUsIF9ndCBhcyBndCwgX2d0ZSBhcyBndGUsIF9wb3NpdGl2ZSBhcyBwb3NpdGl2ZSwgX25lZ2F0aXZlIGFzIG5lZ2F0aXZlLCBfbm9ucG9zaXRpdmUgYXMgbm9ucG9zaXRpdmUsIF9ub25uZWdhdGl2ZSBhcyBub25uZWdhdGl2ZSwgX211bHRpcGxlT2YgYXMgbXVsdGlwbGVPZiwgX21heFNpemUgYXMgbWF4U2l6ZSwgX21pblNpemUgYXMgbWluU2l6ZSwgX3NpemUgYXMgc2l6ZSwgX21heExlbmd0aCBhcyBtYXhMZW5ndGgsIF9taW5MZW5ndGggYXMgbWluTGVuZ3RoLCBfbGVuZ3RoIGFzIGxlbmd0aCwgX3JlZ2V4IGFzIHJlZ2V4LCBfbG93ZXJjYXNlIGFzIGxvd2VyY2FzZSwgX3VwcGVyY2FzZSBhcyB1cHBlcmNhc2UsIF9pbmNsdWRlcyBhcyBpbmNsdWRlcywgX3N0YXJ0c1dpdGggYXMgc3RhcnRzV2l0aCwgX2VuZHNXaXRoIGFzIGVuZHNXaXRoLCBfcHJvcGVydHkgYXMgcHJvcGVydHksIF9taW1lIGFzIG1pbWUsIF9vdmVyd3JpdGUgYXMgb3ZlcndyaXRlLCBfbm9ybWFsaXplIGFzIG5vcm1hbGl6ZSwgX3RyaW0gYXMgdHJpbSwgX3RvTG93ZXJDYXNlIGFzIHRvTG93ZXJDYXNlLCBfdG9VcHBlckNhc2UgYXMgdG9VcHBlckNhc2UsIF9zbHVnaWZ5IGFzIHNsdWdpZnkgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuIiwgImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4uL2NvcmUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHNjaGVtYXMgZnJvbSBcIi4vc2NoZW1hcy5qc1wiO1xuZXhwb3J0IGNvbnN0IFpvZElTT0RhdGVUaW1lID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElTT0RhdGVUaW1lXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kSVNPRGF0ZVRpbWUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHNjaGVtYXMuWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGV0aW1lKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pc29EYXRlVGltZShab2RJU09EYXRlVGltZSwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RJU09EYXRlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElTT0RhdGVcIiwgKGluc3QsIGRlZik9PntcbiAgICBjb3JlLiRab2RJU09EYXRlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBzY2hlbWFzLlpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBkYXRlKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pc29EYXRlKFpvZElTT0RhdGUsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kSVNPVGltZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RJU09UaW1lXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kSVNPVGltZS5pbml0KGluc3QsIGRlZik7XG4gICAgc2NoZW1hcy5ab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdGltZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faXNvVGltZShab2RJU09UaW1lLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZElTT0R1cmF0aW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElTT0R1cmF0aW9uXCIsIChpbnN0LCBkZWYpPT57XG4gICAgY29yZS4kWm9kSVNPRHVyYXRpb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIHNjaGVtYXMuWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGR1cmF0aW9uKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pc29EdXJhdGlvbihab2RJU09EdXJhdGlvbiwgcGFyYW1zKTtcbn1cbiIsICJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyAkWm9kRXJyb3IgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBpbml0aWFsaXplciA9IChpbnN0LCBpc3N1ZXMpPT57XG4gICAgJFpvZEVycm9yLmluaXQoaW5zdCwgaXNzdWVzKTtcbiAgICBpbnN0Lm5hbWUgPSBcIlpvZEVycm9yXCI7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaW5zdCwge1xuICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgIHZhbHVlOiAobWFwcGVyKT0+Y29yZS5mb3JtYXRFcnJvcihpbnN0LCBtYXBwZXIpXG4gICAgICAgIH0sXG4gICAgICAgIGZsYXR0ZW46IHtcbiAgICAgICAgICAgIHZhbHVlOiAobWFwcGVyKT0+Y29yZS5mbGF0dGVuRXJyb3IoaW5zdCwgbWFwcGVyKVxuICAgICAgICB9LFxuICAgICAgICBhZGRJc3N1ZToge1xuICAgICAgICAgICAgdmFsdWU6IChpc3N1ZSk9PntcbiAgICAgICAgICAgICAgICBpbnN0Lmlzc3Vlcy5wdXNoKGlzc3VlKTtcbiAgICAgICAgICAgICAgICBpbnN0Lm1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShpbnN0Lmlzc3VlcywgdXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIsIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhZGRJc3N1ZXM6IHtcbiAgICAgICAgICAgIHZhbHVlOiAoaXNzdWVzKT0+e1xuICAgICAgICAgICAgICAgIGluc3QuaXNzdWVzLnB1c2goLi4uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICBpbnN0Lm1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShpbnN0Lmlzc3VlcywgdXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIsIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpc0VtcHR5OiB7XG4gICAgICAgICAgICBnZXQgKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0Lmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbi8vIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcImlzRW1wdHlcIiwge1xuLy8gICBnZXQoKSB7XG4vLyAgICAgcmV0dXJuIGluc3QuaXNzdWVzLmxlbmd0aCA9PT0gMDtcbi8vICAgfSxcbi8vIH0pO1xufTtcbmV4cG9ydCBjb25zdCBab2RFcnJvciA9IGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRXJyb3JcIiwgaW5pdGlhbGl6ZXIpO1xuZXhwb3J0IGNvbnN0IFpvZFJlYWxFcnJvciA9IGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRXJyb3JcIiwgaW5pdGlhbGl6ZXIsIHtcbiAgICBQYXJlbnQ6IEVycm9yXG59KTsgLy8gLyoqIEBkZXByZWNhdGVkIFVzZSBgei5jb3JlLiRab2RFcnJvck1hcEN0eGAgaW5zdGVhZC4gKi9cbiAvLyBleHBvcnQgdHlwZSBFcnJvck1hcEN0eCA9IGNvcmUuJFpvZEVycm9yTWFwQ3R4O1xuIiwgImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4uL2NvcmUvaW5kZXguanNcIjtcbmltcG9ydCB7IFpvZFJlYWxFcnJvciB9IGZyb20gXCIuL2Vycm9ycy5qc1wiO1xuZXhwb3J0IGNvbnN0IHBhcnNlID0gLyogQF9fUFVSRV9fICovIGNvcmUuX3BhcnNlKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgcGFyc2VBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9wYXJzZUFzeW5jKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZVBhcnNlID0gLyogQF9fUFVSRV9fICovIGNvcmUuX3NhZmVQYXJzZShab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHNhZmVQYXJzZUFzeW5jID0gLyogQF9fUFVSRV9fICovIGNvcmUuX3NhZmVQYXJzZUFzeW5jKFpvZFJlYWxFcnJvcik7XG4vLyBDb2RlYyBmdW5jdGlvbnNcbmV4cG9ydCBjb25zdCBlbmNvZGUgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fZW5jb2RlKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgZGVjb2RlID0gLyogQF9fUFVSRV9fICovIGNvcmUuX2RlY29kZShab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IGVuY29kZUFzeW5jID0gLyogQF9fUFVSRV9fICovIGNvcmUuX2VuY29kZUFzeW5jKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgZGVjb2RlQXN5bmMgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fZGVjb2RlQXN5bmMoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBzYWZlRW5jb2RlID0gLyogQF9fUFVSRV9fICovIGNvcmUuX3NhZmVFbmNvZGUoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBzYWZlRGVjb2RlID0gLyogQF9fUFVSRV9fICovIGNvcmUuX3NhZmVEZWNvZGUoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBzYWZlRW5jb2RlQXN5bmMgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fc2FmZUVuY29kZUFzeW5jKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZURlY29kZUFzeW5jID0gLyogQF9fUFVSRV9fICovIGNvcmUuX3NhZmVEZWNvZGVBc3luYyhab2RSZWFsRXJyb3IpO1xuIiwgIi8vIFpvZCAzIGNvbXBhdCBsYXllclxuaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuLyoqIEBkZXByZWNhdGVkIFVzZSB0aGUgcmF3IHN0cmluZyBsaXRlcmFsIGNvZGVzIGluc3RlYWQsIGUuZy4gXCJpbnZhbGlkX3R5cGVcIi4gKi8gZXhwb3J0IGNvbnN0IFpvZElzc3VlQ29kZSA9IHtcbiAgICBpbnZhbGlkX3R5cGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgdG9vX2JpZzogXCJ0b29fYmlnXCIsXG4gICAgdG9vX3NtYWxsOiBcInRvb19zbWFsbFwiLFxuICAgIGludmFsaWRfZm9ybWF0OiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgbm90X211bHRpcGxlX29mOiBcIm5vdF9tdWx0aXBsZV9vZlwiLFxuICAgIHVucmVjb2duaXplZF9rZXlzOiBcInVucmVjb2duaXplZF9rZXlzXCIsXG4gICAgaW52YWxpZF91bmlvbjogXCJpbnZhbGlkX3VuaW9uXCIsXG4gICAgaW52YWxpZF9rZXk6IFwiaW52YWxpZF9rZXlcIixcbiAgICBpbnZhbGlkX2VsZW1lbnQ6IFwiaW52YWxpZF9lbGVtZW50XCIsXG4gICAgaW52YWxpZF92YWx1ZTogXCJpbnZhbGlkX3ZhbHVlXCIsXG4gICAgY3VzdG9tOiBcImN1c3RvbVwiXG59O1xuZXhwb3J0IHsgJGJyYW5kLCBjb25maWcgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuLyoqIEBkZXByZWNhdGVkIFVzZSBgei5jb25maWcocGFyYW1zKWAgaW5zdGVhZC4gKi8gZXhwb3J0IGZ1bmN0aW9uIHNldEVycm9yTWFwKG1hcCkge1xuICAgIGNvcmUuY29uZmlnKHtcbiAgICAgICAgY3VzdG9tRXJyb3I6IG1hcFxuICAgIH0pO1xufVxuLyoqIEBkZXByZWNhdGVkIFVzZSBgei5jb25maWcoKWAgaW5zdGVhZC4gKi8gZXhwb3J0IGZ1bmN0aW9uIGdldEVycm9yTWFwKCkge1xuICAgIHJldHVybiBjb3JlLmNvbmZpZygpLmN1c3RvbUVycm9yO1xufVxuLyoqIEBkZXByZWNhdGVkIERvIG5vdCB1c2UuIFN0dWIgZGVmaW5pdGlvbiwgb25seSBpbmNsdWRlZCBmb3Igem9kLXRvLWpzb24tc2NoZW1hIGNvbXBhdGliaWxpdHkuICovIGV4cG9ydCB2YXIgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kO1xuKGZ1bmN0aW9uKFpvZEZpcnN0UGFydHlUeXBlS2luZCkge30pKFpvZEZpcnN0UGFydHlUeXBlS2luZCB8fCAoWm9kRmlyc3RQYXJ0eVR5cGVLaW5kID0ge30pKTtcbiIsICJpbXBvcnQgeyBnbG9iYWxSZWdpc3RyeSB9IGZyb20gXCIuLi9jb3JlL3JlZ2lzdHJpZXMuanNcIjtcbmltcG9ydCAqIGFzIF9jaGVja3MgZnJvbSBcIi4vY2hlY2tzLmpzXCI7XG5pbXBvcnQgKiBhcyBfaXNvIGZyb20gXCIuL2lzby5qc1wiO1xuaW1wb3J0ICogYXMgX3NjaGVtYXMgZnJvbSBcIi4vc2NoZW1hcy5qc1wiO1xuLy8gTG9jYWwgeiBvYmplY3QgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSB3aXRoIC4uL2luZGV4LmpzXG5jb25zdCB6ID0ge1xuICAgIC4uLl9zY2hlbWFzLFxuICAgIC4uLl9jaGVja3MsXG4gICAgaXNvOiBfaXNvXG59O1xuLy8gS2V5cyB0aGF0IGFyZSByZWNvZ25pemVkIGFuZCBoYW5kbGVkIGJ5IHRoZSBjb252ZXJzaW9uIGxvZ2ljXG5jb25zdCBSRUNPR05JWkVEX0tFWVMgPSBuZXcgU2V0KFtcbiAgICAvLyBTY2hlbWEgaWRlbnRpZmljYXRpb25cbiAgICBcIiRzY2hlbWFcIixcbiAgICBcIiRyZWZcIixcbiAgICBcIiRkZWZzXCIsXG4gICAgXCJkZWZpbml0aW9uc1wiLFxuICAgIC8vIENvcmUgc2NoZW1hIGtleXdvcmRzXG4gICAgXCIkaWRcIixcbiAgICBcImlkXCIsXG4gICAgXCIkY29tbWVudFwiLFxuICAgIFwiJGFuY2hvclwiLFxuICAgIFwiJHZvY2FidWxhcnlcIixcbiAgICBcIiRkeW5hbWljUmVmXCIsXG4gICAgXCIkZHluYW1pY0FuY2hvclwiLFxuICAgIC8vIFR5cGVcbiAgICBcInR5cGVcIixcbiAgICBcImVudW1cIixcbiAgICBcImNvbnN0XCIsXG4gICAgLy8gQ29tcG9zaXRpb25cbiAgICBcImFueU9mXCIsXG4gICAgXCJvbmVPZlwiLFxuICAgIFwiYWxsT2ZcIixcbiAgICBcIm5vdFwiLFxuICAgIC8vIE9iamVjdFxuICAgIFwicHJvcGVydGllc1wiLFxuICAgIFwicmVxdWlyZWRcIixcbiAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCIsXG4gICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiLFxuICAgIFwicHJvcGVydHlOYW1lc1wiLFxuICAgIFwibWluUHJvcGVydGllc1wiLFxuICAgIFwibWF4UHJvcGVydGllc1wiLFxuICAgIC8vIEFycmF5XG4gICAgXCJpdGVtc1wiLFxuICAgIFwicHJlZml4SXRlbXNcIixcbiAgICBcImFkZGl0aW9uYWxJdGVtc1wiLFxuICAgIFwibWluSXRlbXNcIixcbiAgICBcIm1heEl0ZW1zXCIsXG4gICAgXCJ1bmlxdWVJdGVtc1wiLFxuICAgIFwiY29udGFpbnNcIixcbiAgICBcIm1pbkNvbnRhaW5zXCIsXG4gICAgXCJtYXhDb250YWluc1wiLFxuICAgIC8vIFN0cmluZ1xuICAgIFwibWluTGVuZ3RoXCIsXG4gICAgXCJtYXhMZW5ndGhcIixcbiAgICBcInBhdHRlcm5cIixcbiAgICBcImZvcm1hdFwiLFxuICAgIC8vIE51bWJlclxuICAgIFwibWluaW11bVwiLFxuICAgIFwibWF4aW11bVwiLFxuICAgIFwiZXhjbHVzaXZlTWluaW11bVwiLFxuICAgIFwiZXhjbHVzaXZlTWF4aW11bVwiLFxuICAgIFwibXVsdGlwbGVPZlwiLFxuICAgIC8vIEFscmVhZHkgaGFuZGxlZCBtZXRhZGF0YVxuICAgIFwiZGVzY3JpcHRpb25cIixcbiAgICBcImRlZmF1bHRcIixcbiAgICAvLyBDb250ZW50XG4gICAgXCJjb250ZW50RW5jb2RpbmdcIixcbiAgICBcImNvbnRlbnRNZWRpYVR5cGVcIixcbiAgICBcImNvbnRlbnRTY2hlbWFcIixcbiAgICAvLyBVbnN1cHBvcnRlZCAoZXJyb3ItdGhyb3dpbmcpXG4gICAgXCJ1bmV2YWx1YXRlZEl0ZW1zXCIsXG4gICAgXCJ1bmV2YWx1YXRlZFByb3BlcnRpZXNcIixcbiAgICBcImlmXCIsXG4gICAgXCJ0aGVuXCIsXG4gICAgXCJlbHNlXCIsXG4gICAgXCJkZXBlbmRlbnRTY2hlbWFzXCIsXG4gICAgXCJkZXBlbmRlbnRSZXF1aXJlZFwiLFxuICAgIC8vIE9wZW5BUElcbiAgICBcIm51bGxhYmxlXCIsXG4gICAgXCJyZWFkT25seVwiXG5dKTtcbmZ1bmN0aW9uIGRldGVjdFZlcnNpb24oc2NoZW1hLCBkZWZhdWx0VGFyZ2V0KSB7XG4gICAgY29uc3QgJHNjaGVtYSA9IHNjaGVtYS4kc2NoZW1hO1xuICAgIGlmICgkc2NoZW1hID09PSBcImh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1hXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiZHJhZnQtMjAyMC0xMlwiO1xuICAgIH1cbiAgICBpZiAoJHNjaGVtYSA9PT0gXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIikge1xuICAgICAgICByZXR1cm4gXCJkcmFmdC03XCI7XG4gICAgfVxuICAgIGlmICgkc2NoZW1hID09PSBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hI1wiKSB7XG4gICAgICAgIHJldHVybiBcImRyYWZ0LTRcIjtcbiAgICB9XG4gICAgLy8gVXNlIGRlZmF1bHRUYXJnZXQgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBkZWZhdWx0IHRvIGRyYWZ0LTIwMjAtMTJcbiAgICByZXR1cm4gZGVmYXVsdFRhcmdldCA/PyBcImRyYWZ0LTIwMjAtMTJcIjtcbn1cbmZ1bmN0aW9uIHJlc29sdmVSZWYocmVmLCBjdHgpIHtcbiAgICBpZiAoIXJlZi5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHRlcm5hbCAkcmVmIGlzIG5vdCBzdXBwb3J0ZWQsIG9ubHkgbG9jYWwgcmVmcyAoIy8uLi4pIGFyZSBhbGxvd2VkXCIpO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gcmVmLnNsaWNlKDEpLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgLy8gSGFuZGxlIHJvb3QgcmVmZXJlbmNlIFwiI1wiXG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBjdHgucm9vdFNjaGVtYTtcbiAgICB9XG4gICAgY29uc3QgZGVmc0tleSA9IGN0eC52ZXJzaW9uID09PSBcImRyYWZ0LTIwMjAtMTJcIiA/IFwiJGRlZnNcIiA6IFwiZGVmaW5pdGlvbnNcIjtcbiAgICBpZiAocGF0aFswXSA9PT0gZGVmc0tleSkge1xuICAgICAgICBjb25zdCBrZXkgPSBwYXRoWzFdO1xuICAgICAgICBpZiAoIWtleSB8fCAhY3R4LmRlZnNba2V5XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke3JlZn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3R4LmRlZnNba2V5XTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke3JlZn1gKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRCYXNlU2NoZW1hKHNjaGVtYSwgY3R4KSB7XG4gICAgLy8gSGFuZGxlIHVuc3VwcG9ydGVkIGZlYXR1cmVzXG4gICAgaWYgKHNjaGVtYS5ub3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IHsgbm90OiB7fSB9IHJlcHJlc2VudHMgbmV2ZXJcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubm90ID09PSBcIm9iamVjdFwiICYmIE9iamVjdC5rZXlzKHNjaGVtYS5ub3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHoubmV2ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaXMgbm90IHN1cHBvcnRlZCBpbiBab2QgKGV4Y2VwdCB7IG5vdDoge30gfSBmb3IgbmV2ZXIpXCIpO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLnVuZXZhbHVhdGVkSXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmV2YWx1YXRlZEl0ZW1zIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIGlmIChzY2hlbWEudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIGlmIChzY2hlbWEuaWYgIT09IHVuZGVmaW5lZCB8fCBzY2hlbWEudGhlbiAhPT0gdW5kZWZpbmVkIHx8IHNjaGVtYS5lbHNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29uZGl0aW9uYWwgc2NoZW1hcyAoaWYvdGhlbi9lbHNlKSBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG4gICAgaWYgKHNjaGVtYS5kZXBlbmRlbnRTY2hlbWFzICE9PSB1bmRlZmluZWQgfHwgc2NoZW1hLmRlcGVuZGVudFJlcXVpcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZGVwZW5kZW50U2NoZW1hcyBhbmQgZGVwZW5kZW50UmVxdWlyZWQgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuICAgIC8vIEhhbmRsZSAkcmVmXG4gICAgaWYgKHNjaGVtYS4kcmVmKSB7XG4gICAgICAgIGNvbnN0IHJlZlBhdGggPSBzY2hlbWEuJHJlZjtcbiAgICAgICAgaWYgKGN0eC5yZWZzLmhhcyhyZWZQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5yZWZzLmdldChyZWZQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LnByb2Nlc3NpbmcuaGFzKHJlZlBhdGgpKSB7XG4gICAgICAgICAgICAvLyBDaXJjdWxhciByZWZlcmVuY2UgLSB1c2UgbGF6eVxuICAgICAgICAgICAgcmV0dXJuIHoubGF6eSgoKT0+e1xuICAgICAgICAgICAgICAgIGlmICghY3R4LnJlZnMuaGFzKHJlZlBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIG5vdCByZXNvbHZlZDogJHtyZWZQYXRofWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LnJlZnMuZ2V0KHJlZlBhdGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3R4LnByb2Nlc3NpbmcuYWRkKHJlZlBhdGgpO1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVSZWYocmVmUGF0aCwgY3R4KTtcbiAgICAgICAgY29uc3Qgem9kU2NoZW1hID0gY29udmVydFNjaGVtYShyZXNvbHZlZCwgY3R4KTtcbiAgICAgICAgY3R4LnJlZnMuc2V0KHJlZlBhdGgsIHpvZFNjaGVtYSk7XG4gICAgICAgIGN0eC5wcm9jZXNzaW5nLmRlbGV0ZShyZWZQYXRoKTtcbiAgICAgICAgcmV0dXJuIHpvZFNjaGVtYTtcbiAgICB9XG4gICAgLy8gSGFuZGxlIGVudW1cbiAgICBpZiAoc2NoZW1hLmVudW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWVzID0gc2NoZW1hLmVudW07XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZTogT3BlbkFQSSAzLjAgbnVsbCByZXByZXNlbnRhdGlvbiB7IHR5cGU6IFwic3RyaW5nXCIsIG51bGxhYmxlOiB0cnVlLCBlbnVtOiBbbnVsbF0gfVxuICAgICAgICBpZiAoY3R4LnZlcnNpb24gPT09IFwib3BlbmFwaS0zLjBcIiAmJiBzY2hlbWEubnVsbGFibGUgPT09IHRydWUgJiYgZW51bVZhbHVlcy5sZW5ndGggPT09IDEgJiYgZW51bVZhbHVlc1swXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHoubnVsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnVtVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHoubmV2ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW51bVZhbHVlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB6LmxpdGVyYWwoZW51bVZhbHVlc1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIHZhbHVlcyBhcmUgc3RyaW5nc1xuICAgICAgICBpZiAoZW51bVZhbHVlcy5ldmVyeSgodik9PnR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHouZW51bShlbnVtVmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBNaXhlZCB0eXBlcyAtIHVzZSB1bmlvbiBvZiBsaXRlcmFsc1xuICAgICAgICBjb25zdCBsaXRlcmFsU2NoZW1hcyA9IGVudW1WYWx1ZXMubWFwKCh2KT0+ei5saXRlcmFsKHYpKTtcbiAgICAgICAgaWYgKGxpdGVyYWxTY2hlbWFzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBsaXRlcmFsU2NoZW1hc1swXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gei51bmlvbihbXG4gICAgICAgICAgICBsaXRlcmFsU2NoZW1hc1swXSxcbiAgICAgICAgICAgIGxpdGVyYWxTY2hlbWFzWzFdLFxuICAgICAgICAgICAgLi4ubGl0ZXJhbFNjaGVtYXMuc2xpY2UoMilcbiAgICAgICAgXSk7XG4gICAgfVxuICAgIC8vIEhhbmRsZSBjb25zdFxuICAgIGlmIChzY2hlbWEuY29uc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gei5saXRlcmFsKHNjaGVtYS5jb25zdCk7XG4gICAgfVxuICAgIC8vIEhhbmRsZSB0eXBlXG4gICAgY29uc3QgdHlwZSA9IHNjaGVtYS50eXBlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICAgIC8vIEV4cGFuZCB0eXBlIGFycmF5IGludG8gYW55T2YgdW5pb25cbiAgICAgICAgY29uc3QgdHlwZVNjaGVtYXMgPSB0eXBlLm1hcCgodCk9PntcbiAgICAgICAgICAgIGNvbnN0IHR5cGVTY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICAgIHR5cGU6IHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gY29udmVydEJhc2VTY2hlbWEodHlwZVNjaGVtYSwgY3R4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0eXBlU2NoZW1hcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB6Lm5ldmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVTY2hlbWFzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVTY2hlbWFzWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB6LnVuaW9uKHR5cGVTY2hlbWFzKTtcbiAgICB9XG4gICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIC8vIE5vIHR5cGUgc3BlY2lmaWVkIC0gZW1wdHkgc2NoZW1hIChhbnkpXG4gICAgICAgIHJldHVybiB6LmFueSgpO1xuICAgIH1cbiAgICBsZXQgem9kU2NoZW1hO1xuICAgIHN3aXRjaCh0eXBlKXtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCBzdHJpbmdTY2hlbWEgPSB6LnN0cmluZygpO1xuICAgICAgICAgICAgICAgIC8vIEFwcGx5IGZvcm1hdCB1c2luZyAuY2hlY2soKSB3aXRoIFpvZCBmb3JtYXQgZnVuY3Rpb25zXG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gc2NoZW1hLmZvcm1hdDtcbiAgICAgICAgICAgICAgICAgICAgLy8gTWFwIGNvbW1vbiBmb3JtYXRzIHRvIFpvZCBjaGVjayBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJlbWFpbFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5lbWFpbCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IFwidXJpXCIgfHwgZm9ybWF0ID09PSBcInVyaS1yZWZlcmVuY2VcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHoudXJsKCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJ1dWlkXCIgfHwgZm9ybWF0ID09PSBcImd1aWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHoudXVpZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IFwiZGF0ZS10aW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6Lmlzby5kYXRldGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IFwiZGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5pc28uZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IFwidGltZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5pc28udGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IFwiZHVyYXRpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouaXNvLmR1cmF0aW9uKCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJpcHY0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmlwdjQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBcImlwdjZcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouaXB2NigpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IFwibWFjXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6Lm1hYygpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IFwiY2lkclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5jaWRydjQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBcImNpZHItdjZcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouY2lkcnY2KCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJiYXNlNjRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouYmFzZTY0KCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJiYXNlNjR1cmxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHouYmFzZTY0dXJsKCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJlMTY0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmUxNjQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBcImp3dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei5qd3QoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBcImVtb2ppXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmVtb2ppKCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJuYW5vaWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmNoZWNrKHoubmFub2lkKCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJjdWlkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmN1aWQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBcImN1aWQyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmN1aWQyKCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gXCJ1bGlkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LnVsaWQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBcInhpZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEuY2hlY2soei54aWQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBcImtzdWlkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5jaGVjayh6LmtzdWlkKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm90ZToganNvbi1zdHJpbmcgZm9ybWF0IGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IFpvZFxuICAgICAgICAgICAgICAgIC8vIEN1c3RvbSBmb3JtYXRzIGFyZSBpZ25vcmVkIC0ga2VlcCBhcyBwbGFpbiBzdHJpbmdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgY29uc3RyYWludHNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5MZW5ndGggPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLm1pbihzY2hlbWEubWluTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubWF4TGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5tYXgoc2NoZW1hLm1heExlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEucGF0dGVybikge1xuICAgICAgICAgICAgICAgICAgICAvLyBKU09OIFNjaGVtYSBwYXR0ZXJucyBhcmUgbm90IGltcGxpY2l0bHkgYW5jaG9yZWQgKG1hdGNoIGFueXdoZXJlIGluIHN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLnJlZ2V4KG5ldyBSZWdFeHAoc2NoZW1hLnBhdHRlcm4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgem9kU2NoZW1hID0gc3RyaW5nU2NoZW1hO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IG51bWJlclNjaGVtYSA9IHR5cGUgPT09IFwiaW50ZWdlclwiID8gei5udW1iZXIoKS5pbnQoKSA6IHoubnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgY29uc3RyYWludHNcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlclNjaGVtYSA9IG51bWJlclNjaGVtYS5taW4oc2NoZW1hLm1pbmltdW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tYXhpbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlclNjaGVtYSA9IG51bWJlclNjaGVtYS5tYXgoc2NoZW1hLm1heGltdW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlclNjaGVtYSA9IG51bWJlclNjaGVtYS5ndChzY2hlbWEuZXhjbHVzaXZlTWluaW11bSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEuZXhjbHVzaXZlTWluaW11bSA9PT0gdHJ1ZSAmJiB0eXBlb2Ygc2NoZW1hLm1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyU2NoZW1hID0gbnVtYmVyU2NoZW1hLmd0KHNjaGVtYS5taW5pbXVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuZXhjbHVzaXZlTWF4aW11bSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBudW1iZXJTY2hlbWEgPSBudW1iZXJTY2hlbWEubHQoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gPT09IHRydWUgJiYgdHlwZW9mIHNjaGVtYS5tYXhpbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlclNjaGVtYSA9IG51bWJlclNjaGVtYS5sdChzY2hlbWEubWF4aW11bSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm11bHRpcGxlT2YgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyU2NoZW1hID0gbnVtYmVyU2NoZW1hLm11bHRpcGxlT2Yoc2NoZW1hLm11bHRpcGxlT2YpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSBudW1iZXJTY2hlbWE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgem9kU2NoZW1hID0gei5ib29sZWFuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgem9kU2NoZW1hID0gei5udWxsKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFwZSA9IHt9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBzY2hlbWEucHJvcGVydGllcyB8fCB7fTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1aXJlZFNldCA9IG5ldyBTZXQoc2NoZW1hLnJlcXVpcmVkIHx8IFtdKTtcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHByb3BlcnRpZXMgLSBtYXJrIG9wdGlvbmFsIG9uZXNcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHByb3BTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcFpvZFNjaGVtYSA9IGNvbnZlcnRTY2hlbWEocHJvcFNjaGVtYSwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm90IGluIHJlcXVpcmVkIGFycmF5LCBtYWtlIGl0IG9wdGlvbmFsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSByZXF1aXJlZFNldC5oYXMoa2V5KSA/IHByb3Bab2RTY2hlbWEgOiBwcm9wWm9kU2NoZW1hLm9wdGlvbmFsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBwcm9wZXJ0eU5hbWVzXG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleVNjaGVtYSA9IGNvbnZlcnRTY2hlbWEoc2NoZW1hLnByb3BlcnR5TmFtZXMsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlU2NoZW1hID0gc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzICYmIHR5cGVvZiBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPT09IFwib2JqZWN0XCIgPyBjb252ZXJ0U2NoZW1hKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcywgY3R4KSA6IHouYW55KCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIENhc2UgQTogTm8gcHJvcGVydGllcyAocHVyZSByZWNvcmQpXG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzaGFwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnJlY29yZChrZXlTY2hlbWEsIHZhbHVlU2NoZW1hKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIENhc2UgQjogV2l0aCBwcm9wZXJ0aWVzIChpbnRlcnNlY3Rpb24gb2Ygb2JqZWN0IGFuZCBsb29zZVJlY29yZClcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0U2NoZW1hID0gei5vYmplY3Qoc2hhcGUpLnBhc3N0aHJvdWdoKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZFNjaGVtYSA9IHoubG9vc2VSZWNvcmQoa2V5U2NoZW1hLCB2YWx1ZVNjaGVtYSk7XG4gICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHouaW50ZXJzZWN0aW9uKG9iamVjdFNjaGVtYSwgcmVjb3JkU2NoZW1hKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBwYXR0ZXJuUHJvcGVydGllc1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEucGF0dGVyblByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcGF0dGVyblByb3BlcnRpZXM6IGtleXMgbWF0Y2hpbmcgcGF0dGVybiBtdXN0IHNhdGlzZnkgY29ycmVzcG9uZGluZyBzY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGxvb3NlIHJlY29yZHMgc28gbm9uLW1hdGNoaW5nIGtleXMgcGFzcyB0aHJvdWdoXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wcyA9IHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybktleXMgPSBPYmplY3Qua2V5cyhwYXR0ZXJuUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb29zZVJlY29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5LZXlzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5WYWx1ZSA9IGNvbnZlcnRTY2hlbWEocGF0dGVyblByb3BzW3BhdHRlcm5dLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5U2NoZW1hID0gei5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKHBhdHRlcm4pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvb3NlUmVjb3Jkcy5wdXNoKHoubG9vc2VSZWNvcmQoa2V5U2NoZW1hLCBwYXR0ZXJuVmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBCdWlsZCBpbnRlcnNlY3Rpb246IG9iamVjdCBzY2hlbWEgKyBhbGwgcGF0dGVybiBwcm9wZXJ0eSByZWNvcmRzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYXNUb0ludGVyc2VjdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2hhcGUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBwYXNzdGhyb3VnaCBzbyBwYXR0ZXJuUHJvcGVydGllcyBjYW4gdmFsaWRhdGUgYWRkaXRpb25hbCBrZXlzXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFzVG9JbnRlcnNlY3QucHVzaCh6Lm9iamVjdChzaGFwZSkucGFzc3Rocm91Z2goKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hc1RvSW50ZXJzZWN0LnB1c2goLi4ubG9vc2VSZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYXNUb0ludGVyc2VjdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHoub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYXNUb0ludGVyc2VjdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHNjaGVtYXNUb0ludGVyc2VjdFswXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYWluIGludGVyc2VjdGlvbnM6IChBICYgQikgJiBDICYgRCAuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSB6LmludGVyc2VjdGlvbihzY2hlbWFzVG9JbnRlcnNlY3RbMF0sIHNjaGVtYXNUb0ludGVyc2VjdFsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSAyOyBpIDwgc2NoZW1hc1RvSW50ZXJzZWN0Lmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB6LmludGVyc2VjdGlvbihyZXN1bHQsIHNjaGVtYXNUb0ludGVyc2VjdFtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBhZGRpdGlvbmFsUHJvcGVydGllc1xuICAgICAgICAgICAgICAgIC8vIEluIEpTT04gU2NoZW1hLCBhZGRpdGlvbmFsUHJvcGVydGllcyBkZWZhdWx0cyB0byB0cnVlIChhbGxvdyBhbnkgZXh0cmEgcHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAvLyBJbiBab2QsIG9iamVjdHMgc3RyaXAgdW5rbm93biBrZXlzIGJ5IGRlZmF1bHQsIHNvIHdlIG5lZWQgdG8gaGFuZGxlIHRoaXMgZXhwbGljaXRseVxuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdFNjaGVtYSA9IHoub2JqZWN0KHNoYXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdHJpY3QgbW9kZSAtIG5vIGV4dHJhIHByb3BlcnRpZXMgYWxsb3dlZFxuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSBvYmplY3RTY2hlbWEuc3RyaWN0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhIHByb3BlcnRpZXMgbXVzdCBtYXRjaCB0aGUgc3BlY2lmaWVkIHNjaGVtYVxuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSBvYmplY3RTY2hlbWEuY2F0Y2hhbGwoY29udmVydFNjaGVtYShzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMsIGN0eCkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIGlzIHRydWUgb3IgdW5kZWZpbmVkIC0gYWxsb3cgYW55IGV4dHJhIHByb3BlcnRpZXMgKHBhc3N0aHJvdWdoKVxuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSBvYmplY3RTY2hlbWEucGFzc3Rocm91Z2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IHVuaXF1ZUl0ZW1zIGlzIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBjb250YWlucy9taW5Db250YWlucy9tYXhDb250YWlucyBhcmUgbm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSB0dXBsZSAocHJlZml4SXRlbXMgb3IgaXRlbXMgYXMgYXJyYXkpXG4gICAgICAgICAgICAgICAgY29uc3QgcHJlZml4SXRlbXMgPSBzY2hlbWEucHJlZml4SXRlbXM7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBzY2hlbWEuaXRlbXM7XG4gICAgICAgICAgICAgICAgaWYgKHByZWZpeEl0ZW1zICYmIEFycmF5LmlzQXJyYXkocHJlZml4SXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFR1cGxlIHdpdGggcHJlZml4SXRlbXMgKGRyYWZ0LTIwMjAtMTIpXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR1cGxlSXRlbXMgPSBwcmVmaXhJdGVtcy5tYXAoKGl0ZW0pPT5jb252ZXJ0U2NoZW1hKGl0ZW0sIGN0eCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gaXRlbXMgJiYgdHlwZW9mIGl0ZW1zID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGl0ZW1zKSA/IGNvbnZlcnRTY2hlbWEoaXRlbXMsIGN0eCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpLnJlc3QocmVzdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6LnR1cGxlKHR1cGxlSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IG1pbkl0ZW1zL21heEl0ZW1zIGNvbnN0cmFpbnRzIHRvIHR1cGxlc1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgem9kU2NoZW1hID0gem9kU2NoZW1hLmNoZWNrKHoubWluTGVuZ3RoKHNjaGVtYS5taW5JdGVtcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6b2RTY2hlbWEuY2hlY2soei5tYXhMZW5ndGgoc2NoZW1hLm1heEl0ZW1zKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFR1cGxlIHdpdGggaXRlbXMgYXJyYXkgKGRyYWZ0LTcpXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR1cGxlSXRlbXMgPSBpdGVtcy5tYXAoKGl0ZW0pPT5jb252ZXJ0U2NoZW1hKGl0ZW0sIGN0eCkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0ID0gc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyAmJiB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gXCJvYmplY3RcIiA/IGNvbnZlcnRTY2hlbWEoc2NoZW1hLmFkZGl0aW9uYWxJdGVtcywgY3R4KSA6IHVuZGVmaW5lZDsgLy8gYWRkaXRpb25hbEl0ZW1zOiBmYWxzZSBtZWFucyBubyByZXN0LCBoYW5kbGVkIGJ5IGRlZmF1bHQgdHVwbGUgYmVoYXZpb3JcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHoudHVwbGUodHVwbGVJdGVtcykucmVzdChyZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHoudHVwbGUodHVwbGVJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gQXBwbHkgbWluSXRlbXMvbWF4SXRlbXMgY29uc3RyYWludHMgdG8gdHVwbGVzXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1pbkl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSB6b2RTY2hlbWEuY2hlY2soei5taW5MZW5ndGgoc2NoZW1hLm1pbkl0ZW1zKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubWF4SXRlbXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvZFNjaGVtYSA9IHpvZFNjaGVtYS5jaGVjayh6Lm1heExlbmd0aChzY2hlbWEubWF4SXRlbXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZWd1bGFyIGFycmF5XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb252ZXJ0U2NoZW1hKGl0ZW1zLCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXlTY2hlbWEgPSB6LmFycmF5KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBBcHBseSBjb25zdHJhaW50c1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlTY2hlbWEgPSBhcnJheVNjaGVtYS5taW4oc2NoZW1hLm1pbkl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNjaGVtYS5tYXhJdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlTY2hlbWEgPSBhcnJheVNjaGVtYS5tYXgoc2NoZW1hLm1heEl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB6b2RTY2hlbWEgPSBhcnJheVNjaGVtYTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBObyBpdGVtcyBzcGVjaWZpZWQgLSBhcnJheSBvZiBhbnlcbiAgICAgICAgICAgICAgICAgICAgem9kU2NoZW1hID0gei5hcnJheSh6LmFueSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZX1gKTtcbiAgICB9XG4gICAgLy8gQXBwbHkgbWV0YWRhdGFcbiAgICBpZiAoc2NoZW1hLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHpvZFNjaGVtYSA9IHpvZFNjaGVtYS5kZXNjcmliZShzY2hlbWEuZGVzY3JpcHRpb24pO1xuICAgIH1cbiAgICBpZiAoc2NoZW1hLmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB6b2RTY2hlbWEgPSB6b2RTY2hlbWEuZGVmYXVsdChzY2hlbWEuZGVmYXVsdCk7XG4gICAgfVxuICAgIHJldHVybiB6b2RTY2hlbWE7XG59XG5mdW5jdGlvbiBjb252ZXJ0U2NoZW1hKHNjaGVtYSwgY3R4KSB7XG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWEgPyB6LmFueSgpIDogei5uZXZlcigpO1xuICAgIH1cbiAgICAvLyBDb252ZXJ0IGJhc2Ugc2NoZW1hIGZpcnN0IChpZ25vcmluZyBjb21wb3NpdGlvbiBrZXl3b3JkcylcbiAgICBsZXQgYmFzZVNjaGVtYSA9IGNvbnZlcnRCYXNlU2NoZW1hKHNjaGVtYSwgY3R4KTtcbiAgICBjb25zdCBoYXNFeHBsaWNpdFR5cGUgPSBzY2hlbWEudHlwZSB8fCBzY2hlbWEuZW51bSAhPT0gdW5kZWZpbmVkIHx8IHNjaGVtYS5jb25zdCAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIFByb2Nlc3MgY29tcG9zaXRpb24ga2V5d29yZHMgTEFTVCAodGhleSBjYW4gYXBwZWFyIHRvZ2V0aGVyKVxuICAgIC8vIEhhbmRsZSBhbnlPZiAtIHdyYXAgYmFzZSBzY2hlbWEgd2l0aCB1bmlvblxuICAgIGlmIChzY2hlbWEuYW55T2YgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuYW55T2YpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzY2hlbWEuYW55T2YubWFwKChzKT0+Y29udmVydFNjaGVtYShzLCBjdHgpKTtcbiAgICAgICAgY29uc3QgYW55T2ZVbmlvbiA9IHoudW5pb24ob3B0aW9ucyk7XG4gICAgICAgIGJhc2VTY2hlbWEgPSBoYXNFeHBsaWNpdFR5cGUgPyB6LmludGVyc2VjdGlvbihiYXNlU2NoZW1hLCBhbnlPZlVuaW9uKSA6IGFueU9mVW5pb247XG4gICAgfVxuICAgIC8vIEhhbmRsZSBvbmVPZiAtIGV4Y2x1c2l2ZSB1bmlvbiAoZXhhY3RseSBvbmUgbXVzdCBtYXRjaClcbiAgICBpZiAoc2NoZW1hLm9uZU9mICYmIEFycmF5LmlzQXJyYXkoc2NoZW1hLm9uZU9mKSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gc2NoZW1hLm9uZU9mLm1hcCgocyk9PmNvbnZlcnRTY2hlbWEocywgY3R4KSk7XG4gICAgICAgIGNvbnN0IG9uZU9mVW5pb24gPSB6LnhvcihvcHRpb25zKTtcbiAgICAgICAgYmFzZVNjaGVtYSA9IGhhc0V4cGxpY2l0VHlwZSA/IHouaW50ZXJzZWN0aW9uKGJhc2VTY2hlbWEsIG9uZU9mVW5pb24pIDogb25lT2ZVbmlvbjtcbiAgICB9XG4gICAgLy8gSGFuZGxlIGFsbE9mIC0gd3JhcCBiYXNlIHNjaGVtYSB3aXRoIGludGVyc2VjdGlvblxuICAgIGlmIChzY2hlbWEuYWxsT2YgJiYgQXJyYXkuaXNBcnJheShzY2hlbWEuYWxsT2YpKSB7XG4gICAgICAgIGlmIChzY2hlbWEuYWxsT2YubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBiYXNlU2NoZW1hID0gaGFzRXhwbGljaXRUeXBlID8gYmFzZVNjaGVtYSA6IHouYW55KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gaGFzRXhwbGljaXRUeXBlID8gYmFzZVNjaGVtYSA6IGNvbnZlcnRTY2hlbWEoc2NoZW1hLmFsbE9mWzBdLCBjdHgpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRJZHggPSBoYXNFeHBsaWNpdFR5cGUgPyAwIDogMTtcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IHN0YXJ0SWR4OyBpIDwgc2NoZW1hLmFsbE9mLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB6LmludGVyc2VjdGlvbihyZXN1bHQsIGNvbnZlcnRTY2hlbWEoc2NoZW1hLmFsbE9mW2ldLCBjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJhc2VTY2hlbWEgPSByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSGFuZGxlIG51bGxhYmxlIChPcGVuQVBJIDMuMClcbiAgICBpZiAoc2NoZW1hLm51bGxhYmxlID09PSB0cnVlICYmIGN0eC52ZXJzaW9uID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAgICAgYmFzZVNjaGVtYSA9IHoubnVsbGFibGUoYmFzZVNjaGVtYSk7XG4gICAgfVxuICAgIC8vIEhhbmRsZSByZWFkT25seVxuICAgIGlmIChzY2hlbWEucmVhZE9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgYmFzZVNjaGVtYSA9IHoucmVhZG9ubHkoYmFzZVNjaGVtYSk7XG4gICAgfVxuICAgIC8vIENvbGxlY3QgbWV0YWRhdGE6IGNvcmUgc2NoZW1hIGtleXdvcmRzIGFuZCB1bnJlY29nbml6ZWQga2V5c1xuICAgIGNvbnN0IGV4dHJhTWV0YSA9IHt9O1xuICAgIC8vIENvcmUgc2NoZW1hIGtleXdvcmRzIHRoYXQgc2hvdWxkIGJlIGNhcHR1cmVkIGFzIG1ldGFkYXRhXG4gICAgY29uc3QgY29yZU1ldGFkYXRhS2V5cyA9IFtcbiAgICAgICAgXCIkaWRcIixcbiAgICAgICAgXCJpZFwiLFxuICAgICAgICBcIiRjb21tZW50XCIsXG4gICAgICAgIFwiJGFuY2hvclwiLFxuICAgICAgICBcIiR2b2NhYnVsYXJ5XCIsXG4gICAgICAgIFwiJGR5bmFtaWNSZWZcIixcbiAgICAgICAgXCIkZHluYW1pY0FuY2hvclwiXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb3JlTWV0YWRhdGFLZXlzKXtcbiAgICAgICAgaWYgKGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgICAgIGV4dHJhTWV0YVtrZXldID0gc2NoZW1hW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29udGVudCBrZXl3b3JkcyAtIHN0b3JlIGFzIG1ldGFkYXRhXG4gICAgY29uc3QgY29udGVudE1ldGFkYXRhS2V5cyA9IFtcbiAgICAgICAgXCJjb250ZW50RW5jb2RpbmdcIixcbiAgICAgICAgXCJjb250ZW50TWVkaWFUeXBlXCIsXG4gICAgICAgIFwiY29udGVudFNjaGVtYVwiXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb250ZW50TWV0YWRhdGFLZXlzKXtcbiAgICAgICAgaWYgKGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgICAgIGV4dHJhTWV0YVtrZXldID0gc2NoZW1hW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVW5yZWNvZ25pemVkIGtleXMgKGN1c3RvbSBtZXRhZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKXtcbiAgICAgICAgaWYgKCFSRUNPR05JWkVEX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGV4dHJhTWV0YVtrZXldID0gc2NoZW1hW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGV4dHJhTWV0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICBjdHgucmVnaXN0cnkuYWRkKGJhc2VTY2hlbWEsIGV4dHJhTWV0YSk7XG4gICAgfVxuICAgIHJldHVybiBiYXNlU2NoZW1hO1xufVxuLyoqXG4gKiBDb252ZXJ0cyBhIEpTT04gU2NoZW1hIHRvIGEgWm9kIHNjaGVtYS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBzZW1pLWV4cGVyaW1lbnRhbC4gSXQncyBiZWhhdmlvciBpcyBsaWFibGUgdG8gY2hhbmdlLiAqLyBleHBvcnQgZnVuY3Rpb24gZnJvbUpTT05TY2hlbWEoc2NoZW1hLCBwYXJhbXMpIHtcbiAgICAvLyBIYW5kbGUgYm9vbGVhbiBzY2hlbWFzXG4gICAgaWYgKHR5cGVvZiBzY2hlbWEgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWEgPyB6LmFueSgpIDogei5uZXZlcigpO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uID0gZGV0ZWN0VmVyc2lvbihzY2hlbWEsIHBhcmFtcz8uZGVmYXVsdFRhcmdldCk7XG4gICAgY29uc3QgZGVmcyA9IHNjaGVtYS4kZGVmcyB8fCBzY2hlbWEuZGVmaW5pdGlvbnMgfHwge307XG4gICAgY29uc3QgY3R4ID0ge1xuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBkZWZzLFxuICAgICAgICByZWZzOiBuZXcgTWFwKCksXG4gICAgICAgIHByb2Nlc3Npbmc6IG5ldyBTZXQoKSxcbiAgICAgICAgcm9vdFNjaGVtYTogc2NoZW1hLFxuICAgICAgICByZWdpc3RyeTogcGFyYW1zPy5yZWdpc3RyeSA/PyBnbG9iYWxSZWdpc3RyeVxuICAgIH07XG4gICAgcmV0dXJuIGNvbnZlcnRTY2hlbWEoc2NoZW1hLCBjdHgpO1xufVxuIiwgImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4uL2NvcmUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHNjaGVtYXMgZnJvbSBcIi4vc2NoZW1hcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZyhwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fY29lcmNlZFN0cmluZyhzY2hlbWFzLlpvZFN0cmluZywgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBudW1iZXIocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2NvZXJjZWROdW1iZXIoc2NoZW1hcy5ab2ROdW1iZXIsIHBhcmFtcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gYm9vbGVhbihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fY29lcmNlZEJvb2xlYW4oc2NoZW1hcy5ab2RCb29sZWFuLCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGJpZ2ludChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fY29lcmNlZEJpZ2ludChzY2hlbWFzLlpvZEJpZ0ludCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkYXRlKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9jb2VyY2VkRGF0ZShzY2hlbWFzLlpvZERhdGUsIHBhcmFtcyk7XG59XG4iLCAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbi8qKlxuICogUmVzZXJ2ZWQga2V5IHByZWZpeCBmb3Igc3lzdGVtLW1hbmFnZWQgYXR0cmlidXRlcy4gVXNlciBjb2RlIG1heSBub3Qgc2V0XG4gKiBrZXlzIHN0YXJ0aW5nIHdpdGggYCRgIOKAlCB0aG9zZSBhcmUgYmxvY2tlZCBhdCB2YWxpZGF0aW9uIHRpbWUgc28gdGhlXG4gKiBuYW1lc3BhY2UgcmVtYWlucyBhdmFpbGFibGUgZm9yIGZ1dHVyZSBzeXN0ZW0gdXNlLlxuICovXG5leHBvcnQgY29uc3QgUkVTRVJWRURfQVRUUklCVVRFX0tFWV9QUkVGSVggPSAnJCc7XG5cbi8qKiBNYXggbGVuZ3RoIG9mIGFuIGF0dHJpYnV0ZSBrZXksIGluIGNoYXJhY3RlcnMuICovXG5leHBvcnQgY29uc3QgQVRUUklCVVRFX0tFWV9NQVhfTEVOR1RIID0gMjU2O1xuXG4vKiogTWF4IGxlbmd0aCBvZiBhbiBhdHRyaWJ1dGUgdmFsdWUsIGluIGJ5dGVzIChVVEYtOCkuICovXG5leHBvcnQgY29uc3QgQVRUUklCVVRFX1ZBTFVFX01BWF9CWVRFUyA9IDI1NjtcblxuLyoqIE1heCBudW1iZXIgb2YgYXR0cmlidXRlcyBvbiBhIHNpbmdsZSBydW4gKHBvc3QtbWVyZ2UpLiAqL1xuZXhwb3J0IGNvbnN0IEFUVFJJQlVURV9NQVhfUEVSX1JVTiA9IDY0O1xuXG4vKipcbiAqIEEgc2luZ2xlIGNoYW5nZSBpbiBhbiBgZXhwZXJpbWVudGFsU2V0QXR0cmlidXRlc2AgY2FsbC4gYHZhbHVlOiBudWxsYFxuICogbWVhbnMgXCJyZW1vdmUgdGhpcyBrZXkgZnJvbSB0aGUgcnVuJ3MgYXR0cmlidXRlc1wiLlxuICpcbiAqIFRoZSBzaGFwZSBpcyBkZWxpYmVyYXRlbHkgdGhlIHNhbWUgYXMgdGhlIGZ1dHVyZSBgYXR0cl9zZXRgIGV2ZW50J3NcbiAqIGBldmVudERhdGEuY2hhbmdlc2AgZW50cmllcyBzbyB0aGUgU0RLIGFuZCB3aXJlIGZvcm1hdCBkbyBub3QgY2hhbmdlXG4gKiB3aGVuIHRoZSBmdWxsIGF0dHJpYnV0ZXMgZmVhdHVyZSBsYW5kcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEF0dHJpYnV0ZUNoYW5nZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAga2V5OiB6LnN0cmluZygpLFxuICB2YWx1ZTogei51bmlvbihbei5zdHJpbmcoKSwgei5udWxsKCldKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBBdHRyaWJ1dGVDaGFuZ2UgPSB6LmluZmVyPHR5cGVvZiBBdHRyaWJ1dGVDaGFuZ2VTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgQXR0cmlidXRlQ2hhbmdlc1NjaGVtYSA9IHouYXJyYXkoQXR0cmlidXRlQ2hhbmdlU2NoZW1hKTtcblxuLyoqXG4gKiBSZXN1bHQgcmV0dXJuZWQgYnkgYHJ1bnMuZXhwZXJpbWVudGFsU2V0QXR0cmlidXRlc2Ag4oCUIHRoZSBwb3N0LW1lcmdlXG4gKiBzbmFwc2hvdCBvZiBhbGwgYXR0cmlidXRlcyBvbiB0aGUgcnVuLiBQcm92aWRlZCBzbyBjYWxsZXJzIChub3RhYmx5XG4gKiBgc2V0QXR0cmlidXRlc2AgYW5kIG9ic2VydmFiaWxpdHkgZW1pdHRlcnMpIGRvIG5vdCBuZWVkIGEgZm9sbG93LXVwIHJlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwZXJpbWVudGFsU2V0QXR0cmlidXRlc1Jlc3VsdCB7XG4gIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlVmFsaWRhdGlvbkNvbnRleHQge1xuICAvKipcbiAgICogRXhpc3RpbmcgYXR0cmlidXRlIGtleXMgb24gdGhlIHJ1biwgdXNlZCB0byBlbmZvcmNlIHRoZSBwZXItcnVuXG4gICAqIGNhcCBhY2N1cmF0ZWx5IGFnYWluc3QgdGhlIHBvc3QtbWVyZ2UgdG90YWwg4oCUIGFuIGluY29taW5nIGNoYW5nZVxuICAgKiB0aGF0IHVwZGF0ZXMgYW4gYWxyZWFkeS1wcmVzZW50IGtleSBjb250cmlidXRlcyB6ZXJvIG5ldCBhZGRzLlxuICAgKlxuICAgKiBJZiBvbWl0dGVkLCB0aGUgY2FwIGNoZWNrIGFzc3VtZXMgZXZlcnkgbm9uLW51bGwgY2hhbmdlIGlzIGEgZnJlc2hcbiAgICogYWRkLCB3aGljaCBpcyBjb25zZXJ2YXRpdmUgYnV0IHN0aWxsIHNhZmUgKHRoZSBvbmx5IGZhbHNlLXBvc2l0aXZlXG4gICAqIHNoYXBlIHJlamVjdHMgdXBkYXRlcyB0byBleGlzdGluZyBrZXlzIGF0IHRoZSBjYXAgYm91bmRhcnk7IHRoZVxuICAgKiBhdXRob3JpdGF0aXZlIHNlcnZlci1zaWRlIGNoZWNrIHVzZXMgdGhlIHJlYWwgcG9zdC1tZXJnZSBzaXplKS5cbiAgICovXG4gIGV4aXN0aW5nS2V5cz86IEl0ZXJhYmxlPHN0cmluZz47XG4gIC8qKlxuICAgKiBQZXJtaXQga2V5cyB0aGF0IHN0YXJ0IHdpdGggdGhlIHJlc2VydmVkIGAkYCBwcmVmaXguIERlZmF1bHQgYGZhbHNlYC5cbiAgICpcbiAgICogVGhlIGAkYCBuYW1lc3BhY2UgaXMgcmVzZXJ2ZWQgZm9yIGZyYW1ld29yayAvIGxpYnJhcnkgY29kZSBidWlsdCBvblxuICAgKiB0b3Agb2YgdGhlIHdvcmtmbG93IFNESyAodGVsZW1ldHJ5LCBhZ2VudCBtZXRhZGF0YSwgZXRjLikuIFVzZXIgY29kZVxuICAgKiBNVVNUIE5PVCBzZXQgaXQ7IGlmIGEgdXNlciB0cmllcywgdmFsaWRhdGlvbiByZWplY3RzIHRoZSBjYWxsIHNvXG4gICAqIGFjY2lkZW50YWwgY29uZmxpY3RzIHdpdGggdG9vbGluZy1vd25lZCBrZXlzIGNhbid0IHNsaXAgdGhyb3VnaC5cbiAgICpcbiAgICogU2V0IHRoaXMgdG8gYHRydWVgIG9ubHkgZnJvbSBmcmFtZXdvcmstbGV2ZWwgY29kZSB0aGF0IGlzIGF3YXJlIG9mXG4gICAqIHRoZSBuYW1lc3BhY2UgY29udmVudGlvbnMgaW4gdXNlLiBNaXN1c2UgY2FuIGNvbGxpZGUgd2l0aCB0b29saW5nXG4gICAqIGtleXMgYW5kIGJyZWFrIG9ic2VydmFiaWxpdHkgc3VyZmFjZXMuXG4gICAqL1xuICBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlS2V5VmFsaWRhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogUGVybWl0IGtleXMgdGhhdCBzdGFydCB3aXRoIHRoZSByZXNlcnZlZCBgJGAgcHJlZml4LiBTZWUgdGhlXG4gICAqIGBhbGxvd1Jlc2VydmVkQXR0cmlidXRlc2Agbm90ZSBvbiBgQXR0cmlidXRlVmFsaWRhdGlvbkNvbnRleHRgLlxuICAgKi9cbiAgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRocm93biB3aGVuIGFuIGF0dHJpYnV0ZSBrZXkgb3IgdmFsdWUgdmlvbGF0ZXMgb25lIG9mIHRoZSB2YWxpZGF0aW9uXG4gKiBydWxlcy4gVXNlIGEgcGxhaW4gYEVycm9yYCBoZXJlIHNvIHRoZSB3b3JsZCBsYXllciBjYW4gZGVjaWRlIHdoZXRoZXJcbiAqIHRvIHdyYXAgYXMgYEZhdGFsRXJyb3JgIChTREspIG9yIHJldHVybiBhIDQwMCAoc2VydmVyIGVuZHBvaW50KS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0F0dHJpYnV0ZVZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuY29uc3QgdmFsdWVCeXRlTGVuZ3RoID0gKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIgPT5cbiAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHZhbHVlKS5sZW5ndGg7XG5cbi8qKlxuICogVmFsaWRhdGUgYSBzaW5nbGUgYXR0cmlidXRlIGtleS4gUmV0dXJucyBhbiBgQXR0cmlidXRlVmFsaWRhdGlvbkVycm9yYFxuICogb24gdmlvbGF0aW9uLCBvciBgbnVsbGAgaWYgdGhlIGtleSBpcyB2YWxpZC4gUmV0dXJuaW5nIGluc3RlYWQgb2ZcbiAqIHRocm93aW5nIGxldHMgY2FsbGVycyBhZ2dyZWdhdGUgb3Igd3JhcCB0aGUgZmFpbHVyZSBhcyBuZWVkZWQuXG4gKlxuICogVGhlIHJlc2VydmVkIGAkYC1wcmVmaXggcnVsZSBpcyBlbmZvcmNlZCBieSBkZWZhdWx0OyBmcmFtZXdvcmsgY29kZVxuICogbWF5IHBhc3MgYGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzOiB0cnVlYCB0byBvcHQgb3V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBdHRyaWJ1dGVLZXkoXG4gIGtleTogc3RyaW5nLFxuICBvcHRpb25zOiBBdHRyaWJ1dGVLZXlWYWxpZGF0aW9uT3B0aW9ucyA9IHt9XG4pOiBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IgfCBudWxsIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgQXR0cmlidXRlIGtleSBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJHt0eXBlb2Yga2V5fWBcbiAgICApO1xuICB9XG4gIGlmIChrZXkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IoJ0F0dHJpYnV0ZSBrZXkgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuICBpZiAoa2V5Lmxlbmd0aCA+IEFUVFJJQlVURV9LRVlfTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiBuZXcgQXR0cmlidXRlVmFsaWRhdGlvbkVycm9yKFxuICAgICAgYEF0dHJpYnV0ZSBrZXkgbGVuZ3RoICR7a2V5Lmxlbmd0aH0gZXhjZWVkcyBsaW1pdCAke0FUVFJJQlVURV9LRVlfTUFYX0xFTkdUSH06ICR7SlNPTi5zdHJpbmdpZnkoa2V5LnNsaWNlKDAsIDMyKSl94oCmYFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgICFvcHRpb25zLmFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzICYmXG4gICAga2V5LnN0YXJ0c1dpdGgoUkVTRVJWRURfQVRUUklCVVRFX0tFWV9QUkVGSVgpXG4gICkge1xuICAgIHJldHVybiBuZXcgQXR0cmlidXRlVmFsaWRhdGlvbkVycm9yKFxuICAgICAgYEF0dHJpYnV0ZSBrZXkgJHtKU09OLnN0cmluZ2lmeShrZXkpfSBzdGFydHMgd2l0aCByZXNlcnZlZCBwcmVmaXggXCIke1JFU0VSVkVEX0FUVFJJQlVURV9LRVlfUFJFRklYfVwiIOKAlCB0aGF0IG5hbWVzcGFjZSBpcyByZXNlcnZlZCBmb3IgZnJhbWV3b3JrL2xpYnJhcnkgY29kZS4gU2V0IHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM6IHRydWUgfSBvbmx5IGlmIHlvdXIgY2FsbGVyIGlzIGZyYW1ld29yay1sZXZlbC5gXG4gICAgKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHNpbmdsZSBhdHRyaWJ1dGUgdmFsdWUuIGBudWxsYCByZXByZXNlbnRzIGFuIHVuc2V0IGFuZCBpc1xuICogYWx3YXlzIHZhbGlkLiBSZXR1cm5zIGFuIGBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3JgIG9uIHZpb2xhdGlvbiBvclxuICogYG51bGxgIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQXR0cmlidXRlVmFsdWUoXG4gIHZhbHVlOiBzdHJpbmcgfCBudWxsXG4pOiBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IgfCBudWxsIHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZVZhbGlkYXRpb25FcnJvcihcbiAgICAgIGBBdHRyaWJ1dGUgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsLCBnb3QgJHt0eXBlb2YgdmFsdWV9YFxuICAgICk7XG4gIH1cbiAgY29uc3QgYnl0ZXMgPSB2YWx1ZUJ5dGVMZW5ndGgodmFsdWUpO1xuICBpZiAoYnl0ZXMgPiBBVFRSSUJVVEVfVkFMVUVfTUFYX0JZVEVTKSB7XG4gICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgQXR0cmlidXRlIHZhbHVlIGJ5dGUgbGVuZ3RoICR7Ynl0ZXN9IGV4Y2VlZHMgbGltaXQgJHtBVFRSSUJVVEVfVkFMVUVfTUFYX0JZVEVTfWBcbiAgICApO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgYmF0Y2ggb2YgYXR0cmlidXRlIGNoYW5nZXMuIFRocm93cyBgQXR0cmlidXRlVmFsaWRhdGlvbkVycm9yYFxuICogb24gdGhlIGZpcnN0IHZpb2xhdGlvbiBmb3VuZC4gUGFzcyBgZXhpc3RpbmdLZXlzYCAoaW4gYGNvbnRleHRgKSBzb1xuICogdGhlIHBlci1ydW4gY2FwIGNoZWNrIGNhbiB1c2UgdGhlIHJlYWwgcG9zdC1tZXJnZSB0b3RhbCDigJQgd2l0aG91dCBpdFxuICogdGhlIGNoZWNrIGlzIGNvbnNlcnZhdGl2ZSBhbmQgbWF5IHJlamVjdCBhbiB1cGRhdGUgdG8gYW5cbiAqIGFscmVhZHktcHJlc2VudCBrZXkgd2hlbiB0aGUgcnVuIGlzIGF0IHRoZSBjYXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUF0dHJpYnV0ZUNoYW5nZXMoXG4gIGNoYW5nZXM6IEF0dHJpYnV0ZUNoYW5nZVtdLFxuICBjb250ZXh0OiBBdHRyaWJ1dGVWYWxpZGF0aW9uQ29udGV4dCA9IHt9XG4pOiB2b2lkIHtcbiAgY29uc3Qgc2VlbktleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgZXhpc3RpbmdLZXlzID1cbiAgICBjb250ZXh0LmV4aXN0aW5nS2V5cyA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBjb250ZXh0LmV4aXN0aW5nS2V5cyBpbnN0YW5jZW9mIFNldFxuICAgICAgICA/IChjb250ZXh0LmV4aXN0aW5nS2V5cyBhcyBTZXQ8c3RyaW5nPilcbiAgICAgICAgOiBuZXcgU2V0KGNvbnRleHQuZXhpc3RpbmdLZXlzKTtcbiAgbGV0IG5ldEFkZHMgPSAwO1xuICBsZXQgbmV0RGVsZXRlcyA9IDA7XG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICBjb25zdCBrZXlFcnJvciA9IHZhbGlkYXRlQXR0cmlidXRlS2V5KGNoYW5nZS5rZXksIHtcbiAgICAgIGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzOiBjb250ZXh0LmFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzLFxuICAgIH0pO1xuICAgIGlmIChrZXlFcnJvcikgdGhyb3cga2V5RXJyb3I7XG4gICAgY29uc3QgdmFsdWVFcnJvciA9IHZhbGlkYXRlQXR0cmlidXRlVmFsdWUoY2hhbmdlLnZhbHVlKTtcbiAgICBpZiAodmFsdWVFcnJvcikgdGhyb3cgdmFsdWVFcnJvcjtcbiAgICBpZiAoc2VlbktleXMuaGFzKGNoYW5nZS5rZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgQXR0cmlidXRlVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgQXR0cmlidXRlIGtleSAke0pTT04uc3RyaW5naWZ5KGNoYW5nZS5rZXkpfSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIGJhdGNoYFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VlbktleXMuYWRkKGNoYW5nZS5rZXkpO1xuICAgIC8vIFBlci1ydW4gY2FwIGFjY291bnRpbmc6IGFuIHVwc2VydCBvbiBhbiBhbHJlYWR5LXByZXNlbnQga2V5IGlzXG4gICAgLy8gYSB6ZXJvLW5ldCBjaGFuZ2U7IGEgZGVsZXRlIG9uIGFuIGFic2VudCBrZXkgaXMgYWxzbyB6ZXJvLW5ldC5cbiAgICAvLyBXaGVuIGBleGlzdGluZ0tleXNgIGlzIHVuZGVmaW5lZCB0aGUgY2FwIGNoZWNrIGZhbGxzIGJhY2sgdG8gdGhlXG4gICAgLy8gY29uc2VydmF0aXZlIFwiZXZlcnkgdXBzZXJ0IGlzICsxXCIgc2hhcGUsIGRvY3VtZW50ZWQgYWJvdmUuXG4gICAgaWYgKGNoYW5nZS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKGV4aXN0aW5nS2V5cyA9PT0gdW5kZWZpbmVkIHx8ICFleGlzdGluZ0tleXMuaGFzKGNoYW5nZS5rZXkpKSB7XG4gICAgICAgIG5ldEFkZHMgKz0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4aXN0aW5nS2V5cyA9PT0gdW5kZWZpbmVkIHx8IGV4aXN0aW5nS2V5cy5oYXMoY2hhbmdlLmtleSkpIHtcbiAgICAgIG5ldERlbGV0ZXMgKz0gMTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZXhpc3RpbmcgPSBleGlzdGluZ0tleXMgPT09IHVuZGVmaW5lZCA/IDAgOiBleGlzdGluZ0tleXMuc2l6ZTtcbiAgY29uc3QgcG9zdE1lcmdlID0gZXhpc3RpbmcgKyBuZXRBZGRzIC0gbmV0RGVsZXRlcztcbiAgaWYgKHBvc3RNZXJnZSA+IEFUVFJJQlVURV9NQVhfUEVSX1JVTikge1xuICAgIHRocm93IG5ldyBBdHRyaWJ1dGVWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgUnVuIGF0dHJpYnV0ZSBjb3VudCB3b3VsZCBleGNlZWQgbGltaXQgJHtBVFRSSUJVVEVfTUFYX1BFUl9SVU59IChwb3N0LW1lcmdlICR7cG9zdE1lcmdlfSlgXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcGx5IGEgYmF0Y2ggb2YgdmFsaWRhdGVkIGNoYW5nZXMgdG8gYW4gZXhpc3RpbmcgYXR0cmlidXRlIG1hcC4gUmV0dXJuc1xuICogYSBuZXcgbWFwOyBkb2VzIG5vdCBtdXRhdGUgdGhlIGlucHV0LiBUaGUgd29ybGQgbGF5ZXIgdXNlcyB0aGlzIHRvXG4gKiBjb21wdXRlIHRoZSBwb3N0LW1lcmdlIHNuYXBzaG90IHdoZW4gdGhlIHVuZGVybHlpbmcgc3RvcmUgY2Fubm90IGRvIHRoZVxuICogbWVyZ2UgaW4gYSBzaW5nbGUgYXRvbWljIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5QXR0cmlidXRlQ2hhbmdlcyhcbiAgZXhpc3Rpbmc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQsXG4gIGNoYW5nZXM6IEF0dHJpYnV0ZUNoYW5nZVtdXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgbmV4dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgLi4uKGV4aXN0aW5nID8/IHt9KSB9O1xuICBmb3IgKGNvbnN0IHsga2V5LCB2YWx1ZSB9IG9mIGNoYW5nZXMpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIGRlbGV0ZSBuZXh0W2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV4dDtcbn1cbiIsICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcblxuLyoqXG4gKiBCaW5hcnkgc2VyaWFsaXplZCBkYXRhIHVzaW5nIGRldmFsdWUgZm9ybWF0LlxuICogVGhpcyBpcyB0aGUgb3V0cHV0IG9mIGBUZXh0RW5jb2Rlci5lbmNvZGUoZGV2YWx1ZS5zdHJpbmdpZnkoLi4uKSlgLlxuICpcbiAqIFRoZSB3b3JrZmxvdyBjb3JlIHJ1bnRpbWUgaGFuZGxlcyBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbixcbiAqIGFuZCBXb3JsZCBpbXBsZW1lbnRhdGlvbnMgc3RvcmUgYW5kIHRyYW5zcG9ydCB0aGlzIG9wYXF1ZSBiaW5hcnkgcGF5bG9hZC5cbiAqL1xuZXhwb3J0IHR5cGUgU2VyaWFsaXplZERhdGEgPSBVaW50OEFycmF5IHwgdW5rbm93bjtcblxuLyoqXG4gKiBab2Qgc2NoZW1hIGZvciB2YWxpZGF0aW5nIFNlcmlhbGl6ZWREYXRhIChVaW50OEFycmF5KS5cbiAqIFVzZWQgZm9yIHNwZWNWZXJzaW9uID49IDIuXG4gKi9cbmV4cG9ydCBjb25zdCBCaW5hcnlTZXJpYWxpemVkRGF0YVNjaGVtYTogei5ab2RUeXBlPFNlcmlhbGl6ZWREYXRhPiA9XG4gIHouaW5zdGFuY2VvZihVaW50OEFycmF5KSBhcyB6LlpvZFR5cGU8U2VyaWFsaXplZERhdGE+O1xuXG4vKipcbiAqIExlZ2FjeSBzY2hlbWEgZm9yIHNlcmlhbGl6ZWQgZGF0YSAoc3BlY1ZlcnNpb24gMSkuXG4gKiBMZWdhY3kgZGF0YSB3YXMgc3RvcmVkIGFzIEpTT04sIHNvIGl0IGNhbiBiZSBhbnkgdmFsdWUuXG4gKi9cbmV4cG9ydCBjb25zdCBMZWdhY3lTZXJpYWxpemVkRGF0YVNjaGVtYVYxOiB6LlpvZFR5cGU8dW5rbm93bj4gPSB6LmFueSgpO1xuXG4vKipcbiAqIFVuaW9uIHNjaGVtYSB0aGF0IGFjY2VwdHMgYm90aCB2MisgKFVpbnQ4QXJyYXkpIGFuZCBsZWdhY3kgKGFueSkgc2VyaWFsaXplZCBkYXRhLlxuICogVXNlIHRoaXMgZm9yIHZhbGlkYXRpb24gd2hlbiBkYXRhIG1heSBjb21lIGZyb20gZWl0aGVyIHNwZWNWZXJzaW9uLlxuICovXG5leHBvcnQgY29uc3QgU2VyaWFsaXplZERhdGFTY2hlbWEgPSB6LnVuaW9uKFtcbiAgQmluYXJ5U2VyaWFsaXplZERhdGFTY2hlbWEsXG4gIExlZ2FjeVNlcmlhbGl6ZWREYXRhU2NoZW1hVjEsXG5dKTtcbiIsICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IFNlcmlhbGl6ZWREYXRhU2NoZW1hIH0gZnJvbSAnLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgUGFnaW5hdGlvbk9wdGlvbnMsIFJlc29sdmVEYXRhIH0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG4vKipcbiAqIEZpZWxkcyB3aXRoaW4gZXZlbnREYXRhIHRoYXQgaG9sZCByZWYvcGF5bG9hZCBkYXRhIHBlciBldmVudCB0eXBlLlxuICogV2hlbiByZXNvbHZlRGF0YSBpcyAnbm9uZScsIG9ubHkgdGhlc2UgZmllbGRzIGFyZSBzdHJpcHBlZCDigJQgYWxsIG90aGVyXG4gKiBtZXRhZGF0YSAoc3RlcE5hbWUsIHdvcmtmbG93TmFtZSwgZXRjLikgaXMgcHJlc2VydmVkLlxuICovXG5leHBvcnQgY29uc3QgRVZFTlRfREFUQV9SRUZfRklFTERTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gIHJ1bl9jcmVhdGVkOiBbJ2lucHV0J10sXG4gIHJ1bl9jb21wbGV0ZWQ6IFsnb3V0cHV0J10sXG4gIHJ1bl9mYWlsZWQ6IFsnZXJyb3InXSxcbiAgc3RlcF9jcmVhdGVkOiBbJ2lucHV0J10sXG4gIHN0ZXBfY29tcGxldGVkOiBbJ3Jlc3VsdCddLFxuICBzdGVwX2ZhaWxlZDogWydlcnJvciddLFxuICBzdGVwX3JldHJ5aW5nOiBbJ2Vycm9yJ10sXG4gIGhvb2tfY3JlYXRlZDogWydtZXRhZGF0YSddLFxuICBob29rX3JlY2VpdmVkOiBbJ3BheWxvYWQnXSxcbn07XG5cbi8qKlxuICogU3RyaXAgcmVmL3BheWxvYWQgZmllbGRzIGZyb20gZXZlbnREYXRhIGJhc2VkIG9uIHJlc29sdmVEYXRhIHNldHRpbmcuXG4gKiBXaGVuIHJlc29sdmVEYXRhIGlzICdub25lJywgcmVtb3ZlcyBvbmx5IGxhcmdlIGRhdGEgZmllbGRzIChyZWZzKSBmcm9tXG4gKiBldmVudERhdGEgd2hpbGUgcHJlc2VydmluZyBtZXRhZGF0YSBsaWtlIHN0ZXBOYW1lLCB3b3JrZmxvd05hbWUsIGV0Yy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwRXZlbnREYXRhUmVmcyhcbiAgZXZlbnQ6IEV2ZW50LFxuICByZXNvbHZlRGF0YTogUmVzb2x2ZURhdGFcbik6IEV2ZW50IHtcbiAgaWYgKHJlc29sdmVEYXRhICE9PSAnbm9uZScpIHJldHVybiBldmVudDtcbiAgaWYgKCEoJ2V2ZW50RGF0YScgaW4gZXZlbnQpKSByZXR1cm4gZXZlbnQ7XG5cbiAgY29uc3QgZXZlbnREYXRhID0gKGV2ZW50IGFzIGFueSkuZXZlbnREYXRhO1xuICBpZiAoIWV2ZW50RGF0YSB8fCB0eXBlb2YgZXZlbnREYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHsgZXZlbnREYXRhOiBfLCAuLi5yZXN0IH0gPSBldmVudCBhcyBhbnk7XG4gICAgcmV0dXJuIHJlc3Q7XG4gIH1cblxuICBjb25zdCByZWZGaWVsZHMgPSBFVkVOVF9EQVRBX1JFRl9GSUVMRFNbZXZlbnQuZXZlbnRUeXBlXTtcbiAgaWYgKCFyZWZGaWVsZHMgfHwgcmVmRmllbGRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGV2ZW50O1xuXG4gIGNvbnN0IHN0cmlwcGVkID0geyAuLi5ldmVudERhdGEgfTtcbiAgZm9yIChjb25zdCBmaWVsZCBvZiByZWZGaWVsZHMpIHtcbiAgICBkZWxldGUgc3RyaXBwZWRbZmllbGRdO1xuICB9XG5cbiAgY29uc3QgeyBldmVudERhdGE6IF8sIC4uLnJlc3QgfSA9IGV2ZW50IGFzIGFueTtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXN0LFxuICAgIC4uLihPYmplY3Qua2V5cyhzdHJpcHBlZCkubGVuZ3RoID4gMCA/IHsgZXZlbnREYXRhOiBzdHJpcHBlZCB9IDoge30pLFxuICB9O1xufVxuXG4vLyBFdmVudCB0eXBlIGVudW1cbmV4cG9ydCBjb25zdCBFdmVudFR5cGVTY2hlbWEgPSB6LmVudW0oW1xuICAvLyBSdW4gbGlmZWN5Y2xlIGV2ZW50c1xuICAncnVuX2NyZWF0ZWQnLFxuICAncnVuX3N0YXJ0ZWQnLFxuICAncnVuX2NvbXBsZXRlZCcsXG4gICdydW5fZmFpbGVkJyxcbiAgJ3J1bl9jYW5jZWxsZWQnLFxuICAvLyBTdGVwIGxpZmVjeWNsZSBldmVudHNcbiAgJ3N0ZXBfY3JlYXRlZCcsXG4gICdzdGVwX2NvbXBsZXRlZCcsXG4gICdzdGVwX2ZhaWxlZCcsXG4gICdzdGVwX3JldHJ5aW5nJyxcbiAgJ3N0ZXBfc3RhcnRlZCcsXG4gIC8vIEhvb2sgbGlmZWN5Y2xlIGV2ZW50c1xuICAnaG9va19jcmVhdGVkJyxcbiAgJ2hvb2tfcmVjZWl2ZWQnLFxuICAnaG9va19kaXNwb3NlZCcsXG4gICdob29rX2NvbmZsaWN0JywgLy8gQ3JlYXRlZCBieSB3b3JsZCB3aGVuIGhvb2sgdG9rZW4gYWxyZWFkeSBleGlzdHNcbiAgLy8gV2FpdCBsaWZlY3ljbGUgZXZlbnRzXG4gICd3YWl0X2NyZWF0ZWQnLFxuICAnd2FpdF9jb21wbGV0ZWQnLFxuXSk7XG5cbi8vIEJhc2UgZXZlbnQgc2NoZW1hIHdpdGggY29tbW9uIHByb3BlcnRpZXNcbi8vIFRPRE86IEV2ZW50IGRhdGEgb24gYWxsIHNwZWNpZmljIGV2ZW50IHNjaGVtYXMgY2FuIGFjdHVhbGx5IGJlIHVuZGVmaW5lZCxcbi8vIGFzIHRoZSB3b3JsZCBtYXkgb21pdCBldmVudERhdGEgd2hlbiByZXNvbHZlRGF0YSBpcyBzZXQgdG8gJ25vbmUnLlxuLy8gQ2hhbmdpbmcgdGhlIHR5cGUgaGVyZSB3aWxsIG1haW5seSBpbXByb3ZlIHR5cGUgc2FmZXR5IGZvciBvMTF5IGNvbnN1bWVycy5cbi8vIE5vdGU6IHNwZWNWZXJzaW9uIGlzIG9wdGlvbmFsIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSBkYXRhIGluIHN0b3JhZ2UsXG4vLyBidXQgaXMgYWx3YXlzIHNlbnQgYnkgdGhlIHJ1bnRpbWUgb24gbmV3IGV2ZW50cy5cbmV4cG9ydCBjb25zdCBCYXNlRXZlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGV2ZW50VHlwZTogRXZlbnRUeXBlU2NoZW1hLFxuICBjb3JyZWxhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHNwZWNWZXJzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG59KTtcblxuLy8gRXZlbnQgc2NoZW1hcyAoc2hhcmVkIGJldHdlZW4gY3JlYXRpb24gcmVxdWVzdHMgYW5kIHNlcnZlciByZXNwb25zZXMpXG4vLyBOb3RlOiBTZXJpYWxpemVkIGRhdGEgZmllbGRzIHVzZSBTZXJpYWxpemVkRGF0YVNjaGVtYSB0byBzdXBwb3J0IGJvdGg6XG4vLyAtIHNwZWNWZXJzaW9uID49IDI6IFVpbnQ4QXJyYXkgKGJpbmFyeSBkZXZhbHVlIGZvcm1hdClcbi8vIC0gc3BlY1ZlcnNpb24gMTogYW55IChsZWdhY3kgSlNPTiBmb3JtYXQpXG5jb25zdCBTdGVwQ29tcGxldGVkRXZlbnRTY2hlbWEgPSBCYXNlRXZlbnRTY2hlbWEuZXh0ZW5kKHtcbiAgZXZlbnRUeXBlOiB6LmxpdGVyYWwoJ3N0ZXBfY29tcGxldGVkJyksXG4gIGNvcnJlbGF0aW9uSWQ6IHouc3RyaW5nKCksXG4gIGV2ZW50RGF0YTogei5vYmplY3Qoe1xuICAgIHN0ZXBOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgcmVzdWx0OiBTZXJpYWxpemVkRGF0YVNjaGVtYSxcbiAgfSksXG59KTtcblxuY29uc3QgU3RlcEZhaWxlZEV2ZW50U2NoZW1hID0gQmFzZUV2ZW50U2NoZW1hLmV4dGVuZCh7XG4gIGV2ZW50VHlwZTogei5saXRlcmFsKCdzdGVwX2ZhaWxlZCcpLFxuICBjb3JyZWxhdGlvbklkOiB6LnN0cmluZygpLFxuICBldmVudERhdGE6IHoub2JqZWN0KHtcbiAgICBzdGVwTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIC8vIFRoZSB0aHJvd24gdmFsdWUsIHNlcmlhbGl6ZWQgdmlhIHRoZSB3b3JrZmxvdyBzZXJpYWxpemF0aW9uIHBpcGVsaW5lLlxuICAgIC8vIENhbiBiZSBhbnkgSmF2YVNjcmlwdCB2YWx1ZSAoc3RyaW5nLCBudW1iZXIsIG9iamVjdCwgRXJyb3IsIGV0Yy4pXG4gICAgZXJyb3I6IFNlcmlhbGl6ZWREYXRhU2NoZW1hLFxuICB9KSxcbn0pO1xuXG4vKipcbiAqIEV2ZW50IGNyZWF0ZWQgd2hlbiBhIHN0ZXAgZmFpbHMgYW5kIHdpbGwgYmUgcmV0cmllZC5cbiAqIFNldHMgdGhlIHN0ZXAgc3RhdHVzIGJhY2sgdG8gJ3BlbmRpbmcnIGFuZCByZWNvcmRzIHRoZSBlcnJvci5cbiAqIFRoZSBlcnJvciBpcyBzdG9yZWQgaW4gc3RlcC5lcnJvciBmb3IgZGVidWdnaW5nLlxuICovXG5jb25zdCBTdGVwUmV0cnlpbmdFdmVudFNjaGVtYSA9IEJhc2VFdmVudFNjaGVtYS5leHRlbmQoe1xuICBldmVudFR5cGU6IHoubGl0ZXJhbCgnc3RlcF9yZXRyeWluZycpLFxuICBjb3JyZWxhdGlvbklkOiB6LnN0cmluZygpLFxuICBldmVudERhdGE6IHoub2JqZWN0KHtcbiAgICBzdGVwTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIC8vIFRoZSB0aHJvd24gdmFsdWUsIHNlcmlhbGl6ZWQgdmlhIHRoZSB3b3JrZmxvdyBzZXJpYWxpemF0aW9uIHBpcGVsaW5lLlxuICAgIC8vIENhbiBiZSBhbnkgSmF2YVNjcmlwdCB2YWx1ZSAoc3RyaW5nLCBudW1iZXIsIG9iamVjdCwgRXJyb3IsIGV0Yy4pXG4gICAgZXJyb3I6IFNlcmlhbGl6ZWREYXRhU2NoZW1hLFxuICAgIHJldHJ5QWZ0ZXI6IHouY29lcmNlLmRhdGUoKS5vcHRpb25hbCgpLFxuICB9KSxcbn0pO1xuXG5jb25zdCBTdGVwU3RhcnRlZEV2ZW50U2NoZW1hID0gQmFzZUV2ZW50U2NoZW1hLmV4dGVuZCh7XG4gIGV2ZW50VHlwZTogei5saXRlcmFsKCdzdGVwX3N0YXJ0ZWQnKSxcbiAgY29ycmVsYXRpb25JZDogei5zdHJpbmcoKSxcbiAgZXZlbnREYXRhOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBzdGVwTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgICAgYXR0ZW1wdDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKCksXG59KTtcblxuLyoqXG4gKiBFdmVudCBjcmVhdGVkIHdoZW4gYSBzdGVwIGlzIGZpcnN0IGludm9rZWQuIFRoZSBXb3JsZCBpbXBsZW1lbnRhdGlvblxuICogYXRvbWljYWxseSBjcmVhdGVzIGJvdGggdGhlIGV2ZW50IGFuZCB0aGUgc3RlcCBlbnRpdHkuXG4gKi9cbmNvbnN0IFN0ZXBDcmVhdGVkRXZlbnRTY2hlbWEgPSBCYXNlRXZlbnRTY2hlbWEuZXh0ZW5kKHtcbiAgZXZlbnRUeXBlOiB6LmxpdGVyYWwoJ3N0ZXBfY3JlYXRlZCcpLFxuICBjb3JyZWxhdGlvbklkOiB6LnN0cmluZygpLFxuICBldmVudERhdGE6IHoub2JqZWN0KHtcbiAgICBzdGVwTmFtZTogei5zdHJpbmcoKSxcbiAgICBpbnB1dDogU2VyaWFsaXplZERhdGFTY2hlbWEsXG4gIH0pLFxufSk7XG5cbi8qKlxuICogRXZlbnQgY3JlYXRlZCB3aGVuIGEgaG9vayBpcyBmaXJzdCBpbnZva2VkLiBUaGUgV29ybGQgaW1wbGVtZW50YXRpb25cbiAqIGF0b21pY2FsbHkgY3JlYXRlcyBib3RoIHRoZSBldmVudCBhbmQgdGhlIGhvb2sgZW50aXR5LlxuICovXG5jb25zdCBIb29rQ3JlYXRlZEV2ZW50U2NoZW1hID0gQmFzZUV2ZW50U2NoZW1hLmV4dGVuZCh7XG4gIGV2ZW50VHlwZTogei5saXRlcmFsKCdob29rX2NyZWF0ZWQnKSxcbiAgY29ycmVsYXRpb25JZDogei5zdHJpbmcoKSxcbiAgZXZlbnREYXRhOiB6Lm9iamVjdCh7XG4gICAgdG9rZW46IHouc3RyaW5nKCksXG4gICAgbWV0YWRhdGE6IFNlcmlhbGl6ZWREYXRhU2NoZW1hLm9wdGlvbmFsKCksXG4gICAgaXNXZWJob29rOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICAgIGlzU3lzdGVtOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB9KSxcbn0pO1xuXG5jb25zdCBIb29rUmVjZWl2ZWRFdmVudFNjaGVtYSA9IEJhc2VFdmVudFNjaGVtYS5leHRlbmQoe1xuICBldmVudFR5cGU6IHoubGl0ZXJhbCgnaG9va19yZWNlaXZlZCcpLFxuICBjb3JyZWxhdGlvbklkOiB6LnN0cmluZygpLFxuICBldmVudERhdGE6IHoub2JqZWN0KHtcbiAgICB0b2tlbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHBheWxvYWQ6IFNlcmlhbGl6ZWREYXRhU2NoZW1hLFxuICB9KSxcbn0pO1xuXG5jb25zdCBIb29rRGlzcG9zZWRFdmVudFNjaGVtYSA9IEJhc2VFdmVudFNjaGVtYS5leHRlbmQoe1xuICBldmVudFR5cGU6IHoubGl0ZXJhbCgnaG9va19kaXNwb3NlZCcpLFxuICBjb3JyZWxhdGlvbklkOiB6LnN0cmluZygpLFxuICBldmVudERhdGE6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIHRva2VuOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIEV2ZW50IGNyZWF0ZWQgYnkgV29ybGQgaW1wbGVtZW50YXRpb25zIHdoZW4gYSBob29rX2NyZWF0ZWQgcmVxdWVzdFxuICogY29uZmxpY3RzIHdpdGggYW4gZXhpc3RpbmcgaG9vayB0b2tlbi4gVGhpcyBldmVudCBpcyBOT1QgdXNlci1jcmVhdGFibGUgLVxuICogaXQgaXMgb25seSByZXR1cm5lZCBieSB0aGUgV29ybGQgd2hlbiBhIHRva2VuIGNvbmZsaWN0IGlzIGRldGVjdGVkLlxuICpcbiAqIFdoZW4gdGhlIGhvb2sgY29uc3VtZXIgc2VlcyB0aGlzIGV2ZW50LCBpdCBzaG91bGQgcmVqZWN0IGFueSBhd2FpdGVkXG4gKiBwcm9taXNlcyB3aXRoIGEgSG9va1Rva2VuQ29uZmxpY3RFcnJvci5cbiAqL1xuY29uc3QgSG9va0NvbmZsaWN0RXZlbnRTY2hlbWEgPSBCYXNlRXZlbnRTY2hlbWEuZXh0ZW5kKHtcbiAgZXZlbnRUeXBlOiB6LmxpdGVyYWwoJ2hvb2tfY29uZmxpY3QnKSxcbiAgY29ycmVsYXRpb25JZDogei5zdHJpbmcoKSxcbiAgZXZlbnREYXRhOiB6Lm9iamVjdCh7XG4gICAgdG9rZW46IHouc3RyaW5nKCksXG4gICAgLy8gVE9ETzogTWFrZSB0aGlzIHJlcXVpcmVkIG9uY2UgYWxsIHBlcnNpc3RlZCBob29rX2NvbmZsaWN0IGV2ZW50cyBhbmRcbiAgICAvLyByZW1vdGUgV29ybGQgaW1wbGVtZW50YXRpb25zIGFsd2F5cyBpbmNsdWRlIHRoZSBhY3RpdmUgaG9vayBvd25lcidzIHJ1biBJRC5cbiAgICBjb25mbGljdGluZ1J1bklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxufSk7XG5cbmNvbnN0IFdhaXRDcmVhdGVkRXZlbnRTY2hlbWEgPSBCYXNlRXZlbnRTY2hlbWEuZXh0ZW5kKHtcbiAgZXZlbnRUeXBlOiB6LmxpdGVyYWwoJ3dhaXRfY3JlYXRlZCcpLFxuICBjb3JyZWxhdGlvbklkOiB6LnN0cmluZygpLFxuICBldmVudERhdGE6IHoub2JqZWN0KHtcbiAgICByZXN1bWVBdDogei5jb2VyY2UuZGF0ZSgpLFxuICB9KSxcbn0pO1xuXG5jb25zdCBXYWl0Q29tcGxldGVkRXZlbnRTY2hlbWEgPSBCYXNlRXZlbnRTY2hlbWEuZXh0ZW5kKHtcbiAgZXZlbnRUeXBlOiB6LmxpdGVyYWwoJ3dhaXRfY29tcGxldGVkJyksXG4gIGNvcnJlbGF0aW9uSWQ6IHouc3RyaW5nKCksXG4gIGV2ZW50RGF0YTogelxuICAgIC5vYmplY3Qoe1xuICAgICAgcmVzdW1lQXQ6IHouY29lcmNlLmRhdGUoKS5vcHRpb25hbCgpLFxuICAgIH0pXG4gICAgLm9wdGlvbmFsKCksXG59KTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1biBsaWZlY3ljbGUgZXZlbnRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEV2ZW50IGNyZWF0ZWQgd2hlbiBhIHdvcmtmbG93IHJ1biBpcyBmaXJzdCBjcmVhdGVkLiBUaGUgV29ybGQgaW1wbGVtZW50YXRpb25cbiAqIGF0b21pY2FsbHkgY3JlYXRlcyBib3RoIHRoZSBldmVudCBhbmQgdGhlIHJ1biBlbnRpdHkgd2l0aCBzdGF0dXMgJ3BlbmRpbmcnLlxuICovXG5jb25zdCBSdW5DcmVhdGVkRXZlbnRTY2hlbWEgPSBCYXNlRXZlbnRTY2hlbWEuZXh0ZW5kKHtcbiAgZXZlbnRUeXBlOiB6LmxpdGVyYWwoJ3J1bl9jcmVhdGVkJyksXG4gIGV2ZW50RGF0YTogei5vYmplY3Qoe1xuICAgIGRlcGxveW1lbnRJZDogei5zdHJpbmcoKSxcbiAgICB3b3JrZmxvd05hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IFNlcmlhbGl6ZWREYXRhU2NoZW1hLFxuICAgIGV4ZWN1dGlvbkNvbnRleHQ6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIH0pLFxufSk7XG5cbi8qKlxuICogRXZlbnQgY3JlYXRlZCB3aGVuIGEgd29ya2Zsb3cgcnVuIHN0YXJ0cyBleGVjdXRpbmcuXG4gKiBVcGRhdGVzIHRoZSBydW4gZW50aXR5IHRvIHN0YXR1cyAncnVubmluZycuXG4gKlxuICogVGhlIG9wdGlvbmFsIGV2ZW50RGF0YSBjYXJyaWVzIHJ1biBjcmVhdGlvbiBkYXRhIGZvciB0aGUgcmVzaWxpZW50IHN0YXJ0IHBhdGg6XG4gKiB3aGVuIHRoZSBydW5fY3JlYXRlZCBldmVudCBmYWlsZWQgKGUuZy4sIHN0b3JhZ2Ugb3V0YWdlIGR1cmluZyBzdGFydCgpKSwgdGhlXG4gKiBydW50aW1lIHBhc3NlcyB0aGUgcnVuIGlucHV0IHRocm91Z2ggdGhlIHF1ZXVlIHNvIHRoZSBzZXJ2ZXIgY2FuIGNyZWF0ZSB0aGUgcnVuXG4gKiBvbiB0aGUgcnVuX3N0YXJ0ZWQgY2FsbCBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldC5cbiAqL1xuY29uc3QgUnVuU3RhcnRlZEV2ZW50U2NoZW1hID0gQmFzZUV2ZW50U2NoZW1hLmV4dGVuZCh7XG4gIGV2ZW50VHlwZTogei5saXRlcmFsKCdydW5fc3RhcnRlZCcpLFxuICBldmVudERhdGE6IHpcbiAgICAub2JqZWN0KHtcbiAgICAgIGlucHV0OiBTZXJpYWxpemVkRGF0YVNjaGVtYS5vcHRpb25hbCgpLFxuICAgICAgZGVwbG95bWVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgICB3b3JrZmxvd05hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQ6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIEV2ZW50IGNyZWF0ZWQgd2hlbiBhIHdvcmtmbG93IHJ1biBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5LlxuICogVXBkYXRlcyB0aGUgcnVuIGVudGl0eSB0byBzdGF0dXMgJ2NvbXBsZXRlZCcgd2l0aCBvdXRwdXQuXG4gKi9cbmNvbnN0IFJ1bkNvbXBsZXRlZEV2ZW50U2NoZW1hID0gQmFzZUV2ZW50U2NoZW1hLmV4dGVuZCh7XG4gIGV2ZW50VHlwZTogei5saXRlcmFsKCdydW5fY29tcGxldGVkJyksXG4gIGV2ZW50RGF0YTogei5vYmplY3Qoe1xuICAgIG91dHB1dDogU2VyaWFsaXplZERhdGFTY2hlbWEub3B0aW9uYWwoKSxcbiAgfSksXG59KTtcblxuLyoqXG4gKiBFdmVudCBjcmVhdGVkIHdoZW4gYSB3b3JrZmxvdyBydW4gZmFpbHMuXG4gKiBVcGRhdGVzIHRoZSBydW4gZW50aXR5IHRvIHN0YXR1cyAnZmFpbGVkJyB3aXRoIGVycm9yLlxuICovXG5jb25zdCBSdW5GYWlsZWRFdmVudFNjaGVtYSA9IEJhc2VFdmVudFNjaGVtYS5leHRlbmQoe1xuICBldmVudFR5cGU6IHoubGl0ZXJhbCgncnVuX2ZhaWxlZCcpLFxuICBldmVudERhdGE6IHoub2JqZWN0KHtcbiAgICAvLyBUaGUgdGhyb3duIHZhbHVlLCBzZXJpYWxpemVkIHZpYSB0aGUgd29ya2Zsb3cgc2VyaWFsaXphdGlvbiBwaXBlbGluZS5cbiAgICAvLyBDYW4gYmUgYW55IEphdmFTY3JpcHQgdmFsdWUgKHN0cmluZywgbnVtYmVyLCBvYmplY3QsIEVycm9yLCBldGMuKVxuICAgIGVycm9yOiBTZXJpYWxpemVkRGF0YVNjaGVtYSxcbiAgICAvLyBUaGUgaGlnaC1sZXZlbCBlcnJvciBjYXRlZ29yeSAoVVNFUl9FUlJPUiwgUlVOVElNRV9FUlJPUiwgZXRjLikgdXNlZFxuICAgIC8vIGZvciByb3V0aW5nIGFuZCBjbGFzc2lmaWNhdGlvbi4gS2VwdCBhcyBwbGFpbnRleHQgbWV0YWRhdGEgc29cbiAgICAvLyBvYnNlcnZhYmlsaXR5IHRvb2xzIGNhbiBmaWx0ZXIvY2F0ZWdvcml6ZSB3aXRob3V0IG5lZWRpbmcgdG8gZGVjcnlwdFxuICAgIC8vIHRoZSBmdWxsIGVycm9yIHBheWxvYWQuXG4gICAgZXJyb3JDb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxufSk7XG5cbi8qKlxuICogRXZlbnQgY3JlYXRlZCB3aGVuIGEgd29ya2Zsb3cgcnVuIGlzIGNhbmNlbGxlZC5cbiAqIFVwZGF0ZXMgdGhlIHJ1biBlbnRpdHkgdG8gc3RhdHVzICdjYW5jZWxsZWQnLlxuICovXG5jb25zdCBSdW5DYW5jZWxsZWRFdmVudFNjaGVtYSA9IEJhc2VFdmVudFNjaGVtYS5leHRlbmQoe1xuICBldmVudFR5cGU6IHoubGl0ZXJhbCgncnVuX2NhbmNlbGxlZCcpLFxufSk7XG5cbi8vIERpc2NyaW1pbmF0ZWQgdW5pb24gZm9yIHVzZXItY3JlYXRhYmxlIGV2ZW50cyAocmVxdWVzdHMgdG8gd29ybGQuZXZlbnRzLmNyZWF0ZSlcbi8vIE5vdGU6IGhvb2tfY29uZmxpY3QgaXMgTk9UIGluY2x1ZGVkIGhlcmUgLSBpdCBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IFdvcmxkIGltcGxlbWVudGF0aW9uc1xuZXhwb3J0IGNvbnN0IENyZWF0ZUV2ZW50U2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oJ2V2ZW50VHlwZScsIFtcbiAgLy8gUnVuIGxpZmVjeWNsZSBldmVudHNcbiAgUnVuQ3JlYXRlZEV2ZW50U2NoZW1hLFxuICBSdW5TdGFydGVkRXZlbnRTY2hlbWEsXG4gIFJ1bkNvbXBsZXRlZEV2ZW50U2NoZW1hLFxuICBSdW5GYWlsZWRFdmVudFNjaGVtYSxcbiAgUnVuQ2FuY2VsbGVkRXZlbnRTY2hlbWEsXG4gIC8vIFN0ZXAgbGlmZWN5Y2xlIGV2ZW50c1xuICBTdGVwQ3JlYXRlZEV2ZW50U2NoZW1hLFxuICBTdGVwQ29tcGxldGVkRXZlbnRTY2hlbWEsXG4gIFN0ZXBGYWlsZWRFdmVudFNjaGVtYSxcbiAgU3RlcFJldHJ5aW5nRXZlbnRTY2hlbWEsXG4gIFN0ZXBTdGFydGVkRXZlbnRTY2hlbWEsXG4gIC8vIEhvb2sgbGlmZWN5Y2xlIGV2ZW50c1xuICBIb29rQ3JlYXRlZEV2ZW50U2NoZW1hLFxuICBIb29rUmVjZWl2ZWRFdmVudFNjaGVtYSxcbiAgSG9va0Rpc3Bvc2VkRXZlbnRTY2hlbWEsXG4gIC8vIFdhaXQgbGlmZWN5Y2xlIGV2ZW50c1xuICBXYWl0Q3JlYXRlZEV2ZW50U2NoZW1hLFxuICBXYWl0Q29tcGxldGVkRXZlbnRTY2hlbWEsXG5dKTtcblxuLy8gRGlzY3JpbWluYXRlZCB1bmlvbiBmb3IgQUxMIGV2ZW50cyAoaW5jbHVkZXMgV29ybGQtb25seSBldmVudHMgbGlrZSBob29rX2NvbmZsaWN0KVxuLy8gVGhpcyBpcyB1c2VkIGZvciByZWFkaW5nIGV2ZW50cyBmcm9tIHRoZSBldmVudCBsb2dcbmNvbnN0IEFsbEV2ZW50c1NjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKCdldmVudFR5cGUnLCBbXG4gIC8vIFJ1biBsaWZlY3ljbGUgZXZlbnRzXG4gIFJ1bkNyZWF0ZWRFdmVudFNjaGVtYSxcbiAgUnVuU3RhcnRlZEV2ZW50U2NoZW1hLFxuICBSdW5Db21wbGV0ZWRFdmVudFNjaGVtYSxcbiAgUnVuRmFpbGVkRXZlbnRTY2hlbWEsXG4gIFJ1bkNhbmNlbGxlZEV2ZW50U2NoZW1hLFxuICAvLyBTdGVwIGxpZmVjeWNsZSBldmVudHNcbiAgU3RlcENyZWF0ZWRFdmVudFNjaGVtYSxcbiAgU3RlcENvbXBsZXRlZEV2ZW50U2NoZW1hLFxuICBTdGVwRmFpbGVkRXZlbnRTY2hlbWEsXG4gIFN0ZXBSZXRyeWluZ0V2ZW50U2NoZW1hLFxuICBTdGVwU3RhcnRlZEV2ZW50U2NoZW1hLFxuICAvLyBIb29rIGxpZmVjeWNsZSBldmVudHNcbiAgSG9va0NyZWF0ZWRFdmVudFNjaGVtYSxcbiAgSG9va1JlY2VpdmVkRXZlbnRTY2hlbWEsXG4gIEhvb2tEaXNwb3NlZEV2ZW50U2NoZW1hLFxuICBIb29rQ29uZmxpY3RFdmVudFNjaGVtYSwgLy8gV29ybGQtb25seTogY3JlYXRlZCB3aGVuIGhvb2sgdG9rZW4gY29uZmxpY3RzXG4gIC8vIFdhaXQgbGlmZWN5Y2xlIGV2ZW50c1xuICBXYWl0Q3JlYXRlZEV2ZW50U2NoZW1hLFxuICBXYWl0Q29tcGxldGVkRXZlbnRTY2hlbWEsXG5dKTtcblxuLy8gU2VydmVyIHJlc3BvbnNlIGluY2x1ZGVzIHJ1bklkLCBldmVudElkLCBhbmQgY3JlYXRlZEF0XG4vLyBzcGVjVmVyc2lvbiBpcyBvcHRpb25hbCBpbiBkYXRhYmFzZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbmV4cG9ydCBjb25zdCBFdmVudFNjaGVtYSA9IEFsbEV2ZW50c1NjaGVtYS5hbmQoXG4gIHoub2JqZWN0KHtcbiAgICBydW5JZDogei5zdHJpbmcoKSxcbiAgICBldmVudElkOiB6LnN0cmluZygpLFxuICAgIGNyZWF0ZWRBdDogei5jb2VyY2UuZGF0ZSgpLFxuICAgIHNwZWNWZXJzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIH0pXG4pO1xuXG4vLyBJbmZlcnJlZCB0eXBlc1xuZXhwb3J0IHR5cGUgRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBFdmVudFNjaGVtYT47XG5leHBvcnQgdHlwZSBIb29rUmVjZWl2ZWRFdmVudCA9IHouaW5mZXI8dHlwZW9mIEhvb2tSZWNlaXZlZEV2ZW50U2NoZW1hPjtcbmV4cG9ydCB0eXBlIEhvb2tDb25mbGljdEV2ZW50ID0gei5pbmZlcjx0eXBlb2YgSG9va0NvbmZsaWN0RXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIFVuaW9uIG9mIGFsbCBwb3NzaWJsZSBldmVudCByZXF1ZXN0IHR5cGVzLlxuICogQGludGVybmFsIFVzZSBDcmVhdGVFdmVudFJlcXVlc3Qgb3IgUnVuQ3JlYXRlZEV2ZW50UmVxdWVzdCBpbnN0ZWFkLlxuICovXG5leHBvcnQgdHlwZSBBbnlFdmVudFJlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBDcmVhdGVFdmVudFNjaGVtYT47XG5cbi8qKlxuICogRXZlbnQgcmVxdWVzdCBmb3IgY3JlYXRpbmcgYSBuZXcgd29ya2Zsb3cgcnVuLlxuICogQ2FuIGJlIHVzZWQgd2l0aCBhIGNsaWVudC1nZW5lcmF0ZWQgcnVuSWQgb3IgbnVsbCBmb3Igc2VydmVyLWdlbmVyYXRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgUnVuQ3JlYXRlZEV2ZW50UmVxdWVzdCA9IHouaW5mZXI8dHlwZW9mIFJ1bkNyZWF0ZWRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogRXZlbnQgcmVxdWVzdCB0eXBlcyB0aGF0IHJlcXVpcmUgYW4gZXhpc3RpbmcgcnVuSWQuXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gY2FzZSBmb3IgYWxsIGV2ZW50cyBleGNlcHQgcnVuX2NyZWF0ZWQuXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZUV2ZW50UmVxdWVzdCA9IEV4Y2x1ZGU8XG4gIEFueUV2ZW50UmVxdWVzdCxcbiAgUnVuQ3JlYXRlZEV2ZW50UmVxdWVzdFxuPjtcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVFdmVudFBhcmFtcyB7XG4gIHYxQ29tcGF0PzogYm9vbGVhbjtcbiAgcmVzb2x2ZURhdGE/OiBSZXNvbHZlRGF0YTtcbiAgLyoqIFJlcXVlc3QgSUQgKHgtdmVyY2VsLWlkIHdoZW4gb24gVmVyY2VsKSBmb3IgY29ycmVsYXRpbmcgcmVxdWVzdCBsb2dzIHdpdGggd29ya2Zsb3cgZXZlbnRzLiAqL1xuICByZXF1ZXN0SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGNyZWF0aW5nIGFuIGV2ZW50LiBJbmNsdWRlcyB0aGUgY3JlYXRlZCBldmVudCBhbmQgb3B0aW9uYWxseVxuICogdGhlIGVudGl0eSB0aGF0IHdhcyBjcmVhdGVkIG9yIHVwZGF0ZWQgYXMgYSByZXN1bHQgb2YgdGhlIGV2ZW50LCB3aXRoIGFueSB1cGRhdGVzIGFwcGxpZWQgdG8gaXQuXG4gKlxuICogTm90ZTogYGV2ZW50YCBpcyBvcHRpb25hbCB0byBzdXBwb3J0IGxlZ2FjeSBydW5zIHdoZXJlIGV2ZW50IHN0b3JhZ2UgaXMgc2tpcHBlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFJlc3VsdCB7XG4gIC8qKiBUaGUgY3JlYXRlZCBldmVudCAob3B0aW9uYWwgZm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5KSAqL1xuICBldmVudD86IEV2ZW50O1xuICAvKiogVGhlIHdvcmtmbG93IHJ1biBlbnRpdHkgKGZvciBydW5fKiBldmVudHMpICovXG4gIHJ1bj86IGltcG9ydCgnLi9ydW5zLmpzJykuV29ya2Zsb3dSdW47XG4gIC8qKiBUaGUgc3RlcCBlbnRpdHkgKGZvciBzdGVwXyogZXZlbnRzKSAqL1xuICBzdGVwPzogaW1wb3J0KCcuL3N0ZXBzLmpzJykuU3RlcDtcbiAgLyoqIFRoZSBob29rIGVudGl0eSAoZm9yIGhvb2tfY3JlYXRlZCBldmVudHMpICovXG4gIGhvb2s/OiBpbXBvcnQoJy4vaG9va3MuanMnKS5Ib29rO1xuICAvKiogVGhlIHdhaXQgZW50aXR5IChmb3Igd2FpdF9jcmVhdGVkL3dhaXRfY29tcGxldGVkIGV2ZW50cykgKi9cbiAgd2FpdD86IGltcG9ydCgnLi93YWl0cy5qcycpLldhaXQ7XG4gIC8qKlxuICAgKiBBbGwgZXZlbnRzIHVwIHRvIHRoaXMgcG9pbnQsIHdpdGggZGF0YSByZXNvbHZlZC4gV2hlbiBwb3B1bGF0ZWRcbiAgICogb24gYSBydW5fc3RhcnRlZCByZXNwb25zZSwgdGhlIHJ1bnRpbWUgdXNlcyB0aGVzZSB0byBza2lwIHRoZVxuICAgKiBpbml0aWFsIGV2ZW50cy5saXN0IGNhbGwgYW5kIHJlZHVjZSBUVEZCLlxuICAgKi9cbiAgZXZlbnRzPzogRXZlbnRbXTtcbiAgLyoqIFBhZ2luYXRpb24gY3Vyc29yIGZvciBgZXZlbnRzYCwgbWF0Y2hpbmcgZXZlbnRzLmxpc3Qgc2VtYW50aWNzLiAqL1xuICBjdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogV2hldGhlciBhZGRpdGlvbmFsIGV2ZW50IHBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIGBldmVudHNgLiAqL1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRFdmVudFBhcmFtcyB7XG4gIHJlc29sdmVEYXRhPzogUmVzb2x2ZURhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEV2ZW50c1BhcmFtcyB7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uT3B0aW9ucztcbiAgcmVzb2x2ZURhdGE/OiBSZXNvbHZlRGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0RXZlbnRzQnlDb3JyZWxhdGlvbklkUGFyYW1zIHtcbiAgY29ycmVsYXRpb25JZDogc3RyaW5nO1xuICBwYWdpbmF0aW9uPzogUGFnaW5hdGlvbk9wdGlvbnM7XG4gIHJlc29sdmVEYXRhPzogUmVzb2x2ZURhdGE7XG59XG4iLCAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6ZWREYXRhIH0gZnJvbSAnLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB7IFNlcmlhbGl6ZWREYXRhU2NoZW1hIH0gZnJvbSAnLi9zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgUGFnaW5hdGlvbk9wdGlvbnMsIFJlc29sdmVEYXRhIH0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG4vKipcbiAqIFNjaGVtYSBmb3Igd29ya2Zsb3cgaG9va3MuXG4gKlxuICogTm90ZTogbWV0YWRhdGEgdXNlcyBTZXJpYWxpemVkRGF0YVNjaGVtYSB0byBzdXBwb3J0IGJvdGg6XG4gKiAtIHNwZWNWZXJzaW9uID49IDI6IFVpbnQ4QXJyYXkgKGJpbmFyeSBkZXZhbHVlIGZvcm1hdClcbiAqIC0gc3BlY1ZlcnNpb24gMTogYW55IChsZWdhY3kgSlNPTiBmb3JtYXQpXG4gKi9cbi8vIEhvb2sgc2NoZW1hc1xuZXhwb3J0IGNvbnN0IEhvb2tTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHJ1bklkOiB6LnN0cmluZygpLFxuICBob29rSWQ6IHouc3RyaW5nKCksXG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBvd25lcklkOiB6LnN0cmluZygpLFxuICBwcm9qZWN0SWQ6IHouc3RyaW5nKCksXG4gIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICBtZXRhZGF0YTogU2VyaWFsaXplZERhdGFTY2hlbWEub3B0aW9uYWwoKSxcbiAgY3JlYXRlZEF0OiB6LmNvZXJjZS5kYXRlKCksXG4gIC8vIE9wdGlvbmFsIGluIGRhdGFiYXNlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgZGVmYXVsdHMgdG8gMSAobGVnYWN5KSB3aGVuIHJlYWRpbmdcbiAgc3BlY1ZlcnNpb246IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaXNXZWJob29rOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBpc1N5c3RlbTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBob29rIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVzdW1lIGEgcGF1c2VkIHdvcmtmbG93IHJ1bi5cbiAqXG4gKiBOb3RlOiBtZXRhZGF0YSB0eXBlIGlzIFNlcmlhbGl6ZWREYXRhIHRvIHN1cHBvcnQgYm90aDpcbiAqIC0gc3BlY1ZlcnNpb24gPj0gMjogVWludDhBcnJheSAoYmluYXJ5IGRldmFsdWUgZm9ybWF0KVxuICogLSBzcGVjVmVyc2lvbiAxOiB1bmtub3duIChsZWdhY3kgSlNPTiBmb3JtYXQpXG4gKi9cbmV4cG9ydCB0eXBlIEhvb2sgPSB6LmluZmVyPHR5cGVvZiBIb29rU2NoZW1hPiAmIHtcbiAgLyoqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgd29ya2Zsb3cgcnVuIHRoaXMgaG9vayBiZWxvbmdzIHRvLiAqL1xuICBydW5JZDogc3RyaW5nO1xuICAvKiogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoaXMgaG9vayB3aXRoaW4gdGhlIHdvcmtmbG93IHJ1bi4gKi9cbiAgaG9va0lkOiBzdHJpbmc7XG4gIC8qKiBUaGUgc2VjcmV0IHRva2VuIHVzZWQgdG8gcmVmZXJlbmNlIHRoaXMgaG9vay4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIFRoZSBvd25lciBJRCAodGVhbSBvciB1c2VyKSB0aGF0IG93bnMgdGhpcyBob29rLiAqL1xuICBvd25lcklkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcHJvamVjdCBJRCB0aGlzIGhvb2sgYmVsb25ncyB0by4gKi9cbiAgcHJvamVjdElkOiBzdHJpbmc7XG4gIC8qKiBUaGUgZW52aXJvbm1lbnQgKGUuZy4sIFwicHJvZHVjdGlvblwiLCBcInByZXZpZXdcIiwgXCJkZXZlbG9wbWVudFwiKSB3aGVyZSB0aGlzIGhvb2sgd2FzIGNyZWF0ZWQuICovXG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGhvb2ssIHNldCB3aGVuIHRoZSBob29rIHdhcyBjcmVhdGVkLiAqL1xuICBtZXRhZGF0YT86IFNlcmlhbGl6ZWREYXRhO1xuICAvKiogVGhlIHRpbWVzdGFtcCB3aGVuIHRoaXMgaG9vayB3YXMgY3JlYXRlZC4gKi9cbiAgY3JlYXRlZEF0OiBEYXRlO1xuICAvKiogVGhlIHNwZWMgdmVyc2lvbiB3aGVuIHRoaXMgaG9vayB3YXMgY3JlYXRlZC4gKi9cbiAgc3BlY1ZlcnNpb24/OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRoaXMgaG9vayBpcyByZXN1bWFibGUgdmlhIHRoZSBwdWJsaWMgd2ViaG9vayBlbmRwb2ludC4gdW5kZWZpbmVkID0gbGVnYWN5ICh0cmVhdGVkIGFzIHRydWUgZm9yIGJhY2t3YXJkcyBjb21wYXQpLiAqL1xuICBpc1dlYmhvb2s/OiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGlzIGhvb2sgaXMgYSBzeXN0ZW0tbWFuYWdlZCBob29rIChlLmcuLCBmb3IgYWJvcnQgc2lnbmFscykuICovXG4gIGlzU3lzdGVtPzogYm9vbGVhbjtcbn07XG5cbi8vIFJlcXVlc3QgdHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSG9va1JlcXVlc3Qge1xuICBob29rSWQ6IHN0cmluZztcbiAgdG9rZW46IHN0cmluZztcbiAgbWV0YWRhdGE/OiBTZXJpYWxpemVkRGF0YTtcbiAgaXNXZWJob29rPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRIb29rQnlUb2tlblBhcmFtcyB7XG4gIHRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEhvb2tzUGFyYW1zIHtcbiAgcnVuSWQ/OiBzdHJpbmc7XG4gIHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uT3B0aW9ucztcbiAgcmVzb2x2ZURhdGE/OiBSZXNvbHZlRGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRIb29rUGFyYW1zIHtcbiAgcmVzb2x2ZURhdGE/OiBSZXNvbHZlRGF0YTtcbn1cbiIsICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kL3Y0JztcblxuZXhwb3J0IGNvbnN0IFF1ZXVlUHJlZml4ID0gei51bmlvbihbXG4gIHoubGl0ZXJhbCgnX193a2Zfc3RlcF8nKSxcbiAgei5saXRlcmFsKCdfX3drZl93b3JrZmxvd18nKSxcbl0pO1xuZXhwb3J0IHR5cGUgUXVldWVQcmVmaXggPSB6LmluZmVyPHR5cGVvZiBRdWV1ZVByZWZpeD47XG5cbmV4cG9ydCBjb25zdCBWYWxpZFF1ZXVlTmFtZSA9IHoudGVtcGxhdGVMaXRlcmFsKFtRdWV1ZVByZWZpeCwgei5zdHJpbmcoKV0pO1xuZXhwb3J0IHR5cGUgVmFsaWRRdWV1ZU5hbWUgPSB6LmluZmVyPHR5cGVvZiBWYWxpZFF1ZXVlTmFtZT47XG5cbmV4cG9ydCBjb25zdCBNZXNzYWdlSWQgPSB6XG4gIC5zdHJpbmcoKVxuICAuYnJhbmQ8J01lc3NhZ2VJZCc+KClcbiAgLmRlc2NyaWJlKCdBIHN0b3JlZCBxdWV1ZSBtZXNzYWdlIElEJyk7XG5leHBvcnQgdHlwZSBNZXNzYWdlSWQgPSB6LmluZmVyPHR5cGVvZiBNZXNzYWdlSWQ+O1xuXG4vKipcbiAqIE9wZW5UZWxlbWV0cnkgdHJhY2UgY29udGV4dCBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZ1xuICovXG5leHBvcnQgY29uc3QgVHJhY2VDYXJyaWVyU2NoZW1hID0gei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSk7XG5leHBvcnQgdHlwZSBUcmFjZUNhcnJpZXIgPSB6LmluZmVyPHR5cGVvZiBUcmFjZUNhcnJpZXJTY2hlbWE+O1xuXG4vKipcbiAqIFJ1biBjcmVhdGlvbiBkYXRhIGNhcnJpZWQgdGhyb3VnaCB0aGUgcXVldWUgZm9yIHJlc2lsaWVudCBzdGFydC5cbiAqIE9ubHkgcHJlc2VudCBvbiB0aGUgZmlyc3QgcXVldWUgZGVsaXZlcnkg4oCUIHJlLWVucXVldWVzIG9taXQgdGhpcy5cbiAqIFdoZW4gdGhlIHJ1bnRpbWUgcHJvY2Vzc2VzIHRoZSBtZXNzYWdlLCBpdCBwYXNzZXMgdGhpcyBkYXRhIHRvIHRoZVxuICogcnVuX3N0YXJ0ZWQgZXZlbnQgc28gdGhlIHNlcnZlciBjYW4gY3JlYXRlIHRoZSBydW4gaWYgaXQgZG9lc24ndCBleGlzdCB5ZXQuXG4gKi9cbmV4cG9ydCBjb25zdCBSdW5JbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaW5wdXQ6IHoudW5rbm93bigpLFxuICBkZXBsb3ltZW50SWQ6IHouc3RyaW5nKCksXG4gIHdvcmtmbG93TmFtZTogei5zdHJpbmcoKSxcbiAgc3BlY1ZlcnNpb246IHoubnVtYmVyKCksXG4gIGV4ZWN1dGlvbkNvbnRleHQ6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgUnVuSW5wdXRTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgV29ya2Zsb3dJbnZva2VQYXlsb2FkU2NoZW1hID0gei5vYmplY3Qoe1xuICBydW5JZDogei5zdHJpbmcoKSxcbiAgdHJhY2VDYXJyaWVyOiBUcmFjZUNhcnJpZXJTY2hlbWEub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkQXQ6IHouY29lcmNlLmRhdGUoKS5vcHRpb25hbCgpLFxuICAvKiogTnVtYmVyIG9mIHRpbWVzIHRoaXMgbWVzc2FnZSBoYXMgYmVlbiByZS1lbnF1ZXVlZCBkdWUgdG8gc2VydmVyIGVycm9ycyAoNXh4KSAqL1xuICBzZXJ2ZXJFcnJvclJldHJ5Q291bnQ6IHoubnVtYmVyKCkuaW50KCkub3B0aW9uYWwoKSxcbiAgLyoqIFN0ZXAgSUQgZm9yIGlubGluZSBzdGVwIGV4ZWN1dGlvbiBpbiBjb21iaW5lZCBoYW5kbGVyLiBJZiBwcm92aWRlZCwgdGhlIGZsb3cgZXhlY3V0aW9uXG4gICAqIHdpbGwganVtcCBkaXJlY3RseSB0byBleGVjdXRlIHRoZSBzdGVwIHdpdGggdGhlIGdpdmVuIElEIGJlZm9yZSBkb2luZyBhbiBldmVudCByZXBsYXkuICovXG4gIHN0ZXBJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogU3RlcCBuYW1lLCBzZW50IGFsb25nc2lkZSBzdGVwSWQgdG8gYXZvaWQgbG9hZGluZyB0aGUgZXZlbnQgbG9nIGp1c3QgdG8gcmVzb2x2ZSB0aGUgbmFtZS4gKi9cbiAgc3RlcE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIFJ1biBjcmVhdGlvbiBkYXRhLCBvbmx5IHByZXNlbnQgb24gdGhlIGZpcnN0IHF1ZXVlIGRlbGl2ZXJ5IGZyb20gc3RhcnQoKSAqL1xuICBydW5JbnB1dDogUnVuSW5wdXRTY2hlbWEub3B0aW9uYWwoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgU3RlcEludm9rZVBheWxvYWRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHdvcmtmbG93TmFtZTogei5zdHJpbmcoKSxcbiAgd29ya2Zsb3dSdW5JZDogei5zdHJpbmcoKSxcbiAgd29ya2Zsb3dTdGFydGVkQXQ6IHoubnVtYmVyKCksXG4gIHN0ZXBJZDogei5zdHJpbmcoKSxcbiAgdHJhY2VDYXJyaWVyOiBUcmFjZUNhcnJpZXJTY2hlbWEub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkQXQ6IHouY29lcmNlLmRhdGUoKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93SW52b2tlUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIFdvcmtmbG93SW52b2tlUGF5bG9hZFNjaGVtYT47XG5leHBvcnQgdHlwZSBTdGVwSW52b2tlUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIFN0ZXBJbnZva2VQYXlsb2FkU2NoZW1hPjtcbmV4cG9ydCB0eXBlIEhlYWx0aENoZWNrUGF5bG9hZCA9IHouaW5mZXI8dHlwZW9mIEhlYWx0aENoZWNrUGF5bG9hZFNjaGVtYT47XG5cbi8qKlxuICogSGVhbHRoIGNoZWNrIHBheWxvYWQgLSB1c2VkIHRvIHZlcmlmeSB0aGF0IHRoZSBxdWV1ZSBwaXBlbGluZVxuICogY2FuIGRlbGl2ZXIgbWVzc2FnZXMgdG8gd29ya2Zsb3cvc3RlcCBlbmRwb2ludHMuXG4gKi9cbmV4cG9ydCBjb25zdCBIZWFsdGhDaGVja1BheWxvYWRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIF9faGVhbHRoQ2hlY2s6IHoubGl0ZXJhbCh0cnVlKSxcbiAgY29ycmVsYXRpb25JZDogei5zdHJpbmcoKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgUXVldWVQYXlsb2FkU2NoZW1hID0gei51bmlvbihbXG4gIFdvcmtmbG93SW52b2tlUGF5bG9hZFNjaGVtYSxcbiAgU3RlcEludm9rZVBheWxvYWRTY2hlbWEsXG4gIEhlYWx0aENoZWNrUGF5bG9hZFNjaGVtYSxcbl0pO1xuZXhwb3J0IHR5cGUgUXVldWVQYXlsb2FkID0gei5pbmZlcjx0eXBlb2YgUXVldWVQYXlsb2FkU2NoZW1hPjtcblxuZXhwb3J0IGludGVyZmFjZSBRdWV1ZU9wdGlvbnMge1xuICBkZXBsb3ltZW50SWQ/OiBzdHJpbmc7XG4gIGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIERlbGF5IG1lc3NhZ2UgZGVsaXZlcnkgYnkgdGhpcyBtYW55IHNlY29uZHMgKi9cbiAgZGVsYXlTZWNvbmRzPzogbnVtYmVyO1xuICAvKiogU3BlYyB2ZXJzaW9uIG9mIHRoZSB0YXJnZXQgcnVuLiBVc2VkIHRvIHNlbGVjdCB0aGUgcXVldWUgdHJhbnNwb3J0IGZvcm1hdC4gKi9cbiAgc3BlY1ZlcnNpb24/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWUge1xuICBnZXREZXBsb3ltZW50SWQoKTogUHJvbWlzZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIG1lc3NhZ2UgdG8gdGhlIHNwZWNpZmllZCBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIHF1ZXVlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBxdWV1ZSB0byB3aGljaCB0aGUgbWVzc2FnZSB3aWxsIGJlIHNlbnQuXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCB0byB0aGUgcXVldWUuXG4gICAqIEBwYXJhbSBvcHRzIC0gT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHF1ZXVlIG9wZXJhdGlvbi5cbiAgICovXG4gIHF1ZXVlKFxuICAgIHF1ZXVlTmFtZTogVmFsaWRRdWV1ZU5hbWUsXG4gICAgbWVzc2FnZTogUXVldWVQYXlsb2FkLFxuICAgIG9wdHM/OiBRdWV1ZU9wdGlvbnNcbiAgKTogUHJvbWlzZTx7IG1lc3NhZ2VJZDogTWVzc2FnZUlkIHwgbnVsbCB9PjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBIVFRQIHF1ZXVlIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgbWVzc2FnZXMgZnJvbSBhIHNwZWNpZmljIHF1ZXVlLlxuICAgKi9cbiAgY3JlYXRlUXVldWVIYW5kbGVyKFxuICAgIHF1ZXVlTmFtZVByZWZpeDogUXVldWVQcmVmaXgsXG4gICAgaGFuZGxlcjogKFxuICAgICAgbWVzc2FnZTogdW5rbm93bixcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgYXR0ZW1wdDogbnVtYmVyO1xuICAgICAgICBxdWV1ZU5hbWU6IFZhbGlkUXVldWVOYW1lO1xuICAgICAgICBtZXNzYWdlSWQ6IE1lc3NhZ2VJZDtcbiAgICAgICAgcmVxdWVzdElkPzogc3RyaW5nO1xuICAgICAgfVxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0NvbmZ1c2luZ1ZvaWRUeXBlOiBpdCBpcyB3aGF0IGl0IGlzXG4gICAgKSA9PiBQcm9taXNlPHZvaWQgfCB7IHRpbWVvdXRTZWNvbmRzOiBudW1iZXIgfT5cbiAgKTogKHJlcTogUmVxdWVzdCkgPT4gUHJvbWlzZTxSZXNwb25zZT47XG59XG4iLCAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyB0eXBlIFNlcmlhbGl6ZWREYXRhLCBTZXJpYWxpemVkRGF0YVNjaGVtYSB9IGZyb20gJy4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFBhZ2luYXRpb25PcHRpb25zLCBSZXNvbHZlRGF0YSB9IGZyb20gJy4vc2hhcmVkLmpzJztcblxuLy8gV29ya2Zsb3cgcnVuIHNjaGVtYXNcbmV4cG9ydCBjb25zdCBXb3JrZmxvd1J1blN0YXR1c1NjaGVtYSA9IHouZW51bShbXG4gICdwZW5kaW5nJyxcbiAgJ3J1bm5pbmcnLFxuICAnY29tcGxldGVkJyxcbiAgJ2ZhaWxlZCcsXG4gICdjYW5jZWxsZWQnLFxuXSk7XG5cbi8qKlxuICogQmFzZSBzY2hlbWEgZm9yIHRoZSBXb3JrZmxvdyBydW5zLiBQcmVmZXIgdXNpbmcgV29ya2Zsb3dSdW5TY2hlbWFcbiAqIHdoaWNoIGltcGxlbWVudHMgYSBkaXNjcmltaW5hdGVkVW5pb24gZm9yIHZhcmlvdXMgc3RhdGVzLlxuICpcbiAqIE5vdGU6IGlucHV0L291dHB1dCB1c2UgU2VyaWFsaXplZERhdGFTY2hlbWEgdG8gc3VwcG9ydCBib3RoOlxuICogLSBzcGVjVmVyc2lvbiA+PSAyOiBVaW50OEFycmF5IChiaW5hcnkgZGV2YWx1ZSBmb3JtYXQpXG4gKiAtIHNwZWNWZXJzaW9uIDE6IGFueSAobGVnYWN5IEpTT04gZm9ybWF0KVxuICovXG5leHBvcnQgY29uc3QgV29ya2Zsb3dSdW5CYXNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBydW5JZDogei5zdHJpbmcoKSxcbiAgc3RhdHVzOiBXb3JrZmxvd1J1blN0YXR1c1NjaGVtYSxcbiAgZGVwbG95bWVudElkOiB6LnN0cmluZygpLFxuICAvKipcbiAgICogVGhlIG1hY2hpbmUtcmVhZGFibGUgbmFtZSBvZiB0aGUgd29ya2Zsb3cgZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgZmllbGQgY29udGFpbnMgYSBzdHJ1Y3R1cmVkIGlkZW50aWZpZXIgbGlrZSBgd29ya2Zsb3cvLy4vc3JjL3dvcmtmbG93cy9vcmRlci8vcHJvY2Vzc09yZGVyYFxuICAgKiB0aGF0IGVuY29kZXMgdGhlIHdvcmtmbG93J3MgbW9kdWxlIHNwZWNpZmllciBhbmQgZnVuY3Rpb24gbmFtZS5cbiAgICpcbiAgICogVXNlIGBwYXJzZVdvcmtmbG93TmFtZSgpYCBmcm9tIGBAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZWAgdG8gZXh0cmFjdDpcbiAgICogLSBgc2hvcnROYW1lYDogVXNlci1mcmllbmRseSBkaXNwbGF5IG5hbWUgKGUuZy4sIGBcInByb2Nlc3NPcmRlclwiYClcbiAgICogLSBgbW9kdWxlU3BlY2lmaWVyYDogVGhlIG1vZHVsZSBwYXRoIG9yIHBhY2thZ2UgKGUuZy4sIGBcIi4vc3JjL3dvcmtmbG93cy9vcmRlclwiYClcbiAgICogLSBgZnVuY3Rpb25OYW1lYDogVGhlIGZ1bGwgZnVuY3Rpb24gcGF0aCAoZS5nLiwgYFwicHJvY2Vzc09yZGVyXCJgKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c1xuICAgKiBpbXBvcnQgeyBwYXJzZVdvcmtmbG93TmFtZSB9IGZyb20gXCJAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZVwiO1xuICAgKlxuICAgKiBjb25zdCBwYXJzZWQgPSBwYXJzZVdvcmtmbG93TmFtZShydW4ud29ya2Zsb3dOYW1lKTtcbiAgICogLy8gcGFyc2VkLnNob3J0TmFtZSDihpIgXCJwcm9jZXNzT3JkZXJcIlxuICAgKiAvLyBwYXJzZWQubW9kdWxlU3BlY2lmaWVyIOKGkiBcIi4vc3JjL3dvcmtmbG93cy9vcmRlclwiXG4gICAqIGBgYFxuICAgKi9cbiAgd29ya2Zsb3dOYW1lOiB6LnN0cmluZygpLFxuICAvLyBPcHRpb25hbCBpbiBkYXRhYmFzZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGRlZmF1bHRzIHRvIDEgKGxlZ2FjeSkgd2hlbiByZWFkaW5nXG4gIHNwZWNWZXJzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGV4ZWN1dGlvbkNvbnRleHQ6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKCksXG4gIGlucHV0OiBTZXJpYWxpemVkRGF0YVNjaGVtYS5vcHRpb25hbCgpLFxuICBvdXRwdXQ6IFNlcmlhbGl6ZWREYXRhU2NoZW1hLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyb3duIHZhbHVlIGZyb20gYSBydW5fZmFpbGVkIGV2ZW50LCBzZXJpYWxpemVkIHZpYSB0aGUgd29ya2Zsb3dcbiAgICogc2VyaWFsaXphdGlvbiBwaXBlbGluZS4gVG8gZGlzcGxheSB0aGUgZXJyb3IgdG8gYSB1c2VyLCBoeWRyYXRlIGl0IHZpYVxuICAgKiBgaHlkcmF0ZVJ1bkVycm9yYCAod2l0aCB0aGUgZW5jcnlwdGlvbiBrZXkgaWYgZW5jcnlwdGlvbiBpcyBlbmFibGVkKS5cbiAgICogT2JzZXJ2YWJpbGl0eSB0b29scyBjYW5ub3QgdmlldyB0aGUgZXJyb3Igd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZVxuICAgKiBkZWNyeXB0aW9uICsgaHlkcmF0aW9uIHBpcGVsaW5lLlxuICAgKi9cbiAgZXJyb3I6IFNlcmlhbGl6ZWREYXRhU2NoZW1hLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBUaGUgaGlnaC1sZXZlbCBlcnJvciBjYXRlZ29yeSAoVVNFUl9FUlJPUiwgUlVOVElNRV9FUlJPUiwgZXRjLikgZnJvbSBhXG4gICAqIHJ1bl9mYWlsZWQgZXZlbnQuIEtlcHQgYXMgcGxhaW50ZXh0IG1ldGFkYXRhIGZvciByb3V0aW5nIGFuZCBmaWx0ZXJpbmdcbiAgICogd2l0aG91dCBuZWVkaW5nIHRvIGRlY3J5cHQgdGhlIGZ1bGwgZXJyb3IgcGF5bG9hZC5cbiAgICovXG4gIGVycm9yQ29kZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogUGxhaW50ZXh0IHN0cmluZy1zdHJpbmcgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIHJ1biB2aWFcbiAgICogYGV4cGVyaW1lbnRhbF9zZXRBdHRyaWJ1dGVzKClgIChvciwgaW4gdGhlIGZ1dHVyZSwgbWF0ZXJpYWxpemVkXG4gICAqIGZyb20gYGF0dHJfc2V0YCBldmVudHMpLiBTdG9yZWQgdW5lbmNyeXB0ZWQgYWxvbmdzaWRlIG90aGVyXG4gICAqIHBsYWludGV4dCBmaWVsZHMgc28gb2JzZXJ2YWJpbGl0eSBzdXJmYWNlcyBjYW4gcmVhZCBpdCB3aXRob3V0XG4gICAqIGdvaW5nIHRocm91Z2ggdGhlIGRlY3J5cHRpb24gcGlwZWxpbmUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGB7fWAgYWZ0ZXIgc2NoZW1hIHBhcnNpbmcgc28gY29uc3VtZXJzIGFsd2F5cyByZWNlaXZlXG4gICAqIGEgcmVjb3JkIHJlZ2FyZGxlc3Mgb2Ygd29ybGQuIFdvcmxkIGFkYXB0ZXJzIG5lZWQgbm90IGluaXRpYWxpemVcbiAgICogdGhlIGZpZWxkIG9uIGRpc2sg4oCUIGB3b3JsZC1sb2NhbGAgSlNPTiBmaWxlcyB3cml0dGVuIGJlZm9yZSB0aGlzXG4gICAqIGZpZWxkIGV4aXN0ZWQsIGFuZCByb3dzIGZyb20gYW55IG90aGVyIGFkYXB0ZXIgdGhhdCBvbWl0cyB0aGVcbiAgICogY29sdW1uLCBib3RoIHJlYWQgYXMgYHt9YCBhZnRlciBab2QgcGFyc2VzIHRoZW0uXG4gICAqXG4gICAqIEVYUEVSSU1FTlRBTCAoTVZQKTogdGhlIGZ1bGwgV29ya2Zsb3cgQXR0cmlidXRlcyBmZWF0dXJlIHJlcGxhY2VzXG4gICAqIHRoZSBkaXJlY3QtbXV0YXRpb24gTVZQIHBhdGggd2l0aCBhbiBldmVudC1zb3VyY2VkIG1vZGVsIOKAlCBzZWVcbiAgICogdGhlIGF0dHJpYnV0ZXMtbXZwIGNoYW5nZWxvZyBlbnRyeS5cbiAgICovXG4gIGF0dHJpYnV0ZXM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLmRlZmF1bHQoe30pLFxuICBleHBpcmVkQXQ6IHouY29lcmNlLmRhdGUoKS5vcHRpb25hbCgpLFxuICBzdGFydGVkQXQ6IHouY29lcmNlLmRhdGUoKS5vcHRpb25hbCgpLFxuICBjb21wbGV0ZWRBdDogei5jb2VyY2UuZGF0ZSgpLm9wdGlvbmFsKCksXG4gIGNyZWF0ZWRBdDogei5jb2VyY2UuZGF0ZSgpLFxuICB1cGRhdGVkQXQ6IHouY29lcmNlLmRhdGUoKSxcbn0pO1xuXG4vLyBEaXNjcmltaW5hdGVkIHVuaW9uIGJhc2VkIG9uIHN0YXR1c1xuZXhwb3J0IGNvbnN0IFdvcmtmbG93UnVuU2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oJ3N0YXR1cycsIFtcbiAgLy8gTm9uLWZpbmFsIHN0YXRlc1xuICBXb3JrZmxvd1J1bkJhc2VTY2hlbWEuZXh0ZW5kKHtcbiAgICBzdGF0dXM6IHouZW51bShbJ3BlbmRpbmcnLCAncnVubmluZyddKSxcbiAgICBvdXRwdXQ6IHoudW5kZWZpbmVkKCkub3B0aW9uYWwoKSxcbiAgICBlcnJvcjogei51bmRlZmluZWQoKS5vcHRpb25hbCgpLFxuICAgIGNvbXBsZXRlZEF0OiB6LnVuZGVmaW5lZCgpLm9wdGlvbmFsKCksXG4gIH0pLFxuICAvLyBDYW5jZWxsZWQgc3RhdGVcbiAgV29ya2Zsb3dSdW5CYXNlU2NoZW1hLmV4dGVuZCh7XG4gICAgc3RhdHVzOiB6LmxpdGVyYWwoJ2NhbmNlbGxlZCcpLFxuICAgIG91dHB1dDogei51bmRlZmluZWQoKS5vcHRpb25hbCgpLFxuICAgIGVycm9yOiB6LnVuZGVmaW5lZCgpLm9wdGlvbmFsKCksXG4gICAgY29tcGxldGVkQXQ6IHouY29lcmNlLmRhdGUoKSxcbiAgfSksXG4gIC8vIENvbXBsZXRlZCBzdGF0ZSAtIG91dHB1dCBjYW4gYmUgdjEgb3IgdjIgZm9ybWF0XG4gIFdvcmtmbG93UnVuQmFzZVNjaGVtYS5leHRlbmQoe1xuICAgIHN0YXR1czogei5saXRlcmFsKCdjb21wbGV0ZWQnKSxcbiAgICBvdXRwdXQ6IFNlcmlhbGl6ZWREYXRhU2NoZW1hLFxuICAgIGVycm9yOiB6LnVuZGVmaW5lZCgpLm9wdGlvbmFsKCksXG4gICAgY29tcGxldGVkQXQ6IHouY29lcmNlLmRhdGUoKSxcbiAgfSksXG4gIC8vIEZhaWxlZCBzdGF0ZVxuICBXb3JrZmxvd1J1bkJhc2VTY2hlbWEuZXh0ZW5kKHtcbiAgICBzdGF0dXM6IHoubGl0ZXJhbCgnZmFpbGVkJyksXG4gICAgb3V0cHV0OiB6LnVuZGVmaW5lZCgpLm9wdGlvbmFsKCksXG4gICAgZXJyb3I6IFNlcmlhbGl6ZWREYXRhU2NoZW1hLFxuICAgIGNvbXBsZXRlZEF0OiB6LmNvZXJjZS5kYXRlKCksXG4gIH0pLFxuXSk7XG5cbi8vIEluZmVycmVkIHR5cGVzXG5leHBvcnQgdHlwZSBXb3JrZmxvd1J1blN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIFdvcmtmbG93UnVuU3RhdHVzU2NoZW1hPjtcbmV4cG9ydCB0eXBlIFdvcmtmbG93UnVuID0gei5pbmZlcjx0eXBlb2YgV29ya2Zsb3dSdW5TY2hlbWE+O1xuXG4vKipcbiAqIFdvcmtmbG93UnVuIHdpdGggaW5wdXQvb3V0cHV0IGZpZWxkcyBleGNsdWRlZCAod2hlbiByZXNvbHZlRGF0YT0nbm9uZScpLlxuICogVXNlZCBmb3IgbGlzdGluZyBydW5zIHdpdGhvdXQgZmV0Y2hpbmcgdGhlIGZ1bGwgc2VyaWFsaXplZCBkYXRhLlxuICovXG5leHBvcnQgdHlwZSBXb3JrZmxvd1J1bldpdGhvdXREYXRhID0gT21pdDxXb3JrZmxvd1J1biwgJ2lucHV0JyB8ICdvdXRwdXQnPiAmIHtcbiAgaW5wdXQ6IHVuZGVmaW5lZDtcbiAgb3V0cHV0OiB1bmRlZmluZWQ7XG59O1xuXG4vLyBSZXF1ZXN0IHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVdvcmtmbG93UnVuUmVxdWVzdCB7XG4gIGRlcGxveW1lbnRJZDogc3RyaW5nO1xuICB3b3JrZmxvd05hbWU6IHN0cmluZztcbiAgaW5wdXQ6IFNlcmlhbGl6ZWREYXRhO1xuICBleGVjdXRpb25Db250ZXh0PzogU2VyaWFsaXplZERhdGE7XG4gIHNwZWNWZXJzaW9uPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdldFdvcmtmbG93UnVuUGFyYW1zIHtcbiAgcmVzb2x2ZURhdGE/OiBSZXNvbHZlRGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0V29ya2Zsb3dSdW5zUGFyYW1zIHtcbiAgd29ya2Zsb3dOYW1lPzogc3RyaW5nO1xuICBzdGF0dXM/OiBXb3JrZmxvd1J1blN0YXR1cztcbiAgcGFnaW5hdGlvbj86IFBhZ2luYXRpb25PcHRpb25zO1xuICByZXNvbHZlRGF0YT86IFJlc29sdmVEYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbmNlbFdvcmtmbG93UnVuUGFyYW1zIHtcbiAgcmVzb2x2ZURhdGE/OiBSZXNvbHZlRGF0YTtcbn1cbiIsICJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcblxuZXhwb3J0IGNvbnN0IHpvZEpzb25TY2hlbWE6IHouWm9kVHlwZTx1bmtub3duPiA9IHoubGF6eSgoKSA9PiB7XG4gIHJldHVybiB6LnVuaW9uKFtcbiAgICB6LnN0cmluZygpLFxuICAgIHoubnVtYmVyKCksXG4gICAgei5ib29sZWFuKCksXG4gICAgei5udWxsKCksXG4gICAgei5hcnJheSh6b2RKc29uU2NoZW1hKSxcbiAgICB6LnJlY29yZCh6LnN0cmluZygpLCB6b2RKc29uU2NoZW1hKSxcbiAgXSk7XG59KTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBwYWdpbmF0ZWQgcXVlcmllcy5cbiAqIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciBwYWdlIHNpemUgYW5kIGN1cnNvci1iYXNlZCBuYXZpZ2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25PcHRpb25zIHtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHVybiAoZGVmYXVsdCB2YXJpZXMgYnkgc2VydmljZSwgbWF4OiAxMDAwKSAqL1xuICBsaW1pdD86IG51bWJlcjtcbiAgLyoqIEN1cnNvciBmb3IgcGFnaW5hdGlvbiAtIHRva2VuIGZyb20gcHJldmlvdXMgcmVzcG9uc2UgKi9cbiAgY3Vyc29yPzogc3RyaW5nO1xuICAvLyBTb3J0ZWQgYnkgY3JlYXRpb24gdGltZSwgZGVmYXVsdHMgdG8gdGhlIHdvcmxkJ3MgZGVmYXVsdCBmb3IgdGhlIHNwZWNpZmljXG4gIC8vIGxpc3QgY2FsbC4gSWYgeW91IGtub3cgd2hhdCBzb3J0IG9yZGVyIHlvdSB3YW50LCBhbHdheXMgc3BlY2lmeSBpdC5cbiAgc29ydE9yZGVyPzogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8vIFNoYXJlZCBzY2hlbWEgZm9yIHBhZ2luYXRlZCByZXNwb25zZXNcbmV4cG9ydCBjb25zdCBQYWdpbmF0ZWRSZXNwb25zZVNjaGVtYSA9IDxUIGV4dGVuZHMgei5ab2RUeXBlQW55PihcbiAgZGF0YVNjaGVtYTogVFxuKSA9PlxuICB6Lm9iamVjdCh7XG4gICAgZGF0YTogei5hcnJheShkYXRhU2NoZW1hKSxcbiAgICBjdXJzb3I6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgICBoYXNNb3JlOiB6LmJvb2xlYW4oKSxcbiAgfSk7XG5cbi8vIEluZmVycmVkIHR5cGUgZnJvbSBzY2hlbWFcbmV4cG9ydCB0eXBlIFBhZ2luYXRlZFJlc3BvbnNlPFQ+ID0gei5pbmZlcjxcbiAgUmV0dXJuVHlwZTx0eXBlb2YgUGFnaW5hdGVkUmVzcG9uc2VTY2hlbWE8ei5ab2RUeXBlPFQ+Pj5cbj47XG5cbi8qKlxuICogQ29udHJvbHMgaG93IG11Y2ggZGF0YSBpcyByZXNvbHZlZCBpbiB0aGUgcmVzcG9uc2UuXG4gKiAtIFwibm9uZVwiOiBSZXR1cm5zIG1pbmltYWwgZGF0YSB3aXRoIGlucHV0OiBbXSBhbmQgb3V0cHV0OiB1bmRlZmluZWRcbiAqIC0gXCJhbGxcIjogUmV0dXJucyBmdWxsIGRhdGEgd2l0aCBjb21wbGV0ZSBpbnB1dCBhbmQgb3V0cHV0XG4gKi9cbmV4cG9ydCB0eXBlIFJlc29sdmVEYXRhID0gJ25vbmUnIHwgJ2FsbCc7XG5cbi8qKlxuICogQSBzdGFuZGFyZCBlcnJvciBzY2hlbWEgc2hhcGUgZm9yIHByb3BvZ2F0aW5nIGVycm9ycyBmcm9tIHJ1bnMgYW5kIHN0ZXBzXG4gKi9cbmV4cG9ydCBjb25zdCBTdHJ1Y3R1cmVkRXJyb3JTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG1lc3NhZ2U6IHouc3RyaW5nKCksXG4gIHN0YWNrOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSwgLy8gUG9wdWxhdGVkIHdpdGggUnVuRXJyb3JDb2RlIHZhbHVlcyAoVVNFUl9FUlJPUiwgUlVOVElNRV9FUlJPUiwgZXRjLikgZm9yIHJ1bl9mYWlsZWQgZXZlbnRzXG59KTtcblxuZXhwb3J0IHR5cGUgU3RydWN0dXJlZEVycm9yID0gei5pbmZlcjx0eXBlb2YgU3RydWN0dXJlZEVycm9yU2NoZW1hPjtcblxuLyoqXG4gKiBBIHNpbmdsZSBjaHVuayBmcm9tIGEgc3RyZWFtLCB3aXRoIGl0cyAwLWJhc2VkIGluZGV4IGFuZCByYXcgYmluYXJ5IGRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtQ2h1bmsge1xuICAvKiogVGhlIDAtYmFzZWQgcG9zaXRpb24gb2YgdGhpcyBjaHVuayBpbiB0aGUgc3RyZWFtICovXG4gIGluZGV4OiBudW1iZXI7XG4gIC8qKiBUaGUgcmF3IGNodW5rIGRhdGEgKi9cbiAgZGF0YTogVWludDhBcnJheTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBwYWdpbmF0ZWQgY2h1bmsgcmV0cmlldmFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldENodW5rc09wdGlvbnMge1xuICAvKiogTWF4aW11bSBudW1iZXIgb2YgY2h1bmtzIHRvIHJldHVybiBwZXIgcGFnZSAoZGVmYXVsdDogMTAwLCBtYXg6IDEwMDApICovXG4gIGxpbWl0PzogbnVtYmVyO1xuICAvKiogT3BhcXVlIGN1cnNvciBmcm9tIGEgcHJldmlvdXMgcmVzcG9uc2UgdG8gZmV0Y2ggdGhlIG5leHQgcGFnZSAqL1xuICBjdXJzb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTWV0YWRhdGEgYWJvdXQgYSBzdHJlYW0sIHJldHVybmVkIGJ5IHtAbGluayBTdHJlYW1lci5nZXRTdHJlYW1JbmZvfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1JbmZvUmVzcG9uc2Uge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBsYXN0IGtub3duIGNodW5rICgwLWJhc2VkKS5cbiAgICogUmV0dXJucyBgLTFgIHdoZW4gbm8gY2h1bmtzIGhhdmUgYmVlbiB3cml0dGVuIHlldC5cbiAgICovXG4gIHRhaWxJbmRleDogbnVtYmVyO1xuICAvKiogV2hldGhlciB0aGUgc3RyZWFtIGlzIGZ1bGx5IGNvbXBsZXRlIChjbG9zZWQpLiAqL1xuICBkb25lOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhZ2luYXRlZCByZXNwb25zZSBmb3Igc3RyZWFtIGNodW5rcy5cbiAqXG4gKiBFeHRlbmRzIHRoZSBzdGFuZGFyZCBgUGFnaW5hdGVkUmVzcG9uc2VgIHNoYXBlIHdpdGggYSBgZG9uZWAgZmllbGQgdGhhdFxuICogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0cmVhbSBoYXMgYmVlbiBmdWxseSB3cml0dGVuIChjbG9zZWQpLiBXaGVuIGBkb25lYFxuICogaXMgYGZhbHNlYCwgYWRkaXRpb25hbCBjaHVua3MgbWF5IGFwcGVhciBpbiBmdXR1cmUgcmVxdWVzdHMgZXZlbiBhZnRlclxuICogYGhhc01vcmVgIHJldHVybnMgYGZhbHNlYCBmb3IgdGhlIGN1cnJlbnQgc2V0IG9mIGF2YWlsYWJsZSBjaHVua3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtQ2h1bmtzUmVzcG9uc2Uge1xuICAvKiogQXJyYXkgb2Ygc3RyZWFtIGNodW5rcyBpbiBpbmRleCBvcmRlciAqL1xuICBkYXRhOiBTdHJlYW1DaHVua1tdO1xuICAvKiogQ3Vyc29yIGZvciB0aGUgbmV4dCBwYWdlLCBvciBgbnVsbGAgd2hlbiBubyBtb3JlIHBhZ2VzIGFyZSBhdmFpbGFibGUgKi9cbiAgY3Vyc29yOiBzdHJpbmcgfCBudWxsO1xuICAvKiogV2hldGhlciBhZGRpdGlvbmFsIHBhZ2VzIG9mIGFscmVhZHktd3JpdHRlbiBjaHVua3MgZXhpc3QgKi9cbiAgaGFzTW9yZTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIHN0cmVhbSBpcyBmdWxseSBjb21wbGV0ZSAoYWxsIGNodW5rcyBoYXZlIGJlZW4gd3JpdHRlbiBhbmQgdGhlIHN0cmVhbSBpcyBjbG9zZWQpICovXG4gIGRvbmU6IGJvb2xlYW47XG59XG4iLCAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyB0eXBlIFNlcmlhbGl6ZWREYXRhLCBTZXJpYWxpemVkRGF0YVNjaGVtYSB9IGZyb20gJy4vc2VyaWFsaXphdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFBhZ2luYXRpb25PcHRpb25zLCBSZXNvbHZlRGF0YSB9IGZyb20gJy4vc2hhcmVkLmpzJztcblxuLy8gU3RlcCBzY2hlbWFzXG5leHBvcnQgY29uc3QgU3RlcFN0YXR1c1NjaGVtYSA9IHouZW51bShbXG4gICdwZW5kaW5nJyxcbiAgJ3J1bm5pbmcnLFxuICAnY29tcGxldGVkJyxcbiAgJ2ZhaWxlZCcsXG4gICdjYW5jZWxsZWQnLFxuXSk7XG5cbi8qKlxuICogU2NoZW1hIGZvciB3b3JrZmxvdyBzdGVwcy5cbiAqXG4gKiBOb3RlOiBpbnB1dC9vdXRwdXQgdXNlIFNlcmlhbGl6ZWREYXRhU2NoZW1hIHRvIHN1cHBvcnQgYm90aDpcbiAqIC0gc3BlY1ZlcnNpb24gPj0gMjogVWludDhBcnJheSAoYmluYXJ5IGRldmFsdWUgZm9ybWF0KVxuICogLSBzcGVjVmVyc2lvbiAxOiBhbnkgKGxlZ2FjeSBKU09OIGZvcm1hdClcbiAqL1xuLy8gVE9ETzogaW1wbGVtZW50IGEgZGlzY3JpbWluYXRlZCB1bmlvbiBoZXJlIGp1c3QgbGlrZSB0aGUgcnVuIHNjaGVtYVxuZXhwb3J0IGNvbnN0IFN0ZXBTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHJ1bklkOiB6LnN0cmluZygpLFxuICBzdGVwSWQ6IHouc3RyaW5nKCksXG4gIC8qKlxuICAgKiBUaGUgbWFjaGluZS1yZWFkYWJsZSBuYW1lIG9mIHRoZSBzdGVwIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIGZpZWxkIGNvbnRhaW5zIGEgc3RydWN0dXJlZCBpZGVudGlmaWVyIGxpa2UgYHN0ZXAvLy4vc3JjL3dvcmtmbG93cy9vcmRlci8vcHJvY2Vzc1BheW1lbnRgXG4gICAqIHRoYXQgZW5jb2RlcyB0aGUgc3RlcCdzIG1vZHVsZSBzcGVjaWZpZXIgYW5kIGZ1bmN0aW9uIG5hbWUuXG4gICAqXG4gICAqIFVzZSBgcGFyc2VTdGVwTmFtZSgpYCBmcm9tIGBAd29ya2Zsb3cvdXRpbHMvcGFyc2UtbmFtZWAgdG8gZXh0cmFjdDpcbiAgICogLSBgc2hvcnROYW1lYDogVXNlci1mcmllbmRseSBkaXNwbGF5IG5hbWUgKGUuZy4sIGBcInByb2Nlc3NQYXltZW50XCJgKVxuICAgKiAtIGBtb2R1bGVTcGVjaWZpZXJgOiBUaGUgbW9kdWxlIHBhdGggb3IgcGFja2FnZSAoZS5nLiwgYFwiLi9zcmMvd29ya2Zsb3dzL29yZGVyXCJgKVxuICAgKiAtIGBmdW5jdGlvbk5hbWVgOiBUaGUgZnVsbCBmdW5jdGlvbiBwYXRoIChlLmcuLCBgXCJwcm9jZXNzUGF5bWVudFwiYCBvciBgXCJvdXRlci9uZXN0ZWRcImApXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzXG4gICAqIGltcG9ydCB7IHBhcnNlU3RlcE5hbWUgfSBmcm9tIFwiQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWVcIjtcbiAgICpcbiAgICogY29uc3QgcGFyc2VkID0gcGFyc2VTdGVwTmFtZShzdGVwLnN0ZXBOYW1lKTtcbiAgICogLy8gcGFyc2VkLnNob3J0TmFtZSDihpIgXCJwcm9jZXNzUGF5bWVudFwiXG4gICAqIC8vIHBhcnNlZC5tb2R1bGVTcGVjaWZpZXIg4oaSIFwiLi9zcmMvd29ya2Zsb3dzL29yZGVyXCJcbiAgICogYGBgXG4gICAqL1xuICBzdGVwTmFtZTogei5zdHJpbmcoKSxcbiAgc3RhdHVzOiBTdGVwU3RhdHVzU2NoZW1hLFxuICBpbnB1dDogU2VyaWFsaXplZERhdGFTY2hlbWEub3B0aW9uYWwoKSxcbiAgb3V0cHV0OiBTZXJpYWxpemVkRGF0YVNjaGVtYS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogVGhlIHRocm93biB2YWx1ZSBmcm9tIGEgc3RlcF9yZXRyeWluZyBvciBzdGVwX2ZhaWxlZCBldmVudCwgc2VyaWFsaXplZFxuICAgKiB2aWEgdGhlIHdvcmtmbG93IHNlcmlhbGl6YXRpb24gcGlwZWxpbmUuIFRyYWNrcyB0aGUgbW9zdCByZWNlbnQgZXJyb3JcbiAgICogdGhlIHN0ZXAgZW5jb3VudGVyZWQsIHdoaWNoIG1heSBiZSBmcm9tIGEgcmV0cnkgYXR0ZW1wdCAoc3RlcF9yZXRyeWluZylcbiAgICogb3IgdGhlIGZpbmFsIGZhaWx1cmUgKHN0ZXBfZmFpbGVkKS5cbiAgICpcbiAgICogVG8gZGlzcGxheSB0aGUgZXJyb3IgdG8gYSB1c2VyLCBoeWRyYXRlIGl0IHZpYSBgaHlkcmF0ZVN0ZXBFcnJvcmAgKHdpdGhcbiAgICogdGhlIGVuY3J5cHRpb24ga2V5IGlmIGVuY3J5cHRpb24gaXMgZW5hYmxlZCkuIE9ic2VydmFiaWxpdHkgdG9vbHMgY2Fubm90XG4gICAqIHZpZXcgdGhlIGVycm9yIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGUgZGVjcnlwdGlvbiArIGh5ZHJhdGlvbiBwaXBlbGluZS5cbiAgICovXG4gIGVycm9yOiBTZXJpYWxpemVkRGF0YVNjaGVtYS5vcHRpb25hbCgpLFxuICBhdHRlbXB0OiB6Lm51bWJlcigpLFxuICAvKipcbiAgICogV2hlbiB0aGUgc3RlcCBmaXJzdCBzdGFydGVkIGV4ZWN1dGluZy4gU2V0IGJ5IHRoZSBmaXJzdCBzdGVwX3N0YXJ0ZWQgZXZlbnRcbiAgICogYW5kIG5vdCB1cGRhdGVkIG9uIHN1YnNlcXVlbnQgcmV0cmllcy5cbiAgICovXG4gIHN0YXJ0ZWRBdDogei5jb2VyY2UuZGF0ZSgpLm9wdGlvbmFsKCksXG4gIGNvbXBsZXRlZEF0OiB6LmNvZXJjZS5kYXRlKCkub3B0aW9uYWwoKSxcbiAgY3JlYXRlZEF0OiB6LmNvZXJjZS5kYXRlKCksXG4gIHVwZGF0ZWRBdDogei5jb2VyY2UuZGF0ZSgpLFxuICByZXRyeUFmdGVyOiB6LmNvZXJjZS5kYXRlKCkub3B0aW9uYWwoKSxcbiAgLy8gT3B0aW9uYWwgaW4gZGF0YWJhc2UgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBkZWZhdWx0cyB0byAxIChsZWdhY3kpIHdoZW4gcmVhZGluZ1xuICBzcGVjVmVyc2lvbjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxufSk7XG5cbi8vIEluZmVycmVkIHR5cGVzXG5leHBvcnQgdHlwZSBTdGVwU3RhdHVzID0gei5pbmZlcjx0eXBlb2YgU3RlcFN0YXR1c1NjaGVtYT47XG5leHBvcnQgdHlwZSBTdGVwID0gei5pbmZlcjx0eXBlb2YgU3RlcFNjaGVtYT47XG5cbi8qKlxuICogU3RlcCB3aXRoIGlucHV0L291dHB1dCBmaWVsZHMgZXhjbHVkZWQgKHdoZW4gcmVzb2x2ZURhdGE9J25vbmUnKS5cbiAqIFVzZWQgZm9yIGxpc3Rpbmcgc3RlcHMgd2l0aG91dCBmZXRjaGluZyB0aGUgZnVsbCBzZXJpYWxpemVkIGRhdGEuXG4gKi9cbmV4cG9ydCB0eXBlIFN0ZXBXaXRob3V0RGF0YSA9IE9taXQ8U3RlcCwgJ2lucHV0JyB8ICdvdXRwdXQnPiAmIHtcbiAgaW5wdXQ6IHVuZGVmaW5lZDtcbiAgb3V0cHV0OiB1bmRlZmluZWQ7XG59O1xuXG4vLyBSZXF1ZXN0IHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVN0ZXBSZXF1ZXN0IHtcbiAgc3RlcElkOiBzdHJpbmc7XG4gIHN0ZXBOYW1lOiBzdHJpbmc7XG4gIGlucHV0OiBTZXJpYWxpemVkRGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVTdGVwUmVxdWVzdCB7XG4gIGF0dGVtcHQ/OiBudW1iZXI7XG4gIHN0YXR1cz86IFN0ZXBTdGF0dXM7XG4gIG91dHB1dD86IFNlcmlhbGl6ZWREYXRhO1xuICBlcnJvcj86IFNlcmlhbGl6ZWREYXRhO1xuICByZXRyeUFmdGVyPzogRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRTdGVwUGFyYW1zIHtcbiAgcmVzb2x2ZURhdGE/OiBSZXNvbHZlRGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0V29ya2Zsb3dSdW5TdGVwc1BhcmFtcyB7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIHBhZ2luYXRpb24/OiBQYWdpbmF0aW9uT3B0aW9ucztcbiAgcmVzb2x2ZURhdGE/OiBSZXNvbHZlRGF0YTtcbn1cbiIsICJpbXBvcnQgeyBkZWNvZGVUaW1lIH0gZnJvbSAndWxpZCc7XG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcblxuY29uc3QgVWxpZFNjaGVtYSA9IHouc3RyaW5nKCkudWxpZCgpO1xuXG4vKipcbiAqIERlZmF1bHQgdGhyZXNob2xkIGZvciBVTElEIHRpbWVzdGFtcHMgaW4gdGhlIHBhc3QgKDI0IGhvdXJzKS5cbiAqXG4gKiBTZXQgdG8gMjQgaG91cnMgdG8gc3VwcG9ydCB0aGUgcmVzaWxpZW50IHN0YXJ0IHBhdGg6IHdoZW4gc3RhcnQoKSBmYWlscyB0b1xuICogY3JlYXRlIHJ1bl9jcmVhdGVkLCB0aGUgcXVldWUgY2FycmllcyB0aGUgcnVuIGlucHV0IGFuZCB0aGUgcnVudGltZSBjcmVhdGVzXG4gKiB0aGUgcnVuIG9uIHJ1bl9zdGFydGVkLiBWUVMgc3VwcG9ydHMgZGVsYXllZCBtZXNzYWdlcyB1cCB0byAyNCBob3Vycy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVElNRVNUQU1QX1RIUkVTSE9MRF9QQVNUX01TID0gMjQgKiA2MCAqIDYwICogMTAwMDtcblxuLyoqXG4gKiBEZWZhdWx0IHRocmVzaG9sZCBmb3IgVUxJRCB0aW1lc3RhbXBzIGluIHRoZSBmdXR1cmUgKDUgbWludXRlcykuXG4gKlxuICogS2VwdCB0aWdodCB0byBwcmV2ZW50IGFidXNlIGZyb20gY2xpZW50LWdlbmVyYXRlZCBVTElEcyB3aXRoIG1hbmlwdWxhdGVkXG4gKiBmdXR1cmUgdGltZXN0YW1wcyB3aGlsZSBzdGlsbCB0b2xlcmF0aW5nIG1pbm9yIGNsb2NrIHNrZXcuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVTVEFNUF9USFJFU0hPTERfRlVUVVJFX01TID0gNSAqIDYwICogMTAwMDtcblxuLyoqIEBkZXByZWNhdGVkIFVzZSBERUZBVUxUX1RJTUVTVEFNUF9USFJFU0hPTERfUEFTVF9NUyBpbnN0ZWFkICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USU1FU1RBTVBfVEhSRVNIT0xEX01TID1cbiAgREVGQVVMVF9USU1FU1RBTVBfVEhSRVNIT0xEX1BBU1RfTVM7XG5cbi8qKlxuICogRXh0cmFjdHMgYSBEYXRlIGZyb20gYSBVTElEIHN0cmluZywgb3IgbnVsbCBpZiB0aGUgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIFVMSUQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bGlkVG9EYXRlKG1heWJlVWxpZDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICBjb25zdCB1bGlkID0gVWxpZFNjaGVtYS5zYWZlUGFyc2UobWF5YmVVbGlkKTtcbiAgaWYgKCF1bGlkLnN1Y2Nlc3MpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgRGF0ZShkZWNvZGVUaW1lKHVsaWQuZGF0YSkpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGF0IGEgcHJlZml4ZWQgVUxJRCdzIGVtYmVkZGVkIHRpbWVzdGFtcCBpcyB3aXRoaW4gYWNjZXB0YWJsZSB0aHJlc2hvbGRzXG4gKiBvZiB0aGUgY3VycmVudCBzZXJ2ZXIgdGltZS4gVXNlcyBhc3ltbWV0cmljIHRocmVzaG9sZHM6IDI0aCBpbiB0aGUgcGFzdCAodG8gc3VwcG9ydFxuICogcmVzaWxpZW50IHN0YXJ0IHdpdGggcXVldWUgZGVsYXlzKSBhbmQgNW1pbiBpbiB0aGUgZnV0dXJlICh0byBwcmV2ZW50IGFidXNlIHdoaWxlXG4gKiB0b2xlcmF0aW5nIGNsb2NrIHNrZXcpLlxuICpcbiAqIEBwYXJhbSBwcmVmaXhlZFVsaWQgLSBUaGUgcHJlZml4ZWQgVUxJRCB0byB2YWxpZGF0ZSAoZS5nLiwgXCJ3cnVuXzAxQVJZWi4uLlwiKVxuICogQHBhcmFtIHByZWZpeCAtIFRoZSBwcmVmaXggdG8gc3RyaXAgKGUuZy4sIFwid3J1bl9cIilcbiAqIEBwYXJhbSBwYXN0VGhyZXNob2xkTXMgLSBNYXhpbXVtIGFsbG93ZWQgYWdlIGluIHRoZSBwYXN0IChkZWZhdWx0OiAyNCBob3VycylcbiAqIEBwYXJhbSBmdXR1cmVUaHJlc2hvbGRNcyAtIE1heGltdW0gYWxsb3dlZCBkaXN0YW5jZSBpbiB0aGUgZnV0dXJlIChkZWZhdWx0OiA1IG1pbnV0ZXMpXG4gKiBAcmV0dXJucyBudWxsIGlmIHZhbGlkLCBvciBhbiBlcnJvciBtZXNzYWdlIHN0cmluZyBpZiBpbnZhbGlkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVVsaWRUaW1lc3RhbXAoXG4gIHByZWZpeGVkVWxpZDogc3RyaW5nLFxuICBwcmVmaXg6IHN0cmluZyxcbiAgcGFzdFRocmVzaG9sZE1zOiBudW1iZXIgPSBERUZBVUxUX1RJTUVTVEFNUF9USFJFU0hPTERfUEFTVF9NUyxcbiAgZnV0dXJlVGhyZXNob2xkTXM6IG51bWJlciA9IERFRkFVTFRfVElNRVNUQU1QX1RIUkVTSE9MRF9GVVRVUkVfTVNcbik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCByYXcgPSBwcmVmaXhlZFVsaWQuc3RhcnRzV2l0aChwcmVmaXgpXG4gICAgPyBwcmVmaXhlZFVsaWQuc2xpY2UocHJlZml4Lmxlbmd0aClcbiAgICA6IHByZWZpeGVkVWxpZDtcblxuICBjb25zdCB1bGlkVGltZXN0YW1wID0gdWxpZFRvRGF0ZShyYXcpO1xuICBpZiAoIXVsaWRUaW1lc3RhbXApIHtcbiAgICByZXR1cm4gYEludmFsaWQgcnVuSWQ6IFwiJHtwcmVmaXhlZFVsaWR9XCIgaXMgbm90IGEgdmFsaWQgVUxJRGA7XG4gIH1cblxuICBjb25zdCBzZXJ2ZXJUaW1lc3RhbXAgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBkaWZmTXMgPSBzZXJ2ZXJUaW1lc3RhbXAuZ2V0VGltZSgpIC0gdWxpZFRpbWVzdGFtcC5nZXRUaW1lKCk7XG5cbiAgLy8gZGlmZk1zID4gMCBtZWFucyB0aGUgVUxJRCBpcyBpbiB0aGUgcGFzdDsgZGlmZk1zIDwgMCBtZWFucyBpdCdzIGluIHRoZSBmdXR1cmVcbiAgaWYgKGRpZmZNcyA+IDAgJiYgZGlmZk1zIDw9IHBhc3RUaHJlc2hvbGRNcykge1xuICAgIHJldHVybiBudWxsOyAvLyBXaXRoaW4gcGFzdCB0aHJlc2hvbGRcbiAgfVxuICBpZiAoZGlmZk1zIDw9IDAgJiYgLWRpZmZNcyA8PSBmdXR1cmVUaHJlc2hvbGRNcykge1xuICAgIHJldHVybiBudWxsOyAvLyBXaXRoaW4gZnV0dXJlIHRocmVzaG9sZFxuICB9XG5cbiAgY29uc3QgZHJpZnRNcyA9IE1hdGguYWJzKGRpZmZNcyk7XG4gIGNvbnN0IGRyaWZ0U2Vjb25kcyA9IE1hdGgucm91bmQoZHJpZnRNcyAvIDEwMDApO1xuICBjb25zdCBkaXJlY3Rpb24gPSBkaWZmTXMgPiAwID8gJ3Bhc3QnIDogJ2Z1dHVyZSc7XG4gIGNvbnN0IHRocmVzaG9sZE1zID0gZGlmZk1zID4gMCA/IHBhc3RUaHJlc2hvbGRNcyA6IGZ1dHVyZVRocmVzaG9sZE1zO1xuICBjb25zdCB0aHJlc2hvbGRTZWNvbmRzID0gTWF0aC5yb3VuZCh0aHJlc2hvbGRNcyAvIDEwMDApO1xuICByZXR1cm4gYEludmFsaWQgcnVuSWQgdGltZXN0YW1wOiBlbWJlZGRlZCB0aW1lc3RhbXAgaXMgJHtkcmlmdFNlY29uZHN9cyBpbiB0aGUgJHtkaXJlY3Rpb259ICh0aHJlc2hvbGQ6ICR7dGhyZXNob2xkU2Vjb25kc31zKWA7XG59XG4iLCAiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbmV4cG9ydCBjb25zdCBXYWl0U3RhdHVzU2NoZW1hID0gei5lbnVtKFsnd2FpdGluZycsICdjb21wbGV0ZWQnXSk7XG5cbmV4cG9ydCBjb25zdCBXYWl0U2NoZW1hID0gei5vYmplY3Qoe1xuICB3YWl0SWQ6IHouc3RyaW5nKCksXG4gIHJ1bklkOiB6LnN0cmluZygpLFxuICBzdGF0dXM6IFdhaXRTdGF0dXNTY2hlbWEsXG4gIHJlc3VtZUF0OiB6LmNvZXJjZS5kYXRlKCkub3B0aW9uYWwoKSxcbiAgY29tcGxldGVkQXQ6IHouY29lcmNlLmRhdGUoKS5vcHRpb25hbCgpLFxuICBjcmVhdGVkQXQ6IHouY29lcmNlLmRhdGUoKSxcbiAgdXBkYXRlZEF0OiB6LmNvZXJjZS5kYXRlKCksXG4gIHNwZWNWZXJzaW9uOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgV2FpdFN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIFdhaXRTdGF0dXNTY2hlbWE+O1xuZXhwb3J0IHR5cGUgV2FpdCA9IHouaW5mZXI8dHlwZW9mIFdhaXRTY2hlbWE+O1xuIiwgImV4cG9ydCBjb25zdCBXT1JLRkxPV19VU0VfU1RFUCA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX1VTRV9TVEVQJyk7XG5leHBvcnQgY29uc3QgV09SS0ZMT1dfQ1JFQVRFX0hPT0sgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19DUkVBVEVfSE9PSycpO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1NMRUVQID0gU3ltYm9sLmZvcignV09SS0ZMT1dfU0xFRVAnKTtcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19DT05URVhUID0gU3ltYm9sLmZvcignV09SS0ZMT1dfQ09OVEVYVCcpO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX0dFVF9TVFJFQU1fSUQgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19HRVRfU1RSRUFNX0lEJyk7XG5leHBvcnQgY29uc3QgU1RBQkxFX1VMSUQgPSBTeW1ib2wuZm9yKCdXT1JLRkxPV19TVEFCTEVfVUxJRCcpO1xuZXhwb3J0IGNvbnN0IFNUUkVBTV9OQU1FX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX1NUUkVBTV9OQU1FJyk7XG5leHBvcnQgY29uc3QgU1RSRUFNX1RZUEVfU1lNQk9MID0gU3ltYm9sLmZvcignV09SS0ZMT1dfU1RSRUFNX1RZUEUnKTtcbi8qKlxuICogU3RhbXBlZCBvbiBhIHJlYWwgYFdyaXRhYmxlU3RyZWFtYCAodGhlIHVzZXItdmlzaWJsZSBgc2VyaWFsaXplLndyaXRhYmxlYFxuICogcmV0dXJuZWQgZnJvbSBhIHN0ZXAtc2lkZSByZXZpdmVyIG9yIHN0ZXAtY29udGV4dCBgZ2V0V3JpdGFibGUoKWApIHRvXG4gKiByZWNvcmQgdGhlIGBydW5JZGAgb2YgdGhlIHdvcmtmbG93IHJ1biB0aGF0IG93bnMgdGhlIHVuZGVybHlpbmcgc2VydmVyXG4gKiBzdHJlYW0uIFVzZWQgdG9nZXRoZXIgd2l0aCBgU1RSRUFNX05BTUVfU1lNQk9MYC5cbiAqXG4gKiBXaGVuIGBnZXRFeHRlcm5hbFJlZHVjZXJzLldyaXRhYmxlU3RyZWFtYCAodGhlIGRlaHlkcmF0aW9uIHBhdGggdXNlZCBieVxuICogYHN0YXJ0KClgKSBzZWVzIGJvdGggc3ltYm9scyBvbiBhIHdyaXRhYmxlLCBpdCBpbmNsdWRlcyB0aGUgYHJ1bklkYCBpblxuICogdGhlIGRlc2NyaXB0b3IgaXQgZW1pdHMuIFRoZSBjaGlsZCBydW4ncyBzdGVwLXNpZGUgcmV2aXZlciB0aGVuIG9wZW5zXG4gKiBhIHNlcnZlciB3cml0YWJsZSBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgKHJ1bklkLCBuYW1lKWAgYW5kIHJlc29sdmVzXG4gKiB0aGF0IHJ1bidzIGVuY3J5cHRpb24ga2V5IGRpcmVjdGx5IOKAlCBzbyB0aGUgY2hpbGQncyB3cml0ZXMgbGFuZCBvblxuICogdGhlIHBhcmVudCdzIHN0cmVhbSBhcy1pcywgd2l0aCBubyBjbGllbnQgcHJvY2VzcyBpbiB0aGUgbG9vcC4gVGhhdFxuICoga2VlcHMgdGhlIGZvcndhcmRpbmcgYWxpdmUgZm9yIHRoZSBmdWxsIGxpZmV0aW1lIG9mIHRoZSBjaGlsZCBydW4sXG4gKiBub3QganVzdCBmb3IgdGhlIHBhcmVudCBzdGVwIHRoYXQgaW5pdGlhdGVkIGBzdGFydCgpYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNUUkVBTV9TRVJWRVJfUlVOX0lEX1NZTUJPTCA9IFN5bWJvbC5mb3IoXG4gICdXT1JLRkxPV19TVFJFQU1fU0VSVkVSX1JVTl9JRCdcbik7XG5leHBvcnQgY29uc3QgQk9EWV9JTklUX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0JPRFlfSU5JVCcpO1xuZXhwb3J0IGNvbnN0IFdFQkhPT0tfUkVTUE9OU0VfV1JJVEFCTEUgPSBTeW1ib2wuZm9yKFxuICAnV0VCSE9PS19SRVNQT05TRV9XUklUQUJMRSdcbik7XG5cbi8qKlxuICogU3ltYm9sIHVzZWQgdG8gc3RvcmUgdGhlIGNsYXNzIHJlZ2lzdHJ5IG9uIGdsb2JhbFRoaXMgaW4gd29ya2Zsb3cgbW9kZS5cbiAqIFRoaXMgYWxsb3dzIHRoZSBkZXNlcmlhbGl6ZXIgdG8gZmluZCBjbGFzc2VzIGJ5IGNsYXNzSWQgaW4gdGhlIFZNIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBjb25zdCBXT1JLRkxPV19DTEFTU19SRUdJU1RSWSA9IFN5bWJvbC5mb3IoJ3dvcmtmbG93LWNsYXNzLXJlZ2lzdHJ5Jyk7XG5cbmV4cG9ydCBjb25zdCBBQk9SVF9TVFJFQU1fTkFNRSA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX0FCT1JUX1NUUkVBTV9OQU1FJyk7XG5leHBvcnQgY29uc3QgQUJPUlRfSE9PS19UT0tFTiA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX0FCT1JUX0hPT0tfVE9LRU4nKTtcbmV4cG9ydCBjb25zdCBBQk9SVF9MSVNURU5FUl9BVFRBQ0hFRCA9IFN5bWJvbC5mb3IoXG4gICdXT1JLRkxPV19BQk9SVF9MSVNURU5FUl9BVFRBQ0hFRCdcbik7XG5leHBvcnQgY29uc3QgQUJPUlRfUkVBREVSX0NBTkNFTCA9IFN5bWJvbC5mb3IoJ1dPUktGTE9XX0FCT1JUX1JFQURFUl9DQU5DRUwnKTtcbiIsICJpbXBvcnQgdHlwZSB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnbXMnO1xuaW1wb3J0IHsgdGhyb3dOb3RJbldvcmtmbG93Q29udGV4dCB9IGZyb20gJy4vY29udGV4dC1lcnJvcnMuanMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfU0xFRVAgfSBmcm9tICcuL3N5bWJvbHMuanMnO1xuXG4vKipcbiAqIFNsZWVwIHdpdGhpbiBhIHdvcmtmbG93IGZvciBhIGdpdmVuIGR1cmF0aW9uLlxuICpcbiAqIFRoaXMgaXMgYSBidWlsdC1pbiBydW50aW1lIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aW1lciBldmVudHMgaW4gdGhlIGV2ZW50IGxvZy5cbiAqXG4gKiBAcGFyYW0gZHVyYXRpb24gLSBUaGUgZHVyYXRpb24gdG8gc2xlZXAgZm9yLCB0aGlzIGlzIGEgc3RyaW5nIGluIHRoZSBmb3JtYXRcbiAqIG9mIGBcIjEwMDBtc1wiYCwgYFwiMXNcImAsIGBcIjFtXCJgLCBgXCIxaFwiYCwgb3IgYFwiMWRcImAuXG4gKiBAb3ZlcmxvYWRcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHNsZWVwIGlzIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXAoZHVyYXRpb246IFN0cmluZ1ZhbHVlKTogUHJvbWlzZTx2b2lkPjtcblxuLyoqXG4gKiBTbGVlcCB3aXRoaW4gYSB3b3JrZmxvdyB1bnRpbCBhIHNwZWNpZmljIGRhdGUuXG4gKlxuICogVGhpcyBpcyBhIGJ1aWx0LWluIHJ1bnRpbWUgZnVuY3Rpb24gdGhhdCB1c2VzIHRpbWVyIGV2ZW50cyBpbiB0aGUgZXZlbnQgbG9nLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdG8gc2xlZXAgdW50aWwsIHRoaXMgbXVzdCBiZSBhIGZ1dHVyZSBkYXRlLlxuICogQG92ZXJsb2FkXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzbGVlcCBpcyBjb21wbGV0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKGRhdGU6IERhdGUpOiBQcm9taXNlPHZvaWQ+O1xuXG4vKipcbiAqIFNsZWVwIHdpdGhpbiBhIHdvcmtmbG93IGZvciBhIGdpdmVuIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBUaGlzIGlzIGEgYnVpbHQtaW4gcnVudGltZSBmdW5jdGlvbiB0aGF0IHVzZXMgdGltZXIgZXZlbnRzIGluIHRoZSBldmVudCBsb2cuXG4gKlxuICogQHBhcmFtIGR1cmF0aW9uTXMgLSBUaGUgZHVyYXRpb24gdG8gc2xlZXAgZm9yIGluIG1pbGxpc2Vjb25kcy5cbiAqIEBvdmVybG9hZFxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2xlZXAgaXMgY29tcGxldGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChkdXJhdGlvbk1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXAocGFyYW06IFN0cmluZ1ZhbHVlIHwgRGF0ZSB8IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBJbnNpZGUgdGhlIHdvcmtmbG93IFZNLCB0aGUgc2xlZXAgZnVuY3Rpb24gaXMgc3RvcmVkIGluIHRoZSBnbG9iYWxUaGlzIG9iamVjdCBiZWhpbmQgYSBzeW1ib2xcbiAgY29uc3Qgc2xlZXBGbiA9IChnbG9iYWxUaGlzIGFzIGFueSlbV09SS0ZMT1dfU0xFRVBdO1xuICBpZiAoIXNsZWVwRm4pIHtcbiAgICB0aHJvd05vdEluV29ya2Zsb3dDb250ZXh0KFxuICAgICAgJ3NsZWVwKCknLFxuICAgICAgJ2h0dHBzOi8vd29ya2Zsb3ctc2RrLmRldi9kb2NzL2FwaS1yZWZlcmVuY2Uvd29ya2Zsb3cvc2xlZXAnLFxuICAgICAgc2xlZXBcbiAgICApO1xuICB9XG4gIHJldHVybiBzbGVlcEZuKHBhcmFtKTtcbn1cbiIsICJpbXBvcnQgeyB0aHJvd05vdEluV29ya2Zsb3dDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC1lcnJvcnMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBIb29rLFxuICBIb29rT3B0aW9ucyxcbiAgUmVxdWVzdFdpdGhSZXNwb25zZSxcbiAgV2ViaG9vayxcbiAgV2ViaG9va09wdGlvbnMsXG59IGZyb20gJy4uL2NyZWF0ZS1ob29rLmpzJztcbmltcG9ydCB7IFdPUktGTE9XX0NSRUFURV9IT09LIH0gZnJvbSAnLi4vc3ltYm9scy5qcyc7XG5pbXBvcnQgeyBnZXRXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSAnLi9nZXQtd29ya2Zsb3ctbWV0YWRhdGEuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG9vazxUID0gYW55PihvcHRpb25zPzogSG9va09wdGlvbnMpOiBIb29rPFQ+IHtcbiAgLy8gSW5zaWRlIHRoZSB3b3JrZmxvdyBWTSwgdGhlIGhvb2sgZnVuY3Rpb24gaXMgc3RvcmVkIGluIHRoZSBnbG9iYWxUaGlzIG9iamVjdCBiZWhpbmQgYSBzeW1ib2xcbiAgY29uc3QgY3JlYXRlSG9va0ZuID0gKGdsb2JhbFRoaXMgYXMgYW55KVtcbiAgICBXT1JLRkxPV19DUkVBVEVfSE9PS1xuICBdIGFzIHR5cGVvZiBjcmVhdGVIb29rPFQ+O1xuICBpZiAoIWNyZWF0ZUhvb2tGbikge1xuICAgIHRocm93Tm90SW5Xb3JrZmxvd0NvbnRleHQoXG4gICAgICAnY3JlYXRlSG9vaygpJyxcbiAgICAgICdodHRwczovL3dvcmtmbG93LXNkay5kZXYvZG9jcy9hcGktcmVmZXJlbmNlL3dvcmtmbG93L2NyZWF0ZS1ob29rJyxcbiAgICAgIGNyZWF0ZUhvb2tcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVIb29rRm4ob3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJob29rKFxuICBvcHRpb25zOiBXZWJob29rT3B0aW9ucyAmIHsgcmVzcG9uZFdpdGg6ICdtYW51YWwnIH1cbik6IFdlYmhvb2s8UmVxdWVzdFdpdGhSZXNwb25zZT47XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2ViaG9vayhvcHRpb25zPzogV2ViaG9va09wdGlvbnMpOiBXZWJob29rPFJlcXVlc3Q+O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYmhvb2soXG4gIG9wdGlvbnM/OiBXZWJob29rT3B0aW9uc1xuKTogV2ViaG9vazxSZXF1ZXN0PiB8IFdlYmhvb2s8UmVxdWVzdFdpdGhSZXNwb25zZT4ge1xuICBjb25zdCB7IHJlc3BvbmRXaXRoLCB0b2tlbiwgLi4ucmVzdCB9ID0gKG9wdGlvbnMgPz8ge30pIGFzIFdlYmhvb2tPcHRpb25zICYge1xuICAgIHRva2VuPzogc3RyaW5nO1xuICB9O1xuXG4gIGlmICh0b2tlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ2BjcmVhdGVXZWJob29rKClgIGRvZXMgbm90IGFjY2VwdCBhIGB0b2tlbmAgb3B0aW9uLiBXZWJob29rIHRva2VucyBhcmUgYWx3YXlzIHJhbmRvbWx5IGdlbmVyYXRlZC4gVXNlIGBjcmVhdGVIb29rKClgIHdpdGggYHJlc3VtZUhvb2soKWAgZm9yIGRldGVybWluaXN0aWMgdG9rZW4gcGF0dGVybnMuJ1xuICAgICk7XG4gIH1cblxuICBsZXQgbWV0YWRhdGE6IFBpY2s8V2ViaG9va09wdGlvbnMsICdyZXNwb25kV2l0aCc+IHwgdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHJlc3BvbmRXaXRoICE9PSAndW5kZWZpbmVkJykge1xuICAgIG1ldGFkYXRhID0geyByZXNwb25kV2l0aCB9O1xuICB9XG5cbiAgY29uc3QgaG9vayA9IGNyZWF0ZUhvb2soeyAuLi5yZXN0LCBtZXRhZGF0YSwgaXNXZWJob29rOiB0cnVlIH0pIGFzXG4gICAgfCBXZWJob29rPFJlcXVlc3Q+XG4gICAgfCBXZWJob29rPFJlcXVlc3RXaXRoUmVzcG9uc2U+O1xuXG4gIGNvbnN0IHsgdXJsIH0gPSBnZXRXb3JrZmxvd01ldGFkYXRhKCk7XG4gIGhvb2sudXJsID0gYCR7dXJsfS8ud2VsbC1rbm93bi93b3JrZmxvdy92MS93ZWJob29rLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGhvb2sudG9rZW4pfWA7XG5cbiAgcmV0dXJuIGhvb2s7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBIb29rIGFzIEhvb2tFbnRpdHkgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgdGhyb3dVbmF2YWlsYWJsZUluV29ya2Zsb3dDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC1lcnJvcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBIb29rLCBIb29rT3B0aW9ucyB9IGZyb20gJy4uL2NyZWF0ZS1ob29rLmpzJztcbmltcG9ydCB7IGNyZWF0ZUhvb2sgfSBmcm9tICcuL2NyZWF0ZS1ob29rLmpzJztcblxuLyoqXG4gKiBOT1RFOiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZGVmaW5lSG9vaygpYCB0aGF0IGlzIHVzZWQgaW4gd29ya2Zsb3cgY29udGV4dHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVIb29rPFRJbnB1dCwgVE91dHB1dCA9IFRJbnB1dD4oKSB7XG4gIGZ1bmN0aW9uIHJlc3VtZShcbiAgICBfdG9rZW46IHN0cmluZyxcbiAgICBfcGF5bG9hZDogVElucHV0XG4gICk6IFByb21pc2U8SG9va0VudGl0eSB8IG51bGw+IHtcbiAgICAvLyBSZWZlcmVuY2VkIGJ5IG5hbWUgKG5vdCBgdGhpcy5yZXN1bWVgKSBzbyB0aGUgc3RhY2sgc3RyaXAgd29ya3MgZXZlblxuICAgIC8vIGlmIHRoZSBjYWxsZXIgZGVzdHJ1Y3R1cmVkIHRoZSBob29rLlxuICAgIHRocm93VW5hdmFpbGFibGVJbldvcmtmbG93Q29udGV4dChcbiAgICAgICdkZWZpbmVIb29rKCkucmVzdW1lKCknLFxuICAgICAgJ2h0dHBzOi8vd29ya2Zsb3ctc2RrLmRldi9kb2NzL2FwaS1yZWZlcmVuY2Uvd29ya2Zsb3ctYXBpL3Jlc3VtZS1ob29rJyxcbiAgICAgIHJlc3VtZVxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNyZWF0ZShvcHRpb25zPzogSG9va09wdGlvbnMpOiBIb29rPFRPdXRwdXQ+IHtcbiAgICAgIHJldHVybiBjcmVhdGVIb29rPFRPdXRwdXQ+KG9wdGlvbnMpO1xuICAgIH0sXG4gICAgcmVzdW1lLFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgV29ya2Zsb3dXcml0YWJsZVN0cmVhbU9wdGlvbnMgfSBmcm9tICcuLi9zdGVwL3dyaXRhYmxlLXN0cmVhbS5qcyc7XG5pbXBvcnQgeyBTVFJFQU1fTkFNRV9TWU1CT0wsIFdPUktGTE9XX0dFVF9TVFJFQU1fSUQgfSBmcm9tICcuLi9zeW1ib2xzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdyaXRhYmxlPFcgPSBhbnk+KFxuICBvcHRpb25zOiBXb3JrZmxvd1dyaXRhYmxlU3RyZWFtT3B0aW9ucyA9IHt9XG4pOiBXcml0YWJsZVN0cmVhbTxXPiB7XG4gIGNvbnN0IHsgbmFtZXNwYWNlIH0gPSBvcHRpb25zO1xuICBjb25zdCBuYW1lID0gKGdsb2JhbFRoaXMgYXMgYW55KVtXT1JLRkxPV19HRVRfU1RSRUFNX0lEXShuYW1lc3BhY2UpO1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShnbG9iYWxUaGlzLldyaXRhYmxlU3RyZWFtLnByb3RvdHlwZSwge1xuICAgIFtTVFJFQU1fTkFNRV9TWU1CT0xdOiB7XG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICB9LFxuICB9KTtcbn1cbiIsICJpbXBvcnQgeyBkZWZpbmVIb29rLCBnZXRXcml0YWJsZSB9IGZyb20gJ0B3b3JrZmxvdy9jb3JlJztcbmltcG9ydCAqIGFzIHogZnJvbSAnem9kJztcbi8qKl9faW50ZXJuYWxfd29ya2Zsb3dze1wid29ya2Zsb3dzXCI6e1wid29ya2Zsb3dzL2hvb2tzLnRzXCI6e1wiY29sbGVjdFdpdGhIb29rXCI6e1wid29ya2Zsb3dJZFwiOlwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL2hvb2tzLy9jb2xsZWN0V2l0aEhvb2tcIn19fSxcInN0ZXBzXCI6e1wid29ya2Zsb3dzL2hvb2tzLnRzXCI6e1wid3JpdGVFdmVudFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi93b3JrZmxvd3MvaG9va3MvL3dyaXRlRXZlbnRcIn19fX0qLztcbmV4cG9ydCBjb25zdCBIb29rID0gZGVmaW5lSG9vayh7XG4gICAgc2NoZW1hOiB6Lm9iamVjdCh7XG4gICAgICAgIGRhdGE6IHouc3RyaW5nKCksXG4gICAgICAgIGRvbmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gICAgICAgIG1ldGFkYXRhOiB6LnVua25vd24oKVxuICAgIH0pXG59KTtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb2xsZWN0V2l0aEhvb2sodG9rZW4sIGN1c3RvbURhdGEpIHtcbiAgICBjb25zdCBob29rID0gSG9vay5jcmVhdGUoe1xuICAgICAgICB0b2tlbixcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIGN1c3RvbURhdGFcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbGxlY3RlZCA9IFtdO1xuICAgIGNvbnN0IHdmID0gZ2V0V3JpdGFibGUoKTtcbiAgICBhd2FpdCB3cml0ZUV2ZW50KHdmLCAnaG9va0NyZWF0ZWQnKTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIGhvb2spe1xuICAgICAgICBhd2FpdCB3cml0ZUV2ZW50KHdmLCAnaG9va1Jlc3VtZWQnLCBldmVudCk7XG4gICAgICAgIGNvbGxlY3RlZC5wdXNoKGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50LmRvbmUpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBjb2xsZWN0ZWRcbiAgICB9O1xufVxuY29sbGVjdFdpdGhIb29rLndvcmtmbG93SWQgPSBcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9ob29rcy8vY29sbGVjdFdpdGhIb29rXCI7XG5nbG9iYWxUaGlzLl9fcHJpdmF0ZV93b3JrZmxvd3Muc2V0KFwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL2hvb2tzLy9jb2xsZWN0V2l0aEhvb2tcIiwgY29sbGVjdFdpdGhIb29rKTtcbnZhciB3cml0ZUV2ZW50ID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi93b3JrZmxvd3MvaG9va3MvL3dyaXRlRXZlbnRcIik7XG4iLCAiLyoqXG4gKiBUaGlzIGlzIHRoZSBcInN0YW5kYXJkIGxpYnJhcnlcIiBvZiBzdGVwcyB0aGF0IHdlIG1ha2UgYXZhaWxhYmxlIHRvIGFsbCB3b3JrZmxvdyB1c2Vycy5cbiAqIFRoZSBjYW4gYmUgaW1wb3J0ZWQgbGlrZSBzbzogYGltcG9ydCB7IGZldGNoIH0gZnJvbSAnd29ya2Zsb3cnYC4gYW5kIHVzZWQgaW4gd29ya2Zsb3cuXG4gKiBUaGUgbmVlZCB0byBiZSBleHBvcnRlZCBkaXJlY3RseSBpbiB0aGlzIHBhY2thZ2UgYW5kIGNhbm5vdCBsaXZlIGluIGBjb3JlYCB0byBwcmV2ZW50XG4gKiBjaXJjdWxhciBkZXBlbmRlbmNpZXMgcG9zdC1jb21waWxhdGlvbi5cbiAqL1xuXG4vKipcbiAqIEEgaG9pc3RlZCBgZmV0Y2goKWAgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBhcyBhIFwic3RlcFwiIGZ1bmN0aW9uLFxuICogZm9yIHVzZSB3aXRoaW4gd29ya2Zsb3cgZnVuY3Rpb25zLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2goLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgZ2xvYmFsVGhpcy5mZXRjaD4pIHtcbiAgJ3VzZSBzdGVwJztcbiAgcmV0dXJuIGdsb2JhbFRoaXMuZmV0Y2goLi4uYXJncyk7XG59XG4iLCAiaW1wb3J0IHsgc2xlZXAsIGdldFdyaXRhYmxlIH0gZnJvbSAnd29ya2Zsb3cnO1xuaW1wb3J0IHsgZGVmaW5lSG9vayB9IGZyb20gJ3dvcmtmbG93Jztcbi8qKl9faW50ZXJuYWxfd29ya2Zsb3dze1wid29ya2Zsb3dzXCI6e1wid29ya2Zsb3dzL2lubGluZS1leGVjdXRpb24udHNcIjp7XCJob29rV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi93b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi8vaG9va1dvcmtmbG93XCJ9LFwicGFyYWxsZWxTdGVwc1dvcmtmbG93XCI6e1wid29ya2Zsb3dJZFwiOlwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL2lubGluZS1leGVjdXRpb24vL3BhcmFsbGVsU3RlcHNXb3JrZmxvd1wifSxcInNlcXVlbnRpYWxTdGVwc1dpdGhTdHJlYW1Xb3JrZmxvd1wiOntcIndvcmtmbG93SWRcIjpcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLy9zZXF1ZW50aWFsU3RlcHNXaXRoU3RyZWFtV29ya2Zsb3dcIn0sXCJzZXF1ZW50aWFsU3RlcHNXb3JrZmxvd1wiOntcIndvcmtmbG93SWRcIjpcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLy9zZXF1ZW50aWFsU3RlcHNXb3JrZmxvd1wifSxcInNsZWVwV29ya2Zsb3dcIjp7XCJ3b3JrZmxvd0lkXCI6XCJ3b3JrZmxvdy8vLi93b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi8vc2xlZXBXb3JrZmxvd1wifSxcInRocmVlQmF0Y2hlc09mRml2ZVdvcmtmbG93XCI6e1wid29ya2Zsb3dJZFwiOlwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL2lubGluZS1leGVjdXRpb24vL3RocmVlQmF0Y2hlc09mRml2ZVdvcmtmbG93XCJ9fX0sXCJzdGVwc1wiOntcIndvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLnRzXCI6e1wiYWRkXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLy9hZGRcIn0sXCJjbG9zZU91dHB1dFN0cmVhbVwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi93b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi8vY2xvc2VPdXRwdXRTdHJlYW1cIn0sXCJ3cml0ZVRvU3RyZWFtXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLy93cml0ZVRvU3RyZWFtXCJ9fX19Ki87XG4vLyAtLS0gU2ltcGxlIHN0ZXAgLS0tXG52YXIgYWRkID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi93b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi8vYWRkXCIpO1xuLy8gLS0tIFN0cmVhbSBzdGVwIC0tLVxudmFyIHdyaXRlVG9TdHJlYW0gPSBnbG9iYWxUaGlzW1N5bWJvbC5mb3IoXCJXT1JLRkxPV19VU0VfU1RFUFwiKV0oXCJzdGVwLy8uL3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLy93cml0ZVRvU3RyZWFtXCIpO1xudmFyIGNsb3NlT3V0cHV0U3RyZWFtID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi93b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi8vY2xvc2VPdXRwdXRTdHJlYW1cIik7XG4vLyAtLS0gV29ya2Zsb3dzIC0tLVxuLyoqXG4gKiAzIHNlcXVlbnRpYWwgYWRkIHN0ZXBzLiBObyBzdHJlYW1zLCBubyBob29rcywgbm8gc2xlZXBzLlxuICogRXhwZWN0ZWQ6IDEgZmxvdyBpbnZvY2F0aW9uIChhbGwgc3RlcHMgaW5saW5lKS5cbiAqLyBleHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VxdWVudGlhbFN0ZXBzV29ya2Zsb3coaW5wdXQpIHtcbiAgICBjb25zdCBhID0gYXdhaXQgYWRkKGlucHV0LCAyKTtcbiAgICBjb25zdCBiID0gYXdhaXQgYWRkKGEsIDMpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBhZGQoYiwgNSk7XG4gICAgcmV0dXJuIGM7XG59XG5zZXF1ZW50aWFsU3RlcHNXb3JrZmxvdy53b3JrZmxvd0lkID0gXCJ3b3JrZmxvdy8vLi93b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi8vc2VxdWVudGlhbFN0ZXBzV29ya2Zsb3dcIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi93b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi8vc2VxdWVudGlhbFN0ZXBzV29ya2Zsb3dcIiwgc2VxdWVudGlhbFN0ZXBzV29ya2Zsb3cpO1xuLyoqXG4gKiAyIHNlcXVlbnRpYWwgc3RlcHMgdGhhdCB3cml0ZSB0byBhIHN0cmVhbSwgdGhlbiBjbG9zZSBpdC5cbiAqIEV4cGVjdGVkOiAxIGZsb3cgaW52b2NhdGlvbiAob3BzIHNldHRsZSB2aWEgc3luY2hyb25vdXMgZmx1c2gpLlxuICovIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXF1ZW50aWFsU3RlcHNXaXRoU3RyZWFtV29ya2Zsb3coKSB7XG4gICAgY29uc3Qgd3JpdGFibGUgPSBnZXRXcml0YWJsZSgpO1xuICAgIGNvbnN0IGEgPSBhd2FpdCB3cml0ZVRvU3RyZWFtKHdyaXRhYmxlLCAnaGVsbG8nKTtcbiAgICBjb25zdCBiID0gYXdhaXQgd3JpdGVUb1N0cmVhbSh3cml0YWJsZSwgJyB3b3JsZCcpO1xuICAgIGF3YWl0IGNsb3NlT3V0cHV0U3RyZWFtKHdyaXRhYmxlKTtcbiAgICByZXR1cm4gYSArIGI7XG59XG5zZXF1ZW50aWFsU3RlcHNXaXRoU3RyZWFtV29ya2Zsb3cud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL2lubGluZS1leGVjdXRpb24vL3NlcXVlbnRpYWxTdGVwc1dpdGhTdHJlYW1Xb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLy9zZXF1ZW50aWFsU3RlcHNXaXRoU3RyZWFtV29ya2Zsb3dcIiwgc2VxdWVudGlhbFN0ZXBzV2l0aFN0cmVhbVdvcmtmbG93KTtcbi8qKlxuICogQSBzaW5nbGUgc2xlZXAoMXMpIGZvbGxvd2VkIGJ5IGEgc3RlcC5cbiAqIEV4cGVjdGVkOiAyIGZsb3cgaW52b2NhdGlvbnMgKDEgdG8gY3JlYXRlIHRoZSB3YWl0LCAxIGFmdGVyIGl0IHJlc3VtZXMpLlxuICovIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcFdvcmtmbG93KCkge1xuICAgIGF3YWl0IHNsZWVwKCcxcycpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFkZCgxLCAyKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuc2xlZXBXb3JrZmxvdy53b3JrZmxvd0lkID0gXCJ3b3JrZmxvdy8vLi93b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi8vc2xlZXBXb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLy9zbGVlcFdvcmtmbG93XCIsIHNsZWVwV29ya2Zsb3cpO1xuLyoqXG4gKiBQcm9taXNlLmFsbCB3aXRoIDIgYWRkIHN0ZXBzLlxuICogRXhwZWN0ZWQ6IDIgZmxvdyBpbnZvY2F0aW9ucyAoMSBpbmxpbmUgKyAxIGJhY2tncm91bmQgc3RlcCBjb250aW51YXRpb24pLlxuICovIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJhbGxlbFN0ZXBzV29ya2Zsb3coKSB7XG4gICAgY29uc3QgW2EsIGJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBhZGQoMTAsIDEpLFxuICAgICAgICBhZGQoMjAsIDIpXG4gICAgXSk7XG4gICAgcmV0dXJuIGEgKyBiO1xufVxucGFyYWxsZWxTdGVwc1dvcmtmbG93LndvcmtmbG93SWQgPSBcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLy9wYXJhbGxlbFN0ZXBzV29ya2Zsb3dcIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi93b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi8vcGFyYWxsZWxTdGVwc1dvcmtmbG93XCIsIHBhcmFsbGVsU3RlcHNXb3JrZmxvdyk7XG4vKipcbiAqIFRocmVlIHNlcXVlbnRpYWwgYmF0Y2hlcyBvZiBQcm9taXNlLmFsbCB3aXRoIDUgYWRkIHN0ZXBzIGVhY2ggKDE1IHRvdGFsKS5cbiAqIFVzZWQgdG8gc3R1ZHkgVjIgaGFuZGxlciBiZWhhdmlvciB1bmRlciBwYXJhbGxlbCtzZXF1ZW50aWFsIGxvYWQ6XG4gKiAgIC0gZXZlbnQgbG9hZCBmcmVxdWVuY3kgKGZ1bGwgdnMgaW5jcmVtZW50YWwpXG4gKiAgIC0gcmVkdW5kYW50IHN0ZXAgZXhlY3V0aW9ucyBmcm9tIGlubGluZStiYWNrZ3JvdW5kIHJhY2VzXG4gKiAgIC0gY29uY3VycmVudCBcImFsbCBzdGVwcyBkb25lXCIgcmVwbGF5IHJhY2VzXG4gKiAgIC0gdW5jb25zdW1lZC1ldmVudCBza2lwcyBmcm9tIG91dC1vZi1vcmRlciByZXBsYXkgdmlzaWJpbGl0eVxuICovIGV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aHJlZUJhdGNoZXNPZkZpdmVXb3JrZmxvdygpIHtcbiAgICBjb25zdCBiYXRjaDEgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGFkZCgxLCAxMCksXG4gICAgICAgIGFkZCgxLCAyMCksXG4gICAgICAgIGFkZCgxLCAzMCksXG4gICAgICAgIGFkZCgxLCA0MCksXG4gICAgICAgIGFkZCgxLCA1MClcbiAgICBdKTtcbiAgICBjb25zdCBiYXRjaDIgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGFkZCgyLCAxMCksXG4gICAgICAgIGFkZCgyLCAyMCksXG4gICAgICAgIGFkZCgyLCAzMCksXG4gICAgICAgIGFkZCgyLCA0MCksXG4gICAgICAgIGFkZCgyLCA1MClcbiAgICBdKTtcbiAgICBjb25zdCBiYXRjaDMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGFkZCgzLCAxMCksXG4gICAgICAgIGFkZCgzLCAyMCksXG4gICAgICAgIGFkZCgzLCAzMCksXG4gICAgICAgIGFkZCgzLCA0MCksXG4gICAgICAgIGFkZCgzLCA1MClcbiAgICBdKTtcbiAgICByZXR1cm4gW1xuICAgICAgICAuLi5iYXRjaDEsXG4gICAgICAgIC4uLmJhdGNoMixcbiAgICAgICAgLi4uYmF0Y2gzXG4gICAgXTtcbn1cbnRocmVlQmF0Y2hlc09mRml2ZVdvcmtmbG93LndvcmtmbG93SWQgPSBcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLy90aHJlZUJhdGNoZXNPZkZpdmVXb3JrZmxvd1wiO1xuZ2xvYmFsVGhpcy5fX3ByaXZhdGVfd29ya2Zsb3dzLnNldChcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLy90aHJlZUJhdGNoZXNPZkZpdmVXb3JrZmxvd1wiLCB0aHJlZUJhdGNoZXNPZkZpdmVXb3JrZmxvdyk7XG4vLyAtLS0gSG9vayAtLS1cbmV4cG9ydCBjb25zdCBUZXN0SG9vayA9IGRlZmluZUhvb2soe30pO1xuLyoqXG4gKiBDcmVhdGVzIGEgaG9vaywgd2FpdHMgZm9yIG9uZSByZXN1bWUsIHJldHVybnMgdGhlIHBheWxvYWQuXG4gKiBFeHBlY3RlZDogMiBmbG93IGludm9jYXRpb25zICgxIHRvIGNyZWF0ZSB0aGUgaG9vaywgMSBhZnRlciByZXN1bWUpLlxuICovIGV4cG9ydCBhc3luYyBmdW5jdGlvbiBob29rV29ya2Zsb3codG9rZW4pIHtcbiAgICBjb25zdCBob29rID0gVGVzdEhvb2suY3JlYXRlKHtcbiAgICAgICAgdG9rZW5cbiAgICB9KTtcbiAgICBjb25zdCBldmVudCA9IGF3YWl0IGhvb2submV4dCgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGV2ZW50LmRhdGFcbiAgICB9O1xufVxuaG9va1dvcmtmbG93LndvcmtmbG93SWQgPSBcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9pbmxpbmUtZXhlY3V0aW9uLy9ob29rV29ya2Zsb3dcIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi93b3JrZmxvd3MvaW5saW5lLWV4ZWN1dGlvbi8vaG9va1dvcmtmbG93XCIsIGhvb2tXb3JrZmxvdyk7XG4iLCAiLyoqX19pbnRlcm5hbF93b3JrZmxvd3N7XCJ3b3JrZmxvd3NcIjp7XCJ3b3JrZmxvd3Mvbm9vcC50c1wiOntcImJyb2tlbldmXCI6e1wid29ya2Zsb3dJZFwiOlwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL25vb3AvL2Jyb2tlbldmXCJ9fX0sXCJzdGVwc1wiOntcIndvcmtmbG93cy9ub29wLnRzXCI6e1wibm9vcFwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi93b3JrZmxvd3Mvbm9vcC8vbm9vcFwifX19fSovO1xuZXhwb3J0IHZhciBub29wID0gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKFwiV09SS0ZMT1dfVVNFX1NURVBcIildKFwic3RlcC8vLi93b3JrZmxvd3Mvbm9vcC8vbm9vcFwiKTtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBicm9rZW5XZigpIHtcbiAgICBjb25zdCBudW1iZXJzID0gW107XG4gICAge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgNTsgaSsrKXtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2gobm9vcChpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJ2F3YWl0IDUnKTtcbiAgICAgICAgbnVtYmVycy5wdXNoKC4uLmF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKSk7XG4gICAgfVxuICAgIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IDE1OyBpKyspe1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChub29wKDEwMCArIGkpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnYXdhaXQgMTUnKTtcbiAgICAgICAgbnVtYmVycy5wdXNoKC4uLmF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKSk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCdkb25lLicpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG51bWJlcnNcbiAgICB9O1xufVxuYnJva2VuV2Yud29ya2Zsb3dJZCA9IFwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL25vb3AvL2Jyb2tlbldmXCI7XG5nbG9iYWxUaGlzLl9fcHJpdmF0ZV93b3JrZmxvd3Muc2V0KFwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL25vb3AvL2Jyb2tlbldmXCIsIGJyb2tlbldmKTtcbiIsICIvKipfX2ludGVybmFsX3dvcmtmbG93c3tcIndvcmtmbG93c1wiOntcIndvcmtmbG93cy9udWxsLWJ5dGUudHNcIjp7XCJudWxsQnl0ZVdvcmtmbG93XCI6e1wid29ya2Zsb3dJZFwiOlwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL251bGwtYnl0ZS8vbnVsbEJ5dGVXb3JrZmxvd1wifX19LFwic3RlcHNcIjp7XCJ3b3JrZmxvd3MvbnVsbC1ieXRlLnRzXCI6e1wibnVsbEJ5dGVTdGVwXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3dvcmtmbG93cy9udWxsLWJ5dGUvL251bGxCeXRlU3RlcFwifX19fSovO1xudmFyIG51bGxCeXRlU3RlcCA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vd29ya2Zsb3dzL251bGwtYnl0ZS8vbnVsbEJ5dGVTdGVwXCIpO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG51bGxCeXRlV29ya2Zsb3coKSB7XG4gICAgY29uc3QgYSA9IGF3YWl0IG51bGxCeXRlU3RlcCgpO1xuICAgIHJldHVybiBhO1xufVxubnVsbEJ5dGVXb3JrZmxvdy53b3JrZmxvd0lkID0gXCJ3b3JrZmxvdy8vLi93b3JrZmxvd3MvbnVsbC1ieXRlLy9udWxsQnl0ZVdvcmtmbG93XCI7XG5nbG9iYWxUaGlzLl9fcHJpdmF0ZV93b3JrZmxvd3Muc2V0KFwid29ya2Zsb3cvLy4vd29ya2Zsb3dzL251bGwtYnl0ZS8vbnVsbEJ5dGVXb3JrZmxvd1wiLCBudWxsQnl0ZVdvcmtmbG93KTtcbiIsICJpbXBvcnQgeyBGYXRhbEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2NvcmUnO1xuLyoqX19pbnRlcm5hbF93b3JrZmxvd3N7XCJ3b3JrZmxvd3NcIjp7XCJ3b3JrZmxvd3MvcmV0cmlhYmxlLWFuZC1mYXRhbC50c1wiOntcInJldHJ5YWJsZUFuZEZhdGFsRXJyb3JXb3JrZmxvd1wiOntcIndvcmtmbG93SWRcIjpcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9yZXRyaWFibGUtYW5kLWZhdGFsLy9yZXRyeWFibGVBbmRGYXRhbEVycm9yV29ya2Zsb3dcIn19fSxcInN0ZXBzXCI6e1wid29ya2Zsb3dzL3JldHJpYWJsZS1hbmQtZmF0YWwudHNcIjp7XCJzdGVwVGhhdEZhaWxzXCI6e1wic3RlcElkXCI6XCJzdGVwLy8uL3dvcmtmbG93cy9yZXRyaWFibGUtYW5kLWZhdGFsLy9zdGVwVGhhdEZhaWxzXCJ9LFwic3RlcFRoYXRUaHJvd3NSZXRyeWFibGVFcnJvclwiOntcInN0ZXBJZFwiOlwic3RlcC8vLi93b3JrZmxvd3MvcmV0cmlhYmxlLWFuZC1mYXRhbC8vc3RlcFRoYXRUaHJvd3NSZXRyeWFibGVFcnJvclwifX19fSovO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5YWJsZUFuZEZhdGFsRXJyb3JXb3JrZmxvdygpIHtcbiAgICBjb25zdCByZXRyeWFibGVSZXN1bHQgPSBhd2FpdCBzdGVwVGhhdFRocm93c1JldHJ5YWJsZUVycm9yKCk7XG4gICAgbGV0IGdvdEZhdGFsRXJyb3IgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICBhd2FpdCBzdGVwVGhhdEZhaWxzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKEZhdGFsRXJyb3IuaXMoZXJyb3IpKSB7XG4gICAgICAgICAgICBnb3RGYXRhbEVycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICByZXRyeWFibGVSZXN1bHQsXG4gICAgICAgIGdvdEZhdGFsRXJyb3JcbiAgICB9O1xufVxucmV0cnlhYmxlQW5kRmF0YWxFcnJvcldvcmtmbG93LndvcmtmbG93SWQgPSBcIndvcmtmbG93Ly8uL3dvcmtmbG93cy9yZXRyaWFibGUtYW5kLWZhdGFsLy9yZXRyeWFibGVBbmRGYXRhbEVycm9yV29ya2Zsb3dcIjtcbmdsb2JhbFRoaXMuX19wcml2YXRlX3dvcmtmbG93cy5zZXQoXCJ3b3JrZmxvdy8vLi93b3JrZmxvd3MvcmV0cmlhYmxlLWFuZC1mYXRhbC8vcmV0cnlhYmxlQW5kRmF0YWxFcnJvcldvcmtmbG93XCIsIHJldHJ5YWJsZUFuZEZhdGFsRXJyb3JXb3JrZmxvdyk7XG52YXIgc3RlcFRoYXRUaHJvd3NSZXRyeWFibGVFcnJvciA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vd29ya2Zsb3dzL3JldHJpYWJsZS1hbmQtZmF0YWwvL3N0ZXBUaGF0VGhyb3dzUmV0cnlhYmxlRXJyb3JcIik7XG52YXIgc3RlcFRoYXRGYWlscyA9IGdsb2JhbFRoaXNbU3ltYm9sLmZvcihcIldPUktGTE9XX1VTRV9TVEVQXCIpXShcInN0ZXAvLy4vd29ya2Zsb3dzL3JldHJpYWJsZS1hbmQtZmF0YWwvL3N0ZXBUaGF0RmFpbHNcIik7XG4iLCAiLyoqXG4gKiBTeW1ib2wgdXNlZCB0byBkZWZpbmUgY3VzdG9tIHNlcmlhbGl6YXRpb24gZm9yIHVzZXItZGVmaW5lZCBjbGFzcyBpbnN0YW5jZXMuXG4gKiBUaGUgc3RhdGljIG1ldGhvZCBzaG91bGQgYWNjZXB0IGFuIGluc3RhbmNlIGFuZCByZXR1cm4gc2VyaWFsaXphYmxlIGRhdGEuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBXT1JLRkxPV19TRVJJQUxJWkUsIFdPUktGTE9XX0RFU0VSSUFMSVpFIH0gZnJvbSAnQHdvcmtmbG93L3NlcmRlJztcbiAqXG4gKiBjbGFzcyBNeUNsYXNzIHtcbiAqICAgY29uc3RydWN0b3IocHVibGljIHZhbHVlOiBzdHJpbmcpIHt9XG4gKlxuICogICBzdGF0aWMgW1dPUktGTE9XX1NFUklBTElaRV0oaW5zdGFuY2U6IE15Q2xhc3MpIHtcbiAqICAgICByZXR1cm4geyB2YWx1ZTogaW5zdGFuY2UudmFsdWUgfTtcbiAqICAgfVxuICpcbiAqICAgc3RhdGljIFtXT1JLRkxPV19ERVNFUklBTElaRV0oZGF0YTogeyB2YWx1ZTogc3RyaW5nIH0pIHtcbiAqICAgICByZXR1cm4gbmV3IE15Q2xhc3MoZGF0YS52YWx1ZSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgV09SS0ZMT1dfU0VSSUFMSVpFID0gU3ltYm9sLmZvcignd29ya2Zsb3ctc2VyaWFsaXplJyk7XG5cbi8qKlxuICogU3ltYm9sIHVzZWQgdG8gZGVmaW5lIGN1c3RvbSBkZXNlcmlhbGl6YXRpb24gZm9yIHVzZXItZGVmaW5lZCBjbGFzcyBpbnN0YW5jZXMuXG4gKiBUaGUgc3RhdGljIG1ldGhvZCBzaG91bGQgYWNjZXB0IHNlcmlhbGl6ZWQgZGF0YSBhbmQgcmV0dXJuIGEgY2xhc3MgaW5zdGFuY2UuXG4gKlxuICogQHNlZSBXT1JLRkxPV19TRVJJQUxJWkUgZm9yIHVzYWdlIGV4YW1wbGVcbiAqL1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX0RFU0VSSUFMSVpFID0gU3ltYm9sLmZvcignd29ya2Zsb3ctZGVzZXJpYWxpemUnKTtcbiIsICJpbXBvcnQge1xuICBXb3JrZmxvd1J1bkNhbmNlbGxlZEVycm9yLFxuICBXb3JrZmxvd1J1bkZhaWxlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdENvbXBsZXRlZEVycm9yLFxuICBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IsXG59IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUsIFdPUktGTE9XX1NFUklBTElaRSB9IGZyb20gJ0B3b3JrZmxvdy9zZXJkZSc7XG5pbXBvcnQge1xuICBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgdHlwZSBXb3JrZmxvd1J1blN0YXR1cyxcbiAgdHlwZSBXb3JsZCxcbn0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcbmltcG9ydCB7IHR5cGUgQ3J5cHRvS2V5LCBpbXBvcnRLZXkgfSBmcm9tICcuLi9lbmNyeXB0aW9uLmpzJztcbmltcG9ydCB7XG4gIGdldEV4dGVybmFsUmV2aXZlcnMsXG4gIGh5ZHJhdGVSdW5FcnJvcixcbiAgaHlkcmF0ZVdvcmtmbG93UmV0dXJuVmFsdWUsXG59IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuaW1wb3J0IHsgZ2V0V29ya2Zsb3dSdW5TdHJlYW1JZCB9IGZyb20gJy4uL3V0aWwuanMnO1xuaW1wb3J0IHtcbiAgdHlwZSBTdG9wU2xlZXBPcHRpb25zLFxuICB0eXBlIFN0b3BTbGVlcFJlc3VsdCxcbiAgd2FrZVVwUnVuLFxufSBmcm9tICcuL3J1bnMuanMnO1xuaW1wb3J0IHsgZ2V0V29ybGRMYXp5IH0gZnJvbSAnLi9nZXQtd29ybGQtbGF6eS5qcyc7XG5cbi8qKlxuICogQSBgUmVhZGFibGVTdHJlYW1gIGV4dGVuZGVkIHdpdGggd29ya2Zsb3ctc3BlY2lmaWMgaGVscGVycy5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya2Zsb3dSZWFkYWJsZVN0cmVhbTxSID0gYW55PiA9IFJlYWRhYmxlU3RyZWFtPFI+ICYge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFpbCBpbmRleCAoaW5kZXggb2YgdGhlIGxhc3Qga25vd24gY2h1bmssIDAtYmFzZWQpIG9mIHRoZVxuICAgKiB1bmRlcmx5aW5nIHdvcmtmbG93IHN0cmVhbS4gVXNlZnVsIGZvciByZXNvbHZpbmcgYSBuZWdhdGl2ZSBgc3RhcnRJbmRleGBcbiAgICogaW50byBhbiBhYnNvbHV0ZSBwb3NpdGlvbiDigJQgZm9yIGV4YW1wbGUsIHdoZW4gYnVpbGRpbmcgcmVjb25uZWN0aW9uXG4gICAqIGVuZHBvaW50cyB0aGF0IG5lZWQgdG8gaW5mb3JtIHRoZSBjbGllbnQgd2hlcmUgdGhlIHN0cmVhbSBzdGFydHMuXG4gICAqXG4gICAqIFJldHVybnMgYC0xYCB3aGVuIG5vIGNodW5rcyBoYXZlIGJlZW4gd3JpdHRlbiB5ZXQuXG4gICAqL1xuICBnZXRUYWlsSW5kZXgoKTogUHJvbWlzZTxudW1iZXI+O1xufTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIHdvcmtmbG93J3MgcmVhZGFibGUgc3RyZWFtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93UmVhZGFibGVTdHJlYW1PcHRpb25zIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIG5hbWVzcGFjZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG11bHRpcGxlIHN0cmVhbXMgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSBzYW1lIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBudW1iZXIgb2YgdGhlIHN0YXJ0aW5nIGNodW5rIHRvIGJlZ2luIHJlYWRpbmcgdGhlIHN0cmVhbSBmcm9tLlxuICAgKiBOZWdhdGl2ZSB2YWx1ZXMgc3RhcnQgZnJvbSB0aGUgZW5kIChlLmcuIC0zIHJlYWRzIHRoZSBsYXN0IDMgY2h1bmtzKS5cbiAgICovXG4gIHN0YXJ0SW5kZXg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBBbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGV4ZWN1dGlvblxuICAgKiBlbnZpcm9ubWVudCBpcyBwYXVzZWQgLyB0ZXJtaW5hdGVkXG4gICAqIChpLmUuIHVzaW5nIFtgd2FpdFVudGlsKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRXh0ZW5kYWJsZUV2ZW50L3dhaXRVbnRpbCkgb3Igc2ltaWxhcikuXG4gICAqL1xuICBvcHM/OiBQcm9taXNlPGFueT5bXTtcbiAgLyoqXG4gICAqIFRoZSBnbG9iYWwgb2JqZWN0IHRvIHVzZSBmb3IgaHlkcmF0aW5nIHR5cGVzIGZyb20gdGhlIGdsb2JhbCBzY29wZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8ge0BsaW5rIFtgZ2xvYmFsVGhpc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL2dsb2JhbFRoaXMpfS5cbiAgICovXG4gIGdsb2JhbD86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGNsYXNzIGZvciBhIHdvcmtmbG93IHJ1bi5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bjxUUmVzdWx0PiB7XG4gIHN0YXRpYyBbV09SS0ZMT1dfU0VSSUFMSVpFXShpbnN0YW5jZTogUnVuPHVua25vd24+KSB7XG4gICAgcmV0dXJuIHsgcnVuSWQ6IGluc3RhbmNlLnJ1bklkLCByZXNpbGllbnRTdGFydDogaW5zdGFuY2UuI3Jlc2lsaWVudFN0YXJ0IH07XG4gIH1cblxuICBzdGF0aWMgW1dPUktGTE9XX0RFU0VSSUFMSVpFXShkYXRhOiB7XG4gICAgcnVuSWQ6IHN0cmluZztcbiAgICByZXNpbGllbnRTdGFydD86IGJvb2xlYW47XG4gIH0pIHtcbiAgICByZXR1cm4gbmV3IFJ1bihkYXRhLnJ1bklkLCB7IHJlc2lsaWVudFN0YXJ0OiBkYXRhLnJlc2lsaWVudFN0YXJ0IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKi9cbiAgcnVuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmxkIG9iamVjdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjd29ybGRQcm9taXNlOiBQcm9taXNlPFdvcmxkPiB8IHVuZGVmaW5lZDtcbiAgZ2V0ICNsYXp5V29ybGRQcm9taXNlKCkge1xuICAgIGlmICghdGhpcy4jd29ybGRQcm9taXNlKSB0aGlzLiN3b3JsZFByb21pc2UgPSBnZXRXb3JsZExhenkoKTtcbiAgICByZXR1cm4gdGhpcy4jd29ybGRQcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhY2hlZCBlbmNyeXB0aW9uIGtleSByZXNvbHV0aW9uLiBSZXNvbHZlZCBvbmNlIG9uIGZpcnN0IHVzZSBhbmRcbiAgICogcmV1c2VkIGZvciByZXR1cm5WYWx1ZSwgZ2V0UmVhZGFibGUoKSwgZXRjLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gICNlbmNyeXB0aW9uS2V5UHJvbWlzZTogUHJvbWlzZTxDcnlwdG9LZXkgfCB1bmRlZmluZWQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgcnVuX2NyZWF0ZWQgZmFpbGVkIGFuZCB0aGUgcnVuIG1heSBub3QgZXhpc3QgeWV0ICh0aGVcbiAgICogcmVzaWxpZW50IHN0YXJ0IHBhdGggd2lsbCBjcmVhdGUgaXQgdmlhIHJ1bl9zdGFydGVkKS4gcG9sbFJldHVyblZhbHVlXG4gICAqIHJldHJpZXMgb24gV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIG9ubHkgd2hlbiB0aGlzIGZsYWcgaXMgc2V0IHNvXG4gICAqIHRoYXQgbm9ybWFsIHJ1bnMgZmFpbCBmYXN0IG9uIDQwNC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICAjcmVzaWxpZW50U3RhcnQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihydW5JZDogc3RyaW5nLCBvcHRzPzogeyByZXNpbGllbnRTdGFydD86IGJvb2xlYW4gfSkge1xuICAgIHRoaXMucnVuSWQgPSBydW5JZDtcbiAgICB0aGlzLiNyZXNpbGllbnRTdGFydCA9IG9wdHM/LnJlc2lsaWVudFN0YXJ0ID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuZCBjYWNoZXMgdGhlIGVuY3J5cHRpb24ga2V5IGZvciB0aGlzIHJ1bi5cbiAgICogVGhlIGtleSBpcyB0aGUgc2FtZSBmb3IgdGhlIGxpZmV0aW1lIG9mIGEgcnVuLCBzbyBpdCBvbmx5IG5lZWRzXG4gICAqIHRvIGJlIHJlc29sdmVkIG9uY2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgI2dldEVuY3J5cHRpb25LZXkoKTogUHJvbWlzZTxDcnlwdG9LZXkgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuI2VuY3J5cHRpb25LZXlQcm9taXNlKSB7XG4gICAgICB0aGlzLiNlbmNyeXB0aW9uS2V5UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdvcmxkID0gYXdhaXQgdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCk7XG4gICAgICAgIGNvbnN0IHJhd0tleSA9IGF3YWl0IHdvcmxkLmdldEVuY3J5cHRpb25LZXlGb3JSdW4/LihydW4pO1xuICAgICAgICByZXR1cm4gcmF3S2V5ID8gYXdhaXQgaW1wb3J0S2V5KHJhd0tleSkgOiB1bmRlZmluZWQ7XG4gICAgICB9KSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy4jZW5jcnlwdGlvbktleVByb21pc2U7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJydXB0cyBwZW5kaW5nIGBzbGVlcCgpYCBjYWxscywgcmVzdW1pbmcgdGhlIHdvcmtmbG93IGVhcmx5LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHNldHRpbmdzIHRvIHRhcmdldCBzcGVjaWZpYyBzbGVlcCBjYWxscyBieSBjb3JyZWxhdGlvbiBJRC5cbiAgICogICBJZiBub3QgcHJvdmlkZWQsIGFsbCBwZW5kaW5nIHNsZWVwIGNhbGxzIHdpbGwgYmUgaW50ZXJydXB0ZWQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFN0b3BTbGVlcFJlc3VsdH0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG51bWJlciBvZiBzbGVlcCBjYWxscyB0aGF0IHdlcmUgaW50ZXJydXB0ZWQuXG4gICAqL1xuICBhc3luYyB3YWtlVXAob3B0aW9ucz86IFN0b3BTbGVlcE9wdGlvbnMpOiBQcm9taXNlPFN0b3BTbGVlcFJlc3VsdD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHdha2VVcFJ1bihhd2FpdCB0aGlzLiNsYXp5V29ybGRQcm9taXNlLCB0aGlzLnJ1bklkLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBhc3luYyBjYW5jZWwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHRoaXMuI2xhenlXb3JsZFByb21pc2U7XG4gICAgYXdhaXQgd29ybGQuZXZlbnRzLmNyZWF0ZSh0aGlzLnJ1bklkLCB7XG4gICAgICBldmVudFR5cGU6ICdydW5fY2FuY2VsbGVkJyxcbiAgICAgIHNwZWNWZXJzaW9uOiBTUEVDX1ZFUlNJT05fQ1VSUkVOVCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB3b3JrZmxvdyBydW4gZXhpc3RzLlxuICAgKi9cbiAgZ2V0IGV4aXN0cygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVuc1xuICAgICAgICAuZ2V0KHRoaXMucnVuSWQsIHsgcmVzb2x2ZURhdGE6ICdub25lJyB9KVxuICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKFdvcmtmbG93UnVuTm90Rm91bmRFcnJvci5pcyhlcnJvcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIG9mIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBnZXQgc3RhdHVzKCk6IFByb21pc2U8V29ya2Zsb3dSdW5TdGF0dXM+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkudGhlbigocnVuKSA9PiBydW4uc3RhdHVzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgd29ya2Zsb3cgcnVuLlxuICAgKiBQb2xscyB0aGUgd29ya2Zsb3cgcmV0dXJuIHZhbHVlIHVudGlsIGl0IGlzIGNvbXBsZXRlZC5cbiAgICovXG4gIGdldCByZXR1cm5WYWx1ZSgpOiBQcm9taXNlPFRSZXN1bHQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNwb2xsUmV0dXJuVmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgd29ya2Zsb3cuXG4gICAqL1xuICBnZXQgd29ya2Zsb3dOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgJ3VzZSBzdGVwJztcbiAgICByZXR1cm4gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZS50aGVuKCh3b3JsZCkgPT5cbiAgICAgIHdvcmxkLnJ1bnMuZ2V0KHRoaXMucnVuSWQpLnRoZW4oKHJ1bikgPT4gcnVuLndvcmtmbG93TmFtZSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgd29ya2Zsb3cgcnVuIHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgZ2V0IGNyZWF0ZWRBdCgpOiBQcm9taXNlPERhdGU+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkudGhlbigocnVuKSA9PiBydW4uY3JlYXRlZEF0KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSB3b3JrZmxvdyBydW4gc3RhcnRlZCBleGVjdXRpb24uXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSB3b3JrZmxvdyBoYXMgbm90IHN0YXJ0ZWQgeWV0LlxuICAgKi9cbiAgZ2V0IHN0YXJ0ZWRBdCgpOiBQcm9taXNlPERhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICAndXNlIHN0ZXAnO1xuICAgIHJldHVybiB0aGlzLiNsYXp5V29ybGRQcm9taXNlLnRoZW4oKHdvcmxkKSA9PlxuICAgICAgd29ybGQucnVucy5nZXQodGhpcy5ydW5JZCkudGhlbigocnVuKSA9PiBydW4uc3RhcnRlZEF0KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSB3b3JrZmxvdyBydW4gY29tcGxldGVkLlxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgd29ya2Zsb3cgaGFzIG5vdCBjb21wbGV0ZWQgeWV0LlxuICAgKi9cbiAgZ2V0IGNvbXBsZXRlZEF0KCk6IFByb21pc2U8RGF0ZSB8IHVuZGVmaW5lZD4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgcmV0dXJuIHRoaXMuI2xhenlXb3JsZFByb21pc2UudGhlbigod29ybGQpID0+XG4gICAgICB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKS50aGVuKChydW4pID0+IHJ1bi5jb21wbGV0ZWRBdClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZWFkYWJsZSBzdHJlYW0gb2YgdGhlIHdvcmtmbG93IHJ1bi5cbiAgICovXG4gIGdldCByZWFkYWJsZSgpOiBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZWFkYWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgd29ya2Zsb3cgcnVuJ3MgZGVmYXVsdCByZWFkYWJsZSBzdHJlYW0sIHdoaWNoIHJlYWRzIGNodW5rc1xuICAgKiB3cml0dGVuIHRvIHRoZSBjb3JyZXNwb25kaW5nIHdyaXRhYmxlIHN0cmVhbSB7QGxpbmsgZ2V0V3JpdGFibGV9LlxuICAgKlxuICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGhhcyBhbiBhZGRpdGlvbmFsIHtAbGluayBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtLmdldFRhaWxJbmRleCB8IGdldFRhaWxJbmRleCgpfVxuICAgKiBoZWxwZXIgdGhhdCByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBrbm93biBjaHVuay4gVGhpcyBpcyB1c2VmdWwgd2hlblxuICAgKiBidWlsZGluZyByZWNvbm5lY3Rpb24gZW5kcG9pbnRzIHRoYXQgbmVlZCB0byBpbmZvcm0gY2xpZW50cyB3aGVyZSB0aGVcbiAgICogc3RyZWFtIHN0YXJ0cy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHJlYWRhYmxlIHN0cmVhbS5cbiAgICogQHJldHVybnMgQSBgV29ya2Zsb3dSZWFkYWJsZVN0cmVhbWAgZm9yIHRoZSB3b3JrZmxvdyBydW4uXG4gICAqL1xuICBnZXRSZWFkYWJsZTxSID0gYW55PihcbiAgICBvcHRpb25zOiBXb3JrZmxvd1JlYWRhYmxlU3RyZWFtT3B0aW9ucyA9IHt9XG4gICk6IFdvcmtmbG93UmVhZGFibGVTdHJlYW08Uj4ge1xuICAgICd1c2Ugc3RlcCc7XG4gICAgY29uc3QgeyBvcHMgPSBbXSwgZ2xvYmFsID0gZ2xvYmFsVGhpcywgc3RhcnRJbmRleCwgbmFtZXNwYWNlIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IG5hbWUgPSBnZXRXb3JrZmxvd1J1blN0cmVhbUlkKHRoaXMucnVuSWQsIG5hbWVzcGFjZSk7XG4gICAgLy8gUGFzcyB0aGUga2V5IGFzIGEgcHJvbWlzZSDigJQgaXQgd2lsbCBiZSByZXNvbHZlZCBsYXppbHkgaW5zaWRlXG4gICAgLy8gdGhlIGZpcnN0IGFzeW5jIHRyYW5zZm9ybSgpIGNhbGwgb2YgdGhlIGRlc2VyaWFsaXplIHN0cmVhbS5cbiAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gdGhpcy4jZ2V0RW5jcnlwdGlvbktleSgpO1xuICAgIGNvbnN0IHN0cmVhbSA9IGdldEV4dGVybmFsUmV2aXZlcnMoZ2xvYmFsLCBvcHMsIHRoaXMucnVuSWQsIGVuY3J5cHRpb25LZXkpXG4gICAgICAuUmVhZGFibGVTdHJlYW0hKHtcbiAgICAgIG5hbWUsXG4gICAgICBzdGFydEluZGV4LFxuICAgIH0pIGFzIFJlYWRhYmxlU3RyZWFtPFI+O1xuXG4gICAgY29uc3Qgd29ybGRQcm9taXNlID0gdGhpcy4jbGF6eVdvcmxkUHJvbWlzZTtcbiAgICBjb25zdCBydW5JZCA9IHRoaXMucnVuSWQ7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3RyZWFtLCB7XG4gICAgICBnZXRUYWlsSW5kZXg6IGFzeW5jICgpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICAgICAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHdvcmxkUHJvbWlzZTtcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IHdvcmxkLnN0cmVhbXMuZ2V0SW5mbyhydW5JZCwgbmFtZSk7XG4gICAgICAgIHJldHVybiBpbmZvLnRhaWxJbmRleDtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUG9sbHMgdGhlIHdvcmtmbG93IHJldHVybiB2YWx1ZSBldmVyeSAxIHNlY29uZCB1bnRpbCBpdCBpcyBjb21wbGV0ZWQuXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAcmV0dXJucyBUaGUgd29ya2Zsb3cgcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgYXN5bmMgI3BvbGxSZXR1cm5WYWx1ZSgpOiBQcm9taXNlPFRSZXN1bHQ+IHtcbiAgICBjb25zdCB3b3JsZCA9IGF3YWl0IHRoaXMuI2xhenlXb3JsZFByb21pc2U7XG5cbiAgICAvLyBXaGVuIHJlc2lsaWVudFN0YXJ0IGlzIHRydWUsIHJ1bl9jcmVhdGVkIGZhaWxlZCBhbmQgdGhlIHJ1biBtYXlcbiAgICAvLyBub3QgZXhpc3QgeWV0LiBSZXRyeSBvbiBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IgdXAgdG8gMyB0aW1lc1xuICAgIC8vICgxcyArIDNzICsgNnMgPSAxMHMgdG90YWwpIHRvIGdpdmUgdGhlIHF1ZXVlIHRpbWUgdG8gZGVsaXZlclxuICAgIC8vIGFuZCB0aGUgcnVudGltZSB0byBjcmVhdGUgdGhlIHJ1biB2aWEgcnVuX3N0YXJ0ZWQuXG4gICAgLy8gV2hlbiByZXNpbGllbnRTdGFydCBpcyBmYWxzZSwgNDA0IGlzIGEgcmVhbCBlcnJvciDigJQgZmFpbCBmYXN0LlxuICAgIGxldCBub3RGb3VuZFJldHJpZXMgPSAwO1xuICAgIGNvbnN0IE5PVF9GT1VORF9NQVhfUkVUUklFUyA9IHRoaXMuI3Jlc2lsaWVudFN0YXJ0ID8gMyA6IDA7XG4gICAgY29uc3QgTk9UX0ZPVU5EX0RFTEFZUyA9IFsxXzAwMCwgM18wMDAsIDZfMDAwXTtcblxuICAgIC8vIE5PVEU6IHdoZW4gdGhpcyBwb2xsIHJ1bnMgaW5zaWRlIGEgc3RlcCAoZS5nLiB0aGUgc3RlcCB0aGF0IGEgcGFyZW50XG4gICAgLy8gd29ya2Zsb3cgdXNlcyB0byBhd2FpdCBhIGNoaWxkIHdvcmtmbG93J3MgYHJldHVyblZhbHVlYCksIGl0IGJsb2Nrc1xuICAgIC8vIGEgcXVldWUgd29ya2VyIHNsb3QgZm9yIGFzIGxvbmcgYXMgdGhlIGNoaWxkIHJ1biB0YWtlcyB0byBmaW5pc2guXG4gICAgLy8gV29ya2VyLWJhc2VkIHdvcmxkcyBsaWtlIGB3b3JsZC1wb3N0Z3Jlc2AgbXVzdCBiZSBzaXplZCB0byBjb3ZlciB0aGVcbiAgICAvLyBwZWFrIG51bWJlciBvZiBzdWNoIHBvbGxzIGluIGZsaWdodCDigJQgc2VlIHRoZSBgcXVldWVDb25jdXJyZW5jeWBcbiAgICAvLyBkZWZhdWx0IG9uIHRoZSBQb3N0Z3JlcyB3b3JsZCBhbmQgdGhlIG5vdGVzIGluIHRoZSBlYWdlci1wcm9jZXNzaW5nXG4gICAgLy8gY2hhbmdlbG9nIGZvciBkZXRhaWxzLlxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JsZC5ydW5zLmdldCh0aGlzLnJ1bklkKTtcblxuICAgICAgICBpZiAocnVuLnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gYXdhaXQgdGhpcy4jZ2V0RW5jcnlwdGlvbktleSgpO1xuICAgICAgICAgIHJldHVybiBhd2FpdCBoeWRyYXRlV29ya2Zsb3dSZXR1cm5WYWx1ZShcbiAgICAgICAgICAgIHJ1bi5vdXRwdXQsXG4gICAgICAgICAgICB0aGlzLnJ1bklkLFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnVuLnN0YXR1cyA9PT0gJ2NhbmNlbGxlZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dSdW5DYW5jZWxsZWRFcnJvcih0aGlzLnJ1bklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChydW4uc3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgICAgIC8vIEh5ZHJhdGUgdGhlIHNlcmlhbGl6ZWQgcnVuIGVycm9yIHNvIHRoZSBvcmlnaW5hbCB0aHJvd24gdmFsdWVcbiAgICAgICAgICAvLyAod2l0aCBpdHMgdHlwZSBpZGVudGl0eSwgY2F1c2UgY2hhaW4sIGV0Yy4pIGlzIHNldCBhcyB0aGVcbiAgICAgICAgICAvLyBgY2F1c2VgIG9uIFdvcmtmbG93UnVuRmFpbGVkRXJyb3IuXG4gICAgICAgICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGF3YWl0IHRoaXMuI2dldEVuY3J5cHRpb25LZXkoKTtcbiAgICAgICAgICBsZXQgaHlkcmF0ZWRFcnJvcjogdW5rbm93bjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaHlkcmF0ZWRFcnJvciA9IGF3YWl0IGh5ZHJhdGVSdW5FcnJvcihcbiAgICAgICAgICAgICAgcnVuLmVycm9yLFxuICAgICAgICAgICAgICB0aGlzLnJ1bklkLFxuICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gSWYgaHlkcmF0aW9uIGZhaWxzLCBzdXJmYWNlIGEgZ2VuZXJpYyBmYWxsYmFjayByYXRoZXIgdGhhblxuICAgICAgICAgICAgLy8gbGVhdmluZyB0aGUgdXNlciB3aXRoIGEgcmF3IFVpbnQ4QXJyYXkuIFRoZSBydW4ncyBlcnJvckNvZGVcbiAgICAgICAgICAgIC8vIGlzIHN0aWxsIHByZXNlcnZlZCBvbiB0aGUgdGhyb3duIFdvcmtmbG93UnVuRmFpbGVkRXJyb3IuXG4gICAgICAgICAgICBoeWRyYXRlZEVycm9yID0gbmV3IEVycm9yKCdGYWlsZWQgdG8gaHlkcmF0ZSB3b3JrZmxvdyBydW4gZXJyb3InKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuRmFpbGVkRXJyb3IodGhpcy5ydW5JZCwgaHlkcmF0ZWRFcnJvciwge1xuICAgICAgICAgICAgZXJyb3JDb2RlOiBydW4uZXJyb3JDb2RlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUnVuIG5vdCBjb21wbGV0ZWQgeWV0IOKAlCBzbGVlcCBhbmQgcG9sbCBhZ2Fpbi5cbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93UnVuTm90Q29tcGxldGVkRXJyb3IodGhpcy5ydW5JZCwgcnVuLnN0YXR1cyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoV29ya2Zsb3dSdW5Ob3RDb21wbGV0ZWRFcnJvci5pcyhlcnJvcikpIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxXzAwMCkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBXb3JrZmxvd1J1bk5vdEZvdW5kRXJyb3IuaXMoZXJyb3IpICYmXG4gICAgICAgICAgbm90Rm91bmRSZXRyaWVzIDwgTk9UX0ZPVU5EX01BWF9SRVRSSUVTXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGRlbGF5ID0gTk9UX0ZPVU5EX0RFTEFZU1tub3RGb3VuZFJldHJpZXNdITtcbiAgICAgICAgICBub3RGb3VuZFJldHJpZXMrKztcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheSkpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGBSdW5gIG9iamVjdCBmb3IgYSBnaXZlbiBydW4gSUQuXG4gKlxuICogQHBhcmFtIHJ1bklkIC0gVGhlIHdvcmtmbG93IHJ1biBJRCBvYnRhaW5lZCBmcm9tIHtAbGluayBzdGFydH0uXG4gKiBAcmV0dXJucyBBIGBSdW5gIG9iamVjdC5cbiAqIEB0aHJvd3MgV29ya2Zsb3dSdW5Ob3RGb3VuZEVycm9yIGlmIHRoZSBydW4gSUQgaXMgbm90IGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UnVuPFRSZXN1bHQ+KHJ1bklkOiBzdHJpbmcpOiBSdW48VFJlc3VsdD4ge1xuICByZXR1cm4gbmV3IFJ1bihydW5JZCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSx3RUFBQUEsU0FBQTtBQUFBO0FBRUksUUFBSSxJQUFJO0FBQ1osUUFBSSxJQUFJLElBQUk7QUFD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LFlBQUFDO0FBQUEsRUFBQSxhQUFBQztBQUFBLEVBQUE7QUFBQSxjQUFBQztBQUFBLEVBQUEsY0FBQUM7QUFBQSxFQUFBLG1CQUFBQztBQUFBLEVBQUEsZ0JBQUFDO0FBQUEsRUFBQTtBQUFBLGNBQUFDO0FBQUEsRUFBQSxhQUFBQztBQUFBLEVBQUEsYUFBQUM7QUFBQSxFQUFBLGNBQUFDO0FBQUEsRUFBQSxtQkFBQUM7QUFBQSxFQUFBO0FBQUEsY0FBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBQUFDO0FBQUEsRUFBQTtBQUFBLGFBQUFDO0FBQUEsRUFBQSxnQkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FBQUM7QUFBQSxFQUFBLFlBQUFDO0FBQUEsRUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQUFDO0FBQUEsRUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxhQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUEsY0FBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FBQUM7QUFBQSxFQUFBO0FBQUEsaUJBQUFDO0FBQUEsRUFBQSxjQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUEsZUFBQUM7QUFBQSxFQUFBLGtCQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUFBQztBQUFBLEVBQUEsdUJBQUFDO0FBQUEsRUFBQSxrQkFBQUM7QUFBQSxFQUFBLHVCQUFBQztBQUFBLEVBQUEsaUJBQUFDO0FBQUEsRUFBQSxzQkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FBQUM7QUFBQSxFQUFBLGlCQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBQUFDO0FBQUEsRUFBQTtBQUFBO0FBQUE7QUFBQSxjQUFBQztBQUFBLEVBQUEsV0FBQUM7QUFBQSxFQUFBO0FBQUE7OztBQ0FBLElBQUFDLGdCQUFBO0FBQUEsU0FBQUEsZUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGVBQUFDO0FBQUEsRUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxpQkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FtRCxJQUFNLFFBQVEsT0FBTyxPQUFPO0FBQUEsRUFDM0UsUUFBUTtBQUNaLENBQUM7QUFBQTtBQUMrQixTQUFTLGFBQWEsTUFBTUMsY0FBYSxRQUFRO0FBQzdFLFdBQVMsS0FBSyxNQUFNLEtBQUs7QUFDckIsUUFBSSxD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LElBQ0EsUUFBUTtBQUFBLE1BQ0osT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLElBQ1o7QUFBQSxJQUNBLE1BQU07QUFBQSxNQUNGLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxJQUNaO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDRixPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsSUFDWjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0gsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLElBQ1o7QUFBQSxJQUNBLE1BQU07QUFBQSxNQUNGLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxJQUNaO0FBQUEsSUFDQSxLQUFLO0FBQUEsTUFDRCxPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsSUFDWjtBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0gsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLElBQ1o7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNOLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxJQUNaO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDRixPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsSUFDWjtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0YsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLElBQ1o7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNOLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxJQUNaO0FBQUEsSUFDQSxNQUFNO0FBQUEsTUFDRixPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsSUFDWjtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0YsT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLElBQ1o7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNKLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxJQUNaO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDSixPQUFPO0FBQUEsTUFDUCxRQUFRO0FBQUEsSUFDWjtBQUFBLElBQ0EsUUFBUTtBQUFBLE1BQ0osT0FBTztBQUFBLE1BQ1AsUUFBUTtBQUFBLElBQ1o7QUFBQSxJQUNBLFdBQVc7QUFBQSxNQUNQ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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGtCQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBQUFDO0FBQUEsRUFBQSxpQkFBQUM7QUFBQSxFQUFBLGNBQUFDO0FBQUEsRUFBQSxlQUFBQztBQUFBLEVBQUEsYUFBQUM7QUFBQSxFQUFBO0FBQUEsZ0JBQUFDO0FBQUEsRUFBQSxjQUFBQztBQUFBLEVBQUE7QUFBQSxjQUFBQztBQUFBLEVBQUEsYUFBQUM7QUFBQSxFQUFBO0FBQUEsY0FBQUM7QUFBQSxFQUFBLGdCQUFBQztBQUFBLEVBQUE7QUFBQSxjQUFBQztBQUFBLEVBQUEsYUFBQUM7QUFBQSxFQUFBLGFBQUFDO0FBQUEsRUFBQSxZQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBQUFDO0FBQUEsRUFBQTtBQUFBLGFBQUFDO0FBQUEsRUFBQSxnQkFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBQUFDO0FBQUEsRUFBQSxZQUFBQztBQUFBLEVBQUE7QUFBQTtBQUFBO0FBQUEsZUFBQUM7QUFBQSxFQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsYUFBQUM7QUFBQSxFQUFBO0FBQUEsY0FBQUM7QUFBQSxFQUFBO0FBQUEsZ0JBQUFDO0FBQUEsRUFBQTtBQUFBO0FBQUE7QUFBQSxjQUFBQztBQUFBLEVBQUE7QUFBQSxpQkFBQUM7QUFBQSxFQUFBLGNBQUFDO0FBQUEsRUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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LCAibXMiLCAidXJsIiwgIm1zIiwgIl9kZWZhdWx0IiwgImJhc2U2NCIsICJiYXNlNjR1cmwiLCAiYmlnaW50IiwgImJvb2xlYW4iLCAiX2NhdGNoIiwgImNpZHJ2NCIsICJjaWRydjYiLCAiY29yZV9leHBvcnRzIiwgImN1aWQiLCAiY3VpZDIiLCAiZGF0ZSIsICJkZWNvZGUiLCAiZGVjb2RlQXN5bmMiLCAiZGVzY3JpYmUiLCAiZTE2NCIsICJlbWFpbCIsICJlbW9qaSIsICJlbmNvZGUiLCAiZW5jb2RlQXN5bmMiLCAiX2VudW0iLCAiZ3VpZCIsICJoZXgiLCAiaG9zdG5hbWUiLCAiaXB2NCIsICJpcHY2IiwgImtzdWlkIiwgIm1hYyIsICJtZXRhIiwgIm5hbm9pZCIsICJfbnVsbCIsICJudWxsaXNoIiwgIm51bWJlciIsICJwYXJzZSIsICJwYXJzZUFzeW5jIiwgInNhZmVEZWNvZGUiLCAic2FmZURlY29kZUFzeW5jIiwgInNhZmVFbmNvZGUiLCAic2FmZUVuY29kZUFzeW5jIiwgInNhZmVQYXJzZSIsICJzYWZlUGFyc2VBc3luYyIsICJzdHJpbmciLCAidWxpZCIsICJfdW5kZWZpbmVkIiwgInV1aWQiLCAiX3ZvaWQiLCAieGlkIiwgImNvcmVfZXhwb3J0cyIsICJfZW1vamkiLCAiX251bGwiLCAiX3VuZGVmaW5lZCIsICJwcm9jZXNzIiwgImluaXRpYWxpemVyIiwgIl9hIiwgImFycmF5IiwgInNldCIsICJvYmplY3QiLCAiQ2xhc3MiLCAiX2EiLCAiY29uZmlnIiwgImJhc2U2NCIsICJiYXNlNjR1cmwiLCAiaGV4IiwgImVycm9yIiwgImlzc3VlIiwgIl9hIiwgInZlcnNpb24iLCAidGltZSIsICJfYSIsICJpbnN0IiwgInJlc3VsdCIsICJfYSIsICJjaGVja3MiLCAiY2hlY2tSZXN1bHQiLCAiY2FuYXJ5IiwgInJlc3VsdCIsICJfIiwgInVybCIsICJiYXNlNjQiLCAiciIsICJpc09iamVjdCIsICJhbGxvd3NFdmFsIiwgInJlc3VsdHMiLCAibWFwIiwgImxlZnQiLCAicmlnaHQiLCAia2V5UmVzdWx0IiwgInZhbHVlUmVzdWx0IiwgIm91dHB1dCIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJlcnJvciIsICJpc3N1ZSIsICJudW1iZXIiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAiZXJyb3IiLCAiaXNzdWUiLCAibWV0YSIsICJDbGFzcyIsICJfZW1vamkiLCAiX3VuZGVmaW5lZCIsICJfbnVsbCIsICJDbGFzcyIsICJpc3N1ZSIsICJjb2RlYyIsICJwcm9jZXNzIiwgIl9hIiwgIm1ldGEiLCAiaWQiLCAic2NoZW1hIiwgImpzb24iLCAiZmlsZSIsICJwcm9jZXNzIiwgInJlZ2lzdHJ5IiwgImN0eCIsICJwcm9jZXNzIiwgInNjaGVtYXNfZXhwb3J0cyIsICJfZGVmYXVsdCIsICJiYXNlNjQiLCAiYmFzZTY0dXJsIiwgImJpZ2ludCIsICJib29sZWFuIiwgIl9jYXRjaCIsICJjaWRydjQiLCAiY2lkcnY2IiwgImN1aWQiLCAiY3VpZDIiLCAiZGF0ZSIsICJkZXNjcmliZSIsICJlMTY0IiwgImVtYWlsIiwgImVtb2ppIiwgIl9lbnVtIiwgImd1aWQiLCAiaGV4IiwgImhvc3RuYW1lIiwgImlwdjQiLCAiaXB2NiIsICJrc3VpZCIsICJtYWMiLCAibWV0YSIsICJuYW5vaWQiLCAiX251bGwiLCAibnVsbGlzaCIsICJudW1iZXIiLCAic3RyaW5nIiwgInVsaWQiLCAiX3VuZGVmaW5lZCIsICJ1dWlkIiwgIl92b2lkIiwgInhpZCIsICJjaGVja3NfZXhwb3J0cyIsICJkYXRlIiwgImRhdGV0aW1lIiwgImR1cmF0aW9uIiwgInRpbWUiLCAiZGF0ZXRpbWUiLCAiZGF0ZSIsICJ0aW1lIiwgImR1cmF0aW9uIiwgImluaXRpYWxpemVyIiwgImlzc3VlIiwgImlzc3VlcyIsICJwYXJzZSIsICJwYXJzZUFzeW5jIiwgInNhZmVQYXJzZSIsICJzYWZlUGFyc2VBc3luYyIsICJlbmNvZGUiLCAiZGVjb2RlIiwgImVuY29kZUFzeW5jIiwgImRlY29kZUFzeW5jIiwgInNhZmVFbmNvZGUiLCAic2FmZURlY29kZSIsICJzYWZlRW5jb2RlQXN5bmMiLCAic2FmZURlY29kZUFzeW5jIiwgImRlZiIsICJtZXRhIiwgInBhcnNlIiwgInNhZmVQYXJzZSIsICJwYXJzZUFzeW5jIiwgInNhZmVQYXJzZUFzeW5jIiwgImVuY29kZSIsICJkZWNvZGUiLCAiZW5jb2RlQXN5bmMiLCAiZGVjb2RlQXN5bmMiLCAic2FmZUVuY29kZSIsICJzYWZlRGVjb2RlIiwgInNhZmVFbmNvZGVBc3luYyIsICJzYWZlRGVjb2RlQXN5bmMiLCAiY2hlY2siLCAiX2RlZmF1bHQiLCAiX2NhdGNoIiwgImpzb24iLCAiX2Vtb2ppIiwgImRhdGV0aW1lIiwgImRhdGUiLCAidGltZSIsICJkdXJhdGlvbiIsICJzdHJpbmciLCAiZW1haWwiLCAiZ3VpZCIsICJ1dWlkIiwgImVtb2ppIiwgIm5hbm9pZCIsICJjdWlkIiwgImN1aWQyIiwgInVsaWQiLCAieGlkIiwgImtzdWlkIiwgImlwdjQiLCAibWFjIiwgImlwdjYiLCAiY2lkcnY0IiwgImNpZHJ2NiIsICJiYXNlNjQiLCAiYmFzZTY0dXJsIiwgImUxNjQiLCAiaG9zdG5hbWUiLCAiaGV4IiwgIm51bWJlciIsICJib29sZWFuIiwgImJpZ2ludCIsICJfdW5kZWZpbmVkIiwgImpzb24iLCAiX251bGwiLCAianNvbiIsICJfdm9pZCIsICJqc29uIiwgImRhdGUiLCAiX2VudW0iLCAianNvbiIsICJpc3N1ZSIsICJvdXRwdXQiLCAibnVsbGlzaCIsICJfZGVmYXVsdCIsICJfY2F0Y2giLCAianNvbiIsICJqc29uIiwgImRlc2NyaWJlIiwgIm1ldGEiLCAic3RyaW5nIiwgIm51bWJlciIsICJib29sZWFuIiwgIl9udWxsIiwgIm1hcCIsICJab2RGaXJzdFBhcnR5VHlwZUtpbmQiLCAic2NoZW1hc19leHBvcnRzIiwgImNoZWNrc19leHBvcnRzIiwgInpvZFNjaGVtYSIsICJvYmplY3RTY2hlbWEiLCAidmVyc2lvbiIsICJiaWdpbnQiLCAiYm9vbGVhbiIsICJkYXRlIiwgIm51bWJlciIsICJzdHJpbmciLCAic3RyaW5nIiwgIm51bWJlciIsICJib29sZWFuIiwgImJpZ2ludCIsICJkYXRlIiwgInN0cmluZyIsICJib29sZWFuIiwgImFkZCIsICJlcnJvciJdCn0K
111998
112063
  `;
111999
112064
  var POST = workflowEntrypoint(workflowCode);