picocode 0.9.186 → 0.9.188

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/pico.js CHANGED
@@ -13,7 +13,7 @@ var headless_exports = {};
13
13
  __export(headless_exports, {
14
14
  runHeadless: () => runHeadless
15
15
  });
16
- import { join as join2 } from "node:path";
16
+ import { join as join3 } from "node:path";
17
17
  import { discoverKeys, applyKeys } from "picocode-core/keys.js";
18
18
  import { loadCatalog, extractModels, adhocModel } from "picocode-core/catalog.js";
19
19
  import { loadCodexModels } from "picocode-core/codex-models.js";
@@ -84,7 +84,7 @@ async function runHeadless(opts) {
84
84
  let session;
85
85
  let events = [];
86
86
  if (opts.resume) {
87
- const file = opts.resume.includes("/") ? opts.resume : join2(sessionsDir(boot2.root), `${opts.resume}.jsonl`);
87
+ const file = opts.resume.includes("/") ? opts.resume : join3(sessionsDir(boot2.root), `${opts.resume}.jsonl`);
88
88
  const loaded = await loadSession(file);
89
89
  session = openSession({ file, header: loaded.header });
90
90
  events = loaded.events;
@@ -942,7 +942,70 @@ function createDictationInput({ dictation, getInput, setInput }) {
942
942
  else if (event.key === "return" && !event.shift && !event.meta && dictation.status === "recording") void stop();
943
943
  return true;
944
944
  }
945
- return { start, cancel, handle };
945
+ return { start, stop, cancel, handle };
946
+ }
947
+
948
+ // src/ui/screen-capture-input.js
949
+ function createScreenCaptureInput({ captureRegion: captureRegion2, getDraft, attachImage, setInput, onError, onStatus = () => {
950
+ } }) {
951
+ let pending2 = false;
952
+ return async function captureImage() {
953
+ if (pending2) return;
954
+ pending2 = true;
955
+ onStatus("capturing");
956
+ const target = getDraft();
957
+ try {
958
+ const image = await captureRegion2();
959
+ if (!image) return;
960
+ const current = getDraft();
961
+ if (current.revision !== target.revision || current.session !== target.session || current.value !== target.value || current.cursor !== target.cursor) {
962
+ await image.dispose();
963
+ onError("Screen capture not attached: the draft changed");
964
+ return;
965
+ }
966
+ const label = attachImage(image.path);
967
+ if (!label) {
968
+ await image.dispose();
969
+ throw new Error("image attachment failed");
970
+ }
971
+ const before = target.value.slice(0, target.cursor);
972
+ const after = target.value.slice(target.cursor);
973
+ setInput(before + label + after, before.length + label.length);
974
+ } catch (error) {
975
+ onError(`Screen capture failed: ${error.message}`);
976
+ } finally {
977
+ pending2 = false;
978
+ onStatus("idle");
979
+ }
980
+ };
981
+ }
982
+
983
+ // src/screen-capture.js
984
+ import { execFile as execFile2 } from "node:child_process";
985
+ import { mkdtemp as mkdtemp2, unlink } from "node:fs/promises";
986
+ import { existsSync as existsSync2 } from "node:fs";
987
+ import { tmpdir as tmpdir2 } from "node:os";
988
+ import { join as join2 } from "node:path";
989
+ var captureDir = null;
990
+ async function ensureCaptureDir() {
991
+ captureDir ??= await mkdtemp2(join2(tmpdir2(), "pico-capture-"));
992
+ return captureDir;
993
+ }
994
+ async function captureRegion() {
995
+ if (process.platform !== "darwin") throw new Error("screen capture is only available on macOS");
996
+ const file = join2(await ensureCaptureDir(), `capture-${Date.now()}.png`);
997
+ await new Promise((resolve, reject) => {
998
+ execFile2("screencapture", ["-i", "-x", file], (error) => {
999
+ if (!error || !existsSync2(file)) resolve();
1000
+ else reject(error);
1001
+ });
1002
+ });
1003
+ if (!existsSync2(file)) return null;
1004
+ return {
1005
+ path: file,
1006
+ dispose: () => unlink(file).catch(() => {
1007
+ })
1008
+ };
946
1009
  }
947
1010
 
948
1011
  // src/ui/composer-files.js
@@ -1960,6 +2023,7 @@ In the MCP panel: enter enables/disables a server (disabled is sticky across res
1960
2023
  ## Composer
1961
2024
 
1962
2025
  - \`ctrl+v\`: Attach clipboard image
2026
+ - \`ctrl+o\`: Capture screen region (macOS)
1963
2027
  - \`ctrl+g\`: Record (macOS)
1964
2028
  - \`enter\`: Transcribe recording
1965
2029
  - \`esc\`: Cancel dictation
@@ -2992,6 +3056,23 @@ function MouseFocusRegion({ children, onPress, ...props }) {
2992
3056
  });
2993
3057
  return /* @__PURE__ */ jsx9("box", { ...props, children });
2994
3058
  }
3059
+ function ComposerAction({ icon, activeIcon, active = false, onPress, onHover }) {
3060
+ const hitTest = useHitTest();
3061
+ const [hovered, setHovered] = createSignal8(false);
3062
+ useMouse2((event) => {
3063
+ const inside = hitTest(event.x, event.y);
3064
+ if (event.action === "move" && inside !== hovered()) {
3065
+ setHovered(inside);
3066
+ onHover?.(inside);
3067
+ }
3068
+ if (inside && event.action === "press" && event.button === "left") {
3069
+ onPress();
3070
+ event.stopPropagation();
3071
+ }
3072
+ });
3073
+ const highlighted = hovered() || active;
3074
+ return /* @__PURE__ */ jsx9("text", { style: { bg: highlighted ? accent() : void 0, color: highlighted ? "black" : MUTED }, children: ` ${highlighted ? activeIcon : icon} ` });
3075
+ }
2995
3076
  function AgentStripRow({ selected, focused, children, onPress }) {
2996
3077
  const hitTest = useHitTest();
2997
3078
  const [hovered, setHovered] = createSignal8(false);
@@ -3055,6 +3136,8 @@ function App({ boot: boot2, controller: ctl }) {
3055
3136
  };
3056
3137
  const [dictationStatus, setDictationStatus] = createSignal8("idle");
3057
3138
  const [dictationLevels, setDictationLevels] = createSignal8([]);
3139
+ const [captureStatus, setCaptureStatus] = createSignal8("idle");
3140
+ const [composerActionLabel, setComposerActionLabel] = createSignal8("");
3058
3141
  const [model, setModel] = createSignal8(state.model);
3059
3142
  const [defaultModel4, setDefaultModel] = createSignal8(state.defaultModel);
3060
3143
  const [effort, setEffort] = createSignal8(state.effort);
@@ -3235,6 +3318,14 @@ function App({ boot: boot2, controller: ctl }) {
3235
3318
  setInput,
3236
3319
  onError: (message) => refs.ui.flash(message)
3237
3320
  });
3321
+ refs.captureImage ??= createScreenCaptureInput({
3322
+ captureRegion,
3323
+ getDraft: () => ({ value: input(), cursor: inputCursor(), session: state.session, revision: refs.draftRevision }),
3324
+ attachImage: ctl.attachImage,
3325
+ setInput,
3326
+ onError: (message) => refs.ui.flash(message),
3327
+ onStatus: setCaptureStatus
3328
+ });
3238
3329
  if (!refs.dictation) {
3239
3330
  refs.dictation = createDictation({
3240
3331
  onStatus: (status) => {
@@ -4156,6 +4247,7 @@ function App({ boot: boot2, controller: ctl }) {
4156
4247
  conversationSearchMatches = preparedConversation.matches;
4157
4248
  const items = preparedConversation.items;
4158
4249
  const wideLayout = wideSidebar() && terminalWidth() > 160;
4250
+ const showComposerActions = !steer() && !viewedAgent && !viewedShell && process.platform === "darwin";
4159
4251
  if (showMemoryPanel()) {
4160
4252
  return /* @__PURE__ */ jsx9(
4161
4253
  MemoryPanel,
@@ -4263,6 +4355,15 @@ function App({ boot: boot2, controller: ctl }) {
4263
4355
  }
4264
4356
  return /* @__PURE__ */ jsxs8("box", { style: { flexDirection: wideLayout ? "row" : "column", height: "100%" }, children: [
4265
4357
  /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "column", flexGrow: 1 }, children: [
4358
+ /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "row", paddingX: 2, gap: 1, bg: PANEL_BG }, children: [
4359
+ /* @__PURE__ */ jsx9("box", { style: { flexGrow: 1, height: 1 }, children: busy() ? /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "row" }, children: [
4360
+ /* @__PURE__ */ jsx9("box", { style: { bg: accent(), paddingX: 1 }, children: /* @__PURE__ */ jsx9(Shimmer, { color: "black", highlight: PANEL_BG, duration: 1500, reverse: true, children: compacting() ? compactStatus()?.phase === "writing" ? `Compacting writing ${compactStatus().section}/8` : "Compacting analyzing" : turnPhase() === "thinking" ? "Thinking" : turnPhase() === "tools" ? "Working" : "Responding" }) }),
4361
+ /* @__PURE__ */ jsx9("text", { style: { color: MUTED, overflow: "truncate" }, children: ` ${elapsed} esc to interrupt` })
4362
+ ] }) : /* @__PURE__ */ jsx9("text", { style: { color: MUTED, overflow: "truncate" }, children: boot2.displayCwd }) }),
4363
+ gitInfo?.branch && /* @__PURE__ */ jsx9("text", { style: { color: MUTED, overflow: "truncate" }, children: gitInfo.branch }),
4364
+ gitInfo?.added > 0 && /* @__PURE__ */ jsx9("text", { style: { color: GREEN }, children: `+${gitInfo.added}` }),
4365
+ gitInfo?.removed > 0 && /* @__PURE__ */ jsx9("text", { style: { color: RED }, children: `-${gitInfo.removed}` })
4366
+ ] }),
4266
4367
  transcript.length === 0 ? /* @__PURE__ */ jsx9("box", { style: { flexGrow: 1, dim: dimmingPanel() }, children: /* @__PURE__ */ jsx9(EmptyState, { version: version2, clouds: clouds() }) }) : /* @__PURE__ */ jsxs8("box", { style: { flexGrow: 1, flexDirection: "column" }, children: [
4267
4368
  /* @__PURE__ */ jsxs8(
4268
4369
  ScrollBox3,
@@ -4402,7 +4503,7 @@ function App({ boot: boot2, controller: ctl }) {
4402
4503
  !steer() && !viewedAgent && !viewedShell && /* @__PURE__ */ jsxs8(MouseFocusRegion, { onPress: () => fm.focus("input"), style: { bg: PANEL_BG, flexDirection: "row", paddingX: 2, paddingY: 1, marginTop: transcript.length === 0 && clouds() ? 0 : 1, dim: dimmingPanel() || !!questionRequest() }, children: [
4403
4504
  /* @__PURE__ */ jsx9("text", { style: { color: fm.is("input") && !anyPanel() && !questionRequest() ? accent() : MUTED, bold: true }, children: "\u276F" }),
4404
4505
  /* @__PURE__ */ jsx9("text", { children: " " }),
4405
- dictationStatus() !== "idle" ? /* @__PURE__ */ jsx9("text", { style: { position: "absolute", top: 0, right: 0, color: accent(), bg: PANEL_BG, overflow: "truncate" }, children: dictationIndicator(dictationStatus(), dictationLevels()) }) : (state.session?.header.forkedFrom || derived().title) && /* @__PURE__ */ jsxs8("box", { style: { position: "absolute", top: 0, right: 0, flexDirection: "row" }, children: [
4506
+ (state.session?.header.forkedFrom || derived().title) && /* @__PURE__ */ jsxs8("box", { style: { position: "absolute", top: 0, right: 0, flexDirection: "row" }, children: [
4406
4507
  state.session?.header.forkedFrom && /* @__PURE__ */ jsx9("text", { style: { color: MUTED }, children: derived().title ? "\u2442 " : "\u2442" }),
4407
4508
  derived().title && /* @__PURE__ */ jsx9("text", { style: { bg: fm.is("input") && !anyPanel() && !questionRequest() ? accent() : MUTED, color: "black", bold: true }, children: ` ${derived().title} ` })
4408
4509
  ] }),
@@ -4455,6 +4556,10 @@ function App({ boot: boot2, controller: ctl }) {
4455
4556
  refs.dictationInput.start(e);
4456
4557
  return true;
4457
4558
  }
4559
+ if (e.ctrl && e.key === "o") {
4560
+ void refs.captureImage();
4561
+ return true;
4562
+ }
4458
4563
  if (e.key === "tab" && !e.ctrl && !e.meta && showFiles && matchedFiles.length > 0) {
4459
4564
  pickFile(matchedFiles[Math.min(fileIndex(), matchedFiles.length - 1)]);
4460
4565
  return true;
@@ -4539,6 +4644,36 @@ function App({ boot: boot2, controller: ctl }) {
4539
4644
  }
4540
4645
  )
4541
4646
  ] }),
4647
+ showComposerActions && /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "row", height: 1, marginLeft: 1 }, children: [
4648
+ /* @__PURE__ */ jsx9(
4649
+ ComposerAction,
4650
+ {
4651
+ icon: "\u25CB",
4652
+ activeIcon: "\u25CF",
4653
+ active: dictationStatus() !== "idle",
4654
+ onHover: (hovered) => {
4655
+ if (hovered) setComposerActionLabel("capture audio");
4656
+ else if (composerActionLabel() === "capture audio") setComposerActionLabel("");
4657
+ },
4658
+ onPress: () => dictationStatus() === "recording" ? void refs.dictationInput.stop() : refs.dictationInput.start({ value: input(), cursor: inputCursor() })
4659
+ }
4660
+ ),
4661
+ /* @__PURE__ */ jsx9(
4662
+ ComposerAction,
4663
+ {
4664
+ icon: "\u25A1",
4665
+ activeIcon: "\u25A0",
4666
+ active: captureStatus() === "capturing",
4667
+ onHover: (hovered) => {
4668
+ if (hovered) setComposerActionLabel("capture image");
4669
+ else if (composerActionLabel() === "capture image") setComposerActionLabel("");
4670
+ },
4671
+ onPress: () => void refs.captureImage()
4672
+ }
4673
+ ),
4674
+ dictationStatus() !== "idle" && /* @__PURE__ */ jsx9("text", { style: { color: accent(), overflow: "truncate" }, children: dictationIndicator(dictationStatus(), dictationLevels()) }),
4675
+ /* @__PURE__ */ jsx9("text", { style: { color: MUTED }, children: dictationStatus() === "recording" ? "esc cancel enter confirm" : captureStatus() === "capturing" ? " esc cancel" : composerActionLabel() ? ` ${composerActionLabel()}` : "" })
4676
+ ] }),
4542
4677
  showCommands && /* @__PURE__ */ jsx9("box", { style: { flexDirection: "column", height: 6, minHeight: 6, paddingX: 2, marginTop: 1 }, children: matchedCommands.length === 0 ? /* @__PURE__ */ jsx9("text", { style: { color: MUTED }, children: "no matching commands" }) : /* @__PURE__ */ jsx9(
4543
4678
  Menu3,
4544
4679
  {
@@ -4825,7 +4960,7 @@ function App({ boot: boot2, controller: ctl }) {
4825
4960
  /* @__PURE__ */ jsx9("text", { style: { color: fm.current() === "activity-main" ? "black" : accent() }, children: "\u25CF " }),
4826
4961
  /* @__PURE__ */ jsx9("text", { style: { color: fm.current() === "activity-main" ? "black" : !viewedShell && !viewedAgent ? FG : MUTED }, children: "main" })
4827
4962
  ] }) }),
4828
- visibleShells.length > 0 && /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "column", paddingX: 2, marginTop: combinedActivity ? 0 : 1 }, children: [
4963
+ visibleShells.length > 0 && /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "column", paddingX: 2, marginTop: combinedActivity || showComposerActions ? 0 : 1 }, children: [
4829
4964
  /* @__PURE__ */ jsx9("box", { style: { flexDirection: "row", justifyContent: "flex-end" }, children: /* @__PURE__ */ jsx9("text", { style: { color: MUTED }, children: `${shellActionHint ? `${shellActionHint} ` : ""}j/k move` }) }),
4830
4965
  !combinedActivity && /* @__PURE__ */ jsxs8(AgentStripRow, { selected: !viewedShell, focused: fm.current() === "shell-main", onPress: () => {
4831
4966
  fm.focus("shell-main");
@@ -4855,7 +4990,7 @@ function App({ boot: boot2, controller: ctl }) {
4855
4990
  }),
4856
4991
  visibleShells.length > SHELL_STRIP_MAX && /* @__PURE__ */ jsx9("text", { style: { color: MUTED }, children: ` ${shellWindowStart > 0 ? `\u2191 ${shellWindowStart}` : ""}${shellWindowStart > 0 && shellWindowStart + shellWindow.length < visibleShells.length ? " " : ""}${shellWindowStart + shellWindow.length < visibleShells.length ? `\u2193 ${visibleShells.length - shellWindowStart - shellWindow.length}` : ""} more` })
4857
4992
  ] }),
4858
- visibleAgents.length > 0 && /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "column", paddingX: 2, marginTop: combinedActivity ? 0 : 1 }, children: [
4993
+ visibleAgents.length > 0 && /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "column", paddingX: 2, marginTop: combinedActivity || showComposerActions ? 0 : 1 }, children: [
4859
4994
  /* @__PURE__ */ jsx9("box", { style: { flexDirection: "row", justifyContent: "flex-end" }, children: /* @__PURE__ */ jsx9("text", { style: { color: MUTED }, children: `${agentActionHint ? `${agentActionHint} ` : ""}j/k move` }) }),
4860
4995
  !combinedActivity && /* @__PURE__ */ jsxs8(AgentStripRow, { selected: !viewedAgent, focused: fm.current() === "agent-main", onPress: () => {
4861
4996
  fm.focus("agent-main");
@@ -4947,15 +5082,7 @@ function App({ boot: boot2, controller: ctl }) {
4947
5082
  ] })
4948
5083
  ] })
4949
5084
  ] }) : /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "column" }, children: [
4950
- /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "row", paddingX: 2, gap: 1, marginTop: 1 }, children: [
4951
- /* @__PURE__ */ jsx9("box", { style: { flexGrow: 1, height: 1 }, children: busy() ? /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "row" }, children: [
4952
- /* @__PURE__ */ jsx9(Shimmer, { color: accent(), highlight: HIGHLIGHT, duration: 1500, reverse: true, children: compacting() ? compactStatus()?.phase === "writing" ? `Compacting writing ${compactStatus().section}/8` : "Compacting analyzing" : turnPhase() === "thinking" ? "Thinking" : turnPhase() === "tools" ? "Working" : "Responding" }),
4953
- /* @__PURE__ */ jsx9("text", { style: { color: MUTED, overflow: "truncate" }, children: ` ${elapsed} esc to interrupt` })
4954
- ] }) : /* @__PURE__ */ jsx9("text", { style: { color: MUTED, overflow: "truncate" }, children: boot2.displayCwd }) }),
4955
- gitInfo?.branch && /* @__PURE__ */ jsx9("text", { style: { color: MUTED, overflow: "truncate" }, children: gitInfo.branch }),
4956
- gitInfo?.added > 0 && /* @__PURE__ */ jsx9("text", { style: { color: GREEN }, children: `+${gitInfo.added}` }),
4957
- gitInfo?.removed > 0 && /* @__PURE__ */ jsx9("text", { style: { color: RED }, children: `-${gitInfo.removed}` })
4958
- ] }),
5085
+ /* @__PURE__ */ jsx9("box", { style: { height: 1 } }),
4959
5086
  /* @__PURE__ */ jsxs8("box", { style: { flexDirection: "row", paddingX: 2, gap: 1 }, children: [
4960
5087
  /* @__PURE__ */ jsx9("text", { style: { color: MUTED }, children: model().name }),
4961
5088
  effortApplies() && effort() && /* @__PURE__ */ jsx9("text", { style: { color: MUTED }, children: effort() }),
@@ -5138,4 +5265,4 @@ var controller = createController({ boot });
5138
5265
  var app = mount(() => /* @__PURE__ */ jsx10(App, { boot, controller }), { title: `pico ${boot.root.split("/").pop()}`, theme });
5139
5266
  boot.setTheme = app.setTheme;
5140
5267
  boot.mcp.connectAll();
5141
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9tb2RlbC1ydW50aW1lLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS9hcHAuanN4IiwgIi4uL3NyYy91aS9jb21wb3Nlci1jb21tYW5kcy5qcyIsICIuLi9zcmMvdWkvY29tbWFuZC1mb3JtLmpzeCIsICIuLi9zcmMvdWkvdGhlbWUuanMiLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL2NvbXBvc2VyLWZpbGVzLmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5kaWNhdG9yLmpzIiwgIi4uL3NyYy91aS9oaWdobGlnaHQuanMiLCAiLi4vc3JjL3VpL2NvbnRleHQtYmFyLmpzIiwgIi4uL3NyYy91aS9hbmltYXRlZC12YWx1ZS5qc3giLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQuanN4IiwgIi4uL3NyYy91aS9jb252ZXJzYXRpb24tc2VhcmNoLXZpZXcuanN4IiwgIi4uL3NyYy91aS90cmFuc2NyaXB0LXdpbmRvdy5qcyIsICIuLi9zcmMvdWkvcXVlc3Rpb24tZm9ybS5qc3giLCAiLi4vc3JjL3VpL2VtcHR5LXN0YXRlLmpzeCIsICIuLi9zcmMvdWkvaGVscC5qc3giLCAiLi4vc3JjL3VpL3BhbmVscy5qc3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBkaXNjb3ZlcktleXMsIGFwcGx5S2V5cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUva2V5cy5qcydcbmltcG9ydCB7IGxvYWRDYXRhbG9nLCBleHRyYWN0TW9kZWxzLCBhZGhvY01vZGVsIH0gZnJvbSAncGljb2NvZGUtY29yZS9jYXRhbG9nLmpzJ1xuaW1wb3J0IHsgbG9hZENvZGV4TW9kZWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb2RleC1tb2RlbHMuanMnXG5pbXBvcnQgeyBvcGVuYWlDb25uZWN0ZWQsIG9wZW5haUNyZWRlbnRpYWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVuYWktYXV0aC5qcydcbmltcG9ydCB7IGZpbmRNb2RlbCwgZGVmYXVsdE1vZGVsLCBlc3RpbWF0ZUNvc3QgfSBmcm9tICdwaWNvY29kZS1jb3JlL21vZGVscy5qcydcbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IGJ1aWxkUHJvamVjdEJvb3QgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Jvb3QuanMnXG5pbXBvcnQgeyBjcmVhdGVTaGVsbE1hbmFnZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3NoZWxscy5qcydcbmltcG9ydCB7IGNyZWF0ZVNlc3Npb24sIG9wZW5TZXNzaW9uLCBsb2FkU2Vzc2lvbiwgb25TZXNzaW9uV3JpdGVFcnJvciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2Vzc2lvbi5qcydcbmltcG9ydCB7IHNlc3Npb25zRGlyIH0gZnJvbSAncGljb2NvZGUtY29yZS9wYXRocy5qcydcbmltcG9ydCB7IG1ha2VFdmVudCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZXZlbnRzLmpzJ1xuaW1wb3J0IHsgZGVyaXZlU3RhdGUgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Rlcml2ZS5qcydcbmltcG9ydCB7IGNyZWF0ZVRvb2xzZXQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rvb2xzL2luZGV4LmpzJ1xuaW1wb3J0IHsgcnVuVHVybiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYWdlbnQuanMnXG5pbXBvcnQgeyBidWlsZFN5c3RlbVByb21wdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc3lzdGVtLXByb21wdC5qcydcbmltcG9ydCB7IG1lbW9yeUluZGV4IH0gZnJvbSAncGljb2NvZGUtY29yZS9tZW1vcnkuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcbmltcG9ydCB7IGZpbmFsaXplVXNlckNvbnRlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuXG5mdW5jdGlvbiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIG5hbWUpIHtcbiAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbFxuICBjb25zdCBleGFjdCA9IG1vZGVscy5maW5kKChtKSA9PiBtLm5hbWUgPT09IG5hbWUpXG4gIGlmIChleGFjdCkgcmV0dXJuIGV4YWN0XG4gIGlmIChuYW1lLmluY2x1ZGVzKCcvJykpIHJldHVybiBhZGhvY01vZGVsKG5hbWUsIHByb3ZpZGVycylcbiAgY29uc3Qgc2NvcmVkID0gbW9kZWxzXG4gICAgLmZpbHRlcigobSkgPT4gbS5hdmFpbGFibGUgIT09IGZhbHNlKVxuICAgIC5tYXAoKG0pID0+IFtmdXp6eVNjb3JlKG5hbWUsIG0ubmFtZSksIG1dKVxuICAgIC5maWx0ZXIoKFtzY29yZV0pID0+IHNjb3JlID49IDApXG4gICAgLnNvcnQoKGEsIGIpID0+IGJbMF0gLSBhWzBdKVxuICByZXR1cm4gc2NvcmVkWzBdPy5bMV0gfHwgbnVsbFxufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkU3RkaW4oKSB7XG4gIGlmIChwcm9jZXNzLnN0ZGluLmlzVFRZKSByZXR1cm4gJydcbiAgbGV0IGRhdGEgPSAnJ1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHByb2Nlc3Muc3RkaW4pIHtcbiAgICBkYXRhICs9IGNodW5rXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gNDAwMDAwKSBicmVha1xuICB9XG4gIHJldHVybiBkYXRhLnNsaWNlKDAsIDQwMDAwMClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkhlYWRsZXNzKG9wdHMpIHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKVxuICBjb25zdCBsb2cgPSBvcHRzLnF1aWV0ID8gKCkgPT4ge30gOiAobGluZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobGluZSArICdcXG4nKVxuXG4gIG9uU2Vzc2lvbldyaXRlRXJyb3IoKGVyciwgZmlsZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUoYHBpY286IGNvdWxkIG5vdCB3cml0ZSAke2ZpbGV9OiAke2Vyci5tZXNzYWdlfVxcbmApKVxuXG4gIGNvbnN0IGNoYXRncHQgPSBhd2FpdCBvcGVuYWlDb25uZWN0ZWQoKVxuICBjb25zdCBwcm92aWRlcnMgPSBbLi4uYXBwbHlLZXlzKGRpc2NvdmVyS2V5cygpKSwgLi4uKGNoYXRncHQgPyBbJ2NvZGV4J10gOiBbXSldXG4gIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IG5vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KVxcbicpXG4gICAgcmV0dXJuIDFcbiAgfVxuICBjb25zdCBjYXRhbG9nRGF0YSA9IGF3YWl0IGxvYWRDYXRhbG9nKClcbiAgY29uc3QgY29kZXhDcmVkcyA9IGNoYXRncHQgPyBhd2FpdCBvcGVuYWlDcmVkZW50aWFscygpLmNhdGNoKCgpID0+IG51bGwpIDogbnVsbFxuICBjb25zdCBtb2RlbHMgPSBbXG4gICAgLi4uZXh0cmFjdE1vZGVscyhjYXRhbG9nRGF0YSwgWydnb29nbGUnLCAnYW50aHJvcGljJywgJ29wZW5haScsICd4YWknXSkubWFwKChtKSA9PiAoe1xuICAgICAgLi4ubSxcbiAgICAgIGF2YWlsYWJsZTogcHJvdmlkZXJzLmluY2x1ZGVzKG0ucHJvdmlkZXIpLFxuICAgIH0pKSxcbiAgICAuLi4oYXdhaXQgbG9hZENvZGV4TW9kZWxzKGNvZGV4Q3JlZHMpKS5tYXAoKG0pID0+ICh7IC4uLm0sIGF2YWlsYWJsZTogY2hhdGdwdCB9KSksXG4gIF1cbiAgY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZENvbmZpZygpXG5cbiAgY29uc3QgbW9kZWwgPSByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIG9wdHMubW9kZWwpXG4gICAgfHwgKGNvbmZpZy5kZWZhdWx0TW9kZWwgJiYgbW9kZWxzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gY29uZmlnLmRlZmF1bHRNb2RlbCAmJiBtLmF2YWlsYWJsZSkpXG4gICAgfHwgZGVmYXVsdE1vZGVsKG1vZGVscylcbiAgaWYgKCFtb2RlbCB8fCBtb2RlbC5hdmFpbGFibGUgPT09IGZhbHNlKSB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYHBpY286IG5vIHVzYWJsZSBtb2RlbCR7b3B0cy5tb2RlbCA/IGAgbWF0Y2hpbmcgXCIke29wdHMubW9kZWx9XCJgIDogJyd9XFxuYClcbiAgICByZXR1cm4gMVxuICB9XG4gIGNvbnN0IGVmZm9ydCA9IG9wdHMuZWZmb3J0ID8/IChtb2RlbC5lZmZvcnQgPyAnYXV0bycgOiBudWxsKVxuXG4gIGNvbnN0IGJvb3QgPSBhd2FpdCBidWlsZFByb2plY3RCb290KHByb2Nlc3MuY3dkKCkpXG4gIGF3YWl0IFByb21pc2UucmFjZShbYm9vdC5tY3AuY29ubmVjdEFsbCgpLCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMDAwMCkpXSlcbiAgY29uc3Qgc2hlbGxzID0gY3JlYXRlU2hlbGxNYW5hZ2VyKClcblxuICBsZXQgc2Vzc2lvblxuICBsZXQgZXZlbnRzID0gW11cbiAgaWYgKG9wdHMucmVzdW1lKSB7XG4gICAgY29uc3QgZmlsZSA9IG9wdHMucmVzdW1lLmluY2x1ZGVzKCcvJykgPyBvcHRzLnJlc3VtZSA6IGpvaW4oc2Vzc2lvbnNEaXIoYm9vdC5yb290KSwgYCR7b3B0cy5yZXN1bWV9Lmpzb25sYClcbiAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCBsb2FkU2Vzc2lvbihmaWxlKVxuICAgIHNlc3Npb24gPSBvcGVuU2Vzc2lvbih7IGZpbGUsIGhlYWRlcjogbG9hZGVkLmhlYWRlciB9KVxuICAgIGV2ZW50cyA9IGxvYWRlZC5ldmVudHNcbiAgfSBlbHNlIHtcbiAgICBzZXNzaW9uID0gY3JlYXRlU2Vzc2lvbih7IGN3ZDogYm9vdC5jd2QsIHJvb3Q6IGJvb3Qucm9vdCB9KVxuICB9XG5cbiAgY29uc3QgcGVyc2lzdCA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50cy5wdXNoKGV2ZW50KVxuICAgIHNlc3Npb24uYXBwZW5kKGV2ZW50KVxuICAgIGlmIChvcHRzLnN0cmVhbUpzb24pIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KGV2ZW50KSArICdcXG4nKVxuICB9XG5cbiAgY29uc3Qgc3RkaW5EYXRhID0gYXdhaXQgcmVhZFN0ZGluKClcbiAgY29uc3QgcHJvbXB0VGV4dCA9IHN0ZGluRGF0YSA/IGAke29wdHMucHJvbXB0fVxcblxcbltwaXBlZCBpbnB1dF1cXG4ke3N0ZGluRGF0YX1gIDogb3B0cy5wcm9tcHRcbiAgY29uc3QgeyBjb250ZW50IH0gPSBmaW5hbGl6ZVVzZXJDb250ZW50KHByb21wdFRleHQsIG5ldyBNYXAoKSlcbiAgcGVyc2lzdChtYWtlRXZlbnQoJ21lc3NhZ2UnLCB7IG1lc3NhZ2U6IHsgcm9sZTogJ3VzZXInLCBjb250ZW50IH0gfSkpXG5cbiAgY29uc3QgZGVyaXZlZCA9IGRlcml2ZVN0YXRlKGV2ZW50cylcbiAgY29uc3QgbG9hZGVkQmVmb3JlID0gbmV3IFNldChib290LnRyYWNrZXIubG9hZGVkKVxuICBjb25zdCB7IHRvb2xzLCByZWNvcmRlciB9ID0gY3JlYXRlVG9vbHNldCh7XG4gICAgY3dkOiBib290LmN3ZCxcbiAgICB0cmFja2VyOiBib290LnRyYWNrZXIsXG4gICAgc2tpbGxzOiBib290LnNraWxscyxcbiAgICBzaGVsbHMsXG4gICAgbWVtb3J5OiBib290Lm1lbW9yeSxcbiAgICBtY3BUb29sczogYm9vdC5tY3AudG9vbHMoKSxcbiAgICB1c2VyVG9vbHM6IFtdLFxuICAgIG1heFRvb2xDYWxsczogb3B0cy5tYXhUb29sQ2FsbHMgPz8gNTAsXG4gIH0pXG5cbiAgbGV0IGF1dGggPSBudWxsXG4gIGlmIChtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4Jykge1xuICAgIGF1dGggPSBhd2FpdCBvcGVuYWlDcmVkZW50aWFscygpLmNhdGNoKCgpID0+IG51bGwpXG4gICAgaWYgKCFhdXRoKSB7XG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgncGljbzogY29kZXggbW9kZWxzIG5lZWQgYSBDaGF0R1BUIHNpZ24taW4gKHJ1biBwaWNvIC0tY29ubmVjdClcXG4nKVxuICAgICAgYXdhaXQgc2Vzc2lvbi5mbHVzaCgpXG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgfVxuXG4gIGxvZyhgcGljbyAgJHttb2RlbC5uYW1lfSR7ZWZmb3J0ID8gYCAgJHtlZmZvcnR9YCA6ICcnfSAgc2Vzc2lvbiAke3Nlc3Npb24uaWR9YClcbiAgbGV0IHRob3VnaHRzID0gJydcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVHVybih7XG4gICAgaGlzdG9yeTogZGVyaXZlZC5wcm92aWRlckhpc3RvcnksXG4gICAgdG9vbHMsXG4gICAgcmVjb3JkZXIsXG4gICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgIGVmZm9ydCxcbiAgICBhdXRoLFxuICAgIHN5c3RlbTogYnVpbGRTeXN0ZW1Qcm9tcHQoe1xuICAgICAgY3dkOiBib290LmN3ZCxcbiAgICAgIGNvbnRleHRGaWxlczogYm9vdC5zdGFydHVwQ29udGV4dC5maWxlcyxcbiAgICAgIHNraWxsczogYm9vdC5za2lsbHMubGlzdCgpLFxuICAgICAgbWVtb3J5SW5kZXhUZXh0OiBtZW1vcnlJbmRleChhd2FpdCBib290Lm1lbW9yeS5saXN0KCkuY2F0Y2goKCkgPT4gW10pLCBib290LnJvb3QpLFxuICAgIH0pLFxuICAgIG9uU3RyZWFtOiAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndGhpbmtpbmcnKSB0aG91Z2h0cyArPSBldmVudC5jb250ZW50XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfY29tcGxldGUnKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcmVjb3JkZXIuZW50cmllcy5hdCgtMSlcbiAgICAgICAgbG9nKGAgIFx1MjcxMyAke2VudHJ5Py5uYW1lID8/IGV2ZW50LmNhbGwuZnVuY3Rpb24ubmFtZX0gICR7ZW50cnk/LnRpdGxlID8/ICcnfWApXG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfZXJyb3InKSBsb2coYCAgXHUyNzE3ICR7ZXZlbnQuY2FsbC5mdW5jdGlvbi5uYW1lfSAgJHtldmVudC5lcnJvci5zbGljZSgwLCAxMjApfWApXG4gICAgfSxcbiAgfSlcblxuICBpZiAodGhvdWdodHMpIHBlcnNpc3QobWFrZUV2ZW50KCd0aG91Z2h0cycsIHsgdGV4dDogdGhvdWdodHMgfSkpXG4gIGZvciAoY29uc3QgbWVzc2FnZSBvZiByZXN1bHQubWVzc2FnZXMpIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlIH0pKVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlY29yZGVyLmVudHJpZXMpIHBlcnNpc3QobWFrZUV2ZW50KCd0b29sX21ldGEnLCBlbnRyeSkpXG4gIGZvciAoY29uc3QgcGF0aCBvZiBib290LnRyYWNrZXIubG9hZGVkKSB7XG4gICAgaWYgKCFsb2FkZWRCZWZvcmUuaGFzKHBhdGgpKSBwZXJzaXN0KG1ha2VFdmVudCgnY29udGV4dF9maWxlJywgeyBwYXRoIH0pKVxuICB9XG4gIGlmIChyZXN1bHQudXNhZ2UpIHBlcnNpc3QobWFrZUV2ZW50KCd1c2FnZScsIHsgbW9kZWw6IG1vZGVsLm5hbWUsIHVzYWdlOiByZXN1bHQudXNhZ2UsIGxhc3RQcm9tcHQ6IHJlc3VsdC5sYXN0UHJvbXB0VG9rZW5zIH0pKVxuICBpZiAocmVzdWx0LmludGVycnVwdGVkKSBwZXJzaXN0KG1ha2VFdmVudCgnaW50ZXJydXB0Jywge30pKVxuXG4gIGNvbnN0IHJ1bm5pbmcgPSBzaGVsbHMucnVubmluZygpXG4gIGlmIChydW5uaW5nID4gMCkgbG9nKGAgIGtpbGxpbmcgJHtydW5uaW5nfSBiYWNrZ3JvdW5kIHNoZWxsJHtydW5uaW5nID09PSAxID8gJycgOiAncyd9YClcbiAgc2hlbGxzLmtpbGxBbGwoKVxuICBhd2FpdCBib290Lm1jcC5jbG9zZUFsbCgpLmNhdGNoKCgpID0+IHt9KVxuICAvLyB0aGUgY2FsbGVyIGV4aXRzIHRoZSBwcm9jZXNzIHRoZSBtb21lbnQgdGhpcyByZXR1cm5zLCB3aGljaCB3b3VsZCBkaXNjYXJkXG4gIC8vIGV2ZXJ5IGFwcGVuZCBzdGlsbCBpbiBmbGlnaHRcbiAgYXdhaXQgc2Vzc2lvbi5mbHVzaCgpXG5cbiAgY29uc3QgdGV4dCA9IHJlc3VsdC5tZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ucm9sZSA9PT0gJ2Fzc2lzdGFudCcgJiYgdHlwZW9mIG0uY29udGVudCA9PT0gJ3N0cmluZycgJiYgbS5jb250ZW50KS5hdCgtMSk/LmNvbnRlbnQgPz8gJydcbiAgY29uc3Qgc3VtbWFyeSA9IHtcbiAgICB0ZXh0LFxuICAgIHNlc3Npb246IHNlc3Npb24uaWQsXG4gICAgc2Vzc2lvbkZpbGU6IHNlc3Npb24uZmlsZSxcbiAgICBtb2RlbDogbW9kZWwubmFtZSxcbiAgICB1c2FnZTogcmVzdWx0LnVzYWdlLFxuICAgIGNvc3Q6IGVzdGltYXRlQ29zdChmaW5kTW9kZWwobW9kZWxzLCBtb2RlbC5uYW1lKSwgcmVzdWx0LnVzYWdlKSxcbiAgICB0b29sQ2FsbHM6IHJlY29yZGVyLmVudHJpZXMubGVuZ3RoLFxuICAgIGludGVycnVwdGVkOiByZXN1bHQuaW50ZXJydXB0ZWQsXG4gICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgfVxuXG4gIGlmIChvcHRzLmpzb24pIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KHN1bW1hcnkpICsgJ1xcbicpXG4gIGVsc2UgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncmVzdWx0JywgLi4uc3VtbWFyeSwgdGV4dDogdW5kZWZpbmVkLCBhdDogRGF0ZS5ub3coKSB9KSArICdcXG4nKVxuICBlbHNlIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRleHQgKyAnXFxuJylcblxuICByZXR1cm4gcmVzdWx0LmludGVycnVwdGVkID8gMSA6IDBcbn1cbiIsICJpbXBvcnQgeyBkaXNjb3ZlcktleXMsIGFwcGx5S2V5cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUva2V5cy5qcydcbmltcG9ydCB7IGxvYWRDYXRhbG9nLCBleHRyYWN0TW9kZWxzLCBhZGhvY01vZGVsIH0gZnJvbSAncGljb2NvZGUtY29yZS9jYXRhbG9nLmpzJ1xuaW1wb3J0IHsgbG9hZENvZGV4TW9kZWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb2RleC1tb2RlbHMuanMnXG5pbXBvcnQgeyBvcGVuYWlDb25uZWN0ZWQsIG9wZW5haUNyZWRlbnRpYWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVuYWktYXV0aC5qcydcbmltcG9ydCB7IGRlZmF1bHRNb2RlbCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbW9kZWxzLmpzJ1xuaW1wb3J0IHsgZnV6enlTY29yZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxSdW50aW1lKCkge1xuICBjb25zdCBjaGF0Z3B0ID0gYXdhaXQgb3BlbmFpQ29ubmVjdGVkKClcbiAgY29uc3QgcHJvdmlkZXJzID0gWy4uLmFwcGx5S2V5cyhkaXNjb3ZlcktleXMoKSksIC4uLihjaGF0Z3B0ID8gWydjb2RleCddIDogW10pXVxuICBjb25zdCBjYXRhbG9nRGF0YSA9IGF3YWl0IGxvYWRDYXRhbG9nKClcbiAgY29uc3QgY29kZXhDcmVkZW50aWFscyA9IGNoYXRncHQgPyBhd2FpdCBvcGVuYWlDcmVkZW50aWFscygpLmNhdGNoKCgpID0+IG51bGwpIDogbnVsbFxuICBjb25zdCBtb2RlbHMgPSBbXG4gICAgLi4uZXh0cmFjdE1vZGVscyhjYXRhbG9nRGF0YSwgWydnb29nbGUnLCAnYW50aHJvcGljJywgJ29wZW5haScsICd4YWknXSkubWFwKChtb2RlbCkgPT4gKHtcbiAgICAgIC4uLm1vZGVsLFxuICAgICAgYXZhaWxhYmxlOiBwcm92aWRlcnMuaW5jbHVkZXMobW9kZWwucHJvdmlkZXIpLFxuICAgIH0pKSxcbiAgICAuLi4oYXdhaXQgbG9hZENvZGV4TW9kZWxzKGNvZGV4Q3JlZGVudGlhbHMpKS5tYXAoKG1vZGVsKSA9PiAoeyAuLi5tb2RlbCwgYXZhaWxhYmxlOiBjaGF0Z3B0IH0pKSxcbiAgXVxuICByZXR1cm4geyBwcm92aWRlcnMsIG1vZGVscywgY29kZXhDcmVkZW50aWFscyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIG5hbWUpIHtcbiAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbFxuICBjb25zdCBleGFjdCA9IG1vZGVscy5maW5kKChtb2RlbCkgPT4gbW9kZWwubmFtZSA9PT0gbmFtZSlcbiAgaWYgKGV4YWN0KSByZXR1cm4gZXhhY3RcbiAgaWYgKG5hbWUuaW5jbHVkZXMoJy8nKSkgcmV0dXJuIGFkaG9jTW9kZWwobmFtZSwgcHJvdmlkZXJzKVxuICBjb25zdCBhdmFpbGFibGUgPSBtb2RlbHMuZmlsdGVyKChtb2RlbCkgPT4gbW9kZWwuYXZhaWxhYmxlICE9PSBmYWxzZSlcbiAgcmV0dXJuIGF2YWlsYWJsZVxuICAgICAgLm1hcCgobW9kZWwpID0+IFtmdXp6eVNjb3JlKG5hbWUsIG1vZGVsLm5hbWUpLCBtb2RlbF0pXG4gICAgICAuZmlsdGVyKChbc2NvcmVdKSA9PiBzY29yZSA+PSAwKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMF0gLSBhWzBdKVswXT8uWzFdXG4gICAgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0TW9kZWwoeyBtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkLCBjb25maWd1cmVkIH0pIHtcbiAgcmV0dXJuIHJlc29sdmVNb2RlbChtb2RlbHMsIHByb3ZpZGVycywgcmVxdWVzdGVkKVxuICAgIHx8IChjb25maWd1cmVkICYmIG1vZGVscy5maW5kKChtb2RlbCkgPT4gbW9kZWwubmFtZSA9PT0gY29uZmlndXJlZCAmJiBtb2RlbC5hdmFpbGFibGUpKVxuICAgIHx8IGRlZmF1bHRNb2RlbChtb2RlbHMpXG59XG4iLCAiaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBydW5UdXJuIH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC5qcydcbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IGxvYWRNb2RlbFJ1bnRpbWUsIHNlbGVjdE1vZGVsIH0gZnJvbSAnLi9tb2RlbC1ydW50aW1lLmpzJ1xuXG5jb25zdCBTWVNURU0gPSAoeyBwbGF0Zm9ybSwgc2hlbGwsIGN3ZCB9KSA9PiBgR2VuZXJhdGUgZXhhY3RseSBvbmUgc2hlbGwgY29tbWFuZCB0aGF0IHNhdGlzZmllcyB0aGUgdXNlcidzIHJlcXVlc3QuIFRoZSBvdXRwdXQgbXVzdCBiZSBhIHZhbGlkIHNoZWxsIGNvbW1hbmQgd2l0aG91dCBNYXJrZG93biBmb3JtYXR0aW5nLiBJZiBtdWx0aXBsZSBzdGVwcyBhcmUgcmVxdWlyZWQsIHRyeSB0byBjb21iaW5lIHRoZW0gdG9nZXRoZXIgdXNpbmcgJiYuXG5cbkVudmlyb25tZW50OlxuLSBvcGVyYXRpbmcgc3lzdGVtOiAke3BsYXRmb3JtfVxuLSBzaGVsbDogJHtzaGVsbH1cbi0gY3VycmVudCBkaXJlY3Rvcnk6ICR7Y3dkfVxuXG5PdXRwdXQgb25seSB0aGUgY29tbWFuZCBhcyBvbmUgbGluZS4gRG8gbm90IHVzZSBNYXJrZG93biBmb3JtYXR0aW5nIHN1Y2ggYXMgXFxgXFxgXFxgLiBEbyBub3QgZXhwbGFpbiB0aGUgY29tbWFuZC4gRG8gbm90IGV4ZWN1dGUgdGhlIGNvbW1hbmQuYFxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEZyb21SZXNwb25zZSh0ZXh0KSB7XG4gIGNvbnN0IGNvbW1hbmQgPSB0ZXh0LnRyaW0oKVxuICBpZiAoIWNvbW1hbmQpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIGFuIGVtcHR5IGNvbW1hbmQnKVxuICBpZiAoY29tbWFuZC5pbmNsdWRlcygnXFwwJykgfHwgL1tcXHJcXG5dLy50ZXN0KGNvbW1hbmQpKSB0aHJvdyBuZXcgRXJyb3IoJ3RoZSBtb2RlbCByZXR1cm5lZCBtb3JlIHRoYW4gb25lIGxpbmUnKVxuICBpZiAoY29tbWFuZC5pbmNsdWRlcygnYGBgJykpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIE1hcmtkb3duIGluc3RlYWQgb2YgYSBjb21tYW5kJylcbiAgcmV0dXJuIGNvbW1hbmRcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blNoZWxsKG9wdHMsIGRlcGVuZGVuY2llcyA9IHt9KSB7XG4gIGNvbnN0IHN0ZGVyciA9IGRlcGVuZGVuY2llcy5zdGRlcnIgfHwgcHJvY2Vzcy5zdGRlcnJcbiAgY29uc3Qgc3Rkb3V0ID0gZGVwZW5kZW5jaWVzLnN0ZG91dCB8fCBwcm9jZXNzLnN0ZG91dFxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IChkZXBlbmRlbmNpZXMucmVhZENvbmZpZyB8fCByZWFkQ29uZmlnKSgpXG4gICAgY29uc3QgcnVudGltZSA9IGF3YWl0IChkZXBlbmRlbmNpZXMubG9hZE1vZGVsUnVudGltZSB8fCBsb2FkTW9kZWxSdW50aW1lKSgpXG4gICAgaWYgKHJ1bnRpbWUucHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdubyBjcmVkZW50aWFscyBmb3VuZCAoc2V0IGEgcHJvdmlkZXIga2V5IG9yIHJ1biBwaWNvIC0tY29ubmVjdCknKVxuXG4gICAgY29uc3QgY29uZmlndXJlZE1vZGVsID0gY29uZmlnLm1vZGVscz8uc2hlbGxcbiAgICBjb25zdCBtb2RlbCA9IHNlbGVjdE1vZGVsKHtcbiAgICAgIG1vZGVsczogcnVudGltZS5tb2RlbHMsXG4gICAgICBwcm92aWRlcnM6IHJ1bnRpbWUucHJvdmlkZXJzLFxuICAgICAgcmVxdWVzdGVkOiBvcHRzLm1vZGVsLFxuICAgICAgY29uZmlndXJlZDogY29uZmlndXJlZE1vZGVsIHx8IGNvbmZpZy5kZWZhdWx0TW9kZWwsXG4gICAgfSlcbiAgICBjb25zdCByZXF1ZXN0ZWROYW1lID0gb3B0cy5tb2RlbCB8fCBjb25maWd1cmVkTW9kZWxcbiAgICBpZiAoIW1vZGVsIHx8IG1vZGVsLmF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gdXNhYmxlIG1vZGVsJHtyZXF1ZXN0ZWROYW1lID8gYCBtYXRjaGluZyBcIiR7cmVxdWVzdGVkTmFtZX1cImAgOiAnJ31gKVxuICAgIH1cblxuICAgIGNvbnN0IGF1dGggPSBtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyA/IHJ1bnRpbWUuY29kZXhDcmVkZW50aWFscyA6IG51bGxcbiAgICBpZiAobW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcgJiYgIWF1dGgpIHRocm93IG5ldyBFcnJvcignY29kZXggbW9kZWxzIG5lZWQgYSBDaGF0R1BUIHNpZ24taW4gKHJ1biBwaWNvIC0tY29ubmVjdCknKVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKGRlcGVuZGVuY2llcy5ydW5UdXJuIHx8IHJ1blR1cm4pKHtcbiAgICAgIGhpc3Rvcnk6IFt7IHJvbGU6ICd1c2VyJywgY29udGVudDogb3B0cy5wcm9tcHQgfV0sXG4gICAgICB0b29sczogW10sXG4gICAgICByZWNvcmRlcjogbnVsbCxcbiAgICAgIG1vZGVsTmFtZTogbW9kZWwubmFtZSxcbiAgICAgIGVmZm9ydDogb3B0cy5lZmZvcnQgPz8gKG1vZGVsLmVmZm9ydCA/ICdsb3cnIDogbnVsbCksXG4gICAgICBhdXRoLFxuICAgICAgc3lzdGVtOiBTWVNURU0oe1xuICAgICAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicgPyAnbWFjT1MnIDogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgICAgc2hlbGw6IGJhc2VuYW1lKHByb2Nlc3MuZW52LlNIRUxMIHx8ICd6c2gnKSxcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgfSksXG4gICAgfSlcbiAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yKVxuICAgIGlmIChyZXN1bHQuaW50ZXJydXB0ZWQpIHRocm93IG5ldyBFcnJvcignY29tbWFuZCBnZW5lcmF0aW9uIHdhcyBpbnRlcnJ1cHRlZCcpXG4gICAgY29uc3QgdGV4dCA9IHJlc3VsdC5tZXNzYWdlc1xuICAgICAgLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50JyAmJiB0eXBlb2YgbWVzc2FnZS5jb250ZW50ID09PSAnc3RyaW5nJylcbiAgICAgIC5hdCgtMSk/LmNvbnRlbnQgfHwgJydcbiAgICBzdGRvdXQud3JpdGUoY29tbWFuZEZyb21SZXNwb25zZSh0ZXh0KSArICdcXG4nKVxuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3RkZXJyLndyaXRlKGBwaWNvOiAke2Vycm9yLm1lc3NhZ2V9XFxuYClcbiAgICByZXR1cm4gMVxuICB9XG59XG4iLCAiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IG1vdW50IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgcGFyc2VBcmdzLCBVU0FHRSB9IGZyb20gJy4vY2xpLWFyZ3MuanMnXG5pbXBvcnQgeyBkaXNjb3ZlcktleXMsIGFwcGx5S2V5cywga2V5SGludCB9IGZyb20gJ3BpY29jb2RlLWNvcmUva2V5cy5qcydcbmltcG9ydCB7IGRlZmF1bHRNb2RlbCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbW9kZWxzLmpzJ1xuaW1wb3J0IHsgbG9hZENhdGFsb2csIGV4dHJhY3RNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NhdGFsb2cuanMnXG5pbXBvcnQgeyBsb2FkQ29kZXhNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvZGV4LW1vZGVscy5qcydcbmltcG9ydCB7IG9wZW5haUNvbm5lY3RlZCwgb3BlbmFpQ3JlZGVudGlhbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgZGV0ZWN0VGVybWluYWxUaGVtZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdGVybWluYWwtdGhlbWUuanMnXG5pbXBvcnQgeyBidWlsZFByb2plY3RCb290IH0gZnJvbSAncGljb2NvZGUtY29yZS9ib290LmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2hlbGxNYW5hZ2VyIH0gZnJvbSAncGljb2NvZGUtY29yZS9zaGVsbHMuanMnXG5pbXBvcnQgeyBjcmVhdGVXYWtldXBNYW5hZ2VyIH0gZnJvbSAncGljb2NvZGUtY29yZS93YWtldXBzLmpzJ1xuaW1wb3J0IHsgY3JlYXRlR2l0U2VydmljZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZ2l0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlQ29udHJvbGxlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udHJvbGxlci5qcydcbmltcG9ydCB7IEFwcCB9IGZyb20gJy4vdWkvYXBwLmpzeCdcbmltcG9ydCB7IERFRkFVTFRfQUNDRU5ULCBNVVRFRCwgc2V0UGFsZXR0ZSwgcGFsZXR0ZUxpc3QgfSBmcm9tICcuL3VpL3RoZW1lLmpzJ1xuXG5jb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhuZXcgVVJMKCcuLi9wYWNrYWdlLmpzb24nLCBpbXBvcnQubWV0YS51cmwpLCAndXRmLTgnKSlcblxubGV0IGNsaVxudHJ5IHtcbiAgY2xpID0gcGFyc2VBcmdzKHByb2Nlc3MuYXJndi5zbGljZSgyKSlcbn0gY2F0Y2ggKGVycikge1xuICBjb25zb2xlLmVycm9yKGBwaWNvOiAke2Vyci5tZXNzYWdlfWApXG4gIGNvbnNvbGUuZXJyb3IoVVNBR0UpXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuaWYgKGNsaS5tb2RlID09PSAnaGVscCcpIHtcbiAgY29uc29sZS5sb2coVVNBR0UpXG4gIHByb2Nlc3MuZXhpdCgwKVxufVxuaWYgKGNsaS5tb2RlID09PSAndmVyc2lvbicpIHtcbiAgY29uc29sZS5sb2cocGtnLnZlcnNpb24pXG4gIHByb2Nlc3MuZXhpdCgwKVxufVxuaWYgKGNsaS5tb2RlID09PSAndXBkYXRlJykge1xuICBjb25zdCB7IGlzRGV2SW5zdGFsbCwgcnVuVXBkYXRlLCBmZXRjaExhdGVzdFZlcnNpb24sIG5ld2VyVmVyc2lvbiB9ID0gYXdhaXQgaW1wb3J0KCdwaWNvY29kZS1jb3JlL3VwZGF0ZS5qcycpXG4gIGlmIChpc0Rldkluc3RhbGwoaW1wb3J0Lm1ldGEudXJsKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ3RoaXMgcGljbyBydW5zIGZyb20gYSBzb3VyY2UgY2hlY2tvdXQ7IHVwZGF0ZSBpdCB3aXRoIGdpdCwgbm90IG5wbScpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG4gIH1cbiAgY29uc3QgbGF0ZXN0ID0gYXdhaXQgZmV0Y2hMYXRlc3RWZXJzaW9uKCkuY2F0Y2goKCkgPT4gbnVsbClcbiAgaWYgKGxhdGVzdCAmJiAhbmV3ZXJWZXJzaW9uKHBrZy52ZXJzaW9uLCBsYXRlc3QpKSB7XG4gICAgY29uc29sZS5sb2coYHBpY28gdiR7cGtnLnZlcnNpb259IGlzIGFscmVhZHkgdGhlIGxhdGVzdGApXG4gICAgcHJvY2Vzcy5leGl0KDApXG4gIH1cbiAgY29uc29sZS5lcnJvcihgdXBkYXRpbmcgcGljb2NvZGUgJHtsYXRlc3QgPyBgdG8gdiR7bGF0ZXN0fSBgIDogJyd9dmlhIG5wbS4uLmApXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1blVwZGF0ZSgpXG4gIGlmIChyZXN1bHQub2spIHtcbiAgICBjb25zb2xlLmxvZyhgdXBkYXRlZCR7bGF0ZXN0ID8gYCB0byB2JHtsYXRlc3R9YCA6ICcnfWApXG4gICAgcHJvY2Vzcy5leGl0KDApXG4gIH1cbiAgY29uc29sZS5lcnJvcihgdXBkYXRlIGZhaWxlZDpcXG4ke3Jlc3VsdC5vdXRwdXR9YClcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdjb25uZWN0Jykge1xuICBjb25zdCB7IGNvbm5lY3RPcGVuQUkgfSA9IGF3YWl0IGltcG9ydCgncGljb2NvZGUtY29yZS9vcGVuYWktYXV0aC5qcycpXG4gIHRyeSB7XG4gICAgY29uc29sZS5lcnJvcignb3BlbmluZyB5b3VyIGJyb3dzZXIgZm9yIENoYXRHUFQgc2lnbi1pbi4uLicpXG4gICAgY29uc3QgeyBlbWFpbCB9ID0gYXdhaXQgY29ubmVjdE9wZW5BSSh7IG9uVXJsOiAodXJsKSA9PiBjb25zb2xlLmVycm9yKGBpZiB0aGUgYnJvd3NlciBkaWQgbm90IG9wZW4sIHZpc2l0OlxcbiR7dXJsfWApIH0pXG4gICAgY29uc29sZS5sb2coYGNvbm5lY3RlZCBhcyAke2VtYWlsIHx8ICd5b3VyIENoYXRHUFQgYWNjb3VudCd9YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcihgY29ubmVjdCBmYWlsZWQ6ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxufVxuaWYgKGNsaS5tb2RlID09PSAnaGVhZGxlc3MnKSB7XG4gIGNvbnN0IHsgcnVuSGVhZGxlc3MgfSA9IGF3YWl0IGltcG9ydCgnLi9oZWFkbGVzcy5qcycpXG4gIHByb2Nlc3MuZXhpdChhd2FpdCBydW5IZWFkbGVzcyhjbGkpKVxufVxuaWYgKGNsaS5tb2RlID09PSAnc2hlbGwnKSB7XG4gIGNvbnN0IHsgcnVuU2hlbGwgfSA9IGF3YWl0IGltcG9ydCgnLi9zaGVsbC5qcycpXG4gIHByb2Nlc3MuZXhpdChhd2FpdCBydW5TaGVsbChjbGkpKVxufVxuXG5jb25zdCBrZXlzID0gZGlzY292ZXJLZXlzKClcbmNvbnN0IGNoYXRncHQgPSBhd2FpdCBvcGVuYWlDb25uZWN0ZWQoKVxuY29uc3QgcHJvdmlkZXJzID0gWy4uLmFwcGx5S2V5cyhrZXlzKSwgLi4uKGNoYXRncHQgPyBbJ2NvZGV4J10gOiBbXSldXG5jb25zdCBjYXRhbG9nRGF0YSA9IGF3YWl0IGxvYWRDYXRhbG9nKClcbmNvbnN0IGNvZGV4Q3JlZHMgPSBjaGF0Z3B0ID8gYXdhaXQgb3BlbmFpQ3JlZGVudGlhbHMoKS5jYXRjaCgoKSA9PiBudWxsKSA6IG51bGxcbmNvbnN0IG1vZGVscyA9IFtcbiAgLi4uZXh0cmFjdE1vZGVscyhjYXRhbG9nRGF0YSwgWydnb29nbGUnLCAnYW50aHJvcGljJywgJ29wZW5haScsICd4YWknXSkubWFwKChtKSA9PiAoe1xuICAgIC4uLm0sXG4gICAgYXZhaWxhYmxlOiBwcm92aWRlcnMuaW5jbHVkZXMobS5wcm92aWRlciksXG4gICAga2V5SGludDoga2V5SGludChtLnByb3ZpZGVyKSxcbiAgfSkpLFxuICAuLi4oYXdhaXQgbG9hZENvZGV4TW9kZWxzKGNvZGV4Q3JlZHMpKS5tYXAoKG0pID0+ICh7XG4gICAgLi4ubSxcbiAgICBjb250ZXh0OiBtLmNvbnRleHRcbiAgICAgID8/IGNhdGFsb2dEYXRhLm9wZW5haT8ubW9kZWxzPy5bbS5uYW1lLnNwbGl0KCcvJylbMV1dPy5saW1pdD8uaW5wdXRcbiAgICAgID8/IGNhdGFsb2dEYXRhLm9wZW5haT8ubW9kZWxzPy5bbS5uYW1lLnNwbGl0KCcvJylbMV1dPy5saW1pdD8uY29udGV4dFxuICAgICAgPz8gbnVsbCxcbiAgICBhdmFpbGFibGU6IGNoYXRncHQsXG4gICAga2V5SGludDogJy9jb25uZWN0JyxcbiAgfSkpLFxuXVxuXG5pZiAocHJvdmlkZXJzLmxlbmd0aCA9PT0gMCkge1xuICBjb25zb2xlLmVycm9yKCdwaWNvOiBubyBjcmVkZW50aWFscyBmb3VuZC4nKVxuICBjb25zb2xlLmVycm9yKCdzZXQgb25lIG9mOiBHRU1JTklfQVBJX0tFWSwgQU5USFJPUElDX0FQSV9LRVksIE9QRU5BSV9BUElfS0VZLCBYQUlfQVBJX0tFWScpXG4gIGNvbnNvbGUuZXJyb3IoJ29yIHNpZ24gaW4gd2l0aCBhIENoYXRHUFQgcGxhbjogcGljbyAtLWNvbm5lY3QnKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cblxubGV0IG1jcE5vdGlmeSA9ICgpID0+IHt9XG5sZXQgc2hlbGxzTm90aWZ5ID0gKCkgPT4ge31cbmxldCBzaGVsbHNFeGl0ID0gKCkgPT4ge31cbmNvbnN0IHNoZWxscyA9IGNyZWF0ZVNoZWxsTWFuYWdlcih7XG4gIG9uQ2hhbmdlOiAoKSA9PiBzaGVsbHNOb3RpZnkoKSxcbiAgb25FeGl0OiAoc2hlbGwpID0+IHNoZWxsc0V4aXQoc2hlbGwpLFxufSlcbnByb2Nlc3Mub24oJ2V4aXQnLCAoKSA9PiBzaGVsbHMua2lsbEFsbCgpKVxuXG5sZXQgd2FrZXVwc05vdGlmeSA9ICgpID0+IHt9XG5sZXQgd2FrZXVwc0ZpcmUgPSAoKSA9PiB7fVxuY29uc3Qgd2FrZXVwcyA9IGNyZWF0ZVdha2V1cE1hbmFnZXIoe1xuICBvbkNoYW5nZTogKCkgPT4gd2FrZXVwc05vdGlmeSgpLFxuICBvbkZpcmU6ICh3YWtldXApID0+IHdha2V1cHNGaXJlKHdha2V1cCksXG59KVxuXG5sZXQgZ2l0Tm90aWZ5ID0gKCkgPT4ge31cbmNvbnN0IGdpdCA9IGNyZWF0ZUdpdFNlcnZpY2UoeyBvbkNoYW5nZTogKCkgPT4gZ2l0Tm90aWZ5KCkgfSlcbnByb2Nlc3Mub24oJ2V4aXQnLCAoKSA9PiBnaXQuZGlzcG9zZSgpKVxuXG5jb25zdCBib290UHJvamVjdCA9IChjd2QpID0+IGJ1aWxkUHJvamVjdEJvb3QoY3dkLCB7IG9uTWNwQ2hhbmdlOiAoKSA9PiBtY3BOb3RpZnkoKSB9KVxuXG5jb25zdCBjb25maWcgPSBhd2FpdCByZWFkQ29uZmlnKClcbmNvbnN0IGNvbmZpZ3VyZWREZWZhdWx0ID0gY29uZmlnLmRlZmF1bHRNb2RlbCAmJiBtb2RlbHMuZmluZCgobSkgPT4gbS5uYW1lID09PSBjb25maWcuZGVmYXVsdE1vZGVsKVxuXG5jb25zdCBkZXRlY3RlZFRoZW1lID0gYXdhaXQgZGV0ZWN0VGVybWluYWxUaGVtZSgpXG5jb25zdCB0aGVtZU92ZXJyaWRlID0gcGFsZXR0ZUxpc3QoKS5zb21lKChwKSA9PiBwLmtleSA9PT0gY29uZmlnLnRoZW1lKSA/IGNvbmZpZy50aGVtZSA6IG51bGxcbnNldFBhbGV0dGUodGhlbWVPdmVycmlkZSB8fCBkZXRlY3RlZFRoZW1lKVxuY29uc3QgdGhlbWUgPSB7IGFjY2VudDogREVGQVVMVF9BQ0NFTlQsIG11dGVkOiBNVVRFRCB9XG5cbmNvbnN0IGJvb3QgPSB7XG4gIC4uLihhd2FpdCBib290UHJvamVjdChwcm9jZXNzLmN3ZCgpKSksXG4gIHRoZW1lLFxuICB2ZXJzaW9uOiBwa2cudmVyc2lvbixcbiAgbW9kZWxzLFxuICBwcm92aWRlcnMsXG4gIGluaXRpYWxNb2RlbDogY29uZmlndXJlZERlZmF1bHQgfHwgZGVmYXVsdE1vZGVsKG1vZGVscyksXG4gIHJlc2VhcmNoTW9kZWw6IGNvbmZpZy5tb2RlbHM/LnJlc2VhcmNoV29ya2VyIHx8IG51bGwsXG4gIHNoZWxsTW9kZWw6IGNvbmZpZy5tb2RlbHM/LnNoZWxsIHx8IG51bGwsXG4gIHBhcnRpY2lwYW50QU1vZGVsOiBjb25maWcubW9kZWxzPy5wYXJ0aWNpcGFudEEgfHwgbnVsbCxcbiAgcGFydGljaXBhbnRCTW9kZWw6IGNvbmZpZy5tb2RlbHM/LnBhcnRpY2lwYW50QiB8fCBudWxsLFxuICBkZWxpYmVyYXRpb25Nb2RlbDogY29uZmlnLm1vZGVscz8uZGVsaWJlcmF0aW9uIHx8IGNvbmZpZy5tb2RlbHM/LnJlc2VhcmNoV29ya2VyIHx8IG51bGwsXG4gIHJlc2VhcmNoQWdlbnRMaW1pdDogTnVtYmVyLmlzSW50ZWdlcihjb25maWcucmVzZWFyY2g/LmFnZW50TGltaXQpICYmIGNvbmZpZy5yZXNlYXJjaC5hZ2VudExpbWl0ID49IDEgJiYgY29uZmlnLnJlc2VhcmNoLmFnZW50TGltaXQgPD0gMTAwXG4gICAgPyBjb25maWcucmVzZWFyY2guYWdlbnRMaW1pdFxuICAgIDogMTAsXG4gIGRldGVjdGVkVGhlbWUsXG4gIHRoZW1lUHJlZjogdGhlbWVPdmVycmlkZSB8fCAnYXV0bycsXG4gIGluaXRpYWxFZmZvcnQ6IFsnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddLmluY2x1ZGVzKGNvbmZpZy5kZWZhdWx0RWZmb3J0KSA/IGNvbmZpZy5kZWZhdWx0RWZmb3J0IDogbnVsbCxcbiAgYXV0b0NvbXBhY3Q6IGNvbmZpZy5hdXRvQ29tcGFjdCAhPT0gZmFsc2UsXG4gIGNsb3VkczogY29uZmlnLmFuaW1hdGlvbj8uY2xvdWRzID09PSB0cnVlLFxuICBjb21wYWN0VG9vbEhpc3Rvcnk6IGNvbmZpZy5kaXNwbGF5Py5jb21wYWN0VG9vbEhpc3RvcnkgPT09IHRydWUsXG4gIGdpdEZvb3RlcjogY29uZmlnLmRpc3BsYXk/LmdpdFN0YXR1cyAhPT0gZmFsc2UsXG4gIHdpZGVTaWRlYmFyOiBjb25maWcuZGlzcGxheT8ud2lkZVNpZGViYXIgIT09IGZhbHNlLFxuICByZWZzOiB7fSxcbiAgc2hlbGxzLFxuICB3YWtldXBzLFxuICBnaXQsXG4gIHNldE1jcE5vdGlmeTogKGZuKSA9PiB7IG1jcE5vdGlmeSA9IGZuIH0sXG4gIHNldEdpdE5vdGlmeTogKGZuKSA9PiB7IGdpdE5vdGlmeSA9IGZuIH0sXG4gIHNldFNoZWxsc05vdGlmeTogKGZuKSA9PiB7IHNoZWxsc05vdGlmeSA9IGZuIH0sXG4gIHNldFNoZWxsc0V4aXQ6IChmbikgPT4geyBzaGVsbHNFeGl0ID0gZm4gfSxcbiAgc2V0V2FrZXVwc05vdGlmeTogKGZuKSA9PiB7IHdha2V1cHNOb3RpZnkgPSBmbiB9LFxuICBzZXRXYWtldXBzRmlyZTogKGZuKSA9PiB7IHdha2V1cHNGaXJlID0gZm4gfSxcbiAgcmVidWlsZDogYm9vdFByb2plY3QsXG59XG5cbmdpdC5yZXRhcmdldChib290LnJvb3QpXG5naXQuc2V0RW5hYmxlZChib290LmdpdEZvb3RlcilcblxuY29uc3QgY29udHJvbGxlciA9IGNyZWF0ZUNvbnRyb2xsZXIoeyBib290IH0pXG5jb25zdCBhcHAgPSBtb3VudCgoKSA9PiA8QXBwIGJvb3Q9e2Jvb3R9IGNvbnRyb2xsZXI9e2NvbnRyb2xsZXJ9IC8+LCB7IHRpdGxlOiBgcGljbyAgJHtib290LnJvb3Quc3BsaXQoJy8nKS5wb3AoKX1gLCB0aGVtZSB9KVxuYm9vdC5zZXRUaGVtZSA9IGFwcC5zZXRUaGVtZVxuYm9vdC5tY3AuY29ubmVjdEFsbCgpXG4iLCAiZXhwb3J0IGNvbnN0IFVTQUdFID0gYHBpY28gLSBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsXG5cbnVzYWdlOlxuICBwaWNvICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSBzZXNzaW9uIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICBwaWNvIC1wIFwicHJvbXB0XCIgICAgICAgICAgIGhlYWRsZXNzOiBydW4gb25lIGFnZW50aWMgdHVybiwgcHJpbnQgdGhlIGFuc3dlclxuICBwaWNvIC1zIFwicmVxdWVzdFwiICAgICAgICAgIGdlbmVyYXRlIG9uZSBzaGVsbCBjb21tYW5kLCB3aXRob3V0IHJ1bm5pbmcgaXRcbiAgY2F0IGxvZyB8IHBpY28gLXAgXCIuLi5cIiAgICBzdGRpbiBpcyBhcHBlbmRlZCB0byB0aGUgcHJvbXB0IGFzIGNvbnRleHRcblxuY29tbWFuZCBmbGFnczpcbiAgLXAsIC0tcHJpbnQgPHByb21wdD4gICAgICAgcnVuIG9uZSBhZ2VudGljIHR1cm4gYW5kIHByaW50IHRoZSBhbnN3ZXJcbiAgLXMsIC0tc2hlbGwgPHJlcXVlc3Q+ICAgICAgcHJpbnQgb25lIGdlbmVyYXRlZCBzaGVsbCBjb21tYW5kXG4gIC0tanNvbiAgICAgICAgICAgICAgICAgICAgIHByaW50IGEgc2luZ2xlIEpTT04gcmVzdWx0IG9iamVjdCB0byBzdGRvdXRcbiAgLS1zdHJlYW0tanNvbiAgICAgICAgICAgICAgc3RyZWFtIHNlc3Npb24gZXZlbnRzIHRvIHN0ZG91dCBhcyBqc29ubFxuICAtbSwgLS1tb2RlbCA8bmFtZT4gICAgICAgICBtb2RlbCB0byB1c2UgKGZ1enp5IG1hdGNoZWQsIG9yIHJhdyBwcm92aWRlci9tb2RlbClcbiAgLS1lZmZvcnQgPGxldmVsPiAgICAgICAgICAgdGhpbmtpbmcgZWZmb3J0OiBhdXRvfGxvd3xtZWRpdW18aGlnaHxtYXhcbiAgLS1yZXN1bWUgPHNlc3Npb24taWQ+ICAgICAgY29udGludWUgYW4gZXhpc3Rpbmcgc2Vzc2lvbiBmcm9tIHRoaXMgcHJvamVjdFxuICAtLW1heC10b29sLWNhbGxzIDxuPiAgICAgICBzdG9wIHRoZSBhZ2VudCBhZnRlciBuIHRvb2wgY2FsbHMgKGRlZmF1bHQgNTApXG4gIC1xLCAtLXF1aWV0ICAgICAgICAgICAgICAgIG5vIHByb2dyZXNzIG91dHB1dCBvbiBzdGRlcnJcblxuICAtLWNvbm5lY3QgICAgICAgICAgICAgICAgICBzaWduIGluIHdpdGggYSBDaGF0R1BUIHBsYW4gKE9BdXRoIGluIHlvdXIgYnJvd3NlcilcbiAgdXBkYXRlLCAtLXVwZGF0ZSAgICAgICAgICAgdXBkYXRlIHBpY28gdG8gdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gbnBtXG4gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwXG4gIC12LCAtLXZlcnNpb24gICAgICAgICAgICAgIHNob3cgdmVyc2lvbmBcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2KSB7XG4gIGNvbnN0IG9wdHMgPSB7IG1vZGU6ICdpbnRlcmFjdGl2ZScgfVxuICBjb25zdCB0YWtlVmFsdWUgPSAobmFtZSwgaSkgPT4ge1xuICAgIGlmIChpICsgMSA+PSBhcmd2Lmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IHJlcXVpcmVzIGEgdmFsdWVgKVxuICAgIHJldHVybiBhcmd2W2kgKyAxXVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJnID0gYXJndltpXVxuICAgIGlmIChhcmcgPT09ICctcCcgfHwgYXJnID09PSAnLS1wcmludCcpIHtcbiAgICAgIGlmIChvcHRzLm1vZGUgIT09ICdpbnRlcmFjdGl2ZScpIHRocm93IG5ldyBFcnJvcihgJHthcmd9IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgY29tbWFuZCBtb2RlYClcbiAgICAgIG9wdHMubW9kZSA9ICdoZWFkbGVzcydcbiAgICAgIG9wdHMucHJvbXB0ID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLXMnIHx8IGFyZyA9PT0gJy0tc2hlbGwnKSB7XG4gICAgICBpZiAob3B0cy5tb2RlICE9PSAnaW50ZXJhY3RpdmUnKSB0aHJvdyBuZXcgRXJyb3IoYCR7YXJnfSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbm90aGVyIGNvbW1hbmQgbW9kZWApXG4gICAgICBvcHRzLm1vZGUgPSAnc2hlbGwnXG4gICAgICBvcHRzLnByb21wdCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tanNvbicpIG9wdHMuanNvbiA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctLXN0cmVhbS1qc29uJykgb3B0cy5zdHJlYW1Kc29uID0gdHJ1ZVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1tJyB8fCBhcmcgPT09ICctLW1vZGVsJykge1xuICAgICAgb3B0cy5tb2RlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tZWZmb3J0Jykge1xuICAgICAgY29uc3QgbGV2ZWwgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaWYgKCFbJ2F1dG8nLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddLmluY2x1ZGVzKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZWZmb3J0IFwiJHtsZXZlbH1cIjogdXNlIGF1dG98bG93fG1lZGl1bXxoaWdofG1heGApXG4gICAgICB9XG4gICAgICBvcHRzLmVmZm9ydCA9IGxldmVsXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tcmVzdW1lJykge1xuICAgICAgb3B0cy5yZXN1bWUgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLW1heC10b29sLWNhbGxzJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaWYgKCEvXlxcZCskLy50ZXN0KHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKCctLW1heC10b29sLWNhbGxzIHJlcXVpcmVzIGEgcG9zaXRpdmUgaW50ZWdlcicpXG4gICAgICBvcHRzLm1heFRvb2xDYWxscyA9IE51bWJlcih2YWx1ZSlcbiAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIob3B0cy5tYXhUb29sQ2FsbHMpIHx8IG9wdHMubWF4VG9vbENhbGxzIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJy0tbWF4LXRvb2wtY2FsbHMgcmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJylcbiAgICAgIH1cbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1jb25uZWN0Jykgb3B0cy5tb2RlID0gJ2Nvbm5lY3QnXG4gICAgZWxzZSBpZiAoYXJnID09PSAndXBkYXRlJyB8fCBhcmcgPT09ICctLXVwZGF0ZScpIG9wdHMubW9kZSA9ICd1cGRhdGUnXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLXEnIHx8IGFyZyA9PT0gJy0tcXVpZXQnKSBvcHRzLnF1aWV0ID0gdHJ1ZVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1oJyB8fCBhcmcgPT09ICctLWhlbHAnKSBvcHRzLm1vZGUgPSAnaGVscCdcbiAgICBlbHNlIGlmIChhcmcgPT09ICctdicgfHwgYXJnID09PSAnLS12ZXJzaW9uJykgb3B0cy5tb2RlID0gJ3ZlcnNpb24nXG4gICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gYXJndW1lbnQgXCIke2FyZ31cImApXG4gIH1cblxuICBpZiAob3B0cy5tb2RlID09PSAnaGVhZGxlc3MnICYmICFvcHRzLnByb21wdD8udHJpbSgpKSB0aHJvdyBuZXcgRXJyb3IoJy1wIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHByb21wdCcpXG4gIGlmIChvcHRzLm1vZGUgPT09ICdzaGVsbCcpIHtcbiAgICBpZiAoIW9wdHMucHJvbXB0Py50cmltKCkpIHRocm93IG5ldyBFcnJvcignLXMgcmVxdWlyZXMgYSBub24tZW1wdHkgcmVxdWVzdCcpXG4gICAgY29uc3QgaW5jb21wYXRpYmxlID0gW29wdHMuanNvbiAmJiAnLS1qc29uJywgb3B0cy5zdHJlYW1Kc29uICYmICctLXN0cmVhbS1qc29uJywgb3B0cy5yZXN1bWUgJiYgJy0tcmVzdW1lJywgb3B0cy5tYXhUb29sQ2FsbHMgJiYgJy0tbWF4LXRvb2wtY2FsbHMnXS5maW5kKEJvb2xlYW4pXG4gICAgaWYgKGluY29tcGF0aWJsZSkgdGhyb3cgbmV3IEVycm9yKGAke2luY29tcGF0aWJsZX0gY2Fubm90IGJlIHVzZWQgd2l0aCAtLXNoZWxsYClcbiAgfVxuICByZXR1cm4gb3B0c1xufVxuIiwgImltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IHBhcnNlRnJvbnRtYXR0ZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3NraWxscy5qcydcbmltcG9ydCB7IGV4cGFuZENvbW1hbmQsIHBhcnNlQ29tbWFuZEFyZ3VtZW50cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29tbWFuZHMuanMnXG5pbXBvcnQgeyBjb21tYW5kQXQsIHJlcGxhY2VDb21tYW5kLCBjb21tYW5kRmllbGRzIH0gZnJvbSAnLi9jb21wb3Nlci1jb21tYW5kcy5qcydcbmltcG9ydCB7IENvbW1hbmRGb3JtIH0gZnJvbSAnLi9jb21tYW5kLWZvcm0uanN4J1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBjcmVhdGVEaWN0YXRpb24gfSBmcm9tICcuLi9kaWN0YXRpb24uanMnXG5pbXBvcnQgeyByZWFkQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi9jbGlwYm9hcmQuanMnXG5pbXBvcnQgeyBjcmVhdGVDbGlwYm9hcmRJbnB1dCB9IGZyb20gJy4vY2xpcGJvYXJkLWlucHV0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlRGljdGF0aW9uSW5wdXQgfSBmcm9tICcuL2RpY3RhdGlvbi1pbnB1dC5qcydcbmltcG9ydCB7IGNyZWF0ZUNvbXBvc2VyRmlsZXMgfSBmcm9tICcuL2NvbXBvc2VyLWZpbGVzLmpzJ1xuaW1wb3J0IHsgZGljdGF0aW9uSW5kaWNhdG9yLCBhcHBlbmRMZXZlbCB9IGZyb20gJy4vZGljdGF0aW9uLWluZGljYXRvci5qcydcbmltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgTWVudSwgUHJvZ3Jlc3NCYXIsIFNjcm9sbEJveCwgU2hpbW1lciwgU3Bpbm5lciwgVGV4dEFyZWEsIHVzZUZvY3VzLCB1c2VGb2N1c1RyYXAsIHVzZUZyYW1lU3RhdHMsIHVzZUhpdFRlc3QsIHVzZUlucHV0LCB1c2VMYXlvdXQsIHVzZU1vdXNlLCB1c2VSZXNpemUsIHVzZVNlbGVjdGlvbiwgdXNlVG9hc3QgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBtYWtlRXZlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2V2ZW50cy5qcydcbmltcG9ydCB7IGxpc3RTZXNzaW9ucywgZGVsZXRlU2Vzc2lvbiwgZGVsZXRlUHJvamVjdERhdGEgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Nlc3Npb24uanMnXG5pbXBvcnQgeyB1c2VyRW50cmllcywgcmV3aW5kU3RhdHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Rlcml2ZS5qcydcbmltcG9ydCB7IGxvYWRQcm9qZWN0UHJvbXB0cywgbG9hZEdsb2JhbFByb21wdHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2hpc3RvcnkuanMnXG5pbXBvcnQgeyBpbXBsaWNpdFJld2luZFRhcmdldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcmV3aW5kLmpzJ1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uLCBpc0Rldkluc3RhbGwsIHJ1blVwZGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJ1xuaW1wb3J0IHsgU1RFRVJfUk9MRVMsIHN0ZWVyYWJsZVRyYW5zY3JpcHQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3N0ZWVyLmpzJ1xuaW1wb3J0IHsgd3JpdGVDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IG9wZW5haVN0YXR1cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnXG5pbXBvcnQgeyBFRkZPUlRfTEVWRUxTLCBTRVNTSU9OX0NPTE9SUyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udHJvbGxlci5qcydcbmltcG9ydCB7IGFnZW50VHJhbnNjcmlwdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYWdlbnQtdHJhbnNjcmlwdC5qcydcbmltcG9ydCB7IGZ1enp5U2NvcmUgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgY29tcGxldGlvbkNvbnRleHQsIGFwcGx5Q29tcGxldGlvbiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29tcGxldGlvbi5qcydcbmltcG9ydCB7IGV4dHJhY3RJbWFnZVBhdGhzLCBwbGFjZWhvbGRlcml6ZUltYWdlUGF0aHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuaW1wb3J0IHsgbGlzdEZpbGVzIH0gZnJvbSAncGljb2NvZGUtY29yZS9maWxlcy5qcydcbmltcG9ydCB7IGhpZ2hsaWdodFZlcnNpb24gfSBmcm9tICcuL2hpZ2hsaWdodC5qcydcbmltcG9ydCB7IGNvbXBhY3ROdW1iZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Zvcm1hdC5qcydcbmltcG9ydCB7IGNvbnRleHRCYXIgfSBmcm9tICcuL2NvbnRleHQtYmFyLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgRGVsaWJlcmF0aW9uRXhjaGFuZ2UsIE1lc3NhZ2UgfSBmcm9tICcuL3RyYW5zY3JpcHQuanN4J1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uU2VhcmNoQmFyLCBDb252ZXJzYXRpb25TY3JvbGxBbmNob3IsIENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2UsIGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCB9IGZyb20gJy4vY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCdcbmltcG9ydCB7IGNvbXBhY3RUcmFuc2NyaXB0UnVucywgdHJhbnNjcmlwdFdpbmRvdyB9IGZyb20gJy4vdHJhbnNjcmlwdC13aW5kb3cuanMnXG5pbXBvcnQgeyBRdWVzdGlvbkZvcm0gfSBmcm9tICcuL3F1ZXN0aW9uLWZvcm0uanN4J1xuaW1wb3J0IHsgRW1wdHlTdGF0ZSB9IGZyb20gJy4vZW1wdHktc3RhdGUuanN4J1xuaW1wb3J0IHsgSGVscCB9IGZyb20gJy4vaGVscC5qc3gnXG5pbXBvcnQgeyBNb2RlbFBhbmVsLCBFZmZvcnRQYW5lbCwgVGhlbWVQYW5lbCwgQ29uZmlnUGFuZWwsIENvbmZpcm1QYW5lbCwgSGlzdG9yeVBhbmVsLCBSZXdpbmRQaWNrUGFuZWwsIFJld2luZEFjdGlvblBhbmVsLCBSZXN1bWVQYW5lbCwgUHJvamVjdFBhbmVsLCBNY3BQYW5lbCwgTWVtb3J5UGFuZWwsIEluZm9MaXN0UGFuZWwsIFdha2V1cHNQYW5lbCwgQ29ubmVjdFBhbmVsLCB0aW1lQWdvIH0gZnJvbSAnLi9wYW5lbHMuanN4J1xuaW1wb3J0IHsgYWNjZW50LCBzZXRBY2NlbnQsIHNldFBhbGV0dGUsIHBhbGV0dGVOYW1lLCBwYWxldHRlTGlzdCwgREVGQVVMVF9BQ0NFTlQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFJFRCwgR1JFRU4sIEhJR0hMSUdIVCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IENPTU1BTkRTID0gW1xuICB7IG5hbWU6ICdtb2RlbCcsIGRlc2M6ICdTd2l0Y2ggdGhlIGFjdGl2ZSBtb2RlbCBmb3IgdGhpcyBzZXNzaW9uJyB9LFxuICB7IG5hbWU6ICdjb25uZWN0JywgZGVzYzogJ1NpZ24gaW4gd2l0aCBDaGF0R1BUIHRvIHVzZSBhIENvZGV4IHN1YnNjcmlwdGlvbicgfSxcbiAgeyBuYW1lOiAnZWZmb3J0JywgZGVzYzogJ1NldCB0aGUgdGhpbmtpbmcgZWZmb3J0IGZvciB0aGlzIHNlc3Npb24nIH0sXG4gIHsgbmFtZTogJ3Jlc3VtZScsIGRlc2M6ICdQaWNrIHVwIGEgcHJldmlvdXMgc2Vzc2lvbiB3aGVyZSB5b3UgbGVmdCBvZmYnIH0sXG4gIHsgbmFtZTogJ25ldycsIGRlc2M6ICdTdGFydCBhIG5ldyBzZXNzaW9uIGluIHRoaXMgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnZm9yaycsIGRlc2M6ICdGb3JrIHRoaXMgY29udmVyc2F0aW9uIGludG8gYSBuYW1lZCBzZXNzaW9uOiAvZm9yayA8bGFiZWw+JyB9LFxuICB7IG5hbWU6ICdkZWxldGUnLCBkZXNjOiAnUGVybWFuZW50bHkgZGVsZXRlIHRoZSBjdXJyZW50IHNlc3Npb24gYW5kIHN0YXJ0IGZyZXNoJyB9LFxuICB7IG5hbWU6ICdwcm9qZWN0JywgZGVzYzogJ1N3aXRjaCBwcm9qZWN0czoganVtcCB0byBhbm90aGVyIHByb2plY3QsIHNhbWUgYXMgY3RybCtwJyB9LFxuICB7IG5hbWU6ICdjd2QnLCBkZXNjOiAnU2hvdyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgcHJvamVjdCByb290JyB9LFxuICB7IG5hbWU6ICdza2lsbHMnLCBkZXNjOiAnTGlzdCBldmVyeSBza2lsbDogYnVpbHRpbiwgZ2xvYmFsLCBhbmQgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnY29tbWFuZHMnLCBkZXNjOiAnTGlzdCBldmVyeSBjb21tYW5kOiBidWlsdGluLCBnbG9iYWwsIGFuZCBwcm9qZWN0JyB9LFxuICB7IG5hbWU6ICdpbml0JywgZGVzYzogJ0NyZWF0ZSBvciBpbXByb3ZlIHJlcG9zaXRvcnkgQUdFTlRTLm1kIGd1aWRhbmNlJyB9LFxuICB7IG5hbWU6ICd0b29scycsIGRlc2M6ICdMaXN0IGJ1aWx0aW4gYW5kIHVzZXItZGVmaW5lZCB0b29sczsgTUNQIHRvb2xzIGxpdmUgaW4gL21jcCcgfSxcbiAgeyBuYW1lOiAncmV3aW5kJywgZGVzYzogJ1Jlc3RvcmUgdGhlIGNvbnZlcnNhdGlvbiB0byBhIHByZXZpb3VzIG1lc3NhZ2UnIH0sXG4gIHsgbmFtZTogJ3N0ZWVyJywgZGVzYzogJ0VkaXQgb3IgYWRkIGNvbnZlcnNhdGlvbiBtZXNzYWdlcyB3aXRob3V0IHNlbmRpbmcnIH0sXG4gIHsgbmFtZTogJ2hpc3RvcnknLCBkZXNjOiAnU2VhcmNoIHByb21wdHMgeW91IHByZXZpb3VzbHkgc2VudCcgfSxcbiAgeyBuYW1lOiAncmVuYW1lJywgZGVzYzogJ05hbWUgdGhpcyBzZXNzaW9uOyBvbWl0IHRoZSBuYW1lIHRvIHJlc3RvcmUgaXRzIGF1dG9tYXRpYyB0aXRsZScgfSxcbiAgeyBuYW1lOiAnY29sb3InLCBkZXNjOiAnQ29sb3IgdGhpcyBzZXNzaW9uOiAvY29sb3IgPG5hbWUgb3IgI2hleD4sIC9jb2xvciBub25lIHRvIGNsZWFyJyB9LFxuICB7IG5hbWU6ICd0aGVtZScsIGRlc2M6ICdQaWNrIGEgY29sb3IgdGhlbWU7IC90aGVtZSA8bmFtZT4gYXBwbGllcyBvbmUgZGlyZWN0bHknIH0sXG4gIHsgbmFtZTogJ2NvbmZpZycsIGRlc2M6ICdDb25maWd1cmUgcGljbyBkaXNwbGF5IGFuZCBiZWhhdmlvcicgfSxcbiAgeyBuYW1lOiAnbWNwJywgZGVzYzogJ01hbmFnZSBNQ1Agc2VydmVyczogYWRkLCB0b2dnbGUsIHJlY29ubmVjdCcgfSxcbiAgeyBuYW1lOiAncGFyYWxsZWwnLCBkZXNjOiAnUnVuIGEgdGFzayB3aXRoIHBhcmFsbGVsIGFnZW50czogL3BhcmFsbGVsIDx0YXNrPicgfSxcbiAgeyBuYW1lOiAnZGVsaWJlcmF0ZScsIGRlc2M6ICdEZWxpYmVyYXRlIG9uIGEgZGVjaXNpb246IC9kZWxpYmVyYXRlIDxkZWNpc2lvbj4nIH0sXG4gIHsgbmFtZTogJ3dha2V1cHMnLCBkZXNjOiAnVmlldyBhbmQgY2FuY2VsIHNjaGVkdWxlZCB3YWtlLXVwcycgfSxcbiAgeyBuYW1lOiAnbWVtb3J5JywgZGVzYzogJ0Jyb3dzZSBhbmQgbWFuYWdlIHNhdmVkIG1lbW9yaWVzOiBwcm9qZWN0IGFuZCBnbG9iYWwnIH0sXG4gIHsgbmFtZTogJ2NvbXBhY3QnLCBkZXNjOiAnU3VtbWFyaXplIHRoZSBjb252ZXJzYXRpb24gdG8gZnJlZSB0aGUgY29udGV4dCB3aW5kb3cnIH0sXG4gIHsgbmFtZTogJ2NsZWFyJywgZGVzYzogJ0NsZWFyIHRoZSBjb252ZXJzYXRpb24gYW5kIGZyZWUgdGhlIGNvbnRleHQgd2luZG93JyB9LFxuICB7IG5hbWU6ICdjb3N0JywgZGVzYzogJ1Nob3cgdG9rZW4gdXNhZ2UgYW5kIGVzdGltYXRlZCBjb3N0IHNvIGZhcicgfSxcbiAgeyBuYW1lOiAnY29udGV4dCcsIGRlc2M6IFwiU2hvdyB3aGF0J3MgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBhbmQgaG93IGJpZyBlYWNoIHBpZWNlIGlzXCIgfSxcbiAgeyBuYW1lOiAnZXhwb3J0JywgZGVzYzogJ1NhdmUgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIHRvIGEgbWFya2Rvd24gZmlsZScgfSxcbiAgeyBuYW1lOiAndXBkYXRlJywgZGVzYzogJ1VwZGF0ZSBwaWNvIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSBmcm9tIG5wbScgfSxcbiAgeyBuYW1lOiAnaGVscCcsIGRlc2M6ICdMaXN0IGV2ZXJ5IGNvbW1hbmQgYW5kIHdoYXQgaXQgZG9lcycgfSxcbl1cblxuY29uc3QgSElTVE9SWV9TQ09QRVMgPSBbJ3Nlc3Npb24nLCAncHJvamVjdCcsICdldmVyeXdoZXJlJ11cbmNvbnN0IE1FTU9SWV9TQ09QRVMgPSBbJ2FsbCcsICdwcm9qZWN0JywgJ2dsb2JhbCddXG5jb25zdCBTSEVMTF9TVFJJUF9NQVggPSA1XG5jb25zdCBBR0VOVF9TVFJJUF9NQVggPSA1XG5jb25zdCBTVFJJUF9TQ1JPTExPRkYgPSAxXG5cbmZ1bmN0aW9uIHN0cmlwV2luZG93U3RhcnQoY3VycmVudCwgdGFyZ2V0LCBsZW5ndGgsIHNpemUpIHtcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgoMCwgbGVuZ3RoIC0gc2l6ZSlcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjdXJyZW50LCBtYXgpKVxuICBpZiAodGFyZ2V0IDwgMCkgcmV0dXJuIHN0YXJ0XG4gIGlmICh0YXJnZXQgPCBzdGFydCArIFNUUklQX1NDUk9MTE9GRikgcmV0dXJuIE1hdGgubWF4KDAsIHRhcmdldCAtIFNUUklQX1NDUk9MTE9GRilcbiAgaWYgKHRhcmdldCA+PSBzdGFydCArIHNpemUgLSBTVFJJUF9TQ1JPTExPRkYpIHJldHVybiBNYXRoLm1pbihtYXgsIHRhcmdldCAtIHNpemUgKyBTVFJJUF9TQ1JPTExPRkYgKyAxKVxuICByZXR1cm4gc3RhcnRcbn1cblxuXG5mdW5jdGlvbiBhZ2VudEVsYXBzZWQoYWdlbnQsIG5vdyA9IERhdGUubm93KCkpIHtcbiAgaWYgKCFhZ2VudC5zdGFydGVkQXQpIHJldHVybiAnd2FpdGluZydcbiAgY29uc3Qgc2Vjb25kcyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKChhZ2VudC5lbmRlZEF0IHx8IG5vdykgLSBhZ2VudC5zdGFydGVkQXQpIC8gMTAwMCkpXG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MClcbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MClcbiAgaWYgKGhvdXJzKSByZXR1cm4gYCR7aG91cnN9aCAke21pbnV0ZXMgJSA2MH1tYFxuICBpZiAobWludXRlcykgcmV0dXJuIGAke21pbnV0ZXN9bSAke3NlY29uZHMgJSA2MH1zYFxuICByZXR1cm4gYCR7c2Vjb25kc31zYFxufVxuXG5mdW5jdGlvbiBhZ2VudFN0YXR1cyhhZ2VudCkge1xuICBpZiAoYWdlbnQuc3RhdHVzID09PSAncnVubmluZycpIHJldHVybiB7IGljb246ICcnLCBsYWJlbDogJycsIGNvbG9yOiBhY2NlbnQoKSB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdxdWV1ZWQnKSByZXR1cm4geyBpY29uOiAnXHUyNUNDJywgbGFiZWw6ICdxdWV1ZWQnLCBjb2xvcjogTVVURUQgfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAnY29tcGxldGVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MjVDRicsIGxhYmVsOiAnJywgY29sb3I6IEdSRUVOIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHJldHVybiB7IGljb246ICdcdTAwRDcnLCBsYWJlbDogJ2ZhaWxlZCcsIGNvbG9yOiBSRUQgfVxuICByZXR1cm4geyBpY29uOiAnXHUyNUEwJywgbGFiZWw6ICdjYW5jZWxsZWQnLCBjb2xvcjogTVVURUQgfVxufVxuXG5mdW5jdGlvbiBTdGVlck1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBzZWxlY3RlZCwgZm9jdXMgfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICBmb2N1cy5pdGVtKGl0ZW0ubWVzc2FnZUlkLCBsYXlvdXQpXG4gIHJldHVybiA8TWVzc2FnZSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSBzaG93TG9ja2VkIC8+XG59XG5cbmZ1bmN0aW9uIERpY3RhdGlvbktleXMoeyBpbnB1dCB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmIChpbnB1dC5oYW5kbGUoZXZlbnQpKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9KVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBNb3VzZUZvY3VzUmVnaW9uKHsgY2hpbGRyZW4sIG9uUHJlc3MsIC4uLnByb3BzIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnICYmIGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSkpIG9uUHJlc3MoKVxuICB9KVxuICByZXR1cm4gPGJveCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L2JveD5cbn1cblxuZnVuY3Rpb24gQWdlbnRTdHJpcFJvdyh7IHNlbGVjdGVkLCBmb2N1c2VkLCBjaGlsZHJlbiwgb25QcmVzcyB9KSB7XG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBjb25zdCBpbnNpZGUgPSBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpXG4gICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ21vdmUnKSBzZXRIb3ZlcmVkKGluc2lkZSlcbiAgICBpZiAoaW5zaWRlICYmIGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJyAmJiBldmVudC5idXR0b24gPT09ICdsZWZ0Jykge1xuICAgICAgb25QcmVzcygpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogZm9jdXNlZCA/IGFjY2VudCgpIDogbnVsbCwgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogaG92ZXJlZCgpID8gRkdfU09GVCA6IE1VVEVEIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiBzZWxlY3RlZCB9fT57c2VsZWN0ZWQgPyAnXHUyNzZGICcgOiAnICAnfTwvdGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2JveD5cbiAgKVxufVxuXG4vLyBvbmx5IHRoZSBuZXdlc3Qgc2xpY2Ugb2YgYSBsb25nIHRyYW5zY3JpcHQgcmVuZGVyczsgb2xkZXIgaXRlbXMgbG9hZCBpblxuLy8gYmF0Y2hlcyB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgdG8gdGhlIHRvcC4gcmVuZGVyIGNvc3QgaXMgcGVyLWl0ZW0sIHNvIHRoaXNcbi8vIGtlZXBzIGRheS1sb25nIHNlc3Npb25zIGFzIGZhc3QgYXMgZnJlc2ggb25lc1xuY29uc3QgSElTVE9SWV9XSU5ET1cgPSA1MFxuY29uc3QgUkVTVU1FX1NDT1BFUyA9IFsncmVwb3NpdG9yeScsICdjaGVja291dCcsICdldmVyeXdoZXJlJ11cblxuZnVuY3Rpb24gY29sbGFwc2VTdGVlclRvb2xzKGl0ZW1zKSB7XG4gIGNvbnN0IGNvbGxhcHNlZCA9IFtdXG4gIGxldCBoaWRkZW4gPSAwXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgIGlmICghaGlkZGVuKSByZXR1cm5cbiAgICBjb2xsYXBzZWQucHVzaCh7IGtpbmQ6ICdzdGVlci10b29scycsIGNvdW50OiBoaWRkZW4gfSlcbiAgICBoaWRkZW4gPSAwXG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnIHx8IGl0ZW0ua2luZCA9PT0gJ3Rob3VnaHRzJykge1xuICAgICAgaGlkZGVuICs9IGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnID8gaXRlbS5pdGVtcy5sZW5ndGggOiAxXG4gICAgfSBlbHNlIHtcbiAgICAgIGZsdXNoKClcbiAgICAgIGNvbGxhcHNlZC5wdXNoKGl0ZW0pXG4gICAgfVxuICB9XG4gIGZsdXNoKClcbiAgcmV0dXJuIGNvbGxhcHNlZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQXBwKHsgYm9vdCwgY29udHJvbGxlcjogY3RsIH0pIHtcbiAgY29uc3QgeyBjd2QsIHJvb3QsIHZlcnNpb24sIG1vZGVscywgc2tpbGxzLCBtY3AgfSA9IGJvb3RcbiAgY29uc3Qgc3RhdGUgPSBjdGwuc3RhdGVcblxuICBjb25zdCBbZGVyaXZlZCwgc2V0RGVyaXZlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVyaXZlZClcbiAgY29uc3QgW3Rlcm1pbmFsV2lkdGgsIHNldFRlcm1pbmFsV2lkdGhdID0gY3JlYXRlU2lnbmFsKHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApXG4gIHVzZVJlc2l6ZSgoeyB3aWR0aCB9KSA9PiBzZXRUZXJtaW5hbFdpZHRoKHdpZHRoKSlcbiAgY29uc3QgW292ZXJsYXksIHNldE92ZXJsYXldID0gY3JlYXRlU2lnbmFsKHN0YXRlLm92ZXJsYXkpXG4gIGNvbnN0IFtzdHJlYW1pbmcsIHNldFN0cmVhbWluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RyZWFtaW5nKVxuICBjb25zdCBbbGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2VdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmxpdmVVc2FnZSlcbiAgY29uc3QgW3R1cm5QaGFzZSwgc2V0VHVyblBoYXNlXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS50dXJuUGhhc2UpXG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5idXN5KVxuICBjb25zdCBbY29tcGFjdGluZywgc2V0Q29tcGFjdGluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuY29tcGFjdGluZylcbiAgY29uc3QgW2NvbXBhY3RTdGF0dXMsIHNldENvbXBhY3RTdGF0dXNdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmNvbXBhY3RTdGF0dXMpXG4gIGNvbnN0IFtzdGFydGVkQXQsIHNldFN0YXJ0ZWRBdF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RhcnRlZEF0KVxuICBjb25zdCBbaW5wdXQsIHNldElucHV0VmFsdWVdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBjb21wb3NlckZpbGVzID0gYm9vdC5yZWZzLmNvbXBvc2VyRmlsZXMgPz89IGNyZWF0ZUNvbXBvc2VyRmlsZXMoKVxuICBjb25zdCBbaW5wdXRDdXJzb3IsIHNldElucHV0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY29tbWFuZEZvcm0sIHNldENvbW1hbmRGb3JtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBzZXRJbnB1dCA9ICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICBib290LnJlZnMuZHJhZnRSZXZpc2lvbiA9IChib290LnJlZnMuZHJhZnRSZXZpc2lvbiA/PyAwKSArIDFcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXBvc2VyRmlsZXMudXBkYXRlKHRleHQsIHN0YXRlLmF0dGFjaG1lbnRzKVxuICAgIHNldElucHV0VmFsdWUodmFsdWUpXG4gICAgc2V0SW5wdXRDdXJzb3IoY3Vyc29yID8/IHZhbHVlLmxlbmd0aClcbiAgfVxuICBjb25zdCBbZGljdGF0aW9uU3RhdHVzLCBzZXREaWN0YXRpb25TdGF0dXNdID0gY3JlYXRlU2lnbmFsKCdpZGxlJylcbiAgY29uc3QgW2RpY3RhdGlvbkxldmVscywgc2V0RGljdGF0aW9uTGV2ZWxzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW21vZGVsLCBzZXRNb2RlbF0gPSBjcmVhdGVTaWduYWwoc3RhdGUubW9kZWwpXG4gIGNvbnN0IFtkZWZhdWx0TW9kZWwsIHNldERlZmF1bHRNb2RlbF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVmYXVsdE1vZGVsKVxuICBjb25zdCBbZWZmb3J0LCBzZXRFZmZvcnRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmVmZm9ydClcbiAgY29uc3QgW2RlZmF1bHRFZmZvcnQsIHNldERlZmF1bHRFZmZvcnRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmRlZmF1bHRFZmZvcnQpXG4gIGNvbnN0IFtzaG93RWZmb3J0UGFuZWwsIHNldFNob3dFZmZvcnRQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93VGhlbWVQYW5lbCwgc2V0U2hvd1RoZW1lUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0NvbmZpZ1BhbmVsLCBzZXRTaG93Q29uZmlnUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0RlbGV0ZUNvbmZpcm0sIHNldFNob3dEZWxldGVDb25maXJtXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2Nsb3Vkcywgc2V0Q2xvdWRzXSA9IGNyZWF0ZVNpZ25hbChib290LmNsb3VkcylcbiAgY29uc3QgW2NvbXBhY3RUb29sSGlzdG9yeSwgc2V0Q29tcGFjdFRvb2xIaXN0b3J5XSA9IGNyZWF0ZVNpZ25hbChib290LmNvbXBhY3RUb29sSGlzdG9yeSlcbiAgY29uc3QgW2dpdEZvb3Rlciwgc2V0R2l0Rm9vdGVyXSA9IGNyZWF0ZVNpZ25hbChib290LmdpdEZvb3RlcilcbiAgY29uc3QgW3dpZGVTaWRlYmFyLCBzZXRXaWRlU2lkZWJhcl0gPSBjcmVhdGVTaWduYWwoYm9vdC53aWRlU2lkZWJhcilcbiAgY29uc3QgW3Jlc2VhcmNoQWdlbnRMaW1pdCwgc2V0UmVzZWFyY2hBZ2VudExpbWl0XSA9IGNyZWF0ZVNpZ25hbChib290LnJlc2VhcmNoQWdlbnRMaW1pdClcbiAgY29uc3QgW3F1ZXN0aW9uUmVxdWVzdCwgc2V0UXVlc3Rpb25SZXF1ZXN0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWVzdGlvbilcbiAgY29uc3QgW3Nob3dNZW1vcnlQYW5lbCwgc2V0U2hvd01lbW9yeVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW21lbVNjb3BlLCBzZXRNZW1TY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW21lbW9yeUxpc3QsIHNldE1lbW9yeUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbdGhlbWVQcmVmLCBzZXRUaGVtZVByZWZdID0gY3JlYXRlU2lnbmFsKGJvb3QudGhlbWVQcmVmIHx8ICdhdXRvJylcbiAgY29uc3QgW3F1ZXVlZCwgc2V0UXVldWVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5xdWV1ZWQpXG4gIGNvbnN0IFtleHBlZGl0ZWQsIHNldEV4cGVkaXRlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZXhwZWRpdGVkKVxuICBjb25zdCBbc2VudCwgc2V0U2VudF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc2VudClcbiAgY29uc3QgW2hpc3RJZHgsIHNldEhpc3RJZHhdID0gY3JlYXRlU2lnbmFsKC0xKVxuICBjb25zdCBbY21kSW5kZXgsIHNldENtZEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY21kQ3ljbGUsIHNldENtZEN5Y2xlXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbZmlsZUluZGV4LCBzZXRGaWxlSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmaWxlTGlzdCwgc2V0RmlsZUxpc3RdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbZmlsZXNEaXNtaXNzZWQsIHNldEZpbGVzRGlzbWlzc2VkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3ZpZXcsIHNldFZpZXdTaWduYWxdID0gY3JlYXRlU2lnbmFsKCdjaGF0JylcbiAgY29uc3QgW3ZlcmJvc2VdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd01vZGVsUGFuZWwsIHNldFNob3dNb2RlbFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dSZXNlYXJjaE1vZGVsUGFuZWwsIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmVzZWFyY2hNb2RlbFJldHVybiwgc2V0UmVzZWFyY2hNb2RlbFJldHVybl0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3NlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsLCBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RpbmdTaGVsbE1vZGVsLCBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3BhcnRpY2lwYW50TW9kZWxUYXJnZXQsIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwZW5kaW5nUmVzZWFyY2gsIHNldFBlbmRpbmdSZXNlYXJjaF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3BlbmRpbmdEZWxpYmVyYXRpb24sIHNldFBlbmRpbmdEZWxpYmVyYXRpb25dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFthZ2VudHNWZXJzaW9uLCBzZXRBZ2VudHNWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5hY3Rpdml0eVZlcnNpb24pXG4gIGNvbnN0IFt2aWV3ZWRBZ2VudElkLCBzZXRWaWV3ZWRBZ2VudElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbYWdlbnRXaW5kb3dPZmZzZXQsIHNldEFnZW50V2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd0hpc3RvcnlQYW5lbCwgc2V0U2hvd0hpc3RvcnlQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtoaXN0U2NvcGUsIHNldEhpc3RTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2hpc3RQcm9tcHRzLCBzZXRIaXN0UHJvbXB0c10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtzaG93UmVzdW1lUGFuZWwsIHNldFNob3dSZXN1bWVQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXN1bWVTY29wZSwgc2V0UmVzdW1lU2NvcGVdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtyZXN1bWVTZXNzaW9ucywgc2V0UmVzdW1lU2Vzc2lvbnNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbcmVzdW1lTG9hZGluZywgc2V0UmVzdW1lTG9hZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93TWNwUGFuZWwsIHNldFNob3dNY3BQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93UHJvamVjdFBhbmVsLCBzZXRTaG93UHJvamVjdFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2luZm9QYW5lbCwgc2V0SW5mb1BhbmVsXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbdmlld2VkU2hlbGxJZCwgc2V0Vmlld2VkU2hlbGxJZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3NoZWxsV2luZG93T2Zmc2V0LCBzZXRTaGVsbFdpbmRvd09mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Nob3dXYWtldXBzUGFuZWwsIHNldFNob3dXYWtldXBzUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0Nvbm5lY3RQYW5lbCwgc2V0U2hvd0Nvbm5lY3RQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFthdXRoUHJvdmlkZXJzLCBzZXRBdXRoUHJvdmlkZXJzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3NoZWxsc1ZlcnNpb24sIHNldFNoZWxsc1ZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtnaXRWZXJzaW9uLCBzZXRHaXRWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbcHJvamVjdHMsIHNldFByb2plY3RzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3Byb2plY3RzTG9hZGluZywgc2V0UHJvamVjdHNMb2FkaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW21jcFNlcnZlcnMsIHNldE1jcFNlcnZlcnNdID0gY3JlYXRlU2lnbmFsKG1jcC5saXN0KCkpXG4gIGNvbnN0IFtjb21wbGV0aW5nLCBzZXRDb21wbGV0aW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2NvbXBJbmRleCwgc2V0Q29tcEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbcmV3aW5kU3RlcCwgc2V0UmV3aW5kU3RlcF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3Jld2luZFRhcmdldCwgc2V0UmV3aW5kVGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbb2Zmc2V0LCBzZXRPZmZzZXRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmb2xsb3csIHNldEZvbGxvd10gPSBjcmVhdGVTaWduYWwodHJ1ZSlcbiAgY29uc3QgW2hpc3RXaW5kb3csIHNldEhpc3RXaW5kb3ddID0gY3JlYXRlU2lnbmFsKEhJU1RPUllfV0lORE9XKVxuICBjb25zdCBbdHJhbnNjcmlwdE1ldHJpY3MsIHNldFRyYW5zY3JpcHRNZXRyaWNzXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc3RlZXIsIHNldFN0ZWVyXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc3RlZXJUZXh0LCBzZXRTdGVlclRleHRdID0gY3JlYXRlU2lnbmFsKCcnKVxuXG4gIGNvbnN0IHJlZnMgPSBib290LnJlZnNcbiAgcmVmcy5xdWl0QXQgPz89IDBcblxuICBmdW5jdGlvbiBzZXRWaWV3KG5leHQpIHtcbiAgICBzZXRWaWV3U2lnbmFsKG5leHQpXG4gICAgY3RsLmhvbGQobmV4dCAhPT0gJ2NoYXQnKVxuICB9XG5cbiAgLy8gdGhlIGNvbnRyb2xsZXIgb3ducyBldmVyeSBwaWVjZSBvZiBjb252ZXJzYXRpb24gc3RhdGU7IHRoZXNlIHNpZ25hbHNcbiAgLy8gbWlycm9yIGl0IHNvIHRoZSByZW5kZXIgdHJlZSBiZWxvdyBzdGF5cyByZWFjdGl2ZSB3aXRob3V0IGtub3dpbmcgdGhhdFxuICBjb25zdCBtaXJyb3IgPSAoZ2V0LCBzZXQsIHZhbHVlKSA9PiB7XG4gICAgaWYgKGdldCgpICE9PSB2YWx1ZSkgc2V0KHZhbHVlKVxuICB9XG4gIGZ1bmN0aW9uIHN5bmNGcm9tQ29udHJvbGxlcigpIHtcbiAgICBtaXJyb3IoZGVyaXZlZCwgc2V0RGVyaXZlZCwgc3RhdGUuZGVyaXZlZClcbiAgICBtaXJyb3Iob3ZlcmxheSwgc2V0T3ZlcmxheSwgc3RhdGUub3ZlcmxheSlcbiAgICBtaXJyb3Ioc3RyZWFtaW5nLCBzZXRTdHJlYW1pbmcsIHN0YXRlLnN0cmVhbWluZylcbiAgICBtaXJyb3IobGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2UsIHN0YXRlLmxpdmVVc2FnZSlcbiAgICBtaXJyb3IodHVyblBoYXNlLCBzZXRUdXJuUGhhc2UsIHN0YXRlLnR1cm5QaGFzZSlcbiAgICBtaXJyb3IoYnVzeSwgc2V0QnVzeSwgc3RhdGUuYnVzeSlcbiAgICBtaXJyb3IoY29tcGFjdGluZywgc2V0Q29tcGFjdGluZywgc3RhdGUuY29tcGFjdGluZylcbiAgICBtaXJyb3IoY29tcGFjdFN0YXR1cywgc2V0Q29tcGFjdFN0YXR1cywgc3RhdGUuY29tcGFjdFN0YXR1cylcbiAgICBtaXJyb3Ioc3RhcnRlZEF0LCBzZXRTdGFydGVkQXQsIHN0YXRlLnN0YXJ0ZWRBdClcbiAgICBtaXJyb3IobW9kZWwsIHNldE1vZGVsLCBzdGF0ZS5tb2RlbClcbiAgICBtaXJyb3IoZGVmYXVsdE1vZGVsLCBzZXREZWZhdWx0TW9kZWwsIHN0YXRlLmRlZmF1bHRNb2RlbClcbiAgICBtaXJyb3IoZWZmb3J0LCBzZXRFZmZvcnQsIHN0YXRlLmVmZm9ydClcbiAgICBtaXJyb3IoZGVmYXVsdEVmZm9ydCwgc2V0RGVmYXVsdEVmZm9ydCwgc3RhdGUuZGVmYXVsdEVmZm9ydClcbiAgICBtaXJyb3IocXVlc3Rpb25SZXF1ZXN0LCBzZXRRdWVzdGlvblJlcXVlc3QsIHN0YXRlLnF1ZXN0aW9uKVxuICAgIG1pcnJvcihxdWV1ZWQsIHNldFF1ZXVlZCwgc3RhdGUucXVldWVkKVxuICAgIG1pcnJvcihleHBlZGl0ZWQsIHNldEV4cGVkaXRlZCwgc3RhdGUuZXhwZWRpdGVkKVxuICAgIG1pcnJvcihzZW50LCBzZXRTZW50LCBzdGF0ZS5zZW50KVxuICAgIG1pcnJvcihhZ2VudHNWZXJzaW9uLCBzZXRBZ2VudHNWZXJzaW9uLCBzdGF0ZS5hY3Rpdml0eVZlcnNpb24pXG4gIH1cblxuICAvLyB0cmVuZCByZS1ydW5zIHRoaXMgY29tcG9uZW50IG9uIGV2ZXJ5IHNpZ25hbCBjaGFuZ2UsIHNvIHRoZSBjb250cm9sbGVyXG4gIC8vIGlzIHN1YnNjcmliZWQgb25jZSBhbmQgZWFjaCBoYW5kbGVyIHJlYWNoZXMgdGhlIG5ld2VzdCByZW5kZXIgdGhyb3VnaFxuICAvLyByZWZzLnVpLCB3aGljaCBpcyByZXBsYWNlZCBiZWxvdyBvbiBldmVyeSBwYXNzXG4gIHJlZnMudWkgPSB7XG4gICAgc3luYzogc3luY0Zyb21Db250cm9sbGVyLFxuICAgIGZsYXNoOiAobWVzc2FnZSkgPT4gZmxhc2gobWVzc2FnZSksXG4gICAgZGVyaXZlZDogKG5leHQpID0+IHtcbiAgICAgIHNldEFjY2VudChuZXh0LmNvbG9yKVxuICAgICAgYm9vdC5zZXRUaGVtZT8uKHsgYWNjZW50OiBuZXh0LmNvbG9yIHx8IERFRkFVTFRfQUNDRU5ULCBtdXRlZDogTVVURUQgfSlcbiAgICB9LFxuICAgIHF1ZXN0aW9uOiAoKSA9PiB7XG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgZm0uZm9jdXMoJ3F1ZXN0aW9uJylcbiAgICB9LFxuICAgIHR1cm46ICgpID0+IHtcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICB9LFxuICAgIGlucHV0OiAodGV4dCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHNldElucHV0KHRleHQpXG4gICAgfSxcbiAgICBzZXNzaW9uOiAoKSA9PiB7XG4gICAgICBzZXRDb21tYW5kRm9ybShudWxsKVxuICAgICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbFxuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQobnVsbClcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfSxcbiAgICByZXN1bWVkOiAobWV0YSkgPT4gZmxhc2goYHJlc3VtZWQgICR7bWV0YS50dXJuc30gJHttZXRhLnR1cm5zID09PSAxID8gJ3R1cm4nIDogJ3R1cm5zJ30gICR7dGltZUFnbyhtZXRhLmF0KX1gKSxcbiAgICBwcm9qZWN0OiAobmV4dCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXHgxYl0wO3BpY28gICR7bmV4dC5yb290LnNwbGl0KCcvJykucG9wKCl9XFx4MDdgKVxuICAgICAgc2V0TWNwU2VydmVycyhuZXh0Lm1jcC5saXN0KCkpXG4gICAgICBzZXRGaWxlTGlzdChbXSlcbiAgICB9LFxuICAgIG1jcDogKHNlcnZlcnMpID0+IHNldE1jcFNlcnZlcnMoc2VydmVycyksXG4gICAgc2hlbGxzOiAoKSA9PiBzZXRTaGVsbHNWZXJzaW9uKCh2KSA9PiB2ICsgMSksXG4gICAgZ2l0OiAoKSA9PiBzZXRHaXRWZXJzaW9uKCh2KSA9PiB2ICsgMSksXG4gIH1cbiAgaWYgKCFyZWZzLnN1YnNjcmliZWQpIHtcbiAgICByZWZzLnN1YnNjcmliZWQgPSB0cnVlXG4gICAgY3RsLm9uKCdjaGFuZ2UnLCAoKSA9PiByZWZzLnVpLnN5bmMoKSlcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgWydmbGFzaCcsICdkZXJpdmVkJywgJ3F1ZXN0aW9uJywgJ3R1cm4nLCAnaW5wdXQnLCAnc2Vzc2lvbicsICdyZXN1bWVkJywgJ3Byb2plY3QnLCAnbWNwJywgJ3NoZWxscycsICdnaXQnXSkge1xuICAgICAgY3RsLm9uKHR5cGUsIChwYXlsb2FkKSA9PiByZWZzLnVpW3R5cGVdKHBheWxvYWQpKVxuICAgIH1cbiAgfVxuICBzeW5jRnJvbUNvbnRyb2xsZXIoKVxuXG4gIGNvbnN0IHNraWxsQ29tbWFuZHMgPSBza2lsbHMubGlzdCgpLm1hcCgocykgPT4gKHsgbmFtZTogcy5uYW1lLCBkZXNjOiBgc2tpbGwgICR7cy5kZXNjcmlwdGlvbiB8fCBzLnNvdXJjZX1gLCBza2lsbDogdHJ1ZSB9KSlcbiAgY29uc3QgdXNlckNvbW1hbmRzID0gYm9vdC5jb21tYW5kcy5saXN0KCkubWFwKChjKSA9PiAoeyBuYW1lOiBjLm5hbWUsIGRlc2M6IGBjb21tYW5kICAke2MuZGVzY3JpcHRpb24gfHwgYy5zb3VyY2V9YCwgY29tbWFuZDogdHJ1ZSB9KSlcbiAgY29uc3QgYnlOYW1lID0gbmV3IE1hcCgpXG4gIGNvbnN0IHNoYWRvd2VkID0gW11cbiAgZm9yIChjb25zdCBjIG9mIFsuLi5DT01NQU5EUywgLi4uc2tpbGxDb21tYW5kcywgLi4udXNlckNvbW1hbmRzXSkge1xuICAgIGlmIChieU5hbWUuaGFzKGMubmFtZSkpIHNoYWRvd2VkLnB1c2goYCR7Yy5za2lsbCA/ICdza2lsbCcgOiAnY29tbWFuZCd9IFwiJHtjLm5hbWV9XCJgKVxuICAgIGVsc2UgYnlOYW1lLnNldChjLm5hbWUsIGMpXG4gIH1cbiAgY29uc3QgYWxsQ29tbWFuZHMgPSBbLi4uYnlOYW1lLnZhbHVlcygpXVxuICBpZiAoc2hhZG93ZWQubGVuZ3RoICYmICFyZWZzLndhcm5lZFNoYWRvd2VkKSB7XG4gICAgcmVmcy53YXJuZWRTaGFkb3dlZCA9IHRydWVcbiAgICBzZXRUaW1lb3V0KCgpID0+IGZsYXNoKGBzaGFkb3dlZCBieSBhbiBlYXJsaWVyIG5hbWUsIHJlbmFtZSB0byB1c2U6ICR7c2hhZG93ZWQuam9pbignLCAnKX1gKSwgMClcbiAgfVxuXG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3Qoe1xuICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgIHBvc2l0aW9uOiAndG9wLXJpZ2h0JyxcbiAgICByZW5kZXI6IChtZXNzYWdlKSA9PiA8dGV4dCBzdHlsZT17eyBiZzogYWNjZW50KCksIGNvbG9yOiAnYmxhY2snLCBib2xkOiB0cnVlIH19PntgICR7bWVzc2FnZX0gYH08L3RleHQ+LFxuICB9KVxuXG4gIGNvbnN0IHVwZGF0ZVRvYXN0ID0gdXNlVG9hc3Qoe1xuICAgIGR1cmF0aW9uOiA4MDAwLFxuICAgIHBvc2l0aW9uOiAndG9wLWNlbnRlcicsXG4gICAgcmVuZGVyOiAobWVzc2FnZSkgPT4gKFxuICAgICAgPGJveCBzdHlsZT17eyBiZzogYWNjZW50KCkgfX0+XG4gICAgICAgIDxTaGltbWVyIGNvbG9yPVwiYmxhY2tcIiBoaWdobGlnaHQ9e0hJR0hMSUdIVH0gZHVyYXRpb249ezE1MDB9PntgICR7bWVzc2FnZX0gYH08L1NoaW1tZXI+XG4gICAgICA8L2JveD5cbiAgICApLFxuICB9KVxuXG4gIGZ1bmN0aW9uIGZsYXNoKG1zZykge1xuICAgIHRvYXN0KG1zZylcbiAgfVxuXG4gIHJlZnMucGFzdGVJbWFnZSA/Pz0gY3JlYXRlQ2xpcGJvYXJkSW5wdXQoe1xuICAgIHJlYWRJbWFnZTogcmVhZENsaXBib2FyZEltYWdlLFxuICAgIGdldERyYWZ0OiAoKSA9PiAoeyB2YWx1ZTogaW5wdXQoKSwgY3Vyc29yOiBpbnB1dEN1cnNvcigpLCBzZXNzaW9uOiBzdGF0ZS5zZXNzaW9uLCByZXZpc2lvbjogcmVmcy5kcmFmdFJldmlzaW9uIH0pLFxuICAgIGF0dGFjaEltYWdlOiBjdGwuYXR0YWNoSW1hZ2UsXG4gICAgc2V0SW5wdXQsXG4gICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2gobWVzc2FnZSksXG4gIH0pXG5cbiAgaWYgKCFyZWZzLmRpY3RhdGlvbikge1xuICAgIHJlZnMuZGljdGF0aW9uID0gY3JlYXRlRGljdGF0aW9uKHtcbiAgICAgIG9uU3RhdHVzOiAoc3RhdHVzKSA9PiB7XG4gICAgICAgIHNldERpY3RhdGlvblN0YXR1cyhzdGF0dXMpXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSBzZXREaWN0YXRpb25MZXZlbHMoW10pXG4gICAgICB9LFxuICAgICAgb25MZXZlbDogKGxldmVsKSA9PiBzZXREaWN0YXRpb25MZXZlbHMoYXBwZW5kTGV2ZWwoZGljdGF0aW9uTGV2ZWxzKCksIGxldmVsKSksXG4gICAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChgZGljdGF0aW9uIGZhaWxlZDogJHttZXNzYWdlfWApLFxuICAgIH0pXG4gICAgcmVmcy5kaWN0YXRpb25JbnB1dCA9IGNyZWF0ZURpY3RhdGlvbklucHV0KHsgZGljdGF0aW9uOiByZWZzLmRpY3RhdGlvbiwgZ2V0SW5wdXQ6IGlucHV0LCBzZXRJbnB1dCB9KVxuICAgIGNvbnN0IHByZWxvYWQgPSBzZXRJbW1lZGlhdGUoKCkgPT4gcmVmcy5kaWN0YXRpb24ucHJlbG9hZCgpKVxuICAgIHByZWxvYWQudW5yZWYoKVxuICAgIHByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgICAgIGNsZWFySW1tZWRpYXRlKHByZWxvYWQpXG4gICAgICByZWZzLmRpY3RhdGlvbi5kaXNwb3NlKClcbiAgICB9KVxuICAgIGZvciAoY29uc3QgW3NpZ25hbCwgY29kZV0gb2YgW1snU0lHVEVSTScsIDE0M10sIFsnU0lHSFVQJywgMTI5XV0pIHtcbiAgICAgIHByb2Nlc3Mub25jZShzaWduYWwsICgpID0+IHtcbiAgICAgICAgcmVmcy5kaWN0YXRpb24uZGlzcG9zZSgpXG4gICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoIXJlZnMudXBkYXRlQ2hlY2tlZCkge1xuICAgIHJlZnMudXBkYXRlQ2hlY2tlZCA9IHRydWVcbiAgICBjaGVja0ZvclVwZGF0ZSh2ZXJzaW9uKS50aGVuKChmb3VuZCkgPT4ge1xuICAgICAgaWYgKCFmb3VuZCkgcmV0dXJuXG4gICAgICB1cGRhdGVUb2FzdChgcGljbyB2JHtmb3VuZC52ZXJzaW9ufSBhdmFpbGFibGUgIC91cGRhdGVgKVxuICAgICAgZm91bmQubWFya05vdGlmaWVkKClcbiAgICB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgfVxuXG4gIGNvbnN0IHBlcmZvcm1Db21wYWN0aW9uID0gY3RsLmNvbXBhY3RcblxuICBmdW5jdGlvbiBjb21wbGV0aW9uU291cmNlKG5hbWUpIHtcbiAgICBpZiAobmFtZSA9PT0gJ2NvbG9yJykgcmV0dXJuIE9iamVjdC5rZXlzKFNFU1NJT05fQ09MT1JTKVxuICAgIGlmIChuYW1lID09PSAndGhlbWUnKSByZXR1cm4gWy4uLnBhbGV0dGVMaXN0KCkubWFwKChwKSA9PiBwLmtleSksICdhdXRvJ11cbiAgICBpZiAobmFtZSA9PT0gJ2VmZm9ydCcpIHJldHVybiBbJ2RlZmF1bHQnLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddXG4gICAgaWYgKG5hbWUgPT09ICdtb2RlbCcpIHJldHVybiBtb2RlbHMuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpLm1hcCgobSkgPT4gbS5uYW1lKVxuICAgIGNvbnN0IGNtZCA9IGFsbENvbW1hbmRzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoY21kPy5za2lsbCB8fCBjbWQ/LmNvbW1hbmQpIHJldHVybiBmaWxlTGlzdCgpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NDb21wbGV0aW9uKCkge1xuICAgIHNldENvbXBsZXRpbmcoZmFsc2UpXG4gICAgc2V0Q29tcEluZGV4KDApXG4gIH1cblxuICBmdW5jdGlvbiBhY2NlcHRDb21wbGV0aW9uKHZhbHVlLCBjdHgsIGNhbmRpZGF0ZSkge1xuICAgIHNldElucHV0KGFwcGx5Q29tcGxldGlvbih2YWx1ZSwgY3R4LCBjYW5kaWRhdGUpKVxuICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbmQodGV4dCkge1xuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgfHwgdmlld2VkU2hlbGxJZCgpKSByZXR1cm5cbiAgICBjb25zdCB2YWx1ZSA9IHRleHQudHJpbSgpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG4gICAgZGlzbWlzc0NvbXBsZXRpb24oKVxuICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCAuLi5yZXN0XSA9IHZhbHVlLnNsaWNlKDEpLnNwbGl0KC9cXHMrLylcbiAgICAgIGNvbnN0IG1hdGNoID0gYWxsQ29tbWFuZHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgaWYgKG1hdGNoLmNvbW1hbmQpIHJldHVybiBpbnNlcnRDb21tYW5kKG1hdGNoLCB7IHN0YXJ0OiB0ZXh0LmluZGV4T2YoJy8nKSwgZW5kOiB0ZXh0Lmxlbmd0aCB9LCByZXN0LmpvaW4oJyAnKSlcbiAgICAgICAgc2V0SW5wdXQoJycpXG4gICAgICAgIHJ1bkNvbW1hbmQobWF0Y2gsIHJlc3Quam9pbignICcpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgc2V0SGlzdElkeCgtMSlcbiAgICBjb21wb3NlckZpbGVzLnVwZGF0ZSh0ZXh0LCBzdGF0ZS5hdHRhY2htZW50cylcbiAgICBjdGwuc2VuZChjb21wb3NlckZpbGVzLmNvbnRlbnQoKS50cmltKCkpXG4gICAgc2V0SW5wdXQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBpbnRlcnJ1cHQoKSB7XG4gICAgaWYgKCFidXN5KCkpIHJldHVyblxuICAgIGlmIChzdGF0ZS5xdWVzdGlvbikgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IHRydWVcbiAgICBjdGwuaW50ZXJydXB0KClcbiAgfVxuXG4gIGNvbnN0IGZtdFRva2VucyA9IChuKSA9PiAobiA+PSAxMDAwID8gYCR7KG4gLyAxMDAwKS50b0ZpeGVkKDEpfWtgIDogU3RyaW5nKG4pKVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hNZW1vcmllcygpIHtcbiAgICBzZXRNZW1vcnlMaXN0KGF3YWl0IGJvb3QubWVtb3J5Lmxpc3QoKS5jYXRjaCgoKSA9PiBbXSkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB0b2dnbGVNZW1vcnlEaXNhYmxlZChtKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJvb3QubWVtb3J5LnNldERpc2FibGVkKG0sICFtLmRpc2FibGVkKVxuICAgICAgYXdhaXQgcmVmcmVzaE1lbW9yaWVzKClcbiAgICAgIGZsYXNoKGAke20uZGlzYWJsZWQgPyAnZW5hYmxlZCcgOiAnc3VwcHJlc3NlZCd9ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYG1lbW9yeSB1cGRhdGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDEwMCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmb3JnZXRNZW1vcnkobSkge1xuICAgIGNvbnN0IGFybWVkID0gcmVmcy5mb3JnZXRBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG0uZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmZvcmdldEFybSA9IHsgZmlsZTogbS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBmb3JnZXQgXCIke20ubmFtZX1cImApXG4gICAgfVxuICAgIHJlZnMuZm9yZ2V0QXJtID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBib290Lm1lbW9yeS5mb3JnZXQobSlcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICBmbGFzaChgZm9yZ290ICR7bS5uYW1lfSAoJHttLnNjb3BlfSlgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYGZvcmdldCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gb3BlbkNvbnRleHRQYW5lbCgpIHtcbiAgICBjb25zdCB0b2sgPSAobikgPT4gYH4ke2ZtdFRva2VucyhuKX0gdG9rYFxuICAgIGNvbnN0IGJyZWFrZG93biA9IGF3YWl0IGN0bC5jb250ZXh0QnJlYWtkb3duKClcbiAgICBjb25zdCByb3dzID0gYnJlYWtkb3duLnJvd3MubWFwKChyb3cpID0+ICh7IG5hbWU6IHJvdy5uYW1lLCBkZXNjOiByb3cuZGVzYywgbm90ZTogdG9rKHJvdy50b2tlbnMpIH0pKVxuICAgIGlmIChicmVha2Rvd24ubWVhc3VyZWQpIHtcbiAgICAgIHJvd3MucHVzaCh7XG4gICAgICAgIG5hbWU6ICdsYXN0IG1lYXN1cmVkIHJlcXVlc3QnLFxuICAgICAgICBkZXNjOiAncHJvdmlkZXItcmVwb3J0ZWQgaW5wdXQgdG9rZW5zLCB0aGUgbnVtYmVyIGJlaGluZCBjdHggJScsXG4gICAgICAgIG5vdGU6IGAke2JyZWFrZG93bi5tZWFzdXJlZC50b0xvY2FsZVN0cmluZygpfSB0b2tgLFxuICAgICAgfSlcbiAgICB9XG4gICAgc2V0SW5mb1BhbmVsKHtcbiAgICAgIHRpdGxlOiBgQ29udGV4dCAgJHticmVha2Rvd24ubW9kZWx9YCxcbiAgICAgIHJvd3MsXG4gICAgICBvdmVydmlldzogYnJlYWtkb3duLnNlZ21lbnRzLmxlbmd0aCA/IHsgc2VnbWVudHM6IGJyZWFrZG93bi5zZWdtZW50cywgbWVhc3VyZWQ6IGJyZWFrZG93bi5tZWFzdXJlZCwgbGltaXQ6IGJyZWFrZG93bi5saW1pdCA/PyBtb2RlbCgpLmNvbnRleHQgfSA6IG51bGwsXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHRoZW1lSXRlbXMgPSAoKSA9PiBbXG4gICAgLi4ucGFsZXR0ZUxpc3QoKSxcbiAgICB7IGtleTogJ2F1dG8nLCBkZXNjOiBgZm9sbG93IHRoZSB0ZXJtaW5hbCAoZGV0ZWN0ZWQ6ICR7Ym9vdC5kZXRlY3RlZFRoZW1lIHx8ICdkYXJrJ30pYCB9LFxuICBdXG5cbiAgZnVuY3Rpb24gcGFsZXR0ZUZvcihwcmVmKSB7XG4gICAgcmV0dXJuIHByZWYgPT09ICdhdXRvJyA/IGJvb3QuZGV0ZWN0ZWRUaGVtZSB8fCAnZGFyaycgOiBwcmVmXG4gIH1cblxuICBmdW5jdGlvbiBwcmV2aWV3UGFsZXR0ZShwcmVmKSB7XG4gICAgc2V0UGFsZXR0ZShwYWxldHRlRm9yKHByZWYpKVxuICAgIGJvb3Quc2V0VGhlbWU/Lih7IGFjY2VudDogYWNjZW50KCksIG11dGVkOiBNVVRFRCB9KVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlUaGVtZVByZWYocHJlZikge1xuICAgIHNldFRoZW1lUHJlZihwcmVmKVxuICAgIHByZXZpZXdQYWxldHRlKHByZWYpXG4gICAgd3JpdGVDb25maWcoeyB0aGVtZTogcHJlZiA9PT0gJ2F1dG8nID8gdW5kZWZpbmVkIDogcHJlZiB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICBmbGFzaChwcmVmID09PSAnYXV0bycgPyBgdGhlbWU6IGF1dG8gIGZvbGxvd2luZyB0aGUgdGVybWluYWwgKCR7cGFsZXR0ZUZvcignYXV0bycpfSlgIDogYHRoZW1lOiAke3ByZWZ9YClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZWVyUHJldmlldygpIHtcbiAgICByZXR1cm4gY3RsLnByZXZpZXdTdGVlcihzdGVlcigpPy5jaGFuZ2VzKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RlZXJSb3dzKCkge1xuICAgIHJldHVybiBzdGVlcmFibGVUcmFuc2NyaXB0KHN0ZWVyUHJldmlldygpLnRyYW5zY3JpcHQpXG4gIH1cblxuICBmdW5jdGlvbiBiZWdpblN0ZWVyKCkge1xuICAgIGlmIChidXN5KCkgfHwgY29tcGFjdGluZygpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpXG4gICAgc2V0U3RlZXIoeyBzZWxlY3RlZCwgZWRpdGluZzogZmFsc2UsIGFkZGluZzogZmFsc2UsIHJvbGU6ICd1c2VyJywgY2hhbmdlczogW10gfSlcbiAgICBpZiAocm93c1tzZWxlY3RlZF0pIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdLm1lc3NhZ2VJZClcbiAgICBzZXRIaXN0V2luZG93KEluZmluaXR5KVxuICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIGZtLmZvY3VzKCdzdGVlcicpXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZVN0ZWVyKGFwcGxpZWQgPSBmYWxzZSkge1xuICAgIHNldFN0ZWVyKG51bGwpXG4gICAgc2V0U3RlZXJUZXh0KCcnKVxuICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICBpZiAoYXBwbGllZCkgZmxhc2goJ2NvbnZlcnNhdGlvbiBzdGVlcmluZyBhcHBsaWVkICBub3RoaW5nIHNlbnQnKVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlTdGVlcigpIHtcbiAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICBpZiAoIWRyYWZ0Py5jaGFuZ2VzLmxlbmd0aCkgcmV0dXJuIGNsb3NlU3RlZXIoKVxuICAgIGN0bC5hcHBseVN0ZWVyKGRyYWZ0LmNoYW5nZXMpXG4gICAgY2xvc2VTdGVlcih0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRTdGVlckVkaXQoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93ID0gc3RlZXJSb3dzKClbZHJhZnQuc2VsZWN0ZWRdXG4gICAgaWYgKCFyb3cpIHJldHVybiBzdGFydFN0ZWVyQWRkKClcbiAgICBpZiAocm93LmxvY2tlZCkgcmV0dXJuIGZsYXNoKCdsb2NrZWQgIHRoaXMgbWVzc2FnZSBpcyBiZWZvcmUgdGhlIGxhdGVzdCBjb21wYWN0aW9uJylcbiAgICBzZXRTdGVlclRleHQocm93LnRleHQpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogdHJ1ZSwgYWRkaW5nOiBmYWxzZSwgcm9sZTogcm93LnJvbGUgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RlZXJBZGQoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSByb3dzW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGNvbnN0IHByZXZpb3VzUm9sZSA9IHNlbGVjdGVkPy5yb2xlXG4gICAgY29uc3Qgcm9sZSA9IHByZXZpb3VzUm9sZSA9PT0gJ3VzZXInID8gJ2Fzc2lzdGFudCcgOiBTVEVFUl9ST0xFU1swXVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiB0cnVlLCBhZGRpbmc6IHRydWUsIHJvbGUgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YWdlU3RlZXJUZXh0KHRleHQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRleHQudHJpbSgpXG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZsYXNoKCdtZXNzYWdlIGNhbm5vdCBiZSBlbXB0eScpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3QgdGFyZ2V0ID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBjb25zdCBjaGFuZ2UgPSBkcmFmdC5hZGRpbmdcbiAgICAgID8geyBvcDogJ2luc2VydCcsIGlkOiBtYWtlRXZlbnQoJ21lc3NhZ2UnKS5pZCwgYWZ0ZXI6IHRhcmdldD8ubWVzc2FnZUlkID8/IG51bGwsIG1lc3NhZ2U6IHsgcm9sZTogZHJhZnQucm9sZSwgY29udGVudDogdmFsdWUgfSB9XG4gICAgICA6IHsgb3A6ICdyZXBsYWNlJywgdGFyZ2V0OiB0YXJnZXQubWVzc2FnZUlkLCBtZXNzYWdlOiB7IHJvbGU6IGRyYWZ0LnJvbGUsIGNvbnRlbnQ6IHZhbHVlIH0gfVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlLCBjaGFuZ2VzOiBbLi4uZHJhZnQuY2hhbmdlcywgY2hhbmdlXSB9KVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YWdlU3RlZXJEZWxldGUoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3QgdGFyZ2V0ID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuXG4gICAgaWYgKHRhcmdldC5sb2NrZWQpIHJldHVybiBmbGFzaCgnbG9ja2VkICB0aGlzIG1lc3NhZ2UgaXMgYmVmb3JlIHRoZSBsYXRlc3QgY29tcGFjdGlvbicpXG4gICAgY29uc3QgY2hhbmdlcyA9IFsuLi5kcmFmdC5jaGFuZ2VzLCB7IG9wOiAnZGVsZXRlJywgdGFyZ2V0OiB0YXJnZXQubWVzc2FnZUlkIH1dXG4gICAgY29uc3QgcmVtYWluaW5nID0gcm93cy5maWx0ZXIoKHJvdykgPT4gcm93Lm1lc3NhZ2VJZCAhPT0gdGFyZ2V0Lm1lc3NhZ2VJZClcbiAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWluKGRyYWZ0LnNlbGVjdGVkLCBNYXRoLm1heCgwLCByZW1haW5pbmcubGVuZ3RoIC0gMSkpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQsIGNoYW5nZXMgfSlcbiAgICBpZiAocmVtYWluaW5nW3NlbGVjdGVkXSkgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocmVtYWluaW5nW3NlbGVjdGVkXS5tZXNzYWdlSWQpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbnNlcnRDb21tYW5kKGNvbW1hbmQsIHJhbmdlID0gY29tbWFuZEF0KGlucHV0KCksIGlucHV0Q3Vyc29yKCkpLCBhcmdzID0gJycpIHtcbiAgICBpZiAoIXJhbmdlKSByZXR1cm5cbiAgICBjb25zdCBkcmFmdCA9IGlucHV0KClcbiAgICBjb25zdCB0b2tlbiA9IHt9XG4gICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gdG9rZW5cbiAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGJvb3QuY29tbWFuZHMubGlzdCgpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29tbWFuZC5uYW1lKVxuICAgICAgY29uc3QgeyBib2R5IH0gPSBwYXJzZUZyb250bWF0dGVyKGF3YWl0IHJlYWRGaWxlKG1ldGFkYXRhLmZpbGUsICd1dGYtOCcpKVxuICAgICAgaWYgKHJlZnMuY29tbWFuZEV4cGFuc2lvbiAhPT0gdG9rZW4gfHwgaW5wdXQoKSAhPT0gZHJhZnQpIHJldHVyblxuICAgICAgY29uc3QgZm9ybSA9IHsgbmFtZTogY29tbWFuZC5uYW1lLCBib2R5OiBib2R5LnRyaW0oKSwgZHJhZnQsIHJhbmdlLCBhcmdzLCB0b2tlbiB9XG4gICAgICBjb25zdCBmaWVsZHMgPSBjb21tYW5kRmllbGRzKHsgYXJndW1lbnRzOiBwYXJzZUNvbW1hbmRBcmd1bWVudHMoYm9keSkgfSwgYm9keSwgYXJncylcbiAgICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgIHNldENvbW1hbmRGb3JtKHsgLi4uZm9ybSwgZmllbGRzIH0pXG4gICAgICAgIGlmIChmaWVsZHMuc29tZSgoZmllbGQpID0+IGZpZWxkLnR5cGUgPT09ICdwYXRoJykpIHtcbiAgICAgICAgICBsaXN0RmlsZXMoY3dkKS50aGVuKHNldEZpbGVMaXN0KS5jYXRjaCgoZXJyb3IpID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgZmluaXNoQ29tbWFuZChmb3JtLCB7fSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZmxhc2goYGNvdWxkIG5vdCBsb2FkIC8ke2NvbW1hbmQubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaENvbW1hbmQoZm9ybSwgdmFsdWVzKSB7XG4gICAgaWYgKHJlZnMuY29tbWFuZEV4cGFuc2lvbiAhPT0gZm9ybS50b2tlbiB8fCBpbnB1dCgpICE9PSBmb3JtLmRyYWZ0KSByZXR1cm5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYm9keSA9IGV4cGFuZENvbW1hbmQoZm9ybS5ib2R5LCB2YWx1ZXNbJyRhcmdzJ10gPz8gZm9ybS5hcmdzLCB2YWx1ZXMpXG4gICAgICBjb25zdCBuZXh0ID0gcmVwbGFjZUNvbW1hbmQoZm9ybS5kcmFmdCwgZm9ybS5yYW5nZSwgYm9keSlcbiAgICAgIHNldElucHV0KG5leHQudGV4dCwgbmV4dC5jdXJzb3IpXG4gICAgICBzZXRDb21tYW5kRm9ybShudWxsKVxuICAgICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbFxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZmxhc2goZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGMsIGFyZ3MgPSAnJykge1xuICAgIGlmICh0eXBlb2YgYXJncyAhPT0gJ3N0cmluZycpIGFyZ3MgPSAnJ1xuICAgIGlmIChjLmNvbW1hbmQpIHJldHVybiBpbnNlcnRDb21tYW5kKGMpXG4gICAgc2V0SW5wdXQoJycpXG4gICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICBpZiAoYy5uYW1lID09PSAnZm9yaycpIHJldHVybiBjdGwuZm9yayhhcmdzLnRyaW0oKSlcbiAgICBpZiAoYy5uYW1lID09PSAncmVuYW1lJykgcmV0dXJuIGN0bC5yZW5hbWUoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnY29sb3InKSByZXR1cm4gY3RsLnNldENvbG9yKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbmZpZycpIHtcbiAgICAgIHNldFNob3dDb25maWdQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0aGVtZScpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dUaGVtZVBhbmVsKHRydWUpXG4gICAgICBjb25zdCBjaG9pY2UgPSBhcmdzLnRvTG93ZXJDYXNlKClcbiAgICAgIGNvbnN0IHZhbGlkID0gWy4uLnBhbGV0dGVMaXN0KCkubWFwKChwKSA9PiBwLmtleSksICdhdXRvJ11cbiAgICAgIGlmICghdmFsaWQuaW5jbHVkZXMoY2hvaWNlKSkgcmV0dXJuIGZsYXNoKGB0aGVtZTogJHtwYWxldHRlTmFtZSgpfSAgL3RoZW1lIDwke3ZhbGlkLmpvaW4oJ3wnKX0+YClcbiAgICAgIGFwcGx5VGhlbWVQcmVmKGNob2ljZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5za2lsbCkgcmV0dXJuIGN0bC5zZW5kU2tpbGwoYy5uYW1lKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb25uZWN0JykgcmV0dXJuIG9wZW5Db25uZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdpbml0JykgcmV0dXJuIGN0bC5zZW5kSW5pdChhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdwYXJhbGxlbCcpIHtcbiAgICAgIGNvbnN0IHRhc2sgPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGN0bC5zZW5kUGFyYWxsZWwodGFzaykpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKHsgdGFzayB9KVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxpYmVyYXRlJykge1xuICAgICAgY29uc3QgZGVjaXNpb24gPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGN0bC5zZW5kRGVsaWJlcmF0ZShkZWNpc2lvbikpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ0RlbGliZXJhdGlvbih7IGRlY2lzaW9uIH0pXG4gICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dNb2RlbFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnN3aXRjaE1vZGVsQnlOYW1lKGFyZ3MpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdlZmZvcnQnKSB7XG4gICAgICBpZiAoIWVmZm9ydEFwcGxpZXMoKSkgcmV0dXJuIGZsYXNoKGAke21vZGVsKCkubmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBlZmZvcnQgY29udHJvbGApXG4gICAgICBpZiAoIWFyZ3MpIHJldHVybiBzZXRTaG93RWZmb3J0UGFuZWwodHJ1ZSlcbiAgICAgIHJldHVybiBjdGwuc2V0RWZmb3J0QnlOYW1lKGFyZ3MudG9Mb3dlckNhc2UoKSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIGlmIChpc0Rldkluc3RhbGwoaW1wb3J0Lm1ldGEudXJsKSkgcmV0dXJuIGZsYXNoKCd0aGlzIHBpY28gcnVucyBmcm9tIGEgc291cmNlIGNoZWNrb3V0ICB1cGRhdGUgaXQgd2l0aCBnaXQnKVxuICAgICAgY29uc3QgbGF0ZXN0ID0gYXdhaXQgZmV0Y2hMYXRlc3RWZXJzaW9uKCkuY2F0Y2goKCkgPT4gbnVsbClcbiAgICAgIGlmIChsYXRlc3QgJiYgIW5ld2VyVmVyc2lvbih2ZXJzaW9uLCBsYXRlc3QpKSByZXR1cm4gZmxhc2goYHBpY28gdiR7dmVyc2lvbn0gaXMgYWxyZWFkeSB0aGUgbGF0ZXN0YClcbiAgICAgIGZsYXNoKGB1cGRhdGluZyR7bGF0ZXN0ID8gYCB0byB2JHtsYXRlc3R9YCA6ICcnfS4uLmApXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5VcGRhdGUoKVxuICAgICAgaWYgKHJlc3VsdC5vaykgcmV0dXJuIGZsYXNoKGB1cGRhdGVkJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9ICByZXN0YXJ0IHBpY28gdG8gdXNlIGl0YClcbiAgICAgIHJldHVybiBmbGFzaChgdXBkYXRlIGZhaWxlZDogJHtyZXN1bHQub3V0cHV0LnNsaWNlKDAsIDEwMCl9YClcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3N0ZWVyJykgcmV0dXJuIGJlZ2luU3RlZXIoKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb250ZXh0JykgcmV0dXJuIG9wZW5Db250ZXh0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdoaXN0b3J5JykgcmV0dXJuIG9wZW5IaXN0b3J5U2VhcmNoKClcbiAgICBpZiAoYy5uYW1lID09PSAnaGVscCcpIHJldHVybiBzZXRWaWV3KCdoZWxwJylcbiAgICBpZiAoYy5uYW1lID09PSAnbWNwJykgcmV0dXJuIHNldFNob3dNY3BQYW5lbCh0cnVlKVxuICAgIGlmIChjLm5hbWUgPT09ICd3YWtldXBzJykgcmV0dXJuIHNldFNob3dXYWtldXBzUGFuZWwodHJ1ZSlcbiAgICBpZiAoYy5uYW1lID09PSAnbWVtb3J5Jykge1xuICAgICAgYXdhaXQgcmVmcmVzaE1lbW9yaWVzKClcbiAgICAgIHJldHVybiBzZXRTaG93TWVtb3J5UGFuZWwodHJ1ZSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Jlc3VtZScpIHtcbiAgICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgICAgc2V0U2hvd1Jlc3VtZVBhbmVsKHRydWUpXG4gICAgICByZWZyZXNoU2Vzc2lvbnMocmVzdW1lU2NvcGUoKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncHJvamVjdCcpIHJldHVybiBvcGVuUHJvamVjdFBhbmVsKClcbiAgICBpZiAoYy5uYW1lID09PSAnY3dkJykge1xuICAgICAgY29uc3Qgcm9vdE5vdGUgPSBib290LnJvb3QgIT09IGJvb3QuY3dkID8gYCAgcHJvamVjdCByb290ICR7c2hvcnRlblBhdGgoYm9vdC5yb290KX1gIDogJydcbiAgICAgIHJldHVybiBmbGFzaChgJHtib290LmRpc3BsYXlDd2R9JHtyb290Tm90ZX1gKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnc2tpbGxzJykge1xuICAgICAgcmV0dXJuIHNldEluZm9QYW5lbCh7XG4gICAgICAgIHRpdGxlOiAnU2tpbGxzJyxcbiAgICAgICAgcm93czogc2tpbGxzLmxpc3QoKS5tYXAoKHMpID0+ICh7IG5hbWU6IHMubmFtZSwgZGVzYzogcy5kZXNjcmlwdGlvbiwgbm90ZTogcy5zb3VyY2UgfSkpLFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbW1hbmRzJykge1xuICAgICAgcmV0dXJuIHNldEluZm9QYW5lbCh7XG4gICAgICAgIHRpdGxlOiAnQ29tbWFuZHMnLFxuICAgICAgICByb3dzOiBbXG4gICAgICAgICAgLi4uQ09NTUFORFMubWFwKChjbWQpID0+ICh7IG5hbWU6IGAvJHtjbWQubmFtZX1gLCBkZXNjOiBjbWQuZGVzYywgbm90ZTogJ2J1aWx0aW4nIH0pKSxcbiAgICAgICAgICAuLi5ib290LmNvbW1hbmRzLmxpc3QoKS5tYXAoKGNtZCkgPT4gKHsgbmFtZTogYC8ke2NtZC5uYW1lfWAsIGRlc2M6IGNtZC5kZXNjcmlwdGlvbiwgbm90ZTogY21kLnNvdXJjZSB9KSksXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAndG9vbHMnKSB7XG4gICAgICBjb25zdCB7IHJvd3MsIG1jcENvdW50IH0gPSBhd2FpdCBjdGwuZGVzY3JpYmVUb29scygpXG4gICAgICBzZXRJbmZvUGFuZWwoeyB0aXRsZTogYFRvb2xzJHttY3BDb3VudCA/IGAgIHBsdXMgJHttY3BDb3VudH0gTUNQIChzZWUgL21jcClgIDogJyd9YCwgcm93cyB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICduZXcnKSByZXR1cm4gY3RsLm5ld1Nlc3Npb24oKVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxldGUnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICBpZiAoIXN0YXRlLnNlc3Npb24pIHJldHVybiBmbGFzaCgnbm8gY3VycmVudCBzZXNzaW9uIHRvIGRlbGV0ZScpXG4gICAgICBzZXRTaG93RGVsZXRlQ29uZmlybSh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZXdpbmQnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICBpZiAodXNlckVudHJpZXMoZGVyaXZlZCgpKS5sZW5ndGggPT09IDApIHJldHVybiBmbGFzaCgnbm90aGluZyB0byByZXdpbmQgeWV0JylcbiAgICAgIHNldFJld2luZFN0ZXAoJ3BpY2snKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdjbGVhcicpIHJldHVybiBjdGwuY2xlYXIoKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb21wYWN0JykgcmV0dXJuIHBlcmZvcm1Db21wYWN0aW9uKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2Nvc3QnKSB7XG4gICAgICBjb25zdCBjb3N0ID0gY3RsLmNvc3RTdW1tYXJ5KClcbiAgICAgIGlmICghY29zdCkgcmV0dXJuIGZsYXNoKCdubyB1c2FnZSB5ZXQnKVxuICAgICAgY29uc3QgYmFzZSA9IGAkJHtjb3N0LnNwZW50LnRvRml4ZWQoNCl9IHNwZW50ICAke2Nvc3QucHJvbXB0VG9rZW5zLnRvTG9jYWxlU3RyaW5nKCl9IGluICAke2Nvc3QuY29tcGxldGlvblRva2Vucy50b0xvY2FsZVN0cmluZygpfSBvdXRgXG4gICAgICBmbGFzaChjb3N0LnNwZW50IC0gY29zdC5hY3RpdmUgPiAwLjAwMDA1ID8gYCR7YmFzZX0gIGN1cnJlbnQgY29udmVyc2F0aW9uICQke2Nvc3QuYWN0aXZlLnRvRml4ZWQoNCl9YCA6IGJhc2UpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2V4cG9ydCcpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBjdGwuZXhwb3J0TWFya2Rvd24oKVxuICAgICAgZmxhc2goYGV4cG9ydGVkIHRvICR7ZmlsZX1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaEF1dGhQcm92aWRlcnMoKSB7XG4gICAgY29uc3Qgb3BlbmFpID0gYXdhaXQgb3BlbmFpU3RhdHVzKCkuY2F0Y2goKCkgPT4gKHsgY29ubmVjdGVkOiBmYWxzZSwgZW1haWw6IG51bGwgfSkpXG4gICAgc2V0QXV0aFByb3ZpZGVycyhbXG4gICAgICB7IGlkOiAnb3BlbmFpJywgbGFiZWw6ICdPcGVuQUkgIENoYXRHUFQgLyBDb2RleCBwbGFuJywgY29ubmVjdGVkOiBvcGVuYWkuY29ubmVjdGVkLCBlbWFpbDogb3BlbmFpLmVtYWlsIH0sXG4gICAgXSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Db25uZWN0UGFuZWwoKSB7XG4gICAgc2V0U2hvd0Nvbm5lY3RQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hBdXRoUHJvdmlkZXJzKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbm5lY3RQcm92aWRlcihwcm92aWRlcikge1xuICAgIGlmIChwcm92aWRlci5pZCAhPT0gJ29wZW5haScpIHJldHVyblxuICAgIHNldFNob3dDb25uZWN0UGFuZWwoZmFsc2UpXG4gICAgZmxhc2goJ29wZW5pbmcgeW91ciBicm93c2VyIGZvciBDaGF0R1BUIHNpZ24taW4uLi4nKVxuICAgIGN0bC5jb25uZWN0UHJvdmlkZXIoKVxuICAgICAgLnRoZW4oKHsgZW1haWwsIGNvdW50IH0pID0+IGZsYXNoKGBjb25uZWN0ZWQgYXMgJHtlbWFpbCB8fCAneW91ciBDaGF0R1BUIGFjY291bnQnfSAgJHtjb3VudH0gY29kZXggbW9kZWxzIHVubG9ja2VkIGluIC9tb2RlbGApKVxuICAgICAgLmNhdGNoKChlcnIpID0+IGZsYXNoKGBjb25uZWN0IGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCAxMjApfWApKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlzY29ubmVjdFByb3ZpZGVyKHByb3ZpZGVyKSB7XG4gICAgaWYgKHByb3ZpZGVyLmlkICE9PSAnb3BlbmFpJykgcmV0dXJuXG4gICAgY29uc3QgYXJtZWQgPSByZWZzLmRpc2Nvbm5lY3RBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmlkICE9PSBwcm92aWRlci5pZCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmRpc2Nvbm5lY3RBcm0gPSB7IGlkOiBwcm92aWRlci5pZCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZGlzY29ubmVjdCAke3Byb3ZpZGVyLmxhYmVsfSAoeW91IHdpbGwgbmVlZCB0byBzaWduIGluIGFnYWluKWApXG4gICAgfVxuICAgIHJlZnMuZGlzY29ubmVjdEFybSA9IG51bGxcbiAgICBhd2FpdCBjdGwuZGlzY29ubmVjdFByb3ZpZGVyKClcbiAgICByZWZyZXNoQXV0aFByb3ZpZGVycygpXG4gICAgZmxhc2goJ2Rpc2Nvbm5lY3RlZCBmcm9tIENoYXRHUFQnKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVmcmVzaFNlc3Npb25zKHNjb3BlSW5kZXgpIHtcbiAgICBzZXRSZXN1bWVMb2FkaW5nKHRydWUpXG4gICAgY3RsLmxpc3RSZXN1bWVTZXNzaW9ucyhSRVNVTUVfU0NPUEVTW3Njb3BlSW5kZXhdKVxuICAgICAgLnRoZW4oc2V0UmVzdW1lU2Vzc2lvbnMpXG4gICAgICAuZmluYWxseSgoKSA9PiBzZXRSZXN1bWVMb2FkaW5nKGZhbHNlKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3J0ZW5QYXRoKHBhdGgpIHtcbiAgICBjb25zdCBob21lID0gaG9tZWRpcigpXG4gICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChob21lKSA/IHBhdGgucmVwbGFjZShob21lLCAnficpIDogcGF0aFxuICB9XG5cbiAgZnVuY3Rpb24gb3BlblByb2plY3RQYW5lbCgpIHtcbiAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBiZWZvcmUgc3dpdGNoaW5nIHNlc3Npb25zJylcbiAgICBzZXRTaG93UHJvamVjdFBhbmVsKHRydWUpXG4gICAgcmVmcmVzaFByb2plY3RzKClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hQcm9qZWN0cygpIHtcbiAgICBzZXRQcm9qZWN0c0xvYWRpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgbGlzdCA9IGF3YWl0IGN0bC5saXN0UHJvamVjdHMoKVxuICAgICAgc2V0UHJvamVjdHMobGlzdC5tYXAoKHByb2plY3QpID0+ICh7XG4gICAgICAgIC4uLnByb2plY3QsXG4gICAgICAgIHBhdGg6IHNob3J0ZW5QYXRoKHByb2plY3Qucm9vdCksXG4gICAgICAgIGNoZWNrb3V0czogcHJvamVjdC5jaGVja291dHMubWFwKChjaGVja291dCkgPT4gKHsgLi4uY2hlY2tvdXQsIHBhdGg6IHNob3J0ZW5QYXRoKGNoZWNrb3V0LnJvb3QpIH0pKSxcbiAgICAgIH0pKSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0UHJvamVjdHNMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGFkZFByb2plY3RXb3JrdHJlZShjaGVja291dCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmVlID0gYXdhaXQgY3RsLmFkZFdvcmt0cmVlKGNoZWNrb3V0Lm93bmVyKVxuICAgICAgYXdhaXQgY3RsLnN3aXRjaFRvV29ya3RyZWUoeyByb290OiB0cmVlLnBhdGggfSlcbiAgICAgIHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgd29ya3RyZWUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVByb2plY3RDaGVja291dChjaGVja291dCkge1xuICAgIGlmIChjaGVja291dC53b3JrdHJlZSkge1xuICAgICAgaWYgKGNoZWNrb3V0LmN1cnJlbnQpIHJldHVybiBmbGFzaCgnY2Fubm90IHJlbW92ZSB0aGUgY3VycmVudCB3b3JrdHJlZSAgc3dpdGNoIGF3YXkgZmlyc3QnKVxuICAgICAgY29uc3QgYXJtZWQgPSByZWZzLnByb2plY3REZWxldGVBcm1cbiAgICAgIGlmICghYXJtZWQgfHwgYXJtZWQucm9vdCAhPT0gY2hlY2tvdXQucm9vdCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IHsgcm9vdDogY2hlY2tvdXQucm9vdCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byByZW1vdmUgXCIke2NoZWNrb3V0LmJyYW5jaCB8fCBjaGVja291dC5wYXRofVwiIGFuZCBpdHMgJHtjaGVja291dC5jb3VudH0gJHtjaGVja291dC5jb3VudCA9PT0gMSA/ICdzZXNzaW9uJyA6ICdzZXNzaW9ucyd9YClcbiAgICAgIH1cbiAgICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGN0bC5kZWxldGVXb3JrdHJlZShjaGVja291dClcbiAgICAgICAgYXdhaXQgcmVmcmVzaFByb2plY3RzKClcbiAgICAgICAgZmxhc2goYHJlbW92ZWQgJHtjaGVja291dC5icmFuY2ggfHwgY2hlY2tvdXQucGF0aH1gKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGZsYXNoKGByZW1vdmUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjaGVja291dC5jdXJyZW50KSByZXR1cm4gZmxhc2goJ2Nhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnQgcHJvamVjdCAgc3dpdGNoIGF3YXkgZmlyc3QnKVxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5wcm9qZWN0RGVsZXRlQXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5yb290ICE9PSBjaGVja291dC5yb290IHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IHsgcm9vdDogY2hlY2tvdXQucm9vdCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZGVsZXRlIFwiJHtjaGVja291dC5wYXRofVwiIGFuZCBpdHMgJHtjaGVja291dC5jb3VudH0gJHtjaGVja291dC5jb3VudCA9PT0gMSA/ICdzZXNzaW9uJyA6ICdzZXNzaW9ucyd9YClcbiAgICB9XG4gICAgcmVmcy5wcm9qZWN0RGVsZXRlQXJtID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVQcm9qZWN0RGF0YShjaGVja291dC5yb290KVxuICAgICAgYXdhaXQgcmVmcmVzaFByb2plY3RzKClcbiAgICAgIGZsYXNoKGBkZWxldGVkICR7Y2hlY2tvdXQucGF0aH0gICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfSByZW1vdmVkYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBkZWxldGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVNlc3Npb25NZXRhKG1ldGEpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gc3RhdGUuc2Vzc2lvbj8uaWQgPT09IG1ldGEuaGVhZGVyLmlkXG4gICAgaWYgKGN1cnJlbnQgJiYgYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgY29uc3QgYXJtZWQgPSByZWZzLmRlbGV0ZUFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQuZmlsZSAhPT0gbWV0YS5maWxlIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMuZGVsZXRlQXJtID0geyBmaWxlOiBtZXRhLmZpbGUsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRlbGV0ZSBcIiR7bWV0YS50aXRsZS5zbGljZSgwLCA1MCl9XCJgKVxuICAgIH1cbiAgICByZWZzLmRlbGV0ZUFybSA9IG51bGxcbiAgICBpZiAoY3VycmVudCkge1xuICAgICAgaWYgKGF3YWl0IGNvbmZpcm1EZWxldGVDdXJyZW50U2Vzc2lvbigpKSByZWZyZXNoU2Vzc2lvbnMocmVzdW1lU2NvcGUoKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlU2Vzc2lvbihtZXRhLmZpbGUpXG4gICAgICByZWZyZXNoU2Vzc2lvbnMocmVzdW1lU2NvcGUoKSlcbiAgICAgIGZsYXNoKCdzZXNzaW9uIGRlbGV0ZWQnKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYGRlbGV0ZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgODApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVzdW1lU2Vzc2lvbihtZXRhKSB7XG4gICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKVxuICAgIHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpXG4gICAgYXdhaXQgY3RsLnJlc3VtZShtZXRhKVxuICB9XG5cbiAgZnVuY3Rpb24gb3Blbkhpc3RvcnlTZWFyY2goKSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNlbnQoKVxuICAgIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoc2Vzc2lvbikpXG4gICAgc2V0U2hvd0hpc3RvcnlQYW5lbCh0cnVlKVxuICAgIHNldEhpc3RTY29wZSgwKVxuICB9XG5cbiAgZnVuY3Rpb24gZGVkdXBlUHJvbXB0cyhwb29sKSB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKVxuICAgIGNvbnN0IG91dCA9IFtdXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBbLi4ucG9vbF0uc29ydCgoYSwgYikgPT4gYi5hdCAtIGEuYXQpKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMoZW50cnkudGV4dCkpIGNvbnRpbnVlXG4gICAgICBzZWVuLmFkZChlbnRyeS50ZXh0KVxuICAgICAgb3V0LnB1c2goZW50cnkpXG4gICAgfVxuICAgIHJldHVybiBvdXRcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN3aXRjaEhpc3RTY29wZShuZXh0KSB7XG4gICAgc2V0SGlzdFNjb3BlKG5leHQpXG4gICAgaWYgKG5leHQgPT09IDApIHJldHVybiBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKHNlbnQoKSkpXG4gICAgY29uc3QgcHJvamVjdCA9IGF3YWl0IGxvYWRQcm9qZWN0UHJvbXB0cyhyb290KVxuICAgIGlmIChuZXh0ID09PSAxKSByZXR1cm4gc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhbLi4uc2VudCgpLCAuLi5wcm9qZWN0XSkpXG4gICAgY29uc3QgZ2xvYmFsID0gYXdhaXQgbG9hZEdsb2JhbFByb21wdHMoKVxuICAgIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoWy4uLnNlbnQoKSwgLi4ucHJvamVjdCwgLi4uZ2xvYmFsXSkpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBwZXJmb3JtUmV3aW5kVG8odGFyZ2V0LCBvcHQpIHtcbiAgICBhd2FpdCBjdGwucmV3aW5kKHRhcmdldCwgb3B0LmtleSlcbiAgICBzZXRSZXdpbmRTdGVwKG51bGwpXG4gICAgc2V0UmV3aW5kVGFyZ2V0KG51bGwpXG4gIH1cblxuICBmdW5jdGlvbiBwZXJmb3JtUmV3aW5kKG9wdCkge1xuICAgIHJldHVybiBwZXJmb3JtUmV3aW5kVG8ocmV3aW5kVGFyZ2V0KCksIG9wdClcbiAgfVxuXG4gIGNvbnN0IHVuZG9SZXdpbmQgPSBjdGwudW5kb1Jld2luZFxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNvbmZpcm1EZWxldGVDdXJyZW50U2Vzc2lvbigpIHtcbiAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgY3RsLmRlbGV0ZUN1cnJlbnRTZXNzaW9uKClcbiAgICBzZXRTaG93RGVsZXRlQ29uZmlybShmYWxzZSlcbiAgICByZXR1cm4gZGVsZXRlZFxuICB9XG5cbiAgY29uc3QgYW55UGFuZWwgPSAoKSA9PlxuICAgIHNob3dNb2RlbFBhbmVsKCkgfHwgc2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCgpIHx8IHNob3dFZmZvcnRQYW5lbCgpIHx8IHNob3dUaGVtZVBhbmVsKCkgfHwgc2hvd0NvbmZpZ1BhbmVsKCkgfHwgc2hvd0RlbGV0ZUNvbmZpcm0oKSB8fCBzaG93TWVtb3J5UGFuZWwoKSB8fCBzaG93SGlzdG9yeVBhbmVsKCkgfHwgc2hvd1Jlc3VtZVBhbmVsKCkgfHwgc2hvd01jcFBhbmVsKCkgfHxcbiAgICBzaG93UHJvamVjdFBhbmVsKCkgfHwgc2hvd1dha2V1cHNQYW5lbCgpIHx8IHNob3dDb25uZWN0UGFuZWwoKSB8fFxuICAgIGNvbW1hbmRGb3JtKCkgIT09IG51bGwgfHwgaW5mb1BhbmVsKCkgIT09IG51bGwgfHwgcmV3aW5kU3RlcCgpICE9PSBudWxsXG5cbiAgLy8gZXZlcnkgZm9jdXMtdGFraW5nIHBhbmVsIGRpbXMgdGhlIGNvbnZlcnNhdGlvbiBiZWhpbmQgaXQ7IHRoZSB0aGVtZVxuICAvLyBwaWNrZXIgaXMgdGhlIG9uZSBleGVtcHRpb24sIHNpbmNlIGl0cyBqb2IgaXMgcHJldmlld2luZyBwYWxldHRlcyBvblxuICAvLyB0aGUgdW5kaW1tZWQgdWlcbiAgY29uc3QgZGltbWluZ1BhbmVsID0gKCkgPT4gYW55UGFuZWwoKSAmJiAhc2hvd1RoZW1lUGFuZWwoKVxuXG4gIGZ1bmN0aW9uIGNhbmNlbEFnZW50KGFnZW50KSB7XG4gICAgY3RsLmNhbmNlbEFnZW50KGFnZW50LmlkKVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzbWlzc0FnZW50KGFnZW50KSB7XG4gICAgaWYgKCFjdGwuZGlzbWlzc0FnZW50KGFnZW50LmlkKSkgcmV0dXJuXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gYWdlbnQuaWQpIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSkge1xuICAgIGlmIChpdGVtLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICBpbnRlcnJ1cHQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0bC5kaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0uZGVsaWJlcmF0aW9uSWQpXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gaXRlbS5pZCkgc2V0Vmlld2VkQWdlbnRJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzbWlzc1NoZWxsKHNoZWxsKSB7XG4gICAgYm9vdC5zaGVsbHMuZGlzbWlzcyhzaGVsbC5pZClcbiAgICBpZiAodmlld2VkU2hlbGxJZCgpID09PSBzaGVsbC5pZCkgc2V0Vmlld2VkU2hlbGxJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24ga2lsbFNoZWxsKHNoZWxsKSB7XG4gICAgaWYgKHNoZWxsLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKSByZXR1cm4gZmxhc2goYHNoZWxsICR7c2hlbGwuaWR9IGFscmVhZHkgZXhpdGVkYClcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuc2hlbGxLaWxsQXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gc2hlbGwuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5zaGVsbEtpbGxBcm0gPSB7IGlkOiBzaGVsbC5pZCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8ga2lsbCBcIiR7c2hlbGwuZGVzY3JpcHRpb24gfHwgYHNoZWxsICR7c2hlbGwuaWR9YH1cImApXG4gICAgfVxuICAgIHJlZnMuc2hlbGxLaWxsQXJtID0gbnVsbFxuICAgIGJvb3Quc2hlbGxzLmtpbGwoc2hlbGwuaWQsICd1c2VyJylcbiAgfVxuXG4gIGNvbnN0IGVmZm9ydEFwcGxpZXMgPSBjdGwuZWZmb3J0QXBwbGllc1xuICBjb25zdCBzZXRTZXNzaW9uRWZmb3J0ID0gY3RsLnNldEVmZm9ydFxuXG4gIGNvbnN0IGZtID0gdXNlRm9jdXMoeyBpbml0aWFsOiAnaW5wdXQnIH0pXG4gIGNvbnN0IHN0ZWVyTGlzdEZvY3VzID0gdXNlRm9jdXMoeyBpbml0aWFsOiBudWxsLCBjeWNsZTogJ25vbmUnLCBhY3RpdmU6IGZhbHNlIH0pXG4gIGZtLml0ZW0oJ2ZlZWQnKVxuICBpZiAoc3RlZXIoKSkge1xuICAgIGZtLml0ZW0oJ3N0ZWVyJylcbiAgICBpZiAoIWZtLmlzKCdzdGVlcicpKSBmbS5mb2N1cygnc3RlZXInKVxuICB9XG4gIGNvbnN0IGNvbnZlcnNhdGlvblNlYXJjaCA9IGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCh7IGZtLCB2ZXJib3NlLCBzZXRGb2xsb3csIHNldE9mZnNldCB9KVxuICBjb252ZXJzYXRpb25TZWFyY2gucmVnaXN0ZXJGb2N1cygpXG4gIGxldCBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzID0gW11cbiAgYWdlbnRzVmVyc2lvbigpXG4gIGNvbnN0IGFnZW50Um93cyA9IGN0bC5hY3Rpdml0eSgpXG4gIHNoZWxsc1ZlcnNpb24oKVxuICBjb25zdCBzaGVsbFJvd3MgPSBjdGwuc2hlbGxSb3dzKClcbiAgaWYgKHF1ZXN0aW9uUmVxdWVzdCgpKSB7XG4gICAgZm0uaXRlbSgncXVlc3Rpb24nKVxuICAgIGlmICghZm0uaXMoJ3F1ZXN0aW9uJykpIGZtLmZvY3VzKCdxdWVzdGlvbicpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSkgZm0uaXRlbSgnaW5wdXQnKVxuICAgIGlmIChzaGVsbFJvd3MubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgZm0uZ3JvdXAoJ2FjdGl2aXR5LXN0cmlwJywgeyBpdGVtczogWydhY3Rpdml0eS1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgocykgPT4gYHNoZWxsLSR7cy5pZH1gKSwgLi4uYWdlbnRSb3dzLm1hcCgoYSkgPT4gYGFnZW50LSR7YS5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNoZWxsUm93cy5sZW5ndGggPiAwKSBmbS5ncm91cCgnc2hlbGwtc3RyaXAnLCB7IGl0ZW1zOiBbJ3NoZWxsLW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzKSA9PiBgc2hlbGwtJHtzLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgICAgaWYgKGFnZW50Um93cy5sZW5ndGggPiAwKSBmbS5ncm91cCgnYWdlbnQtc3RyaXAnLCB7IGl0ZW1zOiBbJ2FnZW50LW1haW4nLCAuLi5hZ2VudFJvd3MubWFwKChhKSA9PiBgYWdlbnQtJHthLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgIH1cbiAgICBpZiAocmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiAmJiAhdmlld2VkQWdlbnRJZCgpICYmICF2aWV3ZWRTaGVsbElkKCkpIHtcbiAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSBmYWxzZVxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9XG4gIH1cbiAgdXNlRm9jdXNUcmFwKGFueVBhbmVsKCkgfHwgdmlldygpID09PSAnaGVscCcpXG4gIHVzZVNlbGVjdGlvbih7XG4gICAgb25Db3B5OiAodGV4dCkgPT4gZmxhc2goYGNvcGllZCAke3RleHQubGVuZ3RofSAke3RleHQubGVuZ3RoID09PSAxID8gJ2NoYXJhY3RlcicgOiAnY2hhcmFjdGVycyd9YCksXG4gIH0pXG5cbiAgZnVuY3Rpb24gbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSB7XG4gICAgY29uc3QgaXRlbXMgPSBbJ2FjdGl2aXR5LW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzaGVsbCkgPT4gYHNoZWxsLSR7c2hlbGwuaWR9YCksIC4uLmFnZW50Um93cy5tYXAoKGFnZW50KSA9PiBgYWdlbnQtJHthZ2VudC5pZH1gKV1cbiAgICBjb25zdCBjdXJyZW50ID0gaXRlbXMuaW5kZXhPZihmbS5jdXJyZW50KCkpXG4gICAgbGV0IG5leHQgPSBjdXJyZW50XG4gICAgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2cnKSBuZXh0ID0gMFxuICAgIGVsc2UgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gaXRlbXMubGVuZ3RoIC0gMVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBNYXRoLm1pbihpdGVtcy5sZW5ndGggLSAxLCBjdXJyZW50ICsgTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihBR0VOVF9TVFJJUF9NQVggLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd1JykgbmV4dCA9IE1hdGgubWF4KDAsIGN1cnJlbnQgLSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKEFHRU5UX1NUUklQX01BWCAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdqJyB8fCBldmVudC5rZXkgPT09ICdkb3duJykgbmV4dCA9IChjdXJyZW50ICsgMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdrJyB8fCBldmVudC5rZXkgPT09ICd1cCcpIG5leHQgPSAoY3VycmVudCAtIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCB0YXJnZXQgPSBpdGVtc1tuZXh0XVxuICAgIGZtLmZvY3VzKHRhcmdldClcbiAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldC5zdGFydHNXaXRoKCdzaGVsbC0nKSA/IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpIDogbnVsbClcbiAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIG5hdmlnYXRlU3RyaXAoZXZlbnQsIHByZWZpeCwgcm93cywgeyBtYWluID0gZmFsc2UsIHByZXZpZXdBZ2VudCA9IGZhbHNlLCBwcmV2aWV3U2hlbGwgPSBmYWxzZSB9ID0ge30pIHtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi4obWFpbiA/IFtgJHtwcmVmaXh9LW1haW5gXSA6IFtdKSwgLi4ucm93cy5tYXAoKHJvdykgPT4gYCR7cHJlZml4fS0ke3Jvdy5pZH1gKV1cbiAgICBjb25zdCBjdXJyZW50ID0gaXRlbXMuaW5kZXhPZihmbS5jdXJyZW50KCkpXG4gICAgbGV0IG5leHQgPSBjdXJyZW50XG4gICAgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2cnKSBuZXh0ID0gMFxuICAgIGVsc2UgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gaXRlbXMubGVuZ3RoIC0gMVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBNYXRoLm1pbihpdGVtcy5sZW5ndGggLSAxLCBjdXJyZW50ICsgTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihBR0VOVF9TVFJJUF9NQVggLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd1JykgbmV4dCA9IE1hdGgubWF4KDAsIGN1cnJlbnQgLSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKEFHRU5UX1NUUklQX01BWCAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdqJyB8fCBldmVudC5rZXkgPT09ICdkb3duJykgbmV4dCA9IChjdXJyZW50ICsgMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdrJyB8fCBldmVudC5rZXkgPT09ICd1cCcpIG5leHQgPSAoY3VycmVudCAtIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCB0YXJnZXQgPSBpdGVtc1tuZXh0XVxuICAgIGZtLmZvY3VzKHRhcmdldClcbiAgICBpZiAocHJldmlld0FnZW50KSB7XG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIH1cbiAgICBpZiAocHJldmlld1NoZWxsKSB7XG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldCA9PT0gJ3NoZWxsLW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHVzZUlucHV0KGFzeW5jIChldmVudCkgPT4ge1xuICAgIGlmIChyZWZzLmRpY3RhdGlvbklucHV0LmhhbmRsZShldmVudCkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHN0ZWVyKCkgJiYgZm0uaXMoJ3N0ZWVyJykgJiYgIXN0ZWVyKCkuZWRpdGluZykge1xuICAgICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgICBjb25zdCByb3dzID0gc3RlZXJSb3dzKClcbiAgICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnKSBhcHBseVN0ZWVyKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIGNsb3NlU3RlZXIoKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykgc3RhcnRTdGVlckVkaXQoKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnYScpIHN0YXJ0U3RlZXJBZGQoKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAneCcgfHwgZXZlbnQua2V5ID09PSAnZCcpIHN0YWdlU3RlZXJEZWxldGUoKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAndXAnIHx8IGV2ZW50LmtleSA9PT0gJ2snKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5tYXgoMCwgZHJhZnQuc2VsZWN0ZWQgLSAxKVxuICAgICAgICBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzW3NlbGVjdGVkXT8ubWVzc2FnZUlkKVxuICAgICAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBzZWxlY3RlZCB9KVxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdkb3duJyB8fCBldmVudC5rZXkgPT09ICdqJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWluKE1hdGgubWF4KDAsIHJvd3MubGVuZ3RoIC0gMSksIGRyYWZ0LnNlbGVjdGVkICsgMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaG9tZScgfHwgZXZlbnQua2V5ID09PSAnZycpIHtcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1swXT8ubWVzc2FnZUlkKVxuICAgICAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBzZWxlY3RlZDogMCB9KVxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdlbmQnIHx8IGV2ZW50LmtleSA9PT0gJ0cnKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5tYXgoMCwgcm93cy5sZW5ndGggLSAxKVxuICAgICAgICBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzW3NlbGVjdGVkXT8ubWVzc2FnZUlkKVxuICAgICAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBzZWxlY3RlZCB9KVxuICAgICAgfVxuICAgICAgZWxzZSByZXR1cm5cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNvbnZlcnNhdGlvblNlYXJjaC5oYW5kbGVJbnB1dChldmVudCwgY29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlcykpIHJldHVyblxuICAgIGlmIChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBuYXZpZ2F0ZUFjdGl2aXR5U3RyaXAoZXZlbnQpKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZm0uY3VycmVudCgpXG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldC5zdGFydHNXaXRoKCdzaGVsbC0nKSA/IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpIDogbnVsbClcbiAgICAgIHNldFZpZXdlZEFnZW50SWQodGFyZ2V0LnN0YXJ0c1dpdGgoJ2FnZW50LScpID8gdGFyZ2V0LnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkgOiBudWxsKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZm0uY3VycmVudCgpXG4gICAgICBjb25zdCBzaGVsbCA9IHRhcmdldC5zdGFydHNXaXRoKCdzaGVsbC0nKSA/IHNoZWxsUm93cy5maW5kKChzKSA9PiBgc2hlbGwtJHtzLmlkfWAgPT09IHRhcmdldCkgOiBudWxsXG4gICAgICBjb25zdCBpdGVtID0gdGFyZ2V0LnN0YXJ0c1dpdGgoJ2FnZW50LScpID8gYWdlbnRSb3dzLmZpbmQoKHJvdykgPT4gYGFnZW50LSR7cm93LmlkfWAgPT09IHRhcmdldCkgOiBudWxsXG4gICAgICBjb25zdCBhZ2VudCA9IGl0ZW0/LnJvbGUgPT09ICdkZWxpYmVyYXRpb24nID8gbnVsbCA6IGl0ZW1cbiAgICAgIGlmIChzaGVsbCkgc2hlbGwuc3RhdHVzID09PSAncnVubmluZycgPyBraWxsU2hlbGwoc2hlbGwpIDogZGlzbWlzc1NoZWxsKHNoZWxsKVxuICAgICAgaWYgKGl0ZW0/LnJvbGUgPT09ICdkZWxpYmVyYXRpb24nKSBzdG9wT3JEaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0pXG4gICAgICBlbHNlIGlmIChhZ2VudCkgWydxdWV1ZWQnLCAncnVubmluZyddLmluY2x1ZGVzKGFnZW50LnN0YXR1cykgPyBjYW5jZWxBZ2VudChhZ2VudCkgOiBkaXNtaXNzQWdlbnQoYWdlbnQpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBuYXZpZ2F0ZVN0cmlwKGV2ZW50LCAnc2hlbGwnLCBzaGVsbFJvd3MsIHsgbWFpbjogdHJ1ZSwgcHJldmlld1NoZWxsOiB0cnVlIH0pKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ2FnZW50LXN0cmlwJykgJiYgbmF2aWdhdGVTdHJpcChldmVudCwgJ2FnZW50JywgYWdlbnRSb3dzLCB7IG1haW46IHRydWUsIHByZXZpZXdBZ2VudDogdHJ1ZSB9KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQgPT09ICdzaGVsbC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgY29uc3Qgc2hlbGwgPSBmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJyA/IG51bGwgOiBzaGVsbFJvd3MuZmluZCgocykgPT4gYHNoZWxsLSR7cy5pZH1gID09PSBmbS5jdXJyZW50KCkpXG4gICAgICBpZiAoc2hlbGwpIHtcbiAgICAgICAgaWYgKHNoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSBraWxsU2hlbGwoc2hlbGwpXG4gICAgICAgIGVsc2UgZGlzbWlzc1NoZWxsKHNoZWxsKVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ2FnZW50LXN0cmlwJykgJiYgZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZm0uY3VycmVudCgpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ2FnZW50LXN0cmlwJykgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZm0uY3VycmVudCgpXG4gICAgICBjb25zdCBpdGVtID0gdGFyZ2V0ID09PSAnYWdlbnQtbWFpbicgPyBudWxsIDogYWdlbnRSb3dzLmZpbmQoKHJvdykgPT4gYGFnZW50LSR7cm93LmlkfWAgPT09IHRhcmdldClcbiAgICAgIGlmIChpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJykgc3RvcE9yRGlzbWlzc0RlbGliZXJhdGlvbihpdGVtKVxuICAgICAgZWxzZSBpZiAoaXRlbSkge1xuICAgICAgICBpZiAoWydxdWV1ZWQnLCAncnVubmluZyddLmluY2x1ZGVzKGl0ZW0uc3RhdHVzKSkgY2FuY2VsQWdlbnQoaXRlbSlcbiAgICAgICAgZWxzZSBkaXNtaXNzQWdlbnQoaXRlbSlcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScgJiYgYnVzeSgpICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpbnRlcnJ1cHQoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdjJykge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuICAgICAgaWYgKG5vdyAtIHJlZnMucXVpdEF0IDwgMTUwMCkge1xuICAgICAgICBhd2FpdCBjdGwuc2h1dGRvd24oKVxuICAgICAgICBwcm9jZXNzLmV4aXQoMClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZnMucXVpdEF0ID0gbm93XG4gICAgICAgIGNvbnN0IHJ1bm5pbmcgPSBib290LnNoZWxscy5ydW5uaW5nKClcbiAgICAgICAgZmxhc2gocnVubmluZyA/IGAke3J1bm5pbmd9ICR7cnVubmluZyA9PT0gMSA/ICdzaGVsbCcgOiAnc2hlbGxzJ30gcnVubmluZyAgY3RybCtjIGFnYWluIHRvIGV4aXQgYW5kIGtpbGwgJHtydW5uaW5nID09PSAxID8gJ2l0JyA6ICd0aGVtJ31gIDogJ2N0cmwrYyBhZ2FpbiB0byBleGl0JylcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdmZWVkJykgJiYgZXZlbnQua2V5ID09PSAnLycpIHtcbiAgICAgIGNvbnZlcnNhdGlvblNlYXJjaC5vcGVuKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncicgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGlmIChidXN5KCkpIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgZWxzZSBpZiAodXNlckVudHJpZXMoZGVyaXZlZCgpKS5sZW5ndGggPT09IDApIGZsYXNoKCdub3RoaW5nIHRvIHJld2luZCB5ZXQnKVxuICAgICAgZWxzZSBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGlmIChidXN5KCkpIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgICBlbHNlIHtcbiAgICAgICAgc2V0U2hvd1Jlc3VtZVBhbmVsKHRydWUpXG4gICAgICAgIHJlZnJlc2hTZXNzaW9ucyhyZXN1bWVTY29wZSgpKVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgc2V0U2hvd01vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncCcgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIG9wZW5Qcm9qZWN0UGFuZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdiJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaWYgKCFlZmZvcnRBcHBsaWVzKCkpIGZsYXNoKGAke21vZGVsKCkubmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBlZmZvcnQgY29udHJvbGApXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBbbnVsbCwgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXVxuICAgICAgICBjb25zdCBuZXh0ID0gb3JkZXJbKG9yZGVyLmluZGV4T2YoZWZmb3J0KCkgPz8gbnVsbCkgKyAxKSAlIG9yZGVyLmxlbmd0aF1cbiAgICAgICAgc2V0U2Vzc2lvbkVmZm9ydChuZXh0KVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93SGlzdG9yeVBhbmVsKCkpIHtcbiAgICAgIHN3aXRjaEhpc3RTY29wZSgoaGlzdFNjb3BlKCkgKyAxKSAlIEhJU1RPUllfU0NPUEVTLmxlbmd0aClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd01lbW9yeVBhbmVsKCkpIHtcbiAgICAgIHNldE1lbVNjb3BlKChzKSA9PiAocyArIDEpICUgTUVNT1JZX1NDT1BFUy5sZW5ndGgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dSZXN1bWVQYW5lbCgpKSB7XG4gICAgICBjb25zdCBuZXh0ID0gKHJlc3VtZVNjb3BlKCkgKyAxKSAlIFJFU1VNRV9TQ09QRVMubGVuZ3RoXG4gICAgICBzZXRSZXN1bWVTY29wZShuZXh0KVxuICAgICAgcmVmcmVzaFNlc3Npb25zKG5leHQpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3onICYmIHN0YXRlLnJld2luZFVuZG8gJiYgIWJ1c3koKSAmJiB2aWV3KCkgPT09ICdjaGF0Jykge1xuICAgICAgdW5kb1Jld2luZCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBmbXRFbGFwc2VkID0gKHMpID0+IChzIDwgNjAgPyBgJHtzfXNgIDogYCR7TWF0aC5mbG9vcihzIC8gNjApfW0gJHtzICUgNjB9c2ApXG4gIGNvbnN0IGVsYXBzZWQgPSBmbXRFbGFwc2VkKGJ1c3koKSA/IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBzdGFydGVkQXQoKSkgLyAxMDAwKSkgOiAwKVxuXG4gIGNvbnN0IHNsYXNoUmFuZ2UgPSBjb21tYW5kQXQoaW5wdXQoKSwgaW5wdXRDdXJzb3IoKSlcbiAgY29uc3Qgc2xhc2hRdWVyeSA9IHNsYXNoUmFuZ2U/LnF1ZXJ5ID8/IG51bGxcbiAgY29uc3Qgc2hvd0NvbW1hbmRzID0gc2xhc2hSYW5nZSAhPT0gbnVsbCAmJiAhYW55UGFuZWwoKVxuICBjb25zdCBtYXRjaGVkQ29tbWFuZHMgPSAhc2hvd0NvbW1hbmRzXG4gICAgPyBbXVxuICAgIDogY21kQ3ljbGUoKVxuICAgICAgPyBjbWRDeWNsZSgpLm1hdGNoZXNcbiAgICAgIDogYWxsQ29tbWFuZHMuZmlsdGVyKChjKSA9PiAoYy5jb21tYW5kIHx8IChzbGFzaFJhbmdlLnN0YXJ0ID09PSAwICYmIHNsYXNoUmFuZ2UuZW5kID09PSBpbnB1dCgpLmxlbmd0aCkpICYmIGMubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoc2xhc2hRdWVyeS50b0xvd2VyQ2FzZSgpKSlcblxuICBjb25zdCBhdE1hdGNoID0gaW5wdXQoKS5tYXRjaCgvKF58W1xccyhdKUAoW15cXHNAXSopJC8pXG4gIGNvbnN0IHNob3dGaWxlcyA9IGF0TWF0Y2ggIT09IG51bGwgJiYgIXNob3dDb21tYW5kcyAmJiAhZmlsZXNEaXNtaXNzZWQoKSAmJiAhYW55UGFuZWwoKVxuICBpZiAoc2hvd0ZpbGVzKSB7XG4gICAgbGlzdEZpbGVzKGN3ZCkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgIGlmIChmaWxlcyAhPT0gZmlsZUxpc3QoKSkgc2V0RmlsZUxpc3QoZmlsZXMpXG4gICAgfSlcbiAgfVxuICBjb25zdCBtYXRjaGVkRmlsZXMgPSBzaG93RmlsZXNcbiAgICA/IGZpbGVMaXN0KClcbiAgICAgICAgLm1hcCgoZikgPT4gW2Z1enp5U2NvcmUoYXRNYXRjaFsyXSwgZiksIGZdKVxuICAgICAgICAuZmlsdGVyKChbc2NvcmVdKSA9PiBzY29yZSA+PSAwKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYlswXSAtIGFbMF0pXG4gICAgICAgIC5tYXAoKFssIGZdKSA9PiBmKVxuICAgIDogW11cblxuICBmdW5jdGlvbiBwaWNrRmlsZShmKSB7XG4gICAgY29uc3QgdiA9IGlucHV0KClcbiAgICBjb25zdCBhdCA9IHYubGFzdEluZGV4T2YoJ0AnKVxuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gY3RsLmF0dGFjaFByb2plY3RGaWxlKGYpXG4gICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgICBzZXRJbnB1dCh2LnNsaWNlKDAsIGF0KSArIHBsYWNlaG9sZGVyICsgJyAnKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJbnB1dCh2LnNsaWNlKDAsIGF0ICsgMSkgKyBmICsgJyAnKVxuICAgIH1cbiAgICBzZXRGaWxlSW5kZXgoMClcbiAgfVxuXG4gIGNvbnN0IGNvbXBDdHggPSBjb21wbGV0aW5nKCkgPyBjb21wbGV0aW9uQ29udGV4dCh7IHZhbHVlOiBpbnB1dCgpLCByZXNvbHZlOiBjb21wbGV0aW9uU291cmNlIH0pIDogbnVsbFxuICBjb25zdCBzaG93Q29tcGxldGlvbiA9ICEhY29tcEN0eCAmJiBjb21wQ3R4Lm1hdGNoZXMubGVuZ3RoID4gMCAmJiAhc2hvd0NvbW1hbmRzICYmICFzaG93RmlsZXMgJiYgIWFueVBhbmVsKClcblxuICBjb25zdCByZXdpbmRFbnRyaWVzID0gKCkgPT4gdXNlckVudHJpZXMoZGVyaXZlZCgpKVxuICBjb25zdCByZXdpbmRPcHRpb25zID0gKCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSByZXdpbmRUYXJnZXQoKVxuICAgIGlmICghdGFyZ2V0KSByZXR1cm4gW11cbiAgICBjb25zdCB7IG1zZ3MsIGVkaXRzIH0gPSByZXdpbmRTdGF0cyhkZXJpdmVkKCksIHRhcmdldC5pbmRleClcbiAgICBjb25zdCBlID0gZWRpdHMubGVuZ3RoXG4gICAgY29uc3QgZWRpdHNMYWJlbCA9IGAke2V9ICR7ZSA9PT0gMSA/ICdlZGl0JyA6ICdlZGl0cyd9YFxuICAgIGNvbnN0IG9wdHMgPSBbXVxuICAgIGlmIChlID4gMCkgb3B0cy5wdXNoKHsga2V5OiAnYm90aCcsIGxhYmVsOiAncmVzdG9yZSBjb2RlIGFuZCBjb252ZXJzYXRpb24nLCBkZXNjOiBgY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgJHtlZGl0c0xhYmVsfSByZXZlcnRlZGAgfSlcbiAgICBvcHRzLnB1c2goe1xuICAgICAga2V5OiAnY2hhdCcsXG4gICAgICBsYWJlbDogZSA+IDAgPyAncmVzdG9yZSBjb252ZXJzYXRpb24gb25seScgOiAncmVzdG9yZSBjb252ZXJzYXRpb24nLFxuICAgICAgZGVzYzogZSA+IDAgPyAnY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgZmlsZSBjaGFuZ2VzIGtlcHQnIDogYGNoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgIGRyb3BzICR7bXNnc30gZW50cmllc2AsXG4gICAgfSlcbiAgICBpZiAoZSA+IDApIG9wdHMucHVzaCh7IGtleTogJ2NvZGUnLCBsYWJlbDogJ3Jlc3RvcmUgY29kZSBvbmx5JywgZGVzYzogYGNvbnZlcnNhdGlvbiBrZXB0ICAke2VkaXRzTGFiZWx9IHJldmVydGVkYCB9KVxuICAgIG9wdHMucHVzaCh7IGtleTogJ3N1bW1hcnknLCBsYWJlbDogJ3Jld2luZCBhbmQga2VlcCBhIHN1bW1hcnknLCBkZXNjOiAnZHJvcHBlZCBlbnRyaWVzIGNvbGxhcHNlIGludG8gYSBvbmUtbGluZSBub3RlJyB9KVxuICAgIHJldHVybiBvcHRzXG4gIH0pKClcblxuICBjb25zdCB1c2FnZSA9IGxpdmVVc2FnZSgpIHx8IGRlcml2ZWQoKS51c2FnZUFjdGl2ZVxuICBjb25zdCBjb250ZXh0UGVyY2VudCA9IG1vZGVsKCkuY29udGV4dCA+IDAgJiYgZGVyaXZlZCgpLmxhc3RQcm9tcHRUb2tlbnMgPiAwICYmIGRlcml2ZWQoKS5sYXN0UHJvbXB0TW9kZWwgPT09IG1vZGVsKCkubmFtZVxuICAgID8gTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKChkZXJpdmVkKCkubGFzdFByb21wdFRva2VucyAvIG1vZGVsKCkuY29udGV4dCkgKiAxMDApKVxuICAgIDogMFxuICBjb25zdCB2aXNpYmxlU2hlbGxzID0gc2hlbGxSb3dzXG4gIGNvbnN0IHZpZXdlZFNoZWxsID0gdmlld2VkU2hlbGxJZCgpID8gdmlzaWJsZVNoZWxscy5maW5kKChzKSA9PiBzLmlkID09PSB2aWV3ZWRTaGVsbElkKCkpIDogbnVsbFxuICBjb25zdCBjb21iaW5lZEFjdGl2aXR5ID0gdmlzaWJsZVNoZWxscy5sZW5ndGggPiAwICYmIGFnZW50Um93cy5sZW5ndGggPiAwXG4gIGNvbnN0IHNoZWxsU3RyaXBGb2N1cyA9IGZtLmlzKCdzaGVsbC1zdHJpcCcpIHx8IChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnc2hlbGwtJykpID8gZm0uY3VycmVudCgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkU2hlbGxJZCA9IHNoZWxsU3RyaXBGb2N1cyAmJiBzaGVsbFN0cmlwRm9jdXMgIT09ICdzaGVsbC1tYWluJyA/IHNoZWxsU3RyaXBGb2N1cy5zbGljZSgnc2hlbGwtJy5sZW5ndGgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkU2hlbGwgPSBmb2N1c2VkU2hlbGxJZCA/IHZpc2libGVTaGVsbHMuZmluZCgocykgPT4gcy5pZCA9PT0gZm9jdXNlZFNoZWxsSWQpIDogbnVsbFxuICBjb25zdCBoaW50ZWRTaGVsbCA9IGZvY3VzZWRTaGVsbCB8fCB2aWV3ZWRTaGVsbFxuICBjb25zdCBzaGVsbEFjdGlvbkhpbnQgPSBoaW50ZWRTaGVsbCA/IGBjdHJsK3ggJHtoaW50ZWRTaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJyA/ICdraWxsJyA6ICdkaXNtaXNzJ31gIDogJydcbiAgY29uc3Qgc2hlbGxXaW5kb3dUYXJnZXQgPSBzaGVsbFN0cmlwRm9jdXMgPT09ICdzaGVsbC1tYWluJyA/IDAgOiB2aXNpYmxlU2hlbGxzLmZpbmRJbmRleCgocykgPT4gcy5pZCA9PT0gKGZvY3VzZWRTaGVsbElkIHx8IHZpZXdlZFNoZWxsSWQoKSkpXG4gIGNvbnN0IHNoZWxsV2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KHNoZWxsV2luZG93T2Zmc2V0KCksIHNoZWxsV2luZG93VGFyZ2V0LCB2aXNpYmxlU2hlbGxzLmxlbmd0aCwgU0hFTExfU1RSSVBfTUFYKVxuICBpZiAoc2hlbGxXaW5kb3dTdGFydCAhPT0gc2hlbGxXaW5kb3dPZmZzZXQoKSkgc2V0U2hlbGxXaW5kb3dPZmZzZXQoc2hlbGxXaW5kb3dTdGFydClcbiAgY29uc3Qgc2hlbGxXaW5kb3cgPSB2aXNpYmxlU2hlbGxzLnNsaWNlKHNoZWxsV2luZG93U3RhcnQsIHNoZWxsV2luZG93U3RhcnQgKyBTSEVMTF9TVFJJUF9NQVgpXG4gIGFnZW50c1ZlcnNpb24oKVxuICBjb25zdCB2aXNpYmxlQWdlbnRzID0gYWdlbnRSb3dzXG4gIGNvbnN0IHZpZXdlZEFnZW50ID0gdmlld2VkQWdlbnRJZCgpID8gYWdlbnRSb3dzLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSB2aWV3ZWRBZ2VudElkKCkpIDogbnVsbFxuICBjb25zdCBhZ2VudFN0cmlwRm9jdXMgPSBmbS5pcygnYWdlbnQtc3RyaXAnKSB8fCAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgZm0uY3VycmVudCgpLnN0YXJ0c1dpdGgoJ2FnZW50LScpKSA/IGZtLmN1cnJlbnQoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZEFnZW50SWQgPSBhZ2VudFN0cmlwRm9jdXMgJiYgYWdlbnRTdHJpcEZvY3VzICE9PSAnYWdlbnQtbWFpbicgPyBhZ2VudFN0cmlwRm9jdXMuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZEFnZW50ID0gZm9jdXNlZEFnZW50SWQgPyBhZ2VudFJvd3MuZmluZCgocm93KSA9PiByb3cuaWQgPT09IGZvY3VzZWRBZ2VudElkKSA6IG51bGxcbiAgY29uc3QgaGludGVkQWdlbnQgPSBmb2N1c2VkQWdlbnQgfHwgdmlld2VkQWdlbnRcbiAgY29uc3QgYWdlbnRBY3Rpb25IaW50ID0gaGludGVkQWdlbnRcbiAgICA/IGBjdHJsK3ggJHtbJ3F1ZXVlZCcsICdydW5uaW5nJ10uaW5jbHVkZXMoaGludGVkQWdlbnQuc3RhdHVzKSA/ICdjYW5jZWwnIDogJ2Rpc21pc3MnfWBcbiAgICA6ICcnXG4gIGNvbnN0IGFnZW50V2luZG93VGFyZ2V0ID0gYWdlbnRTdHJpcEZvY3VzID09PSAnYWdlbnQtbWFpbidcbiAgICA/IDBcbiAgICA6IHZpc2libGVBZ2VudHMuZmluZEluZGV4KChhKSA9PiBhLmlkID09PSAoZm9jdXNlZEFnZW50SWQgfHwgdmlld2VkQWdlbnRJZCgpKSlcbiAgY29uc3QgYWdlbnRXaW5kb3dTdGFydCA9IHN0cmlwV2luZG93U3RhcnQoYWdlbnRXaW5kb3dPZmZzZXQoKSwgYWdlbnRXaW5kb3dUYXJnZXQsIHZpc2libGVBZ2VudHMubGVuZ3RoLCBBR0VOVF9TVFJJUF9NQVgpXG4gIGlmIChhZ2VudFdpbmRvd1N0YXJ0ICE9PSBhZ2VudFdpbmRvd09mZnNldCgpKSBzZXRBZ2VudFdpbmRvd09mZnNldChhZ2VudFdpbmRvd1N0YXJ0KVxuICBjb25zdCBhZ2VudFdpbmRvdyA9IHZpc2libGVBZ2VudHMuc2xpY2UoYWdlbnRXaW5kb3dTdGFydCwgYWdlbnRXaW5kb3dTdGFydCArIEFHRU5UX1NUUklQX01BWClcbiAgY29uc3QgcGVuZGluZ1dha2V1cHMgPSBib290Lndha2V1cHMucGVuZGluZygpXG4gIGdpdFZlcnNpb24oKVxuICBjb25zdCBnaXRJbmZvID0gZ2l0Rm9vdGVyKCkgPyBib290LmdpdC5zdGF0dXMoKSA6IG51bGxcblxuICBpZiAodmlldygpID09PSAnaGVscCcpIHtcbiAgICByZXR1cm4gPEhlbHAgY29tbWFuZHM9e0NPTU1BTkRTfSBvbkNsb3NlPXsoKSA9PiBzZXRWaWV3KCdjaGF0Jyl9IC8+XG4gIH1cblxuICBoaWdobGlnaHRWZXJzaW9uKClcblxuICBjb25zdCBtYWluVHJhbnNjcmlwdCA9IHN0ZWVyKCkgPyBzdGVlclByZXZpZXcoKS50cmFuc2NyaXB0IDogZGVyaXZlZCgpLnRyYW5zY3JpcHRcbiAgY29uc3Qgc2VsZWN0ZWRTdGVlck1lc3NhZ2VJZCA9IHN0ZWVyUm93cygpW3N0ZWVyKCk/LnNlbGVjdGVkXT8ubWVzc2FnZUlkXG4gIGNvbnN0IGRlY29yYXRlZFRyYW5zY3JpcHQgPSBzdGVlcigpID8gbWFpblRyYW5zY3JpcHQubWFwKChpdGVtKSA9PiAoe1xuICAgIC4uLml0ZW0sXG4gICAgc3RlZXJTZWxlY3RlZDogaXRlbS5tZXNzYWdlSWQgPT09IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWQsXG4gIH0pKSA6IG1haW5UcmFuc2NyaXB0XG4gIGNvbnN0IGFjdGl2ZVNoZWxsID0gc2hlbGxTdHJpcEZvY3VzID8gZm9jdXNlZFNoZWxsIDogYWdlbnRTdHJpcEZvY3VzID8gbnVsbCA6IHZpZXdlZFNoZWxsXG4gIGNvbnN0IGFjdGl2ZUFnZW50ID0gYWdlbnRTdHJpcEZvY3VzID8gZm9jdXNlZEFnZW50IDogc2hlbGxTdHJpcEZvY3VzID8gbnVsbCA6IHZpZXdlZEFnZW50XG4gIGxldCBzaGVsbE91dHB1dCA9IG51bGxcbiAgaWYgKGFjdGl2ZVNoZWxsKSB7XG4gICAgdHJ5IHsgc2hlbGxPdXRwdXQgPSBib290LnNoZWxscy5vdXRwdXQoYWN0aXZlU2hlbGwuaWQsIHsgdGFpbDogMjAwMCB9KSB9IGNhdGNoIHt9XG4gIH1cbiAgY29uc3Qgc2hlbGxUcmFuc2NyaXB0ID0gYWN0aXZlU2hlbGwgPyBbXG4gICAgeyBraW5kOiAnc2hlbGwtY29tbWFuZCcsIHRleHQ6IGFjdGl2ZVNoZWxsLmNvbW1hbmQgfSxcbiAgICB7IGtpbmQ6ICdzaGVsbC1vdXRwdXQnLCB0ZXh0OiBzaGVsbE91dHB1dD8ub3V0cHV0IHx8ICdubyBvdXRwdXQgeWV0JyB9LFxuICBdIDogbnVsbFxuICBjb25zdCB0cmFuc2NyaXB0U291cmNlID0gYWN0aXZlU2hlbGwgPyBgc2hlbGw6JHthY3RpdmVTaGVsbC5pZH1gIDogYWN0aXZlQWdlbnQgPyBgYWdlbnQ6JHthY3RpdmVBZ2VudC5pZH1gIDogJ21haW4nXG4gIGNvbnN0IHRyYW5zY3JpcHQgPSBzaGVsbFRyYW5zY3JpcHQgfHwgKGFjdGl2ZUFnZW50ID8gYWdlbnRUcmFuc2NyaXB0KGFjdGl2ZUFnZW50KSA6IGRlY29yYXRlZFRyYW5zY3JpcHQpXG4gIGNvbnN0IGRlbGliZXJhdGlvblZpZXcgPSBhY3RpdmVBZ2VudD8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbidcbiAgY29uc3QgaXNvbGF0ZWRUcmFuc2NyaXB0ID0gYWN0aXZlQWdlbnQgfHwgYWN0aXZlU2hlbGxcbiAgY29uc3QgZ3JvdXBJdGVtcyA9IChzb3VyY2UsIGFjdGl2ZSA9IGZhbHNlKSA9PiBzdGVlcigpXG4gICAgPyBjb2xsYXBzZVN0ZWVyVG9vbHMoc291cmNlKVxuICAgIDogY29tcGFjdFRvb2xIaXN0b3J5KClcbiAgICAgID8gY29tcGFjdFRyYW5zY3JpcHRSdW5zKHNvdXJjZSwgYWN0aXZlKVxuICAgICAgOiBzb3VyY2VcbiAgY29uc3QgdHJhbnNjcmlwdEl0ZW1zID0gZ3JvdXBJdGVtcyh0cmFuc2NyaXB0LCBhY3RpdmVBZ2VudD8uc3RhdHVzID09PSAncnVubmluZycpXG4gIGNvbnN0IHdpbmRvd2VkID0gZGVsaWJlcmF0aW9uVmlldyA/IHsgaXRlbXM6IHRyYW5zY3JpcHRJdGVtcywgaGlkZGVuSXRlbXM6IDAsIGhpZGRlbkNvdW50OiAwIH0gOiB0cmFuc2NyaXB0V2luZG93KHRyYW5zY3JpcHRJdGVtcywgaGlzdFdpbmRvdygpKVxuICBjb25zdCBoaWRkZW5Db3VudCA9IHdpbmRvd2VkLmhpZGRlbkNvdW50XG4gIGNvbnN0IHZpc2libGVJdGVtcyA9IGlzb2xhdGVkVHJhbnNjcmlwdCA/IHdpbmRvd2VkLml0ZW1zIDogWy4uLndpbmRvd2VkLml0ZW1zLCAuLi5ncm91cEl0ZW1zKG92ZXJsYXkoKSwgdHVyblBoYXNlKCkgPT09ICd0b29scycpXVxuICBjb25zdCBwcmVwYXJlZENvbnZlcnNhdGlvbiA9IGNvbnZlcnNhdGlvblNlYXJjaC5wcmVwYXJlKHZpc2libGVJdGVtcylcbiAgY29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlcyA9IHByZXBhcmVkQ29udmVyc2F0aW9uLm1hdGNoZXNcbiAgY29uc3QgaXRlbXMgPSBwcmVwYXJlZENvbnZlcnNhdGlvbi5pdGVtc1xuXG4gIGNvbnN0IHdpZGVMYXlvdXQgPSB3aWRlU2lkZWJhcigpICYmIHRlcm1pbmFsV2lkdGgoKSA+IDE2MFxuXG4gIGlmIChzaG93TWVtb3J5UGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVtb3J5UGFuZWxcbiAgICAgICAgbWVtb3JpZXM9e21lbW9yeUxpc3QoKS5maWx0ZXIoKG0pID0+IE1FTU9SWV9TQ09QRVNbbWVtU2NvcGUoKV0gPT09ICdhbGwnIHx8IG0uc2NvcGUgPT09IE1FTU9SWV9TQ09QRVNbbWVtU2NvcGUoKV0pfVxuICAgICAgICBzY29wZXM9e01FTU9SWV9TQ09QRVN9XG4gICAgICAgIHNjb3BlSW5kZXg9e21lbVNjb3BlKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25Ub2dnbGVEaXNhYmxlZD17dG9nZ2xlTWVtb3J5RGlzYWJsZWR9XG4gICAgICAgIG9uRm9yZ2V0PXtmb3JnZXRNZW1vcnl9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNZW1vcnlQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGlmIChzaG93UmVzdW1lUGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8UmVzdW1lUGFuZWxcbiAgICAgICAgc2Vzc2lvbnM9e3Jlc3VtZVNlc3Npb25zKCl9XG4gICAgICAgIHNjb3Blcz17UkVTVU1FX1NDT1BFU31cbiAgICAgICAgc2NvcGVJbmRleD17cmVzdW1lU2NvcGUoKX1cbiAgICAgICAgbG9hZGluZz17cmVzdW1lTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIGN1cnJlbnRJZD17c3RhdGUuc2Vzc2lvbj8uaWR9XG4gICAgICAgIG9uUGljaz17KG1ldGEpID0+IHtcbiAgICAgICAgICBpZiAobWV0YS5oZWFkZXIuaWQgPT09IHN0YXRlLnNlc3Npb24/LmlkKSByZXR1cm4gc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgIHJlc3VtZVNlc3Npb24obWV0YSlcbiAgICAgICAgfX1cbiAgICAgICAgb25EZWxldGU9e2RlbGV0ZVNlc3Npb25NZXRhfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd1Byb2plY3RQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxQcm9qZWN0UGFuZWxcbiAgICAgICAgcHJvamVjdHM9e3Byb2plY3RzKCl9XG4gICAgICAgIGxvYWRpbmc9e3Byb2plY3RzTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uUGlja0NoZWNrb3V0PXsoY2hlY2tvdXQpID0+IGNoZWNrb3V0LmxhdGVzdCA/IHJlc3VtZVNlc3Npb24oY2hlY2tvdXQubGF0ZXN0KSA6IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKGNoZWNrb3V0KS50aGVuKCgpID0+IHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpKX1cbiAgICAgICAgb25QaWNrU2Vzc2lvbj17cmVzdW1lU2Vzc2lvbn1cbiAgICAgICAgb25BZGRXb3JrdHJlZT17YWRkUHJvamVjdFdvcmt0cmVlfVxuICAgICAgICBvbkRlbGV0ZT17ZGVsZXRlUHJvamVjdENoZWNrb3V0fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dDb25maWdQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb25maWdQYW5lbFxuICAgICAgICB2YWx1ZXM9e3sgY2xvdWRzOiBjbG91ZHMoKSwgY29tcGFjdFRvb2xzOiBjb21wYWN0VG9vbEhpc3RvcnkoKSwgZ2l0U3RhdHVzOiBnaXRGb290ZXIoKSwgd2lkZVNpZGViYXI6IHdpZGVTaWRlYmFyKCksIHJlc2VhcmNoTW9kZWw6IGJvb3QucmVzZWFyY2hNb2RlbCwgc2hlbGxNb2RlbDogYm9vdC5zaGVsbE1vZGVsLCBkZWxpYmVyYXRpb25Nb2RlbDogYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCwgcGFydGljaXBhbnRBTW9kZWw6IGJvb3QucGFydGljaXBhbnRBTW9kZWwsIHBhcnRpY2lwYW50Qk1vZGVsOiBib290LnBhcnRpY2lwYW50Qk1vZGVsLCByZXNlYXJjaEFnZW50TGltaXQ6IHJlc2VhcmNoQWdlbnRMaW1pdCgpIH19XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25QaWNrU2hlbGxNb2RlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwodHJ1ZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja1Jlc2VhcmNoTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrUGFydGljaXBhbnRNb2RlbD17KHRhcmdldCkgPT4ge1xuICAgICAgICAgIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXQodGFyZ2V0KVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrRGVsaWJlcmF0aW9uTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25DaGFuZ2U9eyhuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnY2xvdWRzJykge1xuICAgICAgICAgICAgc2V0Q2xvdWRzKHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBhbmltYXRpb246IHsgY2xvdWRzOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnZ2l0U3RhdHVzJykge1xuICAgICAgICAgICAgc2V0R2l0Rm9vdGVyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC5naXRGb290ZXIgPSB2YWx1ZVxuICAgICAgICAgICAgYm9vdC5naXQuc2V0RW5hYmxlZCh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyBnaXRTdGF0dXM6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3aWRlU2lkZWJhcicpIHtcbiAgICAgICAgICAgIHNldFdpZGVTaWRlYmFyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC53aWRlU2lkZWJhciA9IHZhbHVlXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgd2lkZVNpZGViYXI6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdyZXNlYXJjaEFnZW50TGltaXQnKSB7XG4gICAgICAgICAgICBzZXRSZXNlYXJjaEFnZW50TGltaXQodmFsdWUpXG4gICAgICAgICAgICBib290LnJlc2VhcmNoQWdlbnRMaW1pdCA9IHZhbHVlXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IHJlc2VhcmNoOiB7IGFnZW50TGltaXQ6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0Q29tcGFjdFRvb2xIaXN0b3J5KHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBkaXNwbGF5OiB7IGNvbXBhY3RUb29sSGlzdG9yeTogdmFsdWUgfSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246IHdpZGVMYXlvdXQgPyAncm93JyA6ICdjb2x1bW4nLCBoZWlnaHQ6ICcxMDAlJyB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxIH19PlxuICAgICAge3RyYW5zY3JpcHQubGVuZ3RoID09PSAwID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBkaW06IGRpbW1pbmdQYW5lbCgpIH19PlxuICAgICAgICAgIDxFbXB0eVN0YXRlIHZlcnNpb249e3ZlcnNpb259IGNsb3Vkcz17Y2xvdWRzKCl9IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICA8U2Nyb2xsQm94XG4gICAgICAgICAgc3R5bGU9e3sgZmxleEdyb3c6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfX1cbiAgICAgICAgICBmb2N1c2VkPXtmbS5pcygnZmVlZCcpIHx8IGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJyl9XG4gICAgICAgICAgZm9sbG93Rm9jdXM9e3N0ZWVyKCkgPyBzdGVlckxpc3RGb2N1cyA6IG51bGx9XG4gICAgICAgICAgZm9jdXNQYWRkaW5nPXsxfVxuICAgICAgICAgIHNjcm9sbE9mZnNldD17Zm9sbG93KCkgPyAxZTkgOiBvZmZzZXQoKX1cbiAgICAgICAgICBvbk1ldHJpY3M9eyhtZXRyaWNzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHRyYW5zY3JpcHRNZXRyaWNzKClcbiAgICAgICAgICAgIGlmIChwcmV2aW91cz8udmlzaWJsZUhlaWdodCA9PT0gbWV0cmljcy52aXNpYmxlSGVpZ2h0ICYmIHByZXZpb3VzPy5jb250ZW50SGVpZ2h0ID09PSBtZXRyaWNzLmNvbnRlbnRIZWlnaHQpIHJldHVyblxuICAgICAgICAgICAgc2V0VHJhbnNjcmlwdE1ldHJpY3MobWV0cmljcylcbiAgICAgICAgICAgIGlmIChoaWRkZW5Db3VudCA+IDAgJiYgbWV0cmljcy52aXNpYmxlSGVpZ2h0ID4gMCAmJiBtZXRyaWNzLmNvbnRlbnRIZWlnaHQgPD0gbWV0cmljcy52aXNpYmxlSGVpZ2h0KSB7XG4gICAgICAgICAgICAgIHNldEhpc3RXaW5kb3coKHNpemUpID0+IHNpemUgKyBISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU2Nyb2xsPXsobmV4dCwgbWV0YSkgPT4ge1xuICAgICAgICAgIHNldEZvbGxvdyghIW1ldGE/LmF0Qm90dG9tKVxuICAgICAgICAgIC8vIGJhY2sgYXQgdGhlIGJvdHRvbTogbG9hZGVkIGhpc3RvcnkgaXMgb2ZmLXNjcmVlbiwgc28gcmUtaGlkaW5nXG4gICAgICAgICAgLy8gaXQgaXMgaW52aXNpYmxlIGFuZCByZXN0b3JlcyB0aGUgc21hbGwgcmVuZGVyIHdpbmRvd1xuICAgICAgICAgIGlmIChtZXRhPy5hdEJvdHRvbSAmJiBoaXN0V2luZG93KCkgPiBISVNUT1JZX1dJTkRPVykgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICBpZiAobmV4dCA9PT0gMCAmJiBoaWRkZW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIGtlZXAgdGhlIHZpZXcgYW5jaG9yZWQ6IGVzdGltYXRlIHRoZSByb3dzIHRoZSBuZXcgYmF0Y2ggYWRkc1xuICAgICAgICAgICAgLy8gYW5kIHNjcm9sbCBwYXN0IHRoZW0gc28gdGhlIGN1cnJlbnQgdG9wIGl0ZW0gc3RheXMgaW4gcGxhY2VcbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gTWF0aC5taW4oSElTVE9SWV9XSU5ET1csIHdpbmRvd2VkLmhpZGRlbkl0ZW1zKVxuICAgICAgICAgICAgY29uc3QgYXZnUm93cyA9IE1hdGgubWF4KDIsIE1hdGgucm91bmQoKG1ldGE/Lm1heE9mZnNldCB8fCAwKSAvIE1hdGgubWF4KDEsIGl0ZW1zLmxlbmd0aCkpKVxuICAgICAgICAgICAgc2V0SGlzdFdpbmRvdygodykgPT4gdyArIEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgc2V0T2Zmc2V0KGFkZGVkICogYXZnUm93cylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRPZmZzZXQobmV4dClcbiAgICAgICAgfX1cbiAgICAgICAgc2Nyb2xsYmFyXG4gICAgICA+XG4gICAgICAgIDxDb252ZXJzYXRpb25TY3JvbGxBbmNob3IgdGFyZ2V0PXtjb252ZXJzYXRpb25TZWFyY2guc2Nyb2xsfSAvPlxuICAgICAgICB7aGlkZGVuQ291bnQgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTIzMDMgJHtoaWRkZW5Db3VudC50b0xvY2FsZVN0cmluZygpfSBvbGRlciAke2hpZGRlbkNvdW50ID09PSAxID8gJ21lc3NhZ2UnIDogJ21lc3NhZ2VzJ30gIHNjcm9sbCB0byB0b3AgdG8gbG9hZGB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAndXNlcicpLm1hcCgoaXRlbSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OnByb21wdDoke2l0ZW0ubWVzc2FnZUlkIHx8IGl9YH0gaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZSgpfSAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8RGVsaWJlcmF0aW9uRXhjaGFuZ2UgdHVybnM9e2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAnZGVsaWJlcmF0aW9uLXR1cm4nKX0gdmVyYm9zZT17dmVyYm9zZSgpfSB3aWRlPXt0ZXJtaW5hbFdpZHRoKCkgPj0gMTEwfSAvPlxuICAgICAgICAgICAge2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kICE9PSAndXNlcicgJiYgaXRlbS5raW5kICE9PSAnZGVsaWJlcmF0aW9uLXR1cm4nKS5tYXAoKGl0ZW0sIGkpID0+IChcbiAgICAgICAgICAgICAgPE1lc3NhZ2Uga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfTp0YWlsOiR7aXRlbS5tZXNzYWdlSWQgfHwgaXRlbS5jYWxsSWQgfHwgaX1gfSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlKCl9IC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IGl0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gc3RlZXIoKSAmJiBpdGVtLm1lc3NhZ2VJZCA/IChcbiAgICAgICAgICA8U3RlZXJNZXNzYWdlXG4gICAgICAgICAgICBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OiR7aXRlbS5tZXNzYWdlSWQgfHwgaXRlbS5jYWxsSWQgfHwgaGlkZGVuQ291bnQgKyBpfWB9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZSgpfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2l0ZW0ubWVzc2FnZUlkID09PSBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkfVxuICAgICAgICAgICAgZm9jdXM9e3N0ZWVyTGlzdEZvY3VzfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2VcbiAgICAgICAgICAgIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBoaWRkZW5Db3VudCArIGl9YH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlKCl9XG4gICAgICAgICAgICBjdXJyZW50TWF0Y2g9e2NvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXNbY29udmVyc2F0aW9uU2VhcmNoLmluZGV4KCldPy5pdGVtSW5kZXggPT09IGkgPyBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzW2NvbnZlcnNhdGlvblNlYXJjaC5pbmRleCgpXSA6IG51bGx9XG4gICAgICAgICAgICBzZWFyY2g9e2NvbnZlcnNhdGlvblNlYXJjaH1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgICAgICB7IWlzb2xhdGVkVHJhbnNjcmlwdCAmJiBzdHJlYW1pbmcoKSAhPT0gbnVsbCAmJiBzdHJlYW1pbmcoKSAhPT0gJycgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2Uga2V5PVwic3RyZWFtaW5nXCIgaXRlbT17eyBraW5kOiAnYXNzaXN0YW50JywgdGV4dDogYCR7c3RyZWFtaW5nKCl9XHUyNThCYCB9fSAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2Nyb2xsQm94PlxuICAgICAgICB7Y29udmVyc2F0aW9uU2VhcmNoLmFjdGl2ZSgpID8gKFxuICAgICAgICAgIDxDb252ZXJzYXRpb25TZWFyY2hCYXIgc2VhcmNoPXtjb252ZXJzYXRpb25TZWFyY2h9IG1hdGNoZXM9e2NvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXN9IC8+XG4gICAgICAgICkgOiBmbS5pcygnZmVlZCcpICYmICFhbnlQYW5lbCgpICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwLCBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IGFjY2VudCgpLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiAnYmxhY2snIH19Pnsnai9rICBcdTIxOTEvXHUyMTkzIHNjcm9sbCAgIGcvRyBlbmRzICAgLyBzZWFyY2ggICBjdHJsLXUvZCBwYWdlJ308L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD59XG5cbiAgICAgIHsoZXhwZWRpdGVkKCkubGVuZ3RoID4gMCB8fCBxdWV1ZWQoKS5sZW5ndGggPiAwKSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge2V4cGVkaXRlZCgpLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgPGJveCBrZXk9e2BleHBlZGl0ZWQtJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+eydcdTIxQTAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGFjY2VudCgpIH19PnttZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIHtpID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57JyAgYWZ0ZXIgbmV4dCB0b29sICBcdTIxOTEgdG8gZWRpdCd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkpfVxuICAgICAgICAgIHtxdWV1ZWQoKS5tYXAoKG1lc3NhZ2UsIGkpID0+IChcbiAgICAgICAgICAgIDxib3gga2V5PXtgcGVuZGluZy0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjAzQSAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogTVVURUQgfX0+e21lc3NhZ2UucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2kgPT09IDAgJiYgZXhwZWRpdGVkKCkubGVuZ3RoID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgcGVuZGluZyAgXHUyMTkxIGVkaXQgIFx1MjE5MiBzZW5kIGFmdGVyIG5leHQgdG9vbCd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtjb21tYW5kRm9ybSgpICYmIDxDb21tYW5kRm9ybVxuICAgICAgICBuYW1lPXtjb21tYW5kRm9ybSgpLm5hbWV9XG4gICAgICAgIGZpZWxkcz17Y29tbWFuZEZvcm0oKS5maWVsZHN9XG4gICAgICAgIGZpbGVzPXtmaWxlTGlzdCgpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uU3VibWl0PXsodmFsdWVzKSA9PiBmaW5pc2hDb21tYW5kKGNvbW1hbmRGb3JtKCksIHZhbHVlcyl9XG4gICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7IHNldENvbW1hbmRGb3JtKG51bGwpOyByZWZzLmNvbW1hbmRFeHBhbnNpb24gPSBudWxsOyBmbS5mb2N1cygnaW5wdXQnKSB9fVxuICAgICAgLz59XG5cbiAgICAgIHtxdWVzdGlvblJlcXVlc3QoKSAmJiAoXG4gICAgICAgIDxRdWVzdGlvbkZvcm1cbiAgICAgICAgICByZXF1ZXN0PXtxdWVzdGlvblJlcXVlc3QoKX1cbiAgICAgICAgICBmb2N1c2VkPXtmbS5pcygncXVlc3Rpb24nKSAmJiAhYW55UGFuZWwoKX1cbiAgICAgICAgICBvblN1Ym1pdD17KGFuc3dlcnMpID0+IHtcbiAgICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgICAgICAgICBjdGwuYW5zd2VyUXVlc3Rpb24oYW5zd2VycylcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgY3RsLmNhbmNlbFF1ZXN0aW9uKClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3N0ZWVyKCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57c3RlZXIoKS5lZGl0aW5nID8gYCR7c3RlZXIoKS5hZGRpbmcgPyAnQWRkJyA6ICdFZGl0J30gJHtzdGVlcigpLnJvbGV9YCA6IGBTdGVlciAgJHtzdGVlcigpLmNoYW5nZXMubGVuZ3RofSBzdGFnZWRgfTwvdGV4dD5cbiAgICAgICAgICB7c3RlZXIoKS5lZGl0aW5nID8gKFxuICAgICAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZtLmlzKCdzdGVlcicpfVxuICAgICAgICAgICAgICB2YWx1ZT17c3RlZXJUZXh0KCl9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRTdGVlclRleHR9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtzdGFnZVN0ZWVyVGV4dH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGVlclRleHQoJycpXG4gICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdCA9IFNURUVSX1JPTEVTLmluZGV4T2Yoc3RlZXIoKS5yb2xlKVxuICAgICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCByb2xlOiBTVEVFUl9ST0xFU1soYXQgKyAxKSAlIFNURUVSX1JPTEVTLmxlbmd0aF0gfSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgICAgIGNsZWFyT25TdWJtaXRcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgICAgICBjdXJzb3I9e3sgYmxpbms6IHRydWUsIGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjE5MVx1MjE5MyBzZWxlY3QgIGVudGVyIGVkaXQgIGEgYWRkIGFmdGVyICB4L2QgZGVsZXRlICBjdHJsK3MgYXBwbHkgIGVzYyBkaXNjYXJkJ308L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7IXN0ZWVyKCkgJiYgIXZpZXdlZEFnZW50ICYmICF2aWV3ZWRTaGVsbCAmJiA8TW91c2VGb2N1c1JlZ2lvbiBvblByZXNzPXsoKSA9PiBmbS5mb2N1cygnaW5wdXQnKX0gc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IHRyYW5zY3JpcHQubGVuZ3RoID09PSAwICYmIGNsb3VkcygpID8gMCA6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfHwgISFxdWVzdGlvblJlcXVlc3QoKSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKSA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydcdTI3NkYnfTwvdGV4dD5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAge2RpY3RhdGlvblN0YXR1cygpICE9PSAnaWRsZScgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgcmlnaHQ6IDAsIGNvbG9yOiBhY2NlbnQoKSwgYmc6IFBBTkVMX0JHLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT5cbiAgICAgICAgICAgIHtkaWN0YXRpb25JbmRpY2F0b3IoZGljdGF0aW9uU3RhdHVzKCksIGRpY3RhdGlvbkxldmVscygpKX1cbiAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICkgOiAoc3RhdGUuc2Vzc2lvbj8uaGVhZGVyLmZvcmtlZEZyb20gfHwgZGVyaXZlZCgpLnRpdGxlKSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiAwLCByaWdodDogMCwgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICB7c3RhdGUuc2Vzc2lvbj8uaGVhZGVyLmZvcmtlZEZyb20gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntkZXJpdmVkKCkudGl0bGUgPyAnXHUyNDQyICcgOiAnXHUyNDQyJ308L3RleHQ+fVxuICAgICAgICAgICAge2Rlcml2ZWQoKS50aXRsZSAmJiA8dGV4dCBzdHlsZT17eyBiZzogZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpID8gYWNjZW50KCkgOiBNVVRFRCwgY29sb3I6ICdibGFjaycsIGJvbGQ6IHRydWUgfX0+e2AgJHtkZXJpdmVkKCkudGl0bGV9IGB9PC90ZXh0Pn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgY29sb3I9e0ZHfVxuICAgICAgICAgIGxpbmVDb3VudGVyXG4gICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgZm9jdXNlZD17Zm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpfVxuICAgICAgICAgIHZhbHVlPXtpbnB1dCgpfVxuICAgICAgICAgIGN1cnNvck9mZnNldD17aW5wdXRDdXJzb3IoKX1cbiAgICAgICAgICBvbkN1cnNvckNoYW5nZT17KGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgc2V0SW5wdXRDdXJzb3IoY3Vyc29yKVxuICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgIHNldENtZEluZGV4KDApXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNoYW5nZT17KHYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHBsYWNlaG9sZGVyaXplSW1hZ2VQYXRocyh2LCB7XG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBzdGF0ZS5hdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgbmV4dElkOiAoKSA9PiArK3N0YXRlLmltYWdlQ291bnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc2V0SW5wdXQoY29udmVydGVkLnRleHQsIGNvbnZlcnRlZC50ZXh0ID09PSB2ID8gaW5wdXRDdXJzb3IoKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHNldENtZEluZGV4KDApXG4gICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgc2V0RmlsZUluZGV4KDApXG4gICAgICAgICAgICBzZXRIaXN0SWR4KC0xKVxuICAgICAgICAgICAgc2V0RmlsZXNEaXNtaXNzZWQoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNhbmNlbD17KCkgPT4ge1xuICAgICAgICAgICAgaWYgKGJ1c3koKSkgaW50ZXJydXB0KClcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBpbXBsaWNpdFJld2luZFRhcmdldChkZXJpdmVkKCksIGlucHV0KCkpXG4gICAgICAgICAgICAgIGlmICh0YXJnZXQpIHBlcmZvcm1SZXdpbmRUbyh0YXJnZXQsIHsga2V5OiAnY2hhdCcgfSlcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgICAgICBzZXRDb21wbGV0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgIHNldEZpbGVzRGlzbWlzc2VkKHRydWUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU3VibWl0PXtzZW5kfVxuICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgIGlmIChyZWZzLmRpY3RhdGlvbklucHV0LmhhbmRsZShlKSkgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIGlmIChlLmN0cmwgJiYgZS5rZXkgPT09ICd2Jykge1xuICAgICAgICAgICAgICB2b2lkIHJlZnMucGFzdGVJbWFnZSgpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jdHJsICYmIGUua2V5ID09PSAnZycpIHtcbiAgICAgICAgICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dC5zdGFydChlKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndGFiJyAmJiAhZS5jdHJsICYmICFlLm1ldGEgJiYgc2hvd0ZpbGVzICYmIG1hdGNoZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBpY2tGaWxlKG1hdGNoZWRGaWxlc1tNYXRoLm1pbihmaWxlSW5kZXgoKSwgbWF0Y2hlZEZpbGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhICYmIHNob3dDb21tYW5kcyAmJiBtYXRjaGVkQ29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBjeWNsZSA9IGNtZEN5Y2xlKClcbiAgICAgICAgICAgICAgaWYgKCFjeWNsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oY21kSW5kZXgoKSwgbWF0Y2hlZENvbW1hbmRzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgc2V0Q21kQ3ljbGUoeyBtYXRjaGVzOiBtYXRjaGVkQ29tbWFuZHMgfSlcbiAgICAgICAgICAgICAgICBzZXRDbWRJbmRleChzdGFydClcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gcmVwbGFjZUNvbW1hbmQoaW5wdXQoKSwgc2xhc2hSYW5nZSwgJy8nICsgbWF0Y2hlZENvbW1hbmRzW3N0YXJ0XS5uYW1lKVxuICAgICAgICAgICAgICAgIHNldElucHV0KG5leHQudGV4dCwgbmV4dC5jdXJzb3IpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IChjbWRJbmRleCgpICsgMSkgJSBjeWNsZS5tYXRjaGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgIHNldENtZEluZGV4KG5leHQpXG4gICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSByZXBsYWNlQ29tbWFuZChpbnB1dCgpLCBzbGFzaFJhbmdlLCAnLycgKyBjeWNsZS5tYXRjaGVzW25leHRdLm5hbWUpXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQocmVwbGFjZW1lbnQudGV4dCwgcmVwbGFjZW1lbnQuY3Vyc29yKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdwYXN0ZScgJiYgZS50ZXh0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gZXh0cmFjdEltYWdlUGF0aHMoZS50ZXh0KVxuICAgICAgICAgICAgICBpZiAocGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IHBhdGhzLm1hcCgocGF0aCkgPT4gY3RsLmF0dGFjaEltYWdlKHBhdGgpKVxuICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gZS5jdXJzb3IgPz8gZS52YWx1ZS5sZW5ndGhcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChlLnZhbHVlLnNsaWNlKDAsIGF0KSArIHBsYWNlaG9sZGVycy5qb2luKCcgJykgKyBlLnZhbHVlLnNsaWNlKGF0KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnYmFja3NwYWNlJyAmJiBlLmN1cnNvciA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBlLnZhbHVlLnNsaWNlKDAsIGUuY3Vyc29yKS5tYXRjaCgvXFxbSW1hZ2UgI1xcZCtcXF0kLylcbiAgICAgICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgY3RsLmRldGFjaEltYWdlKG1hdGNoWzBdKVxuICAgICAgICAgICAgICAgIHNldElucHV0KGUudmFsdWUuc2xpY2UoMCwgZS5jdXJzb3IgLSBtYXRjaFswXS5sZW5ndGgpICsgZS52YWx1ZS5zbGljZShlLmN1cnNvcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndGFiJyAmJiAhZS5jdHJsICYmICFlLm1ldGEpIHtcbiAgICAgICAgICAgICAgY29uc3QgY3R4ID0gY29tcGxldGlvbkNvbnRleHQoeyB2YWx1ZTogZS52YWx1ZSwgcmVzb2x2ZTogY29tcGxldGlvblNvdXJjZSB9KVxuICAgICAgICAgICAgICBpZiAoIWN0eCkgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgIGlmICghY29tcGxldGluZygpKSB7XG4gICAgICAgICAgICAgICAgc2V0Q29tcGxldGluZyh0cnVlKVxuICAgICAgICAgICAgICAgIHNldENvbXBJbmRleCgwKVxuICAgICAgICAgICAgICAgIGxpc3RGaWxlcyhjd2QpLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZmlsZXMgIT09IGZpbGVMaXN0KCkpIHNldEZpbGVMaXN0KGZpbGVzKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3R4Lm1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGFjY2VwdENvbXBsZXRpb24oZS52YWx1ZSwgY3R4LCBjdHgubWF0Y2hlc1tNYXRoLm1pbihjb21wSW5kZXgoKSwgY3R4Lm1hdGNoZXMubGVuZ3RoIC0gMSldKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jdHJsIHx8IGUubWV0YSB8fCBzaG93Q29tbWFuZHMgfHwgc2hvd0ZpbGVzKSByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3VwJyAmJiBlLnZhbHVlID09PSAnJyAmJiAoZXhwZWRpdGVkKCkubGVuZ3RoID4gMCB8fCBxdWV1ZWQoKS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICBzZXRJbnB1dChjdGwucmVjYWxsUGVuZGluZygpKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAncmlnaHQnICYmIGUudmFsdWUgPT09ICcnICYmIHF1ZXVlZCgpLmxlbmd0aCA+IDAgJiYgYnVzeSgpICYmICFjb21wYWN0aW5nKCkpIHtcbiAgICAgICAgICAgICAgY3RsLmV4cGVkaXRlUXVldWVkKClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJyb3dzaW5nID0gaGlzdElkeCgpID49IDBcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3VwJyAmJiAoYnJvd3NpbmcgfHwgZS52YWx1ZSA9PT0gJycpICYmIGhpc3RJZHgoKSA8IHNlbnQoKS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG4gPSBoaXN0SWR4KCkgKyAxXG4gICAgICAgICAgICAgIHNldEhpc3RJZHgobilcbiAgICAgICAgICAgICAgc2V0SW5wdXQoc2VudCgpW3NlbnQoKS5sZW5ndGggLSAxIC0gbl0udGV4dClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ2Rvd24nICYmIGJyb3dzaW5nKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG4gPSBoaXN0SWR4KCkgLSAxXG4gICAgICAgICAgICAgIHNldEhpc3RJZHgobilcbiAgICAgICAgICAgICAgc2V0SW5wdXQobiA8IDAgPyAnJyA6IHNlbnQoKVtzZW50KCkubGVuZ3RoIC0gMSAtIG5dLnRleHQpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9fVxuICAgICAgICAgIHN1Ym1pdE9uRW50ZXJcbiAgICAgICAgICBuZXdsaW5lT25CYWNrc2xhc2hFbnRlclxuICAgICAgICAgIGNsZWFyT25TdWJtaXQ9e2ZhbHNlfVxuICAgICAgICAgIG1heEhlaWdodD17OH1cbiAgICAgICAgICBjdXJzb3I9e3sgYmxpbms6IHRydWUsIGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvTW91c2VGb2N1c1JlZ2lvbj59XG5cbiAgICAgIHtzaG93Q29tbWFuZHMgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7bWF0Y2hlZENvbW1hbmRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBjb21tYW5kczwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17bWF0Y2hlZENvbW1hbmRzfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17Y21kSW5kZXgoKX1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3NldENtZEluZGV4fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17KGMpID0+IHJ1bkNvbW1hbmQoYyl9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21tYW5kcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhjLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57YC8ke2MubmFtZX1gLnBhZEVuZChtYXRjaGVkQ29tbWFuZHMucmVkdWNlKChtLCB4KSA9PiBNYXRoLm1heChtLCB4Lm5hbWUubGVuZ3RoICsgMyksIDEyKSl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IEZHIDogTVVURUQgfX0+e2MuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dGaWxlcyAmJiBtYXRjaGVkRmlsZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17bWF0Y2hlZEZpbGVzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2ZpbGVJbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldEZpbGVJbmRleH1cbiAgICAgICAgICAgIG9uU3VibWl0PXtwaWNrRmlsZX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRGaWxlc0Rpc21pc3NlZCh0cnVlKX1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dGaWxlcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhmLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGR19TT0ZUIH19PntmfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb21wbGV0aW9uICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtjb21wQ3R4Lm1hdGNoZXN9XG4gICAgICAgICAgICBzZWxlY3RlZD17Y29tcEluZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0Q29tcEluZGV4fVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhjYW5kaWRhdGUpID0+IGFjY2VwdENvbXBsZXRpb24oaW5wdXQoKSwgY29tcEN0eCwgY2FuZGlkYXRlKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtkaXNtaXNzQ29tcGxldGlvbn1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21wbGV0aW9uICYmIGRpY3RhdGlvblN0YXR1cygpID09PSAnaWRsZSd9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KGNhbmRpZGF0ZSwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkdfU09GVCB9fT57Y2FuZGlkYXRlfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogd2lkZUxheW91dCA/IDY0IDogdW5kZWZpbmVkLCBoZWlnaHQ6IHdpZGVMYXlvdXQgPyAnMTAwJScgOiB1bmRlZmluZWQgfX0+XG4gICAgICB7c2hvd01vZGVsUGFuZWwoKSAmJiAoXG4gICAgICAgIDxNb2RlbFBhbmVsXG4gICAgICAgICAgbW9kZWxzPXttb2RlbHN9XG4gICAgICAgICAgY3VycmVudD17bW9kZWwoKS5uYW1lfVxuICAgICAgICAgIGRlZmF1bHROYW1lPXtkZWZhdWx0TW9kZWwoKS5uYW1lfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dNb2RlbFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobSkgPT4ge1xuICAgICAgICAgICAgaWYgKGN0bC5zd2l0Y2hNb2RlbChtKSkgc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXsobSkgPT4ge1xuICAgICAgICAgICAgaWYgKGN0bC5zd2l0Y2hNb2RlbChtLCB7IGFzRGVmYXVsdDogdHJ1ZSB9KSkgc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCgpICYmIChcbiAgICAgICAgPE1vZGVsUGFuZWxcbiAgICAgICAgICBtb2RlbHM9e21vZGVscy5maWx0ZXIoKG0pID0+IG0uYXZhaWxhYmxlICE9PSBmYWxzZSl9XG4gICAgICAgICAgY3VycmVudD17cGFydGljaXBhbnRNb2RlbFRhcmdldCgpID8gYm9vdFtgJHtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCl9TW9kZWxgXSA6IHNlbGVjdGluZ1NoZWxsTW9kZWwoKSA/IGJvb3Quc2hlbGxNb2RlbCA6IHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkgPyBib290LmRlbGliZXJhdGlvbk1vZGVsIDogYm9vdC5yZXNlYXJjaE1vZGVsfVxuICAgICAgICAgIGRlZmF1bHROYW1lPXtudWxsfVxuICAgICAgICAgIHRpdGxlPXtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPyBgQ2hvb3NlIFBhcnRpY2lwYW50ICR7cGFydGljaXBhbnRNb2RlbFRhcmdldCgpID09PSAncGFydGljaXBhbnRBJyA/ICdBJyA6ICdCJ30gbW9kZWxgIDogc2VsZWN0aW5nU2hlbGxNb2RlbCgpID8gJ0Nob29zZSBzaGVsbCBtb2RlbCcgOiBzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpID8gJ0Nob29zZSBzeW50aGVzaXMgbW9kZWwnIDogJ0Nob29zZSBwYXJhbGxlbCB3b3JrZXIgbW9kZWwnfVxuICAgICAgICAgIGhpbnQ9XCJlbnRlcjogc2F2ZSBtb2RlbCAgZXNjOiBjYW5jZWxcIlxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dSZXNlYXJjaE1vZGVsUGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyhtKSA9PiB7XG4gICAgICAgICAgICBpZiAocGFydGljaXBhbnRNb2RlbFRhcmdldCgpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IHBhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA9PT0gJ3BhcnRpY2lwYW50QScgPyAnc2V0UGFydGljaXBhbnRBTW9kZWwnIDogJ3NldFBhcnRpY2lwYW50Qk1vZGVsJ1xuICAgICAgICAgICAgICBjdGxbbWV0aG9kXShtLm5hbWUpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGluZ1NoZWxsTW9kZWwoKSkge1xuICAgICAgICAgICAgICBjdGwuc2V0U2hlbGxNb2RlbChtLm5hbWUpXG4gICAgICAgICAgICAgIGZsYXNoKGBzaGVsbDogJHttLm5hbWV9YClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSkge1xuICAgICAgICAgICAgICBib290LmRlbGliZXJhdGlvbk1vZGVsID0gbS5uYW1lXG4gICAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgbW9kZWxzOiB7IGRlbGliZXJhdGlvbjogbS5uYW1lIH0gfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgICAgICAgICAgIGZsYXNoKGBkZWxpYmVyYXRpb246ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBib290LnJlc2VhcmNoTW9kZWwgPSBtLm5hbWVcbiAgICAgICAgICAgICAgd3JpdGVDb25maWcoeyBtb2RlbHM6IHsgcmVzZWFyY2hXb3JrZXI6IG0ubmFtZSB9IH0pLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgICAgICBmbGFzaChgcGFyYWxsZWwgd29ya2VyczogJHttLm5hbWV9YClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXQobnVsbClcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBjb25zdCBwZW5kaW5nID0gcGVuZGluZ1Jlc2VhcmNoKClcbiAgICAgICAgICAgIGNvbnN0IHBlbmRpbmdEZWNpc2lvbiA9IHBlbmRpbmdEZWxpYmVyYXRpb24oKVxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVG8gPSByZXNlYXJjaE1vZGVsUmV0dXJuKClcbiAgICAgICAgICAgIHNldFBlbmRpbmdSZXNlYXJjaChudWxsKVxuICAgICAgICAgICAgc2V0UGVuZGluZ0RlbGliZXJhdGlvbihudWxsKVxuICAgICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybihudWxsKVxuICAgICAgICAgICAgaWYgKHBlbmRpbmcpIHJ1bkNvbW1hbmQoeyBuYW1lOiAncGFyYWxsZWwnIH0sIHBlbmRpbmcudGFzaylcbiAgICAgICAgICAgIGVsc2UgaWYgKHBlbmRpbmdEZWNpc2lvbikgcnVuQ29tbWFuZCh7IG5hbWU6ICdkZWxpYmVyYXRlJyB9LCBwZW5kaW5nRGVjaXNpb24uZGVjaXNpb24pXG4gICAgICAgICAgICBlbHNlIGlmIChyZXR1cm5UbyA9PT0gJ2NvbmZpZycpIHNldFNob3dDb25maWdQYW5lbCh0cnVlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QaWNrRGVmYXVsdD17KCkgPT4ge319XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXQobnVsbClcbiAgICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbChmYWxzZSlcbiAgICAgICAgICAgIHNldFBlbmRpbmdSZXNlYXJjaChudWxsKVxuICAgICAgICAgICAgc2V0UGVuZGluZ0RlbGliZXJhdGlvbihudWxsKVxuICAgICAgICAgICAgaWYgKHJlc2VhcmNoTW9kZWxSZXR1cm4oKSA9PT0gJ2NvbmZpZycpIHNldFNob3dDb25maWdQYW5lbCh0cnVlKVxuICAgICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybihudWxsKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0VmZm9ydFBhbmVsKCkgJiYgKFxuICAgICAgICA8RWZmb3J0UGFuZWxcbiAgICAgICAgICBsZXZlbHM9e0VGRk9SVF9MRVZFTFN9XG4gICAgICAgICAgY3VycmVudD17ZWZmb3J0KCkgPz8gbnVsbH1cbiAgICAgICAgICBkZWZhdWx0TGV2ZWw9e2RlZmF1bHRFZmZvcnQoKSA/PyBudWxsfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dFZmZvcnRQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KGwpID0+IHtcbiAgICAgICAgICAgIHNldFNlc3Npb25FZmZvcnQobC5rZXkpXG4gICAgICAgICAgICBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvblBpY2tEZWZhdWx0PXsobCkgPT4ge1xuICAgICAgICAgICAgc2V0U2Vzc2lvbkVmZm9ydChsLmtleSwgeyBhc0RlZmF1bHQ6IHRydWUgfSlcbiAgICAgICAgICAgIHNldFNob3dFZmZvcnRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dFZmZvcnRQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1RoZW1lUGFuZWwoKSAmJiAoXG4gICAgICAgIDxUaGVtZVBhbmVsXG4gICAgICAgICAgdGhlbWVzPXt0aGVtZUl0ZW1zKCl9XG4gICAgICAgICAgcHJlZj17dGhlbWVQcmVmKCl9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd1RoZW1lUGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyh0KSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93VGhlbWVQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIGFwcGx5VGhlbWVQcmVmKHQua2V5KVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QcmV2aWV3PXsodCkgPT4gcHJldmlld1BhbGV0dGUodC5rZXkpfVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dUaGVtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgcHJldmlld1BhbGV0dGUodGhlbWVQcmVmKCkpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RGVsZXRlQ29uZmlybSgpICYmIChcbiAgICAgICAgPENvbmZpcm1QYW5lbFxuICAgICAgICAgIHRpdGxlPVwiRGVsZXRlIGN1cnJlbnQgc2Vzc2lvbj9cIlxuICAgICAgICAgIG1lc3NhZ2U9XCJUaGUgY3VycmVudCBjb252ZXJzYXRpb24gYW5kIGl0cyBwZXJzaXN0ZWQgaGlzdG9yeSB3aWxsIGJlIHBlcm1hbmVudGx5IGRlbGV0ZWQuXCJcbiAgICAgICAgICBjb25maXJtTGFiZWw9XCJEZWxldGVcIlxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dEZWxldGVDb25maXJtKCl9XG4gICAgICAgICAgb25Db25maXJtPXtjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb259XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0RlbGV0ZUNvbmZpcm0oZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dIaXN0b3J5UGFuZWwoKSAmJiAoXG4gICAgICAgIDxIaXN0b3J5UGFuZWxcbiAgICAgICAgICBwcm9tcHRzPXtoaXN0UHJvbXB0cygpfVxuICAgICAgICAgIHNjb3Blcz17SElTVE9SWV9TQ09QRVN9XG4gICAgICAgICAgc2NvcGVJbmRleD17aGlzdFNjb3BlKCl9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd0hpc3RvcnlQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KHRleHQpID0+IHsgc2V0SW5wdXQodGV4dCk7IHNldFNob3dIaXN0b3J5UGFuZWwoZmFsc2UpIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0hpc3RvcnlQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7aW5mb1BhbmVsKCkgJiYgKFxuICAgICAgICA8SW5mb0xpc3RQYW5lbFxuICAgICAgICAgIHRpdGxlPXtpbmZvUGFuZWwoKS50aXRsZX1cbiAgICAgICAgICByb3dzPXtpbmZvUGFuZWwoKS5yb3dzfVxuICAgICAgICAgIG92ZXJ2aWV3PXtpbmZvUGFuZWwoKS5vdmVydmlld31cbiAgICAgICAgICBmb2N1c2VkPXtpbmZvUGFuZWwoKSAhPT0gbnVsbH1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRJbmZvUGFuZWwobnVsbCl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0Nvbm5lY3RQYW5lbCgpICYmIChcbiAgICAgICAgPENvbm5lY3RQYW5lbFxuICAgICAgICAgIHByb3ZpZGVycz17YXV0aFByb3ZpZGVycygpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb25uZWN0UGFuZWwoKX1cbiAgICAgICAgICBvbkNvbm5lY3Q9e2Nvbm5lY3RQcm92aWRlcn1cbiAgICAgICAgICBvbkRpc2Nvbm5lY3Q9e2Rpc2Nvbm5lY3RQcm92aWRlcn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93Q29ubmVjdFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93V2FrZXVwc1BhbmVsKCkgJiYgKFxuICAgICAgICA8V2FrZXVwc1BhbmVsXG4gICAgICAgICAgd2FrZXVwcz17KHNoZWxsc1ZlcnNpb24oKSwgYm9vdC53YWtldXBzLmxpc3QoKSl9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd1dha2V1cHNQYW5lbCgpfVxuICAgICAgICAgIG9uQ2FuY2VsPXsodykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJtZWQgPSByZWZzLndha2V1cENhbmNlbEFybVxuICAgICAgICAgICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gdy5pZCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICAgICAgICAgIHJlZnMud2FrZXVwQ2FuY2VsQXJtID0geyBpZDogdy5pZCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgICAgICAgICByZXR1cm4gZmxhc2goYGFnYWluIHRvIGNhbmNlbCB3YWtlLXVwICR7dy5pZH0gKCR7dy5ub3RlLnNwbGl0KCdcXG4nKVswXS5zbGljZSgwLCA0MCl9KWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZzLndha2V1cENhbmNlbEFybSA9IG51bGxcbiAgICAgICAgICAgIGN0bC5jYW5jZWxXYWtldXAodylcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dXYWtldXBzUGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dNY3BQYW5lbCgpICYmIChcbiAgICAgICAgPE1jcFBhbmVsXG4gICAgICAgICAgc2VydmVycz17bWNwU2VydmVycygpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dNY3BQYW5lbCgpfVxuICAgICAgICAgIG9uVG9nZ2xlPXsobmFtZSkgPT4gbWNwLnRvZ2dsZShuYW1lKX1cbiAgICAgICAgICBvblJlY29ubmVjdD17KG5hbWUpID0+IG1jcC5yZWNvbm5lY3QobmFtZSl9XG4gICAgICAgICAgb25SZW1vdmU9eyhuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcm1lZCA9IHJlZnMubWNwUmVtb3ZlQXJtXG4gICAgICAgICAgICBpZiAoIWFybWVkIHx8IGFybWVkLm5hbWUgIT09IG5hbWUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgICByZWZzLm1jcFJlbW92ZUFybSA9IHsgbmFtZSwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgICAgICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byByZW1vdmUgXCIke25hbWV9XCIgYW5kIGl0cyBjb25maWdgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmcy5tY3BSZW1vdmVBcm0gPSBudWxsXG4gICAgICAgICAgICBtY3AucmVtb3ZlKG5hbWUpXG4gICAgICAgICAgICBmbGFzaChgcmVtb3ZlZCBtY3Agc2VydmVyICR7bmFtZX1gKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25BZGQ9eyhuYW1lLCBjb21tYW5kLCBzY29wZSkgPT4ge1xuICAgICAgICAgICAgbWNwLmFkZChuYW1lLCBjb21tYW5kLCBzY29wZSlcbiAgICAgICAgICAgIGZsYXNoKGBhZGRlZCAke25hbWV9ICgke3Njb3BlfSlgKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25FZGl0PXsobmFtZSwgY29tbWFuZCkgPT4ge1xuICAgICAgICAgICAgbWNwLnVwZGF0ZShuYW1lLCBjb21tYW5kKVxuICAgICAgICAgICAgZmxhc2goYHVwZGF0ZWQgJHtuYW1lfWApXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkludmFsaWQ9e2ZsYXNofVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNY3BQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7cmV3aW5kU3RlcCgpID09PSAncGljaycgJiYgKFxuICAgICAgICA8UmV3aW5kUGlja1BhbmVsXG4gICAgICAgICAgZW50cmllcz17Wy4uLnJld2luZEVudHJpZXMoKV0ucmV2ZXJzZSgpfVxuICAgICAgICAgIHN0YXRzPXsoaW5kZXgpID0+IHJld2luZFN0YXRzKGRlcml2ZWQoKSwgaW5kZXgpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Jld2luZFN0ZXAoKSA9PT0gJ3BpY2snfVxuICAgICAgICAgIG9uUGljaz17KGVudHJ5KSA9PiB7IHNldFJld2luZFRhcmdldChlbnRyeSk7IHNldFJld2luZFN0ZXAoJ2FjdGlvbicpIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0UmV3aW5kU3RlcChudWxsKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtyZXdpbmRTdGVwKCkgPT09ICdhY3Rpb24nICYmIHJld2luZFRhcmdldCgpICYmIChcbiAgICAgICAgPFJld2luZEFjdGlvblBhbmVsXG4gICAgICAgICAgdGFyZ2V0PXtyZXdpbmRUYXJnZXQoKX1cbiAgICAgICAgICBvcHRpb25zPXtyZXdpbmRPcHRpb25zfVxuICAgICAgICAgIGZvY3VzZWQ9e3Jld2luZFN0ZXAoKSA9PT0gJ2FjdGlvbid9XG4gICAgICAgICAgb25TdWJtaXQ9e3BlcmZvcm1SZXdpbmR9XG4gICAgICAgICAgb25CYWNrPXsoKSA9PiBzZXRSZXdpbmRTdGVwKCdwaWNrJyl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7Y29tYmluZWRBY3Rpdml0eSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRTaGVsbCAmJiAhdmlld2VkQWdlbnR9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ2FjdGl2aXR5LW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdhY3Rpdml0eS1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbicgPyAnYmxhY2snIDogIXZpZXdlZFNoZWxsICYmICF2aWV3ZWRBZ2VudCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt2aXNpYmxlU2hlbGxzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiBjb21iaW5lZEFjdGl2aXR5ID8gMCA6IDEgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake3NoZWxsQWN0aW9uSGludCA/IGAke3NoZWxsQWN0aW9uSGludH0gIGAgOiAnJ31qL2sgbW92ZWB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICAgIHshY29tYmluZWRBY3Rpdml0eSAmJiAoXG4gICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBzZWxlY3RlZD17IXZpZXdlZFNoZWxsfSBmb2N1c2VkPXtmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJ30gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cygnc2hlbGwtbWFpbicpOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSkgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nID8gJ2JsYWNrJyA6ICF2aWV3ZWRTaGVsbCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c2hlbGxXaW5kb3cubWFwKChzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkID0gZm0uY3VycmVudCgpID09PSBgc2hlbGwtJHtzLmlkfWBcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdmlld2VkU2hlbGxJZCgpID09PSBzLmlkXG4gICAgICAgICAgICBjb25zdCBlbGFwc2VkID0gYWdlbnRFbGFwc2VkKHsgc3RhcnRlZEF0OiBzLnN0YXJ0ZWRBdCwgZW5kZWRBdDogcy5lbmRlZEF0IH0pXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBrZXk9e2BzaGVsbC0ke3MuaWR9YH0gc2VsZWN0ZWQ9e3NlbGVjdGVkfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKGBzaGVsbC0ke3MuaWR9YCk7IHNldFZpZXdlZFNoZWxsSWQocy5pZCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKSB9fT5cbiAgICAgICAgICAgICAgICB7cy5zdGF0dXMgPT09ICdydW5uaW5nJyA/IDxTcGlubmVyIGNvbG9yPXtmb2N1c2VkID8gJ2JsYWNrJyA6IGFjY2VudCgpfSB2YXJpYW50PVwiZG90c1wiIC8+IDogPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogcy5leGl0Q29kZSA9PT0gMCA/IEdSRUVOIDogUkVEIH19PntzLmV4aXRDb2RlID09PSAwID8gJ1x1MjVDRicgOiAnXHUwMEQ3J308L3RleHQ+fVxuICAgICAgICAgICAgICAgIDx0ZXh0PnsnICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHNlbGVjdGVkID8gRkcgOiBNVVRFRCB9fT57YHNoZWxsIFske3MuaWR9XSAgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntzLmRlc2NyaXB0aW9uIHx8IHMuY29tbWFuZC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7cy5zdGF0dXMgPT09ICdydW5uaW5nJyA/ICcnIDogYGV4aXQgJHtzLmV4aXRDb2RlfSAgYH0ke2VsYXBzZWR9YH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgICB7dmlzaWJsZVNoZWxscy5sZW5ndGggPiBTSEVMTF9TVFJJUF9NQVggJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke3NoZWxsV2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke3NoZWxsV2luZG93U3RhcnR9YCA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCA+IDAgJiYgc2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVTaGVsbHMubGVuZ3RoIC0gc2hlbGxXaW5kb3dTdGFydCAtIHNoZWxsV2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt2aXNpYmxlQWdlbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiBjb21iaW5lZEFjdGl2aXR5ID8gMCA6IDEgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2FnZW50QWN0aW9uSGludCA/IGAke2FnZW50QWN0aW9uSGludH0gIGAgOiAnJ31qL2sgbW92ZWB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICAgIHshY29tYmluZWRBY3Rpdml0eSAmJiAoXG4gICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBzZWxlY3RlZD17IXZpZXdlZEFnZW50fSBmb2N1c2VkPXtmbS5jdXJyZW50KCkgPT09ICdhZ2VudC1tYWluJ30gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cygnYWdlbnQtbWFpbicpOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSk7IHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnYWdlbnQtbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhZ2VudC1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkQWdlbnQgPyBGRyA6IE1VVEVEIH19PnsnbWFpbid9PC90ZXh0PlxuICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICl9XG4gICAgICAgICAge2FnZW50V2luZG93Lm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdHVzID0gYWdlbnRTdGF0dXMoYSlcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWQgPSBmbS5jdXJyZW50KCkgPT09IGBhZ2VudC0ke2EuaWR9YFxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cga2V5PXtgYWdlbnQtJHthLmlkfWB9IHNlbGVjdGVkPXt2aWV3ZWRBZ2VudElkKCkgPT09IGEuaWR9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoYGFnZW50LSR7YS5pZH1gKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChhLmlkKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgICAgICB7YS5zdGF0dXMgPT09ICdydW5uaW5nJyA/IDxTcGlubmVyIGNvbG9yPXtmb2N1c2VkID8gJ2JsYWNrJyA6IGFjY2VudCgpfSB2YXJpYW50PVwiZG90c1wiIC8+IDogPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc3RhdHVzLmNvbG9yIH19PntzdGF0dXMuaWNvbn08L3RleHQ+fVxuICAgICAgICAgICAgICAgIDx0ZXh0PnsnICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHZpZXdlZEFnZW50SWQoKSA9PT0gYS5pZCA/IEZHIDogTVVURUQgfX0+e2Ake2Eucm9sZSB8fCAnYWdlbnQnfSBbJHthLmlkfV0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YS5kZXNjcmlwdGlvbn08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAge3N0YXR1cy5sYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzdGF0dXMuY29sb3IgfX0+e2AgICR7c3RhdHVzLmxhYmVsfWB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCR7c3RhdHVzLmxhYmVsID8gJyAgJyA6ICcgICd9ICR7YWdlbnRFbGFwc2VkKGEpfSAgXHUyMTkzIGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxBbmltYXRlZFZhbHVlIHZhbHVlPXthLnVzYWdlPy50b3RhbFRva2VucyB8fCBhLnVzYWdlPy5wcm9tcHRUb2tlbnMgfHwgMH0gY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogTVVURUR9IGhpZ2hsaWdodD17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gYCR7Y29tcGFjdE51bWJlcihuKX0gdG9rZW5zYH0gLz5cbiAgICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICAgIHt2aXNpYmxlQWdlbnRzLmxlbmd0aCA+IEFHRU5UX1NUUklQX01BWCAmJiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7YWdlbnRXaW5kb3dTdGFydCA+IDAgPyBgXHUyMTkxICR7YWdlbnRXaW5kb3dTdGFydH1gIDogJyd9JHthZ2VudFdpbmRvd1N0YXJ0ID4gMCAmJiBhZ2VudFdpbmRvd1N0YXJ0ICsgYWdlbnRXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZUFnZW50cy5sZW5ndGggPyAnICAnIDogJyd9JHthZ2VudFdpbmRvd1N0YXJ0ICsgYWdlbnRXaW5kb3cubGVuZ3RoIDwgdmlzaWJsZUFnZW50cy5sZW5ndGggPyBgXHUyMTkzICR7dmlzaWJsZUFnZW50cy5sZW5ndGggLSBhZ2VudFdpbmRvd1N0YXJ0IC0gYWdlbnRXaW5kb3cubGVuZ3RofWAgOiAnJ30gbW9yZWB9PC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3dpZGVMYXlvdXQgJiYgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPn1cblxuICAgICAge3dpZGVMYXlvdXQgPyAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBwYWRkaW5nVG9wOiAxIH19PlxuICAgICAgICAgIHtidXN5KCkgJiYgKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDxTaGltbWVyIGNvbG9yPXthY2NlbnQoKX0gaGlnaGxpZ2h0PXtISUdITElHSFR9IGR1cmF0aW9uPXsxNTAwfSByZXZlcnNlPlxuICAgICAgICAgICAgICAgICAge2NvbXBhY3RpbmcoKVxuICAgICAgICAgICAgICAgICAgICA/IGNvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyA/IGBDb21wYWN0aW5nICB3cml0aW5nICR7Y29tcGFjdFN0YXR1cygpLnNlY3Rpb259LzhgIDogJ0NvbXBhY3RpbmcgIGFuYWx5emluZydcbiAgICAgICAgICAgICAgICAgICAgOiB0dXJuUGhhc2UoKSA9PT0gJ3RoaW5raW5nJyA/ICdUaGlua2luZycgOiB0dXJuUGhhc2UoKSA9PT0gJ3Rvb2xzJyA/ICdXb3JraW5nJyA6ICdSZXNwb25kaW5nJ31cbiAgICAgICAgICAgICAgICA8L1NoaW1tZXI+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke2VsYXBzZWR9ICBlc2MgdG8gaW50ZXJydXB0YH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7Y29tcGFjdFN0YXR1cygpPy5waGFzZSA9PT0gJ3dyaXRpbmcnICYmIDxQcm9ncmVzc0JhciB2YXJpYW50PVwidGhpblwiIHZhbHVlPXtjb21wYWN0U3RhdHVzKCkuc2VjdGlvbiAvIDh9IHdpZHRoPXszMH0gcGVyY2VudGFnZT17ZmFsc2V9IGNvbG9yPXthY2NlbnQoKX0gLz59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtnaXRJbmZvPy5icmFuY2ggJiYgKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgYm9sZDogdHJ1ZSB9fT57J1JlcG9zaXRvcnknfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydCcmFuY2ggICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Z2l0SW5mby5icmFuY2h9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydDaGFuZ2VzICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIHtnaXRJbmZvLmFkZGVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogR1JFRU4gfX0+e2Ake2dpdEluZm8uYWRkZWR9IGFkZGVkYH08L3RleHQ+fVxuICAgICAgICAgICAgICAgIHtnaXRJbmZvLmFkZGVkID4gMCAmJiBnaXRJbmZvLnJlbW92ZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgJ308L3RleHQ+fVxuICAgICAgICAgICAgICAgIHtnaXRJbmZvLnJlbW92ZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQgfX0+e2Ake2dpdEluZm8ucmVtb3ZlZH0gcmVtb3ZlZGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA9PT0gMCAmJiBnaXRJbmZvLnJlbW92ZWQgPT09IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnY2xlYW4nfTwvdGV4dD59XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUgfX0+eydTZXNzaW9uJ308L3RleHQ+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0RpcmVjdG9yeSAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Ym9vdC5kaXNwbGF5Q3dkfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnTW9kZWwgICAgICAgICAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19Pnttb2RlbCgpLm5hbWV9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAge2VmZm9ydEFwcGxpZXMoKSAmJiBlZmZvcnQoKSAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0VmZm9ydCAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntlZmZvcnQoKX08L3RleHQ+PC9ib3g+fVxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydJbnB1dCB0b2tlbnMgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5wcm9tcHRUb2tlbnMpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydPdXRwdXQgdG9rZW5zICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5jb21wbGV0aW9uVG9rZW5zKS50b0xvY2FsZVN0cmluZygpfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1Rob3VnaHQgdG9rZW5zICd9PC90ZXh0PjxBbmltYXRlZFZhbHVlIHZhbHVlPXt1c2FnZS50aG91Z2h0VG9rZW5zfSBjb2xvcj17RkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gTWF0aC5yb3VuZChuKS50b0xvY2FsZVN0cmluZygpfSAvPjwvYm94Pn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydDb250ZXh0IHVzZWQgICAnfTwvdGV4dD48QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17Y29udGV4dFBlcmNlbnR9IGNvbG9yPXtjb250ZXh0UGVyY2VudCA+PSA4MCA/IFJFRCA6IEZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke01hdGgucm91bmQobil9JWB9IC8+PC9ib3g+fVxuICAgICAgICAgICAge3BlbmRpbmdXYWtldXBzID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1dha2UtdXBzICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwZW5kaW5nV2FrZXVwc308L3RleHQ+PC9ib3g+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZ1g6IDIsIGdhcDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICB7YnVzeSgpXG4gICAgICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgICA8U2hpbW1lciBjb2xvcj17YWNjZW50KCl9IGhpZ2hsaWdodD17SElHSExJR0hUfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgICAgICB7Y29tcGFjdGluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyA/IGBDb21wYWN0aW5nICB3cml0aW5nICR7Y29tcGFjdFN0YXR1cygpLnNlY3Rpb259LzhgIDogJ0NvbXBhY3RpbmcgIGFuYWx5emluZydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgICAgIDwvU2hpbW1lcj5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Ym9vdC5kaXNwbGF5Q3dkfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIHtnaXRJbmZvPy5icmFuY2ggJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Z2l0SW5mby5icmFuY2h9PC90ZXh0Pn1cbiAgICAgICAgICAgIHtnaXRJbmZvPy5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgKyR7Z2l0SW5mby5hZGRlZH1gfTwvdGV4dD59XG4gICAgICAgICAgICB7Z2l0SW5mbz8ucmVtb3ZlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57YC0ke2dpdEluZm8ucmVtb3ZlZH1gfTwvdGV4dD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZ1g6IDIsIGdhcDogMSB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57bW9kZWwoKS5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgIHtlZmZvcnRBcHBsaWVzKCkgJiYgZWZmb3J0KCkgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntlZmZvcnQoKX08L3RleHQ+fVxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAge3BlbmRpbmdXYWtldXBzID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2BcdTIzRjAgJHtwZW5kaW5nV2FrZXVwc31gfTwvdGV4dD59XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2NvbXBhY3ROdW1iZXIodXNhZ2UucHJvbXB0VG9rZW5zKX0gXHUyMTkzYH08L3RleHQ+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2NvbXBhY3ROdW1iZXIodXNhZ2UuY29tcGxldGlvblRva2Vucyl9IFx1MjE5MWB9PC90ZXh0PlxuICAgICAgICAgICAge3VzYWdlLnRob3VnaHRUb2tlbnMgPiAwICYmIDxBbmltYXRlZFZhbHVlIHZhbHVlPXt1c2FnZS50aG91Z2h0VG9rZW5zfSBjb2xvcj17TVVURUR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke2NvbXBhY3ROdW1iZXIobil9IFx1MjVDOGB9IC8+fVxuICAgICAgICAgICAge2NvbnRleHRQZXJjZW50ID4gMCAmJiA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17Y29udGV4dFBlcmNlbnR9IGNvbG9yPXtjb250ZXh0UGVyY2VudCA+PSA4MCA/IFJFRCA6IE1VVEVEfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBiYWNrZ3JvdW5kPXtQQU5FTF9CR30gZm9ybWF0PXtjb250ZXh0QmFyfSAvPn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgICA8RGljdGF0aW9uS2V5cyBpbnB1dD17cmVmcy5kaWN0YXRpb25JbnB1dH0gLz5cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjb21tYW5kQXQodGV4dCwgY3Vyc29yID0gdGV4dC5sZW5ndGgpIHtcbiAgY29uc3QgbWF0Y2ggPSB0ZXh0LnNsaWNlKDAsIGN1cnNvcikubWF0Y2goLyhefFtcXHMoXSlcXC8oW0EtWmEtejAtOV8tXSopJC8pXG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsXG4gIGNvbnN0IHN0YXJ0ID0gY3Vyc29yIC0gbWF0Y2hbMl0ubGVuZ3RoIC0gMVxuICBjb25zdCBzdWZmaXggPSB0ZXh0LnNsaWNlKGN1cnNvcikubWF0Y2goL15bQS1aYS16MC05Xy1dKi8pWzBdXG4gIHJldHVybiB7IHN0YXJ0LCBlbmQ6IGN1cnNvciArIHN1ZmZpeC5sZW5ndGgsIHF1ZXJ5OiBtYXRjaFsyXSB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQ29tbWFuZCh0ZXh0LCByYW5nZSwgYm9keSkge1xuICByZXR1cm4ge1xuICAgIHRleHQ6IHRleHQuc2xpY2UoMCwgcmFuZ2Uuc3RhcnQpICsgYm9keSArIHRleHQuc2xpY2UocmFuZ2UuZW5kKSxcbiAgICBjdXJzb3I6IHJhbmdlLnN0YXJ0ICsgYm9keS5sZW5ndGgsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRGaWVsZHMoY29tbWFuZCwgYm9keSwgYXJncyA9ICcnKSB7XG4gIGNvbnN0IGZpZWxkcyA9IFsuLi4oY29tbWFuZC5hcmd1bWVudHMgPz8gW10pXVxuICBpZiAoYm9keS5pbmNsdWRlcygnJEFSR1VNRU5UUycpICYmICFhcmdzKSB7XG4gICAgZmllbGRzLnB1c2goeyBuYW1lOiAnJGFyZ3MnLCBsYWJlbDogJ0FyZ3VtZW50cycsIHR5cGU6ICd0ZXh0JyB9KVxuICB9XG4gIHJldHVybiBmaWVsZHNcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIFRleHRBcmVhLCBNZW51LCBCdXR0b24sIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgZnV6enlTY29yZSwgcmFua0Z1enp5IH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcbmltcG9ydCB7IGFjY2VudCwgRkcsIE1VVEVELCBQQU5FTF9CRyB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiBDb21tYW5kRm9ybSh7IG5hbWUsIGZpZWxkcywgZmlsZXMsIGZvY3VzZWQsIG9uU3VibWl0LCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IFtzdGVwLCBzZXRTdGVwXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdmFsdWVzLCBzZXRWYWx1ZXNdID0gY3JlYXRlU2lnbmFsKHt9KVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW3NlbGVjdGVkLCBzZXRTZWxlY3RlZF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgZmllbGQgPSBmaWVsZHNbc3RlcCgpXVxuICBjb25zdCBvcHRpb25zID0gZmllbGQudHlwZSA9PT0gJ2Nob2ljZScgPyBmaWVsZC5jaG9pY2VzIDogZmllbGQudHlwZSA9PT0gJ3BhdGgnID8gZmlsZXMgOiBbXVxuICBjb25zdCBtYXRjaGVzID0gcmFua0Z1enp5KG9wdGlvbnMsIHF1ZXJ5KCksIChxLCB2YWx1ZSkgPT4gZnV6enlTY29yZShxLCB2YWx1ZSkpXG5cbiAgZnVuY3Rpb24gYWR2YW5jZSh2YWx1ZSkge1xuICAgIGNvbnN0IG5leHQgPSB7IC4uLnZhbHVlcygpLCBbZmllbGQubmFtZV06IHZhbHVlIH1cbiAgICBzZXRWYWx1ZXMobmV4dClcbiAgICBpZiAoc3RlcCgpID09PSBmaWVsZHMubGVuZ3RoIC0gMSkgcmV0dXJuIG9uU3VibWl0KG5leHQpXG4gICAgc2V0U3RlcChzdGVwKCkgKyAxKVxuICAgIHNldFF1ZXJ5KCcnKVxuICAgIHNldFNlbGVjdGVkKDApXG4gIH1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNhbmNlbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgZ2FwOiAyIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+e2AvJHtuYW1lfWB9PC90ZXh0PlxuICAgICAgICB7ZmllbGRzLnNsaWNlKDAsIHN0ZXAoKSkubWFwKChpdGVtKSA9PiA8dGV4dCBrZXk9e2l0ZW0ubmFtZX0gc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnt2YWx1ZXMoKVtpdGVtLm5hbWVdfTwvdGV4dD4pfVxuICAgICAgICA8QnV0dG9uIGxhYmVsPVwiQ2FuY2VsXCIgb25QcmVzcz17b25DYW5jZWx9IC8+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57ZmllbGQubGFiZWx9PC90ZXh0PlxuICAgICAgPFRleHRBcmVhXG4gICAgICAgIGtleT17ZmllbGQubmFtZX1cbiAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgdmFsdWU9e3F1ZXJ5KCl9XG4gICAgICAgIHN1Ym1pdE9uRW50ZXJcbiAgICAgICAgY2xlYXJPblN1Ym1pdD17ZmFsc2V9XG4gICAgICAgIG1heEhlaWdodD17MX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e2ZpZWxkLmxhYmVsfVxuICAgICAgICBvbkNhbmNlbD17b25DYW5jZWx9XG4gICAgICAgIG9uQ2hhbmdlPXsodmFsdWUpID0+IHsgc2V0UXVlcnkodmFsdWUpOyBzZXRTZWxlY3RlZCgwKSB9fVxuICAgICAgICBvblN1Ym1pdD17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdjaG9pY2UnKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIGFkdmFuY2UobWF0Y2hlc1tNYXRoLm1pbihzZWxlY3RlZCgpLCBtYXRjaGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICB9IGVsc2UgYWR2YW5jZShmaWVsZC50eXBlID09PSAncGF0aCcgJiYgbWF0Y2hlcy5sZW5ndGggJiYgIXZhbHVlLnN0YXJ0c1dpdGgoJy8nKSAmJiAhdmFsdWUuc3RhcnRzV2l0aCgnficpID8gbWF0Y2hlc1tNYXRoLm1pbihzZWxlY3RlZCgpLCBtYXRjaGVzLmxlbmd0aCAtIDEpXSA6IHZhbHVlKVxuICAgICAgICB9fVxuICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdkb3duJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoTWF0aC5taW4oc2VsZWN0ZWQoKSArIDEsIG1hdGNoZXMubGVuZ3RoIC0gMSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnICYmIG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZChNYXRoLm1heCgwLCBzZWxlY3RlZCgpIC0gMSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0UXVlcnkobWF0Y2hlc1tNYXRoLm1pbihzZWxlY3RlZCgpLCBtYXRjaGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIHttYXRjaGVzLmxlbmd0aCA+IDAgJiYgPE1lbnVcbiAgICAgICAgaXRlbXM9e21hdGNoZXN9XG4gICAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZCgpfVxuICAgICAgICBvblNlbGVjdD17c2V0U2VsZWN0ZWR9XG4gICAgICAgIG9uU3VibWl0PXthZHZhbmNlfVxuICAgICAgICBmb2N1c2VkPXtmYWxzZX1cbiAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgcmVuZGVySXRlbT17KHZhbHVlLCB7IGFjdGl2ZSB9KSA9PiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57YCR7YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ30ke3ZhbHVlfWB9PC90ZXh0Pn1cbiAgICAgIC8+fVxuICAgIDwvYm94PlxuICApXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuXG5jb25zdCBQQUxFVFRFUyA9IHtcbiAgZGFyazoge1xuICAgIGRlc2M6ICdsaWdodCB0ZXh0IGZvciBkYXJrIHRlcm1pbmFscycsXG4gICAgYWNjZW50OiAnI2E3OGJmYScsXG4gICAgZmc6ICcjZTVlN2ViJyxcbiAgICBmZ1NvZnQ6ICcjOWNhM2FmJyxcbiAgICBtdXRlZDogJyNiOGMwZDAnLFxuICAgIHBhbmVsQmc6ICcjMWUxZTIyJyxcbiAgICBzZWxlY3RCZzogJyMzNzQxNTEnLFxuICAgIHJlZDogJyNmODcxNzEnLFxuICAgIGdyZWVuOiAnIzRhZGU4MCcsXG4gICAgaGlnaGxpZ2h0OiAnI2ZmZmZmZicsXG4gICAgc2hpa2k6ICdub3JkJyxcbiAgfSxcbiAgbGlnaHQ6IHtcbiAgICBkZXNjOiAnZGFyayB0ZXh0IGZvciBsaWdodCB0ZXJtaW5hbHMnLFxuICAgIGFjY2VudDogJyNhNzhiZmEnLFxuICAgIGZnOiAnIzFmMjQzMCcsXG4gICAgZmdTb2Z0OiAnIzRiNTU2MycsXG4gICAgbXV0ZWQ6ICcjNGI1NTYzJyxcbiAgICBwYW5lbEJnOiAnI2U5ZTllZScsXG4gICAgc2VsZWN0Qmc6ICcjZDRkNGRjJyxcbiAgICByZWQ6ICcjZGMyNjI2JyxcbiAgICBncmVlbjogJyMxNmEzNGEnLFxuICAgIGhpZ2hsaWdodDogJyMxMTE4MjcnLFxuICAgIHNoaWtpOiAnZ2l0aHViLWxpZ2h0JyxcbiAgfSxcbiAgbm9yZDoge1xuICAgIGRlc2M6ICdhcmN0aWMgYmx1ZXMgb24gcG9sYXIgbmlnaHQnLFxuICAgIGFjY2VudDogJyM4OGMwZDAnLFxuICAgIGZnOiAnI2Q4ZGVlOScsXG4gICAgZmdTb2Z0OiAnI2FhYjJjNCcsXG4gICAgbXV0ZWQ6ICcjYjhjMGQwJyxcbiAgICBwYW5lbEJnOiAnIzNiNDI1MicsXG4gICAgc2VsZWN0Qmc6ICcjNDM0YzVlJyxcbiAgICByZWQ6ICcjYmY2MTZhJyxcbiAgICBncmVlbjogJyNhM2JlOGMnLFxuICAgIGhpZ2hsaWdodDogJyNlY2VmZjQnLFxuICAgIHNoaWtpOiAnbm9yZCcsXG4gIH0sXG59XG5cbmV4cG9ydCBsZXQgREVGQVVMVF9BQ0NFTlQgPSBQQUxFVFRFUy5kYXJrLmFjY2VudFxuZXhwb3J0IGxldCBGRyA9IFBBTEVUVEVTLmRhcmsuZmdcbmV4cG9ydCBsZXQgRkdfU09GVCA9IFBBTEVUVEVTLmRhcmsuZmdTb2Z0XG5leHBvcnQgbGV0IE1VVEVEID0gUEFMRVRURVMuZGFyay5tdXRlZFxuZXhwb3J0IGxldCBQQU5FTF9CRyA9IFBBTEVUVEVTLmRhcmsucGFuZWxCZ1xuZXhwb3J0IGxldCBTRUxFQ1RfQkcgPSBQQUxFVFRFUy5kYXJrLnNlbGVjdEJnXG5leHBvcnQgbGV0IFJFRCA9IFBBTEVUVEVTLmRhcmsucmVkXG5leHBvcnQgbGV0IEdSRUVOID0gUEFMRVRURVMuZGFyay5ncmVlblxuZXhwb3J0IGxldCBISUdITElHSFQgPSBQQUxFVFRFUy5kYXJrLmhpZ2hsaWdodFxuXG5sZXQgY3VycmVudFBhbGV0dGUgPSAnZGFyaydcbmxldCBleHBsaWNpdEFjY2VudCA9IG51bGxcblxuY29uc3QgW2FjY2VudFZhbHVlLCBzZXRBY2NlbnRWYWx1ZV0gPSBjcmVhdGVTaWduYWwoREVGQVVMVF9BQ0NFTlQpXG5cbmV4cG9ydCBjb25zdCBhY2NlbnQgPSBhY2NlbnRWYWx1ZVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QWNjZW50KGNvbG9yKSB7XG4gIGV4cGxpY2l0QWNjZW50ID0gY29sb3IgfHwgbnVsbFxuICBzZXRBY2NlbnRWYWx1ZShleHBsaWNpdEFjY2VudCB8fCBERUZBVUxUX0FDQ0VOVClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFBhbGV0dGUobmFtZSkge1xuICBjdXJyZW50UGFsZXR0ZSA9IFBBTEVUVEVTW25hbWVdID8gbmFtZSA6ICdkYXJrJ1xuICBjb25zdCBwID0gUEFMRVRURVNbY3VycmVudFBhbGV0dGVdXG4gIERFRkFVTFRfQUNDRU5UID0gcC5hY2NlbnRcbiAgRkcgPSBwLmZnXG4gIEZHX1NPRlQgPSBwLmZnU29mdFxuICBNVVRFRCA9IHAubXV0ZWRcbiAgUEFORUxfQkcgPSBwLnBhbmVsQmdcbiAgU0VMRUNUX0JHID0gcC5zZWxlY3RCZ1xuICBSRUQgPSBwLnJlZFxuICBHUkVFTiA9IHAuZ3JlZW5cbiAgSElHSExJR0hUID0gcC5oaWdobGlnaHRcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgcC5hY2NlbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTmFtZSgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQYWxldHRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWxldHRlTGlzdCgpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKFBBTEVUVEVTKS5tYXAoKFtrZXksIHBdKSA9PiAoeyBrZXksIGRlc2M6IHAuZGVzYyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNoaWtpVGhlbWUoKSB7XG4gIHJldHVybiBQQUxFVFRFU1tjdXJyZW50UGFsZXR0ZV0uc2hpa2lcbn1cbiIsICJjb25zdCBmaWxsZXIgPSAvKD88IVteXFxzLDs6IT9dKSg/OnVofHVtKSg/PSR8W1xccyw7Oi4hP10pKFsgXFx0XSpbLDs6LiE/XSopWyBcXHRdKi9naXVcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuRGljdGF0aW9uKHRleHQpIHtcbiAgcmV0dXJuIHRleHQuc3BsaXQoJ1xcbicpLm1hcChjbGVhbkxpbmUpLmpvaW4oJ1xcbicpLnRyaW0oKVxufVxuXG5mdW5jdGlvbiBjbGVhbkxpbmUobGluZSkge1xuICBsZXQgcmVzdWx0ID0gJydcbiAgbGV0IG9mZnNldCA9IDBcbiAgbGV0IGNhcGl0YWxpemUgPSBmYWxzZVxuICBmb3IgKGNvbnN0IG1hdGNoIG9mIGxpbmUubWF0Y2hBbGwoZmlsbGVyKSkge1xuICAgIGxldCBiZWZvcmUgPSBsaW5lLnNsaWNlKG9mZnNldCwgbWF0Y2guaW5kZXgpXG4gICAgaWYgKGNhcGl0YWxpemUpIGJlZm9yZSA9IHVwcGVyRmlyc3QoYmVmb3JlKVxuICAgIHJlc3VsdCArPSBiZWZvcmVcbiAgICBjb25zdCBhZnRlciA9IGxpbmUuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpXG4gICAgY29uc3QgdGVybWluYWwgPSBtYXRjaFsxXS5tYXRjaCgvWy4hP10rLyk/LlswXSA/PyAnJ1xuICAgIHJlc3VsdCA9IHJlc3VsdC50cmltRW5kKClcbiAgICBjb25zdCBzZW50ZW5jZVN0YXJ0ID0gIXJlc3VsdCB8fCAvWy4hP10kLy50ZXN0KHJlc3VsdClcbiAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvLCQvLCAnJylcbiAgICBpZiAoIWFmdGVyKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvWzs6XSQvLCAnJylcbiAgICBpZiAodGVybWluYWwgJiYgIXNlbnRlbmNlU3RhcnQpIHJlc3VsdCArPSB0ZXJtaW5hbFxuICAgIGNhcGl0YWxpemUgPSBzZW50ZW5jZVN0YXJ0IHx8IEJvb2xlYW4odGVybWluYWwpXG4gICAgaWYgKHJlc3VsdCAmJiBhZnRlcikgcmVzdWx0ICs9ICcgJ1xuICAgIG9mZnNldCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gIH1cbiAgY29uc3QgdGFpbCA9IGxpbmUuc2xpY2Uob2Zmc2V0KVxuICByZXR1cm4gcmVzdWx0ICsgKGNhcGl0YWxpemUgPyB1cHBlckZpcnN0KHRhaWwpIDogdGFpbClcbn1cblxuZnVuY3Rpb24gdXBwZXJGaXJzdCh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UoL14oXFxzKikoXFxwe0xsfSkoPyFcXHB7THV9KS91LCAoXywgc3BhY2UsIGxldHRlcikgPT4gc3BhY2UgKyBsZXR0ZXIudG9VcHBlckNhc2UoKSlcbn1cblxuIiwgImltcG9ydCB7IGNsZWFuRGljdGF0aW9uIH0gZnJvbSAnLi9kaWN0YXRpb24tdGV4dC5qcydcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnXG5cbmV4cG9ydCBmdW5jdGlvbiBkaWN0YXRpb25IZWxwZXJQYXRoKCkge1xuICBjb25zdCBidW5kbGVkID0gZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuL3BpY28tZGljdGF0ZScsIGltcG9ydC5tZXRhLnVybCkpXG4gIHJldHVybiBleGlzdHNTeW5jKGJ1bmRsZWQpID8gYnVuZGxlZCA6IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vaGVscGVyLy5idWlsZC9yZWxlYXNlL3BpY28tZGljdGF0ZScsIGltcG9ydC5tZXRhLnVybCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaWN0YXRpb24oeyBvblN0YXR1cyA9ICgpID0+IHt9LCBvbkxldmVsID0gKCkgPT4ge30sIG9uRXJyb3IgPSAoKSA9PiB7fSwgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtLCBhcmNoID0gcHJvY2Vzcy5hcmNoLCBsYXVuY2ggPSAoKSA9PiBzcGF3bihkaWN0YXRpb25IZWxwZXJQYXRoKCksIFtdLCB7IHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10gfSksIGxvYWRpbmdUaW1lb3V0ID0gNjAwMDAwLCByZXF1ZXN0VGltZW91dCA9IDQ1MDAwIH0gPSB7fSkge1xuICBsZXQgY2hpbGQgPSBudWxsXG4gIGxldCBzdGF0dXMgPSAnaWRsZSdcbiAgbGV0IHNlcXVlbmNlID0gMFxuICBsZXQgZ2VuZXJhdGlvbiA9IDBcbiAgbGV0IHJlYWR5ID0gbnVsbFxuICBsZXQgZGlzcG9zZWQgPSBmYWxzZVxuICBjb25zdCBwZW5kaW5nID0gbmV3IE1hcCgpXG5cbiAgZnVuY3Rpb24gc2V0U3RhdHVzKHZhbHVlKSB7XG4gICAgc3RhdHVzID0gdmFsdWVcbiAgICBvblN0YXR1cyh2YWx1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0KGVycm9yID0gbmV3IEVycm9yKCdkaWN0YXRpb24gY2FuY2VsbGVkJykpIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IGNoaWxkXG4gICAgY2hpbGQgPSBudWxsXG4gICAgcmVhZHkgPSBudWxsXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBwZW5kaW5nLnZhbHVlcygpKSB7XG4gICAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZXIpXG4gICAgICBlbnRyeS5yZWplY3QoZXJyb3IpXG4gICAgfVxuICAgIHBlbmRpbmcuY2xlYXIoKVxuICAgIHByZXZpb3VzPy5zdGRpbi5lbmQoKVxuICAgIHByZXZpb3VzPy5raWxsKClcbiAgICBzZXRTdGF0dXMoJ2lkbGUnKVxuICB9XG5cbiAgZnVuY3Rpb24gd2FpdEZvcihpZCwgdGltZW91dCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gcmVzZXQobmV3IEVycm9yKCdkaWN0YXRpb24gdGltZWQgb3V0JykpLCB0aW1lb3V0KVxuICAgICAgcGVuZGluZy5zZXQoaWQsIHsgcmVzb2x2ZSwgcmVqZWN0LCB0aW1lciB9KVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzZXR0bGUoaWQsIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBlbnRyeSA9IHBlbmRpbmcuZ2V0KGlkKVxuICAgIGlmICghZW50cnkpIHJldHVyblxuICAgIHBlbmRpbmcuZGVsZXRlKGlkKVxuICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lcilcbiAgICBpZiAobWVzc2FnZS5lcnJvcikgZW50cnkucmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlLmVycm9yKSlcbiAgICBlbHNlIGVudHJ5LnJlc29sdmUobWVzc2FnZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgaWYgKHJlYWR5KSByZXR1cm4gcmVhZHlcbiAgICBpZiAocGxhdGZvcm0gIT09ICdkYXJ3aW4nIHx8IGFyY2ggIT09ICdhcm02NCcpIHRocm93IG5ldyBFcnJvcignZGljdGF0aW9uIHJlcXVpcmVzIGFuIEFwcGxlIFNpbGljb24gTWFjJylcbiAgICBjb25zdCBpbnN0YW5jZSA9IGxhdW5jaCgpXG4gICAgY2hpbGQgPSBpbnN0YW5jZVxuICAgIHJlYWR5ID0gd2FpdEZvcigncmVhZHknLCBsb2FkaW5nVGltZW91dClcbiAgICBsZXQgYnVmZmVyID0gJydcbiAgICBpbnN0YW5jZS5zdGRvdXQub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgIGlmIChjaGlsZCAhPT0gaW5zdGFuY2UpIHJldHVyblxuICAgICAgYnVmZmVyICs9IGNodW5rLnRvU3RyaW5nKClcbiAgICAgIGlmIChidWZmZXIubGVuZ3RoID4gMTAyNCAqIDEwMjQpIHJldHVybiByZXNldChuZXcgRXJyb3IoJ2ludmFsaWQgZGljdGF0aW9uIGhlbHBlciBvdXRwdXQnKSlcbiAgICAgIGxldCBhdFxuICAgICAgd2hpbGUgKChhdCA9IGJ1ZmZlci5pbmRleE9mKCdcXG4nKSkgPj0gMCkge1xuICAgICAgICBjb25zdCBsaW5lID0gYnVmZmVyLnNsaWNlKDAsIGF0KVxuICAgICAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UoYXQgKyAxKVxuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICB0cnkgeyBtZXNzYWdlID0gSlNPTi5wYXJzZShsaW5lKSB9IGNhdGNoIHsgY29udGludWUgfVxuICAgICAgICBpZiAobWVzc2FnZS5zdGF0dXMgPT09ICdsZXZlbCcpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzID09PSAncmVjb3JkaW5nJyAmJiBOdW1iZXIuaXNGaW5pdGUobWVzc2FnZS5sZXZlbCkpIG9uTGV2ZWwoTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbWVzc2FnZS5sZXZlbCkpKVxuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSAncmVhZHknKSBzZXR0bGUoJ3JlYWR5JywgbWVzc2FnZSlcbiAgICAgICAgZWxzZSBpZiAobWVzc2FnZS5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlLm1lc3NhZ2UgfHwgJ2RpY3RhdGlvbiBmYWlsZWQnKVxuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IHBlbmRpbmcuc2l6ZSA+IDBcbiAgICAgICAgICByZXNldChlcnJvcilcbiAgICAgICAgICBpZiAoIWFjdGl2ZSkgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UuaWQgIT0gbnVsbCkgc2V0dGxlKG1lc3NhZ2UuaWQsIG1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSlcbiAgICBpbnN0YW5jZS5zdGRlcnIub24oJ2RhdGEnLCAoKSA9PiB7fSlcbiAgICBjb25zdCBmYWlsZWQgPSAoZXJyb3IpID0+IHtcbiAgICAgIGlmIChjaGlsZCAhPT0gaW5zdGFuY2UpIHJldHVyblxuICAgICAgY29uc3QgYWN0aXZlID0gcGVuZGluZy5zaXplID4gMFxuICAgICAgY29uc3QgcmVjb3JkaW5nID0gc3RhdHVzID09PSAncmVjb3JkaW5nJ1xuICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICBpZiAoIWFjdGl2ZSAmJiByZWNvcmRpbmcpIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gICAgaW5zdGFuY2Uub24oJ2Vycm9yJywgKGVycm9yKSA9PiBmYWlsZWQobmV3IEVycm9yKGBkaWN0YXRpb24gaGVscGVyIHVuYXZhaWxhYmxlOiAke2Vycm9yLm1lc3NhZ2V9YCkpKVxuICAgIGluc3RhbmNlLnN0ZGluLm9uKCdlcnJvcicsIGZhaWxlZClcbiAgICBpbnN0YW5jZS5vbignZXhpdCcsICgpID0+IGZhaWxlZChuZXcgRXJyb3IoJ2RpY3RhdGlvbiBoZWxwZXIgZXhpdGVkJykpKVxuICAgIHJldHVybiByZWFkeVxuICB9XG5cbiAgZnVuY3Rpb24gcmVxdWVzdChvcCkge1xuICAgIGNvbnN0IGlkID0gKytzZXF1ZW5jZVxuICAgIGNvbnN0IHJlc3VsdCA9IHdhaXRGb3IoaWQsIHJlcXVlc3RUaW1lb3V0KVxuICAgIHRyeSB7IGNoaWxkLnN0ZGluLndyaXRlKGAke0pTT04uc3RyaW5naWZ5KHsgaWQsIG9wIH0pfVxcbmApIH0gY2F0Y2ggKGVycm9yKSB7IHJlc2V0KGVycm9yKSB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcHJlbG9hZCgpIHtcbiAgICBpZiAoZGlzcG9zZWQpIHJldHVyblxuICAgIHRyeSB7IGF3YWl0IGxvYWQoKSB9IGNhdGNoIHt9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdGFydCgpIHtcbiAgICBpZiAoZGlzcG9zZWQgfHwgc3RhdHVzICE9PSAnaWRsZScpIHJldHVyblxuICAgIGNvbnN0IHRva2VuID0gKytnZW5lcmF0aW9uXG4gICAgc2V0U3RhdHVzKCdsb2FkaW5nJylcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbG9hZCgpXG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVyblxuICAgICAgc2V0U3RhdHVzKCdzdGFydGluZycpXG4gICAgICBhd2FpdCByZXF1ZXN0KCdzdGFydCcpXG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHNldFN0YXR1cygncmVjb3JkaW5nJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm5cbiAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiBudWxsXG4gICAgY29uc3QgdG9rZW4gPSBnZW5lcmF0aW9uXG4gICAgc2V0U3RhdHVzKCd0cmFuc2NyaWJpbmcnKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXF1ZXN0KCdzdG9wJylcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuIG51bGxcbiAgICAgIHNldFN0YXR1cygnaWRsZScpXG4gICAgICByZXR1cm4gY2xlYW5EaWN0YXRpb24ocmVzdWx0LnRleHQgfHwgJycpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikge1xuICAgICAgICByZXNldChlcnJvcilcbiAgICAgICAgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgY29uc3QgdG9rZW4gPSArK2dlbmVyYXRpb25cbiAgICBpZiAoc3RhdHVzID09PSAnaWRsZScpIHJldHVyblxuICAgIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSByZXR1cm4gcmVzZXQoKVxuICAgIHNldFN0YXR1cygnY2FuY2VsbGluZycpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJlcXVlc3QoJ2NhbmNlbCcpXG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHNldFN0YXR1cygnaWRsZScpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgcmVzZXQoZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzcG9zZSgpIHtcbiAgICBkaXNwb3NlZCA9IHRydWVcbiAgICArK2dlbmVyYXRpb25cbiAgICByZXNldCgpXG4gIH1cblxuICByZXR1cm4geyBwcmVsb2FkLCBzdGFydCwgc3RvcCwgY2FuY2VsLCBkaXNwb3NlLCBnZXQgc3RhdHVzKCkgeyByZXR1cm4gc3RhdHVzIH0gfVxufVxuIiwgImltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAnbm9kZTp1dGlsJ1xuaW1wb3J0IHsgbWtkdGVtcCwgd3JpdGVGaWxlLCBybSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBybVN5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5cbmNvbnN0IGV4ZWN1dGUgPSBwcm9taXNpZnkoZXhlY0ZpbGUpXG5jb25zdCBkaXJlY3RvcmllcyA9IG5ldyBTZXQoKVxucHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4ge1xuICBmb3IgKGNvbnN0IGRpciBvZiBkaXJlY3Rvcmllcykgcm1TeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG59KVxuXG5jb25zdCBtYWNTY3JpcHQgPSBgT2JqQy5pbXBvcnQoJ0FwcEtpdCcpOyBPYmpDLmltcG9ydCgnRm91bmRhdGlvbicpO1xuY29uc3QgcGFzdGVib2FyZCA9ICQuTlNQYXN0ZWJvYXJkLmdlbmVyYWxQYXN0ZWJvYXJkO1xuY29uc3QgZmlsZXMgPSBwYXN0ZWJvYXJkLnByb3BlcnR5TGlzdEZvclR5cGUoJ05TRmlsZW5hbWVzUGJvYXJkVHlwZScpO1xubGV0IGltYWdlID0gbnVsbDtcbmlmICghZmlsZXMuaXNOaWwoKSAmJiBmaWxlcy5jb3VudCA+IDApIHtcbiAgY29uc3QgcGF0aCA9IE9iakMudW53cmFwKGZpbGVzLm9iamVjdEF0SW5kZXgoMCkpO1xuICBpZiAoL1xcXFwuKHBuZ3xqcGU/Z3xnaWZ8d2VicCkkL2kudGVzdChwYXRoKSkgaW1hZ2UgPSAkLk5TSW1hZ2UuYWxsb2MuaW5pdFdpdGhDb250ZW50c09mRmlsZShwYXRoKTtcbn1cbmlmICghaW1hZ2UgfHwgaW1hZ2UuaXNOaWwoKSkgaW1hZ2UgPSAkLk5TSW1hZ2UuYWxsb2MuaW5pdFdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpO1xubGV0IGRhdGEgPSBudWxsO1xuaWYgKCFpbWFnZS5pc05pbCgpKSB7XG4gIGNvbnN0IGJpdG1hcCA9ICQuTlNCaXRtYXBJbWFnZVJlcC5pbWFnZVJlcFdpdGhEYXRhKGltYWdlLlRJRkZSZXByZXNlbnRhdGlvbik7XG4gIGRhdGEgPSBiaXRtYXAucmVwcmVzZW50YXRpb25Vc2luZ1R5cGVQcm9wZXJ0aWVzKCQuTlNCaXRtYXBJbWFnZUZpbGVUeXBlUE5HLCAkKHt9KSk7XG59XG5kYXRhID8gT2JqQy51bndyYXAoZGF0YS5iYXNlNjRFbmNvZGVkU3RyaW5nV2l0aE9wdGlvbnMoMCkpIDogJydgXG5cbmNvbnN0IHdpbmRvd3NTY3JpcHQgPSBgQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSBTeXN0ZW0uV2luZG93cy5Gb3JtczsgQWRkLVR5cGUgLUFzc2VtYmx5TmFtZSBTeXN0ZW0uRHJhd2luZztcbmlmIChbU3lzdGVtLldpbmRvd3MuRm9ybXMuQ2xpcGJvYXJkXTo6Q29udGFpbnNJbWFnZSgpKSB7XG4gICRpbWFnZSA9IFtTeXN0ZW0uV2luZG93cy5Gb3Jtcy5DbGlwYm9hcmRdOjpHZXRJbWFnZSgpO1xuICAkc3RyZWFtID0gTmV3LU9iamVjdCBTeXN0ZW0uSU8uTWVtb3J5U3RyZWFtO1xuICB0cnkgeyAkaW1hZ2UuU2F2ZSgkc3RyZWFtLCBbU3lzdGVtLkRyYXdpbmcuSW1hZ2luZy5JbWFnZUZvcm1hdF06OlBuZyk7IFtDb252ZXJ0XTo6VG9CYXNlNjRTdHJpbmcoJHN0cmVhbS5Ub0FycmF5KCkpIH1cbiAgZmluYWxseSB7ICRzdHJlYW0uRGlzcG9zZSgpOyAkaW1hZ2UuRGlzcG9zZSgpIH1cbn1gXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ2xpcGJvYXJkSW1hZ2UoeyBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sIGVudiA9IHByb2Nlc3MuZW52LCBydW4gPSBleGVjdXRlIH0gPSB7fSkge1xuICBpZiAoZW52LlNTSF9DT05ORUNUSU9OIHx8IGVudi5TU0hfVFRZKSB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCBpbWFnZXMgYXJlIHVuYXZhaWxhYmxlIG92ZXIgU1NIJylcbiAgY29uc3Qgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6ICdidWZmZXInLCB0aW1lb3V0OiAxMDAwMCwgbWF4QnVmZmVyOiAzMiAqIDEwMjQgKiAxMDI0IH1cbiAgbGV0IGRhdGFcbiAgdHJ5IHtcbiAgICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKCdvc2FzY3JpcHQnLCBbJy1sJywgJ0phdmFTY3JpcHQnLCAnLWUnLCBtYWNTY3JpcHRdLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dC50b1N0cmluZygpLnRyaW0oKSwgJ2Jhc2U2NCcpXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHJ1bigncG93ZXJzaGVsbC5leGUnLCBbJy1Ob1Byb2ZpbGUnLCAnLU5vbkludGVyYWN0aXZlJywgJy1TVEEnLCAnLUNvbW1hbmQnLCB3aW5kb3dzU2NyaXB0XSwgb3B0aW9ucylcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShzdGRvdXQudG9TdHJpbmcoKS50cmltKCksICdiYXNlNjQnKVxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgICAgIGNvbnN0IHdheWxhbmQgPSBCb29sZWFuKGVudi5XQVlMQU5EX0RJU1BMQVkpXG4gICAgICBjb25zdCBjb21tYW5kID0gd2F5bGFuZCA/ICd3bC1wYXN0ZScgOiAneGNsaXAnXG4gICAgICBjb25zdCB7IHN0ZG91dDogdHlwZXMgfSA9IGF3YWl0IHJ1bihjb21tYW5kLCB3YXlsYW5kID8gWyctLWxpc3QtdHlwZXMnXSA6IFsnLXNlbGVjdGlvbicsICdjbGlwYm9hcmQnLCAnLXQnLCAnVEFSR0VUUycsICctbyddLCBvcHRpb25zKVxuICAgICAgaWYgKCF0eXBlcy50b1N0cmluZygpLnNwbGl0KC9cXHMrLykuaW5jbHVkZXMoJ2ltYWdlL3BuZycpKSByZXR1cm4gbnVsbFxuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHJ1bihjb21tYW5kLCB3YXlsYW5kID8gWyctLXR5cGUnLCAnaW1hZ2UvcG5nJywgJy0tbm8tbmV3bGluZSddIDogWyctc2VsZWN0aW9uJywgJ2NsaXBib2FyZCcsICctdCcsICdpbWFnZS9wbmcnLCAnLW8nXSwgb3B0aW9ucylcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShzdGRvdXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGltYWdlcyBhcmUgdW5zdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybScpXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgcmVhZGVyIHVuYXZhaWxhYmxlOiBpbnN0YWxsICcgKyAoZW52LldBWUxBTkRfRElTUExBWSA/ICd3bC1jbGlwYm9hcmQnIDogcGxhdGZvcm0gPT09ICdsaW51eCcgPyAneGNsaXAnIDogJ3RoZSBzeXN0ZW0gY2xpcGJvYXJkIHRvb2xzJykpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxuICBpZiAoIWRhdGEubGVuZ3RoKSByZXR1cm4gbnVsbFxuICBpZiAoIWRhdGEuc3ViYXJyYXkoMCwgOCkuZXF1YWxzKEJ1ZmZlci5mcm9tKFsxMzcsIDgwLCA3OCwgNzEsIDEzLCAxMCwgMjYsIDEwXSkpKSB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCBkaWQgbm90IHJldHVybiBhIFBORyBpbWFnZScpXG4gIGNvbnN0IGRpciA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgJ3BpY28tY2xpcGJvYXJkLScpKVxuICBkaXJlY3Rvcmllcy5hZGQoZGlyKVxuICBjb25zdCBkaXNwb3NlID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHJtKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pXG4gICAgZGlyZWN0b3JpZXMuZGVsZXRlKGRpcilcbiAgfVxuICBjb25zdCBwYXRoID0gam9pbihkaXIsICdjbGlwYm9hcmQucG5nJylcbiAgdHJ5IHtcbiAgICBhd2FpdCB3cml0ZUZpbGUocGF0aCwgZGF0YSwgeyBtb2RlOiAwbzYwMCB9KVxuICAgIHJldHVybiB7IHBhdGgsIGRpc3Bvc2UgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGF3YWl0IGRpc3Bvc2UoKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xpcGJvYXJkSW5wdXQoeyByZWFkSW1hZ2UsIGdldERyYWZ0LCBhdHRhY2hJbWFnZSwgc2V0SW5wdXQsIG9uRXJyb3IgfSkge1xuICBsZXQgcGVuZGluZyA9IGZhbHNlXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBwYXN0ZUltYWdlKCkge1xuICAgIGlmIChwZW5kaW5nKSByZXR1cm5cbiAgICBwZW5kaW5nID0gdHJ1ZVxuICAgIGNvbnN0IHRhcmdldCA9IGdldERyYWZ0KClcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCByZWFkSW1hZ2UoKVxuICAgICAgaWYgKCFpbWFnZSkge1xuICAgICAgICBvbkVycm9yKCdObyBpbWFnZSBvbiB0aGUgY2xpcGJvYXJkJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50ID0gZ2V0RHJhZnQoKVxuICAgICAgaWYgKGN1cnJlbnQucmV2aXNpb24gIT09IHRhcmdldC5yZXZpc2lvbiB8fCBjdXJyZW50LnNlc3Npb24gIT09IHRhcmdldC5zZXNzaW9uIHx8IGN1cnJlbnQudmFsdWUgIT09IHRhcmdldC52YWx1ZSB8fCBjdXJyZW50LmN1cnNvciAhPT0gdGFyZ2V0LmN1cnNvcikge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgb25FcnJvcignQ2xpcGJvYXJkIGltYWdlIG5vdCBhdHRhY2hlZDogdGhlIGRyYWZ0IGNoYW5nZWQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhYmVsID0gYXR0YWNoSW1hZ2UoaW1hZ2UucGF0aClcbiAgICAgIGlmICghbGFiZWwpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2UgYXR0YWNobWVudCBmYWlsZWQnKVxuICAgICAgfVxuICAgICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgICBjb25zdCBhZnRlciA9IHRhcmdldC52YWx1ZS5zbGljZSh0YXJnZXQuY3Vyc29yKVxuICAgICAgc2V0SW5wdXQoYmVmb3JlICsgbGFiZWwgKyBhZnRlciwgYmVmb3JlLmxlbmd0aCArIGxhYmVsLmxlbmd0aClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihgQ2xpcGJvYXJkIHBhc3RlIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHBlbmRpbmcgPSBmYWxzZVxuICAgIH1cbiAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEaWN0YXRpb25JbnB1dCh7IGRpY3RhdGlvbiwgZ2V0SW5wdXQsIHNldElucHV0IH0pIHtcbiAgbGV0IGRyYWZ0ID0gbnVsbFxuICBsZXQgZ2VuZXJhdGlvbiA9IDBcblxuICBmdW5jdGlvbiBzdGFydCh7IHZhbHVlLCBjdXJzb3IgfSkge1xuICAgIGlmIChkaWN0YXRpb24uc3RhdHVzICE9PSAnaWRsZScpIHJldHVyblxuICAgIGRyYWZ0ID0geyB2YWx1ZSwgY3Vyc29yIH1cbiAgICArK2dlbmVyYXRpb25cbiAgICB2b2lkIGRpY3RhdGlvbi5zdGFydCgpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdG9wKCkge1xuICAgIGNvbnN0IHRva2VuID0gZ2VuZXJhdGlvblxuICAgIGNvbnN0IHRhcmdldCA9IGRyYWZ0XG4gICAgY29uc3QgdGV4dCA9IGF3YWl0IGRpY3RhdGlvbi5zdG9wKClcbiAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24gfHwgIXRhcmdldCB8fCB0ZXh0ID09IG51bGwgfHwgZ2V0SW5wdXQoKSAhPT0gdGFyZ2V0LnZhbHVlKSByZXR1cm5cbiAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICBjb25zdCBsZWFkID0gdGV4dCAmJiBiZWZvcmUgJiYgIS9cXHMkLy50ZXN0KGJlZm9yZSkgJiYgIS9eXFxzLy50ZXN0KHRleHQpID8gJyAnIDogJydcbiAgICBjb25zdCBhZnRlciA9IHRhcmdldC52YWx1ZS5zbGljZSh0YXJnZXQuY3Vyc29yKVxuICAgIGNvbnN0IHRyYWlsID0gdGV4dCAmJiBhZnRlciAmJiAhL1xccyQvLnRlc3QodGV4dCkgJiYgIS9eW1xccy4sOzohP10vLnRlc3QoYWZ0ZXIpID8gJyAnIDogJydcbiAgICBzZXRJbnB1dChiZWZvcmUgKyBsZWFkICsgdGV4dCArIHRyYWlsICsgYWZ0ZXIpXG4gICAgZHJhZnQgPSBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgKytnZW5lcmF0aW9uXG4gICAgZHJhZnQgPSBudWxsXG4gICAgdm9pZCBkaWN0YXRpb24uY2FuY2VsKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgIGlmIChkaWN0YXRpb24uc3RhdHVzID09PSAnaWRsZScpIHJldHVybiBmYWxzZVxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnIHx8IChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2MnKSkgY2FuY2VsKClcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nICYmICFldmVudC5zaGlmdCAmJiAhZXZlbnQubWV0YSAmJiBkaWN0YXRpb24uc3RhdHVzID09PSAncmVjb3JkaW5nJykgdm9pZCBzdG9wKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIHsgc3RhcnQsIGNhbmNlbCwgaGFuZGxlIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9zZXJGaWxlcygpIHtcbiAgbGV0IHRleHQgPSAnJ1xuICBsZXQgcmVmZXJlbmNlcyA9IFtdXG5cbiAgZnVuY3Rpb24gdXBkYXRlKHZhbHVlLCBhdHRhY2htZW50cykge1xuICAgIGxldCBzdGFydCA9IDBcbiAgICB3aGlsZSAoc3RhcnQgPCB0ZXh0Lmxlbmd0aCAmJiBzdGFydCA8IHZhbHVlLmxlbmd0aCAmJiB0ZXh0W3N0YXJ0XSA9PT0gdmFsdWVbc3RhcnRdKSBzdGFydCsrXG4gICAgbGV0IGVuZCA9IHRleHQubGVuZ3RoXG4gICAgbGV0IG5leHRFbmQgPSB2YWx1ZS5sZW5ndGhcbiAgICB3aGlsZSAoZW5kID4gc3RhcnQgJiYgbmV4dEVuZCA+IHN0YXJ0ICYmIHRleHRbZW5kIC0gMV0gPT09IHZhbHVlW25leHRFbmQgLSAxXSkge1xuICAgICAgZW5kLS1cbiAgICAgIG5leHRFbmQtLVxuICAgIH1cbiAgICBjb25zdCBkZWx0YSA9IG5leHRFbmQgLSBlbmRcbiAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlcy5mbGF0TWFwKChyZWZlcmVuY2UpID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2UuZW5kIDw9IHN0YXJ0KSByZXR1cm4gW3JlZmVyZW5jZV1cbiAgICAgIGlmIChyZWZlcmVuY2Uuc3RhcnQgPj0gZW5kKSByZXR1cm4gW3sgLi4ucmVmZXJlbmNlLCBzdGFydDogcmVmZXJlbmNlLnN0YXJ0ICsgZGVsdGEsIGVuZDogcmVmZXJlbmNlLmVuZCArIGRlbHRhIH1dXG4gICAgICByZXR1cm4gW11cbiAgICB9KVxuICAgIHRleHQgPSB2YWx1ZVxuICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4udGV4dC5tYXRjaEFsbCgvXFxbRmlsZSAjXFxkK1xcXS9nKV0ucmV2ZXJzZSgpXG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgICBjb25zdCBhdHRhY2htZW50ID0gYXR0YWNobWVudHMuZ2V0KG1hdGNoWzBdKVxuICAgICAgaWYgKGF0dGFjaG1lbnQ/LmtpbmQgIT09ICdmaWxlJykgY29udGludWVcbiAgICAgIGNvbnN0IHBhdGggPSBhdHRhY2htZW50LnBhdGhcbiAgICAgIGNvbnN0IG9mZnNldCA9IHBhdGgubGVuZ3RoIC0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlcy5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLnN0YXJ0ID49IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgID8geyAuLi5yZWZlcmVuY2UsIHN0YXJ0OiByZWZlcmVuY2Uuc3RhcnQgKyBvZmZzZXQsIGVuZDogcmVmZXJlbmNlLmVuZCArIG9mZnNldCB9XG4gICAgICAgIDogcmVmZXJlbmNlKVxuICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgcGF0aCArIHRleHQuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpXG4gICAgICByZWZlcmVuY2VzLnB1c2goeyBzdGFydDogbWF0Y2guaW5kZXgsIGVuZDogbWF0Y2guaW5kZXggKyBwYXRoLmxlbmd0aCwgcGxhY2Vob2xkZXI6IG1hdGNoWzBdIH0pXG4gICAgfVxuICAgIHJlZmVyZW5jZXMuc29ydCgoYSwgYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpXG4gICAgcmV0dXJuIHRleHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRlbnQoKSB7XG4gICAgbGV0IHZhbHVlID0gdGV4dFxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIFsuLi5yZWZlcmVuY2VzXS5yZXZlcnNlKCkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcmVmZXJlbmNlLnN0YXJ0KSArIHJlZmVyZW5jZS5wbGFjZWhvbGRlciArIHZhbHVlLnNsaWNlKHJlZmVyZW5jZS5lbmQpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIHsgdXBkYXRlLCBjb250ZW50IH1cbn1cbiIsICJjb25zdCBiYXJzID0gJ1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OCdcbmNvbnN0IHdpZHRoID0gMTZcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZExldmVsKGxldmVscywgbGV2ZWwpIHtcbiAgcmV0dXJuIFsuLi5sZXZlbHMuc2xpY2UoMSAtIHdpZHRoKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbGV2ZWwpKV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3RhdGlvbkluZGljYXRvcihzdGF0dXMsIGxldmVscykge1xuICBpZiAoc3RhdHVzID09PSAnaWRsZScpIHJldHVybiAnJ1xuICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIGAgJHtzdGF0dXN9IGBcbiAgY29uc3Qgc2FtcGxlcyA9IFsuLi5BcnJheShNYXRoLm1heCgwLCB3aWR0aCAtIGxldmVscy5sZW5ndGgpKS5maWxsKDApLCAuLi5sZXZlbHMuc2xpY2UoLXdpZHRoKV1cbiAgcmV0dXJuIGAgJHtzYW1wbGVzLm1hcCgobGV2ZWwpID0+IGJhcnNbTWF0aC5yb3VuZChsZXZlbCAqIChiYXJzLmxlbmd0aCAtIDEpKV0pLmpvaW4oJycpfSByZWNvcmRpbmcgYFxufVxuIiwgImltcG9ydCB7IGNvZGVUb0FOU0kgfSBmcm9tICdAc2hpa2lqcy9jbGknXG5pbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBzaGlraVRoZW1lIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgTEFOR1MgPSB7XG4gIGpzOiAnanMnLCBtanM6ICdqcycsIGNqczogJ2pzJywganN4OiAnanN4JywgdHM6ICd0cycsIHRzeDogJ3RzeCcsXG4gIGpzb246ICdqc29uJywganNvbmw6ICdqc29uJywgbWQ6ICdtZCcsIHB5OiAncHl0aG9uJywgcmI6ICdydWJ5JywgZ286ICdnbycsXG4gIHJzOiAncnVzdCcsIGM6ICdjJywgaDogJ2MnLCBjcHA6ICdjcHAnLCBqYXZhOiAnamF2YScsIGNzczogJ2NzcycsXG4gIGh0bWw6ICdodG1sJywgdnVlOiAndnVlJywgc2g6ICdiYXNoJywgYmFzaDogJ2Jhc2gnLCB6c2g6ICdiYXNoJyxcbiAgeW1sOiAneWFtbCcsIHlhbWw6ICd5YW1sJywgdG9tbDogJ3RvbWwnLCBzcWw6ICdzcWwnLCBzdmVsdGU6ICdzdmVsdGUnLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFuZ0ZvclBhdGgocGF0aCkge1xuICBjb25zdCBleHQgPSBTdHJpbmcocGF0aCkuc3BsaXQoJy4nKS5wb3AoKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBMQU5HU1tleHRdIHx8ICd0eHQnXG59XG5cbmNvbnN0IGNhY2hlID0gbmV3IE1hcCgpXG5jb25zdCBwZW5kaW5nID0gbmV3IFNldCgpXG5jb25zdCBmYWlsZWQgPSBuZXcgU2V0KClcbmNvbnN0IFt2ZXJzaW9uLCBzZXRWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgwKVxuXG5leHBvcnQgY29uc3QgaGlnaGxpZ2h0VmVyc2lvbiA9IHZlcnNpb25cblxuZXhwb3J0IGZ1bmN0aW9uIGhpZ2hsaWdodChjb2RlLCBsYW5nKSB7XG4gIGNvbnN0IHNhZmVMYW5nID0gbGFuZyAmJiAhZmFpbGVkLmhhcyhsYW5nKSA/IGxhbmcgOiAndHh0J1xuICBjb25zdCB0aGVtZSA9IHNoaWtpVGhlbWUoKVxuICByZXR1cm4gY29kZVxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt0aGVtZX1cXG4ke3NhZmVMYW5nfVxcbiR7bGluZX1gXG4gICAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHJldHVybiBjYWNoZS5nZXQoa2V5KVxuICAgICAgd2FybShsaW5lLCBzYWZlTGFuZywgdGhlbWUsIGtleSlcbiAgICAgIHJldHVybiBsaW5lXG4gICAgfSlcbiAgICAuam9pbignXFxuJylcbn1cblxuZnVuY3Rpb24gd2FybShsaW5lLCBsYW5nLCB0aGVtZSwga2V5KSB7XG4gIGlmIChwZW5kaW5nLmhhcyhrZXkpKSByZXR1cm5cbiAgcGVuZGluZy5hZGQoa2V5KVxuICBjb2RlVG9BTlNJKGxpbmUsIGxhbmcsIHRoZW1lKVxuICAgIC50aGVuKChhbnNpKSA9PiBjYWNoZS5zZXQoa2V5LCBhbnNpLnJlcGxhY2UoL1xcbiQvLCAnJykpKVxuICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICBmYWlsZWQuYWRkKGxhbmcpXG4gICAgICBjYWNoZS5zZXQoa2V5LCBsaW5lKVxuICAgIH0pXG4gICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgcGVuZGluZy5kZWxldGUoa2V5KVxuICAgICAgc2V0VmVyc2lvbigodikgPT4gdiArIDEpXG4gICAgfSlcbn1cbiIsICJjb25zdCBMRVZFTFMgPSBbJyAnLCAnXHUyNThGJywgJ1x1MjU4RScsICdcdTI1OEQnLCAnXHUyNThDJywgJ1x1MjU4QicsICdcdTI1OEEnLCAnXHUyNTg5JywgJ1x1MjU4OCddXG5cbmV4cG9ydCBmdW5jdGlvbiBjb250ZXh0QmFyKHBlcmNlbnQsIHdpZHRoID0gNCkge1xuICBjb25zdCBlaWdodGhzID0gTWF0aC5yb3VuZChNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIHBlcmNlbnQpKSAqIHdpZHRoICogOCAvIDEwMClcbiAgY29uc3QgZnVsbCA9IE1hdGguZmxvb3IoZWlnaHRocyAvIDgpXG4gIGNvbnN0IHBhcnRpYWwgPSBlaWdodGhzICUgOFxuICByZXR1cm4gJ1x1MjU4OCcucmVwZWF0KGZ1bGwpICsgKHBhcnRpYWwgPyBMRVZFTFNbcGFydGlhbF0gOiAnJykgKyAnICcucmVwZWF0KHdpZHRoIC0gZnVsbCAtIChwYXJ0aWFsID8gMSA6IDApKVxufVxuIiwgImltcG9ydCB7IGVhc2UsIGxpbmVhciwgdXNlQW5pbWF0ZWQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5cbmZ1bmN0aW9uIHRvUmdiKGNvbG9yKSB7XG4gIGlmIChjb2xvcj8uc3RhcnRzV2l0aCgnIycpICYmIGNvbG9yLmxlbmd0aCA9PT0gNykge1xuICAgIHJldHVybiBbXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSgxLCAzKSwgMTYpLFxuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoMywgNSksIDE2KSxcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDUsIDcpLCAxNiksXG4gICAgXVxuICB9XG4gIHJldHVybiBbMTI3LCAxMjcsIDEyN11cbn1cblxuZnVuY3Rpb24gbWl4Q29sb3IoZnJvbSwgdG8sIGFtb3VudCkge1xuICBpZiAoZnJvbSA9PT0gdG8pIHJldHVybiBmcm9tXG4gIGNvbnN0IGEgPSB0b1JnYihmcm9tKVxuICBjb25zdCBiID0gdG9SZ2IodG8pXG4gIGNvbnN0IGNoYW5uZWxzID0gYS5tYXAoKHZhbHVlLCBpKSA9PiBNYXRoLnJvdW5kKHZhbHVlICsgKGJbaV0gLSB2YWx1ZSkgKiBhbW91bnQpKVxuICByZXR1cm4gYCMke2NoYW5uZWxzLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBbmltYXRlZFZhbHVlKHsgdmFsdWUsIGluaXRpYWwgPSB2YWx1ZSwgZHVyYXRpb24gPSAxMDAwLCBjb2xvciwgaGlnaGxpZ2h0LCBiYWNrZ3JvdW5kLCBmb3JtYXQgPSBTdHJpbmcgfSkge1xuICBjb25zdCBkaXNwbGF5ZWQgPSB1c2VBbmltYXRlZChpbml0aWFsLCBlYXNlKGR1cmF0aW9uKSlcbiAgY29uc3QgZ2xvdyA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoZHVyYXRpb24sIGxpbmVhcikpXG5cbiAgaWYgKHZhbHVlICE9PSBkaXNwbGF5ZWQuX2FuaW0udGFyZ2V0KSB7XG4gICAgZGlzcGxheWVkLnNldCh2YWx1ZSlcbiAgICBnbG93LnNuYXAoMSlcbiAgICBnbG93LnNldCgwKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWl4Q29sb3IoY29sb3IsIGhpZ2hsaWdodCwgZ2xvdygpKSwgYmc6IGJhY2tncm91bmQgfX0+XG4gICAgICB7Zm9ybWF0KGRpc3BsYXllZCgpKX1cbiAgICA8L3RleHQ+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBEaWZmLCBlYXNlLCBIb3Jpem9udGFsU2Nyb2xsQm94LCBsaW5lYXIsIE1hcmtkb3duLCBTcGlubmVyLCB1c2VBbmltYXRlZCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgRkcsIEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgU0VMRUNUX0JHLCBSRUQsIEdSRUVOIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IGhpZ2hsaWdodCwgbGFuZ0ZvclBhdGggfSBmcm9tICcuL2hpZ2hsaWdodC5qcydcblxuZXhwb3J0IHsgZGVmYXVsdFRpdGxlIGFzIHVpVGl0bGUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rvb2xzL3JlY29yZGVyLmpzJ1xuXG5mdW5jdGlvbiBQcm9zZVNuaXBwZXQoeyB2YWx1ZSwgbGFuZ3VhZ2UsIGhpZ2hsaWdodDogaGlnaGxpZ2h0Q29kZSwgY29kZUJnIH0pIHtcbiAgY29uc3Qgc2hvd24gPSBoaWdobGlnaHRDb2RlID8gaGlnaGxpZ2h0Q29kZSh2YWx1ZSwgbGFuZ3VhZ2UpIDogdmFsdWVcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGJnOiBjb2RlQmcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgPHRleHQ+e3Nob3dufTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb2RlU25pcHBldCh7IHZhbHVlLCBsYW5ndWFnZSwgaGlnaGxpZ2h0OiBoaWdobGlnaHRDb2RlLCBjb2RlQmcgfSkge1xuICBjb25zdCBzaG93biA9IGhpZ2hsaWdodENvZGUgPyBoaWdobGlnaHRDb2RlKHZhbHVlLCBsYW5ndWFnZSkgOiB2YWx1ZVxuICBjb25zdCBjb250ZW50V2lkdGggPSBNYXRoLm1heCgwLCAuLi52YWx1ZS5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiBbLi4ubGluZV0ubGVuZ3RoKSkgKyAyXG4gIHJldHVybiAoXG4gICAgPEhvcml6b250YWxTY3JvbGxCb3ggY29udGVudFdpZHRoPXtjb250ZW50V2lkdGh9IHN0eWxlPXt7IGJnOiBjb2RlQmcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAge3Nob3duLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGtleSkgPT4gKFxuICAgICAgICAgIDx0ZXh0IGtleT17a2V5fSBzdHlsZT17eyBvdmVyZmxvdzogJ25vd3JhcCcgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgKSl9XG4gICAgICA8L2JveD5cbiAgICA8L0hvcml6b250YWxTY3JvbGxCb3g+XG4gIClcbn1cblxuZnVuY3Rpb24gVHJhbnNjcmlwdENvZGVCbG9jayhwcm9wcykge1xuICBjb25zdCBsYW5ndWFnZSA9IHByb3BzLmxhbmd1YWdlPy50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IENvbXBvbmVudCA9IFsnbWQnLCAnbWFya2Rvd24nLCAndGV4dCcsICd0eHQnLCAncGxhaW50ZXh0J10uaW5jbHVkZXMobGFuZ3VhZ2UpID8gUHJvc2VTbmlwcGV0IDogQ29kZVNuaXBwZXRcbiAgcmV0dXJuIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBkaWZmUHJldmlldyhkaWZmLCByZXZlcnQpIHtcbiAgaWYgKCFkaWZmPy5odW5rcz8ubGVuZ3RoKSByZXR1cm4geyBiZWZvcmU6IFN0cmluZyhyZXZlcnQ/LmJlZm9yZSB8fCAnJyksIGFmdGVyOiBTdHJpbmcocmV2ZXJ0Py5hZnRlciB8fCAnJykgfVxuICBjb25zdCBiZWZvcmUgPSBbXVxuICBjb25zdCBhZnRlciA9IFtdXG4gIGRpZmYuaHVua3MuZm9yRWFjaCgoaHVuaywgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXgpIHtcbiAgICAgIGJlZm9yZS5wdXNoKCdcdTIyRUYnKVxuICAgICAgYWZ0ZXIucHVzaCgnXHUyMkVGJylcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGh1bmsubGluZXMpIHtcbiAgICAgIGlmIChsaW5lLnR5cGUgIT09ICdhZGQnKSBiZWZvcmUucHVzaChsaW5lLnRleHQpXG4gICAgICBpZiAobGluZS50eXBlICE9PSAncmVtb3ZlJykgYWZ0ZXIucHVzaChsaW5lLnRleHQpXG4gICAgfVxuICB9KVxuICByZXR1cm4geyBiZWZvcmU6IGJlZm9yZS5qb2luKCdcXG4nKSwgYWZ0ZXI6IGFmdGVyLmpvaW4oJ1xcbicpIH1cbn1cblxuZnVuY3Rpb24gZGlmZlByZXZpZXdMaW5lcyhkaWZmLCByZXZlcnQpIHtcbiAgaWYgKGRpZmY/Lmh1bmtzPy5sZW5ndGgpIHJldHVybiBkaWZmLmh1bmtzLnJlZHVjZSgoc3VtLCBoKSA9PiBzdW0gKyBoLmxpbmVzLmxlbmd0aCwgMClcbiAgY29uc3QgcHJldmlldyA9IGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydClcbiAgcmV0dXJuIE1hdGgubWF4KHByZXZpZXcuYWZ0ZXIuc3BsaXQoJ1xcbicpLmxlbmd0aCwgcHJldmlldy5iZWZvcmUuc3BsaXQoJ1xcbicpLmxlbmd0aCwgMilcbn1cblxuZnVuY3Rpb24gZm10RHVyYXRpb24obXMpIHtcbiAgaWYgKG1zIDwgNjAwMDApIHJldHVybiBgJHsobXMgLyAxMDAwKS50b0ZpeGVkKDIpfXNgXG4gIGNvbnN0IHNlY3MgPSBNYXRoLnJvdW5kKG1zIC8gMTAwMClcbiAgcmV0dXJuIGAke01hdGguZmxvb3Ioc2VjcyAvIDYwKX1tICR7c2VjcyAlIDYwfXNgXG59XG5cbmZ1bmN0aW9uIGZtdFJ1bm5pbmcobXMpIHtcbiAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3IobXMgLyAxMDAwKVxuICByZXR1cm4gc2VjcyA8IDYwID8gYCR7c2Vjc31zYCA6IGAke01hdGguZmxvb3Ioc2VjcyAvIDYwKX1tICR7c2VjcyAlIDYwfXNgXG59XG5cbmZ1bmN0aW9uIG1peENvbG9yKGZyb20sIHRvLCBhbW91bnQpIHtcbiAgY29uc3QgcmdiID0gKGNvbG9yKSA9PiBjb2xvcj8uc3RhcnRzV2l0aCgnIycpICYmIGNvbG9yLmxlbmd0aCA9PT0gN1xuICAgID8gWzEsIDMsIDVdLm1hcCgoaSkgPT4gcGFyc2VJbnQoY29sb3Iuc2xpY2UoaSwgaSArIDIpLCAxNikpXG4gICAgOiBbMTI3LCAxMjcsIDEyN11cbiAgY29uc3QgYSA9IHJnYihmcm9tKVxuICBjb25zdCBiID0gcmdiKHRvKVxuICByZXR1cm4gYCMke2EubWFwKCh2YWx1ZSwgaSkgPT4gTWF0aC5yb3VuZCh2YWx1ZSArIChiW2ldIC0gdmFsdWUpICogYW1vdW50KS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YFxufVxuXG5jb25zdCBUT09MX0RFU0NSSVBUSU9OX0xJTUlUID0gNVxuY29uc3QgQkFTSF9PVVRQVVRfTElORVMgPSAxMFxuY29uc3QgVE9PTF9OQU1FX0ZMQVNIX01TID0gOTAwXG5jb25zdCBERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgPSA1MDBcbmNvbnN0IERFU0NSSVBUSU9OX1JFVkVBTF9NUyA9IDcwMFxuXG5mdW5jdGlvbiBkZWxheWVkTGluZWFyKHQpIHtcbiAgY29uc3QgZGVsYXkgPSBERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgLyAoREVTQ1JJUFRJT05fUkVWRUFMX0RFTEFZX01TICsgREVTQ1JJUFRJT05fUkVWRUFMX01TKVxuICByZXR1cm4gdCA8PSBkZWxheSA/IDAgOiAodCAtIGRlbGF5KSAvICgxIC0gZGVsYXkpXG59XG5cbmZ1bmN0aW9uIERlc2NyaXB0aW9uUmV2ZWFsKHsgY2hpbGRyZW4sIHJ1bm5pbmcgfSkge1xuICBjb25zdCByZXZlYWwgPSB1c2VBbmltYXRlZChydW5uaW5nID8gMCA6IDEsIGVhc2UoREVTQ1JJUFRJT05fUkVWRUFMX0RFTEFZX01TICsgREVTQ1JJUFRJT05fUkVWRUFMX01TLCBkZWxheWVkTGluZWFyKSlcbiAgaWYgKCFydW5uaW5nKSByZXZlYWwuc2V0KDEpXG4gIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWl4Q29sb3IoYWNjZW50KCksIEZHLCByZXZlYWwoKSksIG92ZXJmbG93OiAndHJ1bmNhdGUnLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAgfX0+e2NoaWxkcmVufTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gb3V0cHV0TGluZXModmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFtdXG4gIGNvbnN0IGxpbmVzID0gdmFsdWUuc3BsaXQoJ1xcbicpXG4gIGlmIChsaW5lcy5hdCgtMSkgPT09ICcnKSBsaW5lcy5wb3AoKVxuICByZXR1cm4gbGluZXNcbn1cblxuZnVuY3Rpb24gQmFzaE91dHB1dCh7IHZhbHVlLCBsaW5lU3RhcnQsIGxpbmVDb3VudCB9KSB7XG4gIGNvbnN0IGxpbmVzID0gb3V0cHV0TGluZXModmFsdWUpXG4gIGlmICghbGluZXMubGVuZ3RoKSByZXR1cm4gbnVsbFxuICBjb25zdCBzaG93biA9IGxpbmVzLnNsaWNlKC1CQVNIX09VVFBVVF9MSU5FUylcbiAgY29uc3QgZmlyc3QgPSBsaW5lU3RhcnQgfHwgKGxpbmVDb3VudCA/IGxpbmVDb3VudCAtIHNob3duLmxlbmd0aCArIDEgOiBsaW5lcy5sZW5ndGggLSBzaG93bi5sZW5ndGggKyAxKVxuICBjb25zdCBsYXN0ID0gbGluZUNvdW50IHx8IGZpcnN0ICsgc2hvd24ubGVuZ3RoIC0gMVxuICBjb25zdCBndXR0ZXJXaWR0aCA9IFN0cmluZyhsYXN0KS5sZW5ndGhcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICB7c2hvd24ubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgICAgIDxib3gga2V5PXtmaXJzdCArIGl9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7U3RyaW5nKGZpcnN0ICsgaSkucGFkU3RhcnQoZ3V0dGVyV2lkdGgpfSBgfTwvdGV4dD5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb21wYWN0VG9vbFNpZ24oeyB0b29sIH0pIHtcbiAgaWYgKHRvb2wubmFtZSAhPT0gJ2Jhc2gnKSByZXR1cm4gPHRleHQ+eycgICd9PC90ZXh0PlxuICBpZiAodG9vbC5iYWNrZ3JvdW5kKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnsnXHUyMUFBICd9PC90ZXh0PlxuICBpZiAodG9vbC5zdGF0dXMgPT09ICdydW5uaW5nJykgcmV0dXJuIDxib3ggc3R5bGU9e3sgd2lkdGg6IDIgfX0+PFNwaW5uZXIgY29sb3I9e2FjY2VudCgpfSAvPjwvYm94PlxuICBpZiAodG9vbC5leGl0Q29kZSA9PT0gMCkgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBHUkVFTiB9fT57J1x1MjcxMyAnfTwvdGV4dD5cbiAgaWYgKHRvb2wuZXhpdENvZGUgIT0gbnVsbCkgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQgfX0+eydcdTAwRDcgJ308L3RleHQ+XG4gIHJldHVybiA8dGV4dD57JyAgJ308L3RleHQ+XG59XG5cbmZ1bmN0aW9uIFRvb2xHcm91cCh7IGl0ZW0sIHZlcmJvc2UgfSkge1xuICBjb25zdCBsYXRlc3RDYWxsSWQgPSBpdGVtLnRvb2xzLmF0KC0xKT8uY2FsbElkXG4gIGNvbnN0IGdsb3cgPSB1c2VBbmltYXRlZCgwLCBlYXNlKFRPT0xfTkFNRV9GTEFTSF9NUywgbGluZWFyKSlcbiAgaWYgKGxhdGVzdENhbGxJZCAhPT0gZ2xvdy5fY2FsbElkKSB7XG4gICAgZ2xvdy5fY2FsbElkID0gbGF0ZXN0Q2FsbElkXG4gICAgaWYgKGl0ZW0uYWN0aXZlKSB7XG4gICAgICBnbG93LnNuYXAoMSlcbiAgICAgIGdsb3cuc2V0KDApXG4gICAgfVxuICB9XG5cbiAgaWYgKHZlcmJvc2UpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgeyhpdGVtLml0ZW1zIHx8IGl0ZW0udG9vbHMpLm1hcCgoZW50cnksIGkpID0+IGVudHJ5LmtpbmQgPT09ICd0aG91Z2h0cydcbiAgICAgICAgICA/IDxNZXNzYWdlIGtleT17aX0gaXRlbT17ZW50cnl9IHZlcmJvc2UgLz5cbiAgICAgICAgICA6IDxUb29sQ2FyZCBrZXk9e2l9IHsuLi5lbnRyeX0gdmVyYm9zZSAvPil9XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwKClcbiAgZm9yIChjb25zdCB0b29sIG9mIGl0ZW0udG9vbHMpIGNvdW50cy5zZXQodG9vbC5uYW1lLCAoY291bnRzLmdldCh0b29sLm5hbWUpIHx8IDApICsgMSlcbiAgY29uc3QgZW50cmllcyA9IFsuLi5jb3VudHNdXG4gIGNvbnN0IHRvdGFsTXMgPSBpdGVtLnRvb2xzLnJlZHVjZSgoc3VtLCB0b29sKSA9PiBzdW0gKyAodG9vbC5kdXJhdGlvbk1zIHx8IDApLCAwKVxuICBjb25zdCBsYXRlc3ROYW1lID0gaXRlbS50b29scy5hdCgtMSk/Lm5hbWVcbiAgY29uc3QgYWN0aXZpdHkgPSAoaXRlbS5pdGVtcyB8fCBpdGVtLnRvb2xzKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5raW5kID09PSAndGhvdWdodHMnXG4gICAgPyB7IC4uLmVudHJ5LCBuYW1lOiAndGhvdWdodHMnLCBkZXNjcmlwdGlvbjogZW50cnkudGV4dC5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpLCB0aG91Z2h0OiB0cnVlIH1cbiAgICA6IGVudHJ5KS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5kZXNjcmlwdGlvbilcbiAgY29uc3QgZGVzY3JpcHRpb25zID0gYWN0aXZpdHkuc2xpY2UoLVRPT0xfREVTQ1JJUFRJT05fTElNSVQpXG4gIGNvbnN0IGhpZGRlbkRlc2NyaXB0aW9ucyA9IGFjdGl2aXR5Lmxlbmd0aCAtIGRlc2NyaXB0aW9ucy5sZW5ndGhcbiAgY29uc3QgdG9vbE5hbWVXaWR0aCA9IE1hdGgubWF4KDAsIC4uLmRlc2NyaXB0aW9ucy5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lLmxlbmd0aCkpXG4gIGNvbnN0IHZpc2libGVCYXNoID0gaXRlbS5hY3RpdmUgJiYgaXRlbS50b29scy5hdCgtMSk/Lm5hbWUgPT09ICdiYXNoJyA/IGl0ZW0udG9vbHMuYXQoLTEpIDogbnVsbFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAge2l0ZW0uYWN0aXZlID8gPFNwaW5uZXIgY29sb3I9e2FjY2VudCgpfSAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5cdTI3MTM8L3RleHQ+fVxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBmbGV4V3JhcDogJ3dyYXAnLCBmbGV4R3JvdzogMSwgbWFyZ2luUmlnaHQ6IDIgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGl0ZW0uYWN0aXZlID8gRkcgOiBNVVRFRCB9fT4gQ2FsbGVkIDwvdGV4dD5cbiAgICAgICAgICB7ZW50cmllcy5tYXAoKFtuYW1lLCBjb3VudF0sIGkpID0+IChcbiAgICAgICAgICAgIDx0ZXh0IGtleT17bmFtZX0gc3R5bGU9e3sgY29sb3I6IGl0ZW0uYWN0aXZlICYmIG5hbWUgPT09IGxhdGVzdE5hbWUgPyBtaXhDb2xvcihGRywgYWNjZW50KCksIGdsb3coKSkgOiBpdGVtLmFjdGl2ZSA/IEZHIDogTVVURUQgfX0+XG4gICAgICAgICAgICAgIHtgJHtpID8gJywgJyA6ICcnfSR7bmFtZX0ke2NvdW50ID09PSAxID8gJycgOiBgICR7Y291bnR9IHRpbWVzYH1gfVxuICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2JveD5cbiAgICAgICAge3RvdGFsTXMgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgZmxleFNocmluazogMCB9fT57Zm10RHVyYXRpb24odG90YWxNcyl9PC90ZXh0Pn1cbiAgICAgIDwvYm94PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgIHtoaWRkZW5EZXNjcmlwdGlvbnMgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgPHRleHQ+eycgJy5yZXBlYXQodG9vbE5hbWVXaWR0aCArIDQpfTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YC4uLiR7aGlkZGVuRGVzY3JpcHRpb25zfSBtb3JlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIHtkZXNjcmlwdGlvbnMubWFwKCh0b29sLCBpKSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Rvb2wuY2FsbElkIHx8IGB0aG91Z2h0LSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHt0b29sLnRob3VnaHQgPyA8dGV4dD57JyAgJ308L3RleHQ+IDogPENvbXBhY3RUb29sU2lnbiB0b29sPXt0b29sfSAvPn1cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0b29sLnRob3VnaHQgfX0+e2Ake3Rvb2wubmFtZS5wYWRTdGFydCh0b29sTmFtZVdpZHRoKX0gIGB9PC90ZXh0PlxuICAgICAgICAgICAge3Rvb2wudGhvdWdodFxuICAgICAgICAgICAgICA/IDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT48TWFya2Rvd24gdGV4dD17dG9vbC5kZXNjcmlwdGlvbn0gc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19IC8+PC9ib3g+XG4gICAgICAgICAgICAgIDogPERlc2NyaXB0aW9uUmV2ZWFsIHJ1bm5pbmc9e3Rvb2wuc3RhdHVzID09PSAncnVubmluZyd9Pnt0b29sLmRlc2NyaXB0aW9ufTwvRGVzY3JpcHRpb25SZXZlYWw+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApKX1cbiAgICAgICAge3Zpc2libGVCYXNoPy50aXRsZSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntoaWdobGlnaHQodmlzaWJsZUJhc2gudGl0bGUsICdiYXNoJyl9PC90ZXh0Pn1cbiAgICAgICAge3Zpc2libGVCYXNoPy5mdWxsT3V0cHV0ICYmIDxCYXNoT3V0cHV0IHZhbHVlPXt2aXNpYmxlQmFzaC5mdWxsT3V0cHV0fSBsaW5lU3RhcnQ9e3Zpc2libGVCYXNoLm91dHB1dExpbmVTdGFydH0gbGluZUNvdW50PXt2aXNpYmxlQmFzaC5vdXRwdXRMaW5lQ291bnR9IC8+fVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gVG9vbENhcmQoeyBuYW1lLCB0aXRsZSwgdGl0bGVMYW5nLCBkZXNjcmlwdGlvbiwgc3RhdHVzLCBkaWZmLCByZXZlcnQsIGZ1bGxPdXRwdXQsIG91dHB1dExpbmVTdGFydCwgb3V0cHV0TGluZUNvdW50LCBlcnJvciwgYmFja2dyb3VuZCwgdmVyYm9zZSwgc3RhcnRlZEF0LCBkdXJhdGlvbk1zIH0pIHtcbiAgY29uc3Qgc2hvd25UaXRsZSA9IG5hbWUgPT09ICdiYXNoJyA/IG51bGwgOiB0aXRsZUxhbmcgJiYgdGl0bGUgPyBoaWdobGlnaHQodGl0bGUsIHRpdGxlTGFuZykgOiB0aXRsZVxuICBjb25zdCBpbmxpbmVEZXNjcmlwdGlvbiA9ICFzaG93blRpdGxlXG4gIGNvbnN0IHByZXZpZXcgPSBkaWZmUHJldmlldyhkaWZmLCByZXZlcnQpXG4gIGNvbnN0IHJ1bm5pbmcgPSBzdGF0dXMgPT09ICdydW5uaW5nJ1xuICBjb25zdCBpbnRlcnJ1cHRlZCA9IHN0YXR1cyA9PT0gJ2ludGVycnVwdGVkJ1xuICBjb25zdCByZXZlcnRlZCA9IHN0YXR1cyA9PT0gJ3JldmVydGVkJ1xuICBjb25zdCBmYWlsZWQgPSBzdGF0dXMgPT09ICdlcnJvcidcbiAgY29uc3Qgb3V0TGluZXMgPSBmdWxsT3V0cHV0ID8gZnVsbE91dHB1dC5zcGxpdCgnXFxuJykgOiBudWxsXG5cbiAgY29uc3QgZWxhcHNlZCA9IHJ1bm5pbmcgJiYgc3RhcnRlZEF0ID8gRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCA6IDBcbiAgY29uc3QgdG9vayA9ICFydW5uaW5nICYmICFiYWNrZ3JvdW5kICYmIGR1cmF0aW9uTXMgIT0gbnVsbCA/IGZtdER1cmF0aW9uKGR1cmF0aW9uTXMpIDogbnVsbFxuXG4gIGNvbnN0IGluZm8gPSBydW5uaW5nID8gKGVsYXBzZWQgPj0gNTAwMCA/IGBydW5uaW5nICgke2ZtdFJ1bm5pbmcoZWxhcHNlZCl9KWAgOiAncnVubmluZycpXG4gICAgOiBpbnRlcnJ1cHRlZCA/ICdpbnRlcnJ1cHRlZCdcbiAgICA6IHJldmVydGVkID8gJ3JldmVydGVkJ1xuICAgIDogZmFpbGVkID8gYGZhaWxlZCR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuICAgIDogYmFja2dyb3VuZCA/ICdiYWNrZ3JvdW5kICBzaGVsbCBsaXN0ZWQgYmVsb3cnXG4gICAgOiBkaWZmID8gYCske2RpZmYuYWRkaXRpb25zfSAtJHtkaWZmLmRlbGV0aW9uc30ke3Rvb2sgPyBgICAke3Rvb2t9YCA6ICcnfWBcbiAgICA6IG91dExpbmVzID8gYCR7b3V0cHV0TGluZUNvdW50IHx8IG91dExpbmVzLmxlbmd0aH0gJHsob3V0cHV0TGluZUNvdW50IHx8IG91dExpbmVzLmxlbmd0aCkgPT09IDEgPyAnbGluZScgOiAnbGluZXMnfSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuICAgIDogYGRvbmUke3Rvb2sgPyBgICAke3Rvb2t9YCA6ICcnfWBcblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgb3ZlcmZsb3c6ICdjbGlwJyB9fT5cbiAgICAgICAge3J1bm5pbmdcbiAgICAgICAgICA/IDxTcGlubmVyIGNvbG9yPXthY2NlbnQoKX0gLz5cbiAgICAgICAgICA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpbnRlcnJ1cHRlZCB8fCBmYWlsZWQgPyBSRUQgOiByZXZlcnRlZCA/IE1VVEVEIDogYWNjZW50KCkgfX0+e2ludGVycnVwdGVkID8gJ1x1MjcxNycgOiBmYWlsZWQgPyAnXHUyNzE3JyA6IHJldmVydGVkID8gJ1x1MjFBOScgOiAnXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGZsZXhTaHJpbms6IDAgfX0+e2Ake25hbWUucGFkRW5kKDUpfSBgfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IEZHIH19PntzaG93blRpdGxlIHx8IGRlc2NyaXB0aW9uIHx8IG5hbWV9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBmbGV4U2hyaW5rOiAwLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtpbmZvfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICB7ZGVzY3JpcHRpb24gJiYgIWlubGluZURlc2NyaXB0aW9uICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nTGVmdDogOCB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntkZXNjcmlwdGlvbn08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIHtuYW1lID09PSAnYmFzaCcgJiYgdGl0bGUgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiA4IH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2hpZ2hsaWdodCh0aXRsZSwgdGl0bGVMYW5nIHx8ICdiYXNoJyl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICB7ZmFpbGVkICYmIGVycm9yICYmIChcbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtlcnJvcn1gfTwvdGV4dD5cbiAgICAgICl9XG4gICAgICB7cmV2ZXJ0ICYmICFydW5uaW5nICYmICFyZXZlcnRlZCAmJiAhKGRpZmYgJiYgZGlmZi5hZGRpdGlvbnMgPT09IDAgJiYgZGlmZi5kZWxldGlvbnMgPT09IDApICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiBkaWZmUHJldmlld0xpbmVzKGRpZmYsIHJldmVydCksIG1hcmdpblRvcDogMSwgcGFkZGluZ0xlZnQ6IDggfX0+XG4gICAgICAgICAgPERpZmZcbiAgICAgICAgICAgIGJlZm9yZT17cHJldmlldy5iZWZvcmV9XG4gICAgICAgICAgICBhZnRlcj17cHJldmlldy5hZnRlcn1cbiAgICAgICAgICAgIGxhbmd1YWdlPXtsYW5nRm9yUGF0aChyZXZlcnQucGF0aCl9XG4gICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgIGNvbnRleHQ9ezN9XG4gICAgICAgICAgICBmb2xkcz17ZmFsc2V9XG4gICAgICAgICAgICBmb2N1c2VkPXtmYWxzZX1cbiAgICAgICAgICAgIHNjcm9sbGJhcj17ZmFsc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAge25hbWUgPT09ICdiYXNoJyAmJiBmdWxsT3V0cHV0ICYmIDxib3ggc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDggfX0+PEJhc2hPdXRwdXQgdmFsdWU9e2Z1bGxPdXRwdXR9IGxpbmVTdGFydD17b3V0cHV0TGluZVN0YXJ0fSBsaW5lQ291bnQ9e291dHB1dExpbmVDb3VudH0gLz48L2JveD59XG4gICAgICB7b3V0TGluZXMgJiYgdmVyYm9zZSAmJiBuYW1lICE9PSAnYmFzaCcgJiYgIXJ1bm5pbmcgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge291dExpbmVzLnNsaWNlKDAsIDIwMCkubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICAgIHtvdXRMaW5lcy5sZW5ndGggPiAyMDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyMDI2ICR7b3V0TGluZXMubGVuZ3RoIC0gMjAwfSBtb3JlIGxpbmVzYH08L3RleHQ+fVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gRGVsaWJlcmF0aW9uVHVybih7IGl0ZW0sIHZlcmJvc2UsIGNvbXBhY3QgPSBmYWxzZSB9KSB7XG4gIGNvbnN0IHBhcnRpY2lwYW50QSA9IGl0ZW0ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWEnIHx8IGl0ZW0ucm9sZSA9PT0gJ3Byb3Bvc2VyJ1xuICBjb25zdCBzeW50aGVzaXMgPSBpdGVtLnJvbGUgPT09ICdzeW50aGVzaXMnXG4gIGNvbnN0IGxhYmVsID0gc3ludGhlc2lzID8gJ1N5bnRoZXNpcycgOiBgJHtwYXJ0aWNpcGFudEEgPyAnUGFydGljaXBhbnQgQScgOiAnUGFydGljaXBhbnQgQid9ICByb3VuZCAke2l0ZW0ucm91bmR9YFxuICBjb25zdCB0ZXh0ID0gaXRlbS5pbnRlcnJ1cHRlZCA/IGAke2l0ZW0udGV4dH0gKihpbnRlcnJ1cHRlZCkqYCA6IGl0ZW0udGV4dFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgcGFkZGluZ1g6IGNvbXBhY3QgPyAwIDogMiwgYmc6IGNvbXBhY3QgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBzeW50aGVzaXMgfHwgcGFydGljaXBhbnRBID8gYWNjZW50KCkgOiBNVVRFRCB9fSAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIHBhZGRpbmdYOiBjb21wYWN0ID8gMiA6IDIsIHBhZGRpbmdZOiAxLCBiZzogc3ludGhlc2lzID8gU0VMRUNUX0JHIDogcGFydGljaXBhbnRBIHx8IGNvbXBhY3QgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc3ludGhlc2lzIHx8IHBhcnRpY2lwYW50QSA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+e2xhYmVsfTwvdGV4dD5cbiAgICAgICAgICB7aXRlbS50b29scz8ubWFwKCh0b29sKSA9PiA8VG9vbENhcmQga2V5PXt0b29sLmNhbGxJZH0gey4uLnRvb2x9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+KX1cbiAgICAgICAgICB7dGV4dCAmJiAoXG4gICAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICAgIGNvZGVCZz17bnVsbH1cbiAgICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgICB0YWJsZUJvcmRlckNvbG9yPXtNVVRFRH1cbiAgICAgICAgICAgICAgdGFibGVSb3dIb3ZlckJnPXtQQU5FTF9CR31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBkZWxpYmVyYXRpb25Sb3dzKHR1cm5zKSB7XG4gIGNvbnN0IHJvd3MgPSBbXVxuICBmb3IgKGNvbnN0IHR1cm4gb2YgdHVybnMpIHtcbiAgICBpZiAodHVybi5yb2xlID09PSAnc3ludGhlc2lzJyB8fCAhdHVybi5wYXJhbGxlbEdyb3VwKSB7XG4gICAgICByb3dzLnB1c2goW3R1cm5dKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSByb3dzLmZpbmQoKHJvdykgPT4gcm93WzBdPy5wYXJhbGxlbEdyb3VwID09PSB0dXJuLnBhcmFsbGVsR3JvdXApXG4gICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5wdXNoKHR1cm4pXG4gICAgZWxzZSByb3dzLnB1c2goW3R1cm5dKVxuICB9XG4gIHJldHVybiByb3dzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEZWxpYmVyYXRpb25FeGNoYW5nZSh7IHR1cm5zLCB2ZXJib3NlLCB3aWRlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtkZWxpYmVyYXRpb25Sb3dzKHR1cm5zKS5tYXAoKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ludGhlc2lzID0gcm93WzBdPy5yb2xlID09PSAnc3ludGhlc2lzJ1xuICAgICAgICBpZiAoIXdpZGUgfHwgc3ludGhlc2lzKSByZXR1cm4gcm93Lm1hcCgodHVybikgPT4gPERlbGliZXJhdGlvblR1cm4ga2V5PXtgJHt0dXJuLnJvbGV9OiR7dHVybi5yb3VuZCA/PyAnc3ludGhlc2lzJ31gfSBpdGVtPXt0dXJufSB2ZXJib3NlPXt2ZXJib3NlfSAvPilcbiAgICAgICAgY29uc3QgbGVmdCA9IHJvdy5maW5kKCh0dXJuKSA9PiB0dXJuLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1hJyB8fCB0dXJuLnJvbGUgPT09ICdwcm9wb3NlcicpXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gcm93LmZpbmQoKHR1cm4pID0+IHR1cm4ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWInIHx8IHR1cm4ucm9sZSA9PT0gJ3Jldmlld2VyJylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17cm93WzBdPy5wYXJhbGxlbEdyb3VwIHx8IGAke3Jvd1swXT8ucm9sZX06JHtyb3dbMF0/LnJvdW5kfToke2luZGV4fWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCB3aWR0aDogJzEwMCUnLCBvdmVyZmxvdzogJ2NsaXAnLCBiZzogUEFORUxfQkcgfX0+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAnNTAlJywgbWluV2lkdGg6IDAsIG92ZXJmbG93OiAnY2xpcCcgfX0+e2xlZnQgJiYgPERlbGliZXJhdGlvblR1cm4gaXRlbT17bGVmdH0gdmVyYm9zZT17dmVyYm9zZX0gY29tcGFjdCAvPn08L2JveD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBQQU5FTF9CRyB9fSAvPlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIG92ZXJmbG93OiAnY2xpcCcgfX0+e3JpZ2h0ICYmIDxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e3JpZ2h0fSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0IC8+fTwvYm94PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIHNob3dMb2NrZWQgPSBmYWxzZSB9KSB7XG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJykgcmV0dXJuIDxUb29sR3JvdXAgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cblxuICBpZiAoaXRlbS5raW5kID09PSAndXNlcicgJiYgaXRlbS5vcmlnaW4gPT09ICd2aWV3Jykge1xuICAgIGNvbnN0IGxhYmVsID0gL15cXFt2aWV3OiAoW15cXF1dKylcXF0vLmV4ZWMoaXRlbS50ZXh0KT8uWzFdIHx8ICdpbWFnZSdcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjcxMyBWaWV3ZWQgJHtsYWJlbH1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdhZ2VudC1ub3RpY2UtZ3JvdXAnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNjk5ICR7aXRlbS5ub3RpY2VzLmxlbmd0aH0gYWdlbnRzIGZpbmlzaGVkYH08L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICAge3ZlcmJvc2UgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICAgIHtpdGVtLm5vdGljZXMubWFwKChub3RpY2UsIGkpID0+IChcbiAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bm90aWNlLnRleHQucmVwbGFjZSgvXlxcW3N5c3RlbSBub3RpZmljYXRpb25cXF1cXHMqLywgJycpfTwvdGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wnKSB7XG4gICAgcmV0dXJuIDxUb29sQ2FyZCB7Li4uaXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdW1tYXJ5Jykge1xuICAgIGNvbnN0IGxpbmVzID0gaXRlbS50ZXh0LnNwbGl0KCdcXG4nKVxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57aXRlbS5zb3VyY2UgPT09ICdjb21wYWN0JyA/ICdcdTI3MjYgc3VtbWFyeSAgY29udmVyc2F0aW9uIGNvbXBhY3RlZCBhYm92ZSB0aGlzIHBvaW50JyA6ICdcdTI3MjYgc3VtbWFyeSAgcmV3b3VuZCBjb252ZXJzYXRpb24nfTwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtsaW5lcy5sZW5ndGh9ICR7bGluZXMubGVuZ3RoID09PSAxID8gJ2xpbmUnIDogJ2xpbmVzJ31gfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHt2ZXJib3NlICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgICB7bGluZXMuc2xpY2UoMCwgNTAwKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICB7bGluZXMubGVuZ3RoID4gNTAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjAyNiAke2xpbmVzLmxlbmd0aCAtIDUwMH0gbW9yZSBsaW5lc2B9PC90ZXh0Pn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgPE1hcmtkb3duIHRleHQ9e2l0ZW0udGV4dH0gc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0gLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnZGVsaWJlcmF0aW9uLXR1cm4nKSB7XG4gICAgcmV0dXJuIDxib3ggc3R5bGU9e3sgbWFyZ2luVG9wOiAxIH19PjxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+PC9ib3g+XG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnbm90aWNlJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI2OTkgJHtpdGVtLnRleHQucmVwbGFjZSgvXlxcW3N5c3RlbSBub3RpZmljYXRpb25cXF1cXHMqLywgJycpfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NraWxsJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI3MjYgc2tpbGw6ICR7aXRlbS5uYW1lfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3N0ZWVyLXRvb2xzJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI1MDBcdTI1MDAgJHtpdGVtLmNvdW50fSB0b29sICR7aXRlbS5jb3VudCA9PT0gMSA/ICdpbnRlcmFjdGlvbicgOiAnaW50ZXJhY3Rpb25zJ30gaGlkZGVuIFx1MjUwMFx1MjUwMGB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NoZWxsLWNvbW1hbmQnKSB7XG4gICAgY29uc3Qgc2hvd24gPSBoaWdobGlnaHQoaXRlbS50ZXh0LCAnYmFzaCcpXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydjb21tYW5kJ308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICAgIHtzaG93bi5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBpKSA9PiA8dGV4dCBrZXk9e2l9PntgJHtpID09PSAwID8gJyQgJyA6ICcgICd9JHtsaW5lIHx8ICcgJ31gfTwvdGV4dD4pfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzaGVsbC1vdXRwdXQnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydvdXRwdXQnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgICAge2l0ZW0udGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBpKSA9PiA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntsaW5lIHx8ICcgJ308L3RleHQ+KX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndXNlcicpIHtcbiAgICBjb25zdCBsYWJlbCA9IHNob3dMb2NrZWQgJiYgaXRlbS5sb2NrZWQgPyAnTG9ja2VkICBjb21wYWN0ZWQnIDogc2hvd0xvY2tlZCA/ICdVc2VyJyA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBQQU5FTF9CRyB9fSAvPlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IFNFTEVDVF9CRyA6IFBBTkVMX0JHLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBpdGVtLmludGVycnVwdGVkID8gYCR7aXRlbS50ZXh0fSAqKGludGVycnVwdGVkKSpgIDogaXRlbS50ZXh0XG4gIGNvbnN0IGxhYmVsID0gc2hvd0xvY2tlZCAmJiBpdGVtLmxvY2tlZCA/ICdMb2NrZWQgIGNvbXBhY3RlZCcgOiBzaG93TG9ja2VkID8gJ0Fzc2lzdGFudCcgOiBudWxsXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiB1bmRlZmluZWQgfX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiBzaG93TG9ja2VkID8gMSA6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgY29kZUJnPXtudWxsfVxuICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgdGFibGVCb3JkZXJDb2xvcj17TVVURUR9XG4gICAgICAgICAgICB0YWJsZVJvd0hvdmVyQmc9e1BBTkVMX0JHfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIFRleHRJbnB1dCwgdXNlTGF5b3V0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vdHJhbnNjcmlwdC5qc3gnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBNVVRFRCwgUEFORUxfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgY29udmVyc2F0aW9uTWF0Y2hlcywgaGlnaGxpZ2h0Q29udmVyc2F0aW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb252ZXJzYXRpb24tc2VhcmNoLmpzJ1xuXG5mdW5jdGlvbiBTY3JvbGxBbmNob3IoeyB0YXJnZXQgfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICB0YXJnZXQuYW5jaG9yWSA9IGxheW91dC55XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIFNlYXJjaE1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBjdXJyZW50TWF0Y2gsIHNlYXJjaCB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGlmIChjdXJyZW50TWF0Y2gpIHNlYXJjaC5zY3JvbGxUb01hdGNoKGxheW91dCwgY3VycmVudE1hdGNoKVxuICByZXR1cm4gPE1lc3NhZ2UgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCh7IGZtLCB2ZXJib3NlLCBzZXRGb2xsb3csIHNldE9mZnNldCB9KSB7XG4gIGNvbnN0IFthY3RpdmUsIHNldEFjdGl2ZV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbY29tbWl0dGVkLCBzZXRDb21taXR0ZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZW50ZXJGb2N1cywgc2V0RW50ZXJGb2N1c10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzY3JvbGxSZXF1ZXN0LCBzZXRTY3JvbGxSZXF1ZXN0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2Nyb2xsXSA9IGNyZWF0ZVNpZ25hbCh7IGFuY2hvclk6IDAsIGtleTogbnVsbCB9KVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyRm9jdXMoKSB7XG4gICAgaWYgKCFhY3RpdmUoKSkgcmV0dXJuXG4gICAgZm0uaXRlbSgnY29udmVyc2F0aW9uLXNlYXJjaCcpXG4gICAgaWYgKGVudGVyRm9jdXMoKSkge1xuICAgICAgc2V0RW50ZXJGb2N1cyhmYWxzZSlcbiAgICAgIGZtLmZvY3VzKCdjb252ZXJzYXRpb24tc2VhcmNoJylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuKCkge1xuICAgIHNldEFjdGl2ZSh0cnVlKVxuICAgIHNldFF1ZXJ5KCcnKVxuICAgIHNldENvbW1pdHRlZChmYWxzZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIHNldEVudGVyRm9jdXModHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlKHsgcmVzdG9yZUZvY3VzID0gdHJ1ZSB9ID0ge30pIHtcbiAgICBzZXRBY3RpdmUoZmFsc2UpXG4gICAgc2V0UXVlcnkoJycpXG4gICAgc2V0Q29tbWl0dGVkKGZhbHNlKVxuICAgIHNldEluZGV4KDApXG4gICAgaWYgKHJlc3RvcmVGb2N1cyAmJiBmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpKSBmbS5mb2N1cygnZmVlZCcpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVJbnB1dChldmVudCwgbWF0Y2hlcykge1xuICAgIGlmIChhY3RpdmUoKSAmJiAhZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSkge1xuICAgICAgY2xvc2UoeyByZXN0b3JlRm9jdXM6IGZhbHNlIH0pXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoIWFjdGl2ZSgpIHx8ICFjb21taXR0ZWQoKSkgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgY291bnQgPSBtYXRjaGVzLmxlbmd0aFxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZSgpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnbicgJiYgIWV2ZW50LnNoaWZ0KSB7XG4gICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgc2V0SW5kZXgoKGluZGV4KCkgKyAxKSAlIGNvdW50KVxuICAgICAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ04nIHx8IChldmVudC5zaGlmdCAmJiBldmVudC5rZXkgPT09ICduJykpIHtcbiAgICAgIGlmIChjb3VudCkge1xuICAgICAgICBzZXRJbmRleCgoaW5kZXgoKSAtIDEgKyBjb3VudCkgJSBjb3VudClcbiAgICAgICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ28nKSByZXR1cm4gZmFsc2VcbiAgICBlbHNlIHJldHVybiB0cnVlXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGFyZShpdGVtcykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjb252ZXJzYXRpb25NYXRjaGVzKGl0ZW1zLCBxdWVyeSgpLCB2ZXJib3NlKCkpXG4gICAgY29uc3QgbGFzdEluZGV4ID0gTWF0aC5tYXgoMCwgbWF0Y2hlcy5sZW5ndGggLSAxKVxuICAgIGlmIChpbmRleCgpID4gbGFzdEluZGV4KSBzZXRJbmRleChsYXN0SW5kZXgpXG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoZXMsXG4gICAgICBpdGVtczogYWN0aXZlKCkgPyBoaWdobGlnaHRDb252ZXJzYXRpb24oaXRlbXMsIHF1ZXJ5KCksIGluZGV4KCksIHZlcmJvc2UoKSkgOiBpdGVtcyxcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY3JvbGxUb01hdGNoKGxheW91dCwgbWF0Y2gpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBzY3JvbGwoKVxuICAgIGNvbnN0IGtleSA9IGAke3F1ZXJ5KCl9XFwwJHtpbmRleCgpfVxcMCR7dmVyYm9zZSgpfVxcMCR7c2Nyb2xsUmVxdWVzdCgpfWBcbiAgICBpZiAodGFyZ2V0LmtleSA9PT0ga2V5KSByZXR1cm5cbiAgICB0YXJnZXQua2V5ID0ga2V5XG4gICAgc2V0Rm9sbG93KGZhbHNlKVxuICAgIHNldE9mZnNldChNYXRoLm1heCgwLCBsYXlvdXQueSAtIHRhcmdldC5hbmNob3JZICsgbWF0Y2gubGluZSAtIDMpKVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUXVlcnkodmFsdWUpIHtcbiAgICBzZXRRdWVyeSh2YWx1ZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RpdmUsXG4gICAgcXVlcnksXG4gICAgY29tbWl0dGVkLFxuICAgIGluZGV4LFxuICAgIGZvY3VzZWQ6ICgpID0+IGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJyksXG4gICAgcmVnaXN0ZXJGb2N1cyxcbiAgICBvcGVuLFxuICAgIGNsb3NlLFxuICAgIGhhbmRsZUlucHV0LFxuICAgIHByZXBhcmUsXG4gICAgc2Nyb2xsOiBzY3JvbGwoKSxcbiAgICBzY3JvbGxUb01hdGNoLFxuICAgIGNvbW1pdDogKCkgPT4gc2V0Q29tbWl0dGVkKHRydWUpLFxuICAgIHVwZGF0ZVF1ZXJ5LFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb252ZXJzYXRpb25TZWFyY2hCYXIoeyBzZWFyY2gsIG1hdGNoZXMgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhTaHJpbms6IDAsIGhlaWdodDogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57Jy8gJ308L3RleHQ+XG4gICAgICB7c2VhcmNoLmNvbW1pdHRlZCgpXG4gICAgICAgID8gPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBmbGV4R3JvdzogMSB9fT57c2VhcmNoLnF1ZXJ5KCl9PC90ZXh0PlxuICAgICAgICA6IDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGZvY3VzZWQ9e3NlYXJjaC5mb2N1c2VkKCl9XG4gICAgICAgICAgICB2YWx1ZT17c2VhcmNoLnF1ZXJ5KCl9XG4gICAgICAgICAgICBvbkNoYW5nZT17c2VhcmNoLnVwZGF0ZVF1ZXJ5fVxuICAgICAgICAgICAgb25TdWJtaXQ9e3NlYXJjaC5jb21taXR9XG4gICAgICAgICAgICBvbkNhbmNlbD17c2VhcmNoLmNsb3NlfVxuICAgICAgICAgIC8+fVxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnttYXRjaGVzLmxlbmd0aCA/IGAke3NlYXJjaC5pbmRleCgpICsgMX0vJHttYXRjaGVzLmxlbmd0aH1gIDogJzAvMCd9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFuY2hvciBhcyBDb252ZXJzYXRpb25TY3JvbGxBbmNob3IsIFNlYXJjaE1lc3NhZ2UgYXMgQ29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZSB9XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNvbXBhY3RUcmFuc2NyaXB0UnVucyhpdGVtcywgYWN0aXZlID0gZmFsc2UpIHtcbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7KSB7XG4gICAgaWYgKGl0ZW1zW2ldLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtc1tpXS5raW5kID09PSAndGhvdWdodHMnKSB7XG4gICAgICBsZXQgZW5kID0gaSArIDFcbiAgICAgIHdoaWxlIChlbmQgPCBpdGVtcy5sZW5ndGggJiYgKGl0ZW1zW2VuZF0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW1zW2VuZF0ua2luZCA9PT0gJ3Rob3VnaHRzJykpIGVuZCsrXG4gICAgICBjb25zdCBydW4gPSBpdGVtcy5zbGljZShpLCBlbmQpXG4gICAgICBjb25zdCB0b29scyA9IHJ1bi5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3Rvb2wnKVxuICAgICAgcmVzdWx0LnB1c2goeyBraW5kOiAndG9vbC1ncm91cCcsIGNhbGxJZDogdG9vbHMuYXQoLTEpPy5jYWxsSWQsIGl0ZW1zOiBydW4sIHRvb2xzLCBhY3RpdmU6IGFjdGl2ZSAmJiBlbmQgPT09IGl0ZW1zLmxlbmd0aCB9KVxuICAgICAgaSA9IGVuZFxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKGl0ZW1zW2ldLmtpbmQgPT09ICdub3RpY2UnICYmIGl0ZW1zW2ldLmFnZW50Q29tcGxldGlvbikge1xuICAgICAgbGV0IGVuZCA9IGkgKyAxXG4gICAgICB3aGlsZSAoZW5kIDwgaXRlbXMubGVuZ3RoICYmIGl0ZW1zW2VuZF0ua2luZCA9PT0gJ25vdGljZScgJiYgaXRlbXNbZW5kXS5hZ2VudENvbXBsZXRpb24pIGVuZCsrXG4gICAgICBjb25zdCBydW4gPSBpdGVtcy5zbGljZShpLCBlbmQpXG4gICAgICByZXN1bHQucHVzaChydW4ubGVuZ3RoID09PSAxID8gcnVuWzBdIDogeyBraW5kOiAnYWdlbnQtbm90aWNlLWdyb3VwJywgbm90aWNlczogcnVuIH0pXG4gICAgICBpID0gZW5kXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICByZXN1bHQucHVzaChpdGVtc1tpKytdKVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zY3JpcHRXaW5kb3coaXRlbXMsIHNpemUpIHtcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBpdGVtcy5sZW5ndGggLSBzaXplKVxuICBjb25zdCBoaWRkZW4gPSBpdGVtcy5zbGljZSgwLCBzdGFydClcbiAgcmV0dXJuIHtcbiAgICBpdGVtczogaXRlbXMuc2xpY2Uoc3RhcnQpLFxuICAgIGhpZGRlbkl0ZW1zOiBoaWRkZW4ubGVuZ3RoLFxuICAgIGhpZGRlbkNvdW50OiBoaWRkZW4ucmVkdWNlKCh0b3RhbCwgaXRlbSkgPT4gdG90YWwgKyBzb3VyY2VJdGVtQ291bnQoaXRlbSksIDApLFxuICB9XG59XG5cbmZ1bmN0aW9uIHNvdXJjZUl0ZW1Db3VudChpdGVtKSB7XG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJykgcmV0dXJuIGl0ZW0uaXRlbXMubGVuZ3RoXG4gIGlmIChpdGVtLmtpbmQgPT09ICdhZ2VudC1ub3RpY2UtZ3JvdXAnKSByZXR1cm4gaXRlbS5ub3RpY2VzLmxlbmd0aFxuICBpZiAoaXRlbS5raW5kID09PSAnc3RlZXItdG9vbHMnKSByZXR1cm4gaXRlbS5jb3VudFxuICByZXR1cm4gMVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgQnV0dG9uLCBUZXh0SW5wdXQsIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCwgRkcsIEZHX1NPRlQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBhbnN3ZXJUZXh0KHF1ZXN0aW9uLCBhbnN3ZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5qb2luKCcsICcpXG4gIHJldHVybiBhbnN3ZXIgfHwgJ05vdCBhbnN3ZXJlZCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFF1ZXN0aW9uRm9ybSh7IHJlcXVlc3QsIGZvY3VzZWQsIG9uU3VibWl0LCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IHF1ZXN0aW9ucyA9IHJlcXVlc3QucXVlc3Rpb25zXG4gIGNvbnN0IHJldmlld2luZyA9IHF1ZXN0aW9ucy5sZW5ndGggPiAxXG4gIGNvbnN0IFtzdGVwLCBzZXRTdGVwXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbYW5zd2Vycywgc2V0QW5zd2Vyc10gPSBjcmVhdGVTaWduYWwoe30pXG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2N1c3RvbSwgc2V0Q3VzdG9tXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jldmlldywgc2V0UmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2NvbnRyb2wsIHNldENvbnRyb2xdID0gY3JlYXRlU2lnbmFsKCdhbnN3ZXInKVxuXG4gIGNvbnN0IHF1ZXN0aW9uID0gKCkgPT4gcXVlc3Rpb25zW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9ICgpID0+IHF1ZXN0aW9uKCkub3B0aW9ucyB8fCBbXVxuICBjb25zdCByb3dzID0gKCkgPT4gWy4uLm9wdGlvbnMoKSwgLi4uKHF1ZXN0aW9uKCkuYWxsb3dPdGhlciA9PT0gZmFsc2UgPyBbXSA6IFt7IGxhYmVsOiAnT3RoZXInLCBvdGhlcjogdHJ1ZSB9XSldXG4gIGNvbnN0IHNlbGVjdGVkID0gKGxhYmVsKSA9PiAoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5pbmNsdWRlcyhsYWJlbClcbiAgY29uc3Qgb3RoZXJBbnN3ZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgYW5zd2VyID0gYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdXG4gICAgY29uc3QgbGFiZWxzID0gbmV3IFNldChvcHRpb25zKCkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5maW5kKCh2YWx1ZSkgPT4gIWxhYmVscy5oYXModmFsdWUpKSB8fCAnJ1xuICAgIHJldHVybiBhbnN3ZXIgJiYgIWxhYmVscy5oYXMoYW5zd2VyKSA/IGFuc3dlciA6ICcnXG4gIH1cblxuICBmdW5jdGlvbiBzZXRBbnN3ZXIodmFsdWUpIHtcbiAgICBzZXRBbnN3ZXJzKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBbcXVlc3Rpb24oKS5pZF06IHZhbHVlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgc2V0Q3Vyc29yKDApXG4gICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICBpZiAoc3RlcCgpIDwgcXVlc3Rpb25zLmxlbmd0aCAtIDEpIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBlbHNlIGlmIChyZXZpZXdpbmcpIHsgc2V0Q3Vyc29yKHF1ZXN0aW9ucy5sZW5ndGgpOyBzZXRSZXZpZXcodHJ1ZSkgfVxuICAgIGVsc2UgZmluaXNoKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICBvblN1Ym1pdChxdWVzdGlvbnMubWFwKChpdGVtKSA9PiAoeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlcjogYW5zd2VycygpW2l0ZW0uaWRdID8/ICcnIH0pKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdFRleHQodmFsdWUpIHtcbiAgICBjb25zdCBhbnN3ZXIgPSB2YWx1ZS50cmltKClcbiAgICBpZiAoIWFuc3dlcikgcmV0dXJuXG4gICAgc2V0QW5zd2VyKGFuc3dlcilcbiAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXIgfV0pXG4gICAgZWxzZSBhZHZhbmNlKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdE90aGVyKHZhbHVlKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdmFsdWUudHJpbSgpXG4gICAgY29uc3Qga25vd24gPSBuZXcgU2V0KChpdGVtLm9wdGlvbnMgfHwgW10pLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgIGNvbnN0IGNob2ljZXMgPSBpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAoYW5zd2VycygpW2l0ZW0uaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSA6IFtdXG4gICAgY29uc3QgbmV4dEFuc3dlciA9IGl0ZW0udHlwZSA9PT0gJ211bHRpJyA/IFsuLi5jaG9pY2VzLCAuLi4oYW5zd2VyID8gW2Fuc3dlcl0gOiBbXSldIDogYW5zd2VyXG4gICAgc2V0QW5zd2VyKG5leHRBbnN3ZXIpXG4gICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdzaW5nbGUnICYmIGFuc3dlcikge1xuICAgICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyIH1dKVxuICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICB9XG4gIH1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBpZiAoY3VzdG9tKCkpIHsgc2V0Q3VzdG9tKGZhbHNlKTsgc2V0Q29udHJvbCgnYW5zd2VyJykgfVxuICAgICAgZWxzZSBpZiAocmV2aWV3KCkpIHNldFJldmlldyhmYWxzZSlcbiAgICAgIGVsc2Ugb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmV2aWV3KCkpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHNldEN1cnNvcihNYXRoLm1heCgwLCBjdXJzb3IoKSAtIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHNldEN1cnNvcihNYXRoLm1pbihxdWVzdGlvbnMubGVuZ3RoLCBjdXJzb3IoKSArIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgICBpZiAoY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGgpIGZpbmlzaCgpXG4gICAgICAgIGVsc2UgeyBzZXRTdGVwKGN1cnNvcigpKTsgc2V0Q3Vyc29yKDApOyBzZXRDb250cm9sKCdhbnN3ZXInKTsgc2V0UmV2aWV3KGZhbHNlKSB9XG4gICAgICB9IGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVwKCkgPiAwICYmIChldmVudC5rZXkgPT09ICd0YWInIHx8IGV2ZW50LmtleSA9PT0gJ3NoaWZ0LXRhYicpKSB7XG4gICAgICBzZXRDb250cm9sKGNvbnRyb2woKSA9PT0gJ2JhY2snID8gJ2Fuc3dlcicgOiAnYmFjaycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb250cm9sKCkgPT09ICdiYWNrJykgcmV0dXJuXG4gICAgaWYgKGN1c3RvbSgpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyB8fCBldmVudC5rZXkgPT09ICdzaGlmdC10YWInKSB7XG4gICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocXVlc3Rpb24oKT8udHlwZSA9PT0gJ3RleHQnKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnIHx8IGV2ZW50LmtleSA9PT0gJ2snKSBzZXRDdXJzb3IoTWF0aC5tYXgoMCwgY3Vyc29yKCkgLSAxKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdkb3duJyB8fCBldmVudC5rZXkgPT09ICdqJykgc2V0Q3Vyc29yKE1hdGgubWluKHJvd3MoKS5sZW5ndGggLSAxLCBjdXJzb3IoKSArIDEpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3NwYWNlJyAmJiBxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChyb3cub3RoZXIpIHtcbiAgICAgICAgaWYgKG90aGVyQW5zd2VyKCkpIHtcbiAgICAgICAgICBjb25zdCBrbm93biA9IG5ldyBTZXQob3B0aW9ucygpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgICAgICAgIHNldEFuc3dlcigoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSlcbiAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgIH0gZWxzZSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW11cbiAgICAgICAgc2V0QW5zd2VyKGN1cnJlbnQuaW5jbHVkZXMocm93LmxhYmVsKSA/IGN1cnJlbnQuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHJvdy5sYWJlbCkgOiBbLi4uY3VycmVudCwgcm93LmxhYmVsXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIGFkdmFuY2UoKVxuICAgICAgZWxzZSBpZiAocm93Lm90aGVyKSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIGVsc2Uge1xuICAgICAgICBzZXRBbnN3ZXIocm93LmxhYmVsKVxuICAgICAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IHF1ZXN0aW9uKCkuaWQsIHF1ZXN0aW9uOiBxdWVzdGlvbigpLnF1ZXN0aW9uLCBhbnN3ZXI6IHJvdy5sYWJlbCB9XSlcbiAgICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcblxuICBpZiAocmV2aWV3KCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+UmV2aWV3IGFuc3dlcnM8L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5lbnRlcjogZWRpdCBvciBzdWJtaXQgIGVzYzogYmFjazwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHtxdWVzdGlvbnMubWFwKChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGN1cnNvcigpID09PSBpbmRleCA/IGFjY2VudCgpIDogRkcgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnthbnN3ZXJUZXh0KGl0ZW0sIGFuc3dlcnMoKVtpdGVtLmlkXSl9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgYmc6IGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoID8gYWNjZW50KCkgOiB1bmRlZmluZWQsIGNvbG9yOiBjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCA/ICdibGFjaycgOiBGRywgYm9sZDogdHJ1ZSB9fT4gU3VibWl0IGFuc3dlcnMgPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaXRlbSA9IHF1ZXN0aW9uKClcbiAgY29uc3QgcHJvZ3Jlc3MgPSBxdWVzdGlvbnMubGVuZ3RoID4gMSA/IGAke3N0ZXAoKSArIDF9IG9mICR7cXVlc3Rpb25zLmxlbmd0aH1gIDogJ1F1ZXN0aW9uJ1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICB7c3RlcCgpID4gMCAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgbGFiZWw9XCJCYWNrXCJcbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjb250cm9sKCkgPT09ICdiYWNrJ31cbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFN0ZXAoc3RlcCgpIC0gMSlcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoMClcbiAgICAgICAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgICAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8dGV4dD4gIDwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pntwcm9ncmVzc308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAnc3BhY2U6IHNlbGVjdCAgZW50ZXI6IGNvbnRpbnVlJyA6ICdlbnRlcjogYW5zd2VyJ30gIGVzYzogY2FuY2VsPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIGJvbGQ6IHRydWUgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAge2l0ZW0uZGVzY3JpcHRpb24gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2l0ZW0uZGVzY3JpcHRpb259PC90ZXh0Pn1cbiAgICAgIHtpdGVtLnR5cGUgPT09ICd0ZXh0JyA/IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogU0VMRUNUX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06dGV4dGB9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGNvbnRyb2woKSA9PT0gJ2Fuc3dlcid9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgeW91ciBhbnN3ZXJcIlxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXt0eXBlb2YgYW5zd2VycygpW2l0ZW0uaWRdID09PSAnc3RyaW5nJyA/IGFuc3dlcnMoKVtpdGVtLmlkXSA6ICcnfVxuICAgICAgICAgICAgb25TdWJtaXQ9e3N1Ym1pdFRleHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApIDogKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge3Jvd3MoKS5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogY3Vyc29yKCkgPT09IGluZGV4ID8gYWNjZW50KCkgOiBGRyB9fT5cbiAgICAgICAgICAgICAgICB7aXRlbS50eXBlID09PSAnbXVsdGknXG4gICAgICAgICAgICAgICAgICA/IGAke29wdGlvbi5vdGhlciA/IChvdGhlckFuc3dlcigpID8gJ1t4XScgOiAnWyBdJykgOiAoc2VsZWN0ZWQob3B0aW9uLmxhYmVsKSA/ICdbeF0nIDogJ1sgXScpfSBgXG4gICAgICAgICAgICAgICAgICA6IGAke2N1cnNvcigpID09PSBpbmRleCA/ICdcdTIwM0EnIDogJyAnfSBgfXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAge29wdGlvbi5kZXNjcmlwdGlvbiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57YCAgJHtvcHRpb24uZGVzY3JpcHRpb259YH08L3RleHQ+fVxuICAgICAgICAgICAgICB7b3B0aW9uLm90aGVyICYmIChjdXN0b20oKSB8fCBvdGhlckFuc3dlcigpKSAmJiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogY3VzdG9tKCkgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ0xlZnQ6IDQgfX0+XG4gICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06b3RoZXJgfVxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGN1c3RvbSgpfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgYW5vdGhlciBhbnN3ZXJcIlxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU9e290aGVyQW5zd2VyKCl9XG4gICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXtzdWJtaXRPdGhlcn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgIDwvYm94PlxuICApXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCB1c2VJbnRlcnZhbCwgdXNlTW91c2UsIHVzZVJlc2l6ZSB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBFbXB0eUNsb3VkKHsgd2lkdGgsIGhlaWdodCwgdmVyc2lvbiB9KSB7XG4gIGNvbnN0IFtwaGFzZSwgc2V0UGhhc2VdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt3YWtlLCBzZXRXYWtlXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgbGV0IHByZXZpb3VzID0gbnVsbFxuXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5hY3Rpb24gIT09ICdtb3ZlJyAmJiBldmVudC5hY3Rpb24gIT09ICdkcmFnJykgcmV0dXJuXG4gICAgY29uc3QgeCA9IGV2ZW50LnhcbiAgICBjb25zdCB5ID0gZXZlbnQueVxuICAgIGlmICh4IDwgMCB8fCB4ID49IHdpZHRoIHx8IHkgPCAwIHx8IHkgPj0gaGVpZ2h0KSByZXR1cm5cbiAgICBjb25zdCBkeCA9IHByZXZpb3VzID8geCAtIHByZXZpb3VzLnggOiAwXG4gICAgY29uc3QgZHkgPSBwcmV2aW91cyA/IHkgLSBwcmV2aW91cy55IDogMFxuICAgIHByZXZpb3VzID0geyB4LCB5IH1cbiAgICBjb25zdCBzcGVlZCA9IE1hdGguaHlwb3QoZHggKiAwLjUsIGR5KVxuICAgIGlmIChzcGVlZCA9PT0gMCkgcmV0dXJuXG4gICAgc2V0V2FrZShwb2ludHMgPT4gWy4uLnBvaW50cy5zbGljZSgtMjApLCB7IHgsIHksIGR4LCBkeSwgc3BlZWQ6IE1hdGgubWluKDQsIHNwZWVkKSwgYWdlOiAwIH1dKVxuICB9KVxuXG4gIHVzZUludGVydmFsKCgpID0+IHtcbiAgICBzZXRQaGFzZSh2YWx1ZSA9PiB2YWx1ZSArIDAuMTYpXG4gICAgc2V0V2FrZShwb2ludHMgPT4gcG9pbnRzLm1hcChwb2ludCA9PiAoeyAuLi5wb2ludCwgYWdlOiBwb2ludC5hZ2UgKyAxIH0pKS5maWx0ZXIocG9pbnQgPT4gcG9pbnQuYWdlIDwgMTgpKVxuICB9LCA5MClcblxuICBjb25zdCBnbHlwaHMgPSAnICAuLjo6KysqKlx1MjU5MVx1MjU5MidcbiAgY29uc3Qgcm93cyA9IFtdXG4gIGNvbnN0IGJhc2UgPSBhY2NlbnQoKVxuICBjb25zdCByZ2IgPSAvXiMoWzAtOWEtZl17Nn0pJC9pLmV4ZWMoYmFzZSlcbiAgY29uc3QgbmVpZ2hib3JpbmcgPSByZ2JcbiAgICA/IGAjJHtbXG4gICAgICBNYXRoLm1heCgwLCBwYXJzZUludChyZ2JbMV0uc2xpY2UoMCwgMiksIDE2KSAtIDE4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDIsIDQpLCAxNikgKyA4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDQsIDYpLCAxNikgKyAyNCksXG4gICAgXS5tYXAodmFsdWUgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbiAgICA6IGJhc2VcblxuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgY29uc3Qgcm93ID0gW11cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgIGNvbnN0IHAgPSBwaGFzZSgpXG4gICAgICBjb25zdCBicm9hZCA9IE1hdGguc2luKHggKiAwLjA4ICsgcCkgKyBNYXRoLnNpbih5ICogMC4yOSAtIHAgKiAwLjcpICsgTWF0aC5zaW4oKHggKyB5KSAqIDAuMDUgKyBwICogMC4zNSlcbiAgICAgIGNvbnN0IHdpc3BzID0gTWF0aC5zaW4oeCAqIDAuMTkgLSB5ICogMC4xMSAtIHAgKiAwLjU1KSArIE1hdGguc2luKHggKiAwLjAzICsgeSAqIDAuNDMgKyBwICogMC40KVxuICAgICAgY29uc3QgcG9ja2V0cyA9IE1hdGguc2luKHggKiAwLjMxICsgcCAqIDAuOCkgKiBNYXRoLnNpbih5ICogMC40NyAtIHAgKiAwLjMpXG4gICAgICBsZXQgYnJvYWREaXNwbGFjZW1lbnQgPSAwXG4gICAgICBsZXQgd2lzcERpc3BsYWNlbWVudCA9IDBcbiAgICAgIGxldCBpbnRlcmFjdGlvbiA9IDBcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygd2FrZSgpKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGguaHlwb3QocG9pbnQuZHggKiAwLjUsIHBvaW50LmR5KSB8fCAxXG4gICAgICAgIGNvbnN0IHV4ID0gcG9pbnQuZHggKiAwLjUgLyBsZW5ndGhcbiAgICAgICAgY29uc3QgdXkgPSBwb2ludC5keSAvIGxlbmd0aFxuICAgICAgICBjb25zdCByeCA9ICh4IC0gcG9pbnQueCkgKiAwLjVcbiAgICAgICAgY29uc3QgcnkgPSB5IC0gcG9pbnQueVxuICAgICAgICBjb25zdCBhbG9uZyA9IHJ4ICogdXggKyByeSAqIHV5XG4gICAgICAgIGNvbnN0IGFjcm9zcyA9IC1yeCAqIHV5ICsgcnkgKiB1eFxuICAgICAgICBjb25zdCB0cmFpbGluZyA9IGFsb25nIDw9IDIgJiYgYWxvbmcgPj0gLTE4IC0gcG9pbnQuc3BlZWQgKiAzXG4gICAgICAgIGlmICghdHJhaWxpbmcpIGNvbnRpbnVlXG4gICAgICAgIGNvbnN0IGFnZSA9IDEgLSBwb2ludC5hZ2UgLyAxOFxuICAgICAgICBjb25zdCB0cmFpbCA9IE1hdGguZXhwKC1NYXRoLnBvdygoYWxvbmcgKyA0ICsgcG9pbnQuYWdlICogMC4zNSkgLyAoNyArIHBvaW50LnNwZWVkICogMiksIDIpKVxuICAgICAgICBjb25zdCBjZW50ZXIgPSBNYXRoLmV4cCgtKGFjcm9zcyAqIGFjcm9zcykgLyA1KVxuICAgICAgICBjb25zdCBlZGdlcyA9IE1hdGguZXhwKC1NYXRoLnBvdyhNYXRoLmFicyhhY3Jvc3MpIC0gMy4yLCAyKSAvIDMpXG4gICAgICAgIGNvbnN0IGZvcmNlID0gYWdlICogdHJhaWwgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjQ1KVxuICAgICAgICBjb25zdCByYWRpYWxEaXN0YW5jZSA9IE1hdGguc3FydChyeCAqIHJ4ICsgcnkgKiByeSlcbiAgICAgICAgY29uc3QgcmlwcGxlRW52ZWxvcGUgPSBNYXRoLmV4cCgtKHJhZGlhbERpc3RhbmNlICogcmFkaWFsRGlzdGFuY2UpIC8gKDM1ICsgcG9pbnQuc3BlZWQgKiAxMikpXG4gICAgICAgIGNvbnN0IHJpcHBsZSA9IE1hdGguc2luKHJhZGlhbERpc3RhbmNlICogMS4zNSAtIHBvaW50LmFnZSAqIDAuNzUpICogcmlwcGxlRW52ZWxvcGUgKiBhZ2VcbiAgICAgICAgd2lzcERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjkgLSBjZW50ZXIpICogZm9yY2UgKiAxLjUgKyByaXBwbGUgKiAoMS4yICsgcG9pbnQuc3BlZWQgKiAwLjI1KVxuICAgICAgICBicm9hZERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjQ1IC0gY2VudGVyICogMC4zNSkgKiBmb3JjZSAqIDAuNTUgKyByaXBwbGUgKiAwLjI1XG4gICAgICAgIGludGVyYWN0aW9uID0gTWF0aC5tYXgoaW50ZXJhY3Rpb24sIE1hdGguYWJzKHJpcHBsZSkgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjE1KSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKFxuICAgICAgICBicm9hZCArIGJyb2FkRGlzcGxhY2VtZW50ICsgKHdpc3BzICsgd2lzcERpc3BsYWNlbWVudCkgKiAwLjY1ICsgcG9ja2V0cyAqIDAuOCArIDMuMlxuICAgICAgKSAvIDcuNCkpXG4gICAgICBjb25zdCBpbmRleCA9IE1hdGgubWluKGdseXBocy5sZW5ndGggLSAxLCBNYXRoLmZsb29yKHZhbHVlICogZ2x5cGhzLmxlbmd0aCkpXG4gICAgICByb3cucHVzaCh7IGdseXBoOiBnbHlwaHNbaW5kZXhdLCBjb2xvcjogaW50ZXJhY3Rpb24gPiAwLjE2ID8gbmVpZ2hib3JpbmcgOiBiYXNlLCBkaW06IGluZGV4IDwgOCB9KVxuICAgIH1cbiAgICByb3dzLnB1c2gocm93KVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIHtyb3dzLm1hcCgocm93LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaSA9PT0gMSA/ICdwaWNvJyA6IGkgPT09IDIgPyBgdiR7dmVyc2lvbn1gIDogJydcbiAgICAgICAgY29uc3QgaW5CcmFuZEJveCA9IGkgPj0gMSAmJiBpIDw9IDJcbiAgICAgICAgY29uc3QgYm94U3RhcnQgPSAxXG4gICAgICAgIGNvbnN0IGJveFdpZHRoID0gYHYke3ZlcnNpb259YC5sZW5ndGggKyAyXG4gICAgICAgIGNvbnN0IGNsb3VkID0gKGNlbGxzKSA9PiBjZWxscy5tYXAoKGNlbGwsIHgpID0+IChcbiAgICAgICAgICA8dGV4dCBrZXk9e3h9IHN0eWxlPXt7IGNvbG9yOiBjZWxsLmNvbG9yLCBkaW06IGNlbGwuZGltIH19PntjZWxsLmdseXBofTwvdGV4dD5cbiAgICAgICAgKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17aX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgb3ZlcmZsb3c6ICdjbGlwJyB9fT5cbiAgICAgICAgICAgIHtpbkJyYW5kQm94ICYmIGNsb3VkKHJvdy5zbGljZSgwLCBib3hTdGFydCkpfVxuICAgICAgICAgICAge2luQnJhbmRCb3ggJiYgKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiBib3hXaWR0aCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6IGkgPT09IDEsIGNvbG9yOiBpID09PSAxID8gYWNjZW50KCkgOiBNVVRFRCB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Nsb3VkKHJvdy5zbGljZShpbkJyYW5kQm94ID8gYm94U3RhcnQgKyBib3hXaWR0aCA6IDApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVtcHR5U3RhdGUoeyB2ZXJzaW9uLCBjbG91ZHMgPSBmYWxzZSB9KSB7XG4gIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IGNyZWF0ZVNpZ25hbCh7IHdpZHRoOiBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwLCBoZWlnaHQ6IHByb2Nlc3Muc3Rkb3V0LnJvd3MgfHwgMjQgfSlcbiAgdXNlUmVzaXplKHNldFNpemUpXG4gIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgc2l6ZSgpLndpZHRoKVxuICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBzaXplKCkuaGVpZ2h0IC0gNClcbiAgaWYgKCFjbG91ZHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBib2xkOiB0cnVlLCBjb2xvcjogYWNjZW50KCkgfX0+eycgIHBpY28nfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICB2JHt2ZXJzaW9ufWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aCwgaGVpZ2h0IH19PlxuICAgICAgPEVtcHR5Q2xvdWQgd2lkdGg9e3dpZHRofSBoZWlnaHQ9e2hlaWdodH0gdmVyc2lvbj17dmVyc2lvbn0gLz5cbiAgICA8L2JveD5cbiAgKVxufVxuXG4iLCAiaW1wb3J0IHsgTWFya2Rvd24sIFNjcm9sbEJveCwgdXNlSW5wdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVEIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgSEVMUF9URVhUID0gKGNvbW1hbmRzKSA9PiBgcGljbyBpcyBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsLiBJdCByZWFkcywgZWRpdHMsIGFuZCBzZWFyY2hlcyBmaWxlcywgcnVucyBjb21tYW5kcywgYW5kIHN0cmVhbXMgaXRzIHdvcmsgaW50byB0aGlzIHRyYW5zY3JpcHQuXG5cbiMjIENvbW1hbmRzXG5cblR5cGUgXFxgL1xcYCBpbiB0aGUgY29tcG9zZXIgdG8gZmlsdGVyIHRoZXNlIGFzIHlvdSB0eXBlLlxuXG4ke2NvbW1hbmRzLm1hcCgoYykgPT4gYC0gXFxgLyR7Yy5uYW1lfVxcYCAtICR7Yy5kZXNjfWApLmpvaW4oJ1xcbicpfVxuXG5Ud28ga2luZHMgb2YgdXNlci1kZWZpbmVkIGVudHJpZXMgam9pbiB0aGlzIG1lbnU6XG5cbi0gKipjb21tYW5kcyoqIChcXGB+Ly5waWNvL2NvbW1hbmRzLzxuYW1lPi5tZFxcYCBvciBcXGAucGljby9jb21tYW5kcy88bmFtZT4ubWRcXGApOiBwcm9tcHQgdGVtcGxhdGVzIHlvdSBpbnZva2UgYXMgXFxgLzxuYW1lPiBbYXJnc11cXGAuIFxcYCRBUkdVTUVOVFNcXGAgaW4gdGhlIGJvZHkgaXMgcmVwbGFjZWQgd2l0aCB3aGF0ZXZlciBmb2xsb3dzIHRoZSBjb21tYW5kOyB3aXRob3V0IGEgcGxhY2Vob2xkZXIsIGFyZ3MgYXJlIGFwcGVuZGVkLiBUaGUgbW9kZWwgbmV2ZXIgc2VlcyB0aGVzZSB1bnRpbCB5b3UgcnVuIG9uZS5cbi0gKipza2lsbHMqKiAoXFxgfi8ucGljby9za2lsbHMvPG5hbWU+L1NLSUxMLm1kXFxgIG9yIFxcYC5waWNvL3NraWxscy88bmFtZT4vU0tJTEwubWRcXGApOiBjYXBhYmlsaXRpZXMgd2l0aCBhIG5hbWUgYW5kIGRlc2NyaXB0aW9uLiBZb3UgY2FuIGludm9rZSB0aGVtIGxpa2UgY29tbWFuZHMsIGFuZCB0aGUgYWdlbnQgY2FuIGFsc28gZGlzY292ZXIgYW5kIGxvYWQgdGhlbSBpdHNlbGYgdmlhIHRoZSBza2lsbCB0b29sLlxuLSAqKnRvb2xzKiogKFxcYH4vLnBpY28vdG9vbHMvPG5hbWU+LmpzXFxgIG9yIFxcYC5waWNvL3Rvb2xzLzxuYW1lPi5qc1xcYCk6IEVTIG1vZHVsZXMgZGVmYXVsdC1leHBvcnRpbmcgXFxgeyBuYW1lLCBkZXNjcmlwdGlvbiwgc2NoZW1hLCBleGVjdXRlIH1cXGAgKG9yIGEgZmFjdG9yeSByZWNlaXZpbmcgXFxgeyBjd2QsIHJvb3QgfVxcYCkuIFRoZXkgam9pbiB0aGUgYWdlbnQncyB0b29sc2V0IGFuZCBhcmUgcmVzY2FubmVkIGV2ZXJ5IHR1cm4sIHNvIGVkaXRzIGFwcGx5IG9uIHRoZSBuZXh0IG1lc3NhZ2UuIEFzayB0aGUgYWdlbnQgdG8gYnVpbGQgb25lIGZvciB5b3U6IHRoZSBidWlsdC1pbiBcXGAvbmV3LXRvb2xcXGAgc2tpbGwgdGVhY2hlcyBpdCB0aGUgZm9ybWF0LlxuXG5JbiB0aGUgTUNQIHBhbmVsOiBlbnRlciBlbmFibGVzL2Rpc2FibGVzIGEgc2VydmVyIChkaXNhYmxlZCBpcyBzdGlja3kgYWNyb3NzIHJlc3RhcnRzIC0gY29uZmlnIGtlcHQsIG5vIGNvbm5lY3Rpb24sIG5vIHRvb2xzIG9mZmVyZWQgdG8gdGhlIG1vZGVsLCBwZXIgcHJvamVjdCksIFxcYHRcXGAgbGlzdHMgaXRzIHRvb2xzLCBcXGByXFxgIHJlY29ubmVjdHMsIFxcYGFcXGAgYWRkcywgXFxgY3RybCt4XFxgIHJlbW92ZXMgKHByZXNzIHR3aWNlKS4gVW5maWx0ZXJlZCBsaXN0cyAoZWZmb3J0LCByZXdpbmQgb3B0aW9ucywgTUNQKSBhbHNvIG1vdmUgd2l0aCBcXGBqXFxgL1xcYGtcXGAgYW5kIGp1bXAgd2l0aCBcXGBnXFxgL1xcYEdcXGAuXG5cbiMjIENvbXBvc2VyXG5cbi0gXFxgY3RybCt2XFxgOiBBdHRhY2ggY2xpcGJvYXJkIGltYWdlXG4tIFxcYGN0cmwrZ1xcYDogUmVjb3JkIChtYWNPUylcbi0gXFxgZW50ZXJcXGA6IFRyYW5zY3JpYmUgcmVjb3JkaW5nXG4tIFxcYGVzY1xcYDogQ2FuY2VsIGRpY3RhdGlvblxuXG4tIFxcYGVudGVyXFxgIHNlbmRzOyBcXGBzaGlmdCtlbnRlclxcYCBvciBcXGBcXFxcPGVudGVyPlxcYCBpbnNlcnRzIGEgbmV3bGluZVxuLSBcXGBAXFxgIG9wZW5zIGEgZnV6enkgZmlsZSBwaWNrZXI7IGVudGVyIGluc2VydHMgdGhlIHNlbGVjdGVkIHBhdGhcbi0gZHJhZyBhbiBpbWFnZSBmaWxlIGludG8gdGhlIHRlcm1pbmFsIHRvIGF0dGFjaCBpdDogaXQgYXBwZWFycyBpbmxpbmUgYXMgXFxgW0ltYWdlICNOXVxcYCwgZXhhY3RseSB3aGVyZSB5b3VyIGN1cnNvciBpcywgc28gaW1hZ2VzIGNhbiBzaXQgYmV0d2VlbiBzZW50ZW5jZXM7IGJhY2tzcGFjZSBhZnRlciBvbmUgcmVtb3ZlcyB0aGUgd2hvbGUgYXR0YWNobWVudFxuLSBcXGB0YWJcXGAgY29tcGxldGVzOiBcXGAvc3VtbTx0YWI+XFxgIGZpbmlzaGVzIHRoZSBjb21tYW5kIG5hbWUgYW5kIGN5Y2xlcyB0aHJvdWdoIG1hdGNoZXMgb24gcmVwZWF0OyBhZnRlciBhbiBhcmd1bWVudCBzcGFjZSBpdCBjb21wbGV0ZXMgdmFsdWVzIChcXGAvbW9kZWwgZmxhPHRhYj5cXGAsIFxcYC9jb2xvciA8dGFiPlxcYCwgXFxgL2VmZm9ydCA8dGFiPlxcYCkgYW5kIGZpbGUgcGF0aHMgZm9yIHNraWxscyBhbmQgY29tbWFuZHMuIEtlZXAgdHlwaW5nIHRvIG5hcnJvdywgdGFiIG9yIGVudGVyIGluc2VydHNcbi0gXFxgdXBcXGAgYW5kIFxcYGRvd25cXGAgb24gYW4gZW1wdHkgY29tcG9zZXIgcmVjYWxsIG1lc3NhZ2VzIHlvdSBhbHJlYWR5IHNlbnRcbi0gXFxgY3RybCtyXFxgIG9wZW5zIHJld2luZCAoc2FtZSBhcyBcXGAvcmV3aW5kXFxgKTsgXFxgL2hpc3RvcnlcXGAgZnV6enktc2VhcmNoZXMgeW91ciBvbGQgcHJvbXB0cyBhbmQgcHV0cyB0aGUgc2VsZWN0ZWQgb25lIGJhY2sgaW4gdGhlIGNvbXBvc2VyXG4tIFxcYGN0cmwrc1xcYCBvcGVucyB0aGUgc2Vzc2lvbiBwaWNrZXIgKHNhbWUgYXMgXFxgL3Jlc3VtZVxcYCk7IFxcYGN0cmwrdFxcYCBvcGVucyB0aGUgbW9kZWwgcGlja2VyXG4tIFxcYGN0cmwrcFxcYCBzd2l0Y2hlcyBwcm9qZWN0czogcGljayBvbmUgYW5kIHBpY28ganVtcHMgdG8gaXRzIG1vc3QgcmVjZW50IHNlc3Npb24sIGNoYW5naW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgdG9vbHMsIGNvbnRleHQsIGFuZCBNQ1Agc2VydmVycyB0byBtYXRjaDsgXFxgY3RybCt4XFxgIHR3aWNlIGRlbGV0ZXMgYSBwcm9qZWN0J3MgcGljbyBoaXN0b3J5IChhbGwgaXRzIHNlc3Npb25zIGFuZCBtZW1vcmllcyk7IFxcYC9uZXdcXGAgc3RhcnRzIGEgZnJlc2ggc2Vzc2lvbiBpbiB0aGUgY3VycmVudCBwcm9qZWN0XG4tIFxcYGN0cmwrYlxcYCBjeWNsZXMgdGhpbmtpbmcgZWZmb3J0IChkZWZhdWx0LCBsb3csIG1lZGl1bSwgaGlnaCwgbWF4KSBvbiBtb2RlbHMgdGhhdCBzdXBwb3J0IGl0OyBcXGAvZWZmb3J0XFxgIG9wZW5zIHRoZSBmdWxsIHBpY2tlclxuLSBpbnNpZGUgYSBzZWFyY2ggcGFuZWwsIFxcYGN0cmwrc1xcYCBjeWNsZXMgdGhlIHNjb3BlIGluc3RlYWQ6IHRoaXMgc2Vzc2lvbiwgdGhpcyBwcm9qZWN0LCBvciBldmVyeXdoZXJlXG4tIFxcYC9yZXdpbmRcXGAgcmVzdG9yZXMgdGhlIGNvbnZlcnNhdGlvbiB0byBhbiBlYXJsaWVyIG1lc3NhZ2U7IGEgcmV3aW5kIGNhbiBiZSB1bmRvbmUgd2l0aCBcXGBjdHJsK3pcXGBcbi0gbWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgYWdlbnQgaXMgcmVzcG9uZGluZyBxdWV1ZSB1cCBhYm92ZSB0aGUgY29tcG9zZXIgYW5kIGFyZSBkZWxpdmVyZWQgYXMgb25lIG1lc3NhZ2Ugd2hlbiB0aGUgdHVybiBmaW5pc2hlczsgXFxgdXBcXGAgcHVsbHMgdGhlbSBiYWNrIGZvciBlZGl0aW5nXG4tIFxcYGVzY1xcYCBpbnRlcnJ1cHRzIGEgc3RyZWFtaW5nIHJlc3BvbnNlLCBvciBjbGVhcnMgdGhlIGNvbXBvc2VyIHdoZW4gaWRsZVxuXG4jIyBNb3ZpbmcgYXJvdW5kXG5cbi0gXFxgdGFiXFxgIHN3aXRjaGVzIGZvY3VzIGJldHdlZW4gdGhlIHRyYW5zY3JpcHQgYW5kIHRoZSBjb21wb3NlclxuLSB3aXRoIHRoZSB0cmFuc2NyaXB0IGZvY3VzZWQsIFxcYHVwXFxgL1xcYGRvd25cXGAvXFxgalxcYC9cXGBrXFxgIHNjcm9sbCBhbmQgXFxgZ1xcYC9cXGBHXFxgIGp1bXAgdG8gdGhlIGVuZHNcbi0gbG9uZyBzZXNzaW9ucyByZW5kZXIgb25seSB0aGUgbmV3ZXN0IDUwIG1lc3NhZ2VzOyBzY3JvbGxpbmcgdG8gdGhlIHZlcnkgdG9wIGxvYWRzIG9sZGVyIG9uZXMgaW4gYmF0Y2hlcyAodGhlIHRvcCBsaW5lIHNob3dzIGhvdyBtYW55IGFyZSBoaWRkZW4pXG4tIHRoZSBtb3VzZSB3aGVlbCBzY3JvbGxzOyBjbGljay1kcmFnIHNlbGVjdHMgdGV4dCBhbmQgY29waWVzIGl0IG9uIHJlbGVhc2Vcbi0gXFxgY3RybCtjXFxgIHR3aWNlIGV4aXRzXG5cbiMjIFNoZWxsc1xuXG5UaGUgYWdlbnQgY2FuIHJ1biBsb25nLWxpdmVkIHByb2Nlc3NlcyAoZGV2IHNlcnZlcnMsIHdhdGNoZXJzKSB3aXRoIFxcYGJhc2ggYmFja2dyb3VuZDogdHJ1ZVxcYCwgdGhlbiByZWFkIHRoZWlyIG91dHB1dCBhbmQgc3RvcCB0aGVtIGl0c2VsZi4gU2hlbGxzIGFwcGVhciBiZWxvdyB0aGUgY29tcG9zZXIgYW5kIHJlbWFpbiB0aGVyZSBhZnRlciBleGl0OiB0YWIgZm9jdXNlcyB0aGUgbGlzdCwgai9rIG1vdmVzLCBlbnRlciBvcGVucyB0aGUgY29tbWFuZCBhbmQgbGl2ZSBvdXRwdXQsIGFuZCBcXGBjdHJsK3hcXGAga2lsbHMgYSBydW5uaW5nIHNoZWxsIG9yIGRpc21pc3NlcyBhIGZpbmlzaGVkIG9uZS4gV2hlbiBhIHNoZWxsIGV4aXRzIG9uIGl0cyBvd24sIHRoZSBhZ2VudCBpcyBub3RpZmllZCBhbmQgcmVzcG9uZHM7IHNoZWxscyBkaWUgd2l0aCBwaWNvLCBhbmQgcXVpdHRpbmcgd2FybnMgeW91IGlmIGFueSBhcmUgc3RpbGwgdXAuXG5cbiMjIFN1YnNjcmlwdGlvbnNcblxuXFxgL2Nvbm5lY3RcXGAgbGlzdHMgc3Vic2NyaXB0aW9uIHByb3ZpZGVycyB5b3UgY2FuIHNpZ24gaW4gd2l0aCBpbnN0ZWFkIG9mIEFQSSBrZXlzLiBPcGVuQUkgKENoYXRHUFQgLyBDb2RleCBwbGFuKSBzaWducyBpbiB0aHJvdWdoIHlvdXIgYnJvd3NlciB2aWEgT0F1dGg7IHRva2VucyBhcmUgc3RvcmVkIGluIFxcYH4vLnBpY28vYXV0aC5qc29uXFxgIGFuZCByZWZyZXNoZWQgYXV0b21hdGljYWxseSwgc28geW91IHNpZ24gaW4gb25jZS4gT25jZSBjb25uZWN0ZWQsIGNvZGV4IG1vZGVscyBhcHBlYXIgaW4gXFxgL21vZGVsXFxgLCBiaWxsZWQgdG8geW91ciBwbGFuLiBcXGBkXFxgIGluIHRoZSBwYW5lbCBkaXNjb25uZWN0cy5cblxuIyMgTWVtb3J5XG5cblRoZSBhZ2VudCBzYXZlcyBkdXJhYmxlIGZhY3RzIHdpdGggdGhlIHJlbWVtYmVyIHRvb2w6IG9uZSBmaWxlIHBlciBtZW1vcnkgdW5kZXIgXFxgfi8ucGljby9tZW1vcnlcXGAgKGdsb2JhbCkgb3IgdGhlIHByb2plY3QncyBkaXJlY3RvcnkgaW4gXFxgfi8ucGljby9wcm9qZWN0c1xcYC4gT25seSBhIG9uZS1saW5lIGluZGV4IGlzIGluIGl0cyBjb250ZXh0OyBpdCBsb2FkcyBhIHNwZWNpZmljIG1lbW9yeSB3aXRoIHRoZSByZWNhbGwgdG9vbCB3aGVuIHJlbGV2YW50LiBcXGAvbWVtb3J5XFxgIGxpc3RzIGV2ZXJ5dGhpbmcgaXQga25vd3Mgd2l0aCBhIGNvbnRlbnQgcHJldmlldzogXFxgY3RybCtzXFxgIGN5Y2xlcyB0aGUgc2NvcGUgZmlsdGVyIChhbGwsIHByb2plY3QsIGdsb2JhbCkgYW5kIFxcYGN0cmwreFxcYCB0d2ljZSBmb3JnZXRzIHRoZSBzZWxlY3RlZCBtZW1vcnkuIFlvdSBjYW4gYWxzbyBhc2sgdGhlIGFnZW50IHRvIHJlbWVtYmVyLCBmb3JnZXQsIG9yIGNsZWFuIHVwIGl0cyBtZW1vcmllcyBpbiBwbGFpbiBsYW5ndWFnZS5cblxuIyMgV2FrZS11cHNcblxuVGhlIGFnZW50IGNhbiBzY2hlZHVsZSBvbmUtdGltZSB3YWtlLXVwcyBmb3IgaXRzZWxmIHdpdGggdGhlIHNjaGVkdWxlX3dha2V1cCB0b29sOiBhZnRlciB0aGUgZGVsYXkgaXQgcmVjZWl2ZXMgaXRzIG93biBub3RlIGFzIGEgc3lzdGVtIG5vdGlmaWNhdGlvbiBhbmQgYWN0cyBvbiBpdC4gUmVjdXJyaW5nIGxvb3BzIGFyZSBqdXN0IHRoZSBhZ2VudCByZXNjaGVkdWxpbmcgYXQgdGhlIGVuZCBvZiBlYWNoIHdha2UtdXAuIFxcYC93YWtldXBzXFxgIGxpc3RzIHBlbmRpbmcgb25lcyB3aXRoIGxpdmUgY291bnRkb3duczsgZW50ZXIgb3IgXFxgY3RybCt4XFxgIGNhbmNlbHMgKHByZXNzIHR3aWNlKS4gQSBcXGBcdTIzRjAgTlxcYCBpbiB0aGUgZm9vdGVyIHNob3dzIGhvdyBtYW55IGFyZSBwZW5kaW5nLiBXYWtlLXVwcyBsaXZlIGluIG1lbW9yeSBhbmQgYXJlIGxvc3Qgd2hlbiBwaWNvIGV4aXRzLlxuXG4jIyBBcHBlYXJhbmNlXG5cbnBpY28gcGlja3MgYSBsaWdodCBvciBkYXJrIHBhbGV0dGUgYXQgc3RhcnR1cCBieSBhc2tpbmcgdGhlIHRlcm1pbmFsIGZvciBpdHMgYmFja2dyb3VuZCBjb2xvciAoT1NDIDExKSwgc28gaXQgbWF0Y2hlcyB3aGF0ZXZlciB0aGVtZSB5b3VyIHRlcm1pbmFsIHVzZXMuIFxcYC90aGVtZVxcYCBvcGVucyBhIHBpY2tlciB0aGF0IHByZXZpZXdzIGVhY2ggdGhlbWUgYXMgeW91IG1vdmUgYW5kIHBlcnNpc3RzIHlvdXIgY2hvaWNlIGluIFxcYH4vLnBpY28vY29uZmlnLmpzb25cXGA7IFxcYC90aGVtZSBsaWdodFxcYCwgXFxgL3RoZW1lIGRhcmtcXGAsIG9yIFxcYC90aGVtZSBhdXRvXFxgIGFwcGxpZXMgb25lIGRpcmVjdGx5LiBcXGAvY29sb3JcXGAgdGludHMgYSBzaW5nbGUgc2Vzc2lvbidzIGFjY2VudCBhbmQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHBhbGV0dGUuXG5cbiMjIENvbnRleHRcblxucGljbyByZWFkcyBBR0VOVFMubWQgZmlsZXMgYXV0b21hdGljYWxseTogYSBnbG9iYWwgb25lIGZyb20gfi8ucGljbywgdGhlbiBldmVyeSBhbmNlc3RvciBvZiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHVwIHRvIHRoZSBnaXQgcm9vdC4gRGVlcGVyIGZpbGVzIHdpbi4gQUdFTlRTLm1kIGZpbGVzIGluIHN1YmRpcmVjdG9yaWVzIGxvYWQgbGF6aWx5IHRoZSBmaXJzdCB0aW1lIGEgdG9vbCB0b3VjaGVzIHRoYXQgc3VidHJlZS4gSW4gYW55IHByb2plY3QgZGlyZWN0b3J5IHdpdGhvdXQgYW4gQUdFTlRTLm1kLCBhIENMQVVERS5tZCBpcyBob25vcmVkIGFzIGEgZmFsbGJhY2sgc28gZXhpc3RpbmcgcmVwb3Mgd29yayB1bmNoYW5nZWQ7IEFHRU5UUy5tZCBhbHdheXMgd2lucyB3aGVuIGJvdGggZXhpc3QsIGFuZCB0aGUgZmFsbGJhY2sgbmV2ZXIgYXBwbGllcyB0byB0aGUgZ2xvYmFsIGZpbGUuXG5cblNlc3Npb25zIGFyZSBzdG9yZWQgdW5kZXIgfi8ucGljbyBhcyBqc29ubCBldmVudCBsb2dzOyBcXGAvcmVzdW1lXFxgIGZvbGRzIG9uZSBiYWNrIGludG8gZXhhY3RseSB0aGlzIHZpZXcuXG5cblxcYC9jb250ZXh0XFxgIGJyZWFrcyBkb3duIHdoYXQgdGhlIG5leHQgcmVxdWVzdCB3aWxsIGNvbnRhaW4gLSBzeXN0ZW0gcHJvbXB0LCB0b29sIHNjaGVtYXMsIHByb2plY3QgaW5zdHJ1Y3Rpb25zLCBtZW1vcnkgaW5kZXgsIGNvbXBhY3Rpb24gc3VtbWFyeSwgYW5kIGNvbnZlcnNhdGlvbiAtIHdpdGggYW4gZXN0aW1hdGVkIHNpemUgZm9yIGVhY2ggcGllY2UgbmV4dCB0byB0aGUgcHJvdmlkZXItbWVhc3VyZWQgdG90YWwuXG5cblRoZSBmb290ZXIncyBcXGBjdHggJVxcYCBzaG93cyBob3cgZnVsbCB0aGUgbW9kZWwncyBjb250ZXh0IGlzLiBBdCA4NSUgcGljbyBhdXRvLWNvbXBhY3RzOiB0aGUgb2xkZXIgY29udmVyc2F0aW9uIGlzIHN1bW1hcml6ZWQgaW4gYSBzdHJ1Y3R1cmVkIGZvcm0sIHRoZSBtb3N0IHJlY2VudCB0dXJucyBhcmUga2VwdCB2ZXJiYXRpbSwgYW5kIHRoZSBtb2RlbCBpcyB0b2xkIHdoZXJlIHRoZSBmdWxsIHNlc3Npb24gZmlsZSBsaXZlcyBzbyBpdCBjYW4gcmVhZCBleGFjdCBkZXRhaWxzIGJhY2sgb24gZGVtYW5kLiBOb3RoaW5nIHZpc2libGUgY2hhbmdlcyBpbiB0aGUgdHJhbnNjcmlwdCwgYW5kIHJld2luZCBzdGlsbCB3b3JrcyBhY3Jvc3MgaXQuIFxcYC9jb21wYWN0XFxgIHJ1bnMgaXQgbWFudWFsbHkgYW5kIHRha2VzIG9wdGlvbmFsIGZvY3VzIGluc3RydWN0aW9ucyAoXFxgL2NvbXBhY3QgZm9jdXMgb24gdGhlIEFQSSBjaGFuZ2VzXFxgKS4gU2V0IFxcYFwiYXV0b0NvbXBhY3RcIjogZmFsc2VcXGAgaW4gXFxgfi8ucGljby9jb25maWcuanNvblxcYCB0byBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgdHJpZ2dlci5cblxuLS0tXG5cbiplc2MgdGFrZXMgeW91IGJhY2sgdG8gdGhlIGNvbnZlcnNhdGlvbipgXG5cbmV4cG9ydCBmdW5jdGlvbiBIZWxwKHsgY29tbWFuZHMsIG9uQ2xvc2UgfSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzEwMCUnLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+cGljbyAgaGVscDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+XHUyMTkxXHUyMTkzIHNjcm9sbCAgZXNjIGJhY2s8L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQgc2Nyb2xsYmFyPlxuICAgICAgICA8TWFya2Rvd24gdGV4dD17SEVMUF9URVhUKGNvbW1hbmRzKX0gY29kZUJnPXtudWxsfSAvPlxuICAgICAgPC9TY3JvbGxCb3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIEJ1dHRvbiwgQ2hlY2tib3gsIGVhc2UsIEZpZWxkLCBGaWVsZExpc3QsIE1lbnUsIE51bWJlcklucHV0LCBQaWNrTGlzdCwgUmFkaW8sIFNjcm9sbEJveCwgVGV4dElucHV0LCB1c2VBbmltYXRlZCwgdXNlRm9jdXMsIHVzZUlucHV0LCB1c2VJbnRlcnZhbCwgdXNlTGF5b3V0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcsIFJFRCwgR1JFRU4gfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgY29udGV4dEJhciB9IGZyb20gJy4vY29udGV4dC1iYXIuanMnXG5pbXBvcnQgeyBjb21wYWN0TnVtYmVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9mb3JtYXQuanMnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBmb3JtYXRIdHRwU2VydmVyU3BlYywgcGFyc2VTZXJ2ZXJTcGVjLCByZWRhY3RTZXJ2ZXJTcGVjLCBSRURBQ1RFRF9IRUFERVIgfSBmcm9tICdwaWNvY29kZS1jb3JlL21jcC5qcydcblxuZnVuY3Rpb24gc2hvcnRlbkhvbWUocGF0aCkge1xuICBjb25zdCB2YWx1ZSA9IFN0cmluZyhwYXRoKVxuICBjb25zdCBob21lID0gaG9tZWRpcigpXG4gIHJldHVybiB2YWx1ZSA9PT0gaG9tZSB8fCB2YWx1ZS5zdGFydHNXaXRoKGAke2hvbWV9L2ApID8gYH4ke3ZhbHVlLnNsaWNlKGhvbWUubGVuZ3RoKX1gIDogdmFsdWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVBZ28oYXQpIHtcbiAgY29uc3QgcyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBhdCkgLyAxMDAwKSlcbiAgaWYgKHMgPCA2MCkgcmV0dXJuIGAke3N9cyBhZ29gXG4gIGNvbnN0IG0gPSBNYXRoLmZsb29yKHMgLyA2MClcbiAgaWYgKG0gPCA2MCkgcmV0dXJuIGAke219bSBhZ29gXG4gIGNvbnN0IGggPSBNYXRoLmZsb29yKG0gLyA2MClcbiAgaWYgKGggPCAyNCkgcmV0dXJuIGAke2h9aCBhZ29gXG4gIHJldHVybiBgJHtNYXRoLmZsb29yKGggLyAyNCl9ZCBhZ29gXG59XG5cbmZ1bmN0aW9uIFBhbmVsRGl2aWRlcigpIHtcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBTRUxFQ1RfQkcsIG92ZXJmbG93OiAnY2xpcCcgfX0+eydcdTI1MDAnLnJlcGVhdChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwKX08L3RleHQ+XG59XG5cbmZ1bmN0aW9uIFBhbmVsRnJhbWUoeyB0aXRsZSwgaGludCwgcmlnaHQsIGZ1bGxTY3JlZW4gPSBmYWxzZSwgY2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgaGVpZ2h0OiBmdWxsU2NyZWVuID8gJzEwMCUnIDogdW5kZWZpbmVkIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdUb3A6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pnt0aXRsZX08L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIHtyaWdodH1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57aGludH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiBmdWxsU2NyZWVuID8gMCA6IDIsIHBhZGRpbmdCb3R0b206IDEsIGZsZXhHcm93OiBmdWxsU2NyZWVuID8gMSA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpcm1QYW5lbCh7IHRpdGxlLCBtZXNzYWdlLCBjb25maXJtTGFiZWwgPSAnQ29uZmlybScsIGZvY3VzZWQsIG9uQ29uZmlybSwgb25DbG9zZSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIG9uQ29uZmlybSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD17YGVudGVyOiAke2NvbmZpcm1MYWJlbC50b0xvd2VyQ2FzZSgpfSAgZXNjOiBjYW5jZWxgfT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PnttZXNzYWdlfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCwgYm9sZDogdHJ1ZSB9fT5UaGlzIGNhbm5vdCBiZSB1bmRvbmUuPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ0ZpZWxkKHsgZmllbGQsIHZhbHVlLCBmb2N1c2VkLCBvbkNoYW5nZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPENoZWNrYm94IGNoZWNrZWQ9e3ZhbHVlfSBsYWJlbD17ZmllbGQubGFiZWx9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2ZpZWxkLnBhdGh9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICAgJHtmaWVsZC5kZXNjfWB9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ051bWJlckZpZWxkKHsgdmFsdWUsIGZvY3VzZWQsIG9uQ2hhbmdlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8TnVtYmVySW5wdXQgZm9jdXNlZD17Zm9jdXNlZH0gdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17b25DaGFuZ2V9IG1pbj17MX0gbWF4PXsxMDB9IHdpZHRoPXs1fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+IFBhcmFsbGVsIGFnZW50IGxpbWl0PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5yZXNlYXJjaC5hZ2VudExpbWl0PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+ICAgIE1heGltdW0gYWdlbnRzIHBlciBwYXJhbGxlbCBydW4gKDEtMTAwKTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdNb2RlbEZpZWxkKHsgbW9kZWwsIGxhYmVsLCBwYXRoLCBmb2N1c2VkLCBvblBpY2sgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9e2xhYmVsfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXtvblBpY2t9IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntwYXRofTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAgICR7bW9kZWwgfHwgJ05vdCBjb25maWd1cmVkJ31gfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29uZmlnUGFuZWwoeyB2YWx1ZXMsIGZvY3VzZWQsIG9uQ2hhbmdlLCBvblBpY2tSZXNlYXJjaE1vZGVsLCBvblBpY2tTaGVsbE1vZGVsLCBvblBpY2tEZWxpYmVyYXRpb25Nb2RlbCwgb25QaWNrUGFydGljaXBhbnRNb2RlbCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IGZpZWxkcyA9IFtcbiAgICB7IG5hbWU6ICdjbG91ZHMnLCBsYWJlbDogJ0Nsb3VkIGFuaW1hdGlvbicsIGRlc2M6ICdTaG93IGFuaW1hdGVkIGNsb3VkcyBvbiB0aGUgZW1wdHkgc2NyZWVuJywgcGF0aDogJ2FuaW1hdGlvbi5jbG91ZHMnIH0sXG4gICAgeyBuYW1lOiAnY29tcGFjdFRvb2xzJywgbGFiZWw6ICdDb21wYWN0IHRvb2wgaGlzdG9yeScsIGRlc2M6ICdTdW1tYXJpemUgY29uc2VjdXRpdmUgdG9vbCBjYWxscyBpbiBvbmUgcm93JywgcGF0aDogJ2Rpc3BsYXkuY29tcGFjdFRvb2xIaXN0b3J5JyB9LFxuICAgIHsgbmFtZTogJ2dpdFN0YXR1cycsIGxhYmVsOiAnR2l0IGluIGZvb3RlcicsIGRlc2M6ICdTaG93IGJyYW5jaCBhbmQgY2hhbmdlZCBsaW5lIGNvdW50cyBpbiB0aGUgZm9vdGVyJywgcGF0aDogJ2Rpc3BsYXkuZ2l0U3RhdHVzJyB9LFxuICAgIHsgbmFtZTogJ3dpZGVTaWRlYmFyJywgbGFiZWw6ICdXaWRlIHNpZGViYXInLCBkZXNjOiAnTW92ZSBwYW5lbHMgYW5kIHN0YXR1cyBkZXRhaWxzIHRvIGEgcmlnaHQgc2lkZWJhciB3aGVuIHRoZSB0ZXJtaW5hbCBpcyB3aWRlciB0aGFuIDE2MCBjb2x1bW5zJywgcGF0aDogJ2Rpc3BsYXkud2lkZVNpZGViYXInIH0sXG4gIF1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJDb25maWd1cmF0aW9uXCIgaGludD1cInRhYjogbmV4dCBzZXR0aW5nICBzcGFjZS9lbnRlcjogY2hhbmdlICBlc2M6IGNsb3NlXCIgZnVsbFNjcmVlbj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDxGaWVsZExpc3QgZm9jdXNlZD17Zm9jdXNlZH0gaW5pdGlhbEZvY3VzPVwiY2xvdWRzXCIgc2Nyb2xsYmFyIGZvY3VzUGFkZGluZz17MX0+XG4gICAgICAgICAge2ZpZWxkcy5tYXAoKGZpZWxkKSA9PiAoXG4gICAgICAgICAgICA8RmllbGQga2V5PXtmaWVsZC5uYW1lfSBuYW1lPXtmaWVsZC5uYW1lfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPENvbmZpZ0ZpZWxkIGZpZWxkPXtmaWVsZH0gdmFsdWU9e3ZhbHVlc1tmaWVsZC5uYW1lXX0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZShmaWVsZC5uYW1lLCB2YWx1ZSl9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnJlc2VhcmNoTW9kZWx9IGxhYmVsPVwiUGFyYWxsZWwgd29ya2VyIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5yZXNlYXJjaFdvcmtlclwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tSZXNlYXJjaE1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwic2hlbGxNb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLnNoZWxsTW9kZWx9IGxhYmVsPVwiU2hlbGwgbW9kZWxcIiBwYXRoPVwibW9kZWxzLnNoZWxsXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja1NoZWxsTW9kZWx9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAge1sncGFydGljaXBhbnRBJywgJ3BhcnRpY2lwYW50QiddLm1hcCgocm9sZSkgPT4gKFxuICAgICAgICAgICAgPEZpZWxkIG5hbWU9e2Ake3JvbGV9TW9kZWxgfT5cbiAgICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzW2Ake3JvbGV9TW9kZWxgXX0gbGFiZWw9e2BQYXJ0aWNpcGFudCAke3JvbGUgPT09ICdwYXJ0aWNpcGFudEEnID8gJ0EnIDogJ0InfSBtb2RlbGB9IHBhdGg9e2Btb2RlbHMuJHtyb2xlfWB9IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXsoKSA9PiBvblBpY2tQYXJ0aWNpcGFudE1vZGVsKHJvbGUpfSAvPn1cbiAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJkZWxpYmVyYXRpb25Nb2RlbFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTW9kZWxGaWVsZCBtb2RlbD17dmFsdWVzLmRlbGliZXJhdGlvbk1vZGVsfSBsYWJlbD1cIlN5bnRoZXNpcyBtb2RlbFwiIHBhdGg9XCJtb2RlbHMuZGVsaWJlcmF0aW9uXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja0RlbGliZXJhdGlvbk1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwicmVzZWFyY2hBZ2VudExpbWl0XCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdOdW1iZXJGaWVsZCB2YWx1ZT17dmFsdWVzLnJlc2VhcmNoQWdlbnRMaW1pdH0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvbkNoYW5nZT17KHZhbHVlKSA9PiBvbkNoYW5nZSgncmVzZWFyY2hBZ2VudExpbWl0JywgdmFsdWUpfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICA8L0ZpZWxkTGlzdD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU2NvcGVUYWJzKHsgc2NvcGVzLCBhY3RpdmUgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICB7c2NvcGVzLm1hcCgocywgaSkgPT4gKFxuICAgICAgICA8dGV4dCBrZXk9e3N9IHN0eWxlPXt7IGNvbG9yOiBpID09PSBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiBpID09PSBhY3RpdmUgfX0+e2Ake2kgPiAwID8gJyAgJyA6ICcnfSR7c31gfTwvdGV4dD5cbiAgICAgICkpfVxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNb2RlbFBhbmVsKHsgbW9kZWxzLCBjdXJyZW50LCBkZWZhdWx0TmFtZSwgZm9jdXNlZCwgb25QaWNrLCBvblBpY2tEZWZhdWx0LCBvbkNsb3NlLCB0aXRsZSA9ICdTZWxlY3QgbW9kZWwnLCBoaW50ID0gJ2VudGVyOiB0aGlzIHNlc3Npb24gIGN0cmwrczogc2V0IGFzIGRlZmF1bHQgIGVzYzogY2xvc2UnIH0pIHtcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbChtb2RlbHNbMF0gfHwgbnVsbClcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IHJhbmtlZE1vZGVscyA9IHJhbmtGdXp6eShtb2RlbHMsIHF1ZXJ5KCksIChxLCBtb2RlbCkgPT4gZnV6enlTY29yZShxLCBtb2RlbC5uYW1lKSlcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIGN1cnNvcigpKSB7XG4gICAgICBvblBpY2tEZWZhdWx0KGN1cnNvcigpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT17dGl0bGV9IGhpbnQ9e2hpbnR9PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAxMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgaXRlbXM9e3JhbmtlZE1vZGVsc31cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIG1vZGVscy4uLlwiXG4gICAgICAgICAgZmlsdGVyPXsoKSA9PiB0cnVlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtzZXRRdWVyeX1cbiAgICAgICAgICBvbkN1cnNvckNoYW5nZT17c2V0Q3Vyc29yfVxuICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgIGl0ZW1IZWlnaHQ9ezJ9XG4gICAgICAgICAgc2Nyb2xsb2ZmPXsxfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhtLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9mZiA9IG0uYXZhaWxhYmxlID09PSBmYWxzZVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IHNlbGVjdGVkID8gKGYgPyBhY2NlbnQoKSA6IFNFTEVDVF9CRykgOiBudWxsLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgYm9sZDogIW9mZiwgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IG9mZiA/IE1VVEVEIDogRkcgfX0+e20ubmFtZX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICB7bS5uYW1lID09PSBjdXJyZW50ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57JyBcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICB7bS5uYW1lID09PSBkZWZhdWx0TmFtZSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+eycgIGRlZmF1bHQnfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtvZmYgPyBgbmVlZHMgJHttLmtleUhpbnR9YCA6IG0ucHJpY2UgPyBgJCR7bS5wcmljZS5pbn0gaW4gICQke20ucHJpY2Uub3V0fSBvdXRgIDogbS5wcm92aWRlciA9PT0gJ2NvZGV4JyA/ICdzdWJzY3JpcHRpb24nIDogJ3ByaWNlIHVua25vd24nfVxuICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57bS5kZXNjfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGlzdG9yeVBhbmVsKHsgcHJvbXB0cywgc2NvcGVzLCBzY29wZUluZGV4LCBmb2N1c2VkLCBvblBpY2ssIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwocHJvbXB0c1swXSB8fCBudWxsKVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgYW55TWF0Y2ggPSBwcm9tcHRzLnNvbWUoKHApID0+IGZ1enp5U2NvcmUocXVlcnkoKSwgcC50ZXh0KSA+PSAwKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWVcbiAgICAgIHRpdGxlPVwiU2VhcmNoIHByb21wdHNcIlxuICAgICAgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICBjdHJsK3Mgc2NvcGUgIGVudGVyIHRvIGVkaXQgIGVzYyB0byBjbG9zZVwiXG4gICAgICByaWdodD17PFNjb3BlVGFicyBzY29wZXM9e3Njb3Blc30gYWN0aXZlPXtzY29wZUluZGV4fSAvPn1cbiAgICA+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEyLCBtYXJnaW5Ub3A6IDEsIGdhcDogMiB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6ICc1MCUnIH19PlxuICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3Byb21wdHN9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgcHJvbXB0cy4uLlwiXG4gICAgICAgICAgICBmaWx0ZXI9eyhxLCBwKSA9PiBmdXp6eVNjb3JlKHEsIHAudGV4dCkgPj0gMH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRRdWVyeX1cbiAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsocCkgPT4gc2V0UHJldmlldyhwKX1cbiAgICAgICAgICAgIG9uU3VibWl0PXsocCkgPT4gb25QaWNrKHAudGV4dCl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KHAsIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcgfX0+e3AudGV4dC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3RpbWVBZ28ocC5hdCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAge2FueU1hdGNoICYmIHByZXZpZXcoKSA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57cHJldmlldygpLnRleHQuc2xpY2UoMCwgMjAwMCl9PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWF0Y2hpbmcgcHJvbXB0czwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmV3aW5kUGlja1BhbmVsKHsgZW50cmllcywgc3RhdHMsIGZvY3VzZWQsIG9uUGljaywgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChlbnRyaWVzWzBdIHx8IG51bGwpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlJld2luZCB0byBhIG1lc3NhZ2VcIiBoaW50PVwiXHUyMTkxXHUyMTkzIHRvIG1vdmUgIGVudGVyIHRvIGNob29zZSAgZXNjIHRvIGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEyLCBtYXJnaW5Ub3A6IDEsIGdhcDogMiB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6ICc1MCUnIH19PlxuICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e2VudHJpZXN9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgbWVzc2FnZXMuLi5cIlxuICAgICAgICAgICAgZmlsdGVyPXsocSwgbSkgPT4gZnV6enlTY29yZShxLCBtLnRleHQpID49IDB9XG4gICAgICAgICAgICBvbkN1cnNvckNoYW5nZT17KG0pID0+IHNldFByZXZpZXcobSl9XG4gICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhtLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGYgPyBhY2NlbnQoKSA6IFNFTEVDVF9CRykgOiBudWxsLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19PnttLnRleHQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzdGF0cyhtLmluZGV4KS5tc2dzfSBhZnRlcmB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIHtwcmV2aWV3KCkgPyAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2ByZXdpbmRpbmcgaGVyZSBkcm9wcyAke3N0YXRzKHByZXZpZXcoKS5pbmRleCkubXNnc30gZW50cmllc2B9PC90ZXh0PlxuICAgICAgICAgICAgICB7c3RhdHMocHJldmlldygpLmluZGV4KS5lZGl0cy5tYXAoKG0sIGkpID0+IChcbiAgICAgICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgXHUyMUE5ICR7bS50aXRsZX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57cHJldmlldygpLnRleHQuc2xpY2UoMCwgMjAwMCl9PC90ZXh0PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBtZXNzYWdlczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUmV3aW5kQWN0aW9uUGFuZWwoeyB0YXJnZXQsIG9wdGlvbnMsIGZvY3VzZWQsIG9uU3VibWl0LCBvbkJhY2sgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+UmV3aW5kIG9wdGlvbnM8L3RleHQ+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eyd0bzogJ308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IEZHX1NPRlQgfX0+e3RhcmdldC50ZXh0LnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPE1lbnVcbiAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgaXRlbXM9e29wdGlvbnN9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs0fVxuICAgICAgICAgIGl0ZW1IZWlnaHQ9ezJ9XG4gICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25TdWJtaXR9XG4gICAgICAgICAgb25DYW5jZWw9e29uQmFja31cbiAgICAgICAgICByZW5kZXJJdGVtPXsobywgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntvLmxhYmVsfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtvLmRlc2N9YH08L3RleHQ+XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+ZW50ZXIgdG8gY29uZmlybSAgZXNjIHRvIHBpY2sgYSBkaWZmZXJlbnQgbWVzc2FnZTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiB1c2VFc2NhcGUoZm9jdXNlZCwgb25DbG9zZSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQoKSkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXN1bWVQYW5lbCh7IHNlc3Npb25zLCBzY29wZXMsIHNjb3BlSW5kZXgsIGxvYWRpbmcsIGZvY3VzZWQsIGN1cnJlbnRJZCwgb25QaWNrLCBvbkRlbGV0ZSwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChzZXNzaW9uc1swXSB8fCBudWxsKVxuICBjb25zdCBbcGFuZSwgc2V0UGFuZV0gPSBjcmVhdGVTaWduYWwoJ2xpc3QnKVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgcmFua2VkU2Vzc2lvbnMgPSByYW5rRnV6enkoc2Vzc2lvbnMsIHF1ZXJ5KCksIChxLCBzZXNzaW9uKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tU2NvcmUgPSBzZXNzaW9uLmN1c3RvbVRpdGxlID8gZnV6enlTY29yZShxLCBzZXNzaW9uLmN1c3RvbVRpdGxlKSA6IC0xXG4gICAgaWYgKGN1c3RvbVNjb3JlID49IDApIHJldHVybiAyMF8wMDAgKyBjdXN0b21TY29yZVxuICAgIHJldHVybiBNYXRoLm1heChmdXp6eVNjb3JlKHEsIHNlc3Npb24uYXV0b21hdGljVGl0bGUgfHwgc2Vzc2lvbi50aXRsZSksIGZ1enp5U2NvcmUocSwgc2Vzc2lvbi5jaGVja291dCB8fCAnJykpXG4gIH0pXG4gIGNvbnN0IHNob3dDaGVja291dHMgPSBuZXcgU2V0KHNlc3Npb25zLm1hcCgoc2Vzc2lvbikgPT4gc2Vzc2lvbi5jaGVja291dCkuZmlsdGVyKEJvb2xlYW4pKS5zaXplID4gMVxuICBjb25zdCBzZWxlY3RlZFNlc3Npb24gPSAoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmcpIHJldHVybiBudWxsXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBwcmV2aWV3KClcbiAgICByZXR1cm4gc2Vzc2lvbnMuaW5jbHVkZXMoc2VsZWN0ZWQpID8gc2VsZWN0ZWQgOiBudWxsXG4gIH1cbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEpIHtcbiAgICAgIHNldFBhbmUoKGN1cnJlbnQpID0+IGN1cnJlbnQgPT09ICdsaXN0JyA/ICdwcmV2aWV3JyA6ICdsaXN0JylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3RlZFNlc3Npb24oKVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnICYmIHNlbGVjdGVkKSB7XG4gICAgICBvbkRlbGV0ZShzZWxlY3RlZClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWVcbiAgICAgIHRpdGxlPVwiUmVzdW1lIGEgc2Vzc2lvblwiXG4gICAgICBoaW50PVwiXHUyMTkxXHUyMTkzIHRvIG1vdmUgIHRhYjogcHJldmlldyAgY3RybCtzIHNjb3BlICBlbnRlciB0byByZXN1bWUgIGN0cmwreCBkZWxldGUgIGVzYyB0byBjbG9zZVwiXG4gICAgICByaWdodD17PFNjb3BlVGFicyBzY29wZXM9e3Njb3Blc30gYWN0aXZlPXtzY29wZUluZGV4fSAvPn1cbiAgICAgIGZ1bGxTY3JlZW5cbiAgICA+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQwJScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmxvYWRpbmcgc2Vzc2lvbnMuLi48L3RleHQ+XG4gICAgICAgICAgKSA6IHNlc3Npb25zLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBzZXNzaW9ucyBoZXJlIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e3JhbmtlZFNlc3Npb25zfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ2xpc3QnICYmICFsb2FkaW5nfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBzZXNzaW9ucy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldFF1ZXJ5fVxuICAgICAgICAgICAgICBvbkN1cnNvckNoYW5nZT17KHMpID0+IHNldFByZXZpZXcocyl9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsocywgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGYgPyBhY2NlbnQoKSA6IFNFTEVDVF9CRykgOiAoc2hvd0NoZWNrb3V0cyA/IHMuY29sb3IgOiBudWxsKSwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICB7c2hvd0NoZWNrb3V0cyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQsIGJnOiBzZWxlY3RlZCA/IG51bGwgOiBzLmNvbG9yIH19PntgJHtzLmNoZWNrb3V0fSAgYH08L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHLCBiZzogc2VsZWN0ZWQgfHwgc2hvd0NoZWNrb3V0cyA/IG51bGwgOiBzLmNvbG9yIH19PntzLnRpdGxlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAge3MuaGVhZGVyLmlkID09PSBjdXJyZW50SWQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PiBjdXJyZW50PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHt0aW1lQWdvKHMuYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICAgPFBhbmVsRGl2aWRlciAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMyB9fT5cbiAgICAgICAgICB7c2VsZWN0ZWRTZXNzaW9uKCkgPyAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJldmlldyd9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake3NlbGVjdGVkU2Vzc2lvbigpLnR1cm5zfSAke3NlbGVjdGVkU2Vzc2lvbigpLnR1cm5zID09PSAxID8gJ3R1cm4nIDogJ3R1cm5zJ30gICR7dGltZUFnbyhzZWxlY3RlZFNlc3Npb24oKS5hdCl9ICAke3Nob3J0ZW5Ib21lKHNlbGVjdGVkU2Vzc2lvbigpLmhlYWRlci5yb290KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGhlaWdodDogMSB9fSAvPlxuICAgICAgICAgICAgICAgIHsoc2VsZWN0ZWRTZXNzaW9uKCkucHJldmlldyB8fCBbXSkubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3TWVzc2FnZUNvdW50ID4gc2VsZWN0ZWRTZXNzaW9uKCkucHJldmlldy5sZW5ndGggJiYgKFxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7c2VsZWN0ZWRTZXNzaW9uKCkucHJldmlld01lc3NhZ2VDb3VudCAtIHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcubGVuZ3RofSBlYXJsaWVyIG1lc3NhZ2VzIG9taXR0ZWRgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgeyhzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3IHx8IFtdKS5tYXAoKG1lc3NhZ2UsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8Ym94IGtleT17YCR7bWVzc2FnZS5yb2xlfS0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaSA9PT0gMCA/IDAgOiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IG1lc3NhZ2Uucm9sZSA9PT0gJ3VzZXInID8gRkcgOiBNVVRFRCB9fT57bWVzc2FnZS50ZXh0fTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHRyYW5zY3JpcHQgcHJldmlldzwvdGV4dD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIDwvU2Nyb2xsQm94PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gc2Vzc2lvbnM8L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1lbW9yeVBhbmVsKHsgbWVtb3JpZXMsIHNjb3Blcywgc2NvcGVJbmRleCwgZm9jdXNlZCwgb25Ub2dnbGVEaXNhYmxlZCwgb25Gb3JnZXQsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29ySXRlbSwgc2V0Q3Vyc29ySXRlbV0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3BhbmUsIHNldFBhbmVdID0gY3JlYXRlU2lnbmFsKCdsaXN0JylcbiAgY29uc3QgcHJldmlldyA9IG1lbW9yaWVzLmluY2x1ZGVzKGN1cnNvckl0ZW0oKSkgPyBjdXJzb3JJdGVtKCkgOiBtZW1vcmllc1swXSB8fCBudWxsXG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInICYmICFldmVudC5jdHJsICYmICFldmVudC5tZXRhKSB7XG4gICAgICBzZXRQYW5lKChwKSA9PiAocCA9PT0gJ2xpc3QnID8gJ3ByZXZpZXcnIDogJ2xpc3QnKSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcHJldmlldykge1xuICAgICAgb25Gb3JnZXQocHJldmlldylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWVcbiAgICAgIHRpdGxlPVwiTWVtb3J5XCJcbiAgICAgIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgZW50ZXI6IGVuYWJsZS9kaXNhYmxlICB0YWI6IHByZXZpZXcgIGN0cmwrcyBzY29wZSAgY3RybCt4IGZvcmdldCAodHdpY2UpICBlc2MgdG8gY2xvc2VcIlxuICAgICAgcmlnaHQ9ezxTY29wZVRhYnMgc2NvcGVzPXtzY29wZXN9IGFjdGl2ZT17c2NvcGVJbmRleH0gLz59XG4gICAgICBmdWxsU2NyZWVuXG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgZ2FwOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICc0MCUnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7bWVtb3JpZXMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1lbW9yaWVzIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17bWVtb3JpZXN9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAnbGlzdCd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIG1lbW9yaWVzLi4uXCJcbiAgICAgICAgICAgICAgZmlsdGVyPXsocSwgbSkgPT4gZnV6enlTY29yZShxLCBgJHttLm5hbWV9ICR7bS5kZXNjcmlwdGlvbn1gKSA+PSAwfVxuICAgICAgICAgICAgICBvbkN1cnNvckNoYW5nZT17c2V0Q3Vyc29ySXRlbX1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uVG9nZ2xlRGlzYWJsZWR9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsobSwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGYgPyBhY2NlbnQoKSA6IFNFTEVDVF9CRykgOiBudWxsLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGl0YWxpYzogbS5kaXNhYmxlZCwgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IChtLmRpc2FibGVkID8gTVVURUQgOiBGRykgfX0+e2Ake20uZGlzYWJsZWQgPyAnICAgJyA6ICcnfSR7bS5uYW1lfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICB7bS5kaXNhYmxlZCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+ICBzdXBwcmVzc2VkPC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHttLnNjb3BlfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICAgPFBhbmVsRGl2aWRlciAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMyB9fT5cbiAgICAgICAgICB7cHJldmlldyA/IChcbiAgICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdwcmV2aWV3J30gc2Nyb2xsYmFyPlxuICAgICAgICAgICAgICB7cHJldmlldy5kaXNhYmxlZCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGJvbGQ6IHRydWUgfX0+U1VQUFJFU1NFRDwvdGV4dD59XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntwcmV2aWV3LmRlc2NyaXB0aW9uIHx8ICdubyBkZXNjcmlwdGlvbid9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57cHJldmlldy5ib2R5fTwvdGV4dD5cbiAgICAgICAgICAgIDwvU2Nyb2xsQm94PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWVtb3JpZXM8L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVmZm9ydFBhbmVsKHsgbGV2ZWxzLCBjdXJyZW50LCBkZWZhdWx0TGV2ZWwsIGZvY3VzZWQsIG9uUGljaywgb25QaWNrRGVmYXVsdCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgaXRlbXMgPSBsZXZlbHNcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnKSB7XG4gICAgICBvblBpY2tEZWZhdWx0KGl0ZW1zW2N1cnNvcigpXSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGxhYmVsID0gKGwpID0+IChsLmtleSA9PT0gbnVsbCA/ICdkZWZhdWx0JyA6IGwua2V5KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJUaGlua2luZyBlZmZvcnRcIiBoaW50PVwiai9rIHRvIG1vdmUgIGVudGVyOiB0aGlzIHNlc3Npb24gIGN0cmwrczogc2V0IGFzIGRlZmF1bHQgIGVzYzogY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPE1lbnVcbiAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgaXRlbXM9e2l0ZW1zfVxuICAgICAgICAgIHNlbGVjdGVkPXtjdXJzb3IoKX1cbiAgICAgICAgICBvblNlbGVjdD17c2V0Q3Vyc29yfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsobCwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e2xhYmVsKGwpLnBhZEVuZChNYXRoLm1heCgxMCwgbGFiZWwobCkubGVuZ3RoICsgMSkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntsLmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGN1cnJlbnQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+eycgIFx1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAge2wua2V5ID09PSBkZWZhdWx0TGV2ZWwgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnICAgZGVmYXVsdCd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lUGFuZWwoeyB0aGVtZXMsIHByZWYsIGZvY3VzZWQsIG9uUGljaywgb25QcmV2aWV3LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbChNYXRoLm1heCgwLCB0aGVtZXMuZmluZEluZGV4KCh0KSA9PiB0LmtleSA9PT0gcHJlZikpKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJUaGVtZVwiIGhpbnQ9XCJqL2sgdG8gbW92ZSBhbmQgcHJldmlldyAgZW50ZXIgdG8gYXBwbHkgIGVzYzogY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPE1lbnVcbiAgICAgICAgICBpdGVtcz17dGhlbWVzfVxuICAgICAgICAgIHNlbGVjdGVkPXtjdXJzb3IoKX1cbiAgICAgICAgICBvblNlbGVjdD17KGkpID0+IHtcbiAgICAgICAgICAgIHNldEN1cnNvcihpKVxuICAgICAgICAgICAgb25QcmV2aWV3KHRoZW1lc1tpXSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17Nn1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsodCwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e3Qua2V5LnBhZEVuZChNYXRoLm1heCgxMCwgdC5rZXkubGVuZ3RoICsgMSkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnt0LmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICB7dC5rZXkgPT09IHByZWYgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+eycgIFx1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29udGV4dE92ZXJ2aWV3KHsgb3ZlcnZpZXcgfSkge1xuICBjb25zdCByZXZlYWwgPSB1c2VBbmltYXRlZCgwLCBlYXNlKDcwMCkpXG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIHJldmVhbC5zZXQoMSlcbiAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCgxLCBsYXlvdXQud2lkdGggfHwgMSlcbiAgY29uc3QgdmlzaWJsZSA9IE1hdGgucm91bmQod2lkdGggKiByZXZlYWwoKSlcbiAgY29uc3QgdXNhZ2VXaWR0aCA9IE1hdGgubWF4KDEsIHdpZHRoIC0gNSlcbiAgY29uc3QgdG90YWwgPSBvdmVydmlldy5zZWdtZW50cy5yZWR1Y2UoKHN1bSwgc2VnbWVudCkgPT4gc3VtICsgc2VnbWVudC50b2tlbnMsIDApXG4gIGNvbnN0IHVzZWQgPSBvdmVydmlldy5tZWFzdXJlZCB8fCB0b3RhbFxuICBjb25zdCBwZXJjZW50ID0gdXNlZCAmJiBvdmVydmlldy5saW1pdCA/IE1hdGgubWluKDEwMCwgdXNlZCAvIG92ZXJ2aWV3LmxpbWl0ICogMTAwKSA6IDBcbiAgbGV0IGJvdW5kYXJ5ID0gMFxuICBjb25zdCBjZWxscyA9IFtdXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IG92ZXJ2aWV3LnNlZ21lbnRzLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgIGJvdW5kYXJ5ICs9IGl0ZW0udG9rZW5zIC8gdG90YWwgKiB3aWR0aFxuICAgICAgcmV0dXJuIGkgPCBib3VuZGFyeVxuICAgIH0pXG4gICAgYm91bmRhcnkgPSAwXG4gICAgY2VsbHMucHVzaChcbiAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IGkgPj0gdmlzaWJsZSA/IFBBTkVMX0JHIDogc2VnbWVudD8uY29sb3IgfHwgTVVURUQgfX0+XG4gICAgICAgIHtpID49IHZpc2libGUgPyAnICcgOiBzZWdtZW50ID8gJ1x1MjU4OCcgOiAnXHUyNTkxJ31cbiAgICAgIDwvdGV4dD4sXG4gICAgKVxuICB9XG5cbiAgY29uc3QgZm9ybWF0VG9rZW5zID0gKHRva2VucykgPT4gdG9rZW5zIDwgMTAwMCA/IGAke01hdGgucm91bmQodG9rZW5zKX0gdG9rYCA6IGAkeyh0b2tlbnMgLyAxMDAwKS50b0ZpeGVkKDEpfWtgXG4gIGNvbnN0IGxlZ2VuZFJvd3MgPSAoKSA9PiB7XG4gICAgY29uc3Qgcm93cyA9IFtbXV1cbiAgICBsZXQgdXNlZCA9IDBcbiAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2Ygb3ZlcnZpZXcuc2VnbWVudHMpIHtcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IHNlZ21lbnQubGFiZWwubGVuZ3RoICsgZm9ybWF0VG9rZW5zKHNlZ21lbnQudG9rZW5zKS5sZW5ndGggKyA1XG4gICAgICBpZiAodXNlZCA+IDAgJiYgdXNlZCArIGl0ZW1XaWR0aCA+IE1hdGgubWF4KDEsIGxheW91dC53aWR0aCB8fCAxKSkge1xuICAgICAgICByb3dzLnB1c2goW10pXG4gICAgICAgIHVzZWQgPSAwXG4gICAgICB9XG4gICAgICByb3dzLmF0KC0xKS5wdXNoKHNlZ21lbnQpXG4gICAgICB1c2VkICs9IGl0ZW1XaWR0aFxuICAgIH1cbiAgICByZXR1cm4gcm93c1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICB7cGVyY2VudCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICAgICAgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e3BlcmNlbnR9IGluaXRpYWw9ezB9IGR1cmF0aW9uPXsxMDAwfSBjb2xvcj17cGVyY2VudCA+PSA4MCA/IFJFRCA6IEZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGJhY2tncm91bmQ9e1NFTEVDVF9CR30gZm9ybWF0PXsodmFsdWUpID0+IGNvbnRleHRCYXIodmFsdWUsIHVzYWdlV2lkdGgpfSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBwZXJjZW50ID49IDgwID8gUkVEIDogTVVURUQgfX0+e2Ake292ZXJ2aWV3Lm1lYXN1cmVkID8gJycgOiAnfid9JHtNYXRoLnJvdW5kKHBlcmNlbnQpfSVgLnBhZFN0YXJ0KDUpfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT57Y2VsbHN9PC9ib3g+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7bGVnZW5kUm93cygpLm1hcCgocm93LCByb3dJbmRleCkgPT4gKFxuICAgICAgICAgIDxib3gga2V5PXtyb3dJbmRleH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICB7cm93Lm1hcCgoc2VnbWVudCkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IGtleT17c2VnbWVudC5sYWJlbH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpblJpZ2h0OiAyIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWdtZW50LmNvbG9yIH19Plx1MjVBMDwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgJHtzZWdtZW50LmxhYmVsfSBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZVxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3NlZ21lbnQudG9rZW5zfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD17MH1cbiAgICAgICAgICAgICAgICAgIGR1cmF0aW9uPXsyMDAwfVxuICAgICAgICAgICAgICAgICAgY29sb3I9e01VVEVEfVxuICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0PXthY2NlbnQoKX1cbiAgICAgICAgICAgICAgICAgIGZvcm1hdD17Zm9ybWF0VG9rZW5zfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICkpfVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEluZm9MaXN0UGFuZWwoeyB0aXRsZSwgcm93cywgb3ZlcnZpZXcsIGZvY3VzZWQsIG9uQ2xvc2UgfSkge1xuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD1cImovayBvciBcdTIxOTFcdTIxOTMgdG8gc2Nyb2xsICBlc2MgY2xvc2VcIj5cbiAgICAgIHtvdmVydmlldyAmJiA8Q29udGV4dE92ZXJ2aWV3IG92ZXJ2aWV3PXtvdmVydmlld30gLz59XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDE0LCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIHtyb3dzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm90aGluZyBoZXJlIHlldDwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWR9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgIHtyb3dzLm1hcCgocm93LCBpKSA9PiAoXG4gICAgICAgICAgICAgIDxib3gga2V5PXtgJHtyb3cubmFtZX0tJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IGkgPT09IDAgPyAwIDogMSB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19Pntyb3cubmFtZX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgICB7cm93Lm5vdGUgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntyb3cubm90ZX08L3RleHQ+fVxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cm93LmRlc2MgfHwgJ25vIGRlc2NyaXB0aW9uJ308L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFByb2plY3RQYW5lbCh7IHByb2plY3RzLCBsb2FkaW5nLCBmb2N1c2VkLCBvblBpY2tDaGVja291dCwgb25QaWNrU2Vzc2lvbiwgb25BZGRXb3JrdHJlZSwgb25EZWxldGUsIG9uQ2xvc2UgfSkge1xuICBjb25zdCByb3dzID0gcHJvamVjdHMuZmxhdE1hcCgocHJvamVjdCkgPT4gcHJvamVjdC5jaGVja291dHMubWFwKChjaGVja291dCwgaW5kZXgpID0+ICh7XG4gICAgLi4uY2hlY2tvdXQsXG4gICAgcHJvamVjdFBhdGg6IHByb2plY3QucGF0aCxcbiAgICBncm91cGVkOiBwcm9qZWN0LmNoZWNrb3V0cy5sZW5ndGggPiAxLFxuICAgIGZpcnN0OiBpbmRleCA9PT0gMCxcbiAgICBsYXN0OiBpbmRleCA9PT0gcHJvamVjdC5jaGVja291dHMubGVuZ3RoIC0gMSxcbiAgfSkpKVxuICBjb25zdCBbcHJldmlldywgc2V0UHJldmlld10gPSBjcmVhdGVTaWduYWwocm93c1swXSB8fCBudWxsKVxuICBjb25zdCBbcGFuZSwgc2V0UGFuZV0gPSBjcmVhdGVTaWduYWwoJ3Byb2plY3RzJylcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEpIHtcbiAgICAgIGlmIChwcmV2aWV3KCk/LnNlc3Npb25zLmxlbmd0aCkgc2V0UGFuZSgoY3VycmVudCkgPT4gY3VycmVudCA9PT0gJ3Byb2plY3RzJyA/ICdzZXNzaW9ucycgOiAncHJvamVjdHMnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocGFuZSgpID09PSAncHJvamVjdHMnICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndCcgJiYgcHJldmlldygpKSB7XG4gICAgICBvbkFkZFdvcmt0cmVlKHByZXZpZXcoKSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHBhbmUoKSA9PT0gJ3Byb2plY3RzJyAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnICYmIHByZXZpZXcoKSkge1xuICAgICAgb25EZWxldGUocHJldmlldygpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY2hlY2tvdXRMYWJlbCA9IChyb3cpID0+IGAke3Jvdy5sYXN0ID8gJ1x1MjUxNFx1MjUwMCcgOiAnXHUyNTFDXHUyNTAwJ30gJHtyb3cuYnJhbmNoIHx8IChyb3cud29ya3RyZWUgPyByb3cucGF0aCA6ICdtYWluJyl9YFxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJTd2l0Y2ggcHJvamVjdFwiIGhpbnQ9XCJcdTIxOTFcdTIxOTMgbW92ZSAgdGFiIHN3aXRjaCBwYW5lICBlbnRlciBvcGVuICBjdHJsK3QgbmV3IHdvcmt0cmVlICBjdHJsK3ggZGVsZXRlICBlc2MgY2xvc2VcIiBmdWxsU2NyZWVuPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgZ2FwOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6ICc0NCUnLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5sb2FkaW5nIHByb2plY3RzLi4uPC90ZXh0PlxuICAgICAgICAgICkgOiByb3dzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBrbm93biBwcm9qZWN0cyB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXtyb3dzfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3Byb2plY3RzJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgcHJvamVjdHMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxdWVyeSwgcm93KSA9PiBmdXp6eVNjb3JlKHF1ZXJ5LCBgJHtyb3cucHJvamVjdFBhdGh9ICR7cm93LmJyYW5jaCB8fCAnJ31gKSA+PSAwfVxuICAgICAgICAgICAgICBvbkN1cnNvckNoYW5nZT17c2V0UHJldmlld31cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja0NoZWNrb3V0fVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KHJvdywgeyBzZWxlY3RlZCwgZm9jdXNlZDogYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgICAge3Jvdy5ncm91cGVkICYmIHJvdy5maXJzdCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2BcdTI1QkUgJHtyb3cucHJvamVjdFBhdGh9YH08L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGFjdGl2ZSA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57cm93Lmdyb3VwZWQgPyBgICAke2NoZWNrb3V0TGFiZWwocm93KX1gIDogcm93LnByb2plY3RQYXRofTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtyb3cuY3VycmVudCA/ICdjdXJyZW50ICAnIDogJyd9JHtyb3cubGF0ZXN0ID8gdGltZUFnbyhyb3cubGF0ZXN0LmF0KSA6ICdubyBzZXNzaW9ucyd9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIDxQYW5lbERpdmlkZXIgLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge3ByZXZpZXcoKT8uc2Vzc2lvbnMubGVuZ3RoID8gKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGtleT17cHJldmlldygpLnJvb3R9XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e3ByZXZpZXcoKS5zZXNzaW9uc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdzZXNzaW9ucyd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHNlc3Npb25zLi4uXCJcbiAgICAgICAgICAgICAgZmlsdGVyPXsocXVlcnksIHNlc3Npb24pID0+IGZ1enp5U2NvcmUocXVlcnksIHNlc3Npb24udGl0bGUpID49IDB9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtvblBpY2tTZXNzaW9ufVxuICAgICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgICAgcmVuZGVySXRlbT17KHNlc3Npb24sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IHNlbGVjdGVkID8gKGFjdGl2ZSA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e3Nlc3Npb24udGl0bGUucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7c2Vzc2lvbi50dXJuc30gJHtzZXNzaW9uLnR1cm5zID09PSAxID8gJ3R1cm4nIDogJ3R1cm5zJ30gICR7dGltZUFnbyhzZXNzaW9uLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBzZXNzaW9uczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29ubmVjdFBhbmVsKHsgcHJvdmlkZXJzLCBmb2N1c2VkLCBvbkNvbm5lY3QsIG9uRGlzY29ubmVjdCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuXG4gIGNvbnN0IHNlbGVjdGVkID0gKCkgPT4gcHJvdmlkZXJzW01hdGgubWluKGluZGV4KCksIHByb3ZpZGVycy5sZW5ndGggLSAxKV0gfHwgbnVsbFxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgY29uc3QgcCA9IHNlbGVjdGVkKClcbiAgICBpZiAocCAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnICYmIHAuY29ubmVjdGVkKSB7XG4gICAgICBvbkRpc2Nvbm5lY3QocClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJDb25uZWN0IGEgc3Vic2NyaXB0aW9uXCIgaGludD1cImVudGVyIHNpZ24gaW4gIGN0cmwreCBkaXNjb25uZWN0ICh0d2ljZSkgIGVzYyBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17cHJvdmlkZXJzfVxuICAgICAgICAgIHNlbGVjdGVkPXtpbmRleCgpfVxuICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXsocCkgPT4gb25Db25uZWN0KHApfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhwLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogcC5jb25uZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVEIH19PntwLmNvbm5lY3RlZCA/ICdcdTI1QUEnIDogJ1x1MjVBQid9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YCAke3AubGFiZWx9ICBgfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogTVVURUQgfX0+XG4gICAgICAgICAgICAgICAgICB7cC5jb25uZWN0ZWQgPyBgY29ubmVjdGVkJHtwLmVtYWlsID8gYCBhcyAke3AuZW1haWx9YCA6ICcnfWAgOiAnbm90IGNvbm5lY3RlZCd9XG4gICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFdha2V1cHNQYW5lbCh7IHdha2V1cHMsIGZvY3VzZWQsIG9uQ2FuY2VsLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3RpY2ssIHNldFRpY2tdID0gY3JlYXRlU2lnbmFsKDApXG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuICB1c2VJbnRlcnZhbCgoKSA9PiBzZXRUaWNrKCh0KSA9PiB0ICsgMSksIDEwMDApXG4gIHZvaWQgdGljaygpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiB3YWtldXBzW01hdGgubWluKGluZGV4KCksIHdha2V1cHMubGVuZ3RoIC0gMSldIHx8IG51bGxcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGNvbnN0IHcgPSBzZWxlY3RlZCgpXG4gICAgaWYgKHcgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgb25DYW5jZWwodylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGNvdW50ZG93biA9IChhdCkgPT4ge1xuICAgIGNvbnN0IHNlY3MgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKChhdCAtIERhdGUubm93KCkpIC8gMTAwMCkpXG4gICAgaWYgKHNlY3MgPCA2MCkgcmV0dXJuIGBpbiAke3NlY3N9c2BcbiAgICBjb25zdCBtaW5zID0gTWF0aC5mbG9vcihzZWNzIC8gNjApXG4gICAgaWYgKG1pbnMgPCA2MCkgcmV0dXJuIGBpbiAke21pbnN9bSAke3NlY3MgJSA2MH1zYFxuICAgIHJldHVybiBgaW4gJHtNYXRoLmZsb29yKG1pbnMgLyA2MCl9aCAke21pbnMgJSA2MH1tYFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlNjaGVkdWxlZCB3YWtlLXVwc1wiIGhpbnQ9XCJqL2sgdG8gbW92ZSAgZW50ZXIgb3IgY3RybCt4IGNhbmNlbCAodHdpY2UpICBlc2MgY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAge3dha2V1cHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBwZW5kaW5nIHdha2UtdXBzICB0aGUgYWdlbnQgc2NoZWR1bGVzIHRoZW0gd2l0aCBzY2hlZHVsZV93YWtldXA8L3RleHQ+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXt3YWtldXBzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0SW5kZXh9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIGl0ZW1IZWlnaHQ9ezJ9XG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgICBvblN1Ym1pdD17KHcpID0+IG9uQ2FuY2VsKHcpfVxuICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsodywgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e2BcdTIzRjAgJHt3LmlkfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntjb3VudGRvd24ody5hdCl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke25ldyBEYXRlKHcuYXQpLnRvTG9jYWxlVGltZVN0cmluZygpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSwgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IEZHX1NPRlQgfX0+e3cubm90ZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIG1jcFN0YXR1cyhzdGF0dXMpIHtcbiAgY29uc3QgcGFsZXR0ZSA9IHtcbiAgICBjb25uZWN0ZWQ6IHsgaWNvbjogJ1x1MjVBQScsIGNvbG9yOiBhY2NlbnQoKSB9LFxuICAgIGNvbm5lY3Rpbmc6IHsgaWNvbjogJ1x1MjVDQycsIGNvbG9yOiAnI2ZiYmYyNCcgfSxcbiAgICBlcnJvcjogeyBpY29uOiAnXHUyNzE3JywgY29sb3I6IFJFRCB9LFxuICAgIGRpc2FibGVkOiB7IGljb246ICdcdTI1QUInLCBjb2xvcjogTVVURUQgfSxcbiAgICBpZGxlOiB7IGljb246ICdcdTI1QUInLCBjb2xvcjogTVVURUQgfSxcbiAgfVxuICByZXR1cm4gcGFsZXR0ZVtzdGF0dXNdIHx8IHBhbGV0dGUuaWRsZVxufVxuXG5mdW5jdGlvbiBGb3JtRmllbGQoeyBsYWJlbCwgYWN0aXZlLCBjaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PntsYWJlbH08L3RleHQ+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIE1jcFNlcnZlckZvcm0oeyBmb2N1c2VkLCBzZXJ2ZXIsIG9uU2F2ZSwgb25JbnZhbGlkLCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IGluaXRpYWwgPSBzZXJ2ZXIgPyBwYXJzZVNlcnZlclNwZWMoc2VydmVyLmNvbW1hbmQpIDogbnVsbFxuICBjb25zdCBlZGl0aW5nID0gISFzZXJ2ZXJcbiAgY29uc3QgW25hbWUsIHNldE5hbWVdID0gY3JlYXRlU2lnbmFsKHNlcnZlcj8ubmFtZSB8fCAnJylcbiAgY29uc3QgW3Njb3BlLCBzZXRTY29wZV0gPSBjcmVhdGVTaWduYWwoc2VydmVyPy5zY29wZSB8fCAnZ2xvYmFsJylcbiAgY29uc3QgW3RyYW5zcG9ydCwgc2V0VHJhbnNwb3J0XSA9IGNyZWF0ZVNpZ25hbChpbml0aWFsPy50eXBlIHx8ICdzdGRpbycpXG4gIGNvbnN0IFt0YXJnZXQsIHNldFRhcmdldF0gPSBjcmVhdGVTaWduYWwoaW5pdGlhbD8udHlwZSA9PT0gJ2h0dHAnID8gaW5pdGlhbC51cmwgOiBzZXJ2ZXI/LmNvbW1hbmQgfHwgJycpXG4gIGNvbnN0IGluaXRpYWxIZWFkZXJzID0gaW5pdGlhbD8udHlwZSA9PT0gJ2h0dHAnXG4gICAgPyBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmtleXMoaW5pdGlhbC5oZWFkZXJzKS5tYXAoKG5hbWUpID0+IFtuYW1lLCBSRURBQ1RFRF9IRUFERVJdKSlcbiAgICA6IHt9XG4gIGNvbnN0IFtoZWFkZXJzLCBzZXRIZWFkZXJzXSA9IGNyZWF0ZVNpZ25hbChmb3JtYXRIdHRwU2VydmVyU3BlYygnJywgaW5pdGlhbEhlYWRlcnMpLnRyaW0oKSlcblxuICBjb25zdCBmbSA9IHVzZUZvY3VzKHsgaW5pdGlhbDogZWRpdGluZyA/ICd0cmFuc3BvcnQnIDogJ25hbWUnIH0pXG4gIGlmICghZWRpdGluZykge1xuICAgIGZtLml0ZW0oJ25hbWUnKVxuICAgIGZtLml0ZW0oJ3Njb3BlJylcbiAgfVxuICBmbS5pdGVtKCd0cmFuc3BvcnQnKVxuICBmbS5pdGVtKCd0YXJnZXQnKVxuICBpZiAodHJhbnNwb3J0KCkgPT09ICdodHRwJykgZm0uaXRlbSgnaGVhZGVycycpXG4gIGZtLml0ZW0oJ3NhdmUnKVxuICBmbS5pdGVtKCdjYW5jZWwnKVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2FuY2VsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGh0dHAgPSB0cmFuc3BvcnQoKSA9PT0gJ2h0dHAnXG5cbiAgY29uc3Qgc3VibWl0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlck5hbWUgPSBuYW1lKCkudHJpbSgpXG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQoKS50cmltKClcbiAgICBpZiAoIXNlcnZlck5hbWUgfHwgL1xccy8udGVzdChzZXJ2ZXJOYW1lKSkgcmV0dXJuIG9uSW52YWxpZCgnbmFtZSBpcyByZXF1aXJlZCBhbmQgY2Fubm90IGNvbnRhaW4gc3BhY2VzJylcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gb25JbnZhbGlkKGh0dHAgPyAndXJsIGlzIHJlcXVpcmVkJyA6ICdjb21tYW5kIGlzIHJlcXVpcmVkJylcbiAgICBpZiAoaHR0cCAmJiAhL15odHRwcz86XFwvXFwvLy50ZXN0KHZhbHVlKSkgcmV0dXJuIG9uSW52YWxpZCgndXJsIG11c3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vJylcbiAgICBpZiAoIWh0dHAgJiYgL15odHRwcz86XFwvXFwvLy50ZXN0KHZhbHVlKSkgcmV0dXJuIG9uSW52YWxpZCgnYSBzdGRpbyBjb21tYW5kIGNhbm5vdCBzdGFydCB3aXRoIGEgdXJsOyBwaWNrIHRoZSBodHRwIHRyYW5zcG9ydCcpXG4gICAgY29uc3QgZXh0cmEgPSBoZWFkZXJzKCkudHJpbSgpXG4gICAgbGV0IHNwZWMgPSBodHRwICYmIGV4dHJhID8gYCR7dmFsdWV9ICR7ZXh0cmF9YCA6IHZhbHVlXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2VydmVyU3BlYyhzcGVjKVxuICAgICAgaWYgKHBhcnNlZC50eXBlID09PSAnaHR0cCcgJiYgaW5pdGlhbD8udHlwZSA9PT0gJ2h0dHAnKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2hlYWRlciwgaGVhZGVyVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZC5oZWFkZXJzKSkge1xuICAgICAgICAgIGlmIChoZWFkZXJWYWx1ZSA9PT0gUkVEQUNURURfSEVBREVSICYmIGluaXRpYWwuaGVhZGVyc1toZWFkZXJdICE9PSB1bmRlZmluZWQpIHBhcnNlZC5oZWFkZXJzW2hlYWRlcl0gPSBpbml0aWFsLmhlYWRlcnNbaGVhZGVyXVxuICAgICAgICB9XG4gICAgICAgIHNwZWMgPSBmb3JtYXRIdHRwU2VydmVyU3BlYyhwYXJzZWQudXJsLCBwYXJzZWQuaGVhZGVycylcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBvbkludmFsaWQoZXJyLm1lc3NhZ2UpXG4gICAgfVxuICAgIG9uU2F2ZShzZXJ2ZXJOYW1lLCBzcGVjLCBzY29wZSgpKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICB7IWVkaXRpbmcgJiYgKFxuICAgICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwibmFtZVwiIGFjdGl2ZT17Zm0uaXMoJ25hbWUnKX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgPFRleHRJbnB1dCBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCduYW1lJyl9IHBsYWNlaG9sZGVyPVwibGluZWFyXCIgb25DaGFuZ2U9e3NldE5hbWV9IC8+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgKX1cbiAgICAgIHshZWRpdGluZyAmJiAoXG4gICAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJzY29wZVwiIGFjdGl2ZT17Zm0uaXMoJ3Njb3BlJyl9PlxuICAgICAgICAgIDxSYWRpbyBvcHRpb25zPXtbJ2dsb2JhbCcsICdwcm9qZWN0J119IHNlbGVjdGVkPXtzY29wZSgpfSBvbkNoYW5nZT17c2V0U2NvcGV9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3Njb3BlJyl9IC8+XG4gICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgKX1cbiAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJ0cmFuc3BvcnRcIiBhY3RpdmU9e2ZtLmlzKCd0cmFuc3BvcnQnKX0+XG4gICAgICAgIDxSYWRpbyBvcHRpb25zPXtbJ3N0ZGlvJywgJ2h0dHAnXX0gc2VsZWN0ZWQ9e3RyYW5zcG9ydCgpfSBvbkNoYW5nZT17c2V0VHJhbnNwb3J0fSBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCd0cmFuc3BvcnQnKX0gLz5cbiAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgPEZvcm1GaWVsZCBsYWJlbD17aHR0cCA/ICd1cmwnIDogJ2NvbW1hbmQnfSBhY3RpdmU9e2ZtLmlzKCd0YXJnZXQnKX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCd0YXJnZXQnKX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtodHRwID8gJ2h0dHBzOi8vbWNwLmxpbmVhci5hcHAvbWNwJyA6ICducHggLXkgQG1vZGVsY29udGV4dHByb3RvY29sL3NlcnZlci1maWxlc3lzdGVtIC90bXAnfVxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXt0YXJnZXQoKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRUYXJnZXR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgIHtodHRwICYmIChcbiAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cImhlYWRlcnMgIG9wdGlvbmFsXCIgYWN0aXZlPXtmbS5pcygnaGVhZGVycycpfT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ2hlYWRlcnMnKX0gcGxhY2Vob2xkZXI9J0F1dGhvcml6YXRpb249XCJCZWFyZXIgLi4uXCIgWC1UZWFtPVwiY29yZVwiJyBpbml0aWFsVmFsdWU9e2hlYWRlcnMoKX0gb25DaGFuZ2U9e3NldEhlYWRlcnN9IC8+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAgKX1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9e2VkaXRpbmcgPyAnc2F2ZScgOiAnYWRkJ30gb25QcmVzcz17c3VibWl0fSBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCdzYXZlJyl9IC8+XG4gICAgICAgIDx0ZXh0PiAgPC90ZXh0PlxuICAgICAgICA8QnV0dG9uIGxhYmVsPVwiY2FuY2VsXCIgb25QcmVzcz17b25DYW5jZWx9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ2NhbmNlbCcpfSB2YXJpYW50PVwiZGltXCIgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNY3BQYW5lbCh7IHNlcnZlcnMsIGZvY3VzZWQsIG9uVG9nZ2xlLCBvblJlY29ubmVjdCwgb25SZW1vdmUsIG9uQWRkLCBvbkVkaXQsIG9uSW52YWxpZCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtmb3JtLCBzZXRGb3JtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdmlld2luZywgc2V0Vmlld2luZ10gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQgJiYgIWZvcm0oKSwgKCkgPT4gKHZpZXdpbmcoKSA/IHNldFZpZXdpbmcobnVsbCkgOiBvbkNsb3NlKCkpKVxuXG4gIGNvbnN0IHNlbGVjdGVkID0gKCkgPT4gc2VydmVyc1tNYXRoLm1pbihpbmRleCgpLCBzZXJ2ZXJzLmxlbmd0aCAtIDEpXSB8fCBudWxsXG4gIGNvbnN0IHZpZXdlZCA9ICgpID0+IHNlcnZlcnMuZmluZCgocykgPT4gcy5uYW1lID09PSB2aWV3aW5nKCkpIHx8IG51bGxcblxuICBpZiAodmlld2luZygpICYmIHZpZXdlZCgpKSB7XG4gICAgY29uc3Qgc2VydmVyID0gdmlld2VkKClcbiAgICBjb25zdCBkZXNjcmliZSA9ICh0KSA9PiB0LmRlc2NyaXB0aW9uLnJlcGxhY2UoL15cXFtbXlxcXV0qXFxdXFxzKi8sICcnKS50cmltKCkgfHwgJ25vIGRlc2NyaXB0aW9uJ1xuICAgIHJldHVybiAoXG4gICAgICA8UGFuZWxGcmFtZVxuICAgICAgICB0aXRsZT17YE1DUCBzZXJ2ZXJzICAke3NlcnZlci5uYW1lfSAgJHtzZXJ2ZXIudG9vbHMubGVuZ3RofSAke3NlcnZlci50b29scy5sZW5ndGggPT09IDEgPyAndG9vbCcgOiAndG9vbHMnfWB9XG4gICAgICAgIGhpbnQ9XCJqL2sgb3IgXHUyMTkxXHUyMTkzIHRvIHNjcm9sbCAgZXNjIGJhY2sgdG8gc2VydmVyc1wiXG4gICAgICA+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTQsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyB0b29scyByZXBvcnRlZCAgaXMgdGhlIHNlcnZlciBjb25uZWN0ZWQ/PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQ9e2ZvY3VzZWR9IHNjcm9sbGJhcj5cbiAgICAgICAgICAgICAge3NlcnZlci50b29scy5tYXAoKHQsIGkpID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IGtleT17dC5uYW1lfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3QubmFtZX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Rlc2NyaWJlKHQpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvUGFuZWxGcmFtZT5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lXG4gICAgICB0aXRsZT1cIk1DUCBzZXJ2ZXJzXCJcbiAgICAgIGhpbnQ9e2Zvcm0oKVxuICAgICAgICA/ICd0YWIgbW92ZXMgYmV0d2VlbiBmaWVsZHMgIGovayArIHNwYWNlIHBpY2tzIGEgcmFkaW8gb3B0aW9uICBlc2MgY2FuY2VscydcbiAgICAgICAgOiAnZW50ZXIgZW5hYmxlL2Rpc2FibGUgIHQgdG9vbHMgIGUgZWRpdCAgciByZWNvbm5lY3QgIGEgYWRkICBjdHJsK3ggcmVtb3ZlICh0d2ljZSkgIGVzYyBjbG9zZSd9XG4gICAgPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICB7Zm9ybSgpID8gKFxuICAgICAgICAgIDxNY3BTZXJ2ZXJGb3JtXG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgc2VydmVyPXtmb3JtKCkgPT09ICdhZGQnID8gbnVsbCA6IGZvcm0oKX1cbiAgICAgICAgICAgIG9uU2F2ZT17KG5hbWUsIHNwZWMsIHNjb3BlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmb3JtKCkgPT09ICdhZGQnKSBvbkFkZChuYW1lLCBzcGVjLCBzY29wZSlcbiAgICAgICAgICAgICAgZWxzZSBvbkVkaXQobmFtZSwgc3BlYylcbiAgICAgICAgICAgICAgc2V0Rm9ybShudWxsKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uSW52YWxpZD17b25JbnZhbGlkfVxuICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHNldEZvcm0obnVsbCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IHNlcnZlcnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBNQ1Agc2VydmVycyBjb25maWd1cmVkICBwcmVzcyBhIHRvIGFkZCBvbmU8L3RleHQ+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtzZXJ2ZXJzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0SW5kZXh9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17Nn1cbiAgICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICAgIGl0ZW1IZWlnaHQ9ezJ9XG4gICAgICAgICAgICBvblN1Ym1pdD17KHMpID0+IG9uVG9nZ2xlKHMubmFtZSl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhzLCB7IGFjdGl2ZSB9KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0ID0gbWNwU3RhdHVzKHMuc3RhdHVzKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc3QuY29sb3IgfX0+e3N0Lmljb259PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YCAke3MubmFtZS5wYWRFbmQoTWF0aC5tYXgoMTQsIHMubmFtZS5sZW5ndGggKyAxKSl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHMuc3RhdHVzID09PSAnZXJyb3InID8gUkVEIDogTVVURUQgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cy5zdGF0dXMgPT09ICdlcnJvcicgPyBzLmVycm9yIDogcy5zdGF0dXMgPT09ICdjb25uZWN0ZWQnID8gYCR7cy50b29sQ291bnR9IHRvb2xzYCA6IHMuc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQ+eycgICAgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT57c2hvcnRlbkhvbWUocmVkYWN0U2VydmVyU3BlYyhzLmNvbW1hbmQpKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7cy5zY29wZSA9PT0gJ3Byb2plY3QnID8gJ3Byb2plY3QnIDogJ2dsb2JhbCd9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgICB7IWZvcm0oKSAmJiAoXG4gICAgICAgIDxNY3BLZXlzXG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBvbktleT17KGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcyA9IHNlbGVjdGVkKClcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdhJykgc2V0Rm9ybSgnYWRkJylcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAnZScpIHNldEZvcm0ocylcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAncicpIG9uUmVjb25uZWN0KHMubmFtZSlcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAncmVtb3ZlJykgb25SZW1vdmUocy5uYW1lKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICd0Jykgc2V0Vmlld2luZyhzLm5hbWUpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIE1jcEtleXMoeyBmb2N1c2VkLCBvbktleSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIG9uS2V5KCdyZW1vdmUnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWV2ZW50LmN0cmwgJiYgWydhJywgJ2UnLCAncicsICd0J10uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgb25LZXkoZXZlbnQua2V5KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIHJldHVybiBudWxsXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBUyxRQUFBQSxhQUFZO0FBQ3JCLFNBQVMsY0FBYyxpQkFBaUI7QUFDeEMsU0FBUyxhQUFhLGVBQWUsa0JBQWtCO0FBQ3ZELFNBQVMsdUJBQXVCO0FBQ2hDLFNBQVMsaUJBQWlCLHlCQUF5QjtBQUNuRCxTQUFTLFdBQVcsY0FBYyxvQkFBb0I7QUFDdEQsU0FBUyxrQkFBa0I7QUFDM0IsU0FBUyx3QkFBd0I7QUFDakMsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxlQUFlLGFBQWEsYUFBYSwyQkFBMkI7QUFDN0UsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxhQUFBQyxrQkFBaUI7QUFDMUIsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxxQkFBcUI7QUFDOUIsU0FBUyxlQUFlO0FBQ3hCLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsbUJBQW1CO0FB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QUFJLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDNUgsS0FBSyxXQUFXLElBQUk7QUFDcEIsS0FBSyxJQUFJLFdBQVc7IiwKICAibmFtZXMiOiBbImpvaW4iLCAibWFrZUV2ZW50IiwgImZ1enp5U2NvcmUiLCAibW9kZWxzIiwgInByb3ZpZGVycyIsICJjaGF0Z3B0IiwgImNhdGFsb2dEYXRhIiwgImNvZGV4Q3JlZHMiLCAiY29uZmlnIiwgImJvb3QiLCAic2hlbGxzIiwgImRpc2NvdmVyS2V5cyIsICJhcHBseUtleXMiLCAibG9hZENhdGFsb2ciLCAiZXh0cmFjdE1vZGVscyIsICJhZGhvY01vZGVsIiwgImxvYWRDb2RleE1vZGVscyIsICJvcGVuYWlDb25uZWN0ZWQiLCAib3BlbmFpQ3JlZGVudGlhbHMiLCAiZGVmYXVsdE1vZGVsIiwgImZ1enp5U2NvcmUiLCAiY2hhdGdwdCIsICJwcm92aWRlcnMiLCAiY2F0YWxvZ0RhdGEiLCAibW9kZWxzIiwgInJlc29sdmVNb2RlbCIsICJydW5UdXJuIiwgInJlYWRDb25maWciLCAiY29uZmlnIiwgImRpc2NvdmVyS2V5cyIsICJhcHBseUtleXMiLCAiZGVmYXVsdE1vZGVsIiwgImxvYWRDYXRhbG9nIiwgImV4dHJhY3RNb2RlbHMiLCAibG9hZENvZGV4TW9kZWxzIiwgIm9wZW5haUNvbm5lY3RlZCIsICJvcGVuYWlDcmVkZW50aWFscyIsICJyZWFkQ29uZmlnIiwgImJ1aWxkUHJvamVjdEJvb3QiLCAiY3JlYXRlU2hlbGxNYW5hZ2VyIiwgImNyZWF0ZVNpZ25hbCIsICJjcmVhdGVTaWduYWwiLCAiaG9tZWRpciIsICJwZW5kaW5nIiwgImZhaWxlZCIsICJwZW5kaW5nIiwgImNyZWF0ZVNpZ25hbCIsICJNZW51IiwgIlNjcm9sbEJveCIsICJTcGlubmVyIiwgIlRleHRBcmVhIiwgInVzZUZvY3VzIiwgInVzZUlucHV0IiwgInVzZUxheW91dCIsICJ1c2VNb3VzZSIsICJ1c2VSZXNpemUiLCAiZnV6enlTY29yZSIsICJjcmVhdGVTaWduYWwiLCAiY3JlYXRlU2lnbmFsIiwgInRoZW1lIiwgImNvbXBhY3ROdW1iZXIiLCAid2lkdGgiLCAianN4IiwgImhpZ2hsaWdodCIsICJlYXNlIiwgImxpbmVhciIsICJ1c2VBbmltYXRlZCIsICJqc3giLCAianN4cyIsICJtaXhDb2xvciIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgImxpbmVhciIsICJmYWlsZWQiLCAibGFiZWwiLCAiY3JlYXRlU2lnbmFsIiwgImpzeCIsICJqc3hzIiwgImNyZWF0ZVNpZ25hbCIsICJjcmVhdGVTaWduYWwiLCAiQnV0dG9uIiwgIlRleHRJbnB1dCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAiaXRlbSIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAiVGV4dElucHV0IiwgImNyZWF0ZVNpZ25hbCIsICJqc3giLCAianN4cyIsICJ3aWR0aCIsICJ2ZXJzaW9uIiwgImNyZWF0ZVNpZ25hbCIsICJNYXJrZG93biIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJ1c2VJbnB1dCIsICJNYXJrZG93biIsICJjcmVhdGVTaWduYWwiLCAiQnV0dG9uIiwgImVhc2UiLCAiTWVudSIsICJTY3JvbGxCb3giLCAiVGV4dElucHV0IiwgInVzZUFuaW1hdGVkIiwgInVzZUlucHV0IiwgInVzZUludGVydmFsIiwgInVzZUxheW91dCIsICJmdXp6eVNjb3JlIiwgInJhbmtGdXp6eSIsICJqc3giLCAianN4cyIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAibW9kZWxzIiwgImNyZWF0ZVNpZ25hbCIsICJNZW51IiwgIlNjcm9sbEJveCIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgInVzZUxheW91dCIsICJ3aWR0aCIsICJ1c2VkIiwgInByb3ZpZGVycyIsICJ3YWtldXBzIiwgInVzZUludGVydmFsIiwgIm5hbWUiLCAiVGV4dElucHV0IiwgImpzeCIsICJqc3hzIiwgInVzZUxheW91dCIsICJ1c2VJbnB1dCIsICJ1c2VNb3VzZSIsICJjcmVhdGVTaWduYWwiLCAiYm9vdCIsICJ2ZXJzaW9uIiwgIm1vZGVscyIsICJ1c2VSZXNpemUiLCAid2lkdGgiLCAiZGVmYXVsdE1vZGVsIiwgImhvbWVkaXIiLCAiYXJtZWQiLCAidXNlRm9jdXMiLCAiaXRlbXMiLCAiZnV6enlTY29yZSIsICJTY3JvbGxCb3giLCAiVGV4dEFyZWEiLCAiTWVudSIsICJwZW5kaW5nIiwgImVsYXBzZWQiLCAiU3Bpbm5lciIsICJjb21wYWN0TnVtYmVyIiwgImpzeCIsICJpc0Rldkluc3RhbGwiLCAicnVuVXBkYXRlIiwgImZldGNoTGF0ZXN0VmVyc2lvbiIsICJuZXdlclZlcnNpb24iLCAicnVuSGVhZGxlc3MiLCAicnVuU2hlbGwiLCAiZGlzY292ZXJLZXlzIiwgIm9wZW5haUNvbm5lY3RlZCIsICJhcHBseUtleXMiLCAibG9hZENhdGFsb2ciLCAib3BlbmFpQ3JlZGVudGlhbHMiLCAiZXh0cmFjdE1vZGVscyIsICJsb2FkQ29kZXhNb2RlbHMiLCAiY3JlYXRlU2hlbGxNYW5hZ2VyIiwgImJ1aWxkUHJvamVjdEJvb3QiLCAicmVhZENvbmZpZyIsICJkZWZhdWx0TW9kZWwiXQp9Cg==
5268
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9tb2RlbC1ydW50aW1lLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS9hcHAuanN4IiwgIi4uL3NyYy91aS9jb21wb3Nlci1jb21tYW5kcy5qcyIsICIuLi9zcmMvdWkvY29tbWFuZC1mb3JtLmpzeCIsICIuLi9zcmMvdWkvdGhlbWUuanMiLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzIiwgIi4uL3NyYy9zY3JlZW4tY2FwdHVyZS5qcyIsICIuLi9zcmMvdWkvY29tcG9zZXItZmlsZXMuanMiLCAiLi4vc3JjL3VpL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMiLCAiLi4vc3JjL3VpL2hpZ2hsaWdodC5qcyIsICIuLi9zcmMvdWkvY29udGV4dC1iYXIuanMiLCAiLi4vc3JjL3VpL2FuaW1hdGVkLXZhbHVlLmpzeCIsICIuLi9zcmMvdWkvdHJhbnNjcmlwdC5qc3giLCAiLi4vc3JjL3VpL2NvbnZlcnNhdGlvbi1zZWFyY2gtdmlldy5qc3giLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQtd2luZG93LmpzIiwgIi4uL3NyYy91aS9xdWVzdGlvbi1mb3JtLmpzeCIsICIuLi9zcmMvdWkvZW1wdHktc3RhdGUuanN4IiwgIi4uL3NyYy91aS9oZWxwLmpzeCIsICIuLi9zcmMvdWkvcGFuZWxzLmpzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IGRpc2NvdmVyS2V5cywgYXBwbHlLZXlzIH0gZnJvbSAncGljb2NvZGUtY29yZS9rZXlzLmpzJ1xuaW1wb3J0IHsgbG9hZENhdGFsb2csIGV4dHJhY3RNb2RlbHMsIGFkaG9jTW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NhdGFsb2cuanMnXG5pbXBvcnQgeyBsb2FkQ29kZXhNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvZGV4LW1vZGVscy5qcydcbmltcG9ydCB7IG9wZW5haUNvbm5lY3RlZCwgb3BlbmFpQ3JlZGVudGlhbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgZmluZE1vZGVsLCBkZWZhdWx0TW9kZWwsIGVzdGltYXRlQ29zdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbW9kZWxzLmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0Qm9vdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYm9vdC5qcydcbmltcG9ydCB7IGNyZWF0ZVNoZWxsTWFuYWdlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2hlbGxzLmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2Vzc2lvbiwgb3BlblNlc3Npb24sIGxvYWRTZXNzaW9uLCBvblNlc3Npb25Xcml0ZUVycm9yIH0gZnJvbSAncGljb2NvZGUtY29yZS9zZXNzaW9uLmpzJ1xuaW1wb3J0IHsgc2Vzc2lvbnNEaXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3BhdGhzLmpzJ1xuaW1wb3J0IHsgbWFrZUV2ZW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9ldmVudHMuanMnXG5pbXBvcnQgeyBkZXJpdmVTdGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlVG9vbHNldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvaW5kZXguanMnXG5pbXBvcnQgeyBydW5UdXJuIH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC5qcydcbmltcG9ydCB7IGJ1aWxkU3lzdGVtUHJvbXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9zeXN0ZW0tcHJvbXB0LmpzJ1xuaW1wb3J0IHsgbWVtb3J5SW5kZXggfSBmcm9tICdwaWNvY29kZS1jb3JlL21lbW9yeS5qcydcbmltcG9ydCB7IGZ1enp5U2NvcmUgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgZmluYWxpemVVc2VyQ29udGVudCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYXR0YWNobWVudHMuanMnXG5cbmZ1bmN0aW9uIHJlc29sdmVNb2RlbChtb2RlbHMsIHByb3ZpZGVycywgbmFtZSkge1xuICBpZiAoIW5hbWUpIHJldHVybiBudWxsXG4gIGNvbnN0IGV4YWN0ID0gbW9kZWxzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gbmFtZSlcbiAgaWYgKGV4YWN0KSByZXR1cm4gZXhhY3RcbiAgaWYgKG5hbWUuaW5jbHVkZXMoJy8nKSkgcmV0dXJuIGFkaG9jTW9kZWwobmFtZSwgcHJvdmlkZXJzKVxuICBjb25zdCBzY29yZWQgPSBtb2RlbHNcbiAgICAuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpXG4gICAgLm1hcCgobSkgPT4gW2Z1enp5U2NvcmUobmFtZSwgbS5uYW1lKSwgbV0pXG4gICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAuc29ydCgoYSwgYikgPT4gYlswXSAtIGFbMF0pXG4gIHJldHVybiBzY29yZWRbMF0/LlsxXSB8fCBudWxsXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRTdGRpbigpIHtcbiAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpIHJldHVybiAnJ1xuICBsZXQgZGF0YSA9ICcnXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcHJvY2Vzcy5zdGRpbikge1xuICAgIGRhdGEgKz0gY2h1bmtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiA0MDAwMDApIGJyZWFrXG4gIH1cbiAgcmV0dXJuIGRhdGEuc2xpY2UoMCwgNDAwMDAwKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSGVhZGxlc3Mob3B0cykge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGxvZyA9IG9wdHMucXVpZXQgPyAoKSA9PiB7fSA6IChsaW5lKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShsaW5lICsgJ1xcbicpXG5cbiAgb25TZXNzaW9uV3JpdGVFcnJvcigoZXJyLCBmaWxlKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogY291bGQgbm90IHdyaXRlICR7ZmlsZX06ICR7ZXJyLm1lc3NhZ2V9XFxuYCkpXG5cbiAgY29uc3QgY2hhdGdwdCA9IGF3YWl0IG9wZW5haUNvbm5lY3RlZCgpXG4gIGNvbnN0IHByb3ZpZGVycyA9IFsuLi5hcHBseUtleXMoZGlzY292ZXJLZXlzKCkpLCAuLi4oY2hhdGdwdCA/IFsnY29kZXgnXSA6IFtdKV1cbiAgaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZSgncGljbzogbm8gY3JlZGVudGlhbHMgZm91bmQgKHNldCBhIHByb3ZpZGVyIGtleSBvciBydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICByZXR1cm4gMVxuICB9XG4gIGNvbnN0IGNhdGFsb2dEYXRhID0gYXdhaXQgbG9hZENhdGFsb2coKVxuICBjb25zdCBjb2RleENyZWRzID0gY2hhdGdwdCA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IG1vZGVscyA9IFtcbiAgICAuLi5leHRyYWN0TW9kZWxzKGNhdGFsb2dEYXRhLCBbJ2dvb2dsZScsICdhbnRocm9waWMnLCAnb3BlbmFpJywgJ3hhaSddKS5tYXAoKG0pID0+ICh7XG4gICAgICAuLi5tLFxuICAgICAgYXZhaWxhYmxlOiBwcm92aWRlcnMuaW5jbHVkZXMobS5wcm92aWRlciksXG4gICAgfSkpLFxuICAgIC4uLihhd2FpdCBsb2FkQ29kZXhNb2RlbHMoY29kZXhDcmVkcykpLm1hcCgobSkgPT4gKHsgLi4ubSwgYXZhaWxhYmxlOiBjaGF0Z3B0IH0pKSxcbiAgXVxuICBjb25zdCBjb25maWcgPSBhd2FpdCByZWFkQ29uZmlnKClcblxuICBjb25zdCBtb2RlbCA9IHJlc29sdmVNb2RlbChtb2RlbHMsIHByb3ZpZGVycywgb3B0cy5tb2RlbClcbiAgICB8fCAoY29uZmlnLmRlZmF1bHRNb2RlbCAmJiBtb2RlbHMuZmluZCgobSkgPT4gbS5uYW1lID09PSBjb25maWcuZGVmYXVsdE1vZGVsICYmIG0uYXZhaWxhYmxlKSlcbiAgICB8fCBkZWZhdWx0TW9kZWwobW9kZWxzKVxuICBpZiAoIW1vZGVsIHx8IG1vZGVsLmF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogbm8gdXNhYmxlIG1vZGVsJHtvcHRzLm1vZGVsID8gYCBtYXRjaGluZyBcIiR7b3B0cy5tb2RlbH1cImAgOiAnJ31cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbiAgY29uc3QgZWZmb3J0ID0gb3B0cy5lZmZvcnQgPz8gKG1vZGVsLmVmZm9ydCA/ICdhdXRvJyA6IG51bGwpXG5cbiAgY29uc3QgYm9vdCA9IGF3YWl0IGJ1aWxkUHJvamVjdEJvb3QocHJvY2Vzcy5jd2QoKSlcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtib290Lm1jcC5jb25uZWN0QWxsKCksIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMDAwKSldKVxuICBjb25zdCBzaGVsbHMgPSBjcmVhdGVTaGVsbE1hbmFnZXIoKVxuXG4gIGxldCBzZXNzaW9uXG4gIGxldCBldmVudHMgPSBbXVxuICBpZiAob3B0cy5yZXN1bWUpIHtcbiAgICBjb25zdCBmaWxlID0gb3B0cy5yZXN1bWUuaW5jbHVkZXMoJy8nKSA/IG9wdHMucmVzdW1lIDogam9pbihzZXNzaW9uc0Rpcihib290LnJvb3QpLCBgJHtvcHRzLnJlc3VtZX0uanNvbmxgKVxuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRTZXNzaW9uKGZpbGUpXG4gICAgc2Vzc2lvbiA9IG9wZW5TZXNzaW9uKHsgZmlsZSwgaGVhZGVyOiBsb2FkZWQuaGVhZGVyIH0pXG4gICAgZXZlbnRzID0gbG9hZGVkLmV2ZW50c1xuICB9IGVsc2Uge1xuICAgIHNlc3Npb24gPSBjcmVhdGVTZXNzaW9uKHsgY3dkOiBib290LmN3ZCwgcm9vdDogYm9vdC5yb290IH0pXG4gIH1cblxuICBjb25zdCBwZXJzaXN0ID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQpXG4gICAgc2Vzc2lvbi5hcHBlbmQoZXZlbnQpXG4gICAgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoZXZlbnQpICsgJ1xcbicpXG4gIH1cblxuICBjb25zdCBzdGRpbkRhdGEgPSBhd2FpdCByZWFkU3RkaW4oKVxuICBjb25zdCBwcm9tcHRUZXh0ID0gc3RkaW5EYXRhID8gYCR7b3B0cy5wcm9tcHR9XFxuXFxuW3BpcGVkIGlucHV0XVxcbiR7c3RkaW5EYXRhfWAgOiBvcHRzLnByb21wdFxuICBjb25zdCB7IGNvbnRlbnQgfSA9IGZpbmFsaXplVXNlckNvbnRlbnQocHJvbXB0VGV4dCwgbmV3IE1hcCgpKVxuICBwZXJzaXN0KG1ha2VFdmVudCgnbWVzc2FnZScsIHsgbWVzc2FnZTogeyByb2xlOiAndXNlcicsIGNvbnRlbnQgfSB9KSlcblxuICBjb25zdCBkZXJpdmVkID0gZGVyaXZlU3RhdGUoZXZlbnRzKVxuICBjb25zdCBsb2FkZWRCZWZvcmUgPSBuZXcgU2V0KGJvb3QudHJhY2tlci5sb2FkZWQpXG4gIGNvbnN0IHsgdG9vbHMsIHJlY29yZGVyIH0gPSBjcmVhdGVUb29sc2V0KHtcbiAgICBjd2Q6IGJvb3QuY3dkLFxuICAgIHRyYWNrZXI6IGJvb3QudHJhY2tlcixcbiAgICBza2lsbHM6IGJvb3Quc2tpbGxzLFxuICAgIHNoZWxscyxcbiAgICBtZW1vcnk6IGJvb3QubWVtb3J5LFxuICAgIG1jcFRvb2xzOiBib290Lm1jcC50b29scygpLFxuICAgIHVzZXJUb29sczogW10sXG4gICAgbWF4VG9vbENhbGxzOiBvcHRzLm1heFRvb2xDYWxscyA/PyA1MCxcbiAgfSlcblxuICBsZXQgYXV0aCA9IG51bGxcbiAgaWYgKG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnKSB7XG4gICAgYXV0aCA9IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbClcbiAgICBpZiAoIWF1dGgpIHtcbiAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKCdwaWNvOiBjb2RleCBtb2RlbHMgbmVlZCBhIENoYXRHUFQgc2lnbi1pbiAocnVuIHBpY28gLS1jb25uZWN0KVxcbicpXG4gICAgICBhd2FpdCBzZXNzaW9uLmZsdXNoKClcbiAgICAgIHJldHVybiAxXG4gICAgfVxuICB9XG5cbiAgbG9nKGBwaWNvICAke21vZGVsLm5hbWV9JHtlZmZvcnQgPyBgICAke2VmZm9ydH1gIDogJyd9ICBzZXNzaW9uICR7c2Vzc2lvbi5pZH1gKVxuICBsZXQgdGhvdWdodHMgPSAnJ1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5UdXJuKHtcbiAgICBoaXN0b3J5OiBkZXJpdmVkLnByb3ZpZGVySGlzdG9yeSxcbiAgICB0b29scyxcbiAgICByZWNvcmRlcixcbiAgICBtb2RlbE5hbWU6IG1vZGVsLm5hbWUsXG4gICAgZWZmb3J0LFxuICAgIGF1dGgsXG4gICAgc3lzdGVtOiBidWlsZFN5c3RlbVByb21wdCh7XG4gICAgICBjd2Q6IGJvb3QuY3dkLFxuICAgICAgY29udGV4dEZpbGVzOiBib290LnN0YXJ0dXBDb250ZXh0LmZpbGVzLFxuICAgICAgc2tpbGxzOiBib290LnNraWxscy5saXN0KCksXG4gICAgICBtZW1vcnlJbmRleFRleHQ6IG1lbW9yeUluZGV4KGF3YWl0IGJvb3QubWVtb3J5Lmxpc3QoKS5jYXRjaCgoKSA9PiBbXSksIGJvb3Qucm9vdCksXG4gICAgfSksXG4gICAgb25TdHJlYW06IChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0aGlua2luZycpIHRob3VnaHRzICs9IGV2ZW50LmNvbnRlbnRcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndG9vbF9jb21wbGV0ZScpIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSByZWNvcmRlci5lbnRyaWVzLmF0KC0xKVxuICAgICAgICBsb2coYCAgXHUyNzEzICR7ZW50cnk/Lm5hbWUgPz8gZXZlbnQuY2FsbC5mdW5jdGlvbi5uYW1lfSAgJHtlbnRyeT8udGl0bGUgPz8gJyd9YClcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC50eXBlID09PSAndG9vbF9lcnJvcicpIGxvZyhgICBcdTI3MTcgJHtldmVudC5jYWxsLmZ1bmN0aW9uLm5hbWV9ICAke2V2ZW50LmVycm9yLnNsaWNlKDAsIDEyMCl9YClcbiAgICB9LFxuICB9KVxuXG4gIGlmICh0aG91Z2h0cykgcGVyc2lzdChtYWtlRXZlbnQoJ3Rob3VnaHRzJywgeyB0ZXh0OiB0aG91Z2h0cyB9KSlcbiAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHJlc3VsdC5tZXNzYWdlcykgcGVyc2lzdChtYWtlRXZlbnQoJ21lc3NhZ2UnLCB7IG1lc3NhZ2UgfSkpXG4gIGZvciAoY29uc3QgZW50cnkgb2YgcmVjb3JkZXIuZW50cmllcykgcGVyc2lzdChtYWtlRXZlbnQoJ3Rvb2xfbWV0YScsIGVudHJ5KSlcbiAgZm9yIChjb25zdCBwYXRoIG9mIGJvb3QudHJhY2tlci5sb2FkZWQpIHtcbiAgICBpZiAoIWxvYWRlZEJlZm9yZS5oYXMocGF0aCkpIHBlcnNpc3QobWFrZUV2ZW50KCdjb250ZXh0X2ZpbGUnLCB7IHBhdGggfSkpXG4gIH1cbiAgaWYgKHJlc3VsdC51c2FnZSkgcGVyc2lzdChtYWtlRXZlbnQoJ3VzYWdlJywgeyBtb2RlbDogbW9kZWwubmFtZSwgdXNhZ2U6IHJlc3VsdC51c2FnZSwgbGFzdFByb21wdDogcmVzdWx0Lmxhc3RQcm9tcHRUb2tlbnMgfSkpXG4gIGlmIChyZXN1bHQuaW50ZXJydXB0ZWQpIHBlcnNpc3QobWFrZUV2ZW50KCdpbnRlcnJ1cHQnLCB7fSkpXG5cbiAgY29uc3QgcnVubmluZyA9IHNoZWxscy5ydW5uaW5nKClcbiAgaWYgKHJ1bm5pbmcgPiAwKSBsb2coYCAga2lsbGluZyAke3J1bm5pbmd9IGJhY2tncm91bmQgc2hlbGwke3J1bm5pbmcgPT09IDEgPyAnJyA6ICdzJ31gKVxuICBzaGVsbHMua2lsbEFsbCgpXG4gIGF3YWl0IGJvb3QubWNwLmNsb3NlQWxsKCkuY2F0Y2goKCkgPT4ge30pXG4gIC8vIHRoZSBjYWxsZXIgZXhpdHMgdGhlIHByb2Nlc3MgdGhlIG1vbWVudCB0aGlzIHJldHVybnMsIHdoaWNoIHdvdWxkIGRpc2NhcmRcbiAgLy8gZXZlcnkgYXBwZW5kIHN0aWxsIGluIGZsaWdodFxuICBhd2FpdCBzZXNzaW9uLmZsdXNoKClcblxuICBjb25zdCB0ZXh0ID0gcmVzdWx0Lm1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS5yb2xlID09PSAnYXNzaXN0YW50JyAmJiB0eXBlb2YgbS5jb250ZW50ID09PSAnc3RyaW5nJyAmJiBtLmNvbnRlbnQpLmF0KC0xKT8uY29udGVudCA/PyAnJ1xuICBjb25zdCBzdW1tYXJ5ID0ge1xuICAgIHRleHQsXG4gICAgc2Vzc2lvbjogc2Vzc2lvbi5pZCxcbiAgICBzZXNzaW9uRmlsZTogc2Vzc2lvbi5maWxlLFxuICAgIG1vZGVsOiBtb2RlbC5uYW1lLFxuICAgIHVzYWdlOiByZXN1bHQudXNhZ2UsXG4gICAgY29zdDogZXN0aW1hdGVDb3N0KGZpbmRNb2RlbChtb2RlbHMsIG1vZGVsLm5hbWUpLCByZXN1bHQudXNhZ2UpLFxuICAgIHRvb2xDYWxsczogcmVjb3JkZXIuZW50cmllcy5sZW5ndGgsXG4gICAgaW50ZXJydXB0ZWQ6IHJlc3VsdC5pbnRlcnJ1cHRlZCxcbiAgICBkdXJhdGlvbk1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICB9XG5cbiAgaWYgKG9wdHMuanNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoc3VtbWFyeSkgKyAnXFxuJylcbiAgZWxzZSBpZiAob3B0cy5zdHJlYW1Kc29uKSBwcm9jZXNzLnN0ZG91dC53cml0ZShKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdyZXN1bHQnLCAuLi5zdW1tYXJ5LCB0ZXh0OiB1bmRlZmluZWQsIGF0OiBEYXRlLm5vdygpIH0pICsgJ1xcbicpXG4gIGVsc2UgcHJvY2Vzcy5zdGRvdXQud3JpdGUodGV4dCArICdcXG4nKVxuXG4gIHJldHVybiByZXN1bHQuaW50ZXJydXB0ZWQgPyAxIDogMFxufVxuIiwgImltcG9ydCB7IGRpc2NvdmVyS2V5cywgYXBwbHlLZXlzIH0gZnJvbSAncGljb2NvZGUtY29yZS9rZXlzLmpzJ1xuaW1wb3J0IHsgbG9hZENhdGFsb2csIGV4dHJhY3RNb2RlbHMsIGFkaG9jTW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NhdGFsb2cuanMnXG5pbXBvcnQgeyBsb2FkQ29kZXhNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvZGV4LW1vZGVscy5qcydcbmltcG9ydCB7IG9wZW5haUNvbm5lY3RlZCwgb3BlbmFpQ3JlZGVudGlhbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgZGVmYXVsdE1vZGVsIH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNb2RlbFJ1bnRpbWUoKSB7XG4gIGNvbnN0IGNoYXRncHQgPSBhd2FpdCBvcGVuYWlDb25uZWN0ZWQoKVxuICBjb25zdCBwcm92aWRlcnMgPSBbLi4uYXBwbHlLZXlzKGRpc2NvdmVyS2V5cygpKSwgLi4uKGNoYXRncHQgPyBbJ2NvZGV4J10gOiBbXSldXG4gIGNvbnN0IGNhdGFsb2dEYXRhID0gYXdhaXQgbG9hZENhdGFsb2coKVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gY2hhdGdwdCA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IG1vZGVscyA9IFtcbiAgICAuLi5leHRyYWN0TW9kZWxzKGNhdGFsb2dEYXRhLCBbJ2dvb2dsZScsICdhbnRocm9waWMnLCAnb3BlbmFpJywgJ3hhaSddKS5tYXAoKG1vZGVsKSA9PiAoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICBhdmFpbGFibGU6IHByb3ZpZGVycy5pbmNsdWRlcyhtb2RlbC5wcm92aWRlciksXG4gICAgfSkpLFxuICAgIC4uLihhd2FpdCBsb2FkQ29kZXhNb2RlbHMoY29kZXhDcmVkZW50aWFscykpLm1hcCgobW9kZWwpID0+ICh7IC4uLm1vZGVsLCBhdmFpbGFibGU6IGNoYXRncHQgfSkpLFxuICBdXG4gIHJldHVybiB7IHByb3ZpZGVycywgbW9kZWxzLCBjb2RleENyZWRlbnRpYWxzIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNb2RlbChtb2RlbHMsIHByb3ZpZGVycywgbmFtZSkge1xuICBpZiAoIW5hbWUpIHJldHVybiBudWxsXG4gIGNvbnN0IGV4YWN0ID0gbW9kZWxzLmZpbmQoKG1vZGVsKSA9PiBtb2RlbC5uYW1lID09PSBuYW1lKVxuICBpZiAoZXhhY3QpIHJldHVybiBleGFjdFxuICBpZiAobmFtZS5pbmNsdWRlcygnLycpKSByZXR1cm4gYWRob2NNb2RlbChuYW1lLCBwcm92aWRlcnMpXG4gIGNvbnN0IGF2YWlsYWJsZSA9IG1vZGVscy5maWx0ZXIoKG1vZGVsKSA9PiBtb2RlbC5hdmFpbGFibGUgIT09IGZhbHNlKVxuICByZXR1cm4gYXZhaWxhYmxlXG4gICAgICAubWFwKChtb2RlbCkgPT4gW2Z1enp5U2NvcmUobmFtZSwgbW9kZWwubmFtZSksIG1vZGVsXSlcbiAgICAgIC5maWx0ZXIoKFtzY29yZV0pID0+IHNjb3JlID49IDApXG4gICAgICAuc29ydCgoYSwgYikgPT4gYlswXSAtIGFbMF0pWzBdPy5bMV1cbiAgICB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RNb2RlbCh7IG1vZGVscywgcHJvdmlkZXJzLCByZXF1ZXN0ZWQsIGNvbmZpZ3VyZWQgfSkge1xuICByZXR1cm4gcmVzb2x2ZU1vZGVsKG1vZGVscywgcHJvdmlkZXJzLCByZXF1ZXN0ZWQpXG4gICAgfHwgKGNvbmZpZ3VyZWQgJiYgbW9kZWxzLmZpbmQoKG1vZGVsKSA9PiBtb2RlbC5uYW1lID09PSBjb25maWd1cmVkICYmIG1vZGVsLmF2YWlsYWJsZSkpXG4gICAgfHwgZGVmYXVsdE1vZGVsKG1vZGVscylcbn1cbiIsICJpbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IHJ1blR1cm4gfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmNvbnN0IFNZU1RFTSA9ICh7IHBsYXRmb3JtLCBzaGVsbCwgY3dkIH0pID0+IGBHZW5lcmF0ZSBleGFjdGx5IG9uZSBzaGVsbCBjb21tYW5kIHRoYXQgc2F0aXNmaWVzIHRoZSB1c2VyJ3MgcmVxdWVzdC4gVGhlIG91dHB1dCBtdXN0IGJlIGEgdmFsaWQgc2hlbGwgY29tbWFuZCB3aXRob3V0IE1hcmtkb3duIGZvcm1hdHRpbmcuIElmIG11bHRpcGxlIHN0ZXBzIGFyZSByZXF1aXJlZCwgdHJ5IHRvIGNvbWJpbmUgdGhlbSB0b2dldGhlciB1c2luZyAmJi5cblxuRW52aXJvbm1lbnQ6XG4tIG9wZXJhdGluZyBzeXN0ZW06ICR7cGxhdGZvcm19XG4tIHNoZWxsOiAke3NoZWxsfVxuLSBjdXJyZW50IGRpcmVjdG9yeTogJHtjd2R9XG5cbk91dHB1dCBvbmx5IHRoZSBjb21tYW5kIGFzIG9uZSBsaW5lLiBEbyBub3QgdXNlIE1hcmtkb3duIGZvcm1hdHRpbmcgc3VjaCBhcyBcXGBcXGBcXGAuIERvIG5vdCBleHBsYWluIHRoZSBjb21tYW5kLiBEbyBub3QgZXhlY3V0ZSB0aGUgY29tbWFuZC5gXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpIHtcbiAgY29uc3QgY29tbWFuZCA9IHRleHQudHJpbSgpXG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgYW4gZW1wdHkgY29tbWFuZCcpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdcXDAnKSB8fCAvW1xcclxcbl0vLnRlc3QoY29tbWFuZCkpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIG1vcmUgdGhhbiBvbmUgbGluZScpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdgYGAnKSkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgTWFya2Rvd24gaW5zdGVhZCBvZiBhIGNvbW1hbmQnKVxuICByZXR1cm4gY29tbWFuZFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2hlbGwob3B0cywgZGVwZW5kZW5jaWVzID0ge30pIHtcbiAgY29uc3Qgc3RkZXJyID0gZGVwZW5kZW5jaWVzLnN0ZGVyciB8fCBwcm9jZXNzLnN0ZGVyclxuICBjb25zdCBzdGRvdXQgPSBkZXBlbmRlbmNpZXMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0XG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgKGRlcGVuZGVuY2llcy5yZWFkQ29uZmlnIHx8IHJlYWRDb25maWcpKClcbiAgICBjb25zdCBydW50aW1lID0gYXdhaXQgKGRlcGVuZGVuY2llcy5sb2FkTW9kZWxSdW50aW1lIHx8IGxvYWRNb2RlbFJ1bnRpbWUpKClcbiAgICBpZiAocnVudGltZS5wcm92aWRlcnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ25vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCBjb25maWd1cmVkTW9kZWwgPSBjb25maWcubW9kZWxzPy5zaGVsbFxuICAgIGNvbnN0IG1vZGVsID0gc2VsZWN0TW9kZWwoe1xuICAgICAgbW9kZWxzOiBydW50aW1lLm1vZGVscyxcbiAgICAgIHByb3ZpZGVyczogcnVudGltZS5wcm92aWRlcnMsXG4gICAgICByZXF1ZXN0ZWQ6IG9wdHMubW9kZWwsXG4gICAgICBjb25maWd1cmVkOiBjb25maWd1cmVkTW9kZWwgfHwgY29uZmlnLmRlZmF1bHRNb2RlbCxcbiAgICB9KVxuICAgIGNvbnN0IHJlcXVlc3RlZE5hbWUgPSBvcHRzLm1vZGVsIHx8IGNvbmZpZ3VyZWRNb2RlbFxuICAgIGlmICghbW9kZWwgfHwgbW9kZWwuYXZhaWxhYmxlID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyB1c2FibGUgbW9kZWwke3JlcXVlc3RlZE5hbWUgPyBgIG1hdGNoaW5nIFwiJHtyZXF1ZXN0ZWROYW1lfVwiYCA6ICcnfWApXG4gICAgfVxuXG4gICAgY29uc3QgYXV0aCA9IG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnID8gcnVudGltZS5jb2RleENyZWRlbnRpYWxzIDogbnVsbFxuICAgIGlmIChtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiAhYXV0aCkgdGhyb3cgbmV3IEVycm9yKCdjb2RleCBtb2RlbHMgbmVlZCBhIENoYXRHUFQgc2lnbi1pbiAocnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoZGVwZW5kZW5jaWVzLnJ1blR1cm4gfHwgcnVuVHVybikoe1xuICAgICAgaGlzdG9yeTogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiBvcHRzLnByb21wdCB9XSxcbiAgICAgIHRvb2xzOiBbXSxcbiAgICAgIHJlY29yZGVyOiBudWxsLFxuICAgICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgICAgZWZmb3J0OiBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2xvdycgOiBudWxsKSxcbiAgICAgIGF1dGgsXG4gICAgICBzeXN0ZW06IFNZU1RFTSh7XG4gICAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/ICdtYWNPUycgOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgICBzaGVsbDogYmFzZW5hbWUocHJvY2Vzcy5lbnYuU0hFTEwgfHwgJ3pzaCcpLFxuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICB9KSxcbiAgICB9KVxuICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IpXG4gICAgaWYgKHJlc3VsdC5pbnRlcnJ1cHRlZCkgdGhyb3cgbmV3IEVycm9yKCdjb21tYW5kIGdlbmVyYXRpb24gd2FzIGludGVycnVwdGVkJylcbiAgICBjb25zdCB0ZXh0ID0gcmVzdWx0Lm1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmIHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnKVxuICAgICAgLmF0KC0xKT8uY29udGVudCB8fCAnJ1xuICAgIHN0ZG91dC53cml0ZShjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpICsgJ1xcbicpXG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzdGRlcnIud3JpdGUoYHBpY286ICR7ZXJyb3IubWVzc2FnZX1cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgbW91bnQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBwYXJzZUFyZ3MsIFVTQUdFIH0gZnJvbSAnLi9jbGktYXJncy5qcydcbmltcG9ydCB7IGRpc2NvdmVyS2V5cywgYXBwbHlLZXlzLCBrZXlIaW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9rZXlzLmpzJ1xuaW1wb3J0IHsgZGVmYXVsdE1vZGVsIH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyBsb2FkQ2F0YWxvZywgZXh0cmFjdE1vZGVscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY2F0YWxvZy5qcydcbmltcG9ydCB7IGxvYWRDb2RleE1vZGVscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29kZXgtbW9kZWxzLmpzJ1xuaW1wb3J0IHsgb3BlbmFpQ29ubmVjdGVkLCBvcGVuYWlDcmVkZW50aWFscyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnXG5pbXBvcnQgeyByZWFkQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBkZXRlY3RUZXJtaW5hbFRoZW1lIH0gZnJvbSAncGljb2NvZGUtY29yZS90ZXJtaW5hbC10aGVtZS5qcydcbmltcG9ydCB7IGJ1aWxkUHJvamVjdEJvb3QgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Jvb3QuanMnXG5pbXBvcnQgeyBjcmVhdGVTaGVsbE1hbmFnZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3NoZWxscy5qcydcbmltcG9ydCB7IGNyZWF0ZVdha2V1cE1hbmFnZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3dha2V1cHMuanMnXG5pbXBvcnQgeyBjcmVhdGVHaXRTZXJ2aWNlIH0gZnJvbSAncGljb2NvZGUtY29yZS9naXQuanMnXG5pbXBvcnQgeyBjcmVhdGVDb250cm9sbGVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb250cm9sbGVyLmpzJ1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi91aS9hcHAuanN4J1xuaW1wb3J0IHsgREVGQVVMVF9BQ0NFTlQsIE1VVEVELCBzZXRQYWxldHRlLCBwYWxldHRlTGlzdCB9IGZyb20gJy4vdWkvdGhlbWUuanMnXG5cbmNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4uL3BhY2thZ2UuanNvbicsIGltcG9ydC5tZXRhLnVybCksICd1dGYtOCcpKVxuXG5sZXQgY2xpXG50cnkge1xuICBjbGkgPSBwYXJzZUFyZ3MocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxufSBjYXRjaCAoZXJyKSB7XG4gIGNvbnNvbGUuZXJyb3IoYHBpY286ICR7ZXJyLm1lc3NhZ2V9YClcbiAgY29uc29sZS5lcnJvcihVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWxwJykge1xuICBjb25zb2xlLmxvZyhVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd2ZXJzaW9uJykge1xuICBjb25zb2xlLmxvZyhwa2cudmVyc2lvbilcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd1cGRhdGUnKSB7XG4gIGNvbnN0IHsgaXNEZXZJbnN0YWxsLCBydW5VcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uIH0gPSBhd2FpdCBpbXBvcnQoJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJylcbiAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSB7XG4gICAgY29uc29sZS5lcnJvcigndGhpcyBwaWNvIHJ1bnMgZnJvbSBhIHNvdXJjZSBjaGVja291dDsgdXBkYXRlIGl0IHdpdGggZ2l0LCBub3QgbnBtJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICBpZiAobGF0ZXN0ICYmICFuZXdlclZlcnNpb24ocGtnLnZlcnNpb24sIGxhdGVzdCkpIHtcbiAgICBjb25zb2xlLmxvZyhgcGljbyB2JHtwa2cudmVyc2lvbn0gaXMgYWxyZWFkeSB0aGUgbGF0ZXN0YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGluZyBwaWNvY29kZSAke2xhdGVzdCA/IGB0byB2JHtsYXRlc3R9IGAgOiAnJ312aWEgbnBtLi4uYClcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVXBkYXRlKClcbiAgaWYgKHJlc3VsdC5vaykge1xuICAgIGNvbnNvbGUubG9nKGB1cGRhdGVkJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGUgZmFpbGVkOlxcbiR7cmVzdWx0Lm91dHB1dH1gKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ2Nvbm5lY3QnKSB7XG4gIGNvbnN0IHsgY29ubmVjdE9wZW5BSSB9ID0gYXdhaXQgaW1wb3J0KCdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJylcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmVycm9yKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjb25zdCB7IGVtYWlsIH0gPSBhd2FpdCBjb25uZWN0T3BlbkFJKHsgb25Vcmw6ICh1cmwpID0+IGNvbnNvbGUuZXJyb3IoYGlmIHRoZSBicm93c2VyIGRpZCBub3Qgb3BlbiwgdmlzaXQ6XFxuJHt1cmx9YCkgfSlcbiAgICBjb25zb2xlLmxvZyhgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J31gKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKGBjb25uZWN0IGZhaWxlZDogJHtlcnIubWVzc2FnZX1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWFkbGVzcycpIHtcbiAgY29uc3QgeyBydW5IZWFkbGVzcyB9ID0gYXdhaXQgaW1wb3J0KCcuL2hlYWRsZXNzLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1bkhlYWRsZXNzKGNsaSkpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdzaGVsbCcpIHtcbiAgY29uc3QgeyBydW5TaGVsbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3NoZWxsLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1blNoZWxsKGNsaSkpXG59XG5cbmNvbnN0IGtleXMgPSBkaXNjb3ZlcktleXMoKVxuY29uc3QgY2hhdGdwdCA9IGF3YWl0IG9wZW5haUNvbm5lY3RlZCgpXG5jb25zdCBwcm92aWRlcnMgPSBbLi4uYXBwbHlLZXlzKGtleXMpLCAuLi4oY2hhdGdwdCA/IFsnY29kZXgnXSA6IFtdKV1cbmNvbnN0IGNhdGFsb2dEYXRhID0gYXdhaXQgbG9hZENhdGFsb2coKVxuY29uc3QgY29kZXhDcmVkcyA9IGNoYXRncHQgPyBhd2FpdCBvcGVuYWlDcmVkZW50aWFscygpLmNhdGNoKCgpID0+IG51bGwpIDogbnVsbFxuY29uc3QgbW9kZWxzID0gW1xuICAuLi5leHRyYWN0TW9kZWxzKGNhdGFsb2dEYXRhLCBbJ2dvb2dsZScsICdhbnRocm9waWMnLCAnb3BlbmFpJywgJ3hhaSddKS5tYXAoKG0pID0+ICh7XG4gICAgLi4ubSxcbiAgICBhdmFpbGFibGU6IHByb3ZpZGVycy5pbmNsdWRlcyhtLnByb3ZpZGVyKSxcbiAgICBrZXlIaW50OiBrZXlIaW50KG0ucHJvdmlkZXIpLFxuICB9KSksXG4gIC4uLihhd2FpdCBsb2FkQ29kZXhNb2RlbHMoY29kZXhDcmVkcykpLm1hcCgobSkgPT4gKHtcbiAgICAuLi5tLFxuICAgIGNvbnRleHQ6IG0uY29udGV4dFxuICAgICAgPz8gY2F0YWxvZ0RhdGEub3BlbmFpPy5tb2RlbHM/LlttLm5hbWUuc3BsaXQoJy8nKVsxXV0/LmxpbWl0Py5pbnB1dFxuICAgICAgPz8gY2F0YWxvZ0RhdGEub3BlbmFpPy5tb2RlbHM/LlttLm5hbWUuc3BsaXQoJy8nKVsxXV0/LmxpbWl0Py5jb250ZXh0XG4gICAgICA/PyBudWxsLFxuICAgIGF2YWlsYWJsZTogY2hhdGdwdCxcbiAgICBrZXlIaW50OiAnL2Nvbm5lY3QnLFxuICB9KSksXG5dXG5cbmlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ3BpY286IG5vIGNyZWRlbnRpYWxzIGZvdW5kLicpXG4gIGNvbnNvbGUuZXJyb3IoJ3NldCBvbmUgb2Y6IEdFTUlOSV9BUElfS0VZLCBBTlRIUk9QSUNfQVBJX0tFWSwgT1BFTkFJX0FQSV9LRVksIFhBSV9BUElfS0VZJylcbiAgY29uc29sZS5lcnJvcignb3Igc2lnbiBpbiB3aXRoIGEgQ2hhdEdQVCBwbGFuOiBwaWNvIC0tY29ubmVjdCcpXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuXG5sZXQgbWNwTm90aWZ5ID0gKCkgPT4ge31cbmxldCBzaGVsbHNOb3RpZnkgPSAoKSA9PiB7fVxubGV0IHNoZWxsc0V4aXQgPSAoKSA9PiB7fVxuY29uc3Qgc2hlbGxzID0gY3JlYXRlU2hlbGxNYW5hZ2VyKHtcbiAgb25DaGFuZ2U6ICgpID0+IHNoZWxsc05vdGlmeSgpLFxuICBvbkV4aXQ6IChzaGVsbCkgPT4gc2hlbGxzRXhpdChzaGVsbCksXG59KVxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHNoZWxscy5raWxsQWxsKCkpXG5cbmxldCB3YWtldXBzTm90aWZ5ID0gKCkgPT4ge31cbmxldCB3YWtldXBzRmlyZSA9ICgpID0+IHt9XG5jb25zdCB3YWtldXBzID0gY3JlYXRlV2FrZXVwTWFuYWdlcih7XG4gIG9uQ2hhbmdlOiAoKSA9PiB3YWtldXBzTm90aWZ5KCksXG4gIG9uRmlyZTogKHdha2V1cCkgPT4gd2FrZXVwc0ZpcmUod2FrZXVwKSxcbn0pXG5cbmxldCBnaXROb3RpZnkgPSAoKSA9PiB7fVxuY29uc3QgZ2l0ID0gY3JlYXRlR2l0U2VydmljZSh7IG9uQ2hhbmdlOiAoKSA9PiBnaXROb3RpZnkoKSB9KVxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IGdpdC5kaXNwb3NlKCkpXG5cbmNvbnN0IGJvb3RQcm9qZWN0ID0gKGN3ZCkgPT4gYnVpbGRQcm9qZWN0Qm9vdChjd2QsIHsgb25NY3BDaGFuZ2U6ICgpID0+IG1jcE5vdGlmeSgpIH0pXG5cbmNvbnN0IGNvbmZpZyA9IGF3YWl0IHJlYWRDb25maWcoKVxuY29uc3QgY29uZmlndXJlZERlZmF1bHQgPSBjb25maWcuZGVmYXVsdE1vZGVsICYmIG1vZGVscy5maW5kKChtKSA9PiBtLm5hbWUgPT09IGNvbmZpZy5kZWZhdWx0TW9kZWwpXG5cbmNvbnN0IGRldGVjdGVkVGhlbWUgPSBhd2FpdCBkZXRlY3RUZXJtaW5hbFRoZW1lKClcbmNvbnN0IHRoZW1lT3ZlcnJpZGUgPSBwYWxldHRlTGlzdCgpLnNvbWUoKHApID0+IHAua2V5ID09PSBjb25maWcudGhlbWUpID8gY29uZmlnLnRoZW1lIDogbnVsbFxuc2V0UGFsZXR0ZSh0aGVtZU92ZXJyaWRlIHx8IGRldGVjdGVkVGhlbWUpXG5jb25zdCB0aGVtZSA9IHsgYWNjZW50OiBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH1cblxuY29uc3QgYm9vdCA9IHtcbiAgLi4uKGF3YWl0IGJvb3RQcm9qZWN0KHByb2Nlc3MuY3dkKCkpKSxcbiAgdGhlbWUsXG4gIHZlcnNpb246IHBrZy52ZXJzaW9uLFxuICBtb2RlbHMsXG4gIHByb3ZpZGVycyxcbiAgaW5pdGlhbE1vZGVsOiBjb25maWd1cmVkRGVmYXVsdCB8fCBkZWZhdWx0TW9kZWwobW9kZWxzKSxcbiAgcmVzZWFyY2hNb2RlbDogY29uZmlnLm1vZGVscz8ucmVzZWFyY2hXb3JrZXIgfHwgbnVsbCxcbiAgc2hlbGxNb2RlbDogY29uZmlnLm1vZGVscz8uc2hlbGwgfHwgbnVsbCxcbiAgcGFydGljaXBhbnRBTW9kZWw6IGNvbmZpZy5tb2RlbHM/LnBhcnRpY2lwYW50QSB8fCBudWxsLFxuICBwYXJ0aWNpcGFudEJNb2RlbDogY29uZmlnLm1vZGVscz8ucGFydGljaXBhbnRCIHx8IG51bGwsXG4gIGRlbGliZXJhdGlvbk1vZGVsOiBjb25maWcubW9kZWxzPy5kZWxpYmVyYXRpb24gfHwgY29uZmlnLm1vZGVscz8ucmVzZWFyY2hXb3JrZXIgfHwgbnVsbCxcbiAgcmVzZWFyY2hBZ2VudExpbWl0OiBOdW1iZXIuaXNJbnRlZ2VyKGNvbmZpZy5yZXNlYXJjaD8uYWdlbnRMaW1pdCkgJiYgY29uZmlnLnJlc2VhcmNoLmFnZW50TGltaXQgPj0gMSAmJiBjb25maWcucmVzZWFyY2guYWdlbnRMaW1pdCA8PSAxMDBcbiAgICA/IGNvbmZpZy5yZXNlYXJjaC5hZ2VudExpbWl0XG4gICAgOiAxMCxcbiAgZGV0ZWN0ZWRUaGVtZSxcbiAgdGhlbWVQcmVmOiB0aGVtZU92ZXJyaWRlIHx8ICdhdXRvJyxcbiAgaW5pdGlhbEVmZm9ydDogWydsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J10uaW5jbHVkZXMoY29uZmlnLmRlZmF1bHRFZmZvcnQpID8gY29uZmlnLmRlZmF1bHRFZmZvcnQgOiBudWxsLFxuICBhdXRvQ29tcGFjdDogY29uZmlnLmF1dG9Db21wYWN0ICE9PSBmYWxzZSxcbiAgY2xvdWRzOiBjb25maWcuYW5pbWF0aW9uPy5jbG91ZHMgPT09IHRydWUsXG4gIGNvbXBhY3RUb29sSGlzdG9yeTogY29uZmlnLmRpc3BsYXk/LmNvbXBhY3RUb29sSGlzdG9yeSA9PT0gdHJ1ZSxcbiAgZ2l0Rm9vdGVyOiBjb25maWcuZGlzcGxheT8uZ2l0U3RhdHVzICE9PSBmYWxzZSxcbiAgd2lkZVNpZGViYXI6IGNvbmZpZy5kaXNwbGF5Py53aWRlU2lkZWJhciAhPT0gZmFsc2UsXG4gIHJlZnM6IHt9LFxuICBzaGVsbHMsXG4gIHdha2V1cHMsXG4gIGdpdCxcbiAgc2V0TWNwTm90aWZ5OiAoZm4pID0+IHsgbWNwTm90aWZ5ID0gZm4gfSxcbiAgc2V0R2l0Tm90aWZ5OiAoZm4pID0+IHsgZ2l0Tm90aWZ5ID0gZm4gfSxcbiAgc2V0U2hlbGxzTm90aWZ5OiAoZm4pID0+IHsgc2hlbGxzTm90aWZ5ID0gZm4gfSxcbiAgc2V0U2hlbGxzRXhpdDogKGZuKSA9PiB7IHNoZWxsc0V4aXQgPSBmbiB9LFxuICBzZXRXYWtldXBzTm90aWZ5OiAoZm4pID0+IHsgd2FrZXVwc05vdGlmeSA9IGZuIH0sXG4gIHNldFdha2V1cHNGaXJlOiAoZm4pID0+IHsgd2FrZXVwc0ZpcmUgPSBmbiB9LFxuICByZWJ1aWxkOiBib290UHJvamVjdCxcbn1cblxuZ2l0LnJldGFyZ2V0KGJvb3Qucm9vdClcbmdpdC5zZXRFbmFibGVkKGJvb3QuZ2l0Rm9vdGVyKVxuXG5jb25zdCBjb250cm9sbGVyID0gY3JlYXRlQ29udHJvbGxlcih7IGJvb3QgfSlcbmNvbnN0IGFwcCA9IG1vdW50KCgpID0+IDxBcHAgYm9vdD17Ym9vdH0gY29udHJvbGxlcj17Y29udHJvbGxlcn0gLz4sIHsgdGl0bGU6IGBwaWNvICAke2Jvb3Qucm9vdC5zcGxpdCgnLycpLnBvcCgpfWAsIHRoZW1lIH0pXG5ib290LnNldFRoZW1lID0gYXBwLnNldFRoZW1lXG5ib290Lm1jcC5jb25uZWN0QWxsKClcbiIsICJleHBvcnQgY29uc3QgVVNBR0UgPSBgcGljbyAtIGEgY29kaW5nIGFnZW50IGluIHlvdXIgdGVybWluYWxcblxudXNhZ2U6XG4gIHBpY28gICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlIHNlc3Npb24gaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gIHBpY28gLXAgXCJwcm9tcHRcIiAgICAgICAgICAgaGVhZGxlc3M6IHJ1biBvbmUgYWdlbnRpYyB0dXJuLCBwcmludCB0aGUgYW5zd2VyXG4gIHBpY28gLXMgXCJyZXF1ZXN0XCIgICAgICAgICAgZ2VuZXJhdGUgb25lIHNoZWxsIGNvbW1hbmQsIHdpdGhvdXQgcnVubmluZyBpdFxuICBjYXQgbG9nIHwgcGljbyAtcCBcIi4uLlwiICAgIHN0ZGluIGlzIGFwcGVuZGVkIHRvIHRoZSBwcm9tcHQgYXMgY29udGV4dFxuXG5jb21tYW5kIGZsYWdzOlxuICAtcCwgLS1wcmludCA8cHJvbXB0PiAgICAgICBydW4gb25lIGFnZW50aWMgdHVybiBhbmQgcHJpbnQgdGhlIGFuc3dlclxuICAtcywgLS1zaGVsbCA8cmVxdWVzdD4gICAgICBwcmludCBvbmUgZ2VuZXJhdGVkIHNoZWxsIGNvbW1hbmRcbiAgLS1qc29uICAgICAgICAgICAgICAgICAgICAgcHJpbnQgYSBzaW5nbGUgSlNPTiByZXN1bHQgb2JqZWN0IHRvIHN0ZG91dFxuICAtLXN0cmVhbS1qc29uICAgICAgICAgICAgICBzdHJlYW0gc2Vzc2lvbiBldmVudHMgdG8gc3Rkb3V0IGFzIGpzb25sXG4gIC1tLCAtLW1vZGVsIDxuYW1lPiAgICAgICAgIG1vZGVsIHRvIHVzZSAoZnV6enkgbWF0Y2hlZCwgb3IgcmF3IHByb3ZpZGVyL21vZGVsKVxuICAtLWVmZm9ydCA8bGV2ZWw+ICAgICAgICAgICB0aGlua2luZyBlZmZvcnQ6IGF1dG98bG93fG1lZGl1bXxoaWdofG1heFxuICAtLXJlc3VtZSA8c2Vzc2lvbi1pZD4gICAgICBjb250aW51ZSBhbiBleGlzdGluZyBzZXNzaW9uIGZyb20gdGhpcyBwcm9qZWN0XG4gIC0tbWF4LXRvb2wtY2FsbHMgPG4+ICAgICAgIHN0b3AgdGhlIGFnZW50IGFmdGVyIG4gdG9vbCBjYWxscyAoZGVmYXVsdCA1MClcbiAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgbm8gcHJvZ3Jlc3Mgb3V0cHV0IG9uIHN0ZGVyclxuXG4gIC0tY29ubmVjdCAgICAgICAgICAgICAgICAgIHNpZ24gaW4gd2l0aCBhIENoYXRHUFQgcGxhbiAoT0F1dGggaW4geW91ciBicm93c2VyKVxuICB1cGRhdGUsIC0tdXBkYXRlICAgICAgICAgICB1cGRhdGUgcGljbyB0byB0aGUgbGF0ZXN0IHJlbGVhc2UgZnJvbSBucG1cbiAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHBcbiAgLXYsIC0tdmVyc2lvbiAgICAgICAgICAgICAgc2hvdyB2ZXJzaW9uYFxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBcmdzKGFyZ3YpIHtcbiAgY29uc3Qgb3B0cyA9IHsgbW9kZTogJ2ludGVyYWN0aXZlJyB9XG4gIGNvbnN0IHRha2VWYWx1ZSA9IChuYW1lLCBpKSA9PiB7XG4gICAgaWYgKGkgKyAxID49IGFyZ3YubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoYCR7bmFtZX0gcmVxdWlyZXMgYSB2YWx1ZWApXG4gICAgcmV0dXJuIGFyZ3ZbaSArIDFdXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3YubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmd2W2ldXG4gICAgaWYgKGFyZyA9PT0gJy1wJyB8fCBhcmcgPT09ICctLXByaW50Jykge1xuICAgICAgaWYgKG9wdHMubW9kZSAhPT0gJ2ludGVyYWN0aXZlJykgdGhyb3cgbmV3IEVycm9yKGAke2FyZ30gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW5vdGhlciBjb21tYW5kIG1vZGVgKVxuICAgICAgb3B0cy5tb2RlID0gJ2hlYWRsZXNzJ1xuICAgICAgb3B0cy5wcm9tcHQgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctcycgfHwgYXJnID09PSAnLS1zaGVsbCcpIHtcbiAgICAgIGlmIChvcHRzLm1vZGUgIT09ICdpbnRlcmFjdGl2ZScpIHRocm93IG5ldyBFcnJvcihgJHthcmd9IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgY29tbWFuZCBtb2RlYClcbiAgICAgIG9wdHMubW9kZSA9ICdzaGVsbCdcbiAgICAgIG9wdHMucHJvbXB0ID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1qc29uJykgb3B0cy5qc29uID0gdHJ1ZVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy0tc3RyZWFtLWpzb24nKSBvcHRzLnN0cmVhbUpzb24gPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLW0nIHx8IGFyZyA9PT0gJy0tbW9kZWwnKSB7XG4gICAgICBvcHRzLm1vZGVsID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1lZmZvcnQnKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIVsnYXV0bycsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J10uaW5jbHVkZXMobGV2ZWwpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBlZmZvcnQgXCIke2xldmVsfVwiOiB1c2UgYXV0b3xsb3d8bWVkaXVtfGhpZ2h8bWF4YClcbiAgICAgIH1cbiAgICAgIG9wdHMuZWZmb3J0ID0gbGV2ZWxcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1yZXN1bWUnKSB7XG4gICAgICBvcHRzLnJlc3VtZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tbWF4LXRvb2wtY2FsbHMnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIS9eXFxkKyQvLnRlc3QodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJy0tbWF4LXRvb2wtY2FsbHMgcmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJylcbiAgICAgIG9wdHMubWF4VG9vbENhbGxzID0gTnVtYmVyKHZhbHVlKVxuICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihvcHRzLm1heFRvb2xDYWxscykgfHwgb3B0cy5tYXhUb29sQ2FsbHMgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignLS1tYXgtdG9vbC1jYWxscyByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXInKVxuICAgICAgfVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWNvbm5lY3QnKSBvcHRzLm1vZGUgPSAnY29ubmVjdCdcbiAgICBlbHNlIGlmIChhcmcgPT09ICd1cGRhdGUnIHx8IGFyZyA9PT0gJy0tdXBkYXRlJykgb3B0cy5tb2RlID0gJ3VwZGF0ZSdcbiAgICBlbHNlIGlmIChhcmcgPT09ICctcScgfHwgYXJnID09PSAnLS1xdWlldCcpIG9wdHMucXVpZXQgPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLWgnIHx8IGFyZyA9PT0gJy0taGVscCcpIG9wdHMubW9kZSA9ICdoZWxwJ1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy12JyB8fCBhcmcgPT09ICctLXZlcnNpb24nKSBvcHRzLm1vZGUgPSAndmVyc2lvbidcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBhcmd1bWVudCBcIiR7YXJnfVwiYClcbiAgfVxuXG4gIGlmIChvcHRzLm1vZGUgPT09ICdoZWFkbGVzcycgJiYgIW9wdHMucHJvbXB0Py50cmltKCkpIHRocm93IG5ldyBFcnJvcignLXAgcmVxdWlyZXMgYSBub24tZW1wdHkgcHJvbXB0JylcbiAgaWYgKG9wdHMubW9kZSA9PT0gJ3NoZWxsJykge1xuICAgIGlmICghb3B0cy5wcm9tcHQ/LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCctcyByZXF1aXJlcyBhIG5vbi1lbXB0eSByZXF1ZXN0JylcbiAgICBjb25zdCBpbmNvbXBhdGlibGUgPSBbb3B0cy5qc29uICYmICctLWpzb24nLCBvcHRzLnN0cmVhbUpzb24gJiYgJy0tc3RyZWFtLWpzb24nLCBvcHRzLnJlc3VtZSAmJiAnLS1yZXN1bWUnLCBvcHRzLm1heFRvb2xDYWxscyAmJiAnLS1tYXgtdG9vbC1jYWxscyddLmZpbmQoQm9vbGVhbilcbiAgICBpZiAoaW5jb21wYXRpYmxlKSB0aHJvdyBuZXcgRXJyb3IoYCR7aW5jb21wYXRpYmxlfSBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tc2hlbGxgKVxuICB9XG4gIHJldHVybiBvcHRzXG59XG4iLCAiaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgcGFyc2VGcm9udG1hdHRlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2tpbGxzLmpzJ1xuaW1wb3J0IHsgZXhwYW5kQ29tbWFuZCwgcGFyc2VDb21tYW5kQXJndW1lbnRzIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb21tYW5kcy5qcydcbmltcG9ydCB7IGNvbW1hbmRBdCwgcmVwbGFjZUNvbW1hbmQsIGNvbW1hbmRGaWVsZHMgfSBmcm9tICcuL2NvbXBvc2VyLWNvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgQ29tbWFuZEZvcm0gfSBmcm9tICcuL2NvbW1hbmQtZm9ybS5qc3gnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcydcbmltcG9ydCB7IGNyZWF0ZURpY3RhdGlvbiB9IGZyb20gJy4uL2RpY3RhdGlvbi5qcydcbmltcG9ydCB7IHJlYWRDbGlwYm9hcmRJbWFnZSB9IGZyb20gJy4uL2NsaXBib2FyZC5qcydcbmltcG9ydCB7IGNyZWF0ZUNsaXBib2FyZElucHV0IH0gZnJvbSAnLi9jbGlwYm9hcmQtaW5wdXQuanMnXG5pbXBvcnQgeyBjcmVhdGVEaWN0YXRpb25JbnB1dCB9IGZyb20gJy4vZGljdGF0aW9uLWlucHV0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2NyZWVuQ2FwdHVyZUlucHV0IH0gZnJvbSAnLi9zY3JlZW4tY2FwdHVyZS1pbnB1dC5qcydcbmltcG9ydCB7IGNhcHR1cmVSZWdpb24gfSBmcm9tICcuLi9zY3JlZW4tY2FwdHVyZS5qcydcbmltcG9ydCB7IGNyZWF0ZUNvbXBvc2VyRmlsZXMgfSBmcm9tICcuL2NvbXBvc2VyLWZpbGVzLmpzJ1xuaW1wb3J0IHsgZGljdGF0aW9uSW5kaWNhdG9yLCBhcHBlbmRMZXZlbCB9IGZyb20gJy4vZGljdGF0aW9uLWluZGljYXRvci5qcydcbmltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgTWVudSwgUHJvZ3Jlc3NCYXIsIFNjcm9sbEJveCwgU2hpbW1lciwgU3Bpbm5lciwgVGV4dEFyZWEsIHVzZUZvY3VzLCB1c2VGb2N1c1RyYXAsIHVzZUZyYW1lU3RhdHMsIHVzZUhpdFRlc3QsIHVzZUlucHV0LCB1c2VMYXlvdXQsIHVzZU1vdXNlLCB1c2VSZXNpemUsIHVzZVNlbGVjdGlvbiwgdXNlVG9hc3QgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBtYWtlRXZlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2V2ZW50cy5qcydcbmltcG9ydCB7IGxpc3RTZXNzaW9ucywgZGVsZXRlU2Vzc2lvbiwgZGVsZXRlUHJvamVjdERhdGEgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Nlc3Npb24uanMnXG5pbXBvcnQgeyB1c2VyRW50cmllcywgcmV3aW5kU3RhdHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Rlcml2ZS5qcydcbmltcG9ydCB7IGxvYWRQcm9qZWN0UHJvbXB0cywgbG9hZEdsb2JhbFByb21wdHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2hpc3RvcnkuanMnXG5pbXBvcnQgeyBpbXBsaWNpdFJld2luZFRhcmdldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcmV3aW5kLmpzJ1xuaW1wb3J0IHsgY2hlY2tGb3JVcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uLCBpc0Rldkluc3RhbGwsIHJ1blVwZGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJ1xuaW1wb3J0IHsgU1RFRVJfUk9MRVMsIHN0ZWVyYWJsZVRyYW5zY3JpcHQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3N0ZWVyLmpzJ1xuaW1wb3J0IHsgd3JpdGVDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IG9wZW5haVN0YXR1cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvb3BlbmFpLWF1dGguanMnXG5pbXBvcnQgeyBFRkZPUlRfTEVWRUxTLCBTRVNTSU9OX0NPTE9SUyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udHJvbGxlci5qcydcbmltcG9ydCB7IGFnZW50VHJhbnNjcmlwdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYWdlbnQtdHJhbnNjcmlwdC5qcydcbmltcG9ydCB7IGZ1enp5U2NvcmUgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgY29tcGxldGlvbkNvbnRleHQsIGFwcGx5Q29tcGxldGlvbiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29tcGxldGlvbi5qcydcbmltcG9ydCB7IGV4dHJhY3RJbWFnZVBhdGhzLCBwbGFjZWhvbGRlcml6ZUltYWdlUGF0aHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuaW1wb3J0IHsgbGlzdEZpbGVzIH0gZnJvbSAncGljb2NvZGUtY29yZS9maWxlcy5qcydcbmltcG9ydCB7IGhpZ2hsaWdodFZlcnNpb24gfSBmcm9tICcuL2hpZ2hsaWdodC5qcydcbmltcG9ydCB7IGNvbXBhY3ROdW1iZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Zvcm1hdC5qcydcbmltcG9ydCB7IGNvbnRleHRCYXIgfSBmcm9tICcuL2NvbnRleHQtYmFyLmpzJ1xuaW1wb3J0IHsgQW5pbWF0ZWRWYWx1ZSB9IGZyb20gJy4vYW5pbWF0ZWQtdmFsdWUuanN4J1xuaW1wb3J0IHsgRGVsaWJlcmF0aW9uRXhjaGFuZ2UsIE1lc3NhZ2UgfSBmcm9tICcuL3RyYW5zY3JpcHQuanN4J1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uU2VhcmNoQmFyLCBDb252ZXJzYXRpb25TY3JvbGxBbmNob3IsIENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2UsIGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCB9IGZyb20gJy4vY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCdcbmltcG9ydCB7IGNvbXBhY3RUcmFuc2NyaXB0UnVucywgdHJhbnNjcmlwdFdpbmRvdyB9IGZyb20gJy4vdHJhbnNjcmlwdC13aW5kb3cuanMnXG5pbXBvcnQgeyBRdWVzdGlvbkZvcm0gfSBmcm9tICcuL3F1ZXN0aW9uLWZvcm0uanN4J1xuaW1wb3J0IHsgRW1wdHlTdGF0ZSB9IGZyb20gJy4vZW1wdHktc3RhdGUuanN4J1xuaW1wb3J0IHsgSGVscCB9IGZyb20gJy4vaGVscC5qc3gnXG5pbXBvcnQgeyBNb2RlbFBhbmVsLCBFZmZvcnRQYW5lbCwgVGhlbWVQYW5lbCwgQ29uZmlnUGFuZWwsIENvbmZpcm1QYW5lbCwgSGlzdG9yeVBhbmVsLCBSZXdpbmRQaWNrUGFuZWwsIFJld2luZEFjdGlvblBhbmVsLCBSZXN1bWVQYW5lbCwgUHJvamVjdFBhbmVsLCBNY3BQYW5lbCwgTWVtb3J5UGFuZWwsIEluZm9MaXN0UGFuZWwsIFdha2V1cHNQYW5lbCwgQ29ubmVjdFBhbmVsLCB0aW1lQWdvIH0gZnJvbSAnLi9wYW5lbHMuanN4J1xuaW1wb3J0IHsgYWNjZW50LCBzZXRBY2NlbnQsIHNldFBhbGV0dGUsIHBhbGV0dGVOYW1lLCBwYWxldHRlTGlzdCwgREVGQVVMVF9BQ0NFTlQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFJFRCwgR1JFRU4sIEhJR0hMSUdIVCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IENPTU1BTkRTID0gW1xuICB7IG5hbWU6ICdtb2RlbCcsIGRlc2M6ICdTd2l0Y2ggdGhlIGFjdGl2ZSBtb2RlbCBmb3IgdGhpcyBzZXNzaW9uJyB9LFxuICB7IG5hbWU6ICdjb25uZWN0JywgZGVzYzogJ1NpZ24gaW4gd2l0aCBDaGF0R1BUIHRvIHVzZSBhIENvZGV4IHN1YnNjcmlwdGlvbicgfSxcbiAgeyBuYW1lOiAnZWZmb3J0JywgZGVzYzogJ1NldCB0aGUgdGhpbmtpbmcgZWZmb3J0IGZvciB0aGlzIHNlc3Npb24nIH0sXG4gIHsgbmFtZTogJ3Jlc3VtZScsIGRlc2M6ICdQaWNrIHVwIGEgcHJldmlvdXMgc2Vzc2lvbiB3aGVyZSB5b3UgbGVmdCBvZmYnIH0sXG4gIHsgbmFtZTogJ25ldycsIGRlc2M6ICdTdGFydCBhIG5ldyBzZXNzaW9uIGluIHRoaXMgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnZm9yaycsIGRlc2M6ICdGb3JrIHRoaXMgY29udmVyc2F0aW9uIGludG8gYSBuYW1lZCBzZXNzaW9uOiAvZm9yayA8bGFiZWw+JyB9LFxuICB7IG5hbWU6ICdkZWxldGUnLCBkZXNjOiAnUGVybWFuZW50bHkgZGVsZXRlIHRoZSBjdXJyZW50IHNlc3Npb24gYW5kIHN0YXJ0IGZyZXNoJyB9LFxuICB7IG5hbWU6ICdwcm9qZWN0JywgZGVzYzogJ1N3aXRjaCBwcm9qZWN0czoganVtcCB0byBhbm90aGVyIHByb2plY3QsIHNhbWUgYXMgY3RybCtwJyB9LFxuICB7IG5hbWU6ICdjd2QnLCBkZXNjOiAnU2hvdyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgcHJvamVjdCByb290JyB9LFxuICB7IG5hbWU6ICdza2lsbHMnLCBkZXNjOiAnTGlzdCBldmVyeSBza2lsbDogYnVpbHRpbiwgZ2xvYmFsLCBhbmQgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnY29tbWFuZHMnLCBkZXNjOiAnTGlzdCBldmVyeSBjb21tYW5kOiBidWlsdGluLCBnbG9iYWwsIGFuZCBwcm9qZWN0JyB9LFxuICB7IG5hbWU6ICdpbml0JywgZGVzYzogJ0NyZWF0ZSBvciBpbXByb3ZlIHJlcG9zaXRvcnkgQUdFTlRTLm1kIGd1aWRhbmNlJyB9LFxuICB7IG5hbWU6ICd0b29scycsIGRlc2M6ICdMaXN0IGJ1aWx0aW4gYW5kIHVzZXItZGVmaW5lZCB0b29sczsgTUNQIHRvb2xzIGxpdmUgaW4gL21jcCcgfSxcbiAgeyBuYW1lOiAncmV3aW5kJywgZGVzYzogJ1Jlc3RvcmUgdGhlIGNvbnZlcnNhdGlvbiB0byBhIHByZXZpb3VzIG1lc3NhZ2UnIH0sXG4gIHsgbmFtZTogJ3N0ZWVyJywgZGVzYzogJ0VkaXQgb3IgYWRkIGNvbnZlcnNhdGlvbiBtZXNzYWdlcyB3aXRob3V0IHNlbmRpbmcnIH0sXG4gIHsgbmFtZTogJ2hpc3RvcnknLCBkZXNjOiAnU2VhcmNoIHByb21wdHMgeW91IHByZXZpb3VzbHkgc2VudCcgfSxcbiAgeyBuYW1lOiAncmVuYW1lJywgZGVzYzogJ05hbWUgdGhpcyBzZXNzaW9uOyBvbWl0IHRoZSBuYW1lIHRvIHJlc3RvcmUgaXRzIGF1dG9tYXRpYyB0aXRsZScgfSxcbiAgeyBuYW1lOiAnY29sb3InLCBkZXNjOiAnQ29sb3IgdGhpcyBzZXNzaW9uOiAvY29sb3IgPG5hbWUgb3IgI2hleD4sIC9jb2xvciBub25lIHRvIGNsZWFyJyB9LFxuICB7IG5hbWU6ICd0aGVtZScsIGRlc2M6ICdQaWNrIGEgY29sb3IgdGhlbWU7IC90aGVtZSA8bmFtZT4gYXBwbGllcyBvbmUgZGlyZWN0bHknIH0sXG4gIHsgbmFtZTogJ2NvbmZpZycsIGRlc2M6ICdDb25maWd1cmUgcGljbyBkaXNwbGF5IGFuZCBiZWhhdmlvcicgfSxcbiAgeyBuYW1lOiAnbWNwJywgZGVzYzogJ01hbmFnZSBNQ1Agc2VydmVyczogYWRkLCB0b2dnbGUsIHJlY29ubmVjdCcgfSxcbiAgeyBuYW1lOiAncGFyYWxsZWwnLCBkZXNjOiAnUnVuIGEgdGFzayB3aXRoIHBhcmFsbGVsIGFnZW50czogL3BhcmFsbGVsIDx0YXNrPicgfSxcbiAgeyBuYW1lOiAnZGVsaWJlcmF0ZScsIGRlc2M6ICdEZWxpYmVyYXRlIG9uIGEgZGVjaXNpb246IC9kZWxpYmVyYXRlIDxkZWNpc2lvbj4nIH0sXG4gIHsgbmFtZTogJ3dha2V1cHMnLCBkZXNjOiAnVmlldyBhbmQgY2FuY2VsIHNjaGVkdWxlZCB3YWtlLXVwcycgfSxcbiAgeyBuYW1lOiAnbWVtb3J5JywgZGVzYzogJ0Jyb3dzZSBhbmQgbWFuYWdlIHNhdmVkIG1lbW9yaWVzOiBwcm9qZWN0IGFuZCBnbG9iYWwnIH0sXG4gIHsgbmFtZTogJ2NvbXBhY3QnLCBkZXNjOiAnU3VtbWFyaXplIHRoZSBjb252ZXJzYXRpb24gdG8gZnJlZSB0aGUgY29udGV4dCB3aW5kb3cnIH0sXG4gIHsgbmFtZTogJ2NsZWFyJywgZGVzYzogJ0NsZWFyIHRoZSBjb252ZXJzYXRpb24gYW5kIGZyZWUgdGhlIGNvbnRleHQgd2luZG93JyB9LFxuICB7IG5hbWU6ICdjb3N0JywgZGVzYzogJ1Nob3cgdG9rZW4gdXNhZ2UgYW5kIGVzdGltYXRlZCBjb3N0IHNvIGZhcicgfSxcbiAgeyBuYW1lOiAnY29udGV4dCcsIGRlc2M6IFwiU2hvdyB3aGF0J3MgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBhbmQgaG93IGJpZyBlYWNoIHBpZWNlIGlzXCIgfSxcbiAgeyBuYW1lOiAnZXhwb3J0JywgZGVzYzogJ1NhdmUgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIHRvIGEgbWFya2Rvd24gZmlsZScgfSxcbiAgeyBuYW1lOiAndXBkYXRlJywgZGVzYzogJ1VwZGF0ZSBwaWNvIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSBmcm9tIG5wbScgfSxcbiAgeyBuYW1lOiAnaGVscCcsIGRlc2M6ICdMaXN0IGV2ZXJ5IGNvbW1hbmQgYW5kIHdoYXQgaXQgZG9lcycgfSxcbl1cblxuY29uc3QgSElTVE9SWV9TQ09QRVMgPSBbJ3Nlc3Npb24nLCAncHJvamVjdCcsICdldmVyeXdoZXJlJ11cbmNvbnN0IE1FTU9SWV9TQ09QRVMgPSBbJ2FsbCcsICdwcm9qZWN0JywgJ2dsb2JhbCddXG5jb25zdCBTSEVMTF9TVFJJUF9NQVggPSA1XG5jb25zdCBBR0VOVF9TVFJJUF9NQVggPSA1XG5jb25zdCBTVFJJUF9TQ1JPTExPRkYgPSAxXG5cbmZ1bmN0aW9uIHN0cmlwV2luZG93U3RhcnQoY3VycmVudCwgdGFyZ2V0LCBsZW5ndGgsIHNpemUpIHtcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgoMCwgbGVuZ3RoIC0gc2l6ZSlcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjdXJyZW50LCBtYXgpKVxuICBpZiAodGFyZ2V0IDwgMCkgcmV0dXJuIHN0YXJ0XG4gIGlmICh0YXJnZXQgPCBzdGFydCArIFNUUklQX1NDUk9MTE9GRikgcmV0dXJuIE1hdGgubWF4KDAsIHRhcmdldCAtIFNUUklQX1NDUk9MTE9GRilcbiAgaWYgKHRhcmdldCA+PSBzdGFydCArIHNpemUgLSBTVFJJUF9TQ1JPTExPRkYpIHJldHVybiBNYXRoLm1pbihtYXgsIHRhcmdldCAtIHNpemUgKyBTVFJJUF9TQ1JPTExPRkYgKyAxKVxuICByZXR1cm4gc3RhcnRcbn1cblxuXG5mdW5jdGlvbiBhZ2VudEVsYXBzZWQoYWdlbnQsIG5vdyA9IERhdGUubm93KCkpIHtcbiAgaWYgKCFhZ2VudC5zdGFydGVkQXQpIHJldHVybiAnd2FpdGluZydcbiAgY29uc3Qgc2Vjb25kcyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKChhZ2VudC5lbmRlZEF0IHx8IG5vdykgLSBhZ2VudC5zdGFydGVkQXQpIC8gMTAwMCkpXG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MClcbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MClcbiAgaWYgKGhvdXJzKSByZXR1cm4gYCR7aG91cnN9aCAke21pbnV0ZXMgJSA2MH1tYFxuICBpZiAobWludXRlcykgcmV0dXJuIGAke21pbnV0ZXN9bSAke3NlY29uZHMgJSA2MH1zYFxuICByZXR1cm4gYCR7c2Vjb25kc31zYFxufVxuXG5mdW5jdGlvbiBhZ2VudFN0YXR1cyhhZ2VudCkge1xuICBpZiAoYWdlbnQuc3RhdHVzID09PSAncnVubmluZycpIHJldHVybiB7IGljb246ICcnLCBsYWJlbDogJycsIGNvbG9yOiBhY2NlbnQoKSB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdxdWV1ZWQnKSByZXR1cm4geyBpY29uOiAnXHUyNUNDJywgbGFiZWw6ICdxdWV1ZWQnLCBjb2xvcjogTVVURUQgfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAnY29tcGxldGVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MjVDRicsIGxhYmVsOiAnJywgY29sb3I6IEdSRUVOIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHJldHVybiB7IGljb246ICdcdTAwRDcnLCBsYWJlbDogJ2ZhaWxlZCcsIGNvbG9yOiBSRUQgfVxuICByZXR1cm4geyBpY29uOiAnXHUyNUEwJywgbGFiZWw6ICdjYW5jZWxsZWQnLCBjb2xvcjogTVVURUQgfVxufVxuXG5mdW5jdGlvbiBTdGVlck1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBzZWxlY3RlZCwgZm9jdXMgfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICBmb2N1cy5pdGVtKGl0ZW0ubWVzc2FnZUlkLCBsYXlvdXQpXG4gIHJldHVybiA8TWVzc2FnZSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSBzaG93TG9ja2VkIC8+XG59XG5cbmZ1bmN0aW9uIERpY3RhdGlvbktleXMoeyBpbnB1dCB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmIChpbnB1dC5oYW5kbGUoZXZlbnQpKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9KVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBNb3VzZUZvY3VzUmVnaW9uKHsgY2hpbGRyZW4sIG9uUHJlc3MsIC4uLnByb3BzIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnICYmIGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSkpIG9uUHJlc3MoKVxuICB9KVxuICByZXR1cm4gPGJveCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L2JveD5cbn1cblxuZnVuY3Rpb24gQ29tcG9zZXJBY3Rpb24oeyBpY29uLCBhY3RpdmVJY29uLCBhY3RpdmUgPSBmYWxzZSwgb25QcmVzcywgb25Ib3ZlciB9KSB7XG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBjb25zdCBpbnNpZGUgPSBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpXG4gICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ21vdmUnICYmIGluc2lkZSAhPT0gaG92ZXJlZCgpKSB7XG4gICAgICBzZXRIb3ZlcmVkKGluc2lkZSlcbiAgICAgIG9uSG92ZXI/LihpbnNpZGUpXG4gICAgfVxuICAgIGlmIChpbnNpZGUgJiYgZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBvblByZXNzKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuICBjb25zdCBoaWdobGlnaHRlZCA9IGhvdmVyZWQoKSB8fCBhY3RpdmVcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGJnOiBoaWdobGlnaHRlZCA/IGFjY2VudCgpIDogdW5kZWZpbmVkLCBjb2xvcjogaGlnaGxpZ2h0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgJHtoaWdobGlnaHRlZCA/IGFjdGl2ZUljb24gOiBpY29ufSBgfTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gQWdlbnRTdHJpcFJvdyh7IHNlbGVjdGVkLCBmb2N1c2VkLCBjaGlsZHJlbiwgb25QcmVzcyB9KSB7XG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBjb25zdCBpbnNpZGUgPSBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpXG4gICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ21vdmUnKSBzZXRIb3ZlcmVkKGluc2lkZSlcbiAgICBpZiAoaW5zaWRlICYmIGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJyAmJiBldmVudC5idXR0b24gPT09ICdsZWZ0Jykge1xuICAgICAgb25QcmVzcygpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogZm9jdXNlZCA/IGFjY2VudCgpIDogbnVsbCwgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogaG92ZXJlZCgpID8gRkdfU09GVCA6IE1VVEVEIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiBzZWxlY3RlZCB9fT57c2VsZWN0ZWQgPyAnXHUyNzZGICcgOiAnICAnfTwvdGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2JveD5cbiAgKVxufVxuXG4vLyBvbmx5IHRoZSBuZXdlc3Qgc2xpY2Ugb2YgYSBsb25nIHRyYW5zY3JpcHQgcmVuZGVyczsgb2xkZXIgaXRlbXMgbG9hZCBpblxuLy8gYmF0Y2hlcyB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgdG8gdGhlIHRvcC4gcmVuZGVyIGNvc3QgaXMgcGVyLWl0ZW0sIHNvIHRoaXNcbi8vIGtlZXBzIGRheS1sb25nIHNlc3Npb25zIGFzIGZhc3QgYXMgZnJlc2ggb25lc1xuY29uc3QgSElTVE9SWV9XSU5ET1cgPSA1MFxuY29uc3QgUkVTVU1FX1NDT1BFUyA9IFsncmVwb3NpdG9yeScsICdjaGVja291dCcsICdldmVyeXdoZXJlJ11cblxuZnVuY3Rpb24gY29sbGFwc2VTdGVlclRvb2xzKGl0ZW1zKSB7XG4gIGNvbnN0IGNvbGxhcHNlZCA9IFtdXG4gIGxldCBoaWRkZW4gPSAwXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgIGlmICghaGlkZGVuKSByZXR1cm5cbiAgICBjb2xsYXBzZWQucHVzaCh7IGtpbmQ6ICdzdGVlci10b29scycsIGNvdW50OiBoaWRkZW4gfSlcbiAgICBoaWRkZW4gPSAwXG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnIHx8IGl0ZW0ua2luZCA9PT0gJ3Rob3VnaHRzJykge1xuICAgICAgaGlkZGVuICs9IGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnID8gaXRlbS5pdGVtcy5sZW5ndGggOiAxXG4gICAgfSBlbHNlIHtcbiAgICAgIGZsdXNoKClcbiAgICAgIGNvbGxhcHNlZC5wdXNoKGl0ZW0pXG4gICAgfVxuICB9XG4gIGZsdXNoKClcbiAgcmV0dXJuIGNvbGxhcHNlZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQXBwKHsgYm9vdCwgY29udHJvbGxlcjogY3RsIH0pIHtcbiAgY29uc3QgeyBjd2QsIHJvb3QsIHZlcnNpb24sIG1vZGVscywgc2tpbGxzLCBtY3AgfSA9IGJvb3RcbiAgY29uc3Qgc3RhdGUgPSBjdGwuc3RhdGVcblxuICBjb25zdCBbZGVyaXZlZCwgc2V0RGVyaXZlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVyaXZlZClcbiAgY29uc3QgW3Rlcm1pbmFsV2lkdGgsIHNldFRlcm1pbmFsV2lkdGhdID0gY3JlYXRlU2lnbmFsKHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApXG4gIHVzZVJlc2l6ZSgoeyB3aWR0aCB9KSA9PiBzZXRUZXJtaW5hbFdpZHRoKHdpZHRoKSlcbiAgY29uc3QgW292ZXJsYXksIHNldE92ZXJsYXldID0gY3JlYXRlU2lnbmFsKHN0YXRlLm92ZXJsYXkpXG4gIGNvbnN0IFtzdHJlYW1pbmcsIHNldFN0cmVhbWluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RyZWFtaW5nKVxuICBjb25zdCBbbGl2ZVVzYWdlLCBzZXRMaXZlVXNhZ2VdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmxpdmVVc2FnZSlcbiAgY29uc3QgW3R1cm5QaGFzZSwgc2V0VHVyblBoYXNlXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS50dXJuUGhhc2UpXG4gIGNvbnN0IFtidXN5LCBzZXRCdXN5XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5idXN5KVxuICBjb25zdCBbY29tcGFjdGluZywgc2V0Q29tcGFjdGluZ10gPSBjcmVhdGVTaWduYWwoc3RhdGUuY29tcGFjdGluZylcbiAgY29uc3QgW2NvbXBhY3RTdGF0dXMsIHNldENvbXBhY3RTdGF0dXNdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmNvbXBhY3RTdGF0dXMpXG4gIGNvbnN0IFtzdGFydGVkQXQsIHNldFN0YXJ0ZWRBdF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuc3RhcnRlZEF0KVxuICBjb25zdCBbaW5wdXQsIHNldElucHV0VmFsdWVdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBjb21wb3NlckZpbGVzID0gYm9vdC5yZWZzLmNvbXBvc2VyRmlsZXMgPz89IGNyZWF0ZUNvbXBvc2VyRmlsZXMoKVxuICBjb25zdCBbaW5wdXRDdXJzb3IsIHNldElucHV0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbY29tbWFuZEZvcm0sIHNldENvbW1hbmRGb3JtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBzZXRJbnB1dCA9ICh0ZXh0LCBjdXJzb3IpID0+IHtcbiAgICBib290LnJlZnMuZHJhZnRSZXZpc2lvbiA9IChib290LnJlZnMuZHJhZnRSZXZpc2lvbiA/PyAwKSArIDFcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXBvc2VyRmlsZXMudXBkYXRlKHRleHQsIHN0YXRlLmF0dGFjaG1lbnRzKVxuICAgIHNldElucHV0VmFsdWUodmFsdWUpXG4gICAgc2V0SW5wdXRDdXJzb3IoY3Vyc29yID8/IHZhbHVlLmxlbmd0aClcbiAgfVxuICBjb25zdCBbZGljdGF0aW9uU3RhdHVzLCBzZXREaWN0YXRpb25TdGF0dXNdID0gY3JlYXRlU2lnbmFsKCdpZGxlJylcbiAgY29uc3QgW2RpY3RhdGlvbkxldmVscywgc2V0RGljdGF0aW9uTGV2ZWxzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW2NhcHR1cmVTdGF0dXMsIHNldENhcHR1cmVTdGF0dXNdID0gY3JlYXRlU2lnbmFsKCdpZGxlJylcbiAgY29uc3QgW2NvbXBvc2VyQWN0aW9uTGFiZWwsIHNldENvbXBvc2VyQWN0aW9uTGFiZWxdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbbW9kZWwsIHNldE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5tb2RlbClcbiAgY29uc3QgW2RlZmF1bHRNb2RlbCwgc2V0RGVmYXVsdE1vZGVsXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZWZhdWx0TW9kZWwpXG4gIGNvbnN0IFtlZmZvcnQsIHNldEVmZm9ydF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZWZmb3J0KVxuICBjb25zdCBbZGVmYXVsdEVmZm9ydCwgc2V0RGVmYXVsdEVmZm9ydF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVmYXVsdEVmZm9ydClcbiAgY29uc3QgW3Nob3dFZmZvcnRQYW5lbCwgc2V0U2hvd0VmZm9ydFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dUaGVtZVBhbmVsLCBzZXRTaG93VGhlbWVQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93Q29uZmlnUGFuZWwsIHNldFNob3dDb25maWdQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93RGVsZXRlQ29uZmlybSwgc2V0U2hvd0RlbGV0ZUNvbmZpcm1dID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY2xvdWRzLCBzZXRDbG91ZHNdID0gY3JlYXRlU2lnbmFsKGJvb3QuY2xvdWRzKVxuICBjb25zdCBbY29tcGFjdFRvb2xIaXN0b3J5LCBzZXRDb21wYWN0VG9vbEhpc3RvcnldID0gY3JlYXRlU2lnbmFsKGJvb3QuY29tcGFjdFRvb2xIaXN0b3J5KVxuICBjb25zdCBbZ2l0Rm9vdGVyLCBzZXRHaXRGb290ZXJdID0gY3JlYXRlU2lnbmFsKGJvb3QuZ2l0Rm9vdGVyKVxuICBjb25zdCBbd2lkZVNpZGViYXIsIHNldFdpZGVTaWRlYmFyXSA9IGNyZWF0ZVNpZ25hbChib290LndpZGVTaWRlYmFyKVxuICBjb25zdCBbcmVzZWFyY2hBZ2VudExpbWl0LCBzZXRSZXNlYXJjaEFnZW50TGltaXRdID0gY3JlYXRlU2lnbmFsKGJvb3QucmVzZWFyY2hBZ2VudExpbWl0KVxuICBjb25zdCBbcXVlc3Rpb25SZXF1ZXN0LCBzZXRRdWVzdGlvblJlcXVlc3RdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnF1ZXN0aW9uKVxuICBjb25zdCBbc2hvd01lbW9yeVBhbmVsLCBzZXRTaG93TWVtb3J5UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbbWVtU2NvcGUsIHNldE1lbVNjb3BlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbbWVtb3J5TGlzdCwgc2V0TWVtb3J5TGlzdF0gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFt0aGVtZVByZWYsIHNldFRoZW1lUHJlZl0gPSBjcmVhdGVTaWduYWwoYm9vdC50aGVtZVByZWYgfHwgJ2F1dG8nKVxuICBjb25zdCBbcXVldWVkLCBzZXRRdWV1ZWRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnF1ZXVlZClcbiAgY29uc3QgW2V4cGVkaXRlZCwgc2V0RXhwZWRpdGVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5leHBlZGl0ZWQpXG4gIGNvbnN0IFtzZW50LCBzZXRTZW50XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zZW50KVxuICBjb25zdCBbaGlzdElkeCwgc2V0SGlzdElkeF0gPSBjcmVhdGVTaWduYWwoLTEpXG4gIGNvbnN0IFtjbWRJbmRleCwgc2V0Q21kSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtjbWRDeWNsZSwgc2V0Q21kQ3ljbGVdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtmaWxlSW5kZXgsIHNldEZpbGVJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZpbGVMaXN0LCBzZXRGaWxlTGlzdF0gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtmaWxlc0Rpc21pc3NlZCwgc2V0RmlsZXNEaXNtaXNzZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbdmlldywgc2V0Vmlld1NpZ25hbF0gPSBjcmVhdGVTaWduYWwoJ2NoYXQnKVxuICBjb25zdCBbdmVyYm9zZV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93TW9kZWxQYW5lbCwgc2V0U2hvd01vZGVsUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCwgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXNlYXJjaE1vZGVsUmV0dXJuLCBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwsIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGluZ1NoZWxsTW9kZWwsIHNldFNlbGVjdGluZ1NoZWxsTW9kZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcGFydGljaXBhbnRNb2RlbFRhcmdldCwgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3BlbmRpbmdSZXNlYXJjaCwgc2V0UGVuZGluZ1Jlc2VhcmNoXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcGVuZGluZ0RlbGliZXJhdGlvbiwgc2V0UGVuZGluZ0RlbGliZXJhdGlvbl0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW2FnZW50c1ZlcnNpb24sIHNldEFnZW50c1ZlcnNpb25dID0gY3JlYXRlU2lnbmFsKHN0YXRlLmFjdGl2aXR5VmVyc2lvbilcbiAgY29uc3QgW3ZpZXdlZEFnZW50SWQsIHNldFZpZXdlZEFnZW50SWRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFthZ2VudFdpbmRvd09mZnNldCwgc2V0QWdlbnRXaW5kb3dPZmZzZXRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtzaG93SGlzdG9yeVBhbmVsLCBzZXRTaG93SGlzdG9yeVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2hpc3RTY29wZSwgc2V0SGlzdFNjb3BlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbaGlzdFByb21wdHMsIHNldEhpc3RQcm9tcHRzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3Nob3dSZXN1bWVQYW5lbCwgc2V0U2hvd1Jlc3VtZVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jlc3VtZVNjb3BlLCBzZXRSZXN1bWVTY29wZV0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Jlc3VtZVNlc3Npb25zLCBzZXRSZXN1bWVTZXNzaW9uc10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtyZXN1bWVMb2FkaW5nLCBzZXRSZXN1bWVMb2FkaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dNY3BQYW5lbCwgc2V0U2hvd01jcFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dQcm9qZWN0UGFuZWwsIHNldFNob3dQcm9qZWN0UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaW5mb1BhbmVsLCBzZXRJbmZvUGFuZWxdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFt2aWV3ZWRTaGVsbElkLCBzZXRWaWV3ZWRTaGVsbElkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc2hlbGxXaW5kb3dPZmZzZXQsIHNldFNoZWxsV2luZG93T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2hvd1dha2V1cHNQYW5lbCwgc2V0U2hvd1dha2V1cHNQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93Q29ubmVjdFBhbmVsLCBzZXRTaG93Q29ubmVjdFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2F1dGhQcm92aWRlcnMsIHNldEF1dGhQcm92aWRlcnNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbc2hlbGxzVmVyc2lvbiwgc2V0U2hlbGxzVmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2dpdFZlcnNpb24sIHNldEdpdFZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtwcm9qZWN0cywgc2V0UHJvamVjdHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbcHJvamVjdHNMb2FkaW5nLCBzZXRQcm9qZWN0c0xvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbbWNwU2VydmVycywgc2V0TWNwU2VydmVyc10gPSBjcmVhdGVTaWduYWwobWNwLmxpc3QoKSlcbiAgY29uc3QgW2NvbXBsZXRpbmcsIHNldENvbXBsZXRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY29tcEluZGV4LCBzZXRDb21wSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtyZXdpbmRTdGVwLCBzZXRSZXdpbmRTdGVwXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcmV3aW5kVGFyZ2V0LCBzZXRSZXdpbmRUYXJnZXRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtvZmZzZXQsIHNldE9mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZvbGxvdywgc2V0Rm9sbG93XSA9IGNyZWF0ZVNpZ25hbCh0cnVlKVxuICBjb25zdCBbaGlzdFdpbmRvdywgc2V0SGlzdFdpbmRvd10gPSBjcmVhdGVTaWduYWwoSElTVE9SWV9XSU5ET1cpXG4gIGNvbnN0IFt0cmFuc2NyaXB0TWV0cmljcywgc2V0VHJhbnNjcmlwdE1ldHJpY3NdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlciwgc2V0U3RlZXJdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzdGVlclRleHQsIHNldFN0ZWVyVGV4dF0gPSBjcmVhdGVTaWduYWwoJycpXG5cbiAgY29uc3QgcmVmcyA9IGJvb3QucmVmc1xuICByZWZzLnF1aXRBdCA/Pz0gMFxuXG4gIGZ1bmN0aW9uIHNldFZpZXcobmV4dCkge1xuICAgIHNldFZpZXdTaWduYWwobmV4dClcbiAgICBjdGwuaG9sZChuZXh0ICE9PSAnY2hhdCcpXG4gIH1cblxuICAvLyB0aGUgY29udHJvbGxlciBvd25zIGV2ZXJ5IHBpZWNlIG9mIGNvbnZlcnNhdGlvbiBzdGF0ZTsgdGhlc2Ugc2lnbmFsc1xuICAvLyBtaXJyb3IgaXQgc28gdGhlIHJlbmRlciB0cmVlIGJlbG93IHN0YXlzIHJlYWN0aXZlIHdpdGhvdXQga25vd2luZyB0aGF0XG4gIGNvbnN0IG1pcnJvciA9IChnZXQsIHNldCwgdmFsdWUpID0+IHtcbiAgICBpZiAoZ2V0KCkgIT09IHZhbHVlKSBzZXQodmFsdWUpXG4gIH1cbiAgZnVuY3Rpb24gc3luY0Zyb21Db250cm9sbGVyKCkge1xuICAgIG1pcnJvcihkZXJpdmVkLCBzZXREZXJpdmVkLCBzdGF0ZS5kZXJpdmVkKVxuICAgIG1pcnJvcihvdmVybGF5LCBzZXRPdmVybGF5LCBzdGF0ZS5vdmVybGF5KVxuICAgIG1pcnJvcihzdHJlYW1pbmcsIHNldFN0cmVhbWluZywgc3RhdGUuc3RyZWFtaW5nKVxuICAgIG1pcnJvcihsaXZlVXNhZ2UsIHNldExpdmVVc2FnZSwgc3RhdGUubGl2ZVVzYWdlKVxuICAgIG1pcnJvcih0dXJuUGhhc2UsIHNldFR1cm5QaGFzZSwgc3RhdGUudHVyblBoYXNlKVxuICAgIG1pcnJvcihidXN5LCBzZXRCdXN5LCBzdGF0ZS5idXN5KVxuICAgIG1pcnJvcihjb21wYWN0aW5nLCBzZXRDb21wYWN0aW5nLCBzdGF0ZS5jb21wYWN0aW5nKVxuICAgIG1pcnJvcihjb21wYWN0U3RhdHVzLCBzZXRDb21wYWN0U3RhdHVzLCBzdGF0ZS5jb21wYWN0U3RhdHVzKVxuICAgIG1pcnJvcihzdGFydGVkQXQsIHNldFN0YXJ0ZWRBdCwgc3RhdGUuc3RhcnRlZEF0KVxuICAgIG1pcnJvcihtb2RlbCwgc2V0TW9kZWwsIHN0YXRlLm1vZGVsKVxuICAgIG1pcnJvcihkZWZhdWx0TW9kZWwsIHNldERlZmF1bHRNb2RlbCwgc3RhdGUuZGVmYXVsdE1vZGVsKVxuICAgIG1pcnJvcihlZmZvcnQsIHNldEVmZm9ydCwgc3RhdGUuZWZmb3J0KVxuICAgIG1pcnJvcihkZWZhdWx0RWZmb3J0LCBzZXREZWZhdWx0RWZmb3J0LCBzdGF0ZS5kZWZhdWx0RWZmb3J0KVxuICAgIG1pcnJvcihxdWVzdGlvblJlcXVlc3QsIHNldFF1ZXN0aW9uUmVxdWVzdCwgc3RhdGUucXVlc3Rpb24pXG4gICAgbWlycm9yKHF1ZXVlZCwgc2V0UXVldWVkLCBzdGF0ZS5xdWV1ZWQpXG4gICAgbWlycm9yKGV4cGVkaXRlZCwgc2V0RXhwZWRpdGVkLCBzdGF0ZS5leHBlZGl0ZWQpXG4gICAgbWlycm9yKHNlbnQsIHNldFNlbnQsIHN0YXRlLnNlbnQpXG4gICAgbWlycm9yKGFnZW50c1ZlcnNpb24sIHNldEFnZW50c1ZlcnNpb24sIHN0YXRlLmFjdGl2aXR5VmVyc2lvbilcbiAgfVxuXG4gIC8vIHRyZW5kIHJlLXJ1bnMgdGhpcyBjb21wb25lbnQgb24gZXZlcnkgc2lnbmFsIGNoYW5nZSwgc28gdGhlIGNvbnRyb2xsZXJcbiAgLy8gaXMgc3Vic2NyaWJlZCBvbmNlIGFuZCBlYWNoIGhhbmRsZXIgcmVhY2hlcyB0aGUgbmV3ZXN0IHJlbmRlciB0aHJvdWdoXG4gIC8vIHJlZnMudWksIHdoaWNoIGlzIHJlcGxhY2VkIGJlbG93IG9uIGV2ZXJ5IHBhc3NcbiAgcmVmcy51aSA9IHtcbiAgICBzeW5jOiBzeW5jRnJvbUNvbnRyb2xsZXIsXG4gICAgZmxhc2g6IChtZXNzYWdlKSA9PiBmbGFzaChtZXNzYWdlKSxcbiAgICBkZXJpdmVkOiAobmV4dCkgPT4ge1xuICAgICAgc2V0QWNjZW50KG5leHQuY29sb3IpXG4gICAgICBib290LnNldFRoZW1lPy4oeyBhY2NlbnQ6IG5leHQuY29sb3IgfHwgREVGQVVMVF9BQ0NFTlQsIG11dGVkOiBNVVRFRCB9KVxuICAgIH0sXG4gICAgcXVlc3Rpb246ICgpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBmbS5mb2N1cygncXVlc3Rpb24nKVxuICAgIH0sXG4gICAgdHVybjogKCkgPT4ge1xuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIH0sXG4gICAgaW5wdXQ6ICh0ZXh0KSA9PiB7XG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgc2V0SW5wdXQodGV4dClcbiAgICB9LFxuICAgIHNlc3Npb246ICgpID0+IHtcbiAgICAgIHNldENvbW1hbmRGb3JtKG51bGwpXG4gICAgICByZWZzLmNvbW1hbmRFeHBhbnNpb24gPSBudWxsXG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZChudWxsKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZChudWxsKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9LFxuICAgIHJlc3VtZWQ6IChtZXRhKSA9PiBmbGFzaChgcmVzdW1lZCAgJHttZXRhLnR1cm5zfSAke21ldGEudHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKG1ldGEuYXQpfWApLFxuICAgIHByb2plY3Q6IChuZXh0KSA9PiB7XG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxceDFiXTA7cGljbyAgJHtuZXh0LnJvb3Quc3BsaXQoJy8nKS5wb3AoKX1cXHgwN2ApXG4gICAgICBzZXRNY3BTZXJ2ZXJzKG5leHQubWNwLmxpc3QoKSlcbiAgICAgIHNldEZpbGVMaXN0KFtdKVxuICAgIH0sXG4gICAgbWNwOiAoc2VydmVycykgPT4gc2V0TWNwU2VydmVycyhzZXJ2ZXJzKSxcbiAgICBzaGVsbHM6ICgpID0+IHNldFNoZWxsc1ZlcnNpb24oKHYpID0+IHYgKyAxKSxcbiAgICBnaXQ6ICgpID0+IHNldEdpdFZlcnNpb24oKHYpID0+IHYgKyAxKSxcbiAgfVxuICBpZiAoIXJlZnMuc3Vic2NyaWJlZCkge1xuICAgIHJlZnMuc3Vic2NyaWJlZCA9IHRydWVcbiAgICBjdGwub24oJ2NoYW5nZScsICgpID0+IHJlZnMudWkuc3luYygpKVxuICAgIGZvciAoY29uc3QgdHlwZSBvZiBbJ2ZsYXNoJywgJ2Rlcml2ZWQnLCAncXVlc3Rpb24nLCAndHVybicsICdpbnB1dCcsICdzZXNzaW9uJywgJ3Jlc3VtZWQnLCAncHJvamVjdCcsICdtY3AnLCAnc2hlbGxzJywgJ2dpdCddKSB7XG4gICAgICBjdGwub24odHlwZSwgKHBheWxvYWQpID0+IHJlZnMudWlbdHlwZV0ocGF5bG9hZCkpXG4gICAgfVxuICB9XG4gIHN5bmNGcm9tQ29udHJvbGxlcigpXG5cbiAgY29uc3Qgc2tpbGxDb21tYW5kcyA9IHNraWxscy5saXN0KCkubWFwKChzKSA9PiAoeyBuYW1lOiBzLm5hbWUsIGRlc2M6IGBza2lsbCAgJHtzLmRlc2NyaXB0aW9uIHx8IHMuc291cmNlfWAsIHNraWxsOiB0cnVlIH0pKVxuICBjb25zdCB1c2VyQ29tbWFuZHMgPSBib290LmNvbW1hbmRzLmxpc3QoKS5tYXAoKGMpID0+ICh7IG5hbWU6IGMubmFtZSwgZGVzYzogYGNvbW1hbmQgICR7Yy5kZXNjcmlwdGlvbiB8fCBjLnNvdXJjZX1gLCBjb21tYW5kOiB0cnVlIH0pKVxuICBjb25zdCBieU5hbWUgPSBuZXcgTWFwKClcbiAgY29uc3Qgc2hhZG93ZWQgPSBbXVxuICBmb3IgKGNvbnN0IGMgb2YgWy4uLkNPTU1BTkRTLCAuLi5za2lsbENvbW1hbmRzLCAuLi51c2VyQ29tbWFuZHNdKSB7XG4gICAgaWYgKGJ5TmFtZS5oYXMoYy5uYW1lKSkgc2hhZG93ZWQucHVzaChgJHtjLnNraWxsID8gJ3NraWxsJyA6ICdjb21tYW5kJ30gXCIke2MubmFtZX1cImApXG4gICAgZWxzZSBieU5hbWUuc2V0KGMubmFtZSwgYylcbiAgfVxuICBjb25zdCBhbGxDb21tYW5kcyA9IFsuLi5ieU5hbWUudmFsdWVzKCldXG4gIGlmIChzaGFkb3dlZC5sZW5ndGggJiYgIXJlZnMud2FybmVkU2hhZG93ZWQpIHtcbiAgICByZWZzLndhcm5lZFNoYWRvd2VkID0gdHJ1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4gZmxhc2goYHNoYWRvd2VkIGJ5IGFuIGVhcmxpZXIgbmFtZSwgcmVuYW1lIHRvIHVzZTogJHtzaGFkb3dlZC5qb2luKCcsICcpfWApLCAwKVxuICB9XG5cbiAgY29uc3QgdG9hc3QgPSB1c2VUb2FzdCh7XG4gICAgZHVyYXRpb246IDM1MDAsXG4gICAgcG9zaXRpb246ICd0b3AtcmlnaHQnLFxuICAgIHJlbmRlcjogKG1lc3NhZ2UpID0+IDx0ZXh0IHN0eWxlPXt7IGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycsIGJvbGQ6IHRydWUgfX0+e2AgJHttZXNzYWdlfSBgfTwvdGV4dD4sXG4gIH0pXG5cbiAgY29uc3QgdXBkYXRlVG9hc3QgPSB1c2VUb2FzdCh7XG4gICAgZHVyYXRpb246IDgwMDAsXG4gICAgcG9zaXRpb246ICd0b3AtY2VudGVyJyxcbiAgICByZW5kZXI6IChtZXNzYWdlKSA9PiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGJnOiBhY2NlbnQoKSB9fT5cbiAgICAgICAgPFNoaW1tZXIgY29sb3I9XCJibGFja1wiIGhpZ2hsaWdodD17SElHSExJR0hUfSBkdXJhdGlvbj17MTUwMH0+e2AgJHttZXNzYWdlfSBgfTwvU2hpbW1lcj5cbiAgICAgIDwvYm94PlxuICAgICksXG4gIH0pXG5cbiAgZnVuY3Rpb24gZmxhc2gobXNnKSB7XG4gICAgdG9hc3QobXNnKVxuICB9XG5cbiAgcmVmcy5wYXN0ZUltYWdlID8/PSBjcmVhdGVDbGlwYm9hcmRJbnB1dCh7XG4gICAgcmVhZEltYWdlOiByZWFkQ2xpcGJvYXJkSW1hZ2UsXG4gICAgZ2V0RHJhZnQ6ICgpID0+ICh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCksIHNlc3Npb246IHN0YXRlLnNlc3Npb24sIHJldmlzaW9uOiByZWZzLmRyYWZ0UmV2aXNpb24gfSksXG4gICAgYXR0YWNoSW1hZ2U6IGN0bC5hdHRhY2hJbWFnZSxcbiAgICBzZXRJbnB1dCxcbiAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChtZXNzYWdlKSxcbiAgfSlcbiAgcmVmcy5jYXB0dXJlSW1hZ2UgPz89IGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCh7XG4gICAgY2FwdHVyZVJlZ2lvbixcbiAgICBnZXREcmFmdDogKCkgPT4gKHsgdmFsdWU6IGlucHV0KCksIGN1cnNvcjogaW5wdXRDdXJzb3IoKSwgc2Vzc2lvbjogc3RhdGUuc2Vzc2lvbiwgcmV2aXNpb246IHJlZnMuZHJhZnRSZXZpc2lvbiB9KSxcbiAgICBhdHRhY2hJbWFnZTogY3RsLmF0dGFjaEltYWdlLFxuICAgIHNldElucHV0LFxuICAgIG9uRXJyb3I6IChtZXNzYWdlKSA9PiByZWZzLnVpLmZsYXNoKG1lc3NhZ2UpLFxuICAgIG9uU3RhdHVzOiBzZXRDYXB0dXJlU3RhdHVzLFxuICB9KVxuXG4gIGlmICghcmVmcy5kaWN0YXRpb24pIHtcbiAgICByZWZzLmRpY3RhdGlvbiA9IGNyZWF0ZURpY3RhdGlvbih7XG4gICAgICBvblN0YXR1czogKHN0YXR1cykgPT4ge1xuICAgICAgICBzZXREaWN0YXRpb25TdGF0dXMoc3RhdHVzKVxuICAgICAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgc2V0RGljdGF0aW9uTGV2ZWxzKFtdKVxuICAgICAgfSxcbiAgICAgIG9uTGV2ZWw6IChsZXZlbCkgPT4gc2V0RGljdGF0aW9uTGV2ZWxzKGFwcGVuZExldmVsKGRpY3RhdGlvbkxldmVscygpLCBsZXZlbCkpLFxuICAgICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2goYGRpY3RhdGlvbiBmYWlsZWQ6ICR7bWVzc2FnZX1gKSxcbiAgICB9KVxuICAgIHJlZnMuZGljdGF0aW9uSW5wdXQgPSBjcmVhdGVEaWN0YXRpb25JbnB1dCh7IGRpY3RhdGlvbjogcmVmcy5kaWN0YXRpb24sIGdldElucHV0OiBpbnB1dCwgc2V0SW5wdXQgfSlcbiAgICBjb25zdCBwcmVsb2FkID0gc2V0SW1tZWRpYXRlKCgpID0+IHJlZnMuZGljdGF0aW9uLnByZWxvYWQoKSlcbiAgICBwcmVsb2FkLnVucmVmKClcbiAgICBwcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gICAgICBjbGVhckltbWVkaWF0ZShwcmVsb2FkKVxuICAgICAgcmVmcy5kaWN0YXRpb24uZGlzcG9zZSgpXG4gICAgfSlcbiAgICBmb3IgKGNvbnN0IFtzaWduYWwsIGNvZGVdIG9mIFtbJ1NJR1RFUk0nLCAxNDNdLCBbJ1NJR0hVUCcsIDEyOV1dKSB7XG4gICAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgIHJlZnMuZGljdGF0aW9uLmRpc3Bvc2UoKVxuICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKCFyZWZzLnVwZGF0ZUNoZWNrZWQpIHtcbiAgICByZWZzLnVwZGF0ZUNoZWNrZWQgPSB0cnVlXG4gICAgY2hlY2tGb3JVcGRhdGUodmVyc2lvbikudGhlbigoZm91bmQpID0+IHtcbiAgICAgIGlmICghZm91bmQpIHJldHVyblxuICAgICAgdXBkYXRlVG9hc3QoYHBpY28gdiR7Zm91bmQudmVyc2lvbn0gYXZhaWxhYmxlICAvdXBkYXRlYClcbiAgICAgIGZvdW5kLm1hcmtOb3RpZmllZCgpXG4gICAgfSkuY2F0Y2goKCkgPT4ge30pXG4gIH1cblxuICBjb25zdCBwZXJmb3JtQ29tcGFjdGlvbiA9IGN0bC5jb21wYWN0XG5cbiAgZnVuY3Rpb24gY29tcGxldGlvblNvdXJjZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgPT09ICdjb2xvcicpIHJldHVybiBPYmplY3Qua2V5cyhTRVNTSU9OX0NPTE9SUylcbiAgICBpZiAobmFtZSA9PT0gJ3RoZW1lJykgcmV0dXJuIFsuLi5wYWxldHRlTGlzdCgpLm1hcCgocCkgPT4gcC5rZXkpLCAnYXV0byddXG4gICAgaWYgKG5hbWUgPT09ICdlZmZvcnQnKSByZXR1cm4gWydkZWZhdWx0JywgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXVxuICAgIGlmIChuYW1lID09PSAnbW9kZWwnKSByZXR1cm4gbW9kZWxzLmZpbHRlcigobSkgPT4gbS5hdmFpbGFibGUgIT09IGZhbHNlKS5tYXAoKG0pID0+IG0ubmFtZSlcbiAgICBjb25zdCBjbWQgPSBhbGxDb21tYW5kcy5maW5kKChjKSA9PiBjLm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGNtZD8uc2tpbGwgfHwgY21kPy5jb21tYW5kKSByZXR1cm4gZmlsZUxpc3QoKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBkaXNtaXNzQ29tcGxldGlvbigpIHtcbiAgICBzZXRDb21wbGV0aW5nKGZhbHNlKVxuICAgIHNldENvbXBJbmRleCgwKVxuICB9XG5cbiAgZnVuY3Rpb24gYWNjZXB0Q29tcGxldGlvbih2YWx1ZSwgY3R4LCBjYW5kaWRhdGUpIHtcbiAgICBzZXRJbnB1dChhcHBseUNvbXBsZXRpb24odmFsdWUsIGN0eCwgY2FuZGlkYXRlKSlcbiAgICBkaXNtaXNzQ29tcGxldGlvbigpXG4gIH1cblxuICBmdW5jdGlvbiBzZW5kKHRleHQpIHtcbiAgICBpZiAodmlld2VkQWdlbnRJZCgpIHx8IHZpZXdlZFNoZWxsSWQoKSkgcmV0dXJuXG4gICAgY29uc3QgdmFsdWUgPSB0ZXh0LnRyaW0oKVxuICAgIGlmICghdmFsdWUpIHJldHVyblxuICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgLi4ucmVzdF0gPSB2YWx1ZS5zbGljZSgxKS5zcGxpdCgvXFxzKy8pXG4gICAgICBjb25zdCBtYXRjaCA9IGFsbENvbW1hbmRzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5jb21tYW5kKSByZXR1cm4gaW5zZXJ0Q29tbWFuZChtYXRjaCwgeyBzdGFydDogdGV4dC5pbmRleE9mKCcvJyksIGVuZDogdGV4dC5sZW5ndGggfSwgcmVzdC5qb2luKCcgJykpXG4gICAgICAgIHNldElucHV0KCcnKVxuICAgICAgICBydW5Db21tYW5kKG1hdGNoLCByZXN0LmpvaW4oJyAnKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIHNldEhpc3RJZHgoLTEpXG4gICAgY29tcG9zZXJGaWxlcy51cGRhdGUodGV4dCwgc3RhdGUuYXR0YWNobWVudHMpXG4gICAgY3RsLnNlbmQoY29tcG9zZXJGaWxlcy5jb250ZW50KCkudHJpbSgpKVxuICAgIHNldElucHV0KCcnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJydXB0KCkge1xuICAgIGlmICghYnVzeSgpKSByZXR1cm5cbiAgICBpZiAoc3RhdGUucXVlc3Rpb24pIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgY3RsLmludGVycnVwdCgpXG4gIH1cblxuICBjb25zdCBmbXRUb2tlbnMgPSAobikgPT4gKG4gPj0gMTAwMCA/IGAkeyhuIC8gMTAwMCkudG9GaXhlZCgxKX1rYCA6IFN0cmluZyhuKSlcblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoTWVtb3JpZXMoKSB7XG4gICAgc2V0TWVtb3J5TGlzdChhd2FpdCBib290Lm1lbW9yeS5saXN0KCkuY2F0Y2goKCkgPT4gW10pKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlTWVtb3J5RGlzYWJsZWQobSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBib290Lm1lbW9yeS5zZXREaXNhYmxlZChtLCAhbS5kaXNhYmxlZClcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICBmbGFzaChgJHttLmRpc2FibGVkID8gJ2VuYWJsZWQnIDogJ3N1cHByZXNzZWQnfSAke20ubmFtZX0gKCR7bS5zY29wZX0pYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBtZW1vcnkgdXBkYXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCAxMDApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZm9yZ2V0TWVtb3J5KG0pIHtcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuZm9yZ2V0QXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5maWxlICE9PSBtLmZpbGUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5mb3JnZXRBcm0gPSB7IGZpbGU6IG0uZmlsZSwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZm9yZ2V0IFwiJHttLm5hbWV9XCJgKVxuICAgIH1cbiAgICByZWZzLmZvcmdldEFybSA9IG51bGxcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYm9vdC5tZW1vcnkuZm9yZ2V0KG0pXG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgZmxhc2goYGZvcmdvdCAke20ubmFtZX0gKCR7bS5zY29wZX0pYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBmb3JnZXQgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW5Db250ZXh0UGFuZWwoKSB7XG4gICAgY29uc3QgdG9rID0gKG4pID0+IGB+JHtmbXRUb2tlbnMobil9IHRva2BcbiAgICBjb25zdCBicmVha2Rvd24gPSBhd2FpdCBjdGwuY29udGV4dEJyZWFrZG93bigpXG4gICAgY29uc3Qgcm93cyA9IGJyZWFrZG93bi5yb3dzLm1hcCgocm93KSA9PiAoeyBuYW1lOiByb3cubmFtZSwgZGVzYzogcm93LmRlc2MsIG5vdGU6IHRvayhyb3cudG9rZW5zKSB9KSlcbiAgICBpZiAoYnJlYWtkb3duLm1lYXN1cmVkKSB7XG4gICAgICByb3dzLnB1c2goe1xuICAgICAgICBuYW1lOiAnbGFzdCBtZWFzdXJlZCByZXF1ZXN0JyxcbiAgICAgICAgZGVzYzogJ3Byb3ZpZGVyLXJlcG9ydGVkIGlucHV0IHRva2VucywgdGhlIG51bWJlciBiZWhpbmQgY3R4ICUnLFxuICAgICAgICBub3RlOiBgJHticmVha2Rvd24ubWVhc3VyZWQudG9Mb2NhbGVTdHJpbmcoKX0gdG9rYCxcbiAgICAgIH0pXG4gICAgfVxuICAgIHNldEluZm9QYW5lbCh7XG4gICAgICB0aXRsZTogYENvbnRleHQgICR7YnJlYWtkb3duLm1vZGVsfWAsXG4gICAgICByb3dzLFxuICAgICAgb3ZlcnZpZXc6IGJyZWFrZG93bi5zZWdtZW50cy5sZW5ndGggPyB7IHNlZ21lbnRzOiBicmVha2Rvd24uc2VnbWVudHMsIG1lYXN1cmVkOiBicmVha2Rvd24ubWVhc3VyZWQsIGxpbWl0OiBicmVha2Rvd24ubGltaXQgPz8gbW9kZWwoKS5jb250ZXh0IH0gOiBudWxsLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCB0aGVtZUl0ZW1zID0gKCkgPT4gW1xuICAgIC4uLnBhbGV0dGVMaXN0KCksXG4gICAgeyBrZXk6ICdhdXRvJywgZGVzYzogYGZvbGxvdyB0aGUgdGVybWluYWwgKGRldGVjdGVkOiAke2Jvb3QuZGV0ZWN0ZWRUaGVtZSB8fCAnZGFyayd9KWAgfSxcbiAgXVxuXG4gIGZ1bmN0aW9uIHBhbGV0dGVGb3IocHJlZikge1xuICAgIHJldHVybiBwcmVmID09PSAnYXV0bycgPyBib290LmRldGVjdGVkVGhlbWUgfHwgJ2RhcmsnIDogcHJlZlxuICB9XG5cbiAgZnVuY3Rpb24gcHJldmlld1BhbGV0dGUocHJlZikge1xuICAgIHNldFBhbGV0dGUocGFsZXR0ZUZvcihwcmVmKSlcbiAgICBib290LnNldFRoZW1lPy4oeyBhY2NlbnQ6IGFjY2VudCgpLCBtdXRlZDogTVVURUQgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5VGhlbWVQcmVmKHByZWYpIHtcbiAgICBzZXRUaGVtZVByZWYocHJlZilcbiAgICBwcmV2aWV3UGFsZXR0ZShwcmVmKVxuICAgIHdyaXRlQ29uZmlnKHsgdGhlbWU6IHByZWYgPT09ICdhdXRvJyA/IHVuZGVmaW5lZCA6IHByZWYgfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgZmxhc2gocHJlZiA9PT0gJ2F1dG8nID8gYHRoZW1lOiBhdXRvICBmb2xsb3dpbmcgdGhlIHRlcm1pbmFsICgke3BhbGV0dGVGb3IoJ2F1dG8nKX0pYCA6IGB0aGVtZTogJHtwcmVmfWApXG4gIH1cblxuICBmdW5jdGlvbiBzdGVlclByZXZpZXcoKSB7XG4gICAgcmV0dXJuIGN0bC5wcmV2aWV3U3RlZXIoc3RlZXIoKT8uY2hhbmdlcylcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZWVyUm93cygpIHtcbiAgICByZXR1cm4gc3RlZXJhYmxlVHJhbnNjcmlwdChzdGVlclByZXZpZXcoKS50cmFuc2NyaXB0KVxuICB9XG5cbiAgZnVuY3Rpb24gYmVnaW5TdGVlcigpIHtcbiAgICBpZiAoYnVzeSgpIHx8IGNvbXBhY3RpbmcoKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5tYXgoMCwgcm93cy5sZW5ndGggLSAxKVxuICAgIHNldFN0ZWVyKHsgc2VsZWN0ZWQsIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlLCByb2xlOiAndXNlcicsIGNoYW5nZXM6IFtdIH0pXG4gICAgaWYgKHJvd3Nbc2VsZWN0ZWRdKSBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzW3NlbGVjdGVkXS5tZXNzYWdlSWQpXG4gICAgc2V0SGlzdFdpbmRvdyhJbmZpbml0eSlcbiAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICBmbS5mb2N1cygnc3RlZXInKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VTdGVlcihhcHBsaWVkID0gZmFsc2UpIHtcbiAgICBzZXRTdGVlcihudWxsKVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgaWYgKGFwcGxpZWQpIGZsYXNoKCdjb252ZXJzYXRpb24gc3RlZXJpbmcgYXBwbGllZCAgbm90aGluZyBzZW50JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5U3RlZXIoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgaWYgKCFkcmFmdD8uY2hhbmdlcy5sZW5ndGgpIHJldHVybiBjbG9zZVN0ZWVyKClcbiAgICBjdGwuYXBwbHlTdGVlcihkcmFmdC5jaGFuZ2VzKVxuICAgIGNsb3NlU3RlZXIodHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RlZXJFZGl0KCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvdyA9IHN0ZWVyUm93cygpW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGlmICghcm93KSByZXR1cm4gc3RhcnRTdGVlckFkZCgpXG4gICAgaWYgKHJvdy5sb2NrZWQpIHJldHVybiBmbGFzaCgnbG9ja2VkICB0aGlzIG1lc3NhZ2UgaXMgYmVmb3JlIHRoZSBsYXRlc3QgY29tcGFjdGlvbicpXG4gICAgc2V0U3RlZXJUZXh0KHJvdy50ZXh0KVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IHRydWUsIGFkZGluZzogZmFsc2UsIHJvbGU6IHJvdy5yb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFN0ZWVyQWRkKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBjb25zdCBwcmV2aW91c1JvbGUgPSBzZWxlY3RlZD8ucm9sZVxuICAgIGNvbnN0IHJvbGUgPSBwcmV2aW91c1JvbGUgPT09ICd1c2VyJyA/ICdhc3Npc3RhbnQnIDogU1RFRVJfUk9MRVNbMF1cbiAgICBzZXRTdGVlclRleHQoJycpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogdHJ1ZSwgYWRkaW5nOiB0cnVlLCByb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyVGV4dCh0ZXh0KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0ZXh0LnRyaW0oKVxuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBmbGFzaCgnbWVzc2FnZSBjYW5ub3QgYmUgZW1wdHknKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgY29uc3QgY2hhbmdlID0gZHJhZnQuYWRkaW5nXG4gICAgICA/IHsgb3A6ICdpbnNlcnQnLCBpZDogbWFrZUV2ZW50KCdtZXNzYWdlJykuaWQsIGFmdGVyOiB0YXJnZXQ/Lm1lc3NhZ2VJZCA/PyBudWxsLCBtZXNzYWdlOiB7IHJvbGU6IGRyYWZ0LnJvbGUsIGNvbnRlbnQ6IHZhbHVlIH0gfVxuICAgICAgOiB7IG9wOiAncmVwbGFjZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCwgbWVzc2FnZTogeyByb2xlOiBkcmFmdC5yb2xlLCBjb250ZW50OiB2YWx1ZSB9IH1cbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSwgY2hhbmdlczogWy4uLmRyYWZ0LmNoYW5nZXMsIGNoYW5nZV0gfSlcbiAgICBzZXRTdGVlclRleHQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyRGVsZXRlKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgaWYgKCF0YXJnZXQpIHJldHVyblxuICAgIGlmICh0YXJnZXQubG9ja2VkKSByZXR1cm4gZmxhc2goJ2xvY2tlZCAgdGhpcyBtZXNzYWdlIGlzIGJlZm9yZSB0aGUgbGF0ZXN0IGNvbXBhY3Rpb24nKVxuICAgIGNvbnN0IGNoYW5nZXMgPSBbLi4uZHJhZnQuY2hhbmdlcywgeyBvcDogJ2RlbGV0ZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCB9XVxuICAgIGNvbnN0IHJlbWFpbmluZyA9IHJvd3MuZmlsdGVyKChyb3cpID0+IHJvdy5tZXNzYWdlSWQgIT09IHRhcmdldC5tZXNzYWdlSWQpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihkcmFmdC5zZWxlY3RlZCwgTWF0aC5tYXgoMCwgcmVtYWluaW5nLmxlbmd0aCAtIDEpKVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkLCBjaGFuZ2VzIH0pXG4gICAgaWYgKHJlbWFpbmluZ1tzZWxlY3RlZF0pIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJlbWFpbmluZ1tzZWxlY3RlZF0ubWVzc2FnZUlkKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW5zZXJ0Q29tbWFuZChjb21tYW5kLCByYW5nZSA9IGNvbW1hbmRBdChpbnB1dCgpLCBpbnB1dEN1cnNvcigpKSwgYXJncyA9ICcnKSB7XG4gICAgaWYgKCFyYW5nZSkgcmV0dXJuXG4gICAgY29uc3QgZHJhZnQgPSBpbnB1dCgpXG4gICAgY29uc3QgdG9rZW4gPSB7fVxuICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IHRva2VuXG4gICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBib290LmNvbW1hbmRzLmxpc3QoKS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbW1hbmQubmFtZSlcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gcGFyc2VGcm9udG1hdHRlcihhd2FpdCByZWFkRmlsZShtZXRhZGF0YS5maWxlLCAndXRmLTgnKSlcbiAgICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IHRva2VuIHx8IGlucHV0KCkgIT09IGRyYWZ0KSByZXR1cm5cbiAgICAgIGNvbnN0IGZvcm0gPSB7IG5hbWU6IGNvbW1hbmQubmFtZSwgYm9keTogYm9keS50cmltKCksIGRyYWZ0LCByYW5nZSwgYXJncywgdG9rZW4gfVxuICAgICAgY29uc3QgZmllbGRzID0gY29tbWFuZEZpZWxkcyh7IGFyZ3VtZW50czogcGFyc2VDb21tYW5kQXJndW1lbnRzKGJvZHkpIH0sIGJvZHksIGFyZ3MpXG4gICAgICBpZiAoZmllbGRzLmxlbmd0aCkge1xuICAgICAgICBzZXRDb21tYW5kRm9ybSh7IC4uLmZvcm0sIGZpZWxkcyB9KVxuICAgICAgICBpZiAoZmllbGRzLnNvbWUoKGZpZWxkKSA9PiBmaWVsZC50eXBlID09PSAncGF0aCcpKSB7XG4gICAgICAgICAgbGlzdEZpbGVzKGN3ZCkudGhlbihzZXRGaWxlTGlzdCkuY2F0Y2goKGVycm9yKSA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGZpbmlzaENvbW1hbmQoZm9ybSwge30pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGBjb3VsZCBub3QgbG9hZCAvJHtjb21tYW5kLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2hDb21tYW5kKGZvcm0sIHZhbHVlcykge1xuICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IGZvcm0udG9rZW4gfHwgaW5wdXQoKSAhPT0gZm9ybS5kcmFmdCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBleHBhbmRDb21tYW5kKGZvcm0uYm9keSwgdmFsdWVzWyckYXJncyddID8/IGZvcm0uYXJncywgdmFsdWVzKVxuICAgICAgY29uc3QgbmV4dCA9IHJlcGxhY2VDb21tYW5kKGZvcm0uZHJhZnQsIGZvcm0ucmFuZ2UsIGJvZHkpXG4gICAgICBzZXRJbnB1dChuZXh0LnRleHQsIG5leHQuY3Vyc29yKVxuICAgICAgc2V0Q29tbWFuZEZvcm0obnVsbClcbiAgICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGxcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjLCBhcmdzID0gJycpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3MgIT09ICdzdHJpbmcnKSBhcmdzID0gJydcbiAgICBpZiAoYy5jb21tYW5kKSByZXR1cm4gaW5zZXJ0Q29tbWFuZChjKVxuICAgIHNldElucHV0KCcnKVxuICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2ZvcmsnKSByZXR1cm4gY3RsLmZvcmsoYXJncy50cmltKCkpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3JlbmFtZScpIHJldHVybiBjdGwucmVuYW1lKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbG9yJykgcmV0dXJuIGN0bC5zZXRDb2xvcihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb25maWcnKSB7XG4gICAgICBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAndGhlbWUnKSB7XG4gICAgICBpZiAoIWFyZ3MpIHJldHVybiBzZXRTaG93VGhlbWVQYW5lbCh0cnVlKVxuICAgICAgY29uc3QgY2hvaWNlID0gYXJncy50b0xvd2VyQ2FzZSgpXG4gICAgICBjb25zdCB2YWxpZCA9IFsuLi5wYWxldHRlTGlzdCgpLm1hcCgocCkgPT4gcC5rZXkpLCAnYXV0byddXG4gICAgICBpZiAoIXZhbGlkLmluY2x1ZGVzKGNob2ljZSkpIHJldHVybiBmbGFzaChgdGhlbWU6ICR7cGFsZXR0ZU5hbWUoKX0gIC90aGVtZSA8JHt2YWxpZC5qb2luKCd8Jyl9PmApXG4gICAgICBhcHBseVRoZW1lUHJlZihjaG9pY2UpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMuc2tpbGwpIHJldHVybiBjdGwuc2VuZFNraWxsKGMubmFtZSlcbiAgICBpZiAoYy5uYW1lID09PSAnY29ubmVjdCcpIHJldHVybiBvcGVuQ29ubmVjdFBhbmVsKClcbiAgICBpZiAoYy5uYW1lID09PSAnaW5pdCcpIHJldHVybiBjdGwuc2VuZEluaXQoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAncGFyYWxsZWwnKSB7XG4gICAgICBjb25zdCB0YXNrID0gYXJncy50cmltKClcbiAgICAgIGlmIChjdGwuc2VuZFBhcmFsbGVsKHRhc2spKSByZXR1cm5cbiAgICAgIHNldFBlbmRpbmdSZXNlYXJjaCh7IHRhc2sgfSlcbiAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnZGVsaWJlcmF0ZScpIHtcbiAgICAgIGNvbnN0IGRlY2lzaW9uID0gYXJncy50cmltKClcbiAgICAgIGlmIChjdGwuc2VuZERlbGliZXJhdGUoZGVjaXNpb24pKSByZXR1cm5cbiAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24oeyBkZWNpc2lvbiB9KVxuICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwodHJ1ZSlcbiAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnbW9kZWwnKSB7XG4gICAgICBpZiAoIWFyZ3MpIHJldHVybiBzZXRTaG93TW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuIGN0bC5zd2l0Y2hNb2RlbEJ5TmFtZShhcmdzKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnZWZmb3J0Jykge1xuICAgICAgaWYgKCFlZmZvcnRBcHBsaWVzKCkpIHJldHVybiBmbGFzaChgJHttb2RlbCgpLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgZWZmb3J0IGNvbnRyb2xgKVxuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd0VmZm9ydFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnNldEVmZm9ydEJ5TmFtZShhcmdzLnRvTG93ZXJDYXNlKCkpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd1cGRhdGUnKSB7XG4gICAgICBpZiAoaXNEZXZJbnN0YWxsKGltcG9ydC5tZXRhLnVybCkpIHJldHVybiBmbGFzaCgndGhpcyBwaWNvIHJ1bnMgZnJvbSBhIHNvdXJjZSBjaGVja291dCAgdXBkYXRlIGl0IHdpdGggZ2l0JylcbiAgICAgIGNvbnN0IGxhdGVzdCA9IGF3YWl0IGZldGNoTGF0ZXN0VmVyc2lvbigpLmNhdGNoKCgpID0+IG51bGwpXG4gICAgICBpZiAobGF0ZXN0ICYmICFuZXdlclZlcnNpb24odmVyc2lvbiwgbGF0ZXN0KSkgcmV0dXJuIGZsYXNoKGBwaWNvIHYke3ZlcnNpb259IGlzIGFscmVhZHkgdGhlIGxhdGVzdGApXG4gICAgICBmbGFzaChgdXBkYXRpbmcke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ30uLi5gKVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVXBkYXRlKClcbiAgICAgIGlmIChyZXN1bHQub2spIHJldHVybiBmbGFzaChgdXBkYXRlZCR7bGF0ZXN0ID8gYCB0byB2JHtsYXRlc3R9YCA6ICcnfSAgcmVzdGFydCBwaWNvIHRvIHVzZSBpdGApXG4gICAgICByZXR1cm4gZmxhc2goYHVwZGF0ZSBmYWlsZWQ6ICR7cmVzdWx0Lm91dHB1dC5zbGljZSgwLCAxMDApfWApXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdzdGVlcicpIHJldHVybiBiZWdpblN0ZWVyKClcbiAgICBpZiAoYy5uYW1lID09PSAnY29udGV4dCcpIHJldHVybiBvcGVuQ29udGV4dFBhbmVsKClcbiAgICBpZiAoYy5uYW1lID09PSAnaGlzdG9yeScpIHJldHVybiBvcGVuSGlzdG9yeVNlYXJjaCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2hlbHAnKSByZXR1cm4gc2V0VmlldygnaGVscCcpXG4gICAgaWYgKGMubmFtZSA9PT0gJ21jcCcpIHJldHVybiBzZXRTaG93TWNwUGFuZWwodHJ1ZSlcbiAgICBpZiAoYy5uYW1lID09PSAnd2FrZXVwcycpIHJldHVybiBzZXRTaG93V2FrZXVwc1BhbmVsKHRydWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ21lbW9yeScpIHtcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICByZXR1cm4gc2V0U2hvd01lbW9yeVBhbmVsKHRydWUpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZXN1bWUnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBiZWZvcmUgc3dpdGNoaW5nIHNlc3Npb25zJylcbiAgICAgIHNldFNob3dSZXN1bWVQYW5lbCh0cnVlKVxuICAgICAgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Byb2plY3QnKSByZXR1cm4gb3BlblByb2plY3RQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2N3ZCcpIHtcbiAgICAgIGNvbnN0IHJvb3ROb3RlID0gYm9vdC5yb290ICE9PSBib290LmN3ZCA/IGAgIHByb2plY3Qgcm9vdCAke3Nob3J0ZW5QYXRoKGJvb3Qucm9vdCl9YCA6ICcnXG4gICAgICByZXR1cm4gZmxhc2goYCR7Ym9vdC5kaXNwbGF5Q3dkfSR7cm9vdE5vdGV9YClcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3NraWxscycpIHtcbiAgICAgIHJldHVybiBzZXRJbmZvUGFuZWwoe1xuICAgICAgICB0aXRsZTogJ1NraWxscycsXG4gICAgICAgIHJvd3M6IHNraWxscy5saXN0KCkubWFwKChzKSA9PiAoeyBuYW1lOiBzLm5hbWUsIGRlc2M6IHMuZGVzY3JpcHRpb24sIG5vdGU6IHMuc291cmNlIH0pKSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdjb21tYW5kcycpIHtcbiAgICAgIHJldHVybiBzZXRJbmZvUGFuZWwoe1xuICAgICAgICB0aXRsZTogJ0NvbW1hbmRzJyxcbiAgICAgICAgcm93czogW1xuICAgICAgICAgIC4uLkNPTU1BTkRTLm1hcCgoY21kKSA9PiAoeyBuYW1lOiBgLyR7Y21kLm5hbWV9YCwgZGVzYzogY21kLmRlc2MsIG5vdGU6ICdidWlsdGluJyB9KSksXG4gICAgICAgICAgLi4uYm9vdC5jb21tYW5kcy5saXN0KCkubWFwKChjbWQpID0+ICh7IG5hbWU6IGAvJHtjbWQubmFtZX1gLCBkZXNjOiBjbWQuZGVzY3JpcHRpb24sIG5vdGU6IGNtZC5zb3VyY2UgfSkpLFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Rvb2xzJykge1xuICAgICAgY29uc3QgeyByb3dzLCBtY3BDb3VudCB9ID0gYXdhaXQgY3RsLmRlc2NyaWJlVG9vbHMoKVxuICAgICAgc2V0SW5mb1BhbmVsKHsgdGl0bGU6IGBUb29scyR7bWNwQ291bnQgPyBgICBwbHVzICR7bWNwQ291bnR9IE1DUCAoc2VlIC9tY3ApYCA6ICcnfWAsIHJvd3MgfSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnbmV3JykgcmV0dXJuIGN0bC5uZXdTZXNzaW9uKClcbiAgICBpZiAoYy5uYW1lID09PSAnZGVsZXRlJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgaWYgKCFzdGF0ZS5zZXNzaW9uKSByZXR1cm4gZmxhc2goJ25vIGN1cnJlbnQgc2Vzc2lvbiB0byBkZWxldGUnKVxuICAgICAgc2V0U2hvd0RlbGV0ZUNvbmZpcm0odHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmV3aW5kJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSByZXR1cm4gZmxhc2goJ25vdGhpbmcgdG8gcmV3aW5kIHlldCcpXG4gICAgICBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY2xlYXInKSByZXR1cm4gY3RsLmNsZWFyKClcbiAgICBpZiAoYy5uYW1lID09PSAnY29tcGFjdCcpIHJldHVybiBwZXJmb3JtQ29tcGFjdGlvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb3N0Jykge1xuICAgICAgY29uc3QgY29zdCA9IGN0bC5jb3N0U3VtbWFyeSgpXG4gICAgICBpZiAoIWNvc3QpIHJldHVybiBmbGFzaCgnbm8gdXNhZ2UgeWV0JylcbiAgICAgIGNvbnN0IGJhc2UgPSBgJCR7Y29zdC5zcGVudC50b0ZpeGVkKDQpfSBzcGVudCAgJHtjb3N0LnByb21wdFRva2Vucy50b0xvY2FsZVN0cmluZygpfSBpbiAgJHtjb3N0LmNvbXBsZXRpb25Ub2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gb3V0YFxuICAgICAgZmxhc2goY29zdC5zcGVudCAtIGNvc3QuYWN0aXZlID4gMC4wMDAwNSA/IGAke2Jhc2V9ICBjdXJyZW50IGNvbnZlcnNhdGlvbiAkJHtjb3N0LmFjdGl2ZS50b0ZpeGVkKDQpfWAgOiBiYXNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdleHBvcnQnKSB7XG4gICAgICBjb25zdCBmaWxlID0gYXdhaXQgY3RsLmV4cG9ydE1hcmtkb3duKClcbiAgICAgIGZsYXNoKGBleHBvcnRlZCB0byAke2ZpbGV9YClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hBdXRoUHJvdmlkZXJzKCkge1xuICAgIGNvbnN0IG9wZW5haSA9IGF3YWl0IG9wZW5haVN0YXR1cygpLmNhdGNoKCgpID0+ICh7IGNvbm5lY3RlZDogZmFsc2UsIGVtYWlsOiBudWxsIH0pKVxuICAgIHNldEF1dGhQcm92aWRlcnMoW1xuICAgICAgeyBpZDogJ29wZW5haScsIGxhYmVsOiAnT3BlbkFJICBDaGF0R1BUIC8gQ29kZXggcGxhbicsIGNvbm5lY3RlZDogb3BlbmFpLmNvbm5lY3RlZCwgZW1haWw6IG9wZW5haS5lbWFpbCB9LFxuICAgIF0pXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuQ29ubmVjdFBhbmVsKCkge1xuICAgIHNldFNob3dDb25uZWN0UGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoQXV0aFByb3ZpZGVycygpXG4gIH1cblxuICBmdW5jdGlvbiBjb25uZWN0UHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIuaWQgIT09ICdvcGVuYWknKSByZXR1cm5cbiAgICBzZXRTaG93Q29ubmVjdFBhbmVsKGZhbHNlKVxuICAgIGZsYXNoKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjdGwuY29ubmVjdFByb3ZpZGVyKClcbiAgICAgIC50aGVuKCh7IGVtYWlsLCBjb3VudCB9KSA9PiBmbGFzaChgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J30gICR7Y291bnR9IGNvZGV4IG1vZGVscyB1bmxvY2tlZCBpbiAvbW9kZWxgKSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiBmbGFzaChgY29ubmVjdCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc2Nvbm5lY3RQcm92aWRlcihwcm92aWRlcikge1xuICAgIGlmIChwcm92aWRlci5pZCAhPT0gJ29wZW5haScpIHJldHVyblxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kaXNjb25uZWN0QXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gcHJvdmlkZXIuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5kaXNjb25uZWN0QXJtID0geyBpZDogcHJvdmlkZXIuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRpc2Nvbm5lY3QgJHtwcm92aWRlci5sYWJlbH0gKHlvdSB3aWxsIG5lZWQgdG8gc2lnbiBpbiBhZ2FpbilgKVxuICAgIH1cbiAgICByZWZzLmRpc2Nvbm5lY3RBcm0gPSBudWxsXG4gICAgYXdhaXQgY3RsLmRpc2Nvbm5lY3RQcm92aWRlcigpXG4gICAgcmVmcmVzaEF1dGhQcm92aWRlcnMoKVxuICAgIGZsYXNoKCdkaXNjb25uZWN0ZWQgZnJvbSBDaGF0R1BUJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZnJlc2hTZXNzaW9ucyhzY29wZUluZGV4KSB7XG4gICAgc2V0UmVzdW1lTG9hZGluZyh0cnVlKVxuICAgIGN0bC5saXN0UmVzdW1lU2Vzc2lvbnMoUkVTVU1FX1NDT1BFU1tzY29wZUluZGV4XSlcbiAgICAgIC50aGVuKHNldFJlc3VtZVNlc3Npb25zKVxuICAgICAgLmZpbmFsbHkoKCkgPT4gc2V0UmVzdW1lTG9hZGluZyhmYWxzZSkpXG4gIH1cblxuICBmdW5jdGlvbiBzaG9ydGVuUGF0aChwYXRoKSB7XG4gICAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoaG9tZSkgPyBwYXRoLnJlcGxhY2UoaG9tZSwgJ34nKSA6IHBhdGhcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Qcm9qZWN0UGFuZWwoKSB7XG4gICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgc2V0U2hvd1Byb2plY3RQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hQcm9qZWN0cygpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoUHJvamVjdHMoKSB7XG4gICAgc2V0UHJvamVjdHNMb2FkaW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBjdGwubGlzdFByb2plY3RzKClcbiAgICAgIHNldFByb2plY3RzKGxpc3QubWFwKChwcm9qZWN0KSA9PiAoe1xuICAgICAgICAuLi5wcm9qZWN0LFxuICAgICAgICBwYXRoOiBzaG9ydGVuUGF0aChwcm9qZWN0LnJvb3QpLFxuICAgICAgICBjaGVja291dHM6IHByb2plY3QuY2hlY2tvdXRzLm1hcCgoY2hlY2tvdXQpID0+ICh7IC4uLmNoZWNrb3V0LCBwYXRoOiBzaG9ydGVuUGF0aChjaGVja291dC5yb290KSB9KSksXG4gICAgICB9KSkpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFByb2plY3RzTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRQcm9qZWN0V29ya3RyZWUoY2hlY2tvdXQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJlZSA9IGF3YWl0IGN0bC5hZGRXb3JrdHJlZShjaGVja291dC5vd25lcilcbiAgICAgIGF3YWl0IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKHsgcm9vdDogdHJlZS5wYXRoIH0pXG4gICAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYHdvcmt0cmVlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVQcm9qZWN0Q2hlY2tvdXQoY2hlY2tvdXQpIHtcbiAgICBpZiAoY2hlY2tvdXQud29ya3RyZWUpIHtcbiAgICAgIGlmIChjaGVja291dC5jdXJyZW50KSByZXR1cm4gZmxhc2goJ2Nhbm5vdCByZW1vdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5wcm9qZWN0RGVsZXRlQXJtXG4gICAgICBpZiAoIWFybWVkIHx8IGFybWVkLnJvb3QgIT09IGNoZWNrb3V0LnJvb3QgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gcmVtb3ZlIFwiJHtjaGVja291dC5icmFuY2ggfHwgY2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgICB9XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjdGwuZGVsZXRlV29ya3RyZWUoY2hlY2tvdXQpXG4gICAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICAgIGZsYXNoKGByZW1vdmVkICR7Y2hlY2tvdXQuYnJhbmNoIHx8IGNoZWNrb3V0LnBhdGh9YClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBmbGFzaChgcmVtb3ZlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2hlY2tvdXQuY3VycmVudCkgcmV0dXJuIGZsYXNoKCdjYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50IHByb2plY3QgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMucHJvamVjdERlbGV0ZUFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQucm9vdCAhPT0gY2hlY2tvdXQucm9vdCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRlbGV0ZSBcIiR7Y2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgfVxuICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IG51bGxcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlUHJvamVjdERhdGEoY2hlY2tvdXQucm9vdClcbiAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICBmbGFzaChgZGVsZXRlZCAke2NoZWNrb3V0LnBhdGh9ICAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ30gcmVtb3ZlZGApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZGVsZXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVTZXNzaW9uTWV0YShtZXRhKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHN0YXRlLnNlc3Npb24/LmlkID09PSBtZXRhLmhlYWRlci5pZFxuICAgIGlmIChjdXJyZW50ICYmIGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kZWxldGVBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG1ldGEuZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmRlbGV0ZUFybSA9IHsgZmlsZTogbWV0YS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkZWxldGUgXCIke21ldGEudGl0bGUuc2xpY2UoMCwgNTApfVwiYClcbiAgICB9XG4gICAgcmVmcy5kZWxldGVBcm0gPSBudWxsXG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIGlmIChhd2FpdCBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSkgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNlc3Npb24obWV0YS5maWxlKVxuICAgICAgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICBmbGFzaCgnc2Vzc2lvbiBkZWxldGVkJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBkZWxldGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlc3VtZVNlc3Npb24obWV0YSkge1xuICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSlcbiAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIGF3YWl0IGN0bC5yZXN1bWUobWV0YSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5IaXN0b3J5U2VhcmNoKCkge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZW50KClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKHNlc3Npb24pKVxuICAgIHNldFNob3dIaXN0b3J5UGFuZWwodHJ1ZSlcbiAgICBzZXRIaXN0U2NvcGUoMClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZHVwZVByb21wdHMocG9vbCkge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KClcbiAgICBjb25zdCBvdXQgPSBbXVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnBvb2xdLnNvcnQoKGEsIGIpID0+IGIuYXQgLSBhLmF0KSkge1xuICAgICAgaWYgKHNlZW4uaGFzKGVudHJ5LnRleHQpKSBjb250aW51ZVxuICAgICAgc2Vlbi5hZGQoZW50cnkudGV4dClcbiAgICAgIG91dC5wdXNoKGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzd2l0Y2hIaXN0U2NvcGUobmV4dCkge1xuICAgIHNldEhpc3RTY29wZShuZXh0KVxuICAgIGlmIChuZXh0ID09PSAwKSByZXR1cm4gc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhzZW50KCkpKVxuICAgIGNvbnN0IHByb2plY3QgPSBhd2FpdCBsb2FkUHJvamVjdFByb21wdHMocm9vdClcbiAgICBpZiAobmV4dCA9PT0gMSkgcmV0dXJuIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoWy4uLnNlbnQoKSwgLi4ucHJvamVjdF0pKVxuICAgIGNvbnN0IGdsb2JhbCA9IGF3YWl0IGxvYWRHbG9iYWxQcm9tcHRzKClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKFsuLi5zZW50KCksIC4uLnByb2plY3QsIC4uLmdsb2JhbF0pKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVJld2luZFRvKHRhcmdldCwgb3B0KSB7XG4gICAgYXdhaXQgY3RsLnJld2luZCh0YXJnZXQsIG9wdC5rZXkpXG4gICAgc2V0UmV3aW5kU3RlcChudWxsKVxuICAgIHNldFJld2luZFRhcmdldChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gcGVyZm9ybVJld2luZChvcHQpIHtcbiAgICByZXR1cm4gcGVyZm9ybVJld2luZFRvKHJld2luZFRhcmdldCgpLCBvcHQpXG4gIH1cblxuICBjb25zdCB1bmRvUmV3aW5kID0gY3RsLnVuZG9SZXdpbmRcblxuICBhc3luYyBmdW5jdGlvbiBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSB7XG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IGN0bC5kZWxldGVDdXJyZW50U2Vzc2lvbigpXG4gICAgc2V0U2hvd0RlbGV0ZUNvbmZpcm0oZmFsc2UpXG4gICAgcmV0dXJuIGRlbGV0ZWRcbiAgfVxuXG4gIGNvbnN0IGFueVBhbmVsID0gKCkgPT5cbiAgICBzaG93TW9kZWxQYW5lbCgpIHx8IHNob3dSZXNlYXJjaE1vZGVsUGFuZWwoKSB8fCBzaG93RWZmb3J0UGFuZWwoKSB8fCBzaG93VGhlbWVQYW5lbCgpIHx8IHNob3dDb25maWdQYW5lbCgpIHx8IHNob3dEZWxldGVDb25maXJtKCkgfHwgc2hvd01lbW9yeVBhbmVsKCkgfHwgc2hvd0hpc3RvcnlQYW5lbCgpIHx8IHNob3dSZXN1bWVQYW5lbCgpIHx8IHNob3dNY3BQYW5lbCgpIHx8XG4gICAgc2hvd1Byb2plY3RQYW5lbCgpIHx8IHNob3dXYWtldXBzUGFuZWwoKSB8fCBzaG93Q29ubmVjdFBhbmVsKCkgfHxcbiAgICBjb21tYW5kRm9ybSgpICE9PSBudWxsIHx8IGluZm9QYW5lbCgpICE9PSBudWxsIHx8IHJld2luZFN0ZXAoKSAhPT0gbnVsbFxuXG4gIC8vIGV2ZXJ5IGZvY3VzLXRha2luZyBwYW5lbCBkaW1zIHRoZSBjb252ZXJzYXRpb24gYmVoaW5kIGl0OyB0aGUgdGhlbWVcbiAgLy8gcGlja2VyIGlzIHRoZSBvbmUgZXhlbXB0aW9uLCBzaW5jZSBpdHMgam9iIGlzIHByZXZpZXdpbmcgcGFsZXR0ZXMgb25cbiAgLy8gdGhlIHVuZGltbWVkIHVpXG4gIGNvbnN0IGRpbW1pbmdQYW5lbCA9ICgpID0+IGFueVBhbmVsKCkgJiYgIXNob3dUaGVtZVBhbmVsKClcblxuICBmdW5jdGlvbiBjYW5jZWxBZ2VudChhZ2VudCkge1xuICAgIGN0bC5jYW5jZWxBZ2VudChhZ2VudC5pZClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NBZ2VudChhZ2VudCkge1xuICAgIGlmICghY3RsLmRpc21pc3NBZ2VudChhZ2VudC5pZCkpIHJldHVyblxuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgPT09IGFnZW50LmlkKSBzZXRWaWV3ZWRBZ2VudElkKG51bGwpXG4gIH1cblxuICBmdW5jdGlvbiBzdG9wT3JEaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0pIHtcbiAgICBpZiAoaXRlbS5zdGF0dXMgPT09ICdydW5uaW5nJykge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjdGwuZGlzbWlzc0RlbGliZXJhdGlvbihpdGVtLmRlbGliZXJhdGlvbklkKVxuICAgIGlmICh2aWV3ZWRBZ2VudElkKCkgPT09IGl0ZW0uaWQpIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc21pc3NTaGVsbChzaGVsbCkge1xuICAgIGJvb3Quc2hlbGxzLmRpc21pc3Moc2hlbGwuaWQpXG4gICAgaWYgKHZpZXdlZFNoZWxsSWQoKSA9PT0gc2hlbGwuaWQpIHNldFZpZXdlZFNoZWxsSWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIGtpbGxTaGVsbChzaGVsbCkge1xuICAgIGlmIChzaGVsbC5zdGF0dXMgIT09ICdydW5uaW5nJykgcmV0dXJuIGZsYXNoKGBzaGVsbCAke3NoZWxsLmlkfSBhbHJlYWR5IGV4aXRlZGApXG4gICAgY29uc3QgYXJtZWQgPSByZWZzLnNoZWxsS2lsbEFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHNoZWxsLmlkIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMuc2hlbGxLaWxsQXJtID0geyBpZDogc2hlbGwuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGtpbGwgXCIke3NoZWxsLmRlc2NyaXB0aW9uIHx8IGBzaGVsbCAke3NoZWxsLmlkfWB9XCJgKVxuICAgIH1cbiAgICByZWZzLnNoZWxsS2lsbEFybSA9IG51bGxcbiAgICBib290LnNoZWxscy5raWxsKHNoZWxsLmlkLCAndXNlcicpXG4gIH1cblxuICBjb25zdCBlZmZvcnRBcHBsaWVzID0gY3RsLmVmZm9ydEFwcGxpZXNcbiAgY29uc3Qgc2V0U2Vzc2lvbkVmZm9ydCA9IGN0bC5zZXRFZmZvcnRcblxuICBjb25zdCBmbSA9IHVzZUZvY3VzKHsgaW5pdGlhbDogJ2lucHV0JyB9KVxuICBjb25zdCBzdGVlckxpc3RGb2N1cyA9IHVzZUZvY3VzKHsgaW5pdGlhbDogbnVsbCwgY3ljbGU6ICdub25lJywgYWN0aXZlOiBmYWxzZSB9KVxuICBmbS5pdGVtKCdmZWVkJylcbiAgaWYgKHN0ZWVyKCkpIHtcbiAgICBmbS5pdGVtKCdzdGVlcicpXG4gICAgaWYgKCFmbS5pcygnc3RlZXInKSkgZm0uZm9jdXMoJ3N0ZWVyJylcbiAgfVxuICBjb25zdCBjb252ZXJzYXRpb25TZWFyY2ggPSBjcmVhdGVDb252ZXJzYXRpb25TZWFyY2goeyBmbSwgdmVyYm9zZSwgc2V0Rm9sbG93LCBzZXRPZmZzZXQgfSlcbiAgY29udmVyc2F0aW9uU2VhcmNoLnJlZ2lzdGVyRm9jdXMoKVxuICBsZXQgY29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlcyA9IFtdXG4gIGFnZW50c1ZlcnNpb24oKVxuICBjb25zdCBhZ2VudFJvd3MgPSBjdGwuYWN0aXZpdHkoKVxuICBzaGVsbHNWZXJzaW9uKClcbiAgY29uc3Qgc2hlbGxSb3dzID0gY3RsLnNoZWxsUm93cygpXG4gIGlmIChxdWVzdGlvblJlcXVlc3QoKSkge1xuICAgIGZtLml0ZW0oJ3F1ZXN0aW9uJylcbiAgICBpZiAoIWZtLmlzKCdxdWVzdGlvbicpKSBmbS5mb2N1cygncXVlc3Rpb24nKVxuICB9IGVsc2Uge1xuICAgIGlmICghdmlld2VkQWdlbnRJZCgpICYmICF2aWV3ZWRTaGVsbElkKCkpIGZtLml0ZW0oJ2lucHV0JylcbiAgICBpZiAoc2hlbGxSb3dzLmxlbmd0aCA+IDAgJiYgYWdlbnRSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZtLmdyb3VwKCdhY3Rpdml0eS1zdHJpcCcsIHsgaXRlbXM6IFsnYWN0aXZpdHktbWFpbicsIC4uLnNoZWxsUm93cy5tYXAoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCksIC4uLmFnZW50Um93cy5tYXAoKGEpID0+IGBhZ2VudC0ke2EuaWR9YCldLCBuYXZpZ2F0ZTogJ2JvdGgnLCB3cmFwOiB0cnVlIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaGVsbFJvd3MubGVuZ3RoID4gMCkgZm0uZ3JvdXAoJ3NoZWxsLXN0cmlwJywgeyBpdGVtczogWydzaGVsbC1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgocykgPT4gYHNoZWxsLSR7cy5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICAgIGlmIChhZ2VudFJvd3MubGVuZ3RoID4gMCkgZm0uZ3JvdXAoJ2FnZW50LXN0cmlwJywgeyBpdGVtczogWydhZ2VudC1tYWluJywgLi4uYWdlbnRSb3dzLm1hcCgoYSkgPT4gYGFnZW50LSR7YS5pZH1gKV0sIG5hdmlnYXRlOiAnYm90aCcsIHdyYXA6IHRydWUgfSlcbiAgICB9XG4gICAgaWYgKHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gJiYgIXZpZXdlZEFnZW50SWQoKSAmJiAhdmlld2VkU2hlbGxJZCgpKSB7XG4gICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gZmFsc2VcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfVxuICB9XG4gIHVzZUZvY3VzVHJhcChhbnlQYW5lbCgpIHx8IHZpZXcoKSA9PT0gJ2hlbHAnKVxuICB1c2VTZWxlY3Rpb24oe1xuICAgIG9uQ29weTogKHRleHQpID0+IGZsYXNoKGBjb3BpZWQgJHt0ZXh0Lmxlbmd0aH0gJHt0ZXh0Lmxlbmd0aCA9PT0gMSA/ICdjaGFyYWN0ZXInIDogJ2NoYXJhY3RlcnMnfWApLFxuICB9KVxuXG4gIGZ1bmN0aW9uIG5hdmlnYXRlQWN0aXZpdHlTdHJpcChldmVudCkge1xuICAgIGNvbnN0IGl0ZW1zID0gWydhY3Rpdml0eS1tYWluJywgLi4uc2hlbGxSb3dzLm1hcCgoc2hlbGwpID0+IGBzaGVsbC0ke3NoZWxsLmlkfWApLCAuLi5hZ2VudFJvd3MubWFwKChhZ2VudCkgPT4gYGFnZW50LSR7YWdlbnQuaWR9YCldXG4gICAgY29uc3QgY3VycmVudCA9IGl0ZW1zLmluZGV4T2YoZm0uY3VycmVudCgpKVxuICAgIGxldCBuZXh0ID0gY3VycmVudFxuICAgIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgICBlbHNlIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdHJykgbmV4dCA9IGl0ZW1zLmxlbmd0aCAtIDFcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gTWF0aC5taW4oaXRlbXMubGVuZ3RoIC0gMSwgY3VycmVudCArIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoQUdFTlRfU1RSSVBfTUFYIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBNYXRoLm1heCgwLCBjdXJyZW50IC0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihBR0VOVF9TVFJJUF9NQVggLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQuc3RhcnRzV2l0aCgnYWdlbnQtJykgPyB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSA6IG51bGwpXG4gICAgc2V0Rm9sbG93KHRydWUpXG4gICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBuYXZpZ2F0ZVN0cmlwKGV2ZW50LCBwcmVmaXgsIHJvd3MsIHsgbWFpbiA9IGZhbHNlLCBwcmV2aWV3QWdlbnQgPSBmYWxzZSwgcHJldmlld1NoZWxsID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBbLi4uKG1haW4gPyBbYCR7cHJlZml4fS1tYWluYF0gOiBbXSksIC4uLnJvd3MubWFwKChyb3cpID0+IGAke3ByZWZpeH0tJHtyb3cuaWR9YCldXG4gICAgY29uc3QgY3VycmVudCA9IGl0ZW1zLmluZGV4T2YoZm0uY3VycmVudCgpKVxuICAgIGxldCBuZXh0ID0gY3VycmVudFxuICAgIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdnJykgbmV4dCA9IDBcbiAgICBlbHNlIGlmICghZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdHJykgbmV4dCA9IGl0ZW1zLmxlbmd0aCAtIDFcbiAgICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gTWF0aC5taW4oaXRlbXMubGVuZ3RoIC0gMSwgY3VycmVudCArIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoQUdFTlRfU1RSSVBfTUFYIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBNYXRoLm1heCgwLCBjdXJyZW50IC0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihBR0VOVF9TVFJJUF9NQVggLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSAoY3VycmVudCArIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gKGN1cnJlbnQgLSAxICsgaXRlbXMubGVuZ3RoKSAlIGl0ZW1zLmxlbmd0aFxuICAgIGVsc2UgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgdGFyZ2V0ID0gaXRlbXNbbmV4dF1cbiAgICBmbS5mb2N1cyh0YXJnZXQpXG4gICAgaWYgKHByZXZpZXdBZ2VudCkge1xuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICB9XG4gICAgaWYgKHByZXZpZXdTaGVsbCkge1xuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQgPT09ICdzaGVsbC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICB1c2VJbnB1dChhc3luYyAoZXZlbnQpID0+IHtcbiAgICBpZiAocmVmcy5kaWN0YXRpb25JbnB1dC5oYW5kbGUoZXZlbnQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVlcigpICYmIGZtLmlzKCdzdGVlcicpICYmICFzdGVlcigpLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykgYXBwbHlTdGVlcigpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZVN0ZWVyKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHN0YXJ0U3RlZXJFZGl0KClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2EnKSBzdGFydFN0ZWVyQWRkKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3gnIHx8IGV2ZW50LmtleSA9PT0gJ2QnKSBzdGFnZVN0ZWVyRGVsZXRlKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIGRyYWZ0LnNlbGVjdGVkIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpLCBkcmFmdC5zZWxlY3RlZCArIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2hvbWUnIHx8IGV2ZW50LmtleSA9PT0gJ2cnKSB7XG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3NbMF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQ6IDAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZW5kJyB8fCBldmVudC5rZXkgPT09ICdHJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIHJvd3MubGVuZ3RoIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb252ZXJzYXRpb25TZWFyY2guaGFuZGxlSW5wdXQoZXZlbnQsIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMpKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3Qgc2hlbGwgPSB0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyBzaGVsbFJvd3MuZmluZCgocykgPT4gYHNoZWxsLSR7cy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnQgPSBpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJyA/IG51bGwgOiBpdGVtXG4gICAgICBpZiAoc2hlbGwpIHNoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8ga2lsbFNoZWxsKHNoZWxsKSA6IGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIGlmIChpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJykgc3RvcE9yRGlzbWlzc0RlbGliZXJhdGlvbihpdGVtKVxuICAgICAgZWxzZSBpZiAoYWdlbnQpIFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhhZ2VudC5zdGF0dXMpID8gY2FuY2VsQWdlbnQoYWdlbnQpIDogZGlzbWlzc0FnZW50KGFnZW50KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgbmF2aWdhdGVTdHJpcChldmVudCwgJ3NoZWxsJywgc2hlbGxSb3dzLCB7IG1haW46IHRydWUsIHByZXZpZXdTaGVsbDogdHJ1ZSB9KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIG5hdmlnYXRlU3RyaXAoZXZlbnQsICdhZ2VudCcsIGFnZW50Um93cywgeyBtYWluOiB0cnVlLCBwcmV2aWV3QWdlbnQ6IHRydWUgfSkpIHJldHVyblxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0ID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHNoZWxsID0gZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogc2hlbGxSb3dzLmZpbmQoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCA9PT0gZm0uY3VycmVudCgpKVxuICAgICAgaWYgKHNoZWxsKSB7XG4gICAgICAgIGlmIChzaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJykga2lsbFNoZWxsKHNoZWxsKVxuICAgICAgICBlbHNlIGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpXG4gICAgICBpZiAoaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicpIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSlcbiAgICAgIGVsc2UgaWYgKGl0ZW0pIHtcbiAgICAgICAgaWYgKFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhpdGVtLnN0YXR1cykpIGNhbmNlbEFnZW50KGl0ZW0pXG4gICAgICAgIGVsc2UgZGlzbWlzc0FnZW50KGl0ZW0pXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnICYmIGJ1c3koKSAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgIGlmIChub3cgLSByZWZzLnF1aXRBdCA8IDE1MDApIHtcbiAgICAgICAgYXdhaXQgY3RsLnNodXRkb3duKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZzLnF1aXRBdCA9IG5vd1xuICAgICAgICBjb25zdCBydW5uaW5nID0gYm9vdC5zaGVsbHMucnVubmluZygpXG4gICAgICAgIGZsYXNoKHJ1bm5pbmcgPyBgJHtydW5uaW5nfSAke3J1bm5pbmcgPT09IDEgPyAnc2hlbGwnIDogJ3NoZWxscyd9IHJ1bm5pbmcgIGN0cmwrYyBhZ2FpbiB0byBleGl0IGFuZCBraWxsICR7cnVubmluZyA9PT0gMSA/ICdpdCcgOiAndGhlbSd9YCA6ICdjdHJsK2MgYWdhaW4gdG8gZXhpdCcpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnZmVlZCcpICYmIGV2ZW50LmtleSA9PT0gJy8nKSB7XG4gICAgICBjb252ZXJzYXRpb25TZWFyY2gub3BlbigpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3InICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoYnVzeSgpKSBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICAgIGVsc2UgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSBmbGFzaCgnbm90aGluZyB0byByZXdpbmQgeWV0JylcbiAgICAgIGVsc2Ugc2V0UmV3aW5kU3RlcCgncGljaycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoYnVzeSgpKSBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgICAgZWxzZSB7XG4gICAgICAgIHNldFNob3dSZXN1bWVQYW5lbCh0cnVlKVxuICAgICAgICByZWZyZXNoU2Vzc2lvbnMocmVzdW1lU2NvcGUoKSlcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndCcgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIHNldFNob3dNb2RlbFBhbmVsKHRydWUpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3AnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBvcGVuUHJvamVjdFBhbmVsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYicgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGlmICghZWZmb3J0QXBwbGllcygpKSBmbGFzaChgJHttb2RlbCgpLm5hbWV9IGRvZXMgbm90IHN1cHBvcnQgZWZmb3J0IGNvbnRyb2xgKVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG9yZGVyID0gW251bGwsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J11cbiAgICAgICAgY29uc3QgbmV4dCA9IG9yZGVyWyhvcmRlci5pbmRleE9mKGVmZm9ydCgpID8/IG51bGwpICsgMSkgJSBvcmRlci5sZW5ndGhdXG4gICAgICAgIHNldFNlc3Npb25FZmZvcnQobmV4dClcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd0hpc3RvcnlQYW5lbCgpKSB7XG4gICAgICBzd2l0Y2hIaXN0U2NvcGUoKGhpc3RTY29wZSgpICsgMSkgJSBISVNUT1JZX1NDT1BFUy5sZW5ndGgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dNZW1vcnlQYW5lbCgpKSB7XG4gICAgICBzZXRNZW1TY29wZSgocykgPT4gKHMgKyAxKSAlIE1FTU9SWV9TQ09QRVMubGVuZ3RoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93UmVzdW1lUGFuZWwoKSkge1xuICAgICAgY29uc3QgbmV4dCA9IChyZXN1bWVTY29wZSgpICsgMSkgJSBSRVNVTUVfU0NPUEVTLmxlbmd0aFxuICAgICAgc2V0UmVzdW1lU2NvcGUobmV4dClcbiAgICAgIHJlZnJlc2hTZXNzaW9ucyhuZXh0KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd6JyAmJiBzdGF0ZS5yZXdpbmRVbmRvICYmICFidXN5KCkgJiYgdmlldygpID09PSAnY2hhdCcpIHtcbiAgICAgIHVuZG9SZXdpbmQoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgZm10RWxhcHNlZCA9IChzKSA9PiAocyA8IDYwID8gYCR7c31zYCA6IGAke01hdGguZmxvb3IocyAvIDYwKX1tICR7cyAlIDYwfXNgKVxuICBjb25zdCBlbGFwc2VkID0gZm10RWxhcHNlZChidXN5KCkgPyBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gc3RhcnRlZEF0KCkpIC8gMTAwMCkpIDogMClcblxuICBjb25zdCBzbGFzaFJhbmdlID0gY29tbWFuZEF0KGlucHV0KCksIGlucHV0Q3Vyc29yKCkpXG4gIGNvbnN0IHNsYXNoUXVlcnkgPSBzbGFzaFJhbmdlPy5xdWVyeSA/PyBudWxsXG4gIGNvbnN0IHNob3dDb21tYW5kcyA9IHNsYXNoUmFuZ2UgIT09IG51bGwgJiYgIWFueVBhbmVsKClcbiAgY29uc3QgbWF0Y2hlZENvbW1hbmRzID0gIXNob3dDb21tYW5kc1xuICAgID8gW11cbiAgICA6IGNtZEN5Y2xlKClcbiAgICAgID8gY21kQ3ljbGUoKS5tYXRjaGVzXG4gICAgICA6IGFsbENvbW1hbmRzLmZpbHRlcigoYykgPT4gKGMuY29tbWFuZCB8fCAoc2xhc2hSYW5nZS5zdGFydCA9PT0gMCAmJiBzbGFzaFJhbmdlLmVuZCA9PT0gaW5wdXQoKS5sZW5ndGgpKSAmJiBjLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHNsYXNoUXVlcnkudG9Mb3dlckNhc2UoKSkpXG5cbiAgY29uc3QgYXRNYXRjaCA9IGlucHV0KCkubWF0Y2goLyhefFtcXHMoXSlAKFteXFxzQF0qKSQvKVxuICBjb25zdCBzaG93RmlsZXMgPSBhdE1hdGNoICE9PSBudWxsICYmICFzaG93Q29tbWFuZHMgJiYgIWZpbGVzRGlzbWlzc2VkKCkgJiYgIWFueVBhbmVsKClcbiAgaWYgKHNob3dGaWxlcykge1xuICAgIGxpc3RGaWxlcyhjd2QpLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICBpZiAoZmlsZXMgIT09IGZpbGVMaXN0KCkpIHNldEZpbGVMaXN0KGZpbGVzKVxuICAgIH0pXG4gIH1cbiAgY29uc3QgbWF0Y2hlZEZpbGVzID0gc2hvd0ZpbGVzXG4gICAgPyBmaWxlTGlzdCgpXG4gICAgICAgIC5tYXAoKGYpID0+IFtmdXp6eVNjb3JlKGF0TWF0Y2hbMl0sIGYpLCBmXSlcbiAgICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMF0gLSBhWzBdKVxuICAgICAgICAubWFwKChbLCBmXSkgPT4gZilcbiAgICA6IFtdXG5cbiAgZnVuY3Rpb24gcGlja0ZpbGUoZikge1xuICAgIGNvbnN0IHYgPSBpbnB1dCgpXG4gICAgY29uc3QgYXQgPSB2Lmxhc3RJbmRleE9mKCdAJylcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGN0bC5hdHRhY2hQcm9qZWN0RmlsZShmKVxuICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgc2V0SW5wdXQodi5zbGljZSgwLCBhdCkgKyBwbGFjZWhvbGRlciArICcgJylcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0SW5wdXQodi5zbGljZSgwLCBhdCArIDEpICsgZiArICcgJylcbiAgICB9XG4gICAgc2V0RmlsZUluZGV4KDApXG4gIH1cblxuICBjb25zdCBjb21wQ3R4ID0gY29tcGxldGluZygpID8gY29tcGxldGlvbkNvbnRleHQoeyB2YWx1ZTogaW5wdXQoKSwgcmVzb2x2ZTogY29tcGxldGlvblNvdXJjZSB9KSA6IG51bGxcbiAgY29uc3Qgc2hvd0NvbXBsZXRpb24gPSAhIWNvbXBDdHggJiYgY29tcEN0eC5tYXRjaGVzLmxlbmd0aCA+IDAgJiYgIXNob3dDb21tYW5kcyAmJiAhc2hvd0ZpbGVzICYmICFhbnlQYW5lbCgpXG5cbiAgY29uc3QgcmV3aW5kRW50cmllcyA9ICgpID0+IHVzZXJFbnRyaWVzKGRlcml2ZWQoKSlcbiAgY29uc3QgcmV3aW5kT3B0aW9ucyA9ICgoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmV3aW5kVGFyZ2V0KClcbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuIFtdXG4gICAgY29uc3QgeyBtc2dzLCBlZGl0cyB9ID0gcmV3aW5kU3RhdHMoZGVyaXZlZCgpLCB0YXJnZXQuaW5kZXgpXG4gICAgY29uc3QgZSA9IGVkaXRzLmxlbmd0aFxuICAgIGNvbnN0IGVkaXRzTGFiZWwgPSBgJHtlfSAke2UgPT09IDEgPyAnZWRpdCcgOiAnZWRpdHMnfWBcbiAgICBjb25zdCBvcHRzID0gW11cbiAgICBpZiAoZSA+IDApIG9wdHMucHVzaCh7IGtleTogJ2JvdGgnLCBsYWJlbDogJ3Jlc3RvcmUgY29kZSBhbmQgY29udmVyc2F0aW9uJywgZGVzYzogYGNoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgICR7ZWRpdHNMYWJlbH0gcmV2ZXJ0ZWRgIH0pXG4gICAgb3B0cy5wdXNoKHtcbiAgICAgIGtleTogJ2NoYXQnLFxuICAgICAgbGFiZWw6IGUgPiAwID8gJ3Jlc3RvcmUgY29udmVyc2F0aW9uIG9ubHknIDogJ3Jlc3RvcmUgY29udmVyc2F0aW9uJyxcbiAgICAgIGRlc2M6IGUgPiAwID8gJ2NoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgIGZpbGUgY2hhbmdlcyBrZXB0JyA6IGBjaGF0IHJldHVybnMgdG8gdGhpcyBtZXNzYWdlICBkcm9wcyAke21zZ3N9IGVudHJpZXNgLFxuICAgIH0pXG4gICAgaWYgKGUgPiAwKSBvcHRzLnB1c2goeyBrZXk6ICdjb2RlJywgbGFiZWw6ICdyZXN0b3JlIGNvZGUgb25seScsIGRlc2M6IGBjb252ZXJzYXRpb24ga2VwdCAgJHtlZGl0c0xhYmVsfSByZXZlcnRlZGAgfSlcbiAgICBvcHRzLnB1c2goeyBrZXk6ICdzdW1tYXJ5JywgbGFiZWw6ICdyZXdpbmQgYW5kIGtlZXAgYSBzdW1tYXJ5JywgZGVzYzogJ2Ryb3BwZWQgZW50cmllcyBjb2xsYXBzZSBpbnRvIGEgb25lLWxpbmUgbm90ZScgfSlcbiAgICByZXR1cm4gb3B0c1xuICB9KSgpXG5cbiAgY29uc3QgdXNhZ2UgPSBsaXZlVXNhZ2UoKSB8fCBkZXJpdmVkKCkudXNhZ2VBY3RpdmVcbiAgY29uc3QgY29udGV4dFBlcmNlbnQgPSBtb2RlbCgpLmNvbnRleHQgPiAwICYmIGRlcml2ZWQoKS5sYXN0UHJvbXB0VG9rZW5zID4gMCAmJiBkZXJpdmVkKCkubGFzdFByb21wdE1vZGVsID09PSBtb2RlbCgpLm5hbWVcbiAgICA/IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgoZGVyaXZlZCgpLmxhc3RQcm9tcHRUb2tlbnMgLyBtb2RlbCgpLmNvbnRleHQpICogMTAwKSlcbiAgICA6IDBcbiAgY29uc3QgdmlzaWJsZVNoZWxscyA9IHNoZWxsUm93c1xuICBjb25zdCB2aWV3ZWRTaGVsbCA9IHZpZXdlZFNoZWxsSWQoKSA/IHZpc2libGVTaGVsbHMuZmluZCgocykgPT4gcy5pZCA9PT0gdmlld2VkU2hlbGxJZCgpKSA6IG51bGxcbiAgY29uc3QgY29tYmluZWRBY3Rpdml0eSA9IHZpc2libGVTaGVsbHMubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMFxuICBjb25zdCBzaGVsbFN0cmlwRm9jdXMgPSBmbS5pcygnc2hlbGwtc3RyaXAnKSB8fCAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgZm0uY3VycmVudCgpLnN0YXJ0c1dpdGgoJ3NoZWxsLScpKSA/IGZtLmN1cnJlbnQoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZFNoZWxsSWQgPSBzaGVsbFN0cmlwRm9jdXMgJiYgc2hlbGxTdHJpcEZvY3VzICE9PSAnc2hlbGwtbWFpbicgPyBzaGVsbFN0cmlwRm9jdXMuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZFNoZWxsID0gZm9jdXNlZFNoZWxsSWQgPyB2aXNpYmxlU2hlbGxzLmZpbmQoKHMpID0+IHMuaWQgPT09IGZvY3VzZWRTaGVsbElkKSA6IG51bGxcbiAgY29uc3QgaGludGVkU2hlbGwgPSBmb2N1c2VkU2hlbGwgfHwgdmlld2VkU2hlbGxcbiAgY29uc3Qgc2hlbGxBY3Rpb25IaW50ID0gaGludGVkU2hlbGwgPyBgY3RybCt4ICR7aGludGVkU2hlbGwuc3RhdHVzID09PSAncnVubmluZycgPyAna2lsbCcgOiAnZGlzbWlzcyd9YCA6ICcnXG4gIGNvbnN0IHNoZWxsV2luZG93VGFyZ2V0ID0gc2hlbGxTdHJpcEZvY3VzID09PSAnc2hlbGwtbWFpbicgPyAwIDogdmlzaWJsZVNoZWxscy5maW5kSW5kZXgoKHMpID0+IHMuaWQgPT09IChmb2N1c2VkU2hlbGxJZCB8fCB2aWV3ZWRTaGVsbElkKCkpKVxuICBjb25zdCBzaGVsbFdpbmRvd1N0YXJ0ID0gc3RyaXBXaW5kb3dTdGFydChzaGVsbFdpbmRvd09mZnNldCgpLCBzaGVsbFdpbmRvd1RhcmdldCwgdmlzaWJsZVNoZWxscy5sZW5ndGgsIFNIRUxMX1NUUklQX01BWClcbiAgaWYgKHNoZWxsV2luZG93U3RhcnQgIT09IHNoZWxsV2luZG93T2Zmc2V0KCkpIHNldFNoZWxsV2luZG93T2Zmc2V0KHNoZWxsV2luZG93U3RhcnQpXG4gIGNvbnN0IHNoZWxsV2luZG93ID0gdmlzaWJsZVNoZWxscy5zbGljZShzaGVsbFdpbmRvd1N0YXJ0LCBzaGVsbFdpbmRvd1N0YXJ0ICsgU0hFTExfU1RSSVBfTUFYKVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgdmlzaWJsZUFnZW50cyA9IGFnZW50Um93c1xuICBjb25zdCB2aWV3ZWRBZ2VudCA9IHZpZXdlZEFnZW50SWQoKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gdmlld2VkQWdlbnRJZCgpKSA6IG51bGxcbiAgY29uc3QgYWdlbnRTdHJpcEZvY3VzID0gZm0uaXMoJ2FnZW50LXN0cmlwJykgfHwgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGZtLmN1cnJlbnQoKS5zdGFydHNXaXRoKCdhZ2VudC0nKSkgPyBmbS5jdXJyZW50KCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudElkID0gYWdlbnRTdHJpcEZvY3VzICYmIGFnZW50U3RyaXBGb2N1cyAhPT0gJ2FnZW50LW1haW4nID8gYWdlbnRTdHJpcEZvY3VzLnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudCA9IGZvY3VzZWRBZ2VudElkID8gYWdlbnRSb3dzLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSBmb2N1c2VkQWdlbnRJZCkgOiBudWxsXG4gIGNvbnN0IGhpbnRlZEFnZW50ID0gZm9jdXNlZEFnZW50IHx8IHZpZXdlZEFnZW50XG4gIGNvbnN0IGFnZW50QWN0aW9uSGludCA9IGhpbnRlZEFnZW50XG4gICAgPyBgY3RybCt4ICR7WydxdWV1ZWQnLCAncnVubmluZyddLmluY2x1ZGVzKGhpbnRlZEFnZW50LnN0YXR1cykgPyAnY2FuY2VsJyA6ICdkaXNtaXNzJ31gXG4gICAgOiAnJ1xuICBjb25zdCBhZ2VudFdpbmRvd1RhcmdldCA9IGFnZW50U3RyaXBGb2N1cyA9PT0gJ2FnZW50LW1haW4nXG4gICAgPyAwXG4gICAgOiB2aXNpYmxlQWdlbnRzLmZpbmRJbmRleCgoYSkgPT4gYS5pZCA9PT0gKGZvY3VzZWRBZ2VudElkIHx8IHZpZXdlZEFnZW50SWQoKSkpXG4gIGNvbnN0IGFnZW50V2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KGFnZW50V2luZG93T2Zmc2V0KCksIGFnZW50V2luZG93VGFyZ2V0LCB2aXNpYmxlQWdlbnRzLmxlbmd0aCwgQUdFTlRfU1RSSVBfTUFYKVxuICBpZiAoYWdlbnRXaW5kb3dTdGFydCAhPT0gYWdlbnRXaW5kb3dPZmZzZXQoKSkgc2V0QWdlbnRXaW5kb3dPZmZzZXQoYWdlbnRXaW5kb3dTdGFydClcbiAgY29uc3QgYWdlbnRXaW5kb3cgPSB2aXNpYmxlQWdlbnRzLnNsaWNlKGFnZW50V2luZG93U3RhcnQsIGFnZW50V2luZG93U3RhcnQgKyBBR0VOVF9TVFJJUF9NQVgpXG4gIGNvbnN0IHBlbmRpbmdXYWtldXBzID0gYm9vdC53YWtldXBzLnBlbmRpbmcoKVxuICBnaXRWZXJzaW9uKClcbiAgY29uc3QgZ2l0SW5mbyA9IGdpdEZvb3RlcigpID8gYm9vdC5naXQuc3RhdHVzKCkgOiBudWxsXG5cbiAgaWYgKHZpZXcoKSA9PT0gJ2hlbHAnKSB7XG4gICAgcmV0dXJuIDxIZWxwIGNvbW1hbmRzPXtDT01NQU5EU30gb25DbG9zZT17KCkgPT4gc2V0VmlldygnY2hhdCcpfSAvPlxuICB9XG5cbiAgaGlnaGxpZ2h0VmVyc2lvbigpXG5cbiAgY29uc3QgbWFpblRyYW5zY3JpcHQgPSBzdGVlcigpID8gc3RlZXJQcmV2aWV3KCkudHJhbnNjcmlwdCA6IGRlcml2ZWQoKS50cmFuc2NyaXB0XG4gIGNvbnN0IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWQgPSBzdGVlclJvd3MoKVtzdGVlcigpPy5zZWxlY3RlZF0/Lm1lc3NhZ2VJZFxuICBjb25zdCBkZWNvcmF0ZWRUcmFuc2NyaXB0ID0gc3RlZXIoKSA/IG1haW5UcmFuc2NyaXB0Lm1hcCgoaXRlbSkgPT4gKHtcbiAgICAuLi5pdGVtLFxuICAgIHN0ZWVyU2VsZWN0ZWQ6IGl0ZW0ubWVzc2FnZUlkID09PSBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkLFxuICB9KSkgOiBtYWluVHJhbnNjcmlwdFxuICBjb25zdCBhY3RpdmVTaGVsbCA9IHNoZWxsU3RyaXBGb2N1cyA/IGZvY3VzZWRTaGVsbCA6IGFnZW50U3RyaXBGb2N1cyA/IG51bGwgOiB2aWV3ZWRTaGVsbFxuICBjb25zdCBhY3RpdmVBZ2VudCA9IGFnZW50U3RyaXBGb2N1cyA/IGZvY3VzZWRBZ2VudCA6IHNoZWxsU3RyaXBGb2N1cyA/IG51bGwgOiB2aWV3ZWRBZ2VudFxuICBsZXQgc2hlbGxPdXRwdXQgPSBudWxsXG4gIGlmIChhY3RpdmVTaGVsbCkge1xuICAgIHRyeSB7IHNoZWxsT3V0cHV0ID0gYm9vdC5zaGVsbHMub3V0cHV0KGFjdGl2ZVNoZWxsLmlkLCB7IHRhaWw6IDIwMDAgfSkgfSBjYXRjaCB7fVxuICB9XG4gIGNvbnN0IHNoZWxsVHJhbnNjcmlwdCA9IGFjdGl2ZVNoZWxsID8gW1xuICAgIHsga2luZDogJ3NoZWxsLWNvbW1hbmQnLCB0ZXh0OiBhY3RpdmVTaGVsbC5jb21tYW5kIH0sXG4gICAgeyBraW5kOiAnc2hlbGwtb3V0cHV0JywgdGV4dDogc2hlbGxPdXRwdXQ/Lm91dHB1dCB8fCAnbm8gb3V0cHV0IHlldCcgfSxcbiAgXSA6IG51bGxcbiAgY29uc3QgdHJhbnNjcmlwdFNvdXJjZSA9IGFjdGl2ZVNoZWxsID8gYHNoZWxsOiR7YWN0aXZlU2hlbGwuaWR9YCA6IGFjdGl2ZUFnZW50ID8gYGFnZW50OiR7YWN0aXZlQWdlbnQuaWR9YCA6ICdtYWluJ1xuICBjb25zdCB0cmFuc2NyaXB0ID0gc2hlbGxUcmFuc2NyaXB0IHx8IChhY3RpdmVBZ2VudCA/IGFnZW50VHJhbnNjcmlwdChhY3RpdmVBZ2VudCkgOiBkZWNvcmF0ZWRUcmFuc2NyaXB0KVxuICBjb25zdCBkZWxpYmVyYXRpb25WaWV3ID0gYWN0aXZlQWdlbnQ/LnJvbGUgPT09ICdkZWxpYmVyYXRpb24nXG4gIGNvbnN0IGlzb2xhdGVkVHJhbnNjcmlwdCA9IGFjdGl2ZUFnZW50IHx8IGFjdGl2ZVNoZWxsXG4gIGNvbnN0IGdyb3VwSXRlbXMgPSAoc291cmNlLCBhY3RpdmUgPSBmYWxzZSkgPT4gc3RlZXIoKVxuICAgID8gY29sbGFwc2VTdGVlclRvb2xzKHNvdXJjZSlcbiAgICA6IGNvbXBhY3RUb29sSGlzdG9yeSgpXG4gICAgICA/IGNvbXBhY3RUcmFuc2NyaXB0UnVucyhzb3VyY2UsIGFjdGl2ZSlcbiAgICAgIDogc291cmNlXG4gIGNvbnN0IHRyYW5zY3JpcHRJdGVtcyA9IGdyb3VwSXRlbXModHJhbnNjcmlwdCwgYWN0aXZlQWdlbnQ/LnN0YXR1cyA9PT0gJ3J1bm5pbmcnKVxuICBjb25zdCB3aW5kb3dlZCA9IGRlbGliZXJhdGlvblZpZXcgPyB7IGl0ZW1zOiB0cmFuc2NyaXB0SXRlbXMsIGhpZGRlbkl0ZW1zOiAwLCBoaWRkZW5Db3VudDogMCB9IDogdHJhbnNjcmlwdFdpbmRvdyh0cmFuc2NyaXB0SXRlbXMsIGhpc3RXaW5kb3coKSlcbiAgY29uc3QgaGlkZGVuQ291bnQgPSB3aW5kb3dlZC5oaWRkZW5Db3VudFxuICBjb25zdCB2aXNpYmxlSXRlbXMgPSBpc29sYXRlZFRyYW5zY3JpcHQgPyB3aW5kb3dlZC5pdGVtcyA6IFsuLi53aW5kb3dlZC5pdGVtcywgLi4uZ3JvdXBJdGVtcyhvdmVybGF5KCksIHR1cm5QaGFzZSgpID09PSAndG9vbHMnKV1cbiAgY29uc3QgcHJlcGFyZWRDb252ZXJzYXRpb24gPSBjb252ZXJzYXRpb25TZWFyY2gucHJlcGFyZSh2aXNpYmxlSXRlbXMpXG4gIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBwcmVwYXJlZENvbnZlcnNhdGlvbi5tYXRjaGVzXG4gIGNvbnN0IGl0ZW1zID0gcHJlcGFyZWRDb252ZXJzYXRpb24uaXRlbXNcblxuICBjb25zdCB3aWRlTGF5b3V0ID0gd2lkZVNpZGViYXIoKSAmJiB0ZXJtaW5hbFdpZHRoKCkgPiAxNjBcbiAgY29uc3Qgc2hvd0NvbXBvc2VyQWN0aW9ucyA9ICFzdGVlcigpICYmICF2aWV3ZWRBZ2VudCAmJiAhdmlld2VkU2hlbGwgJiYgcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbidcblxuICBpZiAoc2hvd01lbW9yeVBhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lbW9yeVBhbmVsXG4gICAgICAgIG1lbW9yaWVzPXttZW1vcnlMaXN0KCkuZmlsdGVyKChtKSA9PiBNRU1PUllfU0NPUEVTW21lbVNjb3BlKCldID09PSAnYWxsJyB8fCBtLnNjb3BlID09PSBNRU1PUllfU0NPUEVTW21lbVNjb3BlKCldKX1cbiAgICAgICAgc2NvcGVzPXtNRU1PUllfU0NPUEVTfVxuICAgICAgICBzY29wZUluZGV4PXttZW1TY29wZSgpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uVG9nZ2xlRGlzYWJsZWQ9e3RvZ2dsZU1lbW9yeURpc2FibGVkfVxuICAgICAgICBvbkZvcmdldD17Zm9yZ2V0TWVtb3J5fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TWVtb3J5UGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd1Jlc3VtZVBhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlc3VtZVBhbmVsXG4gICAgICAgIHNlc3Npb25zPXtyZXN1bWVTZXNzaW9ucygpfVxuICAgICAgICBzY29wZXM9e1JFU1VNRV9TQ09QRVN9XG4gICAgICAgIHNjb3BlSW5kZXg9e3Jlc3VtZVNjb3BlKCl9XG4gICAgICAgIGxvYWRpbmc9e3Jlc3VtZUxvYWRpbmcoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBjdXJyZW50SWQ9e3N0YXRlLnNlc3Npb24/LmlkfVxuICAgICAgICBvblBpY2s9eyhtZXRhKSA9PiB7XG4gICAgICAgICAgaWYgKG1ldGEuaGVhZGVyLmlkID09PSBzdGF0ZS5zZXNzaW9uPy5pZCkgcmV0dXJuIHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSlcbiAgICAgICAgICByZXN1bWVTZXNzaW9uKG1ldGEpXG4gICAgICAgIH19XG4gICAgICAgIG9uRGVsZXRlPXtkZWxldGVTZXNzaW9uTWV0YX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dQcm9qZWN0UGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8UHJvamVjdFBhbmVsXG4gICAgICAgIHByb2plY3RzPXtwcm9qZWN0cygpfVxuICAgICAgICBsb2FkaW5nPXtwcm9qZWN0c0xvYWRpbmcoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblBpY2tDaGVja291dD17KGNoZWNrb3V0KSA9PiBjaGVja291dC5sYXRlc3QgPyByZXN1bWVTZXNzaW9uKGNoZWNrb3V0LmxhdGVzdCkgOiBjdGwuc3dpdGNoVG9Xb3JrdHJlZShjaGVja291dCkudGhlbigoKSA9PiBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKSl9XG4gICAgICAgIG9uUGlja1Nlc3Npb249e3Jlc3VtZVNlc3Npb259XG4gICAgICAgIG9uQWRkV29ya3RyZWU9e2FkZFByb2plY3RXb3JrdHJlZX1cbiAgICAgICAgb25EZWxldGU9e2RlbGV0ZVByb2plY3RDaGVja291dH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1Byb2plY3RQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGlmIChzaG93Q29uZmlnUGFuZWwoKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Q29uZmlnUGFuZWxcbiAgICAgICAgdmFsdWVzPXt7IGNsb3VkczogY2xvdWRzKCksIGNvbXBhY3RUb29sczogY29tcGFjdFRvb2xIaXN0b3J5KCksIGdpdFN0YXR1czogZ2l0Rm9vdGVyKCksIHdpZGVTaWRlYmFyOiB3aWRlU2lkZWJhcigpLCByZXNlYXJjaE1vZGVsOiBib290LnJlc2VhcmNoTW9kZWwsIHNoZWxsTW9kZWw6IGJvb3Quc2hlbGxNb2RlbCwgZGVsaWJlcmF0aW9uTW9kZWw6IGJvb3QuZGVsaWJlcmF0aW9uTW9kZWwsIHBhcnRpY2lwYW50QU1vZGVsOiBib290LnBhcnRpY2lwYW50QU1vZGVsLCBwYXJ0aWNpcGFudEJNb2RlbDogYm9vdC5wYXJ0aWNpcGFudEJNb2RlbCwgcmVzZWFyY2hBZ2VudExpbWl0OiByZXNlYXJjaEFnZW50TGltaXQoKSB9fVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uUGlja1NoZWxsTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKHRydWUpXG4gICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybignY29uZmlnJylcbiAgICAgICAgICBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpXG4gICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgICB9fVxuICAgICAgICBvblBpY2tSZXNlYXJjaE1vZGVsPXsoKSA9PiB7XG4gICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbChmYWxzZSlcbiAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbChmYWxzZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja1BhcnRpY2lwYW50TW9kZWw9eyh0YXJnZXQpID0+IHtcbiAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KHRhcmdldClcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja0RlbGliZXJhdGlvbk1vZGVsPXsoKSA9PiB7XG4gICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwodHJ1ZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uQ2hhbmdlPXsobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAobmFtZSA9PT0gJ2Nsb3VkcycpIHtcbiAgICAgICAgICAgIHNldENsb3Vkcyh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgYW5pbWF0aW9uOiB7IGNsb3VkczogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2dpdFN0YXR1cycpIHtcbiAgICAgICAgICAgIHNldEdpdEZvb3Rlcih2YWx1ZSlcbiAgICAgICAgICAgIGJvb3QuZ2l0Rm9vdGVyID0gdmFsdWVcbiAgICAgICAgICAgIGJvb3QuZ2l0LnNldEVuYWJsZWQodmFsdWUpXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgZ2l0U3RhdHVzOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnd2lkZVNpZGViYXInKSB7XG4gICAgICAgICAgICBzZXRXaWRlU2lkZWJhcih2YWx1ZSlcbiAgICAgICAgICAgIGJvb3Qud2lkZVNpZGViYXIgPSB2YWx1ZVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBkaXNwbGF5OiB7IHdpZGVTaWRlYmFyOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAncmVzZWFyY2hBZ2VudExpbWl0Jykge1xuICAgICAgICAgICAgc2V0UmVzZWFyY2hBZ2VudExpbWl0KHZhbHVlKVxuICAgICAgICAgICAgYm9vdC5yZXNlYXJjaEFnZW50TGltaXQgPSB2YWx1ZVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyByZXNlYXJjaDogeyBhZ2VudExpbWl0OiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldENvbXBhY3RUb29sSGlzdG9yeSh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyBjb21wYWN0VG9vbEhpc3Rvcnk6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dDb25maWdQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiB3aWRlTGF5b3V0ID8gJ3JvdycgOiAnY29sdW1uJywgaGVpZ2h0OiAnMTAwJScgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIHBhZGRpbmdYOiAyLCBnYXA6IDEsIGJnOiBQQU5FTF9CRyB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIHtidXN5KClcbiAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGFjY2VudCgpLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDxTaGltbWVyIGNvbG9yPVwiYmxhY2tcIiBoaWdobGlnaHQ9e1BBTkVMX0JHfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgICAge2NvbXBhY3RpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgID8gY29tcGFjdFN0YXR1cygpPy5waGFzZSA9PT0gJ3dyaXRpbmcnID8gYENvbXBhY3RpbmcgIHdyaXRpbmcgJHtjb21wYWN0U3RhdHVzKCkuc2VjdGlvbn0vOGAgOiAnQ29tcGFjdGluZyAgYW5hbHl6aW5nJ1xuICAgICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgICA8L1NoaW1tZXI+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Ym9vdC5kaXNwbGF5Q3dkfTwvdGV4dD59XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgKyR7Z2l0SW5mby5hZGRlZH1gfTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgLSR7Z2l0SW5mby5yZW1vdmVkfWB9PC90ZXh0Pn1cbiAgICAgIDwvYm94PlxuICAgICAge3RyYW5zY3JpcHQubGVuZ3RoID09PSAwID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBkaW06IGRpbW1pbmdQYW5lbCgpIH19PlxuICAgICAgICAgIDxFbXB0eVN0YXRlIHZlcnNpb249e3ZlcnNpb259IGNsb3Vkcz17Y2xvdWRzKCl9IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICA8U2Nyb2xsQm94XG4gICAgICAgICAgc3R5bGU9e3sgZmxleEdyb3c6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfX1cbiAgICAgICAgICBmb2N1c2VkPXtmbS5pcygnZmVlZCcpIHx8IGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJyl9XG4gICAgICAgICAgZm9sbG93Rm9jdXM9e3N0ZWVyKCkgPyBzdGVlckxpc3RGb2N1cyA6IG51bGx9XG4gICAgICAgICAgZm9jdXNQYWRkaW5nPXsxfVxuICAgICAgICAgIHNjcm9sbE9mZnNldD17Zm9sbG93KCkgPyAxZTkgOiBvZmZzZXQoKX1cbiAgICAgICAgICBvbk1ldHJpY3M9eyhtZXRyaWNzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHRyYW5zY3JpcHRNZXRyaWNzKClcbiAgICAgICAgICAgIGlmIChwcmV2aW91cz8udmlzaWJsZUhlaWdodCA9PT0gbWV0cmljcy52aXNpYmxlSGVpZ2h0ICYmIHByZXZpb3VzPy5jb250ZW50SGVpZ2h0ID09PSBtZXRyaWNzLmNvbnRlbnRIZWlnaHQpIHJldHVyblxuICAgICAgICAgICAgc2V0VHJhbnNjcmlwdE1ldHJpY3MobWV0cmljcylcbiAgICAgICAgICAgIGlmIChoaWRkZW5Db3VudCA+IDAgJiYgbWV0cmljcy52aXNpYmxlSGVpZ2h0ID4gMCAmJiBtZXRyaWNzLmNvbnRlbnRIZWlnaHQgPD0gbWV0cmljcy52aXNpYmxlSGVpZ2h0KSB7XG4gICAgICAgICAgICAgIHNldEhpc3RXaW5kb3coKHNpemUpID0+IHNpemUgKyBISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU2Nyb2xsPXsobmV4dCwgbWV0YSkgPT4ge1xuICAgICAgICAgIHNldEZvbGxvdyghIW1ldGE/LmF0Qm90dG9tKVxuICAgICAgICAgIC8vIGJhY2sgYXQgdGhlIGJvdHRvbTogbG9hZGVkIGhpc3RvcnkgaXMgb2ZmLXNjcmVlbiwgc28gcmUtaGlkaW5nXG4gICAgICAgICAgLy8gaXQgaXMgaW52aXNpYmxlIGFuZCByZXN0b3JlcyB0aGUgc21hbGwgcmVuZGVyIHdpbmRvd1xuICAgICAgICAgIGlmIChtZXRhPy5hdEJvdHRvbSAmJiBoaXN0V2luZG93KCkgPiBISVNUT1JZX1dJTkRPVykgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICBpZiAobmV4dCA9PT0gMCAmJiBoaWRkZW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIGtlZXAgdGhlIHZpZXcgYW5jaG9yZWQ6IGVzdGltYXRlIHRoZSByb3dzIHRoZSBuZXcgYmF0Y2ggYWRkc1xuICAgICAgICAgICAgLy8gYW5kIHNjcm9sbCBwYXN0IHRoZW0gc28gdGhlIGN1cnJlbnQgdG9wIGl0ZW0gc3RheXMgaW4gcGxhY2VcbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gTWF0aC5taW4oSElTVE9SWV9XSU5ET1csIHdpbmRvd2VkLmhpZGRlbkl0ZW1zKVxuICAgICAgICAgICAgY29uc3QgYXZnUm93cyA9IE1hdGgubWF4KDIsIE1hdGgucm91bmQoKG1ldGE/Lm1heE9mZnNldCB8fCAwKSAvIE1hdGgubWF4KDEsIGl0ZW1zLmxlbmd0aCkpKVxuICAgICAgICAgICAgc2V0SGlzdFdpbmRvdygodykgPT4gdyArIEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgc2V0T2Zmc2V0KGFkZGVkICogYXZnUm93cylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRPZmZzZXQobmV4dClcbiAgICAgICAgfX1cbiAgICAgICAgc2Nyb2xsYmFyXG4gICAgICA+XG4gICAgICAgIDxDb252ZXJzYXRpb25TY3JvbGxBbmNob3IgdGFyZ2V0PXtjb252ZXJzYXRpb25TZWFyY2guc2Nyb2xsfSAvPlxuICAgICAgICB7aGlkZGVuQ291bnQgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTIzMDMgJHtoaWRkZW5Db3VudC50b0xvY2FsZVN0cmluZygpfSBvbGRlciAke2hpZGRlbkNvdW50ID09PSAxID8gJ21lc3NhZ2UnIDogJ21lc3NhZ2VzJ30gIHNjcm9sbCB0byB0b3AgdG8gbG9hZGB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAndXNlcicpLm1hcCgoaXRlbSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OnByb21wdDoke2l0ZW0ubWVzc2FnZUlkIHx8IGl9YH0gaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZSgpfSAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8RGVsaWJlcmF0aW9uRXhjaGFuZ2UgdHVybnM9e2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAnZGVsaWJlcmF0aW9uLXR1cm4nKX0gdmVyYm9zZT17dmVyYm9zZSgpfSB3aWRlPXt0ZXJtaW5hbFdpZHRoKCkgPj0gMTEwfSAvPlxuICAgICAgICAgICAge2l0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kICE9PSAndXNlcicgJiYgaXRlbS5raW5kICE9PSAnZGVsaWJlcmF0aW9uLXR1cm4nKS5tYXAoKGl0ZW0sIGkpID0+IChcbiAgICAgICAgICAgICAgPE1lc3NhZ2Uga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfTp0YWlsOiR7aXRlbS5tZXNzYWdlSWQgfHwgaXRlbS5jYWxsSWQgfHwgaX1gfSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlKCl9IC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IGl0ZW1zLm1hcCgoaXRlbSwgaSkgPT4gc3RlZXIoKSAmJiBpdGVtLm1lc3NhZ2VJZCA/IChcbiAgICAgICAgICA8U3RlZXJNZXNzYWdlXG4gICAgICAgICAgICBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OiR7aXRlbS5tZXNzYWdlSWQgfHwgaXRlbS5jYWxsSWQgfHwgaGlkZGVuQ291bnQgKyBpfWB9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgICAgdmVyYm9zZT17dmVyYm9zZSgpfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2l0ZW0ubWVzc2FnZUlkID09PSBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkfVxuICAgICAgICAgICAgZm9jdXM9e3N0ZWVyTGlzdEZvY3VzfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPENvbnZlcnNhdGlvblNlYXJjaE1lc3NhZ2VcbiAgICAgICAgICAgIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBoaWRkZW5Db3VudCArIGl9YH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlKCl9XG4gICAgICAgICAgICBjdXJyZW50TWF0Y2g9e2NvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXNbY29udmVyc2F0aW9uU2VhcmNoLmluZGV4KCldPy5pdGVtSW5kZXggPT09IGkgPyBjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzW2NvbnZlcnNhdGlvblNlYXJjaC5pbmRleCgpXSA6IG51bGx9XG4gICAgICAgICAgICBzZWFyY2g9e2NvbnZlcnNhdGlvblNlYXJjaH1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgICAgICB7IWlzb2xhdGVkVHJhbnNjcmlwdCAmJiBzdHJlYW1pbmcoKSAhPT0gbnVsbCAmJiBzdHJlYW1pbmcoKSAhPT0gJycgJiYgKFxuICAgICAgICAgICAgPE1lc3NhZ2Uga2V5PVwic3RyZWFtaW5nXCIgaXRlbT17eyBraW5kOiAnYXNzaXN0YW50JywgdGV4dDogYCR7c3RyZWFtaW5nKCl9XHUyNThCYCB9fSAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU2Nyb2xsQm94PlxuICAgICAgICB7Y29udmVyc2F0aW9uU2VhcmNoLmFjdGl2ZSgpID8gKFxuICAgICAgICAgIDxDb252ZXJzYXRpb25TZWFyY2hCYXIgc2VhcmNoPXtjb252ZXJzYXRpb25TZWFyY2h9IG1hdGNoZXM9e2NvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXN9IC8+XG4gICAgICAgICkgOiBmbS5pcygnZmVlZCcpICYmICFhbnlQYW5lbCgpICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IDAsIGxlZnQ6IDAsIHJpZ2h0OiAwLCBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IGFjY2VudCgpLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiAnYmxhY2snIH19Pnsnai9rICBcdTIxOTEvXHUyMTkzIHNjcm9sbCAgIGcvRyBlbmRzICAgLyBzZWFyY2ggICBjdHJsLXUvZCBwYWdlJ308L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD59XG5cbiAgICAgIHsoZXhwZWRpdGVkKCkubGVuZ3RoID4gMCB8fCBxdWV1ZWQoKS5sZW5ndGggPiAwKSAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge2V4cGVkaXRlZCgpLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgPGJveCBrZXk9e2BleHBlZGl0ZWQtJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+eydcdTIxQTAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IGFjY2VudCgpIH19PnttZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIHtpID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57JyAgYWZ0ZXIgbmV4dCB0b29sICBcdTIxOTEgdG8gZWRpdCd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkpfVxuICAgICAgICAgIHtxdWV1ZWQoKS5tYXAoKG1lc3NhZ2UsIGkpID0+IChcbiAgICAgICAgICAgIDxib3gga2V5PXtgcGVuZGluZy0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjAzQSAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogTVVURUQgfX0+e21lc3NhZ2UucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2kgPT09IDAgJiYgZXhwZWRpdGVkKCkubGVuZ3RoID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgcGVuZGluZyAgXHUyMTkxIGVkaXQgIFx1MjE5MiBzZW5kIGFmdGVyIG5leHQgdG9vbCd9PC90ZXh0Pn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtjb21tYW5kRm9ybSgpICYmIDxDb21tYW5kRm9ybVxuICAgICAgICBuYW1lPXtjb21tYW5kRm9ybSgpLm5hbWV9XG4gICAgICAgIGZpZWxkcz17Y29tbWFuZEZvcm0oKS5maWVsZHN9XG4gICAgICAgIGZpbGVzPXtmaWxlTGlzdCgpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uU3VibWl0PXsodmFsdWVzKSA9PiBmaW5pc2hDb21tYW5kKGNvbW1hbmRGb3JtKCksIHZhbHVlcyl9XG4gICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7IHNldENvbW1hbmRGb3JtKG51bGwpOyByZWZzLmNvbW1hbmRFeHBhbnNpb24gPSBudWxsOyBmbS5mb2N1cygnaW5wdXQnKSB9fVxuICAgICAgLz59XG5cbiAgICAgIHtxdWVzdGlvblJlcXVlc3QoKSAmJiAoXG4gICAgICAgIDxRdWVzdGlvbkZvcm1cbiAgICAgICAgICByZXF1ZXN0PXtxdWVzdGlvblJlcXVlc3QoKX1cbiAgICAgICAgICBmb2N1c2VkPXtmbS5pcygncXVlc3Rpb24nKSAmJiAhYW55UGFuZWwoKX1cbiAgICAgICAgICBvblN1Ym1pdD17KGFuc3dlcnMpID0+IHtcbiAgICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgICAgICAgICBjdGwuYW5zd2VyUXVlc3Rpb24oYW5zd2VycylcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgY3RsLmNhbmNlbFF1ZXN0aW9uKClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3N0ZWVyKCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57c3RlZXIoKS5lZGl0aW5nID8gYCR7c3RlZXIoKS5hZGRpbmcgPyAnQWRkJyA6ICdFZGl0J30gJHtzdGVlcigpLnJvbGV9YCA6IGBTdGVlciAgJHtzdGVlcigpLmNoYW5nZXMubGVuZ3RofSBzdGFnZWRgfTwvdGV4dD5cbiAgICAgICAgICB7c3RlZXIoKS5lZGl0aW5nID8gKFxuICAgICAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZtLmlzKCdzdGVlcicpfVxuICAgICAgICAgICAgICB2YWx1ZT17c3RlZXJUZXh0KCl9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRTdGVlclRleHR9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtzdGFnZVN0ZWVyVGV4dH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGVlclRleHQoJycpXG4gICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdCA9IFNURUVSX1JPTEVTLmluZGV4T2Yoc3RlZXIoKS5yb2xlKVxuICAgICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCByb2xlOiBTVEVFUl9ST0xFU1soYXQgKyAxKSAlIFNURUVSX1JPTEVTLmxlbmd0aF0gfSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgICAgIGNsZWFyT25TdWJtaXRcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgICAgICBjdXJzb3I9e3sgYmxpbms6IHRydWUsIGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjE5MVx1MjE5MyBzZWxlY3QgIGVudGVyIGVkaXQgIGEgYWRkIGFmdGVyICB4L2QgZGVsZXRlICBjdHJsK3MgYXBwbHkgIGVzYyBkaXNjYXJkJ308L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7IXN0ZWVyKCkgJiYgIXZpZXdlZEFnZW50ICYmICF2aWV3ZWRTaGVsbCAmJiA8TW91c2VGb2N1c1JlZ2lvbiBvblByZXNzPXsoKSA9PiBmbS5mb2N1cygnaW5wdXQnKX0gc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IHRyYW5zY3JpcHQubGVuZ3RoID09PSAwICYmIGNsb3VkcygpID8gMCA6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfHwgISFxdWVzdGlvblJlcXVlc3QoKSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKSA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydcdTI3NkYnfTwvdGV4dD5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgeyhzdGF0ZS5zZXNzaW9uPy5oZWFkZXIuZm9ya2VkRnJvbSB8fCBkZXJpdmVkKCkudGl0bGUpICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCB0b3A6IDAsIHJpZ2h0OiAwLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHtzdGF0ZS5zZXNzaW9uPy5oZWFkZXIuZm9ya2VkRnJvbSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Rlcml2ZWQoKS50aXRsZSA/ICdcdTI0NDIgJyA6ICdcdTI0NDInfTwvdGV4dD59XG4gICAgICAgICAgICB7ZGVyaXZlZCgpLnRpdGxlICYmIDx0ZXh0IHN0eWxlPXt7IGJnOiBmbS5pcygnaW5wdXQnKSAmJiAhYW55UGFuZWwoKSAmJiAhcXVlc3Rpb25SZXF1ZXN0KCkgPyBhY2NlbnQoKSA6IE1VVEVELCBjb2xvcjogJ2JsYWNrJywgYm9sZDogdHJ1ZSB9fT57YCAke2Rlcml2ZWQoKS50aXRsZX0gYH08L3RleHQ+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICA8VGV4dEFyZWFcbiAgICAgICAgICBjb2xvcj17Rkd9XG4gICAgICAgICAgbGluZUNvdW50ZXJcbiAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICBmb2N1c2VkPXtmbS5pcygnaW5wdXQnKSAmJiAhYW55UGFuZWwoKSAmJiAhcXVlc3Rpb25SZXF1ZXN0KCl9XG4gICAgICAgICAgdmFsdWU9e2lucHV0KCl9XG4gICAgICAgICAgY3Vyc29yT2Zmc2V0PXtpbnB1dEN1cnNvcigpfVxuICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsoY3Vyc29yKSA9PiB7XG4gICAgICAgICAgICBzZXRJbnB1dEN1cnNvcihjdXJzb3IpXG4gICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgc2V0Q21kSW5kZXgoMClcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2hhbmdlPXsodikgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVkID0gcGxhY2Vob2xkZXJpemVJbWFnZVBhdGhzKHYsIHtcbiAgICAgICAgICAgICAgYXR0YWNobWVudHM6IHN0YXRlLmF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgICBuZXh0SWQ6ICgpID0+ICsrc3RhdGUuaW1hZ2VDb3VudCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBzZXRJbnB1dChjb252ZXJ0ZWQudGV4dCwgY29udmVydGVkLnRleHQgPT09IHYgPyBpbnB1dEN1cnNvcigpIDogdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2V0Q21kSW5kZXgoMClcbiAgICAgICAgICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgICAgICAgICBzZXRGaWxlSW5kZXgoMClcbiAgICAgICAgICAgIHNldEhpc3RJZHgoLTEpXG4gICAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYnVzeSgpKSBpbnRlcnJ1cHQoKVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGltcGxpY2l0UmV3aW5kVGFyZ2V0KGRlcml2ZWQoKSwgaW5wdXQoKSlcbiAgICAgICAgICAgICAgaWYgKHRhcmdldCkgcGVyZm9ybVJld2luZFRvKHRhcmdldCwgeyBrZXk6ICdjaGF0JyB9KVxuICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgICAgIHNldENvbXBsZXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgc2V0RmlsZXNEaXNtaXNzZWQodHJ1ZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25TdWJtaXQ9e3NlbmR9XG4gICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlZnMuZGljdGF0aW9uSW5wdXQuaGFuZGxlKGUpKSByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ3YnKSB7XG4gICAgICAgICAgICAgIHZvaWQgcmVmcy5wYXN0ZUltYWdlKClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgJiYgZS5rZXkgPT09ICdnJykge1xuICAgICAgICAgICAgICByZWZzLmRpY3RhdGlvbklucHV0LnN0YXJ0KGUpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jdHJsICYmIGUua2V5ID09PSAnbycpIHtcbiAgICAgICAgICAgICAgdm9pZCByZWZzLmNhcHR1cmVJbWFnZSgpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSAmJiBzaG93RmlsZXMgJiYgbWF0Y2hlZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcGlja0ZpbGUobWF0Y2hlZEZpbGVzW01hdGgubWluKGZpbGVJbmRleCgpLCBtYXRjaGVkRmlsZXMubGVuZ3RoIC0gMSldKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndGFiJyAmJiAhZS5jdHJsICYmICFlLm1ldGEgJiYgc2hvd0NvbW1hbmRzICYmIG1hdGNoZWRDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN5Y2xlID0gY21kQ3ljbGUoKVxuICAgICAgICAgICAgICBpZiAoIWN5Y2xlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbihjbWRJbmRleCgpLCBtYXRjaGVkQ29tbWFuZHMubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICBzZXRDbWRDeWNsZSh7IG1hdGNoZXM6IG1hdGNoZWRDb21tYW5kcyB9KVxuICAgICAgICAgICAgICAgIHNldENtZEluZGV4KHN0YXJ0KVxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSByZXBsYWNlQ29tbWFuZChpbnB1dCgpLCBzbGFzaFJhbmdlLCAnLycgKyBtYXRjaGVkQ29tbWFuZHNbc3RhcnRdLm5hbWUpXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQobmV4dC50ZXh0LCBuZXh0LmN1cnNvcilcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gKGNtZEluZGV4KCkgKyAxKSAlIGN5Y2xlLm1hdGNoZXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgc2V0Q21kSW5kZXgobmV4dClcbiAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IHJlcGxhY2VDb21tYW5kKGlucHV0KCksIHNsYXNoUmFuZ2UsICcvJyArIGN5Y2xlLm1hdGNoZXNbbmV4dF0ubmFtZSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChyZXBsYWNlbWVudC50ZXh0LCByZXBsYWNlbWVudC5jdXJzb3IpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3Bhc3RlJyAmJiBlLnRleHQpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGF0aHMgPSBleHRyYWN0SW1hZ2VQYXRocyhlLnRleHQpXG4gICAgICAgICAgICAgIGlmIChwYXRocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gcGF0aHMubWFwKChwYXRoKSA9PiBjdGwuYXR0YWNoSW1hZ2UocGF0aCkpXG4gICAgICAgICAgICAgICAgY29uc3QgYXQgPSBlLmN1cnNvciA/PyBlLnZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICAgIHNldElucHV0KGUudmFsdWUuc2xpY2UoMCwgYXQpICsgcGxhY2Vob2xkZXJzLmpvaW4oJyAnKSArIGUudmFsdWUuc2xpY2UoYXQpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdiYWNrc3BhY2UnICYmIGUuY3Vyc29yID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IGUudmFsdWUuc2xpY2UoMCwgZS5jdXJzb3IpLm1hdGNoKC9cXFtJbWFnZSAjXFxkK1xcXSQvKVxuICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBjdGwuZGV0YWNoSW1hZ2UobWF0Y2hbMF0pXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQoZS52YWx1ZS5zbGljZSgwLCBlLmN1cnNvciAtIG1hdGNoWzBdLmxlbmd0aCkgKyBlLnZhbHVlLnNsaWNlKGUuY3Vyc29yKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd0YWInICYmICFlLmN0cmwgJiYgIWUubWV0YSkge1xuICAgICAgICAgICAgICBjb25zdCBjdHggPSBjb21wbGV0aW9uQ29udGV4dCh7IHZhbHVlOiBlLnZhbHVlLCByZXNvbHZlOiBjb21wbGV0aW9uU291cmNlIH0pXG4gICAgICAgICAgICAgIGlmICghY3R4KSByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgaWYgKCFjb21wbGV0aW5nKCkpIHtcbiAgICAgICAgICAgICAgICBzZXRDb21wbGV0aW5nKHRydWUpXG4gICAgICAgICAgICAgICAgc2V0Q29tcEluZGV4KDApXG4gICAgICAgICAgICAgICAgbGlzdEZpbGVzKGN3ZCkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChmaWxlcyAhPT0gZmlsZUxpc3QoKSkgc2V0RmlsZUxpc3QoZmlsZXMpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdHgubWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYWNjZXB0Q29tcGxldGlvbihlLnZhbHVlLCBjdHgsIGN0eC5tYXRjaGVzW01hdGgubWluKGNvbXBJbmRleCgpLCBjdHgubWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmN0cmwgfHwgZS5tZXRhIHx8IHNob3dDb21tYW5kcyB8fCBzaG93RmlsZXMpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndXAnICYmIGUudmFsdWUgPT09ICcnICYmIChleHBlZGl0ZWQoKS5sZW5ndGggPiAwIHx8IHF1ZXVlZCgpLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgIHNldElucHV0KGN0bC5yZWNhbGxQZW5kaW5nKCkpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdyaWdodCcgJiYgZS52YWx1ZSA9PT0gJycgJiYgcXVldWVkKCkubGVuZ3RoID4gMCAmJiBidXN5KCkgJiYgIWNvbXBhY3RpbmcoKSkge1xuICAgICAgICAgICAgICBjdGwuZXhwZWRpdGVRdWV1ZWQoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnJvd3NpbmcgPSBoaXN0SWR4KCkgPj0gMFxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndXAnICYmIChicm93c2luZyB8fCBlLnZhbHVlID09PSAnJykgJiYgaGlzdElkeCgpIDwgc2VudCgpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGhpc3RJZHgoKSArIDFcbiAgICAgICAgICAgICAgc2V0SGlzdElkeChuKVxuICAgICAgICAgICAgICBzZXRJbnB1dChzZW50KClbc2VudCgpLmxlbmd0aCAtIDEgLSBuXS50ZXh0KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnZG93bicgJiYgYnJvd3NpbmcpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGhpc3RJZHgoKSAtIDFcbiAgICAgICAgICAgICAgc2V0SGlzdElkeChuKVxuICAgICAgICAgICAgICBzZXRJbnB1dChuIDwgMCA/ICcnIDogc2VudCgpW3NlbnQoKS5sZW5ndGggLSAxIC0gbl0udGV4dClcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH19XG4gICAgICAgICAgc3VibWl0T25FbnRlclxuICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgY2xlYXJPblN1Ym1pdD17ZmFsc2V9XG4gICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgIGN1cnNvcj17eyBibGluazogdHJ1ZSwgYmc6IGFjY2VudCgpLCBjb2xvcjogJ2JsYWNrJyB9fVxuICAgICAgICAvPlxuICAgICAgPC9Nb3VzZUZvY3VzUmVnaW9uPn1cblxuICAgICAge3Nob3dDb21wb3NlckFjdGlvbnMgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEsIG1hcmdpbkxlZnQ6IDEgfX0+XG4gICAgICAgICAgPENvbXBvc2VyQWN0aW9uXG4gICAgICAgICAgICBpY29uPVwiXHUyNUNCXCJcbiAgICAgICAgICAgIGFjdGl2ZUljb249XCJcdTI1Q0ZcIlxuICAgICAgICAgICAgYWN0aXZlPXtkaWN0YXRpb25TdGF0dXMoKSAhPT0gJ2lkbGUnfVxuICAgICAgICAgICAgb25Ib3Zlcj17KGhvdmVyZWQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGhvdmVyZWQpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJ2NhcHR1cmUgYXVkaW8nKVxuICAgICAgICAgICAgICBlbHNlIGlmIChjb21wb3NlckFjdGlvbkxhYmVsKCkgPT09ICdjYXB0dXJlIGF1ZGlvJykgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnJylcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvblByZXNzPXsoKSA9PiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ3JlY29yZGluZydcbiAgICAgICAgICAgICAgPyB2b2lkIHJlZnMuZGljdGF0aW9uSW5wdXQuc3RvcCgpXG4gICAgICAgICAgICAgIDogcmVmcy5kaWN0YXRpb25JbnB1dC5zdGFydCh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCkgfSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Q29tcG9zZXJBY3Rpb25cbiAgICAgICAgICAgIGljb249XCJcdTI1QTFcIlxuICAgICAgICAgICAgYWN0aXZlSWNvbj1cIlx1MjVBMFwiXG4gICAgICAgICAgICBhY3RpdmU9e2NhcHR1cmVTdGF0dXMoKSA9PT0gJ2NhcHR1cmluZyd9XG4gICAgICAgICAgICBvbkhvdmVyPXsoaG92ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaG92ZXJlZCkgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnY2FwdHVyZSBpbWFnZScpXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA9PT0gJ2NhcHR1cmUgaW1hZ2UnKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCcnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHZvaWQgcmVmcy5jYXB0dXJlSW1hZ2UoKX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtkaWN0YXRpb25TdGF0dXMoKSAhPT0gJ2lkbGUnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2RpY3RhdGlvbkluZGljYXRvcihkaWN0YXRpb25TdGF0dXMoKSwgZGljdGF0aW9uTGV2ZWxzKCkpfTwvdGV4dD59XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ3JlY29yZGluZycgPyAnZXNjIGNhbmNlbCAgZW50ZXIgY29uZmlybScgOiBjYXB0dXJlU3RhdHVzKCkgPT09ICdjYXB0dXJpbmcnID8gJyBlc2MgY2FuY2VsJyA6IGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA/IGAgJHtjb21wb3NlckFjdGlvbkxhYmVsKCl9YCA6ICcnfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0NvbW1hbmRzICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge21hdGNoZWRDb21tYW5kcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWF0Y2hpbmcgY29tbWFuZHM8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e21hdGNoZWRDb21tYW5kc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWQ9e2NtZEluZGV4KCl9XG4gICAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRDbWRJbmRleH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9eyhjKSA9PiBydW5Db21tYW5kKGMpfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtzaG93Q29tbWFuZHMgJiYgZGljdGF0aW9uU3RhdHVzKCkgPT09ICdpZGxlJ31cbiAgICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoYywgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2AvJHtjLm5hbWV9YC5wYWRFbmQobWF0Y2hlZENvbW1hbmRzLnJlZHVjZSgobSwgeCkgPT4gTWF0aC5tYXgobSwgeC5uYW1lLmxlbmd0aCArIDMpLCAxMikpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBGRyA6IE1VVEVEIH19PntjLmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RmlsZXMgJiYgbWF0Y2hlZEZpbGVzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e21hdGNoZWRGaWxlc31cbiAgICAgICAgICAgIHNlbGVjdGVkPXtmaWxlSW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRGaWxlSW5kZXh9XG4gICAgICAgICAgICBvblN1Ym1pdD17cGlja0ZpbGV9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0RmlsZXNEaXNtaXNzZWQodHJ1ZSl9XG4gICAgICAgICAgICBmb2N1c2VkPXtzaG93RmlsZXMgJiYgZGljdGF0aW9uU3RhdHVzKCkgPT09ICdpZGxlJ31cbiAgICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsoZiwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkdfU09GVCB9fT57Zn08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29tcGxldGlvbiAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17Y29tcEN0eC5tYXRjaGVzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2NvbXBJbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldENvbXBJbmRleH1cbiAgICAgICAgICAgIG9uU3VibWl0PXsoY2FuZGlkYXRlKSA9PiBhY2NlcHRDb21wbGV0aW9uKGlucHV0KCksIGNvbXBDdHgsIGNhbmRpZGF0ZSl9XG4gICAgICAgICAgICBvbkNhbmNlbD17ZGlzbWlzc0NvbXBsZXRpb259XG4gICAgICAgICAgICBmb2N1c2VkPXtzaG93Q29tcGxldGlvbiAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhjYW5kaWRhdGUsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHX1NPRlQgfX0+e2NhbmRpZGF0ZX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8L2JveD5cblxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6IHdpZGVMYXlvdXQgPyA2NCA6IHVuZGVmaW5lZCwgaGVpZ2h0OiB3aWRlTGF5b3V0ID8gJzEwMCUnIDogdW5kZWZpbmVkIH19PlxuICAgICAge3Nob3dNb2RlbFBhbmVsKCkgJiYgKFxuICAgICAgICA8TW9kZWxQYW5lbFxuICAgICAgICAgIG1vZGVscz17bW9kZWxzfVxuICAgICAgICAgIGN1cnJlbnQ9e21vZGVsKCkubmFtZX1cbiAgICAgICAgICBkZWZhdWx0TmFtZT17ZGVmYXVsdE1vZGVsKCkubmFtZX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93TW9kZWxQYW5lbCgpfVxuICAgICAgICAgIG9uUGljaz17KG0pID0+IHtcbiAgICAgICAgICAgIGlmIChjdGwuc3dpdGNoTW9kZWwobSkpIHNldFNob3dNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QaWNrRGVmYXVsdD17KG0pID0+IHtcbiAgICAgICAgICAgIGlmIChjdGwuc3dpdGNoTW9kZWwobSwgeyBhc0RlZmF1bHQ6IHRydWUgfSkpIHNldFNob3dNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01vZGVsUGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dSZXNlYXJjaE1vZGVsUGFuZWwoKSAmJiAoXG4gICAgICAgIDxNb2RlbFBhbmVsXG4gICAgICAgICAgbW9kZWxzPXttb2RlbHMuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpfVxuICAgICAgICAgIGN1cnJlbnQ9e3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA/IGJvb3RbYCR7cGFydGljaXBhbnRNb2RlbFRhcmdldCgpfU1vZGVsYF0gOiBzZWxlY3RpbmdTaGVsbE1vZGVsKCkgPyBib290LnNoZWxsTW9kZWwgOiBzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpID8gYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA6IGJvb3QucmVzZWFyY2hNb2RlbH1cbiAgICAgICAgICBkZWZhdWx0TmFtZT17bnVsbH1cbiAgICAgICAgICB0aXRsZT17cGFydGljaXBhbnRNb2RlbFRhcmdldCgpID8gYENob29zZSBQYXJ0aWNpcGFudCAke3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA9PT0gJ3BhcnRpY2lwYW50QScgPyAnQScgOiAnQid9IG1vZGVsYCA6IHNlbGVjdGluZ1NoZWxsTW9kZWwoKSA/ICdDaG9vc2Ugc2hlbGwgbW9kZWwnIDogc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSA/ICdDaG9vc2Ugc3ludGhlc2lzIG1vZGVsJyA6ICdDaG9vc2UgcGFyYWxsZWwgd29ya2VyIG1vZGVsJ31cbiAgICAgICAgICBoaW50PVwiZW50ZXI6IHNhdmUgbW9kZWwgIGVzYzogY2FuY2VsXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobSkgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSkge1xuICAgICAgICAgICAgICBjb25zdCBtZXRob2QgPSBwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPT09ICdwYXJ0aWNpcGFudEEnID8gJ3NldFBhcnRpY2lwYW50QU1vZGVsJyA6ICdzZXRQYXJ0aWNpcGFudEJNb2RlbCdcbiAgICAgICAgICAgICAgY3RsW21ldGhvZF0obS5uYW1lKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RpbmdTaGVsbE1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgY3RsLnNldFNoZWxsTW9kZWwobS5uYW1lKVxuICAgICAgICAgICAgICBmbGFzaChgc2hlbGw6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA9IG0ubmFtZVxuICAgICAgICAgICAgICB3cml0ZUNvbmZpZyh7IG1vZGVsczogeyBkZWxpYmVyYXRpb246IG0ubmFtZSB9IH0pLmNhdGNoKCgpID0+IHt9KVxuICAgICAgICAgICAgICBmbGFzaChgZGVsaWJlcmF0aW9uOiAke20ubmFtZX1gKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYm9vdC5yZXNlYXJjaE1vZGVsID0gbS5uYW1lXG4gICAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgbW9kZWxzOiB7IHJlc2VhcmNoV29ya2VyOiBtLm5hbWUgfSB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICAgICAgZmxhc2goYHBhcmFsbGVsIHdvcmtlcnM6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdSZXNlYXJjaCgpXG4gICAgICAgICAgICBjb25zdCBwZW5kaW5nRGVjaXNpb24gPSBwZW5kaW5nRGVsaWJlcmF0aW9uKClcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblRvID0gcmVzZWFyY2hNb2RlbFJldHVybigpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSBydW5Db21tYW5kKHsgbmFtZTogJ3BhcmFsbGVsJyB9LCBwZW5kaW5nLnRhc2spXG4gICAgICAgICAgICBlbHNlIGlmIChwZW5kaW5nRGVjaXNpb24pIHJ1bkNvbW1hbmQoeyBuYW1lOiAnZGVsaWJlcmF0ZScgfSwgcGVuZGluZ0RlY2lzaW9uLmRlY2lzaW9uKVxuICAgICAgICAgICAgZWxzZSBpZiAocmV0dXJuVG8gPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eygpID0+IHt9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIGlmIChyZXNlYXJjaE1vZGVsUmV0dXJuKCkgPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dFZmZvcnRQYW5lbCgpICYmIChcbiAgICAgICAgPEVmZm9ydFBhbmVsXG4gICAgICAgICAgbGV2ZWxzPXtFRkZPUlRfTEVWRUxTfVxuICAgICAgICAgIGN1cnJlbnQ9e2VmZm9ydCgpID8/IG51bGx9XG4gICAgICAgICAgZGVmYXVsdExldmVsPXtkZWZhdWx0RWZmb3J0KCkgPz8gbnVsbH1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93RWZmb3J0UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyhsKSA9PiB7XG4gICAgICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KGwua2V5KVxuICAgICAgICAgICAgc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QaWNrRGVmYXVsdD17KGwpID0+IHtcbiAgICAgICAgICAgIHNldFNlc3Npb25FZmZvcnQobC5rZXksIHsgYXNEZWZhdWx0OiB0cnVlIH0pXG4gICAgICAgICAgICBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dUaGVtZVBhbmVsKCkgJiYgKFxuICAgICAgICA8VGhlbWVQYW5lbFxuICAgICAgICAgIHRoZW1lcz17dGhlbWVJdGVtcygpfVxuICAgICAgICAgIHByZWY9e3RoZW1lUHJlZigpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dUaGVtZVBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsodCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1RoZW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBhcHBseVRoZW1lUHJlZih0LmtleSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUHJldmlldz17KHQpID0+IHByZXZpZXdQYWxldHRlKHQua2V5KX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93VGhlbWVQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIHByZXZpZXdQYWxldHRlKHRoZW1lUHJlZigpKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0RlbGV0ZUNvbmZpcm0oKSAmJiAoXG4gICAgICAgIDxDb25maXJtUGFuZWxcbiAgICAgICAgICB0aXRsZT1cIkRlbGV0ZSBjdXJyZW50IHNlc3Npb24/XCJcbiAgICAgICAgICBtZXNzYWdlPVwiVGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIGFuZCBpdHMgcGVyc2lzdGVkIGhpc3Rvcnkgd2lsbCBiZSBwZXJtYW5lbnRseSBkZWxldGVkLlwiXG4gICAgICAgICAgY29uZmlybUxhYmVsPVwiRGVsZXRlXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93RGVsZXRlQ29uZmlybSgpfVxuICAgICAgICAgIG9uQ29uZmlybT17Y29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9ufVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dEZWxldGVDb25maXJtKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93SGlzdG9yeVBhbmVsKCkgJiYgKFxuICAgICAgICA8SGlzdG9yeVBhbmVsXG4gICAgICAgICAgcHJvbXB0cz17aGlzdFByb21wdHMoKX1cbiAgICAgICAgICBzY29wZXM9e0hJU1RPUllfU0NPUEVTfVxuICAgICAgICAgIHNjb3BlSW5kZXg9e2hpc3RTY29wZSgpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dIaXN0b3J5UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyh0ZXh0KSA9PiB7IHNldElucHV0KHRleHQpOyBzZXRTaG93SGlzdG9yeVBhbmVsKGZhbHNlKSB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dIaXN0b3J5UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge2luZm9QYW5lbCgpICYmIChcbiAgICAgICAgPEluZm9MaXN0UGFuZWxcbiAgICAgICAgICB0aXRsZT17aW5mb1BhbmVsKCkudGl0bGV9XG4gICAgICAgICAgcm93cz17aW5mb1BhbmVsKCkucm93c31cbiAgICAgICAgICBvdmVydmlldz17aW5mb1BhbmVsKCkub3ZlcnZpZXd9XG4gICAgICAgICAgZm9jdXNlZD17aW5mb1BhbmVsKCkgIT09IG51bGx9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0SW5mb1BhbmVsKG51bGwpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb25uZWN0UGFuZWwoKSAmJiAoXG4gICAgICAgIDxDb25uZWN0UGFuZWxcbiAgICAgICAgICBwcm92aWRlcnM9e2F1dGhQcm92aWRlcnMoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93Q29ubmVjdFBhbmVsKCl9XG4gICAgICAgICAgb25Db25uZWN0PXtjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25EaXNjb25uZWN0PXtkaXNjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0Nvbm5lY3RQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1dha2V1cHNQYW5lbCgpICYmIChcbiAgICAgICAgPFdha2V1cHNQYW5lbFxuICAgICAgICAgIHdha2V1cHM9eyhzaGVsbHNWZXJzaW9uKCksIGJvb3Qud2FrZXVwcy5saXN0KCkpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dXYWtldXBzUGFuZWwoKX1cbiAgICAgICAgICBvbkNhbmNlbD17KHcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy53YWtldXBDYW5jZWxBcm1cbiAgICAgICAgICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHcuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgICByZWZzLndha2V1cENhbmNlbEFybSA9IHsgaWQ6IHcuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZsYXNoKGBhZ2FpbiB0byBjYW5jZWwgd2FrZS11cCAke3cuaWR9ICgke3cubm90ZS5zcGxpdCgnXFxuJylbMF0uc2xpY2UoMCwgNDApfSlgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmcy53YWtldXBDYW5jZWxBcm0gPSBudWxsXG4gICAgICAgICAgICBjdGwuY2FuY2VsV2FrZXVwKHcpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93V2FrZXVwc1BhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93TWNwUGFuZWwoKSAmJiAoXG4gICAgICAgIDxNY3BQYW5lbFxuICAgICAgICAgIHNlcnZlcnM9e21jcFNlcnZlcnMoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93TWNwUGFuZWwoKX1cbiAgICAgICAgICBvblRvZ2dsZT17KG5hbWUpID0+IG1jcC50b2dnbGUobmFtZSl9XG4gICAgICAgICAgb25SZWNvbm5lY3Q9eyhuYW1lKSA9PiBtY3AucmVjb25uZWN0KG5hbWUpfVxuICAgICAgICAgIG9uUmVtb3ZlPXsobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJtZWQgPSByZWZzLm1jcFJlbW92ZUFybVxuICAgICAgICAgICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5uYW1lICE9PSBuYW1lIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgICAgICAgICAgcmVmcy5tY3BSZW1vdmVBcm0gPSB7IG5hbWUsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gcmVtb3ZlIFwiJHtuYW1lfVwiIGFuZCBpdHMgY29uZmlnYClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZnMubWNwUmVtb3ZlQXJtID0gbnVsbFxuICAgICAgICAgICAgbWNwLnJlbW92ZShuYW1lKVxuICAgICAgICAgICAgZmxhc2goYHJlbW92ZWQgbWNwIHNlcnZlciAke25hbWV9YClcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQWRkPXsobmFtZSwgY29tbWFuZCwgc2NvcGUpID0+IHtcbiAgICAgICAgICAgIG1jcC5hZGQobmFtZSwgY29tbWFuZCwgc2NvcGUpXG4gICAgICAgICAgICBmbGFzaChgYWRkZWQgJHtuYW1lfSAoJHtzY29wZX0pYClcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uRWRpdD17KG5hbWUsIGNvbW1hbmQpID0+IHtcbiAgICAgICAgICAgIG1jcC51cGRhdGUobmFtZSwgY29tbWFuZClcbiAgICAgICAgICAgIGZsYXNoKGB1cGRhdGVkICR7bmFtZX1gKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25JbnZhbGlkPXtmbGFzaH1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TWNwUGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Jld2luZFN0ZXAoKSA9PT0gJ3BpY2snICYmIChcbiAgICAgICAgPFJld2luZFBpY2tQYW5lbFxuICAgICAgICAgIGVudHJpZXM9e1suLi5yZXdpbmRFbnRyaWVzKCldLnJldmVyc2UoKX1cbiAgICAgICAgICBzdGF0cz17KGluZGV4KSA9PiByZXdpbmRTdGF0cyhkZXJpdmVkKCksIGluZGV4KX1cbiAgICAgICAgICBmb2N1c2VkPXtyZXdpbmRTdGVwKCkgPT09ICdwaWNrJ31cbiAgICAgICAgICBvblBpY2s9eyhlbnRyeSkgPT4geyBzZXRSZXdpbmRUYXJnZXQoZW50cnkpOyBzZXRSZXdpbmRTdGVwKCdhY3Rpb24nKSB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFJld2luZFN0ZXAobnVsbCl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7cmV3aW5kU3RlcCgpID09PSAnYWN0aW9uJyAmJiByZXdpbmRUYXJnZXQoKSAmJiAoXG4gICAgICAgIDxSZXdpbmRBY3Rpb25QYW5lbFxuICAgICAgICAgIHRhcmdldD17cmV3aW5kVGFyZ2V0KCl9XG4gICAgICAgICAgb3B0aW9ucz17cmV3aW5kT3B0aW9uc31cbiAgICAgICAgICBmb2N1c2VkPXtyZXdpbmRTdGVwKCkgPT09ICdhY3Rpb24nfVxuICAgICAgICAgIG9uU3VibWl0PXtwZXJmb3JtUmV3aW5kfVxuICAgICAgICAgIG9uQmFjaz17KCkgPT4gc2V0UmV3aW5kU3RlcCgncGljaycpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge2NvbWJpbmVkQWN0aXZpdHkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxBZ2VudFN0cmlwUm93IHNlbGVjdGVkPXshdmlld2VkU2hlbGwgJiYgIXZpZXdlZEFnZW50fSBmb2N1c2VkPXtmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJ30gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cygnYWN0aXZpdHktbWFpbicpOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSk7IHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FjdGl2aXR5LW1haW4nID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnXHUyNUNGICd9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FjdGl2aXR5LW1haW4nID8gJ2JsYWNrJyA6ICF2aWV3ZWRTaGVsbCAmJiAhdmlld2VkQWdlbnQgPyBGRyA6IE1VVEVEIH19PnsnbWFpbid9PC90ZXh0PlxuICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7dmlzaWJsZVNoZWxscy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogY29tYmluZWRBY3Rpdml0eSB8fCBzaG93Q29tcG9zZXJBY3Rpb25zID8gMCA6IDEgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake3NoZWxsQWN0aW9uSGludCA/IGAke3NoZWxsQWN0aW9uSGludH0gIGAgOiAnJ31qL2sgbW92ZWB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICAgIHshY29tYmluZWRBY3Rpdml0eSAmJiAoXG4gICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBzZWxlY3RlZD17IXZpZXdlZFNoZWxsfSBmb2N1c2VkPXtmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJ30gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cygnc2hlbGwtbWFpbicpOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSkgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ3NoZWxsLW1haW4nID8gJ2JsYWNrJyA6ICF2aWV3ZWRTaGVsbCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c2hlbGxXaW5kb3cubWFwKChzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkID0gZm0uY3VycmVudCgpID09PSBgc2hlbGwtJHtzLmlkfWBcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdmlld2VkU2hlbGxJZCgpID09PSBzLmlkXG4gICAgICAgICAgICBjb25zdCBlbGFwc2VkID0gYWdlbnRFbGFwc2VkKHsgc3RhcnRlZEF0OiBzLnN0YXJ0ZWRBdCwgZW5kZWRBdDogcy5lbmRlZEF0IH0pXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBrZXk9e2BzaGVsbC0ke3MuaWR9YH0gc2VsZWN0ZWQ9e3NlbGVjdGVkfSBmb2N1c2VkPXtmb2N1c2VkfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKGBzaGVsbC0ke3MuaWR9YCk7IHNldFZpZXdlZFNoZWxsSWQocy5pZCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKSB9fT5cbiAgICAgICAgICAgICAgICB7cy5zdGF0dXMgPT09ICdydW5uaW5nJyA/IDxTcGlubmVyIGNvbG9yPXtmb2N1c2VkID8gJ2JsYWNrJyA6IGFjY2VudCgpfSB2YXJpYW50PVwiZG90c1wiIC8+IDogPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogcy5leGl0Q29kZSA9PT0gMCA/IEdSRUVOIDogUkVEIH19PntzLmV4aXRDb2RlID09PSAwID8gJ1x1MjVDRicgOiAnXHUwMEQ3J308L3RleHQ+fVxuICAgICAgICAgICAgICAgIDx0ZXh0PnsnICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHNlbGVjdGVkID8gRkcgOiBNVVRFRCB9fT57YHNoZWxsIFske3MuaWR9XSAgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntzLmRlc2NyaXB0aW9uIHx8IHMuY29tbWFuZC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7cy5zdGF0dXMgPT09ICdydW5uaW5nJyA/ICcnIDogYGV4aXQgJHtzLmV4aXRDb2RlfSAgYH0ke2VsYXBzZWR9YH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvQWdlbnRTdHJpcFJvdz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgICB7dmlzaWJsZVNoZWxscy5sZW5ndGggPiBTSEVMTF9TVFJJUF9NQVggJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke3NoZWxsV2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke3NoZWxsV2luZG93U3RhcnR9YCA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCA+IDAgJiYgc2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVTaGVsbHMubGVuZ3RoIC0gc2hlbGxXaW5kb3dTdGFydCAtIHNoZWxsV2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt2aXNpYmxlQWdlbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiBjb21iaW5lZEFjdGl2aXR5IHx8IHNob3dDb21wb3NlckFjdGlvbnMgPyAwIDogMSB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7YWdlbnRBY3Rpb25IaW50ID8gYCR7YWdlbnRBY3Rpb25IaW50fSAgYCA6ICcnfWovayBtb3ZlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgeyFjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IHNlbGVjdGVkPXshdmlld2VkQWdlbnR9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdhZ2VudC1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhZ2VudC1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nID8gJ2JsYWNrJyA6ICF2aWV3ZWRBZ2VudCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7YWdlbnRXaW5kb3cubWFwKChhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhZ2VudFN0YXR1cyhhKVxuICAgICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGZtLmN1cnJlbnQoKSA9PT0gYGFnZW50LSR7YS5pZH1gXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBrZXk9e2BhZ2VudC0ke2EuaWR9YH0gc2VsZWN0ZWQ9e3ZpZXdlZEFnZW50SWQoKSA9PT0gYS5pZH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cyhgYWdlbnQtJHthLmlkfWApOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKGEuaWQpOyBzZXRGb2xsb3codHJ1ZSk7IHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpIH19PlxuICAgICAgICAgICAgICAgIHthLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gPFNwaW5uZXIgY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IHZhcmlhbnQ9XCJkb3RzXCIgLz4gOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzdGF0dXMuY29sb3IgfX0+e3N0YXR1cy5pY29ufTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQ+eycgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogdmlld2VkQWdlbnRJZCgpID09PSBhLmlkID8gRkcgOiBNVVRFRCB9fT57YCR7YS5yb2xlIHx8ICdhZ2VudCd9IFske2EuaWR9XSAgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnthLmRlc2NyaXB0aW9ufTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICB7c3RhdHVzLmxhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHN0YXR1cy5jb2xvciB9fT57YCAgJHtzdGF0dXMubGFiZWx9YH08L3RleHQ+fVxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgJHtzdGF0dXMubGFiZWwgPyAnICAnIDogJyAgJ30gJHthZ2VudEVsYXBzZWQoYSl9ICBcdTIxOTMgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2EudXNhZ2U/LnRvdGFsVG9rZW5zIHx8IGEudXNhZ2U/LnByb21wdFRva2VucyB8fCAwfSBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRH0gaGlnaGxpZ2h0PXtmb2N1c2VkID8gJ2JsYWNrJyA6IGFjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSB0b2tlbnNgfSAvPlxuICAgICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgICAge3Zpc2libGVBZ2VudHMubGVuZ3RoID4gQUdFTlRfU1RSSVBfTUFYICYmIChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHthZ2VudFdpbmRvd1N0YXJ0ID4gMCA/IGBcdTIxOTEgJHthZ2VudFdpbmRvd1N0YXJ0fWAgOiAnJ30ke2FnZW50V2luZG93U3RhcnQgPiAwICYmIGFnZW50V2luZG93U3RhcnQgKyBhZ2VudFdpbmRvdy5sZW5ndGggPCB2aXNpYmxlQWdlbnRzLmxlbmd0aCA/ICcgICcgOiAnJ30ke2FnZW50V2luZG93U3RhcnQgKyBhZ2VudFdpbmRvdy5sZW5ndGggPCB2aXNpYmxlQWdlbnRzLmxlbmd0aCA/IGBcdTIxOTMgJHt2aXNpYmxlQWdlbnRzLmxlbmd0aCAtIGFnZW50V2luZG93U3RhcnQgLSBhZ2VudFdpbmRvdy5sZW5ndGh9YCA6ICcnfSBtb3JlYH08L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7d2lkZUxheW91dCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+fVxuXG4gICAgICB7d2lkZUxheW91dCA/IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIHBhZGRpbmdUb3A6IDEgfX0+XG4gICAgICAgICAge2J1c3koKSAmJiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPFNoaW1tZXIgY29sb3I9e2FjY2VudCgpfSBoaWdobGlnaHQ9e0hJR0hMSUdIVH0gZHVyYXRpb249ezE1MDB9IHJldmVyc2U+XG4gICAgICAgICAgICAgICAgICB7Y29tcGFjdGluZygpXG4gICAgICAgICAgICAgICAgICAgID8gY29tcGFjdFN0YXR1cygpPy5waGFzZSA9PT0gJ3dyaXRpbmcnID8gYENvbXBhY3RpbmcgIHdyaXRpbmcgJHtjb21wYWN0U3RhdHVzKCkuc2VjdGlvbn0vOGAgOiAnQ29tcGFjdGluZyAgYW5hbHl6aW5nJ1xuICAgICAgICAgICAgICAgICAgICA6IHR1cm5QaGFzZSgpID09PSAndGhpbmtpbmcnID8gJ1RoaW5raW5nJyA6IHR1cm5QaGFzZSgpID09PSAndG9vbHMnID8gJ1dvcmtpbmcnIDogJ1Jlc3BvbmRpbmcnfVxuICAgICAgICAgICAgICAgIDwvU2hpbW1lcj5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7ZWxhcHNlZH0gIGVzYyB0byBpbnRlcnJ1cHRgfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIHtjb21wYWN0U3RhdHVzKCk/LnBoYXNlID09PSAnd3JpdGluZycgJiYgPFByb2dyZXNzQmFyIHZhcmlhbnQ9XCJ0aGluXCIgdmFsdWU9e2NvbXBhY3RTdGF0dXMoKS5zZWN0aW9uIC8gOH0gd2lkdGg9ezMwfSBwZXJjZW50YWdlPXtmYWxzZX0gY29sb3I9e2FjY2VudCgpfSAvPn1cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgICAge2dpdEluZm8/LmJyYW5jaCAmJiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlIH19PnsnUmVwb3NpdG9yeSd9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0JyYW5jaCAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntnaXRJbmZvLmJyYW5jaH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0NoYW5nZXMgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAge2dpdEluZm8uYWRkZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBHUkVFTiB9fT57YCR7Z2l0SW5mby5hZGRlZH0gYWRkZWRgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAge2dpdEluZm8uYWRkZWQgPiAwICYmIGdpdEluZm8ucmVtb3ZlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnICAnfTwvdGV4dD59XG4gICAgICAgICAgICAgICAge2dpdEluZm8ucmVtb3ZlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57YCR7Z2l0SW5mby5yZW1vdmVkfSByZW1vdmVkYH08L3RleHQ+fVxuICAgICAgICAgICAgICAgIHtnaXRJbmZvLmFkZGVkID09PSAwICYmIGdpdEluZm8ucmVtb3ZlZCA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydjbGVhbid9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgYm9sZDogdHJ1ZSB9fT57J1Nlc3Npb24nfTwvdGV4dD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnRGlyZWN0b3J5ICAgICAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19Pntib290LmRpc3BsYXlDd2R9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydNb2RlbCAgICAgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e21vZGVsKCkubmFtZX08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICB7ZWZmb3J0QXBwbGllcygpICYmIGVmZm9ydCgpICYmIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnRWZmb3J0ICAgICAgICAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2VmZm9ydCgpfTwvdGV4dD48L2JveD59XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0lucHV0IHRva2VucyAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntNYXRoLnJvdW5kKHVzYWdlLnByb21wdFRva2VucykudG9Mb2NhbGVTdHJpbmcoKX08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J091dHB1dCB0b2tlbnMgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntNYXRoLnJvdW5kKHVzYWdlLmNvbXBsZXRpb25Ub2tlbnMpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAge3VzYWdlLnRob3VnaHRUb2tlbnMgPiAwICYmIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnVGhvdWdodCB0b2tlbnMgJ308L3RleHQ+PEFuaW1hdGVkVmFsdWUgdmFsdWU9e3VzYWdlLnRob3VnaHRUb2tlbnN9IGNvbG9yPXtGR19TT0ZUfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBNYXRoLnJvdW5kKG4pLnRvTG9jYWxlU3RyaW5nKCl9IC8+PC9ib3g+fVxuICAgICAgICAgICAge2NvbnRleHRQZXJjZW50ID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0NvbnRleHQgdXNlZCAgICd9PC90ZXh0PjxBbmltYXRlZFZhbHVlIHZhbHVlPXtjb250ZXh0UGVyY2VudH0gY29sb3I9e2NvbnRleHRQZXJjZW50ID49IDgwID8gUkVEIDogRkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gYCR7TWF0aC5yb3VuZChuKX0lYH0gLz48L2JveD59XG4gICAgICAgICAgICB7cGVuZGluZ1dha2V1cHMgPiAwICYmIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+PHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnV2FrZS11cHMgICAgICAgJ308L3RleHQ+PHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e3BlbmRpbmdXYWtldXBzfTwvdGV4dD48L2JveD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGhlaWdodDogMSB9fSAvPlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIHBhZGRpbmdYOiAyLCBnYXA6IDEgfX0+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e21vZGVsKCkubmFtZX08L3RleHQ+XG4gICAgICAgICAgICB7ZWZmb3J0QXBwbGllcygpICYmIGVmZm9ydCgpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZWZmb3J0KCl9PC90ZXh0Pn1cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgIHtwZW5kaW5nV2FrZXVwcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyM0YwICR7cGVuZGluZ1dha2V1cHN9YH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLnByb21wdFRva2Vucyl9IFx1MjE5M2B9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLmNvbXBsZXRpb25Ub2tlbnMpfSBcdTIxOTFgfTwvdGV4dD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17dXNhZ2UudGhvdWdodFRva2Vuc30gY29sb3I9e01VVEVEfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSBcdTI1QzhgfSAvPn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2NvbnRleHRQZXJjZW50fSBjb2xvcj17Y29udGV4dFBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17UEFORUxfQkd9IGZvcm1hdD17Y29udGV4dEJhcn0gLz59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgICAgPERpY3RhdGlvbktleXMgaW5wdXQ9e3JlZnMuZGljdGF0aW9uSW5wdXR9IC8+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tbWFuZEF0KHRleHQsIGN1cnNvciA9IHRleHQubGVuZ3RoKSB7XG4gIGNvbnN0IG1hdGNoID0gdGV4dC5zbGljZSgwLCBjdXJzb3IpLm1hdGNoKC8oXnxbXFxzKF0pXFwvKFtBLVphLXowLTlfLV0qKSQvKVxuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuICBjb25zdCBzdGFydCA9IGN1cnNvciAtIG1hdGNoWzJdLmxlbmd0aCAtIDFcbiAgY29uc3Qgc3VmZml4ID0gdGV4dC5zbGljZShjdXJzb3IpLm1hdGNoKC9eW0EtWmEtejAtOV8tXSovKVswXVxuICByZXR1cm4geyBzdGFydCwgZW5kOiBjdXJzb3IgKyBzdWZmaXgubGVuZ3RoLCBxdWVyeTogbWF0Y2hbMl0gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNvbW1hbmQodGV4dCwgcmFuZ2UsIGJvZHkpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiB0ZXh0LnNsaWNlKDAsIHJhbmdlLnN0YXJ0KSArIGJvZHkgKyB0ZXh0LnNsaWNlKHJhbmdlLmVuZCksXG4gICAgY3Vyc29yOiByYW5nZS5zdGFydCArIGJvZHkubGVuZ3RoLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRmllbGRzKGNvbW1hbmQsIGJvZHksIGFyZ3MgPSAnJykge1xuICBjb25zdCBmaWVsZHMgPSBbLi4uKGNvbW1hbmQuYXJndW1lbnRzID8/IFtdKV1cbiAgaWYgKGJvZHkuaW5jbHVkZXMoJyRBUkdVTUVOVFMnKSAmJiAhYXJncykge1xuICAgIGZpZWxkcy5wdXNoKHsgbmFtZTogJyRhcmdzJywgbGFiZWw6ICdBcmd1bWVudHMnLCB0eXBlOiAndGV4dCcgfSlcbiAgfVxuICByZXR1cm4gZmllbGRzXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBUZXh0QXJlYSwgTWVudSwgQnV0dG9uLCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBNVVRFRCwgUEFORUxfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tbWFuZEZvcm0oeyBuYW1lLCBmaWVsZHMsIGZpbGVzLCBmb2N1c2VkLCBvblN1Ym1pdCwgb25DYW5jZWwgfSkge1xuICBjb25zdCBbc3RlcCwgc2V0U3RlcF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IGNyZWF0ZVNpZ25hbCh7fSlcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IGZpZWxkID0gZmllbGRzW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkLnR5cGUgPT09ICdjaG9pY2UnID8gZmllbGQuY2hvaWNlcyA6IGZpZWxkLnR5cGUgPT09ICdwYXRoJyA/IGZpbGVzIDogW11cbiAgY29uc3QgbWF0Y2hlcyA9IHJhbmtGdXp6eShvcHRpb25zLCBxdWVyeSgpLCAocSwgdmFsdWUpID0+IGZ1enp5U2NvcmUocSwgdmFsdWUpKVxuXG4gIGZ1bmN0aW9uIGFkdmFuY2UodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0ID0geyAuLi52YWx1ZXMoKSwgW2ZpZWxkLm5hbWVdOiB2YWx1ZSB9XG4gICAgc2V0VmFsdWVzKG5leHQpXG4gICAgaWYgKHN0ZXAoKSA9PT0gZmllbGRzLmxlbmd0aCAtIDEpIHJldHVybiBvblN1Ym1pdChuZXh0KVxuICAgIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRTZWxlY3RlZCgwKVxuICB9XG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGdhcDogMiB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PntgLyR7bmFtZX1gfTwvdGV4dD5cbiAgICAgICAge2ZpZWxkcy5zbGljZSgwLCBzdGVwKCkpLm1hcCgoaXRlbSkgPT4gPHRleHQga2V5PXtpdGVtLm5hbWV9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57dmFsdWVzKClbaXRlbS5uYW1lXX08L3RleHQ+KX1cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD1cIkNhbmNlbFwiIG9uUHJlc3M9e29uQ2FuY2VsfSAvPlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2ZpZWxkLmxhYmVsfTwvdGV4dD5cbiAgICAgIDxUZXh0QXJlYVxuICAgICAgICBrZXk9e2ZpZWxkLm5hbWV9XG4gICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgIHZhbHVlPXtxdWVyeSgpfVxuICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgIGNsZWFyT25TdWJtaXQ9e2ZhbHNlfVxuICAgICAgICBtYXhIZWlnaHQ9ezF9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtmaWVsZC5sYWJlbH1cbiAgICAgICAgb25DYW5jZWw9e29uQ2FuY2VsfVxuICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiB7IHNldFF1ZXJ5KHZhbHVlKTsgc2V0U2VsZWN0ZWQoMCkgfX1cbiAgICAgICAgb25TdWJtaXQ9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnY2hvaWNlJykge1xuICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoKSBhZHZhbmNlKG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgfSBlbHNlIGFkdmFuY2UoZmllbGQudHlwZSA9PT0gJ3BhdGgnICYmIG1hdGNoZXMubGVuZ3RoICYmICF2YWx1ZS5zdGFydHNXaXRoKCcvJykgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoJ34nKSA/IG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0gOiB2YWx1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKE1hdGgubWluKHNlbGVjdGVkKCkgKyAxLCBtYXRjaGVzLmxlbmd0aCAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoTWF0aC5tYXgoMCwgc2VsZWN0ZWQoKSAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFF1ZXJ5KG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICB7bWF0Y2hlcy5sZW5ndGggPiAwICYmIDxNZW51XG4gICAgICAgIGl0ZW1zPXttYXRjaGVzfVxuICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWQoKX1cbiAgICAgICAgb25TZWxlY3Q9e3NldFNlbGVjdGVkfVxuICAgICAgICBvblN1Ym1pdD17YWR2YW5jZX1cbiAgICAgICAgZm9jdXNlZD17ZmFsc2V9XG4gICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgIHJlbmRlckl0ZW09eyh2YWx1ZSwgeyBhY3RpdmUgfSkgPT4gPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2Ake2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9JHt2YWx1ZX1gfTwvdGV4dD59XG4gICAgICAvPn1cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcblxuY29uc3QgUEFMRVRURVMgPSB7XG4gIGRhcms6IHtcbiAgICBkZXNjOiAnbGlnaHQgdGV4dCBmb3IgZGFyayB0ZXJtaW5hbHMnLFxuICAgIGFjY2VudDogJyNhNzhiZmEnLFxuICAgIGZnOiAnI2U1ZTdlYicsXG4gICAgZmdTb2Z0OiAnIzljYTNhZicsXG4gICAgbXV0ZWQ6ICcjYjhjMGQwJyxcbiAgICBwYW5lbEJnOiAnIzFlMWUyMicsXG4gICAgc2VsZWN0Qmc6ICcjMzc0MTUxJyxcbiAgICByZWQ6ICcjZjg3MTcxJyxcbiAgICBncmVlbjogJyM0YWRlODAnLFxuICAgIGhpZ2hsaWdodDogJyNmZmZmZmYnLFxuICAgIHNoaWtpOiAnbm9yZCcsXG4gIH0sXG4gIGxpZ2h0OiB7XG4gICAgZGVzYzogJ2RhcmsgdGV4dCBmb3IgbGlnaHQgdGVybWluYWxzJyxcbiAgICBhY2NlbnQ6ICcjYTc4YmZhJyxcbiAgICBmZzogJyMxZjI0MzAnLFxuICAgIGZnU29mdDogJyM0YjU1NjMnLFxuICAgIG11dGVkOiAnIzRiNTU2MycsXG4gICAgcGFuZWxCZzogJyNlOWU5ZWUnLFxuICAgIHNlbGVjdEJnOiAnI2Q0ZDRkYycsXG4gICAgcmVkOiAnI2RjMjYyNicsXG4gICAgZ3JlZW46ICcjMTZhMzRhJyxcbiAgICBoaWdobGlnaHQ6ICcjMTExODI3JyxcbiAgICBzaGlraTogJ2dpdGh1Yi1saWdodCcsXG4gIH0sXG4gIG5vcmQ6IHtcbiAgICBkZXNjOiAnYXJjdGljIGJsdWVzIG9uIHBvbGFyIG5pZ2h0JyxcbiAgICBhY2NlbnQ6ICcjODhjMGQwJyxcbiAgICBmZzogJyNkOGRlZTknLFxuICAgIGZnU29mdDogJyNhYWIyYzQnLFxuICAgIG11dGVkOiAnI2I4YzBkMCcsXG4gICAgcGFuZWxCZzogJyMzYjQyNTInLFxuICAgIHNlbGVjdEJnOiAnIzQzNGM1ZScsXG4gICAgcmVkOiAnI2JmNjE2YScsXG4gICAgZ3JlZW46ICcjYTNiZThjJyxcbiAgICBoaWdobGlnaHQ6ICcjZWNlZmY0JyxcbiAgICBzaGlraTogJ25vcmQnLFxuICB9LFxufVxuXG5leHBvcnQgbGV0IERFRkFVTFRfQUNDRU5UID0gUEFMRVRURVMuZGFyay5hY2NlbnRcbmV4cG9ydCBsZXQgRkcgPSBQQUxFVFRFUy5kYXJrLmZnXG5leHBvcnQgbGV0IEZHX1NPRlQgPSBQQUxFVFRFUy5kYXJrLmZnU29mdFxuZXhwb3J0IGxldCBNVVRFRCA9IFBBTEVUVEVTLmRhcmsubXV0ZWRcbmV4cG9ydCBsZXQgUEFORUxfQkcgPSBQQUxFVFRFUy5kYXJrLnBhbmVsQmdcbmV4cG9ydCBsZXQgU0VMRUNUX0JHID0gUEFMRVRURVMuZGFyay5zZWxlY3RCZ1xuZXhwb3J0IGxldCBSRUQgPSBQQUxFVFRFUy5kYXJrLnJlZFxuZXhwb3J0IGxldCBHUkVFTiA9IFBBTEVUVEVTLmRhcmsuZ3JlZW5cbmV4cG9ydCBsZXQgSElHSExJR0hUID0gUEFMRVRURVMuZGFyay5oaWdobGlnaHRcblxubGV0IGN1cnJlbnRQYWxldHRlID0gJ2RhcmsnXG5sZXQgZXhwbGljaXRBY2NlbnQgPSBudWxsXG5cbmNvbnN0IFthY2NlbnRWYWx1ZSwgc2V0QWNjZW50VmFsdWVdID0gY3JlYXRlU2lnbmFsKERFRkFVTFRfQUNDRU5UKVxuXG5leHBvcnQgY29uc3QgYWNjZW50ID0gYWNjZW50VmFsdWVcblxuZXhwb3J0IGZ1bmN0aW9uIHNldEFjY2VudChjb2xvcikge1xuICBleHBsaWNpdEFjY2VudCA9IGNvbG9yIHx8IG51bGxcbiAgc2V0QWNjZW50VmFsdWUoZXhwbGljaXRBY2NlbnQgfHwgREVGQVVMVF9BQ0NFTlQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYWxldHRlKG5hbWUpIHtcbiAgY3VycmVudFBhbGV0dGUgPSBQQUxFVFRFU1tuYW1lXSA/IG5hbWUgOiAnZGFyaydcbiAgY29uc3QgcCA9IFBBTEVUVEVTW2N1cnJlbnRQYWxldHRlXVxuICBERUZBVUxUX0FDQ0VOVCA9IHAuYWNjZW50XG4gIEZHID0gcC5mZ1xuICBGR19TT0ZUID0gcC5mZ1NvZnRcbiAgTVVURUQgPSBwLm11dGVkXG4gIFBBTkVMX0JHID0gcC5wYW5lbEJnXG4gIFNFTEVDVF9CRyA9IHAuc2VsZWN0QmdcbiAgUkVEID0gcC5yZWRcbiAgR1JFRU4gPSBwLmdyZWVuXG4gIEhJR0hMSUdIVCA9IHAuaGlnaGxpZ2h0XG4gIHNldEFjY2VudFZhbHVlKGV4cGxpY2l0QWNjZW50IHx8IHAuYWNjZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZU5hbWUoKSB7XG4gIHJldHVybiBjdXJyZW50UGFsZXR0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZUxpc3QoKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhQQUxFVFRFUykubWFwKChba2V5LCBwXSkgPT4gKHsga2V5LCBkZXNjOiBwLmRlc2MgfSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGlraVRoZW1lKCkge1xuICByZXR1cm4gUEFMRVRURVNbY3VycmVudFBhbGV0dGVdLnNoaWtpXG59XG4iLCAiY29uc3QgZmlsbGVyID0gLyg/PCFbXlxccyw7OiE/XSkoPzp1aHx1bSkoPz0kfFtcXHMsOzouIT9dKShbIFxcdF0qWyw7Oi4hP10qKVsgXFx0XSovZ2l1XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkRpY3RhdGlvbih0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnNwbGl0KCdcXG4nKS5tYXAoY2xlYW5MaW5lKS5qb2luKCdcXG4nKS50cmltKClcbn1cblxuZnVuY3Rpb24gY2xlYW5MaW5lKGxpbmUpIHtcbiAgbGV0IHJlc3VsdCA9ICcnXG4gIGxldCBvZmZzZXQgPSAwXG4gIGxldCBjYXBpdGFsaXplID0gZmFsc2VcbiAgZm9yIChjb25zdCBtYXRjaCBvZiBsaW5lLm1hdGNoQWxsKGZpbGxlcikpIHtcbiAgICBsZXQgYmVmb3JlID0gbGluZS5zbGljZShvZmZzZXQsIG1hdGNoLmluZGV4KVxuICAgIGlmIChjYXBpdGFsaXplKSBiZWZvcmUgPSB1cHBlckZpcnN0KGJlZm9yZSlcbiAgICByZXN1bHQgKz0gYmVmb3JlXG4gICAgY29uc3QgYWZ0ZXIgPSBsaW5lLnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKVxuICAgIGNvbnN0IHRlcm1pbmFsID0gbWF0Y2hbMV0ubWF0Y2goL1suIT9dKy8pPy5bMF0gPz8gJydcbiAgICByZXN1bHQgPSByZXN1bHQudHJpbUVuZCgpXG4gICAgY29uc3Qgc2VudGVuY2VTdGFydCA9ICFyZXN1bHQgfHwgL1suIT9dJC8udGVzdChyZXN1bHQpXG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoLywkLywgJycpXG4gICAgaWYgKCFhZnRlcikgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1s7Ol0kLywgJycpXG4gICAgaWYgKHRlcm1pbmFsICYmICFzZW50ZW5jZVN0YXJ0KSByZXN1bHQgKz0gdGVybWluYWxcbiAgICBjYXBpdGFsaXplID0gc2VudGVuY2VTdGFydCB8fCBCb29sZWFuKHRlcm1pbmFsKVxuICAgIGlmIChyZXN1bHQgJiYgYWZ0ZXIpIHJlc3VsdCArPSAnICdcbiAgICBvZmZzZXQgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICB9XG4gIGNvbnN0IHRhaWwgPSBsaW5lLnNsaWNlKG9mZnNldClcbiAgcmV0dXJuIHJlc3VsdCArIChjYXBpdGFsaXplID8gdXBwZXJGaXJzdCh0YWlsKSA6IHRhaWwpXG59XG5cbmZ1bmN0aW9uIHVwcGVyRmlyc3QodGV4dCkge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC9eKFxccyopKFxccHtMbH0pKD8hXFxwe0x1fSkvdSwgKF8sIHNwYWNlLCBsZXR0ZXIpID0+IHNwYWNlICsgbGV0dGVyLnRvVXBwZXJDYXNlKCkpXG59XG5cbiIsICJpbXBvcnQgeyBjbGVhbkRpY3RhdGlvbiB9IGZyb20gJy4vZGljdGF0aW9uLXRleHQuanMnXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJ1xuXG5leHBvcnQgZnVuY3Rpb24gZGljdGF0aW9uSGVscGVyUGF0aCgpIHtcbiAgY29uc3QgYnVuZGxlZCA9IGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi9waWNvLWRpY3RhdGUnLCBpbXBvcnQubWV0YS51cmwpKVxuICByZXR1cm4gZXhpc3RzU3luYyhidW5kbGVkKSA/IGJ1bmRsZWQgOiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4uL2hlbHBlci8uYnVpbGQvcmVsZWFzZS9waWNvLWRpY3RhdGUnLCBpbXBvcnQubWV0YS51cmwpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGljdGF0aW9uKHsgb25TdGF0dXMgPSAoKSA9PiB7fSwgb25MZXZlbCA9ICgpID0+IHt9LCBvbkVycm9yID0gKCkgPT4ge30sIHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSwgYXJjaCA9IHByb2Nlc3MuYXJjaCwgbGF1bmNoID0gKCkgPT4gc3Bhd24oZGljdGF0aW9uSGVscGVyUGF0aCgpLCBbXSwgeyBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddIH0pLCBsb2FkaW5nVGltZW91dCA9IDYwMDAwMCwgcmVxdWVzdFRpbWVvdXQgPSA0NTAwMCB9ID0ge30pIHtcbiAgbGV0IGNoaWxkID0gbnVsbFxuICBsZXQgc3RhdHVzID0gJ2lkbGUnXG4gIGxldCBzZXF1ZW5jZSA9IDBcbiAgbGV0IGdlbmVyYXRpb24gPSAwXG4gIGxldCByZWFkeSA9IG51bGxcbiAgbGV0IGRpc3Bvc2VkID0gZmFsc2VcbiAgY29uc3QgcGVuZGluZyA9IG5ldyBNYXAoKVxuXG4gIGZ1bmN0aW9uIHNldFN0YXR1cyh2YWx1ZSkge1xuICAgIHN0YXR1cyA9IHZhbHVlXG4gICAgb25TdGF0dXModmFsdWUpXG4gIH1cblxuICBmdW5jdGlvbiByZXNldChlcnJvciA9IG5ldyBFcnJvcignZGljdGF0aW9uIGNhbmNlbGxlZCcpKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSBjaGlsZFxuICAgIGNoaWxkID0gbnVsbFxuICAgIHJlYWR5ID0gbnVsbFxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcGVuZGluZy52YWx1ZXMoKSkge1xuICAgICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKVxuICAgICAgZW50cnkucmVqZWN0KGVycm9yKVxuICAgIH1cbiAgICBwZW5kaW5nLmNsZWFyKClcbiAgICBwcmV2aW91cz8uc3RkaW4uZW5kKClcbiAgICBwcmV2aW91cz8ua2lsbCgpXG4gICAgc2V0U3RhdHVzKCdpZGxlJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHdhaXRGb3IoaWQsIHRpbWVvdXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHJlc2V0KG5ldyBFcnJvcignZGljdGF0aW9uIHRpbWVkIG91dCcpKSwgdGltZW91dClcbiAgICAgIHBlbmRpbmcuc2V0KGlkLCB7IHJlc29sdmUsIHJlamVjdCwgdGltZXIgfSlcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0dGxlKGlkLCBtZXNzYWdlKSB7XG4gICAgY29uc3QgZW50cnkgPSBwZW5kaW5nLmdldChpZClcbiAgICBpZiAoIWVudHJ5KSByZXR1cm5cbiAgICBwZW5kaW5nLmRlbGV0ZShpZClcbiAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZXIpXG4gICAgaWYgKG1lc3NhZ2UuZXJyb3IpIGVudHJ5LnJlamVjdChuZXcgRXJyb3IobWVzc2FnZS5lcnJvcikpXG4gICAgZWxzZSBlbnRyeS5yZXNvbHZlKG1lc3NhZ2UpXG4gIH1cblxuICBmdW5jdGlvbiBsb2FkKCkge1xuICAgIGlmIChyZWFkeSkgcmV0dXJuIHJlYWR5XG4gICAgaWYgKHBsYXRmb3JtICE9PSAnZGFyd2luJyB8fCBhcmNoICE9PSAnYXJtNjQnKSB0aHJvdyBuZXcgRXJyb3IoJ2RpY3RhdGlvbiByZXF1aXJlcyBhbiBBcHBsZSBTaWxpY29uIE1hYycpXG4gICAgY29uc3QgaW5zdGFuY2UgPSBsYXVuY2goKVxuICAgIGNoaWxkID0gaW5zdGFuY2VcbiAgICByZWFkeSA9IHdhaXRGb3IoJ3JlYWR5JywgbG9hZGluZ1RpbWVvdXQpXG4gICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgaW5zdGFuY2Uuc3Rkb3V0Lm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgIT09IGluc3RhbmNlKSByZXR1cm5cbiAgICAgIGJ1ZmZlciArPSBjaHVuay50b1N0cmluZygpXG4gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+IDEwMjQgKiAxMDI0KSByZXR1cm4gcmVzZXQobmV3IEVycm9yKCdpbnZhbGlkIGRpY3RhdGlvbiBoZWxwZXIgb3V0cHV0JykpXG4gICAgICBsZXQgYXRcbiAgICAgIHdoaWxlICgoYXQgPSBidWZmZXIuaW5kZXhPZignXFxuJykpID49IDApIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGJ1ZmZlci5zbGljZSgwLCBhdClcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKGF0ICsgMSlcbiAgICAgICAgbGV0IG1lc3NhZ2VcbiAgICAgICAgdHJ5IHsgbWVzc2FnZSA9IEpTT04ucGFyc2UobGluZSkgfSBjYXRjaCB7IGNvbnRpbnVlIH1cbiAgICAgICAgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSAnbGV2ZWwnKSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ3JlY29yZGluZycgJiYgTnVtYmVyLmlzRmluaXRlKG1lc3NhZ2UubGV2ZWwpKSBvbkxldmVsKE1hdGgubWF4KDAsIE1hdGgubWluKDEsIG1lc3NhZ2UubGV2ZWwpKSlcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ3JlYWR5Jykgc2V0dGxlKCdyZWFkeScsIG1lc3NhZ2UpXG4gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZS5tZXNzYWdlIHx8ICdkaWN0YXRpb24gZmFpbGVkJylcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBwZW5kaW5nLnNpemUgPiAwXG4gICAgICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICAgICAgaWYgKCFhY3RpdmUpIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmlkICE9IG51bGwpIHNldHRsZShtZXNzYWdlLmlkLCBtZXNzYWdlKVxuICAgICAgfVxuICAgIH0pXG4gICAgaW5zdGFuY2Uuc3RkZXJyLm9uKCdkYXRhJywgKCkgPT4ge30pXG4gICAgY29uc3QgZmFpbGVkID0gKGVycm9yKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgIT09IGluc3RhbmNlKSByZXR1cm5cbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHBlbmRpbmcuc2l6ZSA+IDBcbiAgICAgIGNvbnN0IHJlY29yZGluZyA9IHN0YXR1cyA9PT0gJ3JlY29yZGluZydcbiAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgaWYgKCFhY3RpdmUgJiYgcmVjb3JkaW5nKSBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICAgIGluc3RhbmNlLm9uKCdlcnJvcicsIChlcnJvcikgPT4gZmFpbGVkKG5ldyBFcnJvcihgZGljdGF0aW9uIGhlbHBlciB1bmF2YWlsYWJsZTogJHtlcnJvci5tZXNzYWdlfWApKSlcbiAgICBpbnN0YW5jZS5zdGRpbi5vbignZXJyb3InLCBmYWlsZWQpXG4gICAgaW5zdGFuY2Uub24oJ2V4aXQnLCAoKSA9PiBmYWlsZWQobmV3IEVycm9yKCdkaWN0YXRpb24gaGVscGVyIGV4aXRlZCcpKSlcbiAgICByZXR1cm4gcmVhZHlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcXVlc3Qob3ApIHtcbiAgICBjb25zdCBpZCA9ICsrc2VxdWVuY2VcbiAgICBjb25zdCByZXN1bHQgPSB3YWl0Rm9yKGlkLCByZXF1ZXN0VGltZW91dClcbiAgICB0cnkgeyBjaGlsZC5zdGRpbi53cml0ZShgJHtKU09OLnN0cmluZ2lmeSh7IGlkLCBvcCB9KX1cXG5gKSB9IGNhdGNoIChlcnJvcikgeyByZXNldChlcnJvcikgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHByZWxvYWQoKSB7XG4gICAgaWYgKGRpc3Bvc2VkKSByZXR1cm5cbiAgICB0cnkgeyBhd2FpdCBsb2FkKCkgfSBjYXRjaCB7fVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgaWYgKGRpc3Bvc2VkIHx8IHN0YXR1cyAhPT0gJ2lkbGUnKSByZXR1cm5cbiAgICBjb25zdCB0b2tlbiA9ICsrZ2VuZXJhdGlvblxuICAgIHNldFN0YXR1cygnbG9hZGluZycpXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGxvYWQoKVxuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm5cbiAgICAgIHNldFN0YXR1cygnc3RhcnRpbmcnKVxuICAgICAgYXdhaXQgcmVxdWVzdCgnc3RhcnQnKVxuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSBzZXRTdGF0dXMoJ3JlY29yZGluZycpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuXG4gICAgICByZXNldChlcnJvcilcbiAgICAgIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzdG9wKCkge1xuICAgIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHRva2VuID0gZ2VuZXJhdGlvblxuICAgIHNldFN0YXR1cygndHJhbnNjcmliaW5nJylcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxdWVzdCgnc3RvcCcpXG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVybiBudWxsXG4gICAgICBzZXRTdGF0dXMoJ2lkbGUnKVxuICAgICAgcmV0dXJuIGNsZWFuRGljdGF0aW9uKHJlc3VsdC50ZXh0IHx8ICcnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHtcbiAgICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICAgIG9uRXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGNvbnN0IHRva2VuID0gKytnZW5lcmF0aW9uXG4gICAgaWYgKHN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm5cbiAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIHJlc2V0KClcbiAgICBzZXRTdGF0dXMoJ2NhbmNlbGxpbmcnKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCByZXF1ZXN0KCdjYW5jZWwnKVxuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSBzZXRTdGF0dXMoJ2lkbGUnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gPT09IGdlbmVyYXRpb24pIHJlc2V0KGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3Bvc2UoKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gICAgKytnZW5lcmF0aW9uXG4gICAgcmVzZXQoKVxuICB9XG5cbiAgcmV0dXJuIHsgcHJlbG9hZCwgc3RhcnQsIHN0b3AsIGNhbmNlbCwgZGlzcG9zZSwgZ2V0IHN0YXR1cygpIHsgcmV0dXJuIHN0YXR1cyB9IH1cbn1cbiIsICJpbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB7IG1rZHRlbXAsIHdyaXRlRmlsZSwgcm0gfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgcm1TeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJ1xuXG5jb25zdCBleGVjdXRlID0gcHJvbWlzaWZ5KGV4ZWNGaWxlKVxuY29uc3QgZGlyZWN0b3JpZXMgPSBuZXcgU2V0KClcbnByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgZm9yIChjb25zdCBkaXIgb2YgZGlyZWN0b3JpZXMpIHJtU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxufSlcblxuY29uc3QgbWFjU2NyaXB0ID0gYE9iakMuaW1wb3J0KCdBcHBLaXQnKTsgT2JqQy5pbXBvcnQoJ0ZvdW5kYXRpb24nKTtcbmNvbnN0IHBhc3RlYm9hcmQgPSAkLk5TUGFzdGVib2FyZC5nZW5lcmFsUGFzdGVib2FyZDtcbmNvbnN0IGZpbGVzID0gcGFzdGVib2FyZC5wcm9wZXJ0eUxpc3RGb3JUeXBlKCdOU0ZpbGVuYW1lc1Bib2FyZFR5cGUnKTtcbmxldCBpbWFnZSA9IG51bGw7XG5pZiAoIWZpbGVzLmlzTmlsKCkgJiYgZmlsZXMuY291bnQgPiAwKSB7XG4gIGNvbnN0IHBhdGggPSBPYmpDLnVud3JhcChmaWxlcy5vYmplY3RBdEluZGV4KDApKTtcbiAgaWYgKC9cXFxcLihwbmd8anBlP2d8Z2lmfHdlYnApJC9pLnRlc3QocGF0aCkpIGltYWdlID0gJC5OU0ltYWdlLmFsbG9jLmluaXRXaXRoQ29udGVudHNPZkZpbGUocGF0aCk7XG59XG5pZiAoIWltYWdlIHx8IGltYWdlLmlzTmlsKCkpIGltYWdlID0gJC5OU0ltYWdlLmFsbG9jLmluaXRXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKTtcbmxldCBkYXRhID0gbnVsbDtcbmlmICghaW1hZ2UuaXNOaWwoKSkge1xuICBjb25zdCBiaXRtYXAgPSAkLk5TQml0bWFwSW1hZ2VSZXAuaW1hZ2VSZXBXaXRoRGF0YShpbWFnZS5USUZGUmVwcmVzZW50YXRpb24pO1xuICBkYXRhID0gYml0bWFwLnJlcHJlc2VudGF0aW9uVXNpbmdUeXBlUHJvcGVydGllcygkLk5TQml0bWFwSW1hZ2VGaWxlVHlwZVBORywgJCh7fSkpO1xufVxuZGF0YSA/IE9iakMudW53cmFwKGRhdGEuYmFzZTY0RW5jb2RlZFN0cmluZ1dpdGhPcHRpb25zKDApKSA6ICcnYFxuXG5jb25zdCB3aW5kb3dzU2NyaXB0ID0gYEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgU3lzdGVtLldpbmRvd3MuRm9ybXM7IEFkZC1UeXBlIC1Bc3NlbWJseU5hbWUgU3lzdGVtLkRyYXdpbmc7XG5pZiAoW1N5c3RlbS5XaW5kb3dzLkZvcm1zLkNsaXBib2FyZF06OkNvbnRhaW5zSW1hZ2UoKSkge1xuICAkaW1hZ2UgPSBbU3lzdGVtLldpbmRvd3MuRm9ybXMuQ2xpcGJvYXJkXTo6R2V0SW1hZ2UoKTtcbiAgJHN0cmVhbSA9IE5ldy1PYmplY3QgU3lzdGVtLklPLk1lbW9yeVN0cmVhbTtcbiAgdHJ5IHsgJGltYWdlLlNhdmUoJHN0cmVhbSwgW1N5c3RlbS5EcmF3aW5nLkltYWdpbmcuSW1hZ2VGb3JtYXRdOjpQbmcpOyBbQ29udmVydF06OlRvQmFzZTY0U3RyaW5nKCRzdHJlYW0uVG9BcnJheSgpKSB9XG4gIGZpbmFsbHkgeyAkc3RyZWFtLkRpc3Bvc2UoKTsgJGltYWdlLkRpc3Bvc2UoKSB9XG59YFxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZENsaXBib2FyZEltYWdlKHsgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtLCBlbnYgPSBwcm9jZXNzLmVudiwgcnVuID0gZXhlY3V0ZSB9ID0ge30pIHtcbiAgaWYgKGVudi5TU0hfQ09OTkVDVElPTiB8fCBlbnYuU1NIX1RUWSkgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgaW1hZ2VzIGFyZSB1bmF2YWlsYWJsZSBvdmVyIFNTSCcpXG4gIGNvbnN0IG9wdGlvbnMgPSB7IGVuY29kaW5nOiAnYnVmZmVyJywgdGltZW91dDogMTAwMDAsIG1heEJ1ZmZlcjogMzIgKiAxMDI0ICogMTAyNCB9XG4gIGxldCBkYXRhXG4gIHRyeSB7XG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgICAgY29uc3QgeyBzdGRvdXQgfSA9IGF3YWl0IHJ1bignb3Nhc2NyaXB0JywgWyctbCcsICdKYXZhU2NyaXB0JywgJy1lJywgbWFjU2NyaXB0XSwgb3B0aW9ucylcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShzdGRvdXQudG9TdHJpbmcoKS50cmltKCksICdiYXNlNjQnKVxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oJ3Bvd2Vyc2hlbGwuZXhlJywgWyctTm9Qcm9maWxlJywgJy1Ob25JbnRlcmFjdGl2ZScsICctU1RBJywgJy1Db21tYW5kJywgd2luZG93c1NjcmlwdF0sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpLCAnYmFzZTY0JylcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnbGludXgnKSB7XG4gICAgICBjb25zdCB3YXlsYW5kID0gQm9vbGVhbihlbnYuV0FZTEFORF9ESVNQTEFZKVxuICAgICAgY29uc3QgY29tbWFuZCA9IHdheWxhbmQgPyAnd2wtcGFzdGUnIDogJ3hjbGlwJ1xuICAgICAgY29uc3QgeyBzdGRvdXQ6IHR5cGVzIH0gPSBhd2FpdCBydW4oY29tbWFuZCwgd2F5bGFuZCA/IFsnLS1saXN0LXR5cGVzJ10gOiBbJy1zZWxlY3Rpb24nLCAnY2xpcGJvYXJkJywgJy10JywgJ1RBUkdFVFMnLCAnLW8nXSwgb3B0aW9ucylcbiAgICAgIGlmICghdHlwZXMudG9TdHJpbmcoKS5zcGxpdCgvXFxzKy8pLmluY2x1ZGVzKCdpbWFnZS9wbmcnKSkgcmV0dXJuIG51bGxcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oY29tbWFuZCwgd2F5bGFuZCA/IFsnLS10eXBlJywgJ2ltYWdlL3BuZycsICctLW5vLW5ld2xpbmUnXSA6IFsnLXNlbGVjdGlvbicsICdjbGlwYm9hcmQnLCAnLXQnLCAnaW1hZ2UvcG5nJywgJy1vJ10sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCBpbWFnZXMgYXJlIHVuc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0nKVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VOT0VOVCcpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIHJlYWRlciB1bmF2YWlsYWJsZTogaW5zdGFsbCAnICsgKGVudi5XQVlMQU5EX0RJU1BMQVkgPyAnd2wtY2xpcGJvYXJkJyA6IHBsYXRmb3JtID09PSAnbGludXgnID8gJ3hjbGlwJyA6ICd0aGUgc3lzdGVtIGNsaXBib2FyZCB0b29scycpKVxuICAgIHRocm93IGVycm9yXG4gIH1cbiAgaWYgKCFkYXRhLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgaWYgKCFkYXRhLnN1YmFycmF5KDAsIDgpLmVxdWFscyhCdWZmZXIuZnJvbShbMTM3LCA4MCwgNzgsIDcxLCAxMywgMTAsIDI2LCAxMF0pKSkgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgZGlkIG5vdCByZXR1cm4gYSBQTkcgaW1hZ2UnKVxuICBjb25zdCBkaXIgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksICdwaWNvLWNsaXBib2FyZC0nKSlcbiAgZGlyZWN0b3JpZXMuYWRkKGRpcilcbiAgY29uc3QgZGlzcG9zZSA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBybShkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuICAgIGRpcmVjdG9yaWVzLmRlbGV0ZShkaXIpXG4gIH1cbiAgY29uc3QgcGF0aCA9IGpvaW4oZGlyLCAnY2xpcGJvYXJkLnBuZycpXG4gIHRyeSB7XG4gICAgYXdhaXQgd3JpdGVGaWxlKHBhdGgsIGRhdGEsIHsgbW9kZTogMG82MDAgfSlcbiAgICByZXR1cm4geyBwYXRoLCBkaXNwb3NlIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhd2FpdCBkaXNwb3NlKClcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNsaXBib2FyZElucHV0KHsgcmVhZEltYWdlLCBnZXREcmFmdCwgYXR0YWNoSW1hZ2UsIHNldElucHV0LCBvbkVycm9yIH0pIHtcbiAgbGV0IHBlbmRpbmcgPSBmYWxzZVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gcGFzdGVJbWFnZSgpIHtcbiAgICBpZiAocGVuZGluZykgcmV0dXJuXG4gICAgcGVuZGluZyA9IHRydWVcbiAgICBjb25zdCB0YXJnZXQgPSBnZXREcmFmdCgpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgcmVhZEltYWdlKClcbiAgICAgIGlmICghaW1hZ2UpIHtcbiAgICAgICAgb25FcnJvcignTm8gaW1hZ2Ugb24gdGhlIGNsaXBib2FyZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudCA9IGdldERyYWZ0KClcbiAgICAgIGlmIChjdXJyZW50LnJldmlzaW9uICE9PSB0YXJnZXQucmV2aXNpb24gfHwgY3VycmVudC5zZXNzaW9uICE9PSB0YXJnZXQuc2Vzc2lvbiB8fCBjdXJyZW50LnZhbHVlICE9PSB0YXJnZXQudmFsdWUgfHwgY3VycmVudC5jdXJzb3IgIT09IHRhcmdldC5jdXJzb3IpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIG9uRXJyb3IoJ0NsaXBib2FyZCBpbWFnZSBub3QgYXR0YWNoZWQ6IHRoZSBkcmFmdCBjaGFuZ2VkJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBsYWJlbCA9IGF0dGFjaEltYWdlKGltYWdlLnBhdGgpXG4gICAgICBpZiAoIWxhYmVsKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIGF0dGFjaG1lbnQgZmFpbGVkJylcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldC52YWx1ZS5zbGljZSgwLCB0YXJnZXQuY3Vyc29yKVxuICAgICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXQudmFsdWUuc2xpY2UodGFyZ2V0LmN1cnNvcilcbiAgICAgIHNldElucHV0KGJlZm9yZSArIGxhYmVsICsgYWZ0ZXIsIGJlZm9yZS5sZW5ndGggKyBsYWJlbC5sZW5ndGgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoYENsaXBib2FyZCBwYXN0ZSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwZW5kaW5nID0gZmFsc2VcbiAgICB9XG4gIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlRGljdGF0aW9uSW5wdXQoeyBkaWN0YXRpb24sIGdldElucHV0LCBzZXRJbnB1dCB9KSB7XG4gIGxldCBkcmFmdCA9IG51bGxcbiAgbGV0IGdlbmVyYXRpb24gPSAwXG5cbiAgZnVuY3Rpb24gc3RhcnQoeyB2YWx1ZSwgY3Vyc29yIH0pIHtcbiAgICBpZiAoZGljdGF0aW9uLnN0YXR1cyAhPT0gJ2lkbGUnKSByZXR1cm5cbiAgICBkcmFmdCA9IHsgdmFsdWUsIGN1cnNvciB9XG4gICAgKytnZW5lcmF0aW9uXG4gICAgdm9pZCBkaWN0YXRpb24uc3RhcnQoKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBjb25zdCB0b2tlbiA9IGdlbmVyYXRpb25cbiAgICBjb25zdCB0YXJnZXQgPSBkcmFmdFxuICAgIGNvbnN0IHRleHQgPSBhd2FpdCBkaWN0YXRpb24uc3RvcCgpXG4gICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uIHx8ICF0YXJnZXQgfHwgdGV4dCA9PSBudWxsIHx8IGdldElucHV0KCkgIT09IHRhcmdldC52YWx1ZSkgcmV0dXJuXG4gICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgY29uc3QgbGVhZCA9IHRleHQgJiYgYmVmb3JlICYmICEvXFxzJC8udGVzdChiZWZvcmUpICYmICEvXlxccy8udGVzdCh0ZXh0KSA/ICcgJyA6ICcnXG4gICAgY29uc3QgYWZ0ZXIgPSB0YXJnZXQudmFsdWUuc2xpY2UodGFyZ2V0LmN1cnNvcilcbiAgICBjb25zdCB0cmFpbCA9IHRleHQgJiYgYWZ0ZXIgJiYgIS9cXHMkLy50ZXN0KHRleHQpICYmICEvXltcXHMuLDs6IT9dLy50ZXN0KGFmdGVyKSA/ICcgJyA6ICcnXG4gICAgc2V0SW5wdXQoYmVmb3JlICsgbGVhZCArIHRleHQgKyB0cmFpbCArIGFmdGVyKVxuICAgIGRyYWZ0ID0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICsrZ2VuZXJhdGlvblxuICAgIGRyYWZ0ID0gbnVsbFxuICAgIHZvaWQgZGljdGF0aW9uLmNhbmNlbCgpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGUoZXZlbnQpIHtcbiAgICBpZiAoZGljdGF0aW9uLnN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm4gZmFsc2VcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJyB8fCAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdjJykpIGNhbmNlbCgpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJyAmJiAhZXZlbnQuc2hpZnQgJiYgIWV2ZW50Lm1ldGEgJiYgZGljdGF0aW9uLnN0YXR1cyA9PT0gJ3JlY29yZGluZycpIHZvaWQgc3RvcCgpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiB7IHN0YXJ0LCBzdG9wLCBjYW5jZWwsIGhhbmRsZSB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCh7IGNhcHR1cmVSZWdpb24sIGdldERyYWZ0LCBhdHRhY2hJbWFnZSwgc2V0SW5wdXQsIG9uRXJyb3IsIG9uU3RhdHVzID0gKCkgPT4ge30gfSkge1xuICBsZXQgcGVuZGluZyA9IGZhbHNlXG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBjYXB0dXJlSW1hZ2UoKSB7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVyblxuICAgIHBlbmRpbmcgPSB0cnVlXG4gICAgb25TdGF0dXMoJ2NhcHR1cmluZycpXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RHJhZnQoKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IGNhcHR1cmVSZWdpb24oKVxuICAgICAgaWYgKCFpbWFnZSkgcmV0dXJuXG4gICAgICBjb25zdCBjdXJyZW50ID0gZ2V0RHJhZnQoKVxuICAgICAgaWYgKGN1cnJlbnQucmV2aXNpb24gIT09IHRhcmdldC5yZXZpc2lvbiB8fCBjdXJyZW50LnNlc3Npb24gIT09IHRhcmdldC5zZXNzaW9uIHx8IGN1cnJlbnQudmFsdWUgIT09IHRhcmdldC52YWx1ZSB8fCBjdXJyZW50LmN1cnNvciAhPT0gdGFyZ2V0LmN1cnNvcikge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgb25FcnJvcignU2NyZWVuIGNhcHR1cmUgbm90IGF0dGFjaGVkOiB0aGUgZHJhZnQgY2hhbmdlZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWwgPSBhdHRhY2hJbWFnZShpbWFnZS5wYXRoKVxuICAgICAgaWYgKCFsYWJlbCkge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBhdHRhY2htZW50IGZhaWxlZCcpXG4gICAgICB9XG4gICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgICBzZXRJbnB1dChiZWZvcmUgKyBsYWJlbCArIGFmdGVyLCBiZWZvcmUubGVuZ3RoICsgbGFiZWwubGVuZ3RoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGBTY3JlZW4gY2FwdHVyZSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwZW5kaW5nID0gZmFsc2VcbiAgICAgIG9uU3RhdHVzKCdpZGxlJylcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IG1rZHRlbXAsIHVubGluayB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJ1xuXG5sZXQgY2FwdHVyZURpciA9IG51bGxcblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ2FwdHVyZURpcigpIHtcbiAgY2FwdHVyZURpciA/Pz0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCAncGljby1jYXB0dXJlLScpKVxuICByZXR1cm4gY2FwdHVyZURpclxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FwdHVyZVJlZ2lvbigpIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICdkYXJ3aW4nKSB0aHJvdyBuZXcgRXJyb3IoJ3NjcmVlbiBjYXB0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIG9uIG1hY09TJylcbiAgY29uc3QgZmlsZSA9IGpvaW4oYXdhaXQgZW5zdXJlQ2FwdHVyZURpcigpLCBgY2FwdHVyZS0ke0RhdGUubm93KCl9LnBuZ2ApXG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBleGVjRmlsZSgnc2NyZWVuY2FwdHVyZScsIFsnLWknLCAnLXgnLCBmaWxlXSwgKGVycm9yKSA9PiB7XG4gICAgICBpZiAoIWVycm9yIHx8ICFleGlzdHNTeW5jKGZpbGUpKSByZXNvbHZlKClcbiAgICAgIGVsc2UgcmVqZWN0KGVycm9yKVxuICAgIH0pXG4gIH0pXG4gIGlmICghZXhpc3RzU3luYyhmaWxlKSkgcmV0dXJuIG51bGxcbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBmaWxlLFxuICAgIGRpc3Bvc2U6ICgpID0+IHVubGluayhmaWxlKS5jYXRjaCgoKSA9PiB7fSksXG4gIH1cbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tcG9zZXJGaWxlcygpIHtcbiAgbGV0IHRleHQgPSAnJ1xuICBsZXQgcmVmZXJlbmNlcyA9IFtdXG5cbiAgZnVuY3Rpb24gdXBkYXRlKHZhbHVlLCBhdHRhY2htZW50cykge1xuICAgIGxldCBzdGFydCA9IDBcbiAgICB3aGlsZSAoc3RhcnQgPCB0ZXh0Lmxlbmd0aCAmJiBzdGFydCA8IHZhbHVlLmxlbmd0aCAmJiB0ZXh0W3N0YXJ0XSA9PT0gdmFsdWVbc3RhcnRdKSBzdGFydCsrXG4gICAgbGV0IGVuZCA9IHRleHQubGVuZ3RoXG4gICAgbGV0IG5leHRFbmQgPSB2YWx1ZS5sZW5ndGhcbiAgICB3aGlsZSAoZW5kID4gc3RhcnQgJiYgbmV4dEVuZCA+IHN0YXJ0ICYmIHRleHRbZW5kIC0gMV0gPT09IHZhbHVlW25leHRFbmQgLSAxXSkge1xuICAgICAgZW5kLS1cbiAgICAgIG5leHRFbmQtLVxuICAgIH1cbiAgICBjb25zdCBkZWx0YSA9IG5leHRFbmQgLSBlbmRcbiAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlcy5mbGF0TWFwKChyZWZlcmVuY2UpID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2UuZW5kIDw9IHN0YXJ0KSByZXR1cm4gW3JlZmVyZW5jZV1cbiAgICAgIGlmIChyZWZlcmVuY2Uuc3RhcnQgPj0gZW5kKSByZXR1cm4gW3sgLi4ucmVmZXJlbmNlLCBzdGFydDogcmVmZXJlbmNlLnN0YXJ0ICsgZGVsdGEsIGVuZDogcmVmZXJlbmNlLmVuZCArIGRlbHRhIH1dXG4gICAgICByZXR1cm4gW11cbiAgICB9KVxuICAgIHRleHQgPSB2YWx1ZVxuICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4udGV4dC5tYXRjaEFsbCgvXFxbRmlsZSAjXFxkK1xcXS9nKV0ucmV2ZXJzZSgpXG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgICBjb25zdCBhdHRhY2htZW50ID0gYXR0YWNobWVudHMuZ2V0KG1hdGNoWzBdKVxuICAgICAgaWYgKGF0dGFjaG1lbnQ/LmtpbmQgIT09ICdmaWxlJykgY29udGludWVcbiAgICAgIGNvbnN0IHBhdGggPSBhdHRhY2htZW50LnBhdGhcbiAgICAgIGNvbnN0IG9mZnNldCA9IHBhdGgubGVuZ3RoIC0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICByZWZlcmVuY2VzID0gcmVmZXJlbmNlcy5tYXAoKHJlZmVyZW5jZSkgPT4gcmVmZXJlbmNlLnN0YXJ0ID49IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgID8geyAuLi5yZWZlcmVuY2UsIHN0YXJ0OiByZWZlcmVuY2Uuc3RhcnQgKyBvZmZzZXQsIGVuZDogcmVmZXJlbmNlLmVuZCArIG9mZnNldCB9XG4gICAgICAgIDogcmVmZXJlbmNlKVxuICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgcGF0aCArIHRleHQuc2xpY2UobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpXG4gICAgICByZWZlcmVuY2VzLnB1c2goeyBzdGFydDogbWF0Y2guaW5kZXgsIGVuZDogbWF0Y2guaW5kZXggKyBwYXRoLmxlbmd0aCwgcGxhY2Vob2xkZXI6IG1hdGNoWzBdIH0pXG4gICAgfVxuICAgIHJlZmVyZW5jZXMuc29ydCgoYSwgYikgPT4gYS5zdGFydCAtIGIuc3RhcnQpXG4gICAgcmV0dXJuIHRleHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRlbnQoKSB7XG4gICAgbGV0IHZhbHVlID0gdGV4dFxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIFsuLi5yZWZlcmVuY2VzXS5yZXZlcnNlKCkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgcmVmZXJlbmNlLnN0YXJ0KSArIHJlZmVyZW5jZS5wbGFjZWhvbGRlciArIHZhbHVlLnNsaWNlKHJlZmVyZW5jZS5lbmQpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIHsgdXBkYXRlLCBjb250ZW50IH1cbn1cbiIsICJjb25zdCBiYXJzID0gJ1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OCdcbmNvbnN0IHdpZHRoID0gMTZcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZExldmVsKGxldmVscywgbGV2ZWwpIHtcbiAgcmV0dXJuIFsuLi5sZXZlbHMuc2xpY2UoMSAtIHdpZHRoKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbGV2ZWwpKV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3RhdGlvbkluZGljYXRvcihzdGF0dXMsIGxldmVscykge1xuICBpZiAoc3RhdHVzID09PSAnaWRsZScpIHJldHVybiAnJ1xuICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIGAgJHtzdGF0dXN9IGBcbiAgY29uc3Qgc2FtcGxlcyA9IFsuLi5BcnJheShNYXRoLm1heCgwLCB3aWR0aCAtIGxldmVscy5sZW5ndGgpKS5maWxsKDApLCAuLi5sZXZlbHMuc2xpY2UoLXdpZHRoKV1cbiAgcmV0dXJuIGAgJHtzYW1wbGVzLm1hcCgobGV2ZWwpID0+IGJhcnNbTWF0aC5yb3VuZChsZXZlbCAqIChiYXJzLmxlbmd0aCAtIDEpKV0pLmpvaW4oJycpfSByZWNvcmRpbmcgYFxufVxuIiwgImltcG9ydCB7IGNvZGVUb0FOU0kgfSBmcm9tICdAc2hpa2lqcy9jbGknXG5pbXBvcnQgeyBjcmVhdGVTaWduYWwgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBzaGlraVRoZW1lIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgTEFOR1MgPSB7XG4gIGpzOiAnanMnLCBtanM6ICdqcycsIGNqczogJ2pzJywganN4OiAnanN4JywgdHM6ICd0cycsIHRzeDogJ3RzeCcsXG4gIGpzb246ICdqc29uJywganNvbmw6ICdqc29uJywgbWQ6ICdtZCcsIHB5OiAncHl0aG9uJywgcmI6ICdydWJ5JywgZ286ICdnbycsXG4gIHJzOiAncnVzdCcsIGM6ICdjJywgaDogJ2MnLCBjcHA6ICdjcHAnLCBqYXZhOiAnamF2YScsIGNzczogJ2NzcycsXG4gIGh0bWw6ICdodG1sJywgdnVlOiAndnVlJywgc2g6ICdiYXNoJywgYmFzaDogJ2Jhc2gnLCB6c2g6ICdiYXNoJyxcbiAgeW1sOiAneWFtbCcsIHlhbWw6ICd5YW1sJywgdG9tbDogJ3RvbWwnLCBzcWw6ICdzcWwnLCBzdmVsdGU6ICdzdmVsdGUnLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFuZ0ZvclBhdGgocGF0aCkge1xuICBjb25zdCBleHQgPSBTdHJpbmcocGF0aCkuc3BsaXQoJy4nKS5wb3AoKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiBMQU5HU1tleHRdIHx8ICd0eHQnXG59XG5cbmNvbnN0IGNhY2hlID0gbmV3IE1hcCgpXG5jb25zdCBwZW5kaW5nID0gbmV3IFNldCgpXG5jb25zdCBmYWlsZWQgPSBuZXcgU2V0KClcbmNvbnN0IFt2ZXJzaW9uLCBzZXRWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgwKVxuXG5leHBvcnQgY29uc3QgaGlnaGxpZ2h0VmVyc2lvbiA9IHZlcnNpb25cblxuZXhwb3J0IGZ1bmN0aW9uIGhpZ2hsaWdodChjb2RlLCBsYW5nKSB7XG4gIGNvbnN0IHNhZmVMYW5nID0gbGFuZyAmJiAhZmFpbGVkLmhhcyhsYW5nKSA/IGxhbmcgOiAndHh0J1xuICBjb25zdCB0aGVtZSA9IHNoaWtpVGhlbWUoKVxuICByZXR1cm4gY29kZVxuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt0aGVtZX1cXG4ke3NhZmVMYW5nfVxcbiR7bGluZX1gXG4gICAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHJldHVybiBjYWNoZS5nZXQoa2V5KVxuICAgICAgd2FybShsaW5lLCBzYWZlTGFuZywgdGhlbWUsIGtleSlcbiAgICAgIHJldHVybiBsaW5lXG4gICAgfSlcbiAgICAuam9pbignXFxuJylcbn1cblxuZnVuY3Rpb24gd2FybShsaW5lLCBsYW5nLCB0aGVtZSwga2V5KSB7XG4gIGlmIChwZW5kaW5nLmhhcyhrZXkpKSByZXR1cm5cbiAgcGVuZGluZy5hZGQoa2V5KVxuICBjb2RlVG9BTlNJKGxpbmUsIGxhbmcsIHRoZW1lKVxuICAgIC50aGVuKChhbnNpKSA9PiBjYWNoZS5zZXQoa2V5LCBhbnNpLnJlcGxhY2UoL1xcbiQvLCAnJykpKVxuICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICBmYWlsZWQuYWRkKGxhbmcpXG4gICAgICBjYWNoZS5zZXQoa2V5LCBsaW5lKVxuICAgIH0pXG4gICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgcGVuZGluZy5kZWxldGUoa2V5KVxuICAgICAgc2V0VmVyc2lvbigodikgPT4gdiArIDEpXG4gICAgfSlcbn1cbiIsICJjb25zdCBMRVZFTFMgPSBbJyAnLCAnXHUyNThGJywgJ1x1MjU4RScsICdcdTI1OEQnLCAnXHUyNThDJywgJ1x1MjU4QicsICdcdTI1OEEnLCAnXHUyNTg5JywgJ1x1MjU4OCddXG5cbmV4cG9ydCBmdW5jdGlvbiBjb250ZXh0QmFyKHBlcmNlbnQsIHdpZHRoID0gNCkge1xuICBjb25zdCBlaWdodGhzID0gTWF0aC5yb3VuZChNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIHBlcmNlbnQpKSAqIHdpZHRoICogOCAvIDEwMClcbiAgY29uc3QgZnVsbCA9IE1hdGguZmxvb3IoZWlnaHRocyAvIDgpXG4gIGNvbnN0IHBhcnRpYWwgPSBlaWdodGhzICUgOFxuICByZXR1cm4gJ1x1MjU4OCcucmVwZWF0KGZ1bGwpICsgKHBhcnRpYWwgPyBMRVZFTFNbcGFydGlhbF0gOiAnJykgKyAnICcucmVwZWF0KHdpZHRoIC0gZnVsbCAtIChwYXJ0aWFsID8gMSA6IDApKVxufVxuIiwgImltcG9ydCB7IGVhc2UsIGxpbmVhciwgdXNlQW5pbWF0ZWQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5cbmZ1bmN0aW9uIHRvUmdiKGNvbG9yKSB7XG4gIGlmIChjb2xvcj8uc3RhcnRzV2l0aCgnIycpICYmIGNvbG9yLmxlbmd0aCA9PT0gNykge1xuICAgIHJldHVybiBbXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSgxLCAzKSwgMTYpLFxuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoMywgNSksIDE2KSxcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDUsIDcpLCAxNiksXG4gICAgXVxuICB9XG4gIHJldHVybiBbMTI3LCAxMjcsIDEyN11cbn1cblxuZnVuY3Rpb24gbWl4Q29sb3IoZnJvbSwgdG8sIGFtb3VudCkge1xuICBpZiAoZnJvbSA9PT0gdG8pIHJldHVybiBmcm9tXG4gIGNvbnN0IGEgPSB0b1JnYihmcm9tKVxuICBjb25zdCBiID0gdG9SZ2IodG8pXG4gIGNvbnN0IGNoYW5uZWxzID0gYS5tYXAoKHZhbHVlLCBpKSA9PiBNYXRoLnJvdW5kKHZhbHVlICsgKGJbaV0gLSB2YWx1ZSkgKiBhbW91bnQpKVxuICByZXR1cm4gYCMke2NoYW5uZWxzLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBbmltYXRlZFZhbHVlKHsgdmFsdWUsIGluaXRpYWwgPSB2YWx1ZSwgZHVyYXRpb24gPSAxMDAwLCBjb2xvciwgaGlnaGxpZ2h0LCBiYWNrZ3JvdW5kLCBmb3JtYXQgPSBTdHJpbmcgfSkge1xuICBjb25zdCBkaXNwbGF5ZWQgPSB1c2VBbmltYXRlZChpbml0aWFsLCBlYXNlKGR1cmF0aW9uKSlcbiAgY29uc3QgZ2xvdyA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoZHVyYXRpb24sIGxpbmVhcikpXG5cbiAgaWYgKHZhbHVlICE9PSBkaXNwbGF5ZWQuX2FuaW0udGFyZ2V0KSB7XG4gICAgZGlzcGxheWVkLnNldCh2YWx1ZSlcbiAgICBnbG93LnNuYXAoMSlcbiAgICBnbG93LnNldCgwKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWl4Q29sb3IoY29sb3IsIGhpZ2hsaWdodCwgZ2xvdygpKSwgYmc6IGJhY2tncm91bmQgfX0+XG4gICAgICB7Zm9ybWF0KGRpc3BsYXllZCgpKX1cbiAgICA8L3RleHQ+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBEaWZmLCBlYXNlLCBIb3Jpem9udGFsU2Nyb2xsQm94LCBsaW5lYXIsIE1hcmtkb3duLCBTcGlubmVyLCB1c2VBbmltYXRlZCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgRkcsIEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgU0VMRUNUX0JHLCBSRUQsIEdSRUVOIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IGhpZ2hsaWdodCwgbGFuZ0ZvclBhdGggfSBmcm9tICcuL2hpZ2hsaWdodC5qcydcblxuZXhwb3J0IHsgZGVmYXVsdFRpdGxlIGFzIHVpVGl0bGUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rvb2xzL3JlY29yZGVyLmpzJ1xuXG5mdW5jdGlvbiBQcm9zZVNuaXBwZXQoeyB2YWx1ZSwgbGFuZ3VhZ2UsIGhpZ2hsaWdodDogaGlnaGxpZ2h0Q29kZSwgY29kZUJnIH0pIHtcbiAgY29uc3Qgc2hvd24gPSBoaWdobGlnaHRDb2RlID8gaGlnaGxpZ2h0Q29kZSh2YWx1ZSwgbGFuZ3VhZ2UpIDogdmFsdWVcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGJnOiBjb2RlQmcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgPHRleHQ+e3Nob3dufTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb2RlU25pcHBldCh7IHZhbHVlLCBsYW5ndWFnZSwgaGlnaGxpZ2h0OiBoaWdobGlnaHRDb2RlLCBjb2RlQmcgfSkge1xuICBjb25zdCBzaG93biA9IGhpZ2hsaWdodENvZGUgPyBoaWdobGlnaHRDb2RlKHZhbHVlLCBsYW5ndWFnZSkgOiB2YWx1ZVxuICBjb25zdCBjb250ZW50V2lkdGggPSBNYXRoLm1heCgwLCAuLi52YWx1ZS5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiBbLi4ubGluZV0ubGVuZ3RoKSkgKyAyXG4gIHJldHVybiAoXG4gICAgPEhvcml6b250YWxTY3JvbGxCb3ggY29udGVudFdpZHRoPXtjb250ZW50V2lkdGh9IHN0eWxlPXt7IGJnOiBjb2RlQmcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAge3Nob3duLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGtleSkgPT4gKFxuICAgICAgICAgIDx0ZXh0IGtleT17a2V5fSBzdHlsZT17eyBvdmVyZmxvdzogJ25vd3JhcCcgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgKSl9XG4gICAgICA8L2JveD5cbiAgICA8L0hvcml6b250YWxTY3JvbGxCb3g+XG4gIClcbn1cblxuZnVuY3Rpb24gVHJhbnNjcmlwdENvZGVCbG9jayhwcm9wcykge1xuICBjb25zdCBsYW5ndWFnZSA9IHByb3BzLmxhbmd1YWdlPy50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IENvbXBvbmVudCA9IFsnbWQnLCAnbWFya2Rvd24nLCAndGV4dCcsICd0eHQnLCAncGxhaW50ZXh0J10uaW5jbHVkZXMobGFuZ3VhZ2UpID8gUHJvc2VTbmlwcGV0IDogQ29kZVNuaXBwZXRcbiAgcmV0dXJuIDxDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBkaWZmUHJldmlldyhkaWZmLCByZXZlcnQpIHtcbiAgaWYgKCFkaWZmPy5odW5rcz8ubGVuZ3RoKSByZXR1cm4geyBiZWZvcmU6IFN0cmluZyhyZXZlcnQ/LmJlZm9yZSB8fCAnJyksIGFmdGVyOiBTdHJpbmcocmV2ZXJ0Py5hZnRlciB8fCAnJykgfVxuICBjb25zdCBiZWZvcmUgPSBbXVxuICBjb25zdCBhZnRlciA9IFtdXG4gIGRpZmYuaHVua3MuZm9yRWFjaCgoaHVuaywgaW5kZXgpID0+IHtcbiAgICBpZiAoaW5kZXgpIHtcbiAgICAgIGJlZm9yZS5wdXNoKCdcdTIyRUYnKVxuICAgICAgYWZ0ZXIucHVzaCgnXHUyMkVGJylcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGh1bmsubGluZXMpIHtcbiAgICAgIGlmIChsaW5lLnR5cGUgIT09ICdhZGQnKSBiZWZvcmUucHVzaChsaW5lLnRleHQpXG4gICAgICBpZiAobGluZS50eXBlICE9PSAncmVtb3ZlJykgYWZ0ZXIucHVzaChsaW5lLnRleHQpXG4gICAgfVxuICB9KVxuICByZXR1cm4geyBiZWZvcmU6IGJlZm9yZS5qb2luKCdcXG4nKSwgYWZ0ZXI6IGFmdGVyLmpvaW4oJ1xcbicpIH1cbn1cblxuZnVuY3Rpb24gZGlmZlByZXZpZXdMaW5lcyhkaWZmLCByZXZlcnQpIHtcbiAgaWYgKGRpZmY/Lmh1bmtzPy5sZW5ndGgpIHJldHVybiBkaWZmLmh1bmtzLnJlZHVjZSgoc3VtLCBoKSA9PiBzdW0gKyBoLmxpbmVzLmxlbmd0aCwgMClcbiAgY29uc3QgcHJldmlldyA9IGRpZmZQcmV2aWV3KGRpZmYsIHJldmVydClcbiAgcmV0dXJuIE1hdGgubWF4KHByZXZpZXcuYWZ0ZXIuc3BsaXQoJ1xcbicpLmxlbmd0aCwgcHJldmlldy5iZWZvcmUuc3BsaXQoJ1xcbicpLmxlbmd0aCwgMilcbn1cblxuZnVuY3Rpb24gZm10RHVyYXRpb24obXMpIHtcbiAgaWYgKG1zIDwgNjAwMDApIHJldHVybiBgJHsobXMgLyAxMDAwKS50b0ZpeGVkKDIpfXNgXG4gIGNvbnN0IHNlY3MgPSBNYXRoLnJvdW5kKG1zIC8gMTAwMClcbiAgcmV0dXJuIGAke01hdGguZmxvb3Ioc2VjcyAvIDYwKX1tICR7c2VjcyAlIDYwfXNgXG59XG5cbmZ1bmN0aW9uIGZtdFJ1bm5pbmcobXMpIHtcbiAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3IobXMgLyAxMDAwKVxuICByZXR1cm4gc2VjcyA8IDYwID8gYCR7c2Vjc31zYCA6IGAke01hdGguZmxvb3Ioc2VjcyAvIDYwKX1tICR7c2VjcyAlIDYwfXNgXG59XG5cbmZ1bmN0aW9uIG1peENvbG9yKGZyb20sIHRvLCBhbW91bnQpIHtcbiAgY29uc3QgcmdiID0gKGNvbG9yKSA9PiBjb2xvcj8uc3RhcnRzV2l0aCgnIycpICYmIGNvbG9yLmxlbmd0aCA9PT0gN1xuICAgID8gWzEsIDMsIDVdLm1hcCgoaSkgPT4gcGFyc2VJbnQoY29sb3Iuc2xpY2UoaSwgaSArIDIpLCAxNikpXG4gICAgOiBbMTI3LCAxMjcsIDEyN11cbiAgY29uc3QgYSA9IHJnYihmcm9tKVxuICBjb25zdCBiID0gcmdiKHRvKVxuICByZXR1cm4gYCMke2EubWFwKCh2YWx1ZSwgaSkgPT4gTWF0aC5yb3VuZCh2YWx1ZSArIChiW2ldIC0gdmFsdWUpICogYW1vdW50KS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyl9YFxufVxuXG5jb25zdCBUT09MX0RFU0NSSVBUSU9OX0xJTUlUID0gNVxuY29uc3QgQkFTSF9PVVRQVVRfTElORVMgPSAxMFxuY29uc3QgVE9PTF9OQU1FX0ZMQVNIX01TID0gOTAwXG5jb25zdCBERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgPSA1MDBcbmNvbnN0IERFU0NSSVBUSU9OX1JFVkVBTF9NUyA9IDcwMFxuXG5mdW5jdGlvbiBkZWxheWVkTGluZWFyKHQpIHtcbiAgY29uc3QgZGVsYXkgPSBERVNDUklQVElPTl9SRVZFQUxfREVMQVlfTVMgLyAoREVTQ1JJUFRJT05fUkVWRUFMX0RFTEFZX01TICsgREVTQ1JJUFRJT05fUkVWRUFMX01TKVxuICByZXR1cm4gdCA8PSBkZWxheSA/IDAgOiAodCAtIGRlbGF5KSAvICgxIC0gZGVsYXkpXG59XG5cbmZ1bmN0aW9uIERlc2NyaXB0aW9uUmV2ZWFsKHsgY2hpbGRyZW4sIHJ1bm5pbmcgfSkge1xuICBjb25zdCByZXZlYWwgPSB1c2VBbmltYXRlZChydW5uaW5nID8gMCA6IDEsIGVhc2UoREVTQ1JJUFRJT05fUkVWRUFMX0RFTEFZX01TICsgREVTQ1JJUFRJT05fUkVWRUFMX01TLCBkZWxheWVkTGluZWFyKSlcbiAgaWYgKCFydW5uaW5nKSByZXZlYWwuc2V0KDEpXG4gIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWl4Q29sb3IoYWNjZW50KCksIEZHLCByZXZlYWwoKSksIG92ZXJmbG93OiAndHJ1bmNhdGUnLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAgfX0+e2NoaWxkcmVufTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gb3V0cHV0TGluZXModmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFtdXG4gIGNvbnN0IGxpbmVzID0gdmFsdWUuc3BsaXQoJ1xcbicpXG4gIGlmIChsaW5lcy5hdCgtMSkgPT09ICcnKSBsaW5lcy5wb3AoKVxuICByZXR1cm4gbGluZXNcbn1cblxuZnVuY3Rpb24gQmFzaE91dHB1dCh7IHZhbHVlLCBsaW5lU3RhcnQsIGxpbmVDb3VudCB9KSB7XG4gIGNvbnN0IGxpbmVzID0gb3V0cHV0TGluZXModmFsdWUpXG4gIGlmICghbGluZXMubGVuZ3RoKSByZXR1cm4gbnVsbFxuICBjb25zdCBzaG93biA9IGxpbmVzLnNsaWNlKC1CQVNIX09VVFBVVF9MSU5FUylcbiAgY29uc3QgZmlyc3QgPSBsaW5lU3RhcnQgfHwgKGxpbmVDb3VudCA/IGxpbmVDb3VudCAtIHNob3duLmxlbmd0aCArIDEgOiBsaW5lcy5sZW5ndGggLSBzaG93bi5sZW5ndGggKyAxKVxuICBjb25zdCBsYXN0ID0gbGluZUNvdW50IHx8IGZpcnN0ICsgc2hvd24ubGVuZ3RoIC0gMVxuICBjb25zdCBndXR0ZXJXaWR0aCA9IFN0cmluZyhsYXN0KS5sZW5ndGhcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICB7c2hvd24ubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgICAgIDxib3gga2V5PXtmaXJzdCArIGl9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7U3RyaW5nKGZpcnN0ICsgaSkucGFkU3RhcnQoZ3V0dGVyV2lkdGgpfSBgfTwvdGV4dD5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICApKX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb21wYWN0VG9vbFNpZ24oeyB0b29sIH0pIHtcbiAgaWYgKHRvb2wubmFtZSAhPT0gJ2Jhc2gnKSByZXR1cm4gPHRleHQ+eycgICd9PC90ZXh0PlxuICBpZiAodG9vbC5iYWNrZ3JvdW5kKSByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnsnXHUyMUFBICd9PC90ZXh0PlxuICBpZiAodG9vbC5zdGF0dXMgPT09ICdydW5uaW5nJykgcmV0dXJuIDxib3ggc3R5bGU9e3sgd2lkdGg6IDIgfX0+PFNwaW5uZXIgY29sb3I9e2FjY2VudCgpfSAvPjwvYm94PlxuICBpZiAodG9vbC5leGl0Q29kZSA9PT0gMCkgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBHUkVFTiB9fT57J1x1MjcxMyAnfTwvdGV4dD5cbiAgaWYgKHRvb2wuZXhpdENvZGUgIT0gbnVsbCkgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQgfX0+eydcdTAwRDcgJ308L3RleHQ+XG4gIHJldHVybiA8dGV4dD57JyAgJ308L3RleHQ+XG59XG5cbmZ1bmN0aW9uIFRvb2xHcm91cCh7IGl0ZW0sIHZlcmJvc2UgfSkge1xuICBjb25zdCBsYXRlc3RDYWxsSWQgPSBpdGVtLnRvb2xzLmF0KC0xKT8uY2FsbElkXG4gIGNvbnN0IGdsb3cgPSB1c2VBbmltYXRlZCgwLCBlYXNlKFRPT0xfTkFNRV9GTEFTSF9NUywgbGluZWFyKSlcbiAgaWYgKGxhdGVzdENhbGxJZCAhPT0gZ2xvdy5fY2FsbElkKSB7XG4gICAgZ2xvdy5fY2FsbElkID0gbGF0ZXN0Q2FsbElkXG4gICAgaWYgKGl0ZW0uYWN0aXZlKSB7XG4gICAgICBnbG93LnNuYXAoMSlcbiAgICAgIGdsb3cuc2V0KDApXG4gICAgfVxuICB9XG5cbiAgaWYgKHZlcmJvc2UpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgeyhpdGVtLml0ZW1zIHx8IGl0ZW0udG9vbHMpLm1hcCgoZW50cnksIGkpID0+IGVudHJ5LmtpbmQgPT09ICd0aG91Z2h0cydcbiAgICAgICAgICA/IDxNZXNzYWdlIGtleT17aX0gaXRlbT17ZW50cnl9IHZlcmJvc2UgLz5cbiAgICAgICAgICA6IDxUb29sQ2FyZCBrZXk9e2l9IHsuLi5lbnRyeX0gdmVyYm9zZSAvPil9XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBjb25zdCBjb3VudHMgPSBuZXcgTWFwKClcbiAgZm9yIChjb25zdCB0b29sIG9mIGl0ZW0udG9vbHMpIGNvdW50cy5zZXQodG9vbC5uYW1lLCAoY291bnRzLmdldCh0b29sLm5hbWUpIHx8IDApICsgMSlcbiAgY29uc3QgZW50cmllcyA9IFsuLi5jb3VudHNdXG4gIGNvbnN0IHRvdGFsTXMgPSBpdGVtLnRvb2xzLnJlZHVjZSgoc3VtLCB0b29sKSA9PiBzdW0gKyAodG9vbC5kdXJhdGlvbk1zIHx8IDApLCAwKVxuICBjb25zdCBsYXRlc3ROYW1lID0gaXRlbS50b29scy5hdCgtMSk/Lm5hbWVcbiAgY29uc3QgYWN0aXZpdHkgPSAoaXRlbS5pdGVtcyB8fCBpdGVtLnRvb2xzKS5tYXAoKGVudHJ5KSA9PiBlbnRyeS5raW5kID09PSAndGhvdWdodHMnXG4gICAgPyB7IC4uLmVudHJ5LCBuYW1lOiAndGhvdWdodHMnLCBkZXNjcmlwdGlvbjogZW50cnkudGV4dC5yZXBsYWNlKC9cXHMrL2csICcgJykudHJpbSgpLCB0aG91Z2h0OiB0cnVlIH1cbiAgICA6IGVudHJ5KS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5kZXNjcmlwdGlvbilcbiAgY29uc3QgZGVzY3JpcHRpb25zID0gYWN0aXZpdHkuc2xpY2UoLVRPT0xfREVTQ1JJUFRJT05fTElNSVQpXG4gIGNvbnN0IGhpZGRlbkRlc2NyaXB0aW9ucyA9IGFjdGl2aXR5Lmxlbmd0aCAtIGRlc2NyaXB0aW9ucy5sZW5ndGhcbiAgY29uc3QgdG9vbE5hbWVXaWR0aCA9IE1hdGgubWF4KDAsIC4uLmRlc2NyaXB0aW9ucy5tYXAoKGVudHJ5KSA9PiBlbnRyeS5uYW1lLmxlbmd0aCkpXG4gIGNvbnN0IHZpc2libGVCYXNoID0gaXRlbS5hY3RpdmUgJiYgaXRlbS50b29scy5hdCgtMSk/Lm5hbWUgPT09ICdiYXNoJyA/IGl0ZW0udG9vbHMuYXQoLTEpIDogbnVsbFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGFsaWduSXRlbXM6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAge2l0ZW0uYWN0aXZlID8gPFNwaW5uZXIgY29sb3I9e2FjY2VudCgpfSAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5cdTI3MTM8L3RleHQ+fVxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBmbGV4V3JhcDogJ3dyYXAnLCBmbGV4R3JvdzogMSwgbWFyZ2luUmlnaHQ6IDIgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGl0ZW0uYWN0aXZlID8gRkcgOiBNVVRFRCB9fT4gQ2FsbGVkIDwvdGV4dD5cbiAgICAgICAgICB7ZW50cmllcy5tYXAoKFtuYW1lLCBjb3VudF0sIGkpID0+IChcbiAgICAgICAgICAgIDx0ZXh0IGtleT17bmFtZX0gc3R5bGU9e3sgY29sb3I6IGl0ZW0uYWN0aXZlICYmIG5hbWUgPT09IGxhdGVzdE5hbWUgPyBtaXhDb2xvcihGRywgYWNjZW50KCksIGdsb3coKSkgOiBpdGVtLmFjdGl2ZSA/IEZHIDogTVVURUQgfX0+XG4gICAgICAgICAgICAgIHtgJHtpID8gJywgJyA6ICcnfSR7bmFtZX0ke2NvdW50ID09PSAxID8gJycgOiBgICR7Y291bnR9IHRpbWVzYH1gfVxuICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2JveD5cbiAgICAgICAge3RvdGFsTXMgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgZmxleFNocmluazogMCB9fT57Zm10RHVyYXRpb24odG90YWxNcyl9PC90ZXh0Pn1cbiAgICAgIDwvYm94PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgIHtoaWRkZW5EZXNjcmlwdGlvbnMgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgPHRleHQ+eycgJy5yZXBlYXQodG9vbE5hbWVXaWR0aCArIDQpfTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YC4uLiR7aGlkZGVuRGVzY3JpcHRpb25zfSBtb3JlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIHtkZXNjcmlwdGlvbnMubWFwKCh0b29sLCBpKSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Rvb2wuY2FsbElkIHx8IGB0aG91Z2h0LSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHt0b29sLnRob3VnaHQgPyA8dGV4dD57JyAgJ308L3RleHQ+IDogPENvbXBhY3RUb29sU2lnbiB0b29sPXt0b29sfSAvPn1cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0b29sLnRob3VnaHQgfX0+e2Ake3Rvb2wubmFtZS5wYWRTdGFydCh0b29sTmFtZVdpZHRoKX0gIGB9PC90ZXh0PlxuICAgICAgICAgICAge3Rvb2wudGhvdWdodFxuICAgICAgICAgICAgICA/IDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT48TWFya2Rvd24gdGV4dD17dG9vbC5kZXNjcmlwdGlvbn0gc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19IC8+PC9ib3g+XG4gICAgICAgICAgICAgIDogPERlc2NyaXB0aW9uUmV2ZWFsIHJ1bm5pbmc9e3Rvb2wuc3RhdHVzID09PSAncnVubmluZyd9Pnt0b29sLmRlc2NyaXB0aW9ufTwvRGVzY3JpcHRpb25SZXZlYWw+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApKX1cbiAgICAgICAge3Zpc2libGVCYXNoPy50aXRsZSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntoaWdobGlnaHQodmlzaWJsZUJhc2gudGl0bGUsICdiYXNoJyl9PC90ZXh0Pn1cbiAgICAgICAge3Zpc2libGVCYXNoPy5mdWxsT3V0cHV0ICYmIDxCYXNoT3V0cHV0IHZhbHVlPXt2aXNpYmxlQmFzaC5mdWxsT3V0cHV0fSBsaW5lU3RhcnQ9e3Zpc2libGVCYXNoLm91dHB1dExpbmVTdGFydH0gbGluZUNvdW50PXt2aXNpYmxlQmFzaC5vdXRwdXRMaW5lQ291bnR9IC8+fVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gVG9vbENhcmQoeyBuYW1lLCB0aXRsZSwgdGl0bGVMYW5nLCBkZXNjcmlwdGlvbiwgc3RhdHVzLCBkaWZmLCByZXZlcnQsIGZ1bGxPdXRwdXQsIG91dHB1dExpbmVTdGFydCwgb3V0cHV0TGluZUNvdW50LCBlcnJvciwgYmFja2dyb3VuZCwgdmVyYm9zZSwgc3RhcnRlZEF0LCBkdXJhdGlvbk1zIH0pIHtcbiAgY29uc3Qgc2hvd25UaXRsZSA9IG5hbWUgPT09ICdiYXNoJyA/IG51bGwgOiB0aXRsZUxhbmcgJiYgdGl0bGUgPyBoaWdobGlnaHQodGl0bGUsIHRpdGxlTGFuZykgOiB0aXRsZVxuICBjb25zdCBpbmxpbmVEZXNjcmlwdGlvbiA9ICFzaG93blRpdGxlXG4gIGNvbnN0IHByZXZpZXcgPSBkaWZmUHJldmlldyhkaWZmLCByZXZlcnQpXG4gIGNvbnN0IHJ1bm5pbmcgPSBzdGF0dXMgPT09ICdydW5uaW5nJ1xuICBjb25zdCBpbnRlcnJ1cHRlZCA9IHN0YXR1cyA9PT0gJ2ludGVycnVwdGVkJ1xuICBjb25zdCByZXZlcnRlZCA9IHN0YXR1cyA9PT0gJ3JldmVydGVkJ1xuICBjb25zdCBmYWlsZWQgPSBzdGF0dXMgPT09ICdlcnJvcidcbiAgY29uc3Qgb3V0TGluZXMgPSBmdWxsT3V0cHV0ID8gZnVsbE91dHB1dC5zcGxpdCgnXFxuJykgOiBudWxsXG5cbiAgY29uc3QgZWxhcHNlZCA9IHJ1bm5pbmcgJiYgc3RhcnRlZEF0ID8gRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCA6IDBcbiAgY29uc3QgdG9vayA9ICFydW5uaW5nICYmICFiYWNrZ3JvdW5kICYmIGR1cmF0aW9uTXMgIT0gbnVsbCA/IGZtdER1cmF0aW9uKGR1cmF0aW9uTXMpIDogbnVsbFxuXG4gIGNvbnN0IGluZm8gPSBydW5uaW5nID8gKGVsYXBzZWQgPj0gNTAwMCA/IGBydW5uaW5nICgke2ZtdFJ1bm5pbmcoZWxhcHNlZCl9KWAgOiAncnVubmluZycpXG4gICAgOiBpbnRlcnJ1cHRlZCA/ICdpbnRlcnJ1cHRlZCdcbiAgICA6IHJldmVydGVkID8gJ3JldmVydGVkJ1xuICAgIDogZmFpbGVkID8gYGZhaWxlZCR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuICAgIDogYmFja2dyb3VuZCA/ICdiYWNrZ3JvdW5kICBzaGVsbCBsaXN0ZWQgYmVsb3cnXG4gICAgOiBkaWZmID8gYCske2RpZmYuYWRkaXRpb25zfSAtJHtkaWZmLmRlbGV0aW9uc30ke3Rvb2sgPyBgICAke3Rvb2t9YCA6ICcnfWBcbiAgICA6IG91dExpbmVzID8gYCR7b3V0cHV0TGluZUNvdW50IHx8IG91dExpbmVzLmxlbmd0aH0gJHsob3V0cHV0TGluZUNvdW50IHx8IG91dExpbmVzLmxlbmd0aCkgPT09IDEgPyAnbGluZScgOiAnbGluZXMnfSR7dG9vayA/IGAgICR7dG9va31gIDogJyd9YFxuICAgIDogYGRvbmUke3Rvb2sgPyBgICAke3Rvb2t9YCA6ICcnfWBcblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgb3ZlcmZsb3c6ICdjbGlwJyB9fT5cbiAgICAgICAge3J1bm5pbmdcbiAgICAgICAgICA/IDxTcGlubmVyIGNvbG9yPXthY2NlbnQoKX0gLz5cbiAgICAgICAgICA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpbnRlcnJ1cHRlZCB8fCBmYWlsZWQgPyBSRUQgOiByZXZlcnRlZCA/IE1VVEVEIDogYWNjZW50KCkgfX0+e2ludGVycnVwdGVkID8gJ1x1MjcxNycgOiBmYWlsZWQgPyAnXHUyNzE3JyA6IHJldmVydGVkID8gJ1x1MjFBOScgOiAnXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGZsZXhTaHJpbms6IDAgfX0+e2Ake25hbWUucGFkRW5kKDUpfSBgfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IEZHIH19PntzaG93blRpdGxlIHx8IGRlc2NyaXB0aW9uIHx8IG5hbWV9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBmbGV4U2hyaW5rOiAwLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtpbmZvfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICB7ZGVzY3JpcHRpb24gJiYgIWlubGluZURlc2NyaXB0aW9uICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nTGVmdDogOCB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntkZXNjcmlwdGlvbn08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIHtuYW1lID09PSAnYmFzaCcgJiYgdGl0bGUgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdMZWZ0OiA4IH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRywgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2hpZ2hsaWdodCh0aXRsZSwgdGl0bGVMYW5nIHx8ICdiYXNoJyl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICB7ZmFpbGVkICYmIGVycm9yICYmIChcbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtlcnJvcn1gfTwvdGV4dD5cbiAgICAgICl9XG4gICAgICB7cmV2ZXJ0ICYmICFydW5uaW5nICYmICFyZXZlcnRlZCAmJiAhKGRpZmYgJiYgZGlmZi5hZGRpdGlvbnMgPT09IDAgJiYgZGlmZi5kZWxldGlvbnMgPT09IDApICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiBkaWZmUHJldmlld0xpbmVzKGRpZmYsIHJldmVydCksIG1hcmdpblRvcDogMSwgcGFkZGluZ0xlZnQ6IDggfX0+XG4gICAgICAgICAgPERpZmZcbiAgICAgICAgICAgIGJlZm9yZT17cHJldmlldy5iZWZvcmV9XG4gICAgICAgICAgICBhZnRlcj17cHJldmlldy5hZnRlcn1cbiAgICAgICAgICAgIGxhbmd1YWdlPXtsYW5nRm9yUGF0aChyZXZlcnQucGF0aCl9XG4gICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgIGNvbnRleHQ9ezN9XG4gICAgICAgICAgICBmb2xkcz17ZmFsc2V9XG4gICAgICAgICAgICBmb2N1c2VkPXtmYWxzZX1cbiAgICAgICAgICAgIHNjcm9sbGJhcj17ZmFsc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgICAge25hbWUgPT09ICdiYXNoJyAmJiBmdWxsT3V0cHV0ICYmIDxib3ggc3R5bGU9e3sgcGFkZGluZ0xlZnQ6IDggfX0+PEJhc2hPdXRwdXQgdmFsdWU9e2Z1bGxPdXRwdXR9IGxpbmVTdGFydD17b3V0cHV0TGluZVN0YXJ0fSBsaW5lQ291bnQ9e291dHB1dExpbmVDb3VudH0gLz48L2JveD59XG4gICAgICB7b3V0TGluZXMgJiYgdmVyYm9zZSAmJiBuYW1lICE9PSAnYmFzaCcgJiYgIXJ1bm5pbmcgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge291dExpbmVzLnNsaWNlKDAsIDIwMCkubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICAgIHtvdXRMaW5lcy5sZW5ndGggPiAyMDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyMDI2ICR7b3V0TGluZXMubGVuZ3RoIC0gMjAwfSBtb3JlIGxpbmVzYH08L3RleHQ+fVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gRGVsaWJlcmF0aW9uVHVybih7IGl0ZW0sIHZlcmJvc2UsIGNvbXBhY3QgPSBmYWxzZSB9KSB7XG4gIGNvbnN0IHBhcnRpY2lwYW50QSA9IGl0ZW0ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWEnIHx8IGl0ZW0ucm9sZSA9PT0gJ3Byb3Bvc2VyJ1xuICBjb25zdCBzeW50aGVzaXMgPSBpdGVtLnJvbGUgPT09ICdzeW50aGVzaXMnXG4gIGNvbnN0IGxhYmVsID0gc3ludGhlc2lzID8gJ1N5bnRoZXNpcycgOiBgJHtwYXJ0aWNpcGFudEEgPyAnUGFydGljaXBhbnQgQScgOiAnUGFydGljaXBhbnQgQid9ICByb3VuZCAke2l0ZW0ucm91bmR9YFxuICBjb25zdCB0ZXh0ID0gaXRlbS5pbnRlcnJ1cHRlZCA/IGAke2l0ZW0udGV4dH0gKihpbnRlcnJ1cHRlZCkqYCA6IGl0ZW0udGV4dFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtaW5XaWR0aDogMCwgcGFkZGluZ1g6IGNvbXBhY3QgPyAwIDogMiwgYmc6IGNvbXBhY3QgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBzeW50aGVzaXMgfHwgcGFydGljaXBhbnRBID8gYWNjZW50KCkgOiBNVVRFRCB9fSAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIHBhZGRpbmdYOiBjb21wYWN0ID8gMiA6IDIsIHBhZGRpbmdZOiAxLCBiZzogc3ludGhlc2lzID8gU0VMRUNUX0JHIDogcGFydGljaXBhbnRBIHx8IGNvbXBhY3QgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc3ludGhlc2lzIHx8IHBhcnRpY2lwYW50QSA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IHRydWUgfX0+e2xhYmVsfTwvdGV4dD5cbiAgICAgICAgICB7aXRlbS50b29scz8ubWFwKCh0b29sKSA9PiA8VG9vbENhcmQga2V5PXt0b29sLmNhbGxJZH0gey4uLnRvb2x9IHZlcmJvc2U9e3ZlcmJvc2V9IC8+KX1cbiAgICAgICAgICB7dGV4dCAmJiAoXG4gICAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHR9XG4gICAgICAgICAgICAgIGNvZGVCZz17bnVsbH1cbiAgICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgICB0YWJsZUJvcmRlckNvbG9yPXtNVVRFRH1cbiAgICAgICAgICAgICAgdGFibGVSb3dIb3ZlckJnPXtQQU5FTF9CR31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBkZWxpYmVyYXRpb25Sb3dzKHR1cm5zKSB7XG4gIGNvbnN0IHJvd3MgPSBbXVxuICBmb3IgKGNvbnN0IHR1cm4gb2YgdHVybnMpIHtcbiAgICBpZiAodHVybi5yb2xlID09PSAnc3ludGhlc2lzJyB8fCAhdHVybi5wYXJhbGxlbEdyb3VwKSB7XG4gICAgICByb3dzLnB1c2goW3R1cm5dKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSByb3dzLmZpbmQoKHJvdykgPT4gcm93WzBdPy5wYXJhbGxlbEdyb3VwID09PSB0dXJuLnBhcmFsbGVsR3JvdXApXG4gICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5wdXNoKHR1cm4pXG4gICAgZWxzZSByb3dzLnB1c2goW3R1cm5dKVxuICB9XG4gIHJldHVybiByb3dzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEZWxpYmVyYXRpb25FeGNoYW5nZSh7IHR1cm5zLCB2ZXJib3NlLCB3aWRlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtkZWxpYmVyYXRpb25Sb3dzKHR1cm5zKS5tYXAoKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ludGhlc2lzID0gcm93WzBdPy5yb2xlID09PSAnc3ludGhlc2lzJ1xuICAgICAgICBpZiAoIXdpZGUgfHwgc3ludGhlc2lzKSByZXR1cm4gcm93Lm1hcCgodHVybikgPT4gPERlbGliZXJhdGlvblR1cm4ga2V5PXtgJHt0dXJuLnJvbGV9OiR7dHVybi5yb3VuZCA/PyAnc3ludGhlc2lzJ31gfSBpdGVtPXt0dXJufSB2ZXJib3NlPXt2ZXJib3NlfSAvPilcbiAgICAgICAgY29uc3QgbGVmdCA9IHJvdy5maW5kKCh0dXJuKSA9PiB0dXJuLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1hJyB8fCB0dXJuLnJvbGUgPT09ICdwcm9wb3NlcicpXG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gcm93LmZpbmQoKHR1cm4pID0+IHR1cm4ucm9sZSA9PT0gJ3BhcnRpY2lwYW50LWInIHx8IHR1cm4ucm9sZSA9PT0gJ3Jldmlld2VyJylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17cm93WzBdPy5wYXJhbGxlbEdyb3VwIHx8IGAke3Jvd1swXT8ucm9sZX06JHtyb3dbMF0/LnJvdW5kfToke2luZGV4fWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCB3aWR0aDogJzEwMCUnLCBvdmVyZmxvdzogJ2NsaXAnLCBiZzogUEFORUxfQkcgfX0+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAnNTAlJywgbWluV2lkdGg6IDAsIG92ZXJmbG93OiAnY2xpcCcgfX0+e2xlZnQgJiYgPERlbGliZXJhdGlvblR1cm4gaXRlbT17bGVmdH0gdmVyYm9zZT17dmVyYm9zZX0gY29tcGFjdCAvPn08L2JveD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAsIGJnOiBQQU5FTF9CRyB9fSAvPlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIG92ZXJmbG93OiAnY2xpcCcgfX0+e3JpZ2h0ICYmIDxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e3JpZ2h0fSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0IC8+fTwvYm94PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIHNob3dMb2NrZWQgPSBmYWxzZSB9KSB7XG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJykgcmV0dXJuIDxUb29sR3JvdXAgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cblxuICBpZiAoaXRlbS5raW5kID09PSAndXNlcicgJiYgaXRlbS5vcmlnaW4gPT09ICd2aWV3Jykge1xuICAgIGNvbnN0IGxhYmVsID0gL15cXFt2aWV3OiAoW15cXF1dKylcXF0vLmV4ZWMoaXRlbS50ZXh0KT8uWzFdIHx8ICdpbWFnZSdcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjcxMyBWaWV3ZWQgJHtsYWJlbH1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdhZ2VudC1ub3RpY2UtZ3JvdXAnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntgXHUyNjk5ICR7aXRlbS5ub3RpY2VzLmxlbmd0aH0gYWdlbnRzIGZpbmlzaGVkYH08L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICAge3ZlcmJvc2UgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICAgIHtpdGVtLm5vdGljZXMubWFwKChub3RpY2UsIGkpID0+IChcbiAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bm90aWNlLnRleHQucmVwbGFjZSgvXlxcW3N5c3RlbSBub3RpZmljYXRpb25cXF1cXHMqLywgJycpfTwvdGV4dD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wnKSB7XG4gICAgcmV0dXJuIDxUb29sQ2FyZCB7Li4uaXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzdW1tYXJ5Jykge1xuICAgIGNvbnN0IGxpbmVzID0gaXRlbS50ZXh0LnNwbGl0KCdcXG4nKVxuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57aXRlbS5zb3VyY2UgPT09ICdjb21wYWN0JyA/ICdcdTI3MjYgc3VtbWFyeSAgY29udmVyc2F0aW9uIGNvbXBhY3RlZCBhYm92ZSB0aGlzIHBvaW50JyA6ICdcdTI3MjYgc3VtbWFyeSAgcmV3b3VuZCBjb252ZXJzYXRpb24nfTwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtsaW5lcy5sZW5ndGh9ICR7bGluZXMubGVuZ3RoID09PSAxID8gJ2xpbmUnIDogJ2xpbmVzJ31gfTwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHt2ZXJib3NlICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgICB7bGluZXMuc2xpY2UoMCwgNTAwKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57bGluZSB8fCAnICd9PC90ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICB7bGluZXMubGVuZ3RoID4gNTAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YFx1MjAyNiAke2xpbmVzLmxlbmd0aCAtIDUwMH0gbW9yZSBsaW5lc2B9PC90ZXh0Pn1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd0aG91Z2h0cycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgPE1hcmtkb3duIHRleHQ9e2l0ZW0udGV4dH0gc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0gLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnZGVsaWJlcmF0aW9uLXR1cm4nKSB7XG4gICAgcmV0dXJuIDxib3ggc3R5bGU9e3sgbWFyZ2luVG9wOiAxIH19PjxEZWxpYmVyYXRpb25UdXJuIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2V9IC8+PC9ib3g+XG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnbm90aWNlJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI2OTkgJHtpdGVtLnRleHQucmVwbGFjZSgvXlxcW3N5c3RlbSBub3RpZmljYXRpb25cXF1cXHMqLywgJycpfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NraWxsJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI3MjYgc2tpbGw6ICR7aXRlbS5uYW1lfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3N0ZWVyLXRvb2xzJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI1MDBcdTI1MDAgJHtpdGVtLmNvdW50fSB0b29sICR7aXRlbS5jb3VudCA9PT0gMSA/ICdpbnRlcmFjdGlvbicgOiAnaW50ZXJhY3Rpb25zJ30gaGlkZGVuIFx1MjUwMFx1MjUwMGB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NoZWxsLWNvbW1hbmQnKSB7XG4gICAgY29uc3Qgc2hvd24gPSBoaWdobGlnaHQoaXRlbS50ZXh0LCAnYmFzaCcpXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydjb21tYW5kJ308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdMZWZ0OiAyIH19PlxuICAgICAgICAgIHtzaG93bi5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBpKSA9PiA8dGV4dCBrZXk9e2l9PntgJHtpID09PSAwID8gJyQgJyA6ICcgICd9JHtsaW5lIHx8ICcgJ31gfTwvdGV4dD4pfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdzaGVsbC1vdXRwdXQnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGJvbGQ6IHRydWUgfX0+eydvdXRwdXQnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgICAge2l0ZW0udGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBpKSA9PiA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntsaW5lIHx8ICcgJ308L3RleHQ+KX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndXNlcicpIHtcbiAgICBjb25zdCBsYWJlbCA9IHNob3dMb2NrZWQgJiYgaXRlbS5sb2NrZWQgPyAnTG9ja2VkICBjb21wYWN0ZWQnIDogc2hvd0xvY2tlZCA/ICdVc2VyJyA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBQQU5FTF9CRyB9fSAvPlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IFNFTEVDVF9CRyA6IFBBTkVMX0JHLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntpdGVtLnRleHR9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IHRleHQgPSBpdGVtLmludGVycnVwdGVkID8gYCR7aXRlbS50ZXh0fSAqKGludGVycnVwdGVkKSpgIDogaXRlbS50ZXh0XG4gIGNvbnN0IGxhYmVsID0gc2hvd0xvY2tlZCAmJiBpdGVtLmxvY2tlZCA/ICdMb2NrZWQgIGNvbXBhY3RlZCcgOiBzaG93TG9ja2VkID8gJ0Fzc2lzdGFudCcgOiBudWxsXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAxLCBmbGV4U2hyaW5rOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiB1bmRlZmluZWQgfX0gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIHBhZGRpbmdMZWZ0OiAxLCBwYWRkaW5nUmlnaHQ6IDIsIHBhZGRpbmdZOiBzaG93TG9ja2VkID8gMSA6IDAsIGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiB0cnVlIH19PntsYWJlbH08L3RleHQ+fVxuICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgdGV4dD17dGV4dH1cbiAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgY29kZUJnPXtudWxsfVxuICAgICAgICAgICAgY29kZUJsb2NrPXtUcmFuc2NyaXB0Q29kZUJsb2NrfVxuICAgICAgICAgICAgdGFibGVCb3JkZXJDb2xvcj17TVVURUR9XG4gICAgICAgICAgICB0YWJsZVJvd0hvdmVyQmc9e1BBTkVMX0JHfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIFRleHRJbnB1dCwgdXNlTGF5b3V0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vdHJhbnNjcmlwdC5qc3gnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBNVVRFRCwgUEFORUxfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgY29udmVyc2F0aW9uTWF0Y2hlcywgaGlnaGxpZ2h0Q29udmVyc2F0aW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb252ZXJzYXRpb24tc2VhcmNoLmpzJ1xuXG5mdW5jdGlvbiBTY3JvbGxBbmNob3IoeyB0YXJnZXQgfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICB0YXJnZXQuYW5jaG9yWSA9IGxheW91dC55XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIFNlYXJjaE1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBjdXJyZW50TWF0Y2gsIHNlYXJjaCB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIGlmIChjdXJyZW50TWF0Y2gpIHNlYXJjaC5zY3JvbGxUb01hdGNoKGxheW91dCwgY3VycmVudE1hdGNoKVxuICByZXR1cm4gPE1lc3NhZ2UgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnZlcnNhdGlvblNlYXJjaCh7IGZtLCB2ZXJib3NlLCBzZXRGb2xsb3csIHNldE9mZnNldCB9KSB7XG4gIGNvbnN0IFthY3RpdmUsIHNldEFjdGl2ZV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbY29tbWl0dGVkLCBzZXRDb21taXR0ZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZW50ZXJGb2N1cywgc2V0RW50ZXJGb2N1c10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzY3JvbGxSZXF1ZXN0LCBzZXRTY3JvbGxSZXF1ZXN0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbc2Nyb2xsXSA9IGNyZWF0ZVNpZ25hbCh7IGFuY2hvclk6IDAsIGtleTogbnVsbCB9KVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyRm9jdXMoKSB7XG4gICAgaWYgKCFhY3RpdmUoKSkgcmV0dXJuXG4gICAgZm0uaXRlbSgnY29udmVyc2F0aW9uLXNlYXJjaCcpXG4gICAgaWYgKGVudGVyRm9jdXMoKSkge1xuICAgICAgc2V0RW50ZXJGb2N1cyhmYWxzZSlcbiAgICAgIGZtLmZvY3VzKCdjb252ZXJzYXRpb24tc2VhcmNoJylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvcGVuKCkge1xuICAgIHNldEFjdGl2ZSh0cnVlKVxuICAgIHNldFF1ZXJ5KCcnKVxuICAgIHNldENvbW1pdHRlZChmYWxzZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIHNldEVudGVyRm9jdXModHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlKHsgcmVzdG9yZUZvY3VzID0gdHJ1ZSB9ID0ge30pIHtcbiAgICBzZXRBY3RpdmUoZmFsc2UpXG4gICAgc2V0UXVlcnkoJycpXG4gICAgc2V0Q29tbWl0dGVkKGZhbHNlKVxuICAgIHNldEluZGV4KDApXG4gICAgaWYgKHJlc3RvcmVGb2N1cyAmJiBmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpKSBmbS5mb2N1cygnZmVlZCcpXG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVJbnB1dChldmVudCwgbWF0Y2hlcykge1xuICAgIGlmIChhY3RpdmUoKSAmJiAhZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSkge1xuICAgICAgY2xvc2UoeyByZXN0b3JlRm9jdXM6IGZhbHNlIH0pXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoIWFjdGl2ZSgpIHx8ICFjb21taXR0ZWQoKSkgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgY291bnQgPSBtYXRjaGVzLmxlbmd0aFxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZSgpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnbicgJiYgIWV2ZW50LnNoaWZ0KSB7XG4gICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgc2V0SW5kZXgoKGluZGV4KCkgKyAxKSAlIGNvdW50KVxuICAgICAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ04nIHx8IChldmVudC5zaGlmdCAmJiBldmVudC5rZXkgPT09ICduJykpIHtcbiAgICAgIGlmIChjb3VudCkge1xuICAgICAgICBzZXRJbmRleCgoaW5kZXgoKSAtIDEgKyBjb3VudCkgJSBjb3VudClcbiAgICAgICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ28nKSByZXR1cm4gZmFsc2VcbiAgICBlbHNlIHJldHVybiB0cnVlXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGFyZShpdGVtcykge1xuICAgIGNvbnN0IG1hdGNoZXMgPSBjb252ZXJzYXRpb25NYXRjaGVzKGl0ZW1zLCBxdWVyeSgpLCB2ZXJib3NlKCkpXG4gICAgY29uc3QgbGFzdEluZGV4ID0gTWF0aC5tYXgoMCwgbWF0Y2hlcy5sZW5ndGggLSAxKVxuICAgIGlmIChpbmRleCgpID4gbGFzdEluZGV4KSBzZXRJbmRleChsYXN0SW5kZXgpXG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoZXMsXG4gICAgICBpdGVtczogYWN0aXZlKCkgPyBoaWdobGlnaHRDb252ZXJzYXRpb24oaXRlbXMsIHF1ZXJ5KCksIGluZGV4KCksIHZlcmJvc2UoKSkgOiBpdGVtcyxcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY3JvbGxUb01hdGNoKGxheW91dCwgbWF0Y2gpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBzY3JvbGwoKVxuICAgIGNvbnN0IGtleSA9IGAke3F1ZXJ5KCl9XFwwJHtpbmRleCgpfVxcMCR7dmVyYm9zZSgpfVxcMCR7c2Nyb2xsUmVxdWVzdCgpfWBcbiAgICBpZiAodGFyZ2V0LmtleSA9PT0ga2V5KSByZXR1cm5cbiAgICB0YXJnZXQua2V5ID0ga2V5XG4gICAgc2V0Rm9sbG93KGZhbHNlKVxuICAgIHNldE9mZnNldChNYXRoLm1heCgwLCBsYXlvdXQueSAtIHRhcmdldC5hbmNob3JZICsgbWF0Y2gubGluZSAtIDMpKVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlUXVlcnkodmFsdWUpIHtcbiAgICBzZXRRdWVyeSh2YWx1ZSlcbiAgICBzZXRJbmRleCgwKVxuICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RpdmUsXG4gICAgcXVlcnksXG4gICAgY29tbWl0dGVkLFxuICAgIGluZGV4LFxuICAgIGZvY3VzZWQ6ICgpID0+IGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJyksXG4gICAgcmVnaXN0ZXJGb2N1cyxcbiAgICBvcGVuLFxuICAgIGNsb3NlLFxuICAgIGhhbmRsZUlucHV0LFxuICAgIHByZXBhcmUsXG4gICAgc2Nyb2xsOiBzY3JvbGwoKSxcbiAgICBzY3JvbGxUb01hdGNoLFxuICAgIGNvbW1pdDogKCkgPT4gc2V0Q29tbWl0dGVkKHRydWUpLFxuICAgIHVwZGF0ZVF1ZXJ5LFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb252ZXJzYXRpb25TZWFyY2hCYXIoeyBzZWFyY2gsIG1hdGNoZXMgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGZsZXhTaHJpbms6IDAsIGhlaWdodDogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57Jy8gJ308L3RleHQ+XG4gICAgICB7c2VhcmNoLmNvbW1pdHRlZCgpXG4gICAgICAgID8gPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBmbGV4R3JvdzogMSB9fT57c2VhcmNoLnF1ZXJ5KCl9PC90ZXh0PlxuICAgICAgICA6IDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGZvY3VzZWQ9e3NlYXJjaC5mb2N1c2VkKCl9XG4gICAgICAgICAgICB2YWx1ZT17c2VhcmNoLnF1ZXJ5KCl9XG4gICAgICAgICAgICBvbkNoYW5nZT17c2VhcmNoLnVwZGF0ZVF1ZXJ5fVxuICAgICAgICAgICAgb25TdWJtaXQ9e3NlYXJjaC5jb21taXR9XG4gICAgICAgICAgICBvbkNhbmNlbD17c2VhcmNoLmNsb3NlfVxuICAgICAgICAgIC8+fVxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnttYXRjaGVzLmxlbmd0aCA/IGAke3NlYXJjaC5pbmRleCgpICsgMX0vJHttYXRjaGVzLmxlbmd0aH1gIDogJzAvMCd9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFuY2hvciBhcyBDb252ZXJzYXRpb25TY3JvbGxBbmNob3IsIFNlYXJjaE1lc3NhZ2UgYXMgQ29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZSB9XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNvbXBhY3RUcmFuc2NyaXB0UnVucyhpdGVtcywgYWN0aXZlID0gZmFsc2UpIHtcbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7KSB7XG4gICAgaWYgKGl0ZW1zW2ldLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtc1tpXS5raW5kID09PSAndGhvdWdodHMnKSB7XG4gICAgICBsZXQgZW5kID0gaSArIDFcbiAgICAgIHdoaWxlIChlbmQgPCBpdGVtcy5sZW5ndGggJiYgKGl0ZW1zW2VuZF0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW1zW2VuZF0ua2luZCA9PT0gJ3Rob3VnaHRzJykpIGVuZCsrXG4gICAgICBjb25zdCBydW4gPSBpdGVtcy5zbGljZShpLCBlbmQpXG4gICAgICBjb25zdCB0b29scyA9IHJ1bi5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3Rvb2wnKVxuICAgICAgcmVzdWx0LnB1c2goeyBraW5kOiAndG9vbC1ncm91cCcsIGNhbGxJZDogdG9vbHMuYXQoLTEpPy5jYWxsSWQsIGl0ZW1zOiBydW4sIHRvb2xzLCBhY3RpdmU6IGFjdGl2ZSAmJiBlbmQgPT09IGl0ZW1zLmxlbmd0aCB9KVxuICAgICAgaSA9IGVuZFxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKGl0ZW1zW2ldLmtpbmQgPT09ICdub3RpY2UnICYmIGl0ZW1zW2ldLmFnZW50Q29tcGxldGlvbikge1xuICAgICAgbGV0IGVuZCA9IGkgKyAxXG4gICAgICB3aGlsZSAoZW5kIDwgaXRlbXMubGVuZ3RoICYmIGl0ZW1zW2VuZF0ua2luZCA9PT0gJ25vdGljZScgJiYgaXRlbXNbZW5kXS5hZ2VudENvbXBsZXRpb24pIGVuZCsrXG4gICAgICBjb25zdCBydW4gPSBpdGVtcy5zbGljZShpLCBlbmQpXG4gICAgICByZXN1bHQucHVzaChydW4ubGVuZ3RoID09PSAxID8gcnVuWzBdIDogeyBraW5kOiAnYWdlbnQtbm90aWNlLWdyb3VwJywgbm90aWNlczogcnVuIH0pXG4gICAgICBpID0gZW5kXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICByZXN1bHQucHVzaChpdGVtc1tpKytdKVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zY3JpcHRXaW5kb3coaXRlbXMsIHNpemUpIHtcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBpdGVtcy5sZW5ndGggLSBzaXplKVxuICBjb25zdCBoaWRkZW4gPSBpdGVtcy5zbGljZSgwLCBzdGFydClcbiAgcmV0dXJuIHtcbiAgICBpdGVtczogaXRlbXMuc2xpY2Uoc3RhcnQpLFxuICAgIGhpZGRlbkl0ZW1zOiBoaWRkZW4ubGVuZ3RoLFxuICAgIGhpZGRlbkNvdW50OiBoaWRkZW4ucmVkdWNlKCh0b3RhbCwgaXRlbSkgPT4gdG90YWwgKyBzb3VyY2VJdGVtQ291bnQoaXRlbSksIDApLFxuICB9XG59XG5cbmZ1bmN0aW9uIHNvdXJjZUl0ZW1Db3VudChpdGVtKSB7XG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJykgcmV0dXJuIGl0ZW0uaXRlbXMubGVuZ3RoXG4gIGlmIChpdGVtLmtpbmQgPT09ICdhZ2VudC1ub3RpY2UtZ3JvdXAnKSByZXR1cm4gaXRlbS5ub3RpY2VzLmxlbmd0aFxuICBpZiAoaXRlbS5raW5kID09PSAnc3RlZXItdG9vbHMnKSByZXR1cm4gaXRlbS5jb3VudFxuICByZXR1cm4gMVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgQnV0dG9uLCBUZXh0SW5wdXQsIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCwgRkcsIEZHX1NPRlQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBhbnN3ZXJUZXh0KHF1ZXN0aW9uLCBhbnN3ZXIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5qb2luKCcsICcpXG4gIHJldHVybiBhbnN3ZXIgfHwgJ05vdCBhbnN3ZXJlZCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFF1ZXN0aW9uRm9ybSh7IHJlcXVlc3QsIGZvY3VzZWQsIG9uU3VibWl0LCBvbkNhbmNlbCB9KSB7XG4gIGNvbnN0IHF1ZXN0aW9ucyA9IHJlcXVlc3QucXVlc3Rpb25zXG4gIGNvbnN0IHJldmlld2luZyA9IHF1ZXN0aW9ucy5sZW5ndGggPiAxXG4gIGNvbnN0IFtzdGVwLCBzZXRTdGVwXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbYW5zd2Vycywgc2V0QW5zd2Vyc10gPSBjcmVhdGVTaWduYWwoe30pXG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2N1c3RvbSwgc2V0Q3VzdG9tXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jldmlldywgc2V0UmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2NvbnRyb2wsIHNldENvbnRyb2xdID0gY3JlYXRlU2lnbmFsKCdhbnN3ZXInKVxuXG4gIGNvbnN0IHF1ZXN0aW9uID0gKCkgPT4gcXVlc3Rpb25zW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9ICgpID0+IHF1ZXN0aW9uKCkub3B0aW9ucyB8fCBbXVxuICBjb25zdCByb3dzID0gKCkgPT4gWy4uLm9wdGlvbnMoKSwgLi4uKHF1ZXN0aW9uKCkuYWxsb3dPdGhlciA9PT0gZmFsc2UgPyBbXSA6IFt7IGxhYmVsOiAnT3RoZXInLCBvdGhlcjogdHJ1ZSB9XSldXG4gIGNvbnN0IHNlbGVjdGVkID0gKGxhYmVsKSA9PiAoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5pbmNsdWRlcyhsYWJlbClcbiAgY29uc3Qgb3RoZXJBbnN3ZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgYW5zd2VyID0gYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdXG4gICAgY29uc3QgbGFiZWxzID0gbmV3IFNldChvcHRpb25zKCkubWFwKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbCkpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyKSkgcmV0dXJuIGFuc3dlci5maW5kKCh2YWx1ZSkgPT4gIWxhYmVscy5oYXModmFsdWUpKSB8fCAnJ1xuICAgIHJldHVybiBhbnN3ZXIgJiYgIWxhYmVscy5oYXMoYW5zd2VyKSA/IGFuc3dlciA6ICcnXG4gIH1cblxuICBmdW5jdGlvbiBzZXRBbnN3ZXIodmFsdWUpIHtcbiAgICBzZXRBbnN3ZXJzKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBbcXVlc3Rpb24oKS5pZF06IHZhbHVlIH0pKVxuICB9XG5cbiAgZnVuY3Rpb24gYWR2YW5jZSgpIHtcbiAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgc2V0Q3Vyc29yKDApXG4gICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICBpZiAoc3RlcCgpIDwgcXVlc3Rpb25zLmxlbmd0aCAtIDEpIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBlbHNlIGlmIChyZXZpZXdpbmcpIHsgc2V0Q3Vyc29yKHF1ZXN0aW9ucy5sZW5ndGgpOyBzZXRSZXZpZXcodHJ1ZSkgfVxuICAgIGVsc2UgZmluaXNoKClcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICBvblN1Ym1pdChxdWVzdGlvbnMubWFwKChpdGVtKSA9PiAoeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlcjogYW5zd2VycygpW2l0ZW0uaWRdID8/ICcnIH0pKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdFRleHQodmFsdWUpIHtcbiAgICBjb25zdCBhbnN3ZXIgPSB2YWx1ZS50cmltKClcbiAgICBpZiAoIWFuc3dlcikgcmV0dXJuXG4gICAgc2V0QW5zd2VyKGFuc3dlcilcbiAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXIgfV0pXG4gICAgZWxzZSBhZHZhbmNlKClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN1Ym1pdE90aGVyKHZhbHVlKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdmFsdWUudHJpbSgpXG4gICAgY29uc3Qga25vd24gPSBuZXcgU2V0KChpdGVtLm9wdGlvbnMgfHwgW10pLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgIGNvbnN0IGNob2ljZXMgPSBpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAoYW5zd2VycygpW2l0ZW0uaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSA6IFtdXG4gICAgY29uc3QgbmV4dEFuc3dlciA9IGl0ZW0udHlwZSA9PT0gJ211bHRpJyA/IFsuLi5jaG9pY2VzLCAuLi4oYW5zd2VyID8gW2Fuc3dlcl0gOiBbXSldIDogYW5zd2VyXG4gICAgc2V0QW5zd2VyKG5leHRBbnN3ZXIpXG4gICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdzaW5nbGUnICYmIGFuc3dlcikge1xuICAgICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyIH1dKVxuICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICB9XG4gIH1cblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBpZiAoY3VzdG9tKCkpIHsgc2V0Q3VzdG9tKGZhbHNlKTsgc2V0Q29udHJvbCgnYW5zd2VyJykgfVxuICAgICAgZWxzZSBpZiAocmV2aWV3KCkpIHNldFJldmlldyhmYWxzZSlcbiAgICAgIGVsc2Ugb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmV2aWV3KCkpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICd1cCcgfHwgZXZlbnQua2V5ID09PSAnaycpIHNldEN1cnNvcihNYXRoLm1heCgwLCBjdXJzb3IoKSAtIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHNldEN1cnNvcihNYXRoLm1pbihxdWVzdGlvbnMubGVuZ3RoLCBjdXJzb3IoKSArIDEpKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgICBpZiAoY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGgpIGZpbmlzaCgpXG4gICAgICAgIGVsc2UgeyBzZXRTdGVwKGN1cnNvcigpKTsgc2V0Q3Vyc29yKDApOyBzZXRDb250cm9sKCdhbnN3ZXInKTsgc2V0UmV2aWV3KGZhbHNlKSB9XG4gICAgICB9IGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVwKCkgPiAwICYmIChldmVudC5rZXkgPT09ICd0YWInIHx8IGV2ZW50LmtleSA9PT0gJ3NoaWZ0LXRhYicpKSB7XG4gICAgICBzZXRDb250cm9sKGNvbnRyb2woKSA9PT0gJ2JhY2snID8gJ2Fuc3dlcicgOiAnYmFjaycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb250cm9sKCkgPT09ICdiYWNrJykgcmV0dXJuXG4gICAgaWYgKGN1c3RvbSgpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyB8fCBldmVudC5rZXkgPT09ICdzaGlmdC10YWInKSB7XG4gICAgICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocXVlc3Rpb24oKT8udHlwZSA9PT0gJ3RleHQnKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnIHx8IGV2ZW50LmtleSA9PT0gJ2snKSBzZXRDdXJzb3IoTWF0aC5tYXgoMCwgY3Vyc29yKCkgLSAxKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdkb3duJyB8fCBldmVudC5rZXkgPT09ICdqJykgc2V0Q3Vyc29yKE1hdGgubWluKHJvd3MoKS5sZW5ndGggLSAxLCBjdXJzb3IoKSArIDEpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3NwYWNlJyAmJiBxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChyb3cub3RoZXIpIHtcbiAgICAgICAgaWYgKG90aGVyQW5zd2VyKCkpIHtcbiAgICAgICAgICBjb25zdCBrbm93biA9IG5ldyBTZXQob3B0aW9ucygpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgICAgICAgIHNldEFuc3dlcigoYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdKS5maWx0ZXIoKGVudHJ5KSA9PiBrbm93bi5oYXMoZW50cnkpKSlcbiAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgIH0gZWxzZSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBhbnN3ZXJzKClbcXVlc3Rpb24oKS5pZF0gfHwgW11cbiAgICAgICAgc2V0QW5zd2VyKGN1cnJlbnQuaW5jbHVkZXMocm93LmxhYmVsKSA/IGN1cnJlbnQuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHJvdy5sYWJlbCkgOiBbLi4uY3VycmVudCwgcm93LmxhYmVsXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd3MoKVtjdXJzb3IoKV1cbiAgICAgIGlmIChxdWVzdGlvbigpLnR5cGUgPT09ICdtdWx0aScpIGFkdmFuY2UoKVxuICAgICAgZWxzZSBpZiAocm93Lm90aGVyKSBzZXRDdXN0b20odHJ1ZSlcbiAgICAgIGVsc2Uge1xuICAgICAgICBzZXRBbnN3ZXIocm93LmxhYmVsKVxuICAgICAgICBpZiAocXVlc3Rpb25zLmxlbmd0aCA9PT0gMSkgb25TdWJtaXQoW3sgaWQ6IHF1ZXN0aW9uKCkuaWQsIHF1ZXN0aW9uOiBxdWVzdGlvbigpLnF1ZXN0aW9uLCBhbnN3ZXI6IHJvdy5sYWJlbCB9XSlcbiAgICAgICAgZWxzZSBhZHZhbmNlKClcbiAgICAgIH1cbiAgICB9IGVsc2UgcmV0dXJuXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcblxuICBpZiAocmV2aWV3KCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+UmV2aWV3IGFuc3dlcnM8L3RleHQ+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5lbnRlcjogZWRpdCBvciBzdWJtaXQgIGVzYzogYmFjazwvdGV4dD5cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHtxdWVzdGlvbnMubWFwKChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGN1cnNvcigpID09PSBpbmRleCA/IGFjY2VudCgpIDogRkcgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnthbnN3ZXJUZXh0KGl0ZW0sIGFuc3dlcnMoKVtpdGVtLmlkXSl9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgYmc6IGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoID8gYWNjZW50KCkgOiB1bmRlZmluZWQsIGNvbG9yOiBjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCA/ICdibGFjaycgOiBGRywgYm9sZDogdHJ1ZSB9fT4gU3VibWl0IGFuc3dlcnMgPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaXRlbSA9IHF1ZXN0aW9uKClcbiAgY29uc3QgcHJvZ3Jlc3MgPSBxdWVzdGlvbnMubGVuZ3RoID4gMSA/IGAke3N0ZXAoKSArIDF9IG9mICR7cXVlc3Rpb25zLmxlbmd0aH1gIDogJ1F1ZXN0aW9uJ1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICB7c3RlcCgpID4gMCAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgbGFiZWw9XCJCYWNrXCJcbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjb250cm9sKCkgPT09ICdiYWNrJ31cbiAgICAgICAgICAgICAgb25QcmVzcz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFN0ZXAoc3RlcCgpIC0gMSlcbiAgICAgICAgICAgICAgICBzZXRDdXJzb3IoMClcbiAgICAgICAgICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgICAgICAgICAgc2V0Q29udHJvbCgnYW5zd2VyJylcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8dGV4dD4gIDwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKX1cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19Pntwcm9ncmVzc308L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntpdGVtLnR5cGUgPT09ICdtdWx0aScgPyAnc3BhY2U6IHNlbGVjdCAgZW50ZXI6IGNvbnRpbnVlJyA6ICdlbnRlcjogYW5zd2VyJ30gIGVzYzogY2FuY2VsPC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIGJvbGQ6IHRydWUgfX0+e2l0ZW0ucXVlc3Rpb259PC90ZXh0PlxuICAgICAge2l0ZW0uZGVzY3JpcHRpb24gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2l0ZW0uZGVzY3JpcHRpb259PC90ZXh0Pn1cbiAgICAgIHtpdGVtLnR5cGUgPT09ICd0ZXh0JyA/IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogU0VMRUNUX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06dGV4dGB9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGNvbnRyb2woKSA9PT0gJ2Fuc3dlcid9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgeW91ciBhbnN3ZXJcIlxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXt0eXBlb2YgYW5zd2VycygpW2l0ZW0uaWRdID09PSAnc3RyaW5nJyA/IGFuc3dlcnMoKVtpdGVtLmlkXSA6ICcnfVxuICAgICAgICAgICAgb25TdWJtaXQ9e3N1Ym1pdFRleHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApIDogKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAge3Jvd3MoKS5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBTRUxFQ1RfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogY3Vyc29yKCkgPT09IGluZGV4ID8gYWNjZW50KCkgOiBGRyB9fT5cbiAgICAgICAgICAgICAgICB7aXRlbS50eXBlID09PSAnbXVsdGknXG4gICAgICAgICAgICAgICAgICA/IGAke29wdGlvbi5vdGhlciA/IChvdGhlckFuc3dlcigpID8gJ1t4XScgOiAnWyBdJykgOiAoc2VsZWN0ZWQob3B0aW9uLmxhYmVsKSA/ICdbeF0nIDogJ1sgXScpfSBgXG4gICAgICAgICAgICAgICAgICA6IGAke2N1cnNvcigpID09PSBpbmRleCA/ICdcdTIwM0EnIDogJyAnfSBgfXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAge29wdGlvbi5kZXNjcmlwdGlvbiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57YCAgJHtvcHRpb24uZGVzY3JpcHRpb259YH08L3RleHQ+fVxuICAgICAgICAgICAgICB7b3B0aW9uLm90aGVyICYmIChjdXN0b20oKSB8fCBvdGhlckFuc3dlcigpKSAmJiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogY3VzdG9tKCkgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCwgcGFkZGluZ0xlZnQ6IDQgfX0+XG4gICAgICAgICAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICAgICAgICAgIGtleT17YCR7aXRlbS5pZH06b3RoZXJgfVxuICAgICAgICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIGN1c3RvbSgpfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgYW5vdGhlciBhbnN3ZXJcIlxuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU9e290aGVyQW5zd2VyKCl9XG4gICAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXtzdWJtaXRPdGhlcn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuICAgIDwvYm94PlxuICApXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCB1c2VJbnRlcnZhbCwgdXNlTW91c2UsIHVzZVJlc2l6ZSB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5mdW5jdGlvbiBFbXB0eUNsb3VkKHsgd2lkdGgsIGhlaWdodCwgdmVyc2lvbiB9KSB7XG4gIGNvbnN0IFtwaGFzZSwgc2V0UGhhc2VdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt3YWtlLCBzZXRXYWtlXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgbGV0IHByZXZpb3VzID0gbnVsbFxuXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5hY3Rpb24gIT09ICdtb3ZlJyAmJiBldmVudC5hY3Rpb24gIT09ICdkcmFnJykgcmV0dXJuXG4gICAgY29uc3QgeCA9IGV2ZW50LnhcbiAgICBjb25zdCB5ID0gZXZlbnQueVxuICAgIGlmICh4IDwgMCB8fCB4ID49IHdpZHRoIHx8IHkgPCAwIHx8IHkgPj0gaGVpZ2h0KSByZXR1cm5cbiAgICBjb25zdCBkeCA9IHByZXZpb3VzID8geCAtIHByZXZpb3VzLnggOiAwXG4gICAgY29uc3QgZHkgPSBwcmV2aW91cyA/IHkgLSBwcmV2aW91cy55IDogMFxuICAgIHByZXZpb3VzID0geyB4LCB5IH1cbiAgICBjb25zdCBzcGVlZCA9IE1hdGguaHlwb3QoZHggKiAwLjUsIGR5KVxuICAgIGlmIChzcGVlZCA9PT0gMCkgcmV0dXJuXG4gICAgc2V0V2FrZShwb2ludHMgPT4gWy4uLnBvaW50cy5zbGljZSgtMjApLCB7IHgsIHksIGR4LCBkeSwgc3BlZWQ6IE1hdGgubWluKDQsIHNwZWVkKSwgYWdlOiAwIH1dKVxuICB9KVxuXG4gIHVzZUludGVydmFsKCgpID0+IHtcbiAgICBzZXRQaGFzZSh2YWx1ZSA9PiB2YWx1ZSArIDAuMTYpXG4gICAgc2V0V2FrZShwb2ludHMgPT4gcG9pbnRzLm1hcChwb2ludCA9PiAoeyAuLi5wb2ludCwgYWdlOiBwb2ludC5hZ2UgKyAxIH0pKS5maWx0ZXIocG9pbnQgPT4gcG9pbnQuYWdlIDwgMTgpKVxuICB9LCA5MClcblxuICBjb25zdCBnbHlwaHMgPSAnICAuLjo6KysqKlx1MjU5MVx1MjU5MidcbiAgY29uc3Qgcm93cyA9IFtdXG4gIGNvbnN0IGJhc2UgPSBhY2NlbnQoKVxuICBjb25zdCByZ2IgPSAvXiMoWzAtOWEtZl17Nn0pJC9pLmV4ZWMoYmFzZSlcbiAgY29uc3QgbmVpZ2hib3JpbmcgPSByZ2JcbiAgICA/IGAjJHtbXG4gICAgICBNYXRoLm1heCgwLCBwYXJzZUludChyZ2JbMV0uc2xpY2UoMCwgMiksIDE2KSAtIDE4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDIsIDQpLCAxNikgKyA4KSxcbiAgICAgIE1hdGgubWluKDI1NSwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDQsIDYpLCAxNikgKyAyNCksXG4gICAgXS5tYXAodmFsdWUgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbiAgICA6IGJhc2VcblxuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgY29uc3Qgcm93ID0gW11cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgIGNvbnN0IHAgPSBwaGFzZSgpXG4gICAgICBjb25zdCBicm9hZCA9IE1hdGguc2luKHggKiAwLjA4ICsgcCkgKyBNYXRoLnNpbih5ICogMC4yOSAtIHAgKiAwLjcpICsgTWF0aC5zaW4oKHggKyB5KSAqIDAuMDUgKyBwICogMC4zNSlcbiAgICAgIGNvbnN0IHdpc3BzID0gTWF0aC5zaW4oeCAqIDAuMTkgLSB5ICogMC4xMSAtIHAgKiAwLjU1KSArIE1hdGguc2luKHggKiAwLjAzICsgeSAqIDAuNDMgKyBwICogMC40KVxuICAgICAgY29uc3QgcG9ja2V0cyA9IE1hdGguc2luKHggKiAwLjMxICsgcCAqIDAuOCkgKiBNYXRoLnNpbih5ICogMC40NyAtIHAgKiAwLjMpXG4gICAgICBsZXQgYnJvYWREaXNwbGFjZW1lbnQgPSAwXG4gICAgICBsZXQgd2lzcERpc3BsYWNlbWVudCA9IDBcbiAgICAgIGxldCBpbnRlcmFjdGlvbiA9IDBcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygd2FrZSgpKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGguaHlwb3QocG9pbnQuZHggKiAwLjUsIHBvaW50LmR5KSB8fCAxXG4gICAgICAgIGNvbnN0IHV4ID0gcG9pbnQuZHggKiAwLjUgLyBsZW5ndGhcbiAgICAgICAgY29uc3QgdXkgPSBwb2ludC5keSAvIGxlbmd0aFxuICAgICAgICBjb25zdCByeCA9ICh4IC0gcG9pbnQueCkgKiAwLjVcbiAgICAgICAgY29uc3QgcnkgPSB5IC0gcG9pbnQueVxuICAgICAgICBjb25zdCBhbG9uZyA9IHJ4ICogdXggKyByeSAqIHV5XG4gICAgICAgIGNvbnN0IGFjcm9zcyA9IC1yeCAqIHV5ICsgcnkgKiB1eFxuICAgICAgICBjb25zdCB0cmFpbGluZyA9IGFsb25nIDw9IDIgJiYgYWxvbmcgPj0gLTE4IC0gcG9pbnQuc3BlZWQgKiAzXG4gICAgICAgIGlmICghdHJhaWxpbmcpIGNvbnRpbnVlXG4gICAgICAgIGNvbnN0IGFnZSA9IDEgLSBwb2ludC5hZ2UgLyAxOFxuICAgICAgICBjb25zdCB0cmFpbCA9IE1hdGguZXhwKC1NYXRoLnBvdygoYWxvbmcgKyA0ICsgcG9pbnQuYWdlICogMC4zNSkgLyAoNyArIHBvaW50LnNwZWVkICogMiksIDIpKVxuICAgICAgICBjb25zdCBjZW50ZXIgPSBNYXRoLmV4cCgtKGFjcm9zcyAqIGFjcm9zcykgLyA1KVxuICAgICAgICBjb25zdCBlZGdlcyA9IE1hdGguZXhwKC1NYXRoLnBvdyhNYXRoLmFicyhhY3Jvc3MpIC0gMy4yLCAyKSAvIDMpXG4gICAgICAgIGNvbnN0IGZvcmNlID0gYWdlICogdHJhaWwgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjQ1KVxuICAgICAgICBjb25zdCByYWRpYWxEaXN0YW5jZSA9IE1hdGguc3FydChyeCAqIHJ4ICsgcnkgKiByeSlcbiAgICAgICAgY29uc3QgcmlwcGxlRW52ZWxvcGUgPSBNYXRoLmV4cCgtKHJhZGlhbERpc3RhbmNlICogcmFkaWFsRGlzdGFuY2UpIC8gKDM1ICsgcG9pbnQuc3BlZWQgKiAxMikpXG4gICAgICAgIGNvbnN0IHJpcHBsZSA9IE1hdGguc2luKHJhZGlhbERpc3RhbmNlICogMS4zNSAtIHBvaW50LmFnZSAqIDAuNzUpICogcmlwcGxlRW52ZWxvcGUgKiBhZ2VcbiAgICAgICAgd2lzcERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjkgLSBjZW50ZXIpICogZm9yY2UgKiAxLjUgKyByaXBwbGUgKiAoMS4yICsgcG9pbnQuc3BlZWQgKiAwLjI1KVxuICAgICAgICBicm9hZERpc3BsYWNlbWVudCArPSAoZWRnZXMgKiAwLjQ1IC0gY2VudGVyICogMC4zNSkgKiBmb3JjZSAqIDAuNTUgKyByaXBwbGUgKiAwLjI1XG4gICAgICAgIGludGVyYWN0aW9uID0gTWF0aC5tYXgoaW50ZXJhY3Rpb24sIE1hdGguYWJzKHJpcHBsZSkgKiAoMC41ICsgcG9pbnQuc3BlZWQgKiAwLjE1KSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgKFxuICAgICAgICBicm9hZCArIGJyb2FkRGlzcGxhY2VtZW50ICsgKHdpc3BzICsgd2lzcERpc3BsYWNlbWVudCkgKiAwLjY1ICsgcG9ja2V0cyAqIDAuOCArIDMuMlxuICAgICAgKSAvIDcuNCkpXG4gICAgICBjb25zdCBpbmRleCA9IE1hdGgubWluKGdseXBocy5sZW5ndGggLSAxLCBNYXRoLmZsb29yKHZhbHVlICogZ2x5cGhzLmxlbmd0aCkpXG4gICAgICByb3cucHVzaCh7IGdseXBoOiBnbHlwaHNbaW5kZXhdLCBjb2xvcjogaW50ZXJhY3Rpb24gPiAwLjE2ID8gbmVpZ2hib3JpbmcgOiBiYXNlLCBkaW06IGluZGV4IDwgOCB9KVxuICAgIH1cbiAgICByb3dzLnB1c2gocm93KVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIHtyb3dzLm1hcCgocm93LCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaSA9PT0gMSA/ICdwaWNvJyA6IGkgPT09IDIgPyBgdiR7dmVyc2lvbn1gIDogJydcbiAgICAgICAgY29uc3QgaW5CcmFuZEJveCA9IGkgPj0gMSAmJiBpIDw9IDJcbiAgICAgICAgY29uc3QgYm94U3RhcnQgPSAxXG4gICAgICAgIGNvbnN0IGJveFdpZHRoID0gYHYke3ZlcnNpb259YC5sZW5ndGggKyAyXG4gICAgICAgIGNvbnN0IGNsb3VkID0gKGNlbGxzKSA9PiBjZWxscy5tYXAoKGNlbGwsIHgpID0+IChcbiAgICAgICAgICA8dGV4dCBrZXk9e3h9IHN0eWxlPXt7IGNvbG9yOiBjZWxsLmNvbG9yLCBkaW06IGNlbGwuZGltIH19PntjZWxsLmdseXBofTwvdGV4dD5cbiAgICAgICAgKSlcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Ym94IGtleT17aX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgb3ZlcmZsb3c6ICdjbGlwJyB9fT5cbiAgICAgICAgICAgIHtpbkJyYW5kQm94ICYmIGNsb3VkKHJvdy5zbGljZSgwLCBib3hTdGFydCkpfVxuICAgICAgICAgICAge2luQnJhbmRCb3ggJiYgKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiBib3hXaWR0aCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAge2xhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGJvbGQ6IGkgPT09IDEsIGNvbG9yOiBpID09PSAxID8gYWNjZW50KCkgOiBNVVRFRCB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Nsb3VkKHJvdy5zbGljZShpbkJyYW5kQm94ID8gYm94U3RhcnQgKyBib3hXaWR0aCA6IDApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVtcHR5U3RhdGUoeyB2ZXJzaW9uLCBjbG91ZHMgPSBmYWxzZSB9KSB7XG4gIGNvbnN0IFtzaXplLCBzZXRTaXplXSA9IGNyZWF0ZVNpZ25hbCh7IHdpZHRoOiBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwLCBoZWlnaHQ6IHByb2Nlc3Muc3Rkb3V0LnJvd3MgfHwgMjQgfSlcbiAgdXNlUmVzaXplKHNldFNpemUpXG4gIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgc2l6ZSgpLndpZHRoKVxuICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCgxLCBzaXplKCkuaGVpZ2h0IC0gNClcbiAgaWYgKCFjbG91ZHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBib2xkOiB0cnVlLCBjb2xvcjogYWNjZW50KCkgfX0+eycgIHBpY28nfTwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICB2JHt2ZXJzaW9ufWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aCwgaGVpZ2h0IH19PlxuICAgICAgPEVtcHR5Q2xvdWQgd2lkdGg9e3dpZHRofSBoZWlnaHQ9e2hlaWdodH0gdmVyc2lvbj17dmVyc2lvbn0gLz5cbiAgICA8L2JveD5cbiAgKVxufVxuXG4iLCAiaW1wb3J0IHsgTWFya2Rvd24sIFNjcm9sbEJveCwgdXNlSW5wdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVEIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgSEVMUF9URVhUID0gKGNvbW1hbmRzKSA9PiBgcGljbyBpcyBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsLiBJdCByZWFkcywgZWRpdHMsIGFuZCBzZWFyY2hlcyBmaWxlcywgcnVucyBjb21tYW5kcywgYW5kIHN0cmVhbXMgaXRzIHdvcmsgaW50byB0aGlzIHRyYW5zY3JpcHQuXG5cbiMjIENvbW1hbmRzXG5cblR5cGUgXFxgL1xcYCBpbiB0aGUgY29tcG9zZXIgdG8gZmlsdGVyIHRoZXNlIGFzIHlvdSB0eXBlLlxuXG4ke2NvbW1hbmRzLm1hcCgoYykgPT4gYC0gXFxgLyR7Yy5uYW1lfVxcYCAtICR7Yy5kZXNjfWApLmpvaW4oJ1xcbicpfVxuXG5Ud28ga2luZHMgb2YgdXNlci1kZWZpbmVkIGVudHJpZXMgam9pbiB0aGlzIG1lbnU6XG5cbi0gKipjb21tYW5kcyoqIChcXGB+Ly5waWNvL2NvbW1hbmRzLzxuYW1lPi5tZFxcYCBvciBcXGAucGljby9jb21tYW5kcy88bmFtZT4ubWRcXGApOiBwcm9tcHQgdGVtcGxhdGVzIHlvdSBpbnZva2UgYXMgXFxgLzxuYW1lPiBbYXJnc11cXGAuIFxcYCRBUkdVTUVOVFNcXGAgaW4gdGhlIGJvZHkgaXMgcmVwbGFjZWQgd2l0aCB3aGF0ZXZlciBmb2xsb3dzIHRoZSBjb21tYW5kOyB3aXRob3V0IGEgcGxhY2Vob2xkZXIsIGFyZ3MgYXJlIGFwcGVuZGVkLiBUaGUgbW9kZWwgbmV2ZXIgc2VlcyB0aGVzZSB1bnRpbCB5b3UgcnVuIG9uZS5cbi0gKipza2lsbHMqKiAoXFxgfi8ucGljby9za2lsbHMvPG5hbWU+L1NLSUxMLm1kXFxgIG9yIFxcYC5waWNvL3NraWxscy88bmFtZT4vU0tJTEwubWRcXGApOiBjYXBhYmlsaXRpZXMgd2l0aCBhIG5hbWUgYW5kIGRlc2NyaXB0aW9uLiBZb3UgY2FuIGludm9rZSB0aGVtIGxpa2UgY29tbWFuZHMsIGFuZCB0aGUgYWdlbnQgY2FuIGFsc28gZGlzY292ZXIgYW5kIGxvYWQgdGhlbSBpdHNlbGYgdmlhIHRoZSBza2lsbCB0b29sLlxuLSAqKnRvb2xzKiogKFxcYH4vLnBpY28vdG9vbHMvPG5hbWU+LmpzXFxgIG9yIFxcYC5waWNvL3Rvb2xzLzxuYW1lPi5qc1xcYCk6IEVTIG1vZHVsZXMgZGVmYXVsdC1leHBvcnRpbmcgXFxgeyBuYW1lLCBkZXNjcmlwdGlvbiwgc2NoZW1hLCBleGVjdXRlIH1cXGAgKG9yIGEgZmFjdG9yeSByZWNlaXZpbmcgXFxgeyBjd2QsIHJvb3QgfVxcYCkuIFRoZXkgam9pbiB0aGUgYWdlbnQncyB0b29sc2V0IGFuZCBhcmUgcmVzY2FubmVkIGV2ZXJ5IHR1cm4sIHNvIGVkaXRzIGFwcGx5IG9uIHRoZSBuZXh0IG1lc3NhZ2UuIEFzayB0aGUgYWdlbnQgdG8gYnVpbGQgb25lIGZvciB5b3U6IHRoZSBidWlsdC1pbiBcXGAvbmV3LXRvb2xcXGAgc2tpbGwgdGVhY2hlcyBpdCB0aGUgZm9ybWF0LlxuXG5JbiB0aGUgTUNQIHBhbmVsOiBlbnRlciBlbmFibGVzL2Rpc2FibGVzIGEgc2VydmVyIChkaXNhYmxlZCBpcyBzdGlja3kgYWNyb3NzIHJlc3RhcnRzIC0gY29uZmlnIGtlcHQsIG5vIGNvbm5lY3Rpb24sIG5vIHRvb2xzIG9mZmVyZWQgdG8gdGhlIG1vZGVsLCBwZXIgcHJvamVjdCksIFxcYHRcXGAgbGlzdHMgaXRzIHRvb2xzLCBcXGByXFxgIHJlY29ubmVjdHMsIFxcYGFcXGAgYWRkcywgXFxgY3RybCt4XFxgIHJlbW92ZXMgKHByZXNzIHR3aWNlKS4gVW5maWx0ZXJlZCBsaXN0cyAoZWZmb3J0LCByZXdpbmQgb3B0aW9ucywgTUNQKSBhbHNvIG1vdmUgd2l0aCBcXGBqXFxgL1xcYGtcXGAgYW5kIGp1bXAgd2l0aCBcXGBnXFxgL1xcYEdcXGAuXG5cbiMjIENvbXBvc2VyXG5cbi0gXFxgY3RybCt2XFxgOiBBdHRhY2ggY2xpcGJvYXJkIGltYWdlXG4tIFxcYGN0cmwrb1xcYDogQ2FwdHVyZSBzY3JlZW4gcmVnaW9uIChtYWNPUylcbi0gXFxgY3RybCtnXFxgOiBSZWNvcmQgKG1hY09TKVxuLSBcXGBlbnRlclxcYDogVHJhbnNjcmliZSByZWNvcmRpbmdcbi0gXFxgZXNjXFxgOiBDYW5jZWwgZGljdGF0aW9uXG5cbi0gXFxgZW50ZXJcXGAgc2VuZHM7IFxcYHNoaWZ0K2VudGVyXFxgIG9yIFxcYFxcXFw8ZW50ZXI+XFxgIGluc2VydHMgYSBuZXdsaW5lXG4tIFxcYEBcXGAgb3BlbnMgYSBmdXp6eSBmaWxlIHBpY2tlcjsgZW50ZXIgaW5zZXJ0cyB0aGUgc2VsZWN0ZWQgcGF0aFxuLSBkcmFnIGFuIGltYWdlIGZpbGUgaW50byB0aGUgdGVybWluYWwgdG8gYXR0YWNoIGl0OiBpdCBhcHBlYXJzIGlubGluZSBhcyBcXGBbSW1hZ2UgI05dXFxgLCBleGFjdGx5IHdoZXJlIHlvdXIgY3Vyc29yIGlzLCBzbyBpbWFnZXMgY2FuIHNpdCBiZXR3ZWVuIHNlbnRlbmNlczsgYmFja3NwYWNlIGFmdGVyIG9uZSByZW1vdmVzIHRoZSB3aG9sZSBhdHRhY2htZW50XG4tIFxcYHRhYlxcYCBjb21wbGV0ZXM6IFxcYC9zdW1tPHRhYj5cXGAgZmluaXNoZXMgdGhlIGNvbW1hbmQgbmFtZSBhbmQgY3ljbGVzIHRocm91Z2ggbWF0Y2hlcyBvbiByZXBlYXQ7IGFmdGVyIGFuIGFyZ3VtZW50IHNwYWNlIGl0IGNvbXBsZXRlcyB2YWx1ZXMgKFxcYC9tb2RlbCBmbGE8dGFiPlxcYCwgXFxgL2NvbG9yIDx0YWI+XFxgLCBcXGAvZWZmb3J0IDx0YWI+XFxgKSBhbmQgZmlsZSBwYXRocyBmb3Igc2tpbGxzIGFuZCBjb21tYW5kcy4gS2VlcCB0eXBpbmcgdG8gbmFycm93LCB0YWIgb3IgZW50ZXIgaW5zZXJ0c1xuLSBcXGB1cFxcYCBhbmQgXFxgZG93blxcYCBvbiBhbiBlbXB0eSBjb21wb3NlciByZWNhbGwgbWVzc2FnZXMgeW91IGFscmVhZHkgc2VudFxuLSBcXGBjdHJsK3JcXGAgb3BlbnMgcmV3aW5kIChzYW1lIGFzIFxcYC9yZXdpbmRcXGApOyBcXGAvaGlzdG9yeVxcYCBmdXp6eS1zZWFyY2hlcyB5b3VyIG9sZCBwcm9tcHRzIGFuZCBwdXRzIHRoZSBzZWxlY3RlZCBvbmUgYmFjayBpbiB0aGUgY29tcG9zZXJcbi0gXFxgY3RybCtzXFxgIG9wZW5zIHRoZSBzZXNzaW9uIHBpY2tlciAoc2FtZSBhcyBcXGAvcmVzdW1lXFxgKTsgXFxgY3RybCt0XFxgIG9wZW5zIHRoZSBtb2RlbCBwaWNrZXJcbi0gXFxgY3RybCtwXFxgIHN3aXRjaGVzIHByb2plY3RzOiBwaWNrIG9uZSBhbmQgcGljbyBqdW1wcyB0byBpdHMgbW9zdCByZWNlbnQgc2Vzc2lvbiwgY2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB0b29scywgY29udGV4dCwgYW5kIE1DUCBzZXJ2ZXJzIHRvIG1hdGNoOyBcXGBjdHJsK3hcXGAgdHdpY2UgZGVsZXRlcyBhIHByb2plY3QncyBwaWNvIGhpc3RvcnkgKGFsbCBpdHMgc2Vzc2lvbnMgYW5kIG1lbW9yaWVzKTsgXFxgL25ld1xcYCBzdGFydHMgYSBmcmVzaCBzZXNzaW9uIGluIHRoZSBjdXJyZW50IHByb2plY3Rcbi0gXFxgY3RybCtiXFxgIGN5Y2xlcyB0aGlua2luZyBlZmZvcnQgKGRlZmF1bHQsIGxvdywgbWVkaXVtLCBoaWdoLCBtYXgpIG9uIG1vZGVscyB0aGF0IHN1cHBvcnQgaXQ7IFxcYC9lZmZvcnRcXGAgb3BlbnMgdGhlIGZ1bGwgcGlja2VyXG4tIGluc2lkZSBhIHNlYXJjaCBwYW5lbCwgXFxgY3RybCtzXFxgIGN5Y2xlcyB0aGUgc2NvcGUgaW5zdGVhZDogdGhpcyBzZXNzaW9uLCB0aGlzIHByb2plY3QsIG9yIGV2ZXJ5d2hlcmVcbi0gXFxgL3Jld2luZFxcYCByZXN0b3JlcyB0aGUgY29udmVyc2F0aW9uIHRvIGFuIGVhcmxpZXIgbWVzc2FnZTsgYSByZXdpbmQgY2FuIGJlIHVuZG9uZSB3aXRoIFxcYGN0cmwrelxcYFxuLSBtZXNzYWdlcyBzZW50IHdoaWxlIHRoZSBhZ2VudCBpcyByZXNwb25kaW5nIHF1ZXVlIHVwIGFib3ZlIHRoZSBjb21wb3NlciBhbmQgYXJlIGRlbGl2ZXJlZCBhcyBvbmUgbWVzc2FnZSB3aGVuIHRoZSB0dXJuIGZpbmlzaGVzOyBcXGB1cFxcYCBwdWxscyB0aGVtIGJhY2sgZm9yIGVkaXRpbmdcbi0gXFxgZXNjXFxgIGludGVycnVwdHMgYSBzdHJlYW1pbmcgcmVzcG9uc2UsIG9yIGNsZWFycyB0aGUgY29tcG9zZXIgd2hlbiBpZGxlXG5cbiMjIE1vdmluZyBhcm91bmRcblxuLSBcXGB0YWJcXGAgc3dpdGNoZXMgZm9jdXMgYmV0d2VlbiB0aGUgdHJhbnNjcmlwdCBhbmQgdGhlIGNvbXBvc2VyXG4tIHdpdGggdGhlIHRyYW5zY3JpcHQgZm9jdXNlZCwgXFxgdXBcXGAvXFxgZG93blxcYC9cXGBqXFxgL1xcYGtcXGAgc2Nyb2xsIGFuZCBcXGBnXFxgL1xcYEdcXGAganVtcCB0byB0aGUgZW5kc1xuLSBsb25nIHNlc3Npb25zIHJlbmRlciBvbmx5IHRoZSBuZXdlc3QgNTAgbWVzc2FnZXM7IHNjcm9sbGluZyB0byB0aGUgdmVyeSB0b3AgbG9hZHMgb2xkZXIgb25lcyBpbiBiYXRjaGVzICh0aGUgdG9wIGxpbmUgc2hvd3MgaG93IG1hbnkgYXJlIGhpZGRlbilcbi0gdGhlIG1vdXNlIHdoZWVsIHNjcm9sbHM7IGNsaWNrLWRyYWcgc2VsZWN0cyB0ZXh0IGFuZCBjb3BpZXMgaXQgb24gcmVsZWFzZVxuLSBcXGBjdHJsK2NcXGAgdHdpY2UgZXhpdHNcblxuIyMgU2hlbGxzXG5cblRoZSBhZ2VudCBjYW4gcnVuIGxvbmctbGl2ZWQgcHJvY2Vzc2VzIChkZXYgc2VydmVycywgd2F0Y2hlcnMpIHdpdGggXFxgYmFzaCBiYWNrZ3JvdW5kOiB0cnVlXFxgLCB0aGVuIHJlYWQgdGhlaXIgb3V0cHV0IGFuZCBzdG9wIHRoZW0gaXRzZWxmLiBTaGVsbHMgYXBwZWFyIGJlbG93IHRoZSBjb21wb3NlciBhbmQgcmVtYWluIHRoZXJlIGFmdGVyIGV4aXQ6IHRhYiBmb2N1c2VzIHRoZSBsaXN0LCBqL2sgbW92ZXMsIGVudGVyIG9wZW5zIHRoZSBjb21tYW5kIGFuZCBsaXZlIG91dHB1dCwgYW5kIFxcYGN0cmwreFxcYCBraWxscyBhIHJ1bm5pbmcgc2hlbGwgb3IgZGlzbWlzc2VzIGEgZmluaXNoZWQgb25lLiBXaGVuIGEgc2hlbGwgZXhpdHMgb24gaXRzIG93biwgdGhlIGFnZW50IGlzIG5vdGlmaWVkIGFuZCByZXNwb25kczsgc2hlbGxzIGRpZSB3aXRoIHBpY28sIGFuZCBxdWl0dGluZyB3YXJucyB5b3UgaWYgYW55IGFyZSBzdGlsbCB1cC5cblxuIyMgU3Vic2NyaXB0aW9uc1xuXG5cXGAvY29ubmVjdFxcYCBsaXN0cyBzdWJzY3JpcHRpb24gcHJvdmlkZXJzIHlvdSBjYW4gc2lnbiBpbiB3aXRoIGluc3RlYWQgb2YgQVBJIGtleXMuIE9wZW5BSSAoQ2hhdEdQVCAvIENvZGV4IHBsYW4pIHNpZ25zIGluIHRocm91Z2ggeW91ciBicm93c2VyIHZpYSBPQXV0aDsgdG9rZW5zIGFyZSBzdG9yZWQgaW4gXFxgfi8ucGljby9hdXRoLmpzb25cXGAgYW5kIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5LCBzbyB5b3Ugc2lnbiBpbiBvbmNlLiBPbmNlIGNvbm5lY3RlZCwgY29kZXggbW9kZWxzIGFwcGVhciBpbiBcXGAvbW9kZWxcXGAsIGJpbGxlZCB0byB5b3VyIHBsYW4uIFxcYGRcXGAgaW4gdGhlIHBhbmVsIGRpc2Nvbm5lY3RzLlxuXG4jIyBNZW1vcnlcblxuVGhlIGFnZW50IHNhdmVzIGR1cmFibGUgZmFjdHMgd2l0aCB0aGUgcmVtZW1iZXIgdG9vbDogb25lIGZpbGUgcGVyIG1lbW9yeSB1bmRlciBcXGB+Ly5waWNvL21lbW9yeVxcYCAoZ2xvYmFsKSBvciB0aGUgcHJvamVjdCdzIGRpcmVjdG9yeSBpbiBcXGB+Ly5waWNvL3Byb2plY3RzXFxgLiBPbmx5IGEgb25lLWxpbmUgaW5kZXggaXMgaW4gaXRzIGNvbnRleHQ7IGl0IGxvYWRzIGEgc3BlY2lmaWMgbWVtb3J5IHdpdGggdGhlIHJlY2FsbCB0b29sIHdoZW4gcmVsZXZhbnQuIFxcYC9tZW1vcnlcXGAgbGlzdHMgZXZlcnl0aGluZyBpdCBrbm93cyB3aXRoIGEgY29udGVudCBwcmV2aWV3OiBcXGBjdHJsK3NcXGAgY3ljbGVzIHRoZSBzY29wZSBmaWx0ZXIgKGFsbCwgcHJvamVjdCwgZ2xvYmFsKSBhbmQgXFxgY3RybCt4XFxgIHR3aWNlIGZvcmdldHMgdGhlIHNlbGVjdGVkIG1lbW9yeS4gWW91IGNhbiBhbHNvIGFzayB0aGUgYWdlbnQgdG8gcmVtZW1iZXIsIGZvcmdldCwgb3IgY2xlYW4gdXAgaXRzIG1lbW9yaWVzIGluIHBsYWluIGxhbmd1YWdlLlxuXG4jIyBXYWtlLXVwc1xuXG5UaGUgYWdlbnQgY2FuIHNjaGVkdWxlIG9uZS10aW1lIHdha2UtdXBzIGZvciBpdHNlbGYgd2l0aCB0aGUgc2NoZWR1bGVfd2FrZXVwIHRvb2w6IGFmdGVyIHRoZSBkZWxheSBpdCByZWNlaXZlcyBpdHMgb3duIG5vdGUgYXMgYSBzeXN0ZW0gbm90aWZpY2F0aW9uIGFuZCBhY3RzIG9uIGl0LiBSZWN1cnJpbmcgbG9vcHMgYXJlIGp1c3QgdGhlIGFnZW50IHJlc2NoZWR1bGluZyBhdCB0aGUgZW5kIG9mIGVhY2ggd2FrZS11cC4gXFxgL3dha2V1cHNcXGAgbGlzdHMgcGVuZGluZyBvbmVzIHdpdGggbGl2ZSBjb3VudGRvd25zOyBlbnRlciBvciBcXGBjdHJsK3hcXGAgY2FuY2VscyAocHJlc3MgdHdpY2UpLiBBIFxcYFx1MjNGMCBOXFxgIGluIHRoZSBmb290ZXIgc2hvd3MgaG93IG1hbnkgYXJlIHBlbmRpbmcuIFdha2UtdXBzIGxpdmUgaW4gbWVtb3J5IGFuZCBhcmUgbG9zdCB3aGVuIHBpY28gZXhpdHMuXG5cbiMjIEFwcGVhcmFuY2VcblxucGljbyBwaWNrcyBhIGxpZ2h0IG9yIGRhcmsgcGFsZXR0ZSBhdCBzdGFydHVwIGJ5IGFza2luZyB0aGUgdGVybWluYWwgZm9yIGl0cyBiYWNrZ3JvdW5kIGNvbG9yIChPU0MgMTEpLCBzbyBpdCBtYXRjaGVzIHdoYXRldmVyIHRoZW1lIHlvdXIgdGVybWluYWwgdXNlcy4gXFxgL3RoZW1lXFxgIG9wZW5zIGEgcGlja2VyIHRoYXQgcHJldmlld3MgZWFjaCB0aGVtZSBhcyB5b3UgbW92ZSBhbmQgcGVyc2lzdHMgeW91ciBjaG9pY2UgaW4gXFxgfi8ucGljby9jb25maWcuanNvblxcYDsgXFxgL3RoZW1lIGxpZ2h0XFxgLCBcXGAvdGhlbWUgZGFya1xcYCwgb3IgXFxgL3RoZW1lIGF1dG9cXGAgYXBwbGllcyBvbmUgZGlyZWN0bHkuIFxcYC9jb2xvclxcYCB0aW50cyBhIHNpbmdsZSBzZXNzaW9uJ3MgYWNjZW50IGFuZCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgcGFsZXR0ZS5cblxuIyMgQ29udGV4dFxuXG5waWNvIHJlYWRzIEFHRU5UUy5tZCBmaWxlcyBhdXRvbWF0aWNhbGx5OiBhIGdsb2JhbCBvbmUgZnJvbSB+Ly5waWNvLCB0aGVuIGV2ZXJ5IGFuY2VzdG9yIG9mIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgdXAgdG8gdGhlIGdpdCByb290LiBEZWVwZXIgZmlsZXMgd2luLiBBR0VOVFMubWQgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMgbG9hZCBsYXppbHkgdGhlIGZpcnN0IHRpbWUgYSB0b29sIHRvdWNoZXMgdGhhdCBzdWJ0cmVlLiBJbiBhbnkgcHJvamVjdCBkaXJlY3Rvcnkgd2l0aG91dCBhbiBBR0VOVFMubWQsIGEgQ0xBVURFLm1kIGlzIGhvbm9yZWQgYXMgYSBmYWxsYmFjayBzbyBleGlzdGluZyByZXBvcyB3b3JrIHVuY2hhbmdlZDsgQUdFTlRTLm1kIGFsd2F5cyB3aW5zIHdoZW4gYm90aCBleGlzdCwgYW5kIHRoZSBmYWxsYmFjayBuZXZlciBhcHBsaWVzIHRvIHRoZSBnbG9iYWwgZmlsZS5cblxuU2Vzc2lvbnMgYXJlIHN0b3JlZCB1bmRlciB+Ly5waWNvIGFzIGpzb25sIGV2ZW50IGxvZ3M7IFxcYC9yZXN1bWVcXGAgZm9sZHMgb25lIGJhY2sgaW50byBleGFjdGx5IHRoaXMgdmlldy5cblxuXFxgL2NvbnRleHRcXGAgYnJlYWtzIGRvd24gd2hhdCB0aGUgbmV4dCByZXF1ZXN0IHdpbGwgY29udGFpbiAtIHN5c3RlbSBwcm9tcHQsIHRvb2wgc2NoZW1hcywgcHJvamVjdCBpbnN0cnVjdGlvbnMsIG1lbW9yeSBpbmRleCwgY29tcGFjdGlvbiBzdW1tYXJ5LCBhbmQgY29udmVyc2F0aW9uIC0gd2l0aCBhbiBlc3RpbWF0ZWQgc2l6ZSBmb3IgZWFjaCBwaWVjZSBuZXh0IHRvIHRoZSBwcm92aWRlci1tZWFzdXJlZCB0b3RhbC5cblxuVGhlIGZvb3RlcidzIFxcYGN0eCAlXFxgIHNob3dzIGhvdyBmdWxsIHRoZSBtb2RlbCdzIGNvbnRleHQgaXMuIEF0IDg1JSBwaWNvIGF1dG8tY29tcGFjdHM6IHRoZSBvbGRlciBjb252ZXJzYXRpb24gaXMgc3VtbWFyaXplZCBpbiBhIHN0cnVjdHVyZWQgZm9ybSwgdGhlIG1vc3QgcmVjZW50IHR1cm5zIGFyZSBrZXB0IHZlcmJhdGltLCBhbmQgdGhlIG1vZGVsIGlzIHRvbGQgd2hlcmUgdGhlIGZ1bGwgc2Vzc2lvbiBmaWxlIGxpdmVzIHNvIGl0IGNhbiByZWFkIGV4YWN0IGRldGFpbHMgYmFjayBvbiBkZW1hbmQuIE5vdGhpbmcgdmlzaWJsZSBjaGFuZ2VzIGluIHRoZSB0cmFuc2NyaXB0LCBhbmQgcmV3aW5kIHN0aWxsIHdvcmtzIGFjcm9zcyBpdC4gXFxgL2NvbXBhY3RcXGAgcnVucyBpdCBtYW51YWxseSBhbmQgdGFrZXMgb3B0aW9uYWwgZm9jdXMgaW5zdHJ1Y3Rpb25zIChcXGAvY29tcGFjdCBmb2N1cyBvbiB0aGUgQVBJIGNoYW5nZXNcXGApLiBTZXQgXFxgXCJhdXRvQ29tcGFjdFwiOiBmYWxzZVxcYCBpbiBcXGB+Ly5waWNvL2NvbmZpZy5qc29uXFxgIHRvIGRpc2FibGUgdGhlIGF1dG9tYXRpYyB0cmlnZ2VyLlxuXG4tLS1cblxuKmVzYyB0YWtlcyB5b3UgYmFjayB0byB0aGUgY29udmVyc2F0aW9uKmBcblxuZXhwb3J0IGZ1bmN0aW9uIEhlbHAoeyBjb21tYW5kcywgb25DbG9zZSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnMTAwJScsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5waWNvICBoZWxwPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5cdTIxOTFcdTIxOTMgc2Nyb2xsICBlc2MgYmFjazwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZCBzY3JvbGxiYXI+XG4gICAgICAgIDxNYXJrZG93biB0ZXh0PXtIRUxQX1RFWFQoY29tbWFuZHMpfSBjb2RlQmc9e251bGx9IC8+XG4gICAgICA8L1Njcm9sbEJveD5cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgQnV0dG9uLCBDaGVja2JveCwgZWFzZSwgRmllbGQsIEZpZWxkTGlzdCwgTWVudSwgTnVtYmVySW5wdXQsIFBpY2tMaXN0LCBSYWRpbywgU2Nyb2xsQm94LCBUZXh0SW5wdXQsIHVzZUFuaW1hdGVkLCB1c2VGb2N1cywgdXNlSW5wdXQsIHVzZUludGVydmFsLCB1c2VMYXlvdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFNFTEVDVF9CRywgUkVELCBHUkVFTiB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyBBbmltYXRlZFZhbHVlIH0gZnJvbSAnLi9hbmltYXRlZC12YWx1ZS5qc3gnXG5pbXBvcnQgeyBjb250ZXh0QmFyIH0gZnJvbSAnLi9jb250ZXh0LWJhci5qcydcbmltcG9ydCB7IGNvbXBhY3ROdW1iZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Zvcm1hdC5qcydcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgZnV6enlTY29yZSwgcmFua0Z1enp5IH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcbmltcG9ydCB7IGZvcm1hdEh0dHBTZXJ2ZXJTcGVjLCBwYXJzZVNlcnZlclNwZWMsIHJlZGFjdFNlcnZlclNwZWMsIFJFREFDVEVEX0hFQURFUiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbWNwLmpzJ1xuXG5mdW5jdGlvbiBzaG9ydGVuSG9tZShwYXRoKSB7XG4gIGNvbnN0IHZhbHVlID0gU3RyaW5nKHBhdGgpXG4gIGNvbnN0IGhvbWUgPSBob21lZGlyKClcbiAgcmV0dXJuIHZhbHVlID09PSBob21lIHx8IHZhbHVlLnN0YXJ0c1dpdGgoYCR7aG9tZX0vYCkgPyBgfiR7dmFsdWUuc2xpY2UoaG9tZS5sZW5ndGgpfWAgOiB2YWx1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZUFnbyhhdCkge1xuICBjb25zdCBzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIGF0KSAvIDEwMDApKVxuICBpZiAocyA8IDYwKSByZXR1cm4gYCR7c31zIGFnb2BcbiAgY29uc3QgbSA9IE1hdGguZmxvb3IocyAvIDYwKVxuICBpZiAobSA8IDYwKSByZXR1cm4gYCR7bX1tIGFnb2BcbiAgY29uc3QgaCA9IE1hdGguZmxvb3IobSAvIDYwKVxuICBpZiAoaCA8IDI0KSByZXR1cm4gYCR7aH1oIGFnb2BcbiAgcmV0dXJuIGAke01hdGguZmxvb3IoaCAvIDI0KX1kIGFnb2Bcbn1cblxuZnVuY3Rpb24gUGFuZWxEaXZpZGVyKCkge1xuICByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IFNFTEVDVF9CRywgb3ZlcmZsb3c6ICdjbGlwJyB9fT57J1x1MjUwMCcucmVwZWF0KHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApfTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gUGFuZWxGcmFtZSh7IHRpdGxlLCBoaW50LCByaWdodCwgZnVsbFNjcmVlbiA9IGZhbHNlLCBjaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBoZWlnaHQ6IGZ1bGxTY3JlZW4gPyAnMTAwJScgOiB1bmRlZmluZWQgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgcGFkZGluZ1RvcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+e3RpdGxlfTwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAge3JpZ2h0fVxuICAgICAgICA8L2JveD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntoaW50fTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPFBhbmVsRGl2aWRlciAvPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IGZ1bGxTY3JlZW4gPyAwIDogMiwgcGFkZGluZ0JvdHRvbTogMSwgZmxleEdyb3c6IGZ1bGxTY3JlZW4gPyAxIDogdW5kZWZpbmVkIH19PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29uZmlybVBhbmVsKHsgdGl0bGUsIG1lc3NhZ2UsIGNvbmZpcm1MYWJlbCA9ICdDb25maXJtJywgZm9jdXNlZCwgb25Db25maXJtLCBvbkNsb3NlIH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgb25Db25maXJtKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PXtgZW50ZXI6ICR7Y29uZmlybUxhYmVsLnRvTG93ZXJDYXNlKCl9ICBlc2M6IGNhbmNlbGB9PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e21lc3NhZ2V9PC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVELCBib2xkOiB0cnVlIH19PlRoaXMgY2Fubm90IGJlIHVuZG9uZS48L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29uZmlnRmllbGQoeyBmaWVsZCwgdmFsdWUsIGZvY3VzZWQsIG9uQ2hhbmdlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8Q2hlY2tib3ggY2hlY2tlZD17dmFsdWV9IGxhYmVsPXtmaWVsZC5sYWJlbH0gZm9jdXNlZD17Zm9jdXNlZH0gb25DaGFuZ2U9e29uQ2hhbmdlfSAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZmllbGQucGF0aH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgICAke2ZpZWxkLmRlc2N9YH08L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29uZmlnTnVtYmVyRmllbGQoeyB2YWx1ZSwgZm9jdXNlZCwgb25DaGFuZ2UgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxOdW1iZXJJbnB1dCBmb2N1c2VkPXtmb2N1c2VkfSB2YWx1ZT17dmFsdWV9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gbWluPXsxfSBtYXg9ezEwMH0gd2lkdGg9ezV9IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT4gUGFyYWxsZWwgYWdlbnQgbGltaXQ8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnJlc2VhcmNoLmFnZW50TGltaXQ8L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT4gICAgTWF4aW11bSBhZ2VudHMgcGVyIHBhcmFsbGVsIHJ1biAoMS0xMDApPC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ01vZGVsRmllbGQoeyBtb2RlbCwgbGFiZWwsIHBhdGgsIGZvY3VzZWQsIG9uUGljayB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD17bGFiZWx9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uUHJlc3M9e29uUGlja30gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3BhdGh9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICAgJHttb2RlbCB8fCAnTm90IGNvbmZpZ3VyZWQnfWB9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25maWdQYW5lbCh7IHZhbHVlcywgZm9jdXNlZCwgb25DaGFuZ2UsIG9uUGlja1Jlc2VhcmNoTW9kZWwsIG9uUGlja1NoZWxsTW9kZWwsIG9uUGlja0RlbGliZXJhdGlvbk1vZGVsLCBvblBpY2tQYXJ0aWNpcGFudE1vZGVsLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgZmllbGRzID0gW1xuICAgIHsgbmFtZTogJ2Nsb3VkcycsIGxhYmVsOiAnQ2xvdWQgYW5pbWF0aW9uJywgZGVzYzogJ1Nob3cgYW5pbWF0ZWQgY2xvdWRzIG9uIHRoZSBlbXB0eSBzY3JlZW4nLCBwYXRoOiAnYW5pbWF0aW9uLmNsb3VkcycgfSxcbiAgICB7IG5hbWU6ICdjb21wYWN0VG9vbHMnLCBsYWJlbDogJ0NvbXBhY3QgdG9vbCBoaXN0b3J5JywgZGVzYzogJ1N1bW1hcml6ZSBjb25zZWN1dGl2ZSB0b29sIGNhbGxzIGluIG9uZSByb3cnLCBwYXRoOiAnZGlzcGxheS5jb21wYWN0VG9vbEhpc3RvcnknIH0sXG4gICAgeyBuYW1lOiAnZ2l0U3RhdHVzJywgbGFiZWw6ICdHaXQgaW4gZm9vdGVyJywgZGVzYzogJ1Nob3cgYnJhbmNoIGFuZCBjaGFuZ2VkIGxpbmUgY291bnRzIGluIHRoZSBmb290ZXInLCBwYXRoOiAnZGlzcGxheS5naXRTdGF0dXMnIH0sXG4gICAgeyBuYW1lOiAnd2lkZVNpZGViYXInLCBsYWJlbDogJ1dpZGUgc2lkZWJhcicsIGRlc2M6ICdNb3ZlIHBhbmVscyBhbmQgc3RhdHVzIGRldGFpbHMgdG8gYSByaWdodCBzaWRlYmFyIHdoZW4gdGhlIHRlcm1pbmFsIGlzIHdpZGVyIHRoYW4gMTYwIGNvbHVtbnMnLCBwYXRoOiAnZGlzcGxheS53aWRlU2lkZWJhcicgfSxcbiAgXVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIkNvbmZpZ3VyYXRpb25cIiBoaW50PVwidGFiOiBuZXh0IHNldHRpbmcgIHNwYWNlL2VudGVyOiBjaGFuZ2UgIGVzYzogY2xvc2VcIiBmdWxsU2NyZWVuPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPEZpZWxkTGlzdCBmb2N1c2VkPXtmb2N1c2VkfSBpbml0aWFsRm9jdXM9XCJjbG91ZHNcIiBzY3JvbGxiYXIgZm9jdXNQYWRkaW5nPXsxfT5cbiAgICAgICAgICB7ZmllbGRzLm1hcCgoZmllbGQpID0+IChcbiAgICAgICAgICAgIDxGaWVsZCBrZXk9e2ZpZWxkLm5hbWV9IG5hbWU9e2ZpZWxkLm5hbWV9PlxuICAgICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlnRmllbGQgZmllbGQ9e2ZpZWxkfSB2YWx1ZT17dmFsdWVzW2ZpZWxkLm5hbWVdfSBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uQ2hhbmdlPXsodmFsdWUpID0+IG9uQ2hhbmdlKGZpZWxkLm5hbWUsIHZhbHVlKX0gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJyZXNlYXJjaE1vZGVsXCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdNb2RlbEZpZWxkIG1vZGVsPXt2YWx1ZXMucmVzZWFyY2hNb2RlbH0gbGFiZWw9XCJQYXJhbGxlbCB3b3JrZXIgbW9kZWxcIiBwYXRoPVwibW9kZWxzLnJlc2VhcmNoV29ya2VyXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja1Jlc2VhcmNoTW9kZWx9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJzaGVsbE1vZGVsXCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdNb2RlbEZpZWxkIG1vZGVsPXt2YWx1ZXMuc2hlbGxNb2RlbH0gbGFiZWw9XCJTaGVsbCBtb2RlbFwiIHBhdGg9XCJtb2RlbHMuc2hlbGxcIiBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17b25QaWNrU2hlbGxNb2RlbH0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICB7WydwYXJ0aWNpcGFudEEnLCAncGFydGljaXBhbnRCJ10ubWFwKChyb2xlKSA9PiAoXG4gICAgICAgICAgICA8RmllbGQgbmFtZT17YCR7cm9sZX1Nb2RlbGB9PlxuICAgICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdNb2RlbEZpZWxkIG1vZGVsPXt2YWx1ZXNbYCR7cm9sZX1Nb2RlbGBdfSBsYWJlbD17YFBhcnRpY2lwYW50ICR7cm9sZSA9PT0gJ3BhcnRpY2lwYW50QScgPyAnQScgOiAnQid9IG1vZGVsYH0gcGF0aD17YG1vZGVscy4ke3JvbGV9YH0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9eygpID0+IG9uUGlja1BhcnRpY2lwYW50TW9kZWwocm9sZSl9IC8+fVxuICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICA8RmllbGQgbmFtZT1cImRlbGliZXJhdGlvbk1vZGVsXCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdNb2RlbEZpZWxkIG1vZGVsPXt2YWx1ZXMuZGVsaWJlcmF0aW9uTW9kZWx9IGxhYmVsPVwiU3ludGhlc2lzIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5kZWxpYmVyYXRpb25cIiBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17b25QaWNrRGVsaWJlcmF0aW9uTW9kZWx9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJyZXNlYXJjaEFnZW50TGltaXRcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ051bWJlckZpZWxkIHZhbHVlPXt2YWx1ZXMucmVzZWFyY2hBZ2VudExpbWl0fSBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uQ2hhbmdlPXsodmFsdWUpID0+IG9uQ2hhbmdlKCdyZXNlYXJjaEFnZW50TGltaXQnLCB2YWx1ZSl9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgIDwvRmllbGRMaXN0PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTY29wZVRhYnMoeyBzY29wZXMsIGFjdGl2ZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgIHtzY29wZXMubWFwKChzLCBpKSA9PiAoXG4gICAgICAgIDx0ZXh0IGtleT17c30gc3R5bGU9e3sgY29sb3I6IGkgPT09IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IGkgPT09IGFjdGl2ZSB9fT57YCR7aSA+IDAgPyAnICAnIDogJyd9JHtzfWB9PC90ZXh0PlxuICAgICAgKSl9XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vZGVsUGFuZWwoeyBtb2RlbHMsIGN1cnJlbnQsIGRlZmF1bHROYW1lLCBmb2N1c2VkLCBvblBpY2ssIG9uUGlja0RlZmF1bHQsIG9uQ2xvc2UsIHRpdGxlID0gJ1NlbGVjdCBtb2RlbCcsIGhpbnQgPSAnZW50ZXI6IHRoaXMgc2Vzc2lvbiAgY3RybCtzOiBzZXQgYXMgZGVmYXVsdCAgZXNjOiBjbG9zZScgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKG1vZGVsc1swXSB8fCBudWxsKVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgcmFua2VkTW9kZWxzID0gcmFua0Z1enp5KG1vZGVscywgcXVlcnkoKSwgKHEsIG1vZGVsKSA9PiBmdXp6eVNjb3JlKHEsIG1vZGVsLm5hbWUpKVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgY3Vyc29yKCkpIHtcbiAgICAgIG9uUGlja0RlZmF1bHQoY3Vyc29yKCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPXt0aXRsZX0gaGludD17aGludH0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDEyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17cmFua2VkTW9kZWxzfVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgbW9kZWxzLi4uXCJcbiAgICAgICAgICBmaWx0ZXI9eygpID0+IHRydWV9XG4gICAgICAgICAgb25DaGFuZ2U9e3NldFF1ZXJ5fVxuICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRDdXJzb3J9XG4gICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICBzY3JvbGxvZmY9ezF9XG4gICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2ZmID0gbS5hdmFpbGFibGUgPT09IGZhbHNlXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBib2xkOiAhb2ZmLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogb2ZmID8gTVVURUQgOiBGRyB9fT57bS5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIHttLm5hbWUgPT09IGN1cnJlbnQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IGFjY2VudCgpIH19PnsnIFx1MjcxMyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIHttLm5hbWUgPT09IGRlZmF1bHROYW1lICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57JyAgZGVmYXVsdCd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgICAge29mZiA/IGBuZWVkcyAke20ua2V5SGludH1gIDogbS5wcmljZSA/IGAkJHttLnByaWNlLmlufSBpbiAgJCR7bS5wcmljZS5vdXR9IG91dGAgOiBtLnByb3ZpZGVyID09PSAnY29kZXgnID8gJ3N1YnNjcmlwdGlvbicgOiAncHJpY2UgdW5rbm93bid9XG4gICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnttLmRlc2N9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIaXN0b3J5UGFuZWwoeyBwcm9tcHRzLCBzY29wZXMsIHNjb3BlSW5kZXgsIGZvY3VzZWQsIG9uUGljaywgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChwcm9tcHRzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBhbnlNYXRjaCA9IHByb21wdHMuc29tZSgocCkgPT4gZnV6enlTY29yZShxdWVyeSgpLCBwLnRleHQpID49IDApXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJTZWFyY2ggcHJvbXB0c1wiXG4gICAgICBoaW50PVwiXHUyMTkxXHUyMTkzIHRvIG1vdmUgIGN0cmwrcyBzY29wZSAgZW50ZXIgdG8gZWRpdCAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSwgZ2FwOiAyIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzUwJScgfX0+XG4gICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17cHJvbXB0c31cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9tcHRzLi4uXCJcbiAgICAgICAgICAgIGZpbHRlcj17KHEsIHApID0+IGZ1enp5U2NvcmUocSwgcC50ZXh0KSA+PSAwfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFF1ZXJ5fVxuICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9eyhwKSA9PiBzZXRQcmV2aWV3KHApfVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvblBpY2socC50ZXh0KX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgc2Nyb2xsYmFyXG4gICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsocCwgeyBzZWxlY3RlZCwgZm9jdXNlZDogZiB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChmID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGRyB9fT57cC50ZXh0LnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7dGltZUFnbyhwLmF0KX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICB7YW55TWF0Y2ggJiYgcHJldmlldygpID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntwcmV2aWV3KCkudGV4dC5zbGljZSgwLCAyMDAwKX08L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBwcm9tcHRzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXdpbmRQaWNrUGFuZWwoeyBlbnRyaWVzLCBzdGF0cywgZm9jdXNlZCwgb25QaWNrLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKGVudHJpZXNbMF0gfHwgbnVsbClcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiUmV3aW5kIHRvIGEgbWVzc2FnZVwiIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgZW50ZXIgdG8gY2hvb3NlICBlc2MgdG8gY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMTIsIG1hcmdpblRvcDogMSwgZ2FwOiAyIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogJzUwJScgfX0+XG4gICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17ZW50cmllc31cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBtZXNzYWdlcy4uLlwiXG4gICAgICAgICAgICBmaWx0ZXI9eyhxLCBtKSA9PiBmdXp6eVNjb3JlKHEsIG0udGV4dCkgPj0gMH1cbiAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsobSkgPT4gc2V0UHJldmlldyhtKX1cbiAgICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KG0sIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGYgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcgfX0+e20udGV4dC5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3N0YXRzKG0uaW5kZXgpLm1zZ3N9IGFmdGVyYH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAge3ByZXZpZXcoKSA/IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YHJld2luZGluZyBoZXJlIGRyb3BzICR7c3RhdHMocHJldmlldygpLmluZGV4KS5tc2dzfSBlbnRyaWVzYH08L3RleHQ+XG4gICAgICAgICAgICAgIHtzdGF0cyhwcmV2aWV3KCkuaW5kZXgpLmVkaXRzLm1hcCgobSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgIDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICBcdTIxQTkgJHttLnRpdGxlfWB9PC90ZXh0PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntwcmV2aWV3KCkudGV4dC5zbGljZSgwLCAyMDAwKX08L3RleHQ+XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIG1hdGNoaW5nIG1lc3NhZ2VzPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXdpbmRBY3Rpb25QYW5lbCh7IHRhcmdldCwgb3B0aW9ucywgZm9jdXNlZCwgb25TdWJtaXQsIG9uQmFjayB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT5SZXdpbmQgb3B0aW9uczwvdGV4dD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J3RvOiAnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dGFyZ2V0LnRleHQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17b3B0aW9uc31cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezR9XG4gICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblN1Ym1pdH1cbiAgICAgICAgICBvbkNhbmNlbD17b25CYWNrfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhvLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e28ubGFiZWx9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke28uZGVzY31gfTwvdGV4dD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgIC8+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5lbnRlciB0byBjb25maXJtICBlc2MgdG8gcGljayBhIGRpZmZlcmVudCBtZXNzYWdlPC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIHVzZUVzY2FwZShmb2N1c2VkLCBvbkNsb3NlKSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCgpKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlc3VtZVBhbmVsKHsgc2Vzc2lvbnMsIHNjb3Blcywgc2NvcGVJbmRleCwgbG9hZGluZywgZm9jdXNlZCwgY3VycmVudElkLCBvblBpY2ssIG9uRGVsZXRlLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKHNlc3Npb25zWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgnbGlzdCcpXG4gIGNvbnN0IFtxdWVyeSwgc2V0UXVlcnldID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCByYW5rZWRTZXNzaW9ucyA9IHJhbmtGdXp6eShzZXNzaW9ucywgcXVlcnkoKSwgKHEsIHNlc3Npb24pID0+IHtcbiAgICBjb25zdCBjdXN0b21TY29yZSA9IHNlc3Npb24uY3VzdG9tVGl0bGUgPyBmdXp6eVNjb3JlKHEsIHNlc3Npb24uY3VzdG9tVGl0bGUpIDogLTFcbiAgICBpZiAoY3VzdG9tU2NvcmUgPj0gMCkgcmV0dXJuIDIwXzAwMCArIGN1c3RvbVNjb3JlXG4gICAgcmV0dXJuIE1hdGgubWF4KGZ1enp5U2NvcmUocSwgc2Vzc2lvbi5hdXRvbWF0aWNUaXRsZSB8fCBzZXNzaW9uLnRpdGxlKSwgZnV6enlTY29yZShxLCBzZXNzaW9uLmNoZWNrb3V0IHx8ICcnKSlcbiAgfSlcbiAgY29uc3Qgc2hvd0NoZWNrb3V0cyA9IG5ldyBTZXQoc2Vzc2lvbnMubWFwKChzZXNzaW9uKSA9PiBzZXNzaW9uLmNoZWNrb3V0KS5maWx0ZXIoQm9vbGVhbikpLnNpemUgPiAxXG4gIGNvbnN0IHNlbGVjdGVkU2Vzc2lvbiA9ICgpID0+IHtcbiAgICBpZiAobG9hZGluZykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBzZWxlY3RlZCA9IHByZXZpZXcoKVxuICAgIHJldHVybiBzZXNzaW9ucy5pbmNsdWRlcyhzZWxlY3RlZCkgPyBzZWxlY3RlZCA6IG51bGxcbiAgfVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgc2V0UGFuZSgoY3VycmVudCkgPT4gY3VycmVudCA9PT0gJ2xpc3QnID8gJ3ByZXZpZXcnIDogJ2xpc3QnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGVkU2Vzc2lvbigpXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgc2VsZWN0ZWQpIHtcbiAgICAgIG9uRGVsZXRlKHNlbGVjdGVkKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJSZXN1bWUgYSBzZXNzaW9uXCJcbiAgICAgIGhpbnQ9XCJcdTIxOTFcdTIxOTMgdG8gbW92ZSAgdGFiOiBwcmV2aWV3ICBjdHJsK3Mgc2NvcGUgIGVudGVyIHRvIHJlc3VtZSAgY3RybCt4IGRlbGV0ZSAgZXNjIHRvIGNsb3NlXCJcbiAgICAgIHJpZ2h0PXs8U2NvcGVUYWJzIHNjb3Blcz17c2NvcGVzfSBhY3RpdmU9e3Njb3BlSW5kZXh9IC8+fVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIGdhcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnNDAlJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bG9hZGluZyBzZXNzaW9ucy4uLjwvdGV4dD5cbiAgICAgICAgICApIDogc2Vzc2lvbnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cmFua2VkU2Vzc2lvbnN9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAnbGlzdCcgJiYgIWxvYWRpbmd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHNlc3Npb25zLi4uXCJcbiAgICAgICAgICAgICAgZmlsdGVyPXsoKSA9PiB0cnVlfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17c2V0UXVlcnl9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXsocykgPT4gc2V0UHJldmlldyhzKX1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja31cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhzLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IChzaG93Q2hlY2tvdXRzID8gcy5jb2xvciA6IG51bGwpLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIHtzaG93Q2hlY2tvdXRzICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCwgYmc6IHNlbGVjdGVkID8gbnVsbCA6IHMuY29sb3IgfX0+e2Ake3MuY2hlY2tvdXR9ICBgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcsIGJnOiBzZWxlY3RlZCB8fCBzaG93Q2hlY2tvdXRzID8gbnVsbCA6IHMuY29sb3IgfX0+e3MudGl0bGUucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICB7cy5oZWFkZXIuaWQgPT09IGN1cnJlbnRJZCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+IGN1cnJlbnQ8L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3RpbWVBZ28ocy5hdCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAzIH19PlxuICAgICAgICAgIHtzZWxlY3RlZFNlc3Npb24oKSA/IChcbiAgICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdwcmV2aWV3J30gc2Nyb2xsYmFyPlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7c2VsZWN0ZWRTZXNzaW9uKCkudHVybnN9ICR7c2VsZWN0ZWRTZXNzaW9uKCkudHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlbGVjdGVkU2Vzc2lvbigpLmF0KX0gICR7c2hvcnRlbkhvbWUoc2VsZWN0ZWRTZXNzaW9uKCkuaGVhZGVyLnJvb3QpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgaGVpZ2h0OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgeyhzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3IHx8IFtdKS5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgICAge3NlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXdNZXNzYWdlQ291bnQgPiBzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3Lmxlbmd0aCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzZWxlY3RlZFNlc3Npb24oKS5wcmV2aWV3TWVzc2FnZUNvdW50IC0gc2VsZWN0ZWRTZXNzaW9uKCkucHJldmlldy5sZW5ndGh9IGVhcmxpZXIgbWVzc2FnZXMgb21pdHRlZGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICB7KHNlbGVjdGVkU2Vzc2lvbigpLnByZXZpZXcgfHwgW10pLm1hcCgobWVzc2FnZSwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxib3gga2V5PXtgJHttZXNzYWdlLnJvbGV9LSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWVzc2FnZS5yb2xlID09PSAndXNlcicgPyBGRyA6IE1VVEVEIH19PnttZXNzYWdlLnRleHR9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gdHJhbnNjcmlwdCBwcmV2aWV3PC90ZXh0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBzZXNzaW9uczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTWVtb3J5UGFuZWwoeyBtZW1vcmllcywgc2NvcGVzLCBzY29wZUluZGV4LCBmb2N1c2VkLCBvblRvZ2dsZURpc2FibGVkLCBvbkZvcmdldCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtjdXJzb3JJdGVtLCBzZXRDdXJzb3JJdGVtXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcGFuZSwgc2V0UGFuZV0gPSBjcmVhdGVTaWduYWwoJ2xpc3QnKVxuICBjb25zdCBwcmV2aWV3ID0gbWVtb3JpZXMuaW5jbHVkZXMoY3Vyc29ySXRlbSgpKSA/IGN1cnNvckl0ZW0oKSA6IG1lbW9yaWVzWzBdIHx8IG51bGxcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgIWV2ZW50LmN0cmwgJiYgIWV2ZW50Lm1ldGEpIHtcbiAgICAgIHNldFBhbmUoKHApID0+IChwID09PSAnbGlzdCcgPyAncHJldmlldycgOiAnbGlzdCcpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyAmJiBwcmV2aWV3KSB7XG4gICAgICBvbkZvcmdldChwcmV2aWV3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJNZW1vcnlcIlxuICAgICAgaGludD1cIlx1MjE5MVx1MjE5MyB0byBtb3ZlICBlbnRlcjogZW5hYmxlL2Rpc2FibGUgIHRhYjogcHJldmlldyAgY3RybCtzIHNjb3BlICBjdHJsK3ggZm9yZ2V0ICh0d2ljZSkgIGVzYyB0byBjbG9zZVwiXG4gICAgICByaWdodD17PFNjb3BlVGFicyBzY29wZXM9e3Njb3Blc30gYWN0aXZlPXtzY29wZUluZGV4fSAvPn1cbiAgICAgIGZ1bGxTY3JlZW5cbiAgICA+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQwJScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHttZW1vcmllcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gbWVtb3JpZXMgaGVyZSB5ZXQ8L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXttZW1vcmllc31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdsaXN0J31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgbWVtb3JpZXMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxLCBtKSA9PiBmdXp6eVNjb3JlKHEsIGAke20ubmFtZX0gJHttLmRlc2NyaXB0aW9ufWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRDdXJzb3JJdGVtfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25Ub2dnbGVEaXNhYmxlZH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhtLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBmIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoZiA/IGFjY2VudCgpIDogU0VMRUNUX0JHKSA6IG51bGwsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgaXRhbGljOiBtLmRpc2FibGVkLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogKG0uZGlzYWJsZWQgPyBNVVRFRCA6IEZHKSB9fT57YCR7bS5kaXNhYmxlZCA/ICcgICAnIDogJyd9JHttLm5hbWV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIHttLmRpc2FibGVkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT4gIHN1cHByZXNzZWQ8L3RleHQ+fVxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke20uc2NvcGV9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAzIH19PlxuICAgICAgICAgIHtwcmV2aWV3ID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3ByZXZpZXcnfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIHtwcmV2aWV3LmRpc2FibGVkICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT5TVVBQUkVTU0VEPC90ZXh0Pn1cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e3ByZXZpZXcuZGVzY3JpcHRpb24gfHwgJ25vIGRlc2NyaXB0aW9uJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwcmV2aWV3LmJvZHl9PC90ZXh0PlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtZW1vcmllczwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRWZmb3J0UGFuZWwoeyBsZXZlbHMsIGN1cnJlbnQsIGRlZmF1bHRMZXZlbCwgZm9jdXNlZCwgb25QaWNrLCBvblBpY2tEZWZhdWx0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBpdGVtcyA9IGxldmVsc1xuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycpIHtcbiAgICAgIG9uUGlja0RlZmF1bHQoaXRlbXNbY3Vyc29yKCldKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgbGFiZWwgPSAobCkgPT4gKGwua2V5ID09PSBudWxsID8gJ2RlZmF1bHQnIDogbC5rZXkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoaW5raW5nIGVmZm9ydFwiIGhpbnQ9XCJqL2sgdG8gbW92ZSAgZW50ZXI6IHRoaXMgc2Vzc2lvbiAgY3RybCtzOiBzZXQgYXMgZGVmYXVsdCAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXtzZXRDdXJzb3J9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhsLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57bGFiZWwobCkucGFkRW5kKE1hdGgubWF4KDEwLCBsYWJlbChsKS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2wuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gY3VycmVudCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGRlZmF1bHRMZXZlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICBkZWZhdWx0J308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gVGhlbWVQYW5lbCh7IHRoZW1lcywgcHJlZiwgZm9jdXNlZCwgb25QaWNrLCBvblByZXZpZXcsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKE1hdGgubWF4KDAsIHRoZW1lcy5maW5kSW5kZXgoKHQpID0+IHQua2V5ID09PSBwcmVmKSkpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlRoZW1lXCIgaGludD1cImovayB0byBtb3ZlIGFuZCBwcmV2aWV3ICBlbnRlciB0byBhcHBseSAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGl0ZW1zPXt0aGVtZXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXsoaSkgPT4ge1xuICAgICAgICAgICAgc2V0Q3Vyc29yKGkpXG4gICAgICAgICAgICBvblByZXZpZXcodGhlbWVzW2ldKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyh0LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57dC5rZXkucGFkRW5kKE1hdGgubWF4KDEwLCB0LmtleS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3QuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgIHt0LmtleSA9PT0gcHJlZiAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57JyAgXHUyNzEzJ308L3RleHQ+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb250ZXh0T3ZlcnZpZXcoeyBvdmVydmlldyB9KSB7XG4gIGNvbnN0IHJldmVhbCA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoNzAwKSlcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgcmV2ZWFsLnNldCgxKVxuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIGxheW91dC53aWR0aCB8fCAxKVxuICBjb25zdCB2aXNpYmxlID0gTWF0aC5yb3VuZCh3aWR0aCAqIHJldmVhbCgpKVxuICBjb25zdCB1c2FnZVdpZHRoID0gTWF0aC5tYXgoMSwgd2lkdGggLSA1KVxuICBjb25zdCB0b3RhbCA9IG92ZXJ2aWV3LnNlZ21lbnRzLnJlZHVjZSgoc3VtLCBzZWdtZW50KSA9PiBzdW0gKyBzZWdtZW50LnRva2VucywgMClcbiAgY29uc3QgdXNlZCA9IG92ZXJ2aWV3Lm1lYXN1cmVkIHx8IHRvdGFsXG4gIGNvbnN0IHBlcmNlbnQgPSB1c2VkICYmIG92ZXJ2aWV3LmxpbWl0ID8gTWF0aC5taW4oMTAwLCB1c2VkIC8gb3ZlcnZpZXcubGltaXQgKiAxMDApIDogMFxuICBsZXQgYm91bmRhcnkgPSAwXG4gIGNvbnN0IGNlbGxzID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcbiAgICBjb25zdCBzZWdtZW50ID0gb3ZlcnZpZXcuc2VnbWVudHMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgYm91bmRhcnkgKz0gaXRlbS50b2tlbnMgLyB0b3RhbCAqIHdpZHRoXG4gICAgICByZXR1cm4gaSA8IGJvdW5kYXJ5XG4gICAgfSlcbiAgICBib3VuZGFyeSA9IDBcbiAgICBjZWxscy5wdXNoKFxuICAgICAgPHRleHQga2V5PXtpfSBzdHlsZT17eyBjb2xvcjogaSA+PSB2aXNpYmxlID8gUEFORUxfQkcgOiBzZWdtZW50Py5jb2xvciB8fCBNVVRFRCB9fT5cbiAgICAgICAge2kgPj0gdmlzaWJsZSA/ICcgJyA6IHNlZ21lbnQgPyAnXHUyNTg4JyA6ICdcdTI1OTEnfVxuICAgICAgPC90ZXh0PixcbiAgICApXG4gIH1cblxuICBjb25zdCBmb3JtYXRUb2tlbnMgPSAodG9rZW5zKSA9PiB0b2tlbnMgPCAxMDAwID8gYCR7TWF0aC5yb3VuZCh0b2tlbnMpfSB0b2tgIDogYCR7KHRva2VucyAvIDEwMDApLnRvRml4ZWQoMSl9a2BcbiAgY29uc3QgbGVnZW5kUm93cyA9ICgpID0+IHtcbiAgICBjb25zdCByb3dzID0gW1tdXVxuICAgIGxldCB1c2VkID0gMFxuICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvdmVydmlldy5zZWdtZW50cykge1xuICAgICAgY29uc3QgaXRlbVdpZHRoID0gc2VnbWVudC5sYWJlbC5sZW5ndGggKyBmb3JtYXRUb2tlbnMoc2VnbWVudC50b2tlbnMpLmxlbmd0aCArIDVcbiAgICAgIGlmICh1c2VkID4gMCAmJiB1c2VkICsgaXRlbVdpZHRoID4gTWF0aC5tYXgoMSwgbGF5b3V0LndpZHRoIHx8IDEpKSB7XG4gICAgICAgIHJvd3MucHVzaChbXSlcbiAgICAgICAgdXNlZCA9IDBcbiAgICAgIH1cbiAgICAgIHJvd3MuYXQoLTEpLnB1c2goc2VnbWVudClcbiAgICAgIHVzZWQgKz0gaXRlbVdpZHRoXG4gICAgfVxuICAgIHJldHVybiByb3dzXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtwZXJjZW50ID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17cGVyY2VudH0gaW5pdGlhbD17MH0gZHVyYXRpb249ezEwMDB9IGNvbG9yPXtwZXJjZW50ID49IDgwID8gUkVEIDogRkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17U0VMRUNUX0JHfSBmb3JtYXQ9eyh2YWx1ZSkgPT4gY29udGV4dEJhcih2YWx1ZSwgdXNhZ2VXaWR0aCl9IC8+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRCB9fT57YCR7b3ZlcnZpZXcubWVhc3VyZWQgPyAnJyA6ICd+J30ke01hdGgucm91bmQocGVyY2VudCl9JWAucGFkU3RhcnQoNSl9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PntjZWxsc308L2JveD5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHtsZWdlbmRSb3dzKCkubWFwKChyb3csIHJvd0luZGV4KSA9PiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Jvd0luZGV4fSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgIHtyb3cubWFwKChzZWdtZW50KSA9PiAoXG4gICAgICAgICAgICAgIDxib3gga2V5PXtzZWdtZW50LmxhYmVsfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgbWFyZ2luUmlnaHQ6IDIgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlZ21lbnQuY29sb3IgfX0+XHUyNUEwPC90ZXh0PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAke3NlZ21lbnQubGFiZWx9IGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxBbmltYXRlZFZhbHVlXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17c2VnbWVudC50b2tlbnN9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPXswfVxuICAgICAgICAgICAgICAgICAgZHVyYXRpb249ezIwMDB9XG4gICAgICAgICAgICAgICAgICBjb2xvcj17TVVURUR9XG4gICAgICAgICAgICAgICAgICBoaWdobGlnaHQ9e2FjY2VudCgpfVxuICAgICAgICAgICAgICAgICAgZm9ybWF0PXtmb3JtYXRUb2tlbnN9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gSW5mb0xpc3RQYW5lbCh7IHRpdGxlLCByb3dzLCBvdmVydmlldywgZm9jdXNlZCwgb25DbG9zZSB9KSB7XG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PVwiai9rIG9yIFx1MjE5MVx1MjE5MyB0byBzY3JvbGwgIGVzYyBjbG9zZVwiPlxuICAgICAge292ZXJ2aWV3ICYmIDxDb250ZXh0T3ZlcnZpZXcgb3ZlcnZpZXc9e292ZXJ2aWV3fSAvPn1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogMTQsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAge3Jvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ub3RoaW5nIGhlcmUgeWV0PC90ZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZH0gc2Nyb2xsYmFyPlxuICAgICAgICAgICAge3Jvd3MubWFwKChyb3csIGkpID0+IChcbiAgICAgICAgICAgICAgPGJveCBrZXk9e2Ake3Jvdy5uYW1lfS0ke2l9YH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaSA9PT0gMCA/IDAgOiAxIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e3Jvdy5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIHtyb3cubm90ZSAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3Jvdy5ub3RlfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pntyb3cuZGVzYyB8fCAnbm8gZGVzY3JpcHRpb24nfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvamVjdFBhbmVsKHsgcHJvamVjdHMsIGxvYWRpbmcsIGZvY3VzZWQsIG9uUGlja0NoZWNrb3V0LCBvblBpY2tTZXNzaW9uLCBvbkFkZFdvcmt0cmVlLCBvbkRlbGV0ZSwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IHJvd3MgPSBwcm9qZWN0cy5mbGF0TWFwKChwcm9qZWN0KSA9PiBwcm9qZWN0LmNoZWNrb3V0cy5tYXAoKGNoZWNrb3V0LCBpbmRleCkgPT4gKHtcbiAgICAuLi5jaGVja291dCxcbiAgICBwcm9qZWN0UGF0aDogcHJvamVjdC5wYXRoLFxuICAgIGdyb3VwZWQ6IHByb2plY3QuY2hlY2tvdXRzLmxlbmd0aCA+IDEsXG4gICAgZmlyc3Q6IGluZGV4ID09PSAwLFxuICAgIGxhc3Q6IGluZGV4ID09PSBwcm9qZWN0LmNoZWNrb3V0cy5sZW5ndGggLSAxLFxuICB9KSkpXG4gIGNvbnN0IFtwcmV2aWV3LCBzZXRQcmV2aWV3XSA9IGNyZWF0ZVNpZ25hbChyb3dzWzBdIHx8IG51bGwpXG4gIGNvbnN0IFtwYW5lLCBzZXRQYW5lXSA9IGNyZWF0ZVNpZ25hbCgncHJvamVjdHMnKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAndGFiJyAmJiAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSkge1xuICAgICAgaWYgKHByZXZpZXcoKT8uc2Vzc2lvbnMubGVuZ3RoKSBzZXRQYW5lKChjdXJyZW50KSA9PiBjdXJyZW50ID09PSAncHJvamVjdHMnID8gJ3Nlc3Npb25zJyA6ICdwcm9qZWN0cycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChwYW5lKCkgPT09ICdwcm9qZWN0cycgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiBwcmV2aWV3KCkpIHtcbiAgICAgIG9uQWRkV29ya3RyZWUocHJldmlldygpKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocGFuZSgpID09PSAncHJvamVjdHMnICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcHJldmlldygpKSB7XG4gICAgICBvbkRlbGV0ZShwcmV2aWV3KCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBjaGVja291dExhYmVsID0gKHJvdykgPT4gYCR7cm93Lmxhc3QgPyAnXHUyNTE0XHUyNTAwJyA6ICdcdTI1MUNcdTI1MDAnfSAke3Jvdy5icmFuY2ggfHwgKHJvdy53b3JrdHJlZSA/IHJvdy5wYXRoIDogJ21haW4nKX1gXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIlN3aXRjaCBwcm9qZWN0XCIgaGludD1cIlx1MjE5MVx1MjE5MyBtb3ZlICB0YWIgc3dpdGNoIHBhbmUgIGVudGVyIG9wZW4gIGN0cmwrdCBuZXcgd29ya3RyZWUgIGN0cmwreCBkZWxldGUgIGVzYyBjbG9zZVwiIGZ1bGxTY3JlZW4+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBnYXA6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzQ0JScsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PmxvYWRpbmcgcHJvamVjdHMuLi48L3RleHQ+XG4gICAgICAgICAgKSA6IHJvd3MubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIGtub3duIHByb2plY3RzIHlldDwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBpY2tMaXN0XG4gICAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgICAgaXRlbXM9e3Jvd3N9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAncHJvamVjdHMnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBwcm9qZWN0cy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHF1ZXJ5LCByb3cpID0+IGZ1enp5U2NvcmUocXVlcnksIGAke3Jvdy5wcm9qZWN0UGF0aH0gJHtyb3cuYnJhbmNoIHx8ICcnfWApID49IDB9XG4gICAgICAgICAgICAgIG9uQ3Vyc29yQ2hhbmdlPXtzZXRQcmV2aWV3fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrQ2hlY2tvdXR9XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsocm93LCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICB7cm93Lmdyb3VwZWQgJiYgcm93LmZpcnN0ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57YFx1MjVCRSAke3Jvdy5wcm9qZWN0UGF0aH1gfTwvdGV4dD59XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHIH19Pntyb3cuZ3JvdXBlZCA/IGAgICR7Y2hlY2tvdXRMYWJlbChyb3cpfWAgOiByb3cucHJvamVjdFBhdGh9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Jvdy5jdXJyZW50ID8gJ2N1cnJlbnQgICcgOiAnJ30ke3Jvdy5sYXRlc3QgPyB0aW1lQWdvKHJvdy5sYXRlc3QuYXQpIDogJ25vIHNlc3Npb25zJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICAgPFBhbmVsRGl2aWRlciAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgICB7cHJldmlldygpPy5zZXNzaW9ucy5sZW5ndGggPyAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAga2V5PXtwcmV2aWV3KCkucm9vdH1cbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cHJldmlldygpLnNlc3Npb25zfVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkICYmIHBhbmUoKSA9PT0gJ3Nlc3Npb25zJ31cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJmaWx0ZXIgc2Vzc2lvbnMuLi5cIlxuICAgICAgICAgICAgICBmaWx0ZXI9eyhxdWVyeSwgc2Vzc2lvbikgPT4gZnV6enlTY29yZShxdWVyeSwgc2Vzc2lvbi50aXRsZSkgPj0gMH1cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUGlja1Nlc3Npb259XG4gICAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgICByZW5kZXJJdGVtPXsoc2Vzc2lvbiwgeyBzZWxlY3RlZCwgZm9jdXNlZDogYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogc2VsZWN0ZWQgPyAoYWN0aXZlID8gYWNjZW50KCkgOiBTRUxFQ1RfQkcpIDogbnVsbCwgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBGR19TT0ZULCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57c2Vzc2lvbi50aXRsZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzZWxlY3RlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57YCAgJHtzZXNzaW9uLnR1cm5zfSAke3Nlc3Npb24udHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKHNlc3Npb24uYXQpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHNlc3Npb25zPC90ZXh0PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25uZWN0UGFuZWwoeyBwcm92aWRlcnMsIGZvY3VzZWQsIG9uQ29ubmVjdCwgb25EaXNjb25uZWN0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBwcm92aWRlcnNbTWF0aC5taW4oaW5kZXgoKSwgcHJvdmlkZXJzLmxlbmd0aCAtIDEpXSB8fCBudWxsXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBjb25zdCBwID0gc2VsZWN0ZWQoKVxuICAgIGlmIChwICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcgJiYgcC5jb25uZWN0ZWQpIHtcbiAgICAgIG9uRGlzY29ubmVjdChwKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIkNvbm5lY3QgYSBzdWJzY3JpcHRpb25cIiBoaW50PVwiZW50ZXIgc2lnbiBpbiAgY3RybCt4IGRpc2Nvbm5lY3QgKHR3aWNlKSAgZXNjIGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtwcm92aWRlcnN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEluZGV4fVxuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgb25TdWJtaXQ9eyhwKSA9PiBvbkNvbm5lY3QocCl9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KHAsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBwLmNvbm5lY3RlZCA/IGFjY2VudCgpIDogTVVURUQgfX0+e3AuY29ubmVjdGVkID8gJ1x1MjVBQScgOiAnXHUyNUFCJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cC5sYWJlbH0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgIHtwLmNvbm5lY3RlZCA/IGBjb25uZWN0ZWQke3AuZW1haWwgPyBgIGFzICR7cC5lbWFpbH1gIDogJyd9YCA6ICdub3QgY29ubmVjdGVkJ31cbiAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gV2FrZXVwc1BhbmVsKHsgd2FrZXVwcywgZm9jdXNlZCwgb25DYW5jZWwsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbdGljaywgc2V0VGlja10gPSBjcmVhdGVTaWduYWwoMClcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG4gIHVzZUludGVydmFsKCgpID0+IHNldFRpY2soKHQpID0+IHQgKyAxKSwgMTAwMClcbiAgdm9pZCB0aWNrKClcblxuICBjb25zdCBzZWxlY3RlZCA9ICgpID0+IHdha2V1cHNbTWF0aC5taW4oaW5kZXgoKSwgd2FrZXVwcy5sZW5ndGggLSAxKV0gfHwgbnVsbFxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgY29uc3QgdyA9IHNlbGVjdGVkKClcbiAgICBpZiAodyAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBvbkNhbmNlbCh3KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgY291bnRkb3duID0gKGF0KSA9PiB7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKGF0IC0gRGF0ZS5ub3coKSkgLyAxMDAwKSlcbiAgICBpZiAoc2VjcyA8IDYwKSByZXR1cm4gYGluICR7c2Vjc31zYFxuICAgIGNvbnN0IG1pbnMgPSBNYXRoLmZsb29yKHNlY3MgLyA2MClcbiAgICBpZiAobWlucyA8IDYwKSByZXR1cm4gYGluICR7bWluc31tICR7c2VjcyAlIDYwfXNgXG4gICAgcmV0dXJuIGBpbiAke01hdGguZmxvb3IobWlucyAvIDYwKX1oICR7bWlucyAlIDYwfW1gXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiU2NoZWR1bGVkIHdha2UtdXBzXCIgaGludD1cImovayB0byBtb3ZlICBlbnRlciBvciBjdHJsK3ggY2FuY2VsICh0d2ljZSkgIGVzYyBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICB7d2FrZXVwcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHBlbmRpbmcgd2FrZS11cHMgIHRoZSBhZ2VudCBzY2hlZHVsZXMgdGhlbSB3aXRoIHNjaGVkdWxlX3dha2V1cDwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3dha2V1cHN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIGdhcD17MX1cbiAgICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICAgIG9uU3VibWl0PXsodykgPT4gb25DYW5jZWwodyl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyh3LCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YFx1MjNGMCAke3cuaWR9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2NvdW50ZG93bih3LmF0KX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7bmV3IERhdGUody5hdCkudG9Mb2NhbGVUaW1lU3RyaW5nKCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxLCBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogRkdfU09GVCB9fT57dy5ub3RlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gbWNwU3RhdHVzKHN0YXR1cykge1xuICBjb25zdCBwYWxldHRlID0ge1xuICAgIGNvbm5lY3RlZDogeyBpY29uOiAnXHUyNUFBJywgY29sb3I6IGFjY2VudCgpIH0sXG4gICAgY29ubmVjdGluZzogeyBpY29uOiAnXHUyNUNDJywgY29sb3I6ICcjZmJiZjI0JyB9LFxuICAgIGVycm9yOiB7IGljb246ICdcdTI3MTcnLCBjb2xvcjogUkVEIH0sXG4gICAgZGlzYWJsZWQ6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICAgIGlkbGU6IHsgaWNvbjogJ1x1MjVBQicsIGNvbG9yOiBNVVRFRCB9LFxuICB9XG4gIHJldHVybiBwYWxldHRlW3N0YXR1c10gfHwgcGFsZXR0ZS5pZGxlXG59XG5cbmZ1bmN0aW9uIEZvcm1GaWVsZCh7IGxhYmVsLCBhY3RpdmUsIGNoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2xhYmVsfTwvdGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwU2VydmVyRm9ybSh7IGZvY3VzZWQsIHNlcnZlciwgb25TYXZlLCBvbkludmFsaWQsIG9uQ2FuY2VsIH0pIHtcbiAgY29uc3QgaW5pdGlhbCA9IHNlcnZlciA/IHBhcnNlU2VydmVyU3BlYyhzZXJ2ZXIuY29tbWFuZCkgOiBudWxsXG4gIGNvbnN0IGVkaXRpbmcgPSAhIXNlcnZlclxuICBjb25zdCBbbmFtZSwgc2V0TmFtZV0gPSBjcmVhdGVTaWduYWwoc2VydmVyPy5uYW1lIHx8ICcnKVxuICBjb25zdCBbc2NvcGUsIHNldFNjb3BlXSA9IGNyZWF0ZVNpZ25hbChzZXJ2ZXI/LnNjb3BlIHx8ICdnbG9iYWwnKVxuICBjb25zdCBbdHJhbnNwb3J0LCBzZXRUcmFuc3BvcnRdID0gY3JlYXRlU2lnbmFsKGluaXRpYWw/LnR5cGUgfHwgJ3N0ZGlvJylcbiAgY29uc3QgW3RhcmdldCwgc2V0VGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChpbml0aWFsPy50eXBlID09PSAnaHR0cCcgPyBpbml0aWFsLnVybCA6IHNlcnZlcj8uY29tbWFuZCB8fCAnJylcbiAgY29uc3QgaW5pdGlhbEhlYWRlcnMgPSBpbml0aWFsPy50eXBlID09PSAnaHR0cCdcbiAgICA/IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3Qua2V5cyhpbml0aWFsLmhlYWRlcnMpLm1hcCgobmFtZSkgPT4gW25hbWUsIFJFREFDVEVEX0hFQURFUl0pKVxuICAgIDoge31cbiAgY29uc3QgW2hlYWRlcnMsIHNldEhlYWRlcnNdID0gY3JlYXRlU2lnbmFsKGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKCcnLCBpbml0aWFsSGVhZGVycykudHJpbSgpKVxuXG4gIGNvbnN0IGZtID0gdXNlRm9jdXMoeyBpbml0aWFsOiBlZGl0aW5nID8gJ3RyYW5zcG9ydCcgOiAnbmFtZScgfSlcbiAgaWYgKCFlZGl0aW5nKSB7XG4gICAgZm0uaXRlbSgnbmFtZScpXG4gICAgZm0uaXRlbSgnc2NvcGUnKVxuICB9XG4gIGZtLml0ZW0oJ3RyYW5zcG9ydCcpXG4gIGZtLml0ZW0oJ3RhcmdldCcpXG4gIGlmICh0cmFuc3BvcnQoKSA9PT0gJ2h0dHAnKSBmbS5pdGVtKCdoZWFkZXJzJylcbiAgZm0uaXRlbSgnc2F2ZScpXG4gIGZtLml0ZW0oJ2NhbmNlbCcpXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgaHR0cCA9IHRyYW5zcG9ydCgpID09PSAnaHR0cCdcblxuICBjb25zdCBzdWJtaXQgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2VydmVyTmFtZSA9IG5hbWUoKS50cmltKClcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldCgpLnRyaW0oKVxuICAgIGlmICghc2VydmVyTmFtZSB8fCAvXFxzLy50ZXN0KHNlcnZlck5hbWUpKSByZXR1cm4gb25JbnZhbGlkKCduYW1lIGlzIHJlcXVpcmVkIGFuZCBjYW5ub3QgY29udGFpbiBzcGFjZXMnKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBvbkludmFsaWQoaHR0cCA/ICd1cmwgaXMgcmVxdWlyZWQnIDogJ2NvbW1hbmQgaXMgcmVxdWlyZWQnKVxuICAgIGlmIChodHRwICYmICEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCd1cmwgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8nKVxuICAgIGlmICghaHR0cCAmJiAvXmh0dHBzPzpcXC9cXC8vLnRlc3QodmFsdWUpKSByZXR1cm4gb25JbnZhbGlkKCdhIHN0ZGlvIGNvbW1hbmQgY2Fubm90IHN0YXJ0IHdpdGggYSB1cmw7IHBpY2sgdGhlIGh0dHAgdHJhbnNwb3J0JylcbiAgICBjb25zdCBleHRyYSA9IGhlYWRlcnMoKS50cmltKClcbiAgICBsZXQgc3BlYyA9IGh0dHAgJiYgZXh0cmEgPyBgJHt2YWx1ZX0gJHtleHRyYX1gIDogdmFsdWVcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTZXJ2ZXJTcGVjKHNwZWMpXG4gICAgICBpZiAocGFyc2VkLnR5cGUgPT09ICdodHRwJyAmJiBpbml0aWFsPy50eXBlID09PSAnaHR0cCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBbaGVhZGVyLCBoZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyc2VkLmhlYWRlcnMpKSB7XG4gICAgICAgICAgaWYgKGhlYWRlclZhbHVlID09PSBSRURBQ1RFRF9IRUFERVIgJiYgaW5pdGlhbC5oZWFkZXJzW2hlYWRlcl0gIT09IHVuZGVmaW5lZCkgcGFyc2VkLmhlYWRlcnNbaGVhZGVyXSA9IGluaXRpYWwuaGVhZGVyc1toZWFkZXJdXG4gICAgICAgIH1cbiAgICAgICAgc3BlYyA9IGZvcm1hdEh0dHBTZXJ2ZXJTcGVjKHBhcnNlZC51cmwsIHBhcnNlZC5oZWFkZXJzKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIG9uSW52YWxpZChlcnIubWVzc2FnZSlcbiAgICB9XG4gICAgb25TYXZlKHNlcnZlck5hbWUsIHNwZWMsIHNjb3BlKCkpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHshZWRpdGluZyAmJiAoXG4gICAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJuYW1lXCIgYWN0aXZlPXtmbS5pcygnbmFtZScpfT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgICA8VGV4dElucHV0IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ25hbWUnKX0gcGxhY2Vob2xkZXI9XCJsaW5lYXJcIiBvbkNoYW5nZT17c2V0TmFtZX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgeyFlZGl0aW5nICYmIChcbiAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInNjb3BlXCIgYWN0aXZlPXtmbS5pcygnc2NvcGUnKX0+XG4gICAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snZ2xvYmFsJywgJ3Byb2plY3QnXX0gc2VsZWN0ZWQ9e3Njb3BlKCl9IG9uQ2hhbmdlPXtzZXRTY29wZX0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnc2NvcGUnKX0gLz5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cInRyYW5zcG9ydFwiIGFjdGl2ZT17Zm0uaXMoJ3RyYW5zcG9ydCcpfT5cbiAgICAgICAgPFJhZGlvIG9wdGlvbnM9e1snc3RkaW8nLCAnaHR0cCddfSBzZWxlY3RlZD17dHJhbnNwb3J0KCl9IG9uQ2hhbmdlPXtzZXRUcmFuc3BvcnR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RyYW5zcG9ydCcpfSAvPlxuICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICA8Rm9ybUZpZWxkIGxhYmVsPXtodHRwID8gJ3VybCcgOiAnY29tbWFuZCd9IGFjdGl2ZT17Zm0uaXMoJ3RhcmdldCcpfT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3RhcmdldCcpfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2h0dHAgPyAnaHR0cHM6Ly9tY3AubGluZWFyLmFwcC9tY3AnIDogJ25weCAteSBAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2VydmVyLWZpbGVzeXN0ZW0gL3RtcCd9XG4gICAgICAgICAgICBpbml0aWFsVmFsdWU9e3RhcmdldCgpfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3NldFRhcmdldH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvRm9ybUZpZWxkPlxuICAgICAge2h0dHAgJiYgKFxuICAgICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwiaGVhZGVycyAgb3B0aW9uYWxcIiBhY3RpdmU9e2ZtLmlzKCdoZWFkZXJzJyl9PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnaGVhZGVycycpfSBwbGFjZWhvbGRlcj0nQXV0aG9yaXphdGlvbj1cIkJlYXJlciAuLi5cIiBYLVRlYW09XCJjb3JlXCInIGluaXRpYWxWYWx1ZT17aGVhZGVycygpfSBvbkNoYW5nZT17c2V0SGVhZGVyc30gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICApfVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD17ZWRpdGluZyA/ICdzYXZlJyA6ICdhZGQnfSBvblByZXNzPXtzdWJtaXR9IGZvY3VzZWQ9e2ZvY3VzZWQgJiYgZm0uaXMoJ3NhdmUnKX0gLz5cbiAgICAgICAgPHRleHQ+ICA8L3RleHQ+XG4gICAgICAgIDxCdXR0b24gbGFiZWw9XCJjYW5jZWxcIiBvblByZXNzPXtvbkNhbmNlbH0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnY2FuY2VsJyl9IHZhcmlhbnQ9XCJkaW1cIiAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1jcFBhbmVsKHsgc2VydmVycywgZm9jdXNlZCwgb25Ub2dnbGUsIG9uUmVjb25uZWN0LCBvblJlbW92ZSwgb25BZGQsIG9uRWRpdCwgb25JbnZhbGlkLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2Zvcm0sIHNldEZvcm1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt2aWV3aW5nLCBzZXRWaWV3aW5nXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCAmJiAhZm9ybSgpLCAoKSA9PiAodmlld2luZygpID8gc2V0Vmlld2luZyhudWxsKSA6IG9uQ2xvc2UoKSkpXG5cbiAgY29uc3Qgc2VsZWN0ZWQgPSAoKSA9PiBzZXJ2ZXJzW01hdGgubWluKGluZGV4KCksIHNlcnZlcnMubGVuZ3RoIC0gMSldIHx8IG51bGxcbiAgY29uc3Qgdmlld2VkID0gKCkgPT4gc2VydmVycy5maW5kKChzKSA9PiBzLm5hbWUgPT09IHZpZXdpbmcoKSkgfHwgbnVsbFxuXG4gIGlmICh2aWV3aW5nKCkgJiYgdmlld2VkKCkpIHtcbiAgICBjb25zdCBzZXJ2ZXIgPSB2aWV3ZWQoKVxuICAgIGNvbnN0IGRlc2NyaWJlID0gKHQpID0+IHQuZGVzY3JpcHRpb24ucmVwbGFjZSgvXlxcW1teXFxdXSpcXF1cXHMqLywgJycpLnRyaW0oKSB8fCAnbm8gZGVzY3JpcHRpb24nXG4gICAgcmV0dXJuIChcbiAgICAgIDxQYW5lbEZyYW1lXG4gICAgICAgIHRpdGxlPXtgTUNQIHNlcnZlcnMgICR7c2VydmVyLm5hbWV9ICAke3NlcnZlci50b29scy5sZW5ndGh9ICR7c2VydmVyLnRvb2xzLmxlbmd0aCA9PT0gMSA/ICd0b29sJyA6ICd0b29scyd9YH1cbiAgICAgICAgaGludD1cImovayBvciBcdTIxOTFcdTIxOTMgdG8gc2Nyb2xsICBlc2MgYmFjayB0byBzZXJ2ZXJzXCJcbiAgICAgID5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAxNCwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHtzZXJ2ZXIudG9vbHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHRvb2xzIHJlcG9ydGVkICBpcyB0aGUgc2VydmVyIGNvbm5lY3RlZD88L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZH0gc2Nyb2xsYmFyPlxuICAgICAgICAgICAgICB7c2VydmVyLnRvb2xzLm1hcCgodCwgaSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3gga2V5PXt0Lm5hbWV9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IGkgPT09IDAgPyAwIDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57dC5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZGVzY3JpYmUodCl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvU2Nyb2xsQm94PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9QYW5lbEZyYW1lPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWVcbiAgICAgIHRpdGxlPVwiTUNQIHNlcnZlcnNcIlxuICAgICAgaGludD17Zm9ybSgpXG4gICAgICAgID8gJ3RhYiBtb3ZlcyBiZXR3ZWVuIGZpZWxkcyAgai9rICsgc3BhY2UgcGlja3MgYSByYWRpbyBvcHRpb24gIGVzYyBjYW5jZWxzJ1xuICAgICAgICA6ICdlbnRlciBlbmFibGUvZGlzYWJsZSAgdCB0b29scyAgZSBlZGl0ICByIHJlY29ubmVjdCAgYSBhZGQgIGN0cmwreCByZW1vdmUgKHR3aWNlKSAgZXNjIGNsb3NlJ31cbiAgICA+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIHtmb3JtKCkgPyAoXG4gICAgICAgICAgPE1jcFNlcnZlckZvcm1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBzZXJ2ZXI9e2Zvcm0oKSA9PT0gJ2FkZCcgPyBudWxsIDogZm9ybSgpfVxuICAgICAgICAgICAgb25TYXZlPXsobmFtZSwgc3BlYywgc2NvcGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZvcm0oKSA9PT0gJ2FkZCcpIG9uQWRkKG5hbWUsIHNwZWMsIHNjb3BlKVxuICAgICAgICAgICAgICBlbHNlIG9uRWRpdChuYW1lLCBzcGVjKVxuICAgICAgICAgICAgICBzZXRGb3JtKG51bGwpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25JbnZhbGlkPXtvbkludmFsaWR9XG4gICAgICAgICAgICBvbkNhbmNlbD17KCkgPT4gc2V0Rm9ybShudWxsKX1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogc2VydmVycy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIE1DUCBzZXJ2ZXJzIGNvbmZpZ3VyZWQgIHByZXNzIGEgdG8gYWRkIG9uZTwvdGV4dD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8TWVudVxuICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgaXRlbXM9e3NlcnZlcnN9XG4gICAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtzZXRJbmRleH1cbiAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs2fVxuICAgICAgICAgICAgdmltS2V5c1xuICAgICAgICAgICAgaXRlbUhlaWdodD17Mn1cbiAgICAgICAgICAgIG9uU3VibWl0PXsocykgPT4gb25Ub2dnbGUocy5uYW1lKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KHMsIHsgYWN0aXZlIH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3QgPSBtY3BTdGF0dXMocy5zdGF0dXMpXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBzdC5jb2xvciB9fT57c3QuaWNvbn08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgICR7cy5uYW1lLnBhZEVuZChNYXRoLm1heCgxNCwgcy5uYW1lLmxlbmd0aCArIDEpKX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogcy5zdGF0dXMgPT09ICdlcnJvcicgPyBSRUQgOiBNVVRFRCB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtzLnN0YXR1cyA9PT0gJ2Vycm9yJyA/IHMuZXJyb3IgOiBzLnN0YXR1cyA9PT0gJ2Nvbm5lY3RlZCcgPyBgJHtzLnRvb2xDb3VudH0gdG9vbHNgIDogcy5zdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dD57JyAgICAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PntzaG9ydGVuSG9tZShyZWRhY3RTZXJ2ZXJTcGVjKHMuY29tbWFuZCkpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtzLnNjb3BlID09PSAncHJvamVjdCcgPyAncHJvamVjdCcgOiAnZ2xvYmFsJ31gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICAgIHshZm9ybSgpICYmIChcbiAgICAgICAgPE1jcEtleXNcbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG9uS2V5PXsoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzID0gc2VsZWN0ZWQoKVxuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2EnKSBzZXRGb3JtKCdhZGQnKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdlJykgc2V0Rm9ybShzKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyJykgb25SZWNvbm5lY3Qocy5uYW1lKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICdyZW1vdmUnKSBvblJlbW92ZShzLm5hbWUpXG4gICAgICAgICAgICBlbHNlIGlmIChzICYmIGtleSA9PT0gJ3QnKSBzZXRWaWV3aW5nKHMubmFtZSlcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gTWNwS2V5cyh7IGZvY3VzZWQsIG9uS2V5IH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4Jykge1xuICAgICAgb25LZXkoJ3JlbW92ZScpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghZXZlbnQuY3RybCAmJiBbJ2EnLCAnZScsICdyJywgJ3QnXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBvbktleShldmVudC5rZXkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIG51bGxcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUFTLFFBQUFBLGFBQVk7QUFDckIsU0FBUyxjQUFjLGlCQUFpQjtBQUN4QyxTQUFTLGFBQWEsZUFBZSxrQkFBa0I7QUFDdkQsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyxpQkFBaUIseUJBQXlCO0FBQ25ELFNBQVMsV0FBVyxjQUFjLG9CQUFvQjtBQUN0RCxTQUFTLGtCQUFrQjtBQUMzQixTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLGVBQWUsYUFBYSxhQUFhLDJCQUEyQjtBQUM3RSxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLGFBQUFDLGtCQUFpQjtBQUMxQixTQUFTLG1CQUFtQjtBQUM1QixTQUFTLHFCQUFxQjtBQUM5QixTQUFTLGVBQWU7QUFDeEIsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxtQkFBbUI7QUFDNUIsU0FBUyxjQUFBQyxtQkFBa0I7QUFDM0IsU0FBUywyQkFBMkI7QUFFcEMsU0FBUyxhQUFhQyxTQUFRQyxZQUFXLE1BQU07QUFDN0MsTUFBSSxDQUFDLEtBQU0sUUFBTztBQUNsQixRQUFNLFFBQVFELFFBQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUk7QUFDaEQsTUFBSSxNQUFPLFFBQU87QUFDbEIsTUFBSSxLQUFLLFNBQVMsR0FBRyxFQUFHLFFBQU8sV0FBVyxNQUFNQyxVQUFTO0FBQ3pELFFBQU0sU0FBU0QsUUFDWixPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsS0FBSyxFQUNuQyxJQUFJLENBQUMsTUFB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QWUsQ0FBQyxPQUFPO0FBQUUsaUJBQWE7QUFBQSxFQUFHO0FBQUEsRUFDekMsa0JBQWtCLENBQUMsT0FBTztBQUFFLG9CQUFnQjtBQUFBLEVBQUc7QUFBQSxFQUMvQyxnQkFBZ0IsQ0FBQyxPQUFPO0FBQUUsa0JBQWM7QUFBQSxFQUFHO0FBQUEsRUFDM0MsU0FBUztBQUNYO0FBRUEsSUFBSSxTQUFTLEtBQUssSUFBSTtBQUN0QixJQUFJLFdBQVcsS0FBSyxTQUFTO0FBRTdCLElBQU0sYUFBYSxpQkFBaUIsRUFBRSxLQUFLLENBQUM7QUFDNUMsSUFBTSxNQUFNLE1BQU0sTUFBTSxnQkFBQWpCLE1BQUMsT0FBSSxNQUFZLFlBQXdCLEdBQUksRUFBRSxPQUFPLFNBQVMsS0FBSyxLQUFLLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUM1SCxLQUFLLFdBQVcsSUFBSTtBQUNwQixLQUFLLElBQUksV0FBVzsiLAogICJuYW1lcyI6IFsiam9pbiIsICJtYWtlRXZlbnQiLCAiZnV6enlTY29yZSIsICJtb2RlbHMiLCAicHJvdmlkZXJzIiwgImNoYXRncHQiLCAiY2F0YWxvZ0RhdGEiLCAiY29kZXhDcmVkcyIsICJjb25maWciLCAiYm9vdCIsICJzaGVsbHMiLCAiZGlzY292ZXJLZXlzIiwgImFwcGx5S2V5cyIsICJsb2FkQ2F0YWxvZyIsICJleHRyYWN0TW9kZWxzIiwgImFkaG9jTW9kZWwiLCAibG9hZENvZGV4TW9kZWxzIiwgIm9wZW5haUNvbm5lY3RlZCIsICJvcGVuYWlDcmVkZW50aWFscyIsICJkZWZhdWx0TW9kZWwiLCAiZnV6enlTY29yZSIsICJjaGF0Z3B0IiwgInByb3ZpZGVycyIsICJjYXRhbG9nRGF0YSIsICJtb2RlbHMiLCAicmVzb2x2ZU1vZGVsIiwgInJ1blR1cm4iLCAicmVhZENvbmZpZyIsICJjb25maWciLCAiZGlzY292ZXJLZXlzIiwgImFwcGx5S2V5cyIsICJkZWZhdWx0TW9kZWwiLCAibG9hZENhdGFsb2ciLCAiZXh0cmFjdE1vZGVscyIsICJsb2FkQ29kZXhNb2RlbHMiLCAib3BlbmFpQ29ubmVjdGVkIiwgIm9wZW5haUNyZWRlbnRpYWxzIiwgInJlYWRDb25maWciLCAiYnVpbGRQcm9qZWN0Qm9vdCIsICJjcmVhdGVTaGVsbE1hbmFnZXIiLCAiY3JlYXRlU2lnbmFsIiwgImNyZWF0ZVNpZ25hbCIsICJob21lZGlyIiwgInBlbmRpbmciLCAiZmFpbGVkIiwgInBlbmRpbmciLCAiY2FwdHVyZVJlZ2lvbiIsICJwZW5kaW5nIiwgImV4ZWNGaWxlIiwgIm1rZHRlbXAiLCAiZXhpc3RzU3luYyIsICJ0bXBkaXIiLCAiam9pbiIsICJjcmVhdGVTaWduYWwiLCAiTWVudSIsICJTY3JvbGxCb3giLCAiU3Bpbm5lciIsICJUZXh0QXJlYSIsICJ1c2VGb2N1cyIsICJ1c2VJbnB1dCIsICJ1c2VMYXlvdXQiLCAidXNlTW91c2UiLCAidXNlUmVzaXplIiwgImZ1enp5U2NvcmUiLCAiY3JlYXRlU2lnbmFsIiwgImNyZWF0ZVNpZ25hbCIsICJ0aGVtZSIsICJjb21wYWN0TnVtYmVyIiwgIndpZHRoIiwgImpzeCIsICJoaWdobGlnaHQiLCAiZWFzZSIsICJsaW5lYXIiLCAidXNlQW5pbWF0ZWQiLCAianN4IiwgImpzeHMiLCAibWl4Q29sb3IiLCAidXNlQW5pbWF0ZWQiLCAiZWFzZSIsICJsaW5lYXIiLCAiZmFpbGVkIiwgImxhYmVsIiwgImNyZWF0ZVNpZ25hbCIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAiY3JlYXRlU2lnbmFsIiwgIkJ1dHRvbiIsICJUZXh0SW5wdXQiLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAiY3JlYXRlU2lnbmFsIiwgIml0ZW0iLCAidXNlSW5wdXQiLCAiQnV0dG9uIiwgIlRleHRJbnB1dCIsICJjcmVhdGVTaWduYWwiLCAianN4IiwgImpzeHMiLCAid2lkdGgiLCAidmVyc2lvbiIsICJjcmVhdGVTaWduYWwiLCAiTWFya2Rvd24iLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAidXNlSW5wdXQiLCAiTWFya2Rvd24iLCAiY3JlYXRlU2lnbmFsIiwgIkJ1dHRvbiIsICJlYXNlIiwgIk1lbnUiLCAiU2Nyb2xsQm94IiwgIlRleHRJbnB1dCIsICJ1c2VBbmltYXRlZCIsICJ1c2VJbnB1dCIsICJ1c2VJbnRlcnZhbCIsICJ1c2VMYXlvdXQiLCAiZnV6enlTY29yZSIsICJyYW5rRnV6enkiLCAianN4IiwgImpzeHMiLCAidXNlSW5wdXQiLCAiQnV0dG9uIiwgIm1vZGVscyIsICJjcmVhdGVTaWduYWwiLCAiTWVudSIsICJTY3JvbGxCb3giLCAidXNlQW5pbWF0ZWQiLCAiZWFzZSIsICJ1c2VMYXlvdXQiLCAid2lkdGgiLCAidXNlZCIsICJwcm92aWRlcnMiLCAid2FrZXVwcyIsICJ1c2VJbnRlcnZhbCIsICJuYW1lIiwgIlRleHRJbnB1dCIsICJqc3giLCAianN4cyIsICJ1c2VMYXlvdXQiLCAidXNlSW5wdXQiLCAidXNlTW91c2UiLCAiY3JlYXRlU2lnbmFsIiwgImJvb3QiLCAidmVyc2lvbiIsICJtb2RlbHMiLCAidXNlUmVzaXplIiwgIndpZHRoIiwgImRlZmF1bHRNb2RlbCIsICJob21lZGlyIiwgImFybWVkIiwgInVzZUZvY3VzIiwgIml0ZW1zIiwgImZ1enp5U2NvcmUiLCAiU2Nyb2xsQm94IiwgIlRleHRBcmVhIiwgIk1lbnUiLCAicGVuZGluZyIsICJlbGFwc2VkIiwgIlNwaW5uZXIiLCAiY29tcGFjdE51bWJlciIsICJqc3giLCAiaXNEZXZJbnN0YWxsIiwgInJ1blVwZGF0ZSIsICJmZXRjaExhdGVzdFZlcnNpb24iLCAibmV3ZXJWZXJzaW9uIiwgInJ1bkhlYWRsZXNzIiwgInJ1blNoZWxsIiwgImRpc2NvdmVyS2V5cyIsICJvcGVuYWlDb25uZWN0ZWQiLCAiYXBwbHlLZXlzIiwgImxvYWRDYXRhbG9nIiwgIm9wZW5haUNyZWRlbnRpYWxzIiwgImV4dHJhY3RNb2RlbHMiLCAibG9hZENvZGV4TW9kZWxzIiwgImNyZWF0ZVNoZWxsTWFuYWdlciIsICJidWlsZFByb2plY3RCb290IiwgInJlYWRDb25maWciLCAiZGVmYXVsdE1vZGVsIl0KfQo=