picocode 0.9.200 → 0.9.202
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-dictate +0 -0
- package/dist/pico.js +39 -6
- package/package.json +2 -2
package/dist/pico.js
CHANGED
|
@@ -1473,7 +1473,7 @@ function WorkspaceSidebar({ groups, selected, width: width2, loading, error, onH
|
|
|
1473
1473
|
/* @__PURE__ */ jsx3("text", { style: { color: FG_SOFT, bold: true, paddingX: 1 }, children: "Sessions" }),
|
|
1474
1474
|
loading && /* @__PURE__ */ jsx3("text", { style: { color: MUTED }, children: "loading" }),
|
|
1475
1475
|
error && /* @__PURE__ */ jsx3("text", { style: { color: MUTED, overflow: "truncate" }, children: error }),
|
|
1476
|
-
/* @__PURE__ */ jsx3(ScrollBox2, { style: { flexGrow: 1 }, followFocus: focus, focusPadding: 1, onMetrics: (metrics) => onHeight(metrics.visibleHeight), children: groups.map((group) => /* @__PURE__ */ jsxs2("box", { style: { flexDirection: "column" }, children: [
|
|
1476
|
+
/* @__PURE__ */ jsx3(ScrollBox2, { style: { flexGrow: 1 }, followFocus: focus, focusPadding: 1, onMetrics: (metrics) => onHeight(metrics.visibleHeight), children: groups.map((group, index) => /* @__PURE__ */ jsxs2("box", { style: { flexDirection: "column", marginTop: index > 0 ? 1 : 0 }, children: [
|
|
1477
1477
|
/* @__PURE__ */ jsx3("text", { style: { color: MUTED, overflow: "truncate", paddingX: 1 }, children: group.cwd === home ? "~" : group.cwd.startsWith(home + "/") ? "~" + group.cwd.slice(home.length) : group.cwd }),
|
|
1478
1478
|
group.sessions.map((row) => /* @__PURE__ */ jsx3(SessionRow, { row, selected: row.id === selected, focus, now: now() }, row.id))
|
|
1479
1479
|
] }, group.cwd)) })
|
|
@@ -3741,14 +3741,42 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
3741
3741
|
});
|
|
3742
3742
|
flash(pref === "auto" ? `theme: auto following the terminal (${paletteFor("auto")})` : `theme: ${pref}`);
|
|
3743
3743
|
}
|
|
3744
|
+
const [steerDerived, setSteerDerived] = createSignal10(null);
|
|
3745
|
+
let steerPreviewRequest = 0;
|
|
3744
3746
|
function steerPreview() {
|
|
3745
|
-
|
|
3747
|
+
const changes = steer()?.changes;
|
|
3748
|
+
if (!changes?.length) return derived();
|
|
3749
|
+
if (refs.steerPreviewChanges !== changes) {
|
|
3750
|
+
refs.steerPreviewChanges = changes;
|
|
3751
|
+
const request = ++steerPreviewRequest;
|
|
3752
|
+
Promise.resolve(ctl.previewSteer(changes)).then((next) => {
|
|
3753
|
+
if (request === steerPreviewRequest) setSteerDerived(next);
|
|
3754
|
+
}).catch((error) => flash(error.message));
|
|
3755
|
+
}
|
|
3756
|
+
return steerDerived() || derived();
|
|
3757
|
+
}
|
|
3758
|
+
async function loadFullHistory() {
|
|
3759
|
+
if (ctl.loadHistory && (state.derived.transcriptOffset || 0) > 0) await ctl.loadHistory(Infinity);
|
|
3760
|
+
}
|
|
3761
|
+
async function loadOlderHistory() {
|
|
3762
|
+
if (!ctl.loadHistory || refs.historyLoading || !(state.derived.transcriptOffset > 0)) return;
|
|
3763
|
+
refs.historyLoading = true;
|
|
3764
|
+
try {
|
|
3765
|
+
await ctl.loadHistory(state.derived.transcript.length + HISTORY_WINDOW);
|
|
3766
|
+
} catch (error) {
|
|
3767
|
+
flash(error.message);
|
|
3768
|
+
} finally {
|
|
3769
|
+
refs.historyLoading = false;
|
|
3770
|
+
}
|
|
3746
3771
|
}
|
|
3747
3772
|
function steerRows() {
|
|
3748
3773
|
return steerableTranscript(steerPreview().transcript);
|
|
3749
3774
|
}
|
|
3750
|
-
function beginSteer() {
|
|
3775
|
+
async function beginSteer() {
|
|
3751
3776
|
if (busy() || compacting()) return flash("finish or interrupt the current turn first");
|
|
3777
|
+
await loadFullHistory();
|
|
3778
|
+
setSteerDerived(null);
|
|
3779
|
+
refs.steerPreviewChanges = null;
|
|
3752
3780
|
const rows = steerRows();
|
|
3753
3781
|
const selected = Math.max(0, rows.length - 1);
|
|
3754
3782
|
setSteer({ selected, editing: false, adding: false, role: "user", changes: [] });
|
|
@@ -3954,6 +3982,7 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
3954
3982
|
return;
|
|
3955
3983
|
}
|
|
3956
3984
|
if (c.name === "rewind") {
|
|
3985
|
+
await loadFullHistory();
|
|
3957
3986
|
if (busy()) return flash("finish or interrupt the current turn first");
|
|
3958
3987
|
if (userEntries(derived()).length === 0) return flash("nothing to rewind yet");
|
|
3959
3988
|
setRewindStep("pick");
|
|
@@ -4436,11 +4465,13 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
4436
4465
|
return;
|
|
4437
4466
|
}
|
|
4438
4467
|
if (fm.is("feed") && event.key === "/") {
|
|
4468
|
+
await loadFullHistory();
|
|
4439
4469
|
conversationSearch.open();
|
|
4440
4470
|
event.stopPropagation();
|
|
4441
4471
|
return;
|
|
4442
4472
|
}
|
|
4443
4473
|
if (event.ctrl && event.key === "r" && view() === "chat" && !anyPanel()) {
|
|
4474
|
+
await loadFullHistory();
|
|
4444
4475
|
if (busy()) flash("finish or interrupt the current turn first");
|
|
4445
4476
|
else if (userEntries(derived()).length === 0) flash("nothing to rewind yet");
|
|
4446
4477
|
else setRewindStep("pick");
|
|
@@ -4602,7 +4633,7 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
4602
4633
|
const groupItems = (source, active = false) => steer() ? collapseSteerTools(source) : compactToolHistory() ? compactTranscriptRuns(source, active) : source;
|
|
4603
4634
|
const transcriptItems = groupItems(transcript, activeAgent?.status === "running");
|
|
4604
4635
|
const windowed = deliberationView ? { items: transcriptItems, hiddenItems: 0, hiddenCount: 0 } : transcriptWindow(transcriptItems, histWindow());
|
|
4605
|
-
const hiddenCount = windowed.hiddenCount;
|
|
4636
|
+
const hiddenCount = windowed.hiddenCount + (!activeAgent && !activeShell ? derived().transcriptOffset || 0 : 0);
|
|
4606
4637
|
const visibleItems = isolatedTranscript ? windowed.items : [...windowed.items, ...groupItems(overlay(), turnPhase() === "tools"), ...streaming() ? [{ kind: "assistant", text: `${streaming()}\u258B` }] : [], ...unreadPeers];
|
|
4607
4638
|
const preparedConversation = conversationSearch.prepare(visibleItems);
|
|
4608
4639
|
conversationSearchMatches = preparedConversation.matches;
|
|
@@ -4778,6 +4809,7 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
4778
4809
|
if (previous?.visibleHeight === metrics.visibleHeight && previous?.contentHeight === metrics.contentHeight) return;
|
|
4779
4810
|
setTranscriptMetrics(metrics);
|
|
4780
4811
|
if (hiddenCount > 0 && metrics.visibleHeight > 0 && metrics.contentHeight <= metrics.visibleHeight) {
|
|
4812
|
+
if (windowed.hiddenCount === 0) void loadOlderHistory();
|
|
4781
4813
|
setHistWindow((size) => size + HISTORY_WINDOW);
|
|
4782
4814
|
}
|
|
4783
4815
|
},
|
|
@@ -4785,7 +4817,8 @@ function App({ boot: boot2, controller: ctl }) {
|
|
|
4785
4817
|
setFollow(!!meta?.atBottom);
|
|
4786
4818
|
if (meta?.atBottom && histWindow() > HISTORY_WINDOW) setHistWindow(HISTORY_WINDOW);
|
|
4787
4819
|
if (next === 0 && hiddenCount > 0) {
|
|
4788
|
-
|
|
4820
|
+
if (windowed.hiddenCount === 0) void loadOlderHistory();
|
|
4821
|
+
const added = Math.min(HISTORY_WINDOW, windowed.hiddenItems || HISTORY_WINDOW);
|
|
4789
4822
|
const avgRows = Math.max(2, Math.round((meta?.maxOffset || 0) / Math.max(1, items.length)));
|
|
4790
4823
|
setHistWindow((w) => w + HISTORY_WINDOW);
|
|
4791
4824
|
setOffset(added * avgRows);
|
|
@@ -5609,4 +5642,4 @@ for (const signal of ["SIGINT", "SIGTERM", "SIGHUP"]) process.on(signal, () => {
|
|
|
5609
5642
|
process.on("exit", () => connection.close());
|
|
5610
5643
|
var app = mount(() => /* @__PURE__ */ jsx11(App, { boot, controller }), { title: `pico ${boot.root.split("/").pop()}`, theme });
|
|
5611
5644
|
boot.setTheme = app.setTheme;
|
|
5612
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21vZGVsLXJ1bnRpbWUuanMiLCAiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qc3giLCAiLi4vc3JjL3VpL3RoZW1lLmpzIiwgIi4uL3NyYy91aS9wYW5lbHMuanN4IiwgIi4uL3NyYy91aS9hbmltYXRlZC12YWx1ZS5qc3giLCAiLi4vc3JjL3VpL2NvbnRleHQtYmFyLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qcyIsICIuLi9zcmMvdWkvYXBwLmpzeCIsICIuLi9zcmMvdWkvY29tcG9zZXItY29tbWFuZHMuanMiLCAiLi4vc3JjL3VpL2NvbW1hbmQtZm9ybS5qc3giLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzIiwgIi4uL3NyYy9zY3JlZW4tY2FwdHVyZS5qcyIsICIuLi9zcmMvdWkvY29tcG9zZXItZmlsZXMuanMiLCAiLi4vc3JjL3VpL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMiLCAiLi4vc3JjL3VpL2hpZ2hsaWdodC5qcyIsICIuLi9zcmMvdWkvYWN0aXZpdHktc3RyaXAuanMiLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQuanN4IiwgIi4uL3NyYy91aS90cmFuc2NyaXB0LXdpbmRvdy5qcyIsICIuLi9zcmMvdWkvY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCIsICIuLi9zcmMvdWkvcXVlc3Rpb24tZm9ybS5qc3giLCAiLi4vc3JjL3VpL2VtcHR5LXN0YXRlLmpzeCIsICIuLi9zcmMvdWkvaGVscC5qc3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGRpc2NvdmVyS2V5cywgYXBwbHlLZXlzLCBrZXlIaW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9rZXlzLmpzJ1xuaW1wb3J0IHsgbG9hZENhdGFsb2csIGV4dHJhY3RNb2RlbHMsIGFkaG9jTW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NhdGFsb2cuanMnXG5pbXBvcnQgeyBsb2FkQ29kZXhNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvZGV4LW1vZGVscy5qcydcbmltcG9ydCB7IGxvYWRPcGVuUm91dGVyTW9kZWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVucm91dGVyLW1vZGVscy5qcydcbmltcG9ydCB7IG9wZW5haUNvbm5lY3RlZCwgb3BlbmFpQ3JlZGVudGlhbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgZGVmYXVsdE1vZGVsIH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcblxuY29uc3QgQ0FUQUxPR19QUk9WSURFUlMgPSBbJ2dvb2dsZScsICdhbnRocm9waWMnLCAnb3BlbmFpJywgJ3hhaSddXG5cbmZ1bmN0aW9uIGNvZGV4Q29udGV4dChjYXRhbG9nRGF0YSwgbW9kZWwpIHtcbiAgY29uc3QgZW50cnkgPSBjYXRhbG9nRGF0YS5vcGVuYWk/Lm1vZGVscz8uW21vZGVsLm5hbWUuc3BsaXQoJy8nKVsxXV1cbiAgcmV0dXJuIG1vZGVsLmNvbnRleHQgPz8gZW50cnk/LmxpbWl0Py5pbnB1dCA/PyBlbnRyeT8ubGltaXQ/LmNvbnRleHQgPz8gbnVsbFxufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZE1vZGVscyh7IHByb3ZpZGVycywgZm9yY2UgfSkge1xuICBjb25zdCBoYXMgPSAocHJvdmlkZXIpID0+IHByb3ZpZGVycy5pbmNsdWRlcyhwcm92aWRlcilcbiAgY29uc3QgY29kZXhDcmVkZW50aWFscyA9IGhhcygnY29kZXgnKSA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IFtjYXRhbG9nRGF0YSwgY29kZXgsIG9wZW5yb3V0ZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGxvYWRDYXRhbG9nKHsgZm9yY2UgfSksXG4gICAgbG9hZENvZGV4TW9kZWxzKGNvZGV4Q3JlZGVudGlhbHMsIHsgZm9yY2UgfSksXG4gICAgaGFzKCdvcGVucm91dGVyJykgPyBsb2FkT3BlblJvdXRlck1vZGVscyh7IGZvcmNlIH0pIDogW10sXG4gIF0pXG4gIHJldHVybiBbXG4gICAgLi4uZXh0cmFjdE1vZGVscyhjYXRhbG9nRGF0YSwgQ0FUQUxPR19QUk9WSURFUlMpLm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGF2YWlsYWJsZTogaGFzKG1vZGVsLnByb3ZpZGVyKSxcbiAgICAgIGtleUhpbnQ6IGtleUhpbnQobW9kZWwucHJvdmlkZXIpLFxuICAgIH0pKSxcbiAgICAuLi5jb2RleC5tYXAoKG1vZGVsKSA9PiAoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICBjb250ZXh0OiBjb2RleENvbnRleHQoY2F0YWxvZ0RhdGEsIG1vZGVsKSxcbiAgICAgIGF2YWlsYWJsZTogaGFzKCdjb2RleCcpLFxuICAgICAga2V5SGludDogJy9jb25uZWN0JyxcbiAgICB9KSksXG4gICAgLi4ub3BlbnJvdXRlci5tYXAoKG1vZGVsKSA9PiAoeyAuLi5tb2RlbCwgYXZhaWxhYmxlOiB0cnVlLCBrZXlIaW50OiBrZXlIaW50KCdvcGVucm91dGVyJykgfSkpLFxuICBdXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxSdW50aW1lKCkge1xuICBjb25zdCBjaGF0Z3B0ID0gYXdhaXQgb3BlbmFpQ29ubmVjdGVkKClcbiAgY29uc3QgcHJvdmlkZXJzID0gWy4uLmFwcGx5S2V5cyhkaXNjb3ZlcktleXMoKSksIC4uLihjaGF0Z3B0ID8gWydjb2RleCddIDogW10pXVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gY2hhdGdwdCA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IGxvYWRNb2RlbHMgPSAoeyBmb3JjZSA9IGZhbHNlIH0gPSB7fSkgPT4gYnVpbGRNb2RlbHMoeyBwcm92aWRlcnMsIGZvcmNlIH0pXG4gIHJldHVybiB7IHByb3ZpZGVycywgbW9kZWxzOiBhd2FpdCBsb2FkTW9kZWxzKCksIGNvZGV4Q3JlZGVudGlhbHMsIGxvYWRNb2RlbHMgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKG1vZGVscywgcHJvdmlkZXJzLCBuYW1lKSB7XG4gIGlmICghbmFtZSkgcmV0dXJuIG51bGxcbiAgY29uc3QgZXhhY3QgPSBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IG5hbWUpXG4gIGlmIChleGFjdCkgcmV0dXJuIGV4YWN0XG4gIGlmIChuYW1lLmluY2x1ZGVzKCcvJykpIHJldHVybiBhZGhvY01vZGVsKG5hbWUsIHByb3ZpZGVycylcbiAgY29uc3QgYXZhaWxhYmxlID0gbW9kZWxzLmZpbHRlcigobW9kZWwpID0+IG1vZGVsLmF2YWlsYWJsZSAhPT0gZmFsc2UpXG4gIHJldHVybiBhdmFpbGFibGVcbiAgICAgIC5tYXAoKG1vZGVsKSA9PiBbZnV6enlTY29yZShuYW1lLCBtb2RlbC5uYW1lKSwgbW9kZWxdKVxuICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSlbMF0/LlsxXVxuICAgIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZCwgY29uZmlndXJlZCB9KSB7XG4gIHJldHVybiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZClcbiAgICB8fCAoY29uZmlndXJlZCAmJiBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IGNvbmZpZ3VyZWQgJiYgbW9kZWwuYXZhaWxhYmxlKSlcbiAgICB8fCBkZWZhdWx0TW9kZWwobW9kZWxzKVxufVxuIiwgImltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBmaW5kTW9kZWwsIHVzYWdlQ29zdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbW9kZWxzLmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0Qm9vdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYm9vdC5qcydcbmltcG9ydCB7IGNyZWF0ZVNoZWxsTWFuYWdlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2hlbGxzLmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2Vzc2lvbiwgb3BlblNlc3Npb24sIGxvYWRTZXNzaW9uLCBvblNlc3Npb25Xcml0ZUVycm9yIH0gZnJvbSAncGljb2NvZGUtY29yZS9zZXNzaW9uLmpzJ1xuaW1wb3J0IHsgc2Vzc2lvbnNEaXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3BhdGhzLmpzJ1xuaW1wb3J0IHsgbWFrZUV2ZW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9ldmVudHMuanMnXG5pbXBvcnQgeyBkZXJpdmVTdGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlVG9vbHNldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvaW5kZXguanMnXG5pbXBvcnQgeyBydW5UdXJuIH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC5qcydcbmltcG9ydCB7IGJ1aWxkU3lzdGVtUHJvbXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9zeXN0ZW0tcHJvbXB0LmpzJ1xuaW1wb3J0IHsgbWVtb3J5SW5kZXggfSBmcm9tICdwaWNvY29kZS1jb3JlL21lbW9yeS5qcydcbmltcG9ydCB7IGZpbmFsaXplVXNlckNvbnRlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRTdGRpbigpIHtcbiAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpIHJldHVybiAnJ1xuICBsZXQgZGF0YSA9ICcnXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcHJvY2Vzcy5zdGRpbikge1xuICAgIGRhdGEgKz0gY2h1bmtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiA0MDAwMDApIGJyZWFrXG4gIH1cbiAgcmV0dXJuIGRhdGEuc2xpY2UoMCwgNDAwMDAwKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSGVhZGxlc3Mob3B0cykge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGxvZyA9IG9wdHMucXVpZXQgPyAoKSA9PiB7fSA6IChsaW5lKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShsaW5lICsgJ1xcbicpXG5cbiAgb25TZXNzaW9uV3JpdGVFcnJvcigoZXJyLCBmaWxlKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogY291bGQgbm90IHdyaXRlICR7ZmlsZX06ICR7ZXJyLm1lc3NhZ2V9XFxuYCkpXG5cbiAgY29uc3QgeyBwcm92aWRlcnMsIG1vZGVscywgY29kZXhDcmVkZW50aWFsczogY29kZXhDcmVkcyB9ID0gYXdhaXQgbG9hZE1vZGVsUnVudGltZSgpXG4gIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IG5vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KVxcbicpXG4gICAgcmV0dXJuIDFcbiAgfVxuICBjb25zdCBjb25maWcgPSBhd2FpdCByZWFkQ29uZmlnKClcblxuICBjb25zdCBtb2RlbCA9IHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZDogb3B0cy5tb2RlbCwgY29uZmlndXJlZDogY29uZmlnLmRlZmF1bHRNb2RlbCB9KVxuICBpZiAoIW1vZGVsIHx8IG1vZGVsLmF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogbm8gdXNhYmxlIG1vZGVsJHtvcHRzLm1vZGVsID8gYCBtYXRjaGluZyBcIiR7b3B0cy5tb2RlbH1cImAgOiAnJ31cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbiAgaWYgKG9wdHMuc3BlZWQgPT09ICdmYXN0JyAmJiAhbW9kZWwuc3BlZWQpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogJHttb2RlbC5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xcXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbiAgY29uc3QgZWZmb3J0ID0gb3B0cy5lZmZvcnQgPz8gKG1vZGVsLmVmZm9ydCA/ICdhdXRvJyA6IG51bGwpXG5cbiAgY29uc3QgYm9vdCA9IGF3YWl0IGJ1aWxkUHJvamVjdEJvb3QocHJvY2Vzcy5jd2QoKSlcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtib290Lm1jcC5jb25uZWN0QWxsKCksIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMDAwKSldKVxuICBjb25zdCBzaGVsbHMgPSBjcmVhdGVTaGVsbE1hbmFnZXIoKVxuXG4gIGxldCBzZXNzaW9uXG4gIGxldCBldmVudHMgPSBbXVxuICBpZiAob3B0cy5yZXN1bWUpIHtcbiAgICBjb25zdCBmaWxlID0gb3B0cy5yZXN1bWUuaW5jbHVkZXMoJy8nKSA/IG9wdHMucmVzdW1lIDogam9pbihzZXNzaW9uc0Rpcihib290LnJvb3QpLCBgJHtvcHRzLnJlc3VtZX0uanNvbmxgKVxuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRTZXNzaW9uKGZpbGUpXG4gICAgc2Vzc2lvbiA9IG9wZW5TZXNzaW9uKHsgZmlsZSwgaGVhZGVyOiBsb2FkZWQuaGVhZGVyIH0pXG4gICAgZXZlbnRzID0gbG9hZGVkLmV2ZW50c1xuICB9IGVsc2Uge1xuICAgIHNlc3Npb24gPSBjcmVhdGVTZXNzaW9uKHsgY3dkOiBib290LmN3ZCwgcm9vdDogYm9vdC5yb290IH0pXG4gIH1cblxuICBjb25zdCBwZXJzaXN0ID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQpXG4gICAgc2Vzc2lvbi5hcHBlbmQoZXZlbnQpXG4gICAgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoZXZlbnQpICsgJ1xcbicpXG4gIH1cblxuICBjb25zdCByZXN0b3JlZFNwZWVkID0gZGVyaXZlU3RhdGUoZXZlbnRzKS5zcGVlZFxuICBjb25zdCBzcGVlZCA9IG1vZGVsLnNwZWVkID8gKG9wdHMuc3BlZWQgPz8gKG9wdHMucmVzdW1lID8gcmVzdG9yZWRTcGVlZCA/PyAnc3RhbmRhcmQnIDogY29uZmlnLnNwZWVkRGVmYXVsdHM/Llttb2RlbC5uYW1lXSkgPz8gJ3N0YW5kYXJkJykgOiAnc3RhbmRhcmQnXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdzcGVlZCcsIHsgdG86IHNwZWVkIH0pKVxuXG4gIGNvbnN0IHN0ZGluRGF0YSA9IGF3YWl0IHJlYWRTdGRpbigpXG4gIGNvbnN0IHByb21wdFRleHQgPSBzdGRpbkRhdGEgPyBgJHtvcHRzLnByb21wdH1cXG5cXG5bcGlwZWQgaW5wdXRdXFxuJHtzdGRpbkRhdGF9YCA6IG9wdHMucHJvbXB0XG4gIGNvbnN0IHsgY29udGVudCB9ID0gZmluYWxpemVVc2VyQ29udGVudChwcm9tcHRUZXh0LCBuZXcgTWFwKCkpXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlOiB7IHJvbGU6ICd1c2VyJywgY29udGVudCB9IH0pKVxuXG4gIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVTdGF0ZShldmVudHMpXG4gIGNvbnN0IGxvYWRlZEJlZm9yZSA9IG5ldyBTZXQoYm9vdC50cmFja2VyLmxvYWRlZClcbiAgY29uc3QgeyB0b29scywgcmVjb3JkZXIgfSA9IGNyZWF0ZVRvb2xzZXQoe1xuICAgIGN3ZDogYm9vdC5jd2QsXG4gICAgdHJhY2tlcjogYm9vdC50cmFja2VyLFxuICAgIHNraWxsczogYm9vdC5za2lsbHMsXG4gICAgc2hlbGxzLFxuICAgIG1lbW9yeTogYm9vdC5tZW1vcnksXG4gICAgbWNwVG9vbHM6IGJvb3QubWNwLnRvb2xzKCksXG4gICAgdXNlclRvb2xzOiBbXSxcbiAgICBtYXhUb29sQ2FsbHM6IG9wdHMubWF4VG9vbENhbGxzID8/IDUwLFxuICB9KVxuXG4gIGxldCBhdXRoID0gbnVsbFxuICBpZiAobW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcpIHtcbiAgICBhdXRoID0gY29kZXhDcmVkc1xuICAgIGlmICghYXV0aCkge1xuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IGNvZGV4IG1vZGVscyBuZWVkIGEgQ2hhdEdQVCBzaWduLWluIChydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICAgIGF3YWl0IHNlc3Npb24uZmx1c2goKVxuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gIH1cblxuICBsb2coYHBpY28gICR7bW9kZWwubmFtZX0ke21vZGVsLnNwZWVkICYmIHNwZWVkID09PSAnZmFzdCcgPyAnICBGYXN0JyA6ICcnfSR7ZWZmb3J0ID8gYCAgJHtlZmZvcnR9YCA6ICcnfSAgc2Vzc2lvbiAke3Nlc3Npb24uaWR9YClcbiAgbGV0IHRob3VnaHRzID0gJydcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVHVybih7XG4gICAgaGlzdG9yeTogZGVyaXZlZC5wcm92aWRlckhpc3RvcnksXG4gICAgdG9vbHMsXG4gICAgcmVjb3JkZXIsXG4gICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgIGVmZm9ydCxcbiAgICAuLi4obW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcgJiYgeyBzcGVlZCB9KSxcbiAgICBhdXRoLFxuICAgIHN5c3RlbTogYnVpbGRTeXN0ZW1Qcm9tcHQoe1xuICAgICAgY3dkOiBib290LmN3ZCxcbiAgICAgIGNvbnRleHRGaWxlczogYm9vdC5zdGFydHVwQ29udGV4dC5maWxlcyxcbiAgICAgIHNraWxsczogYm9vdC5za2lsbHMubGlzdCgpLFxuICAgICAgbWVtb3J5SW5kZXhUZXh0OiBtZW1vcnlJbmRleChhd2FpdCBib290Lm1lbW9yeS5saXN0KCkuY2F0Y2goKCkgPT4gW10pLCBib290LnJvb3QpLFxuICAgIH0pLFxuICAgIG9uU3RyZWFtOiAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndGhpbmtpbmcnKSB0aG91Z2h0cyArPSBldmVudC5jb250ZW50XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfY29tcGxldGUnKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcmVjb3JkZXIuZW50cmllcy5hdCgtMSlcbiAgICAgICAgbG9nKGAgIFx1MjcxMyAke2VudHJ5Py5uYW1lID8/IGV2ZW50LmNhbGwuZnVuY3Rpb24ubmFtZX0gICR7ZW50cnk/LnRpdGxlID8/ICcnfWApXG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfZXJyb3InKSBsb2coYCAgXHUyNzE3ICR7ZXZlbnQuY2FsbC5mdW5jdGlvbi5uYW1lfSAgJHtldmVudC5lcnJvci5zbGljZSgwLCAxMjApfWApXG4gICAgfSxcbiAgfSlcblxuICBpZiAodGhvdWdodHMpIHBlcnNpc3QobWFrZUV2ZW50KCd0aG91Z2h0cycsIHsgdGV4dDogdGhvdWdodHMgfSkpXG4gIGZvciAoY29uc3QgbWVzc2FnZSBvZiByZXN1bHQubWVzc2FnZXMpIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlIH0pKVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlY29yZGVyLmVudHJpZXMpIHBlcnNpc3QobWFrZUV2ZW50KCd0b29sX21ldGEnLCBlbnRyeSkpXG4gIGZvciAoY29uc3QgcGF0aCBvZiBib290LnRyYWNrZXIubG9hZGVkKSB7XG4gICAgaWYgKCFsb2FkZWRCZWZvcmUuaGFzKHBhdGgpKSBwZXJzaXN0KG1ha2VFdmVudCgnY29udGV4dF9maWxlJywgeyBwYXRoIH0pKVxuICB9XG4gIGlmIChyZXN1bHQudXNhZ2UpIHBlcnNpc3QobWFrZUV2ZW50KCd1c2FnZScsIHsgbW9kZWw6IG1vZGVsLm5hbWUsIHVzYWdlOiByZXN1bHQudXNhZ2UsIGxhc3RQcm9tcHQ6IHJlc3VsdC5sYXN0UHJvbXB0VG9rZW5zIH0pKVxuICBpZiAocmVzdWx0LmludGVycnVwdGVkKSBwZXJzaXN0KG1ha2VFdmVudCgnaW50ZXJydXB0Jywge30pKVxuXG4gIGNvbnN0IHJ1bm5pbmcgPSBzaGVsbHMucnVubmluZygpXG4gIGlmIChydW5uaW5nID4gMCkgbG9nKGAgIGtpbGxpbmcgJHtydW5uaW5nfSBiYWNrZ3JvdW5kIHNoZWxsJHtydW5uaW5nID09PSAxID8gJycgOiAncyd9YClcbiAgc2hlbGxzLmtpbGxBbGwoKVxuICBhd2FpdCBib290Lm1jcC5jbG9zZUFsbCgpLmNhdGNoKCgpID0+IHt9KVxuICAvLyB0aGUgY2FsbGVyIGV4aXRzIHRoZSBwcm9jZXNzIHRoZSBtb21lbnQgdGhpcyByZXR1cm5zLCB3aGljaCB3b3VsZCBkaXNjYXJkXG4gIC8vIGV2ZXJ5IGFwcGVuZCBzdGlsbCBpbiBmbGlnaHRcbiAgYXdhaXQgc2Vzc2lvbi5mbHVzaCgpXG5cbiAgY29uc3QgdGV4dCA9IHJlc3VsdC5tZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ucm9sZSA9PT0gJ2Fzc2lzdGFudCcgJiYgdHlwZW9mIG0uY29udGVudCA9PT0gJ3N0cmluZycgJiYgbS5jb250ZW50KS5hdCgtMSk/LmNvbnRlbnQgPz8gJydcbiAgY29uc3Qgc3VtbWFyeSA9IHtcbiAgICB0ZXh0LFxuICAgIHNlc3Npb246IHNlc3Npb24uaWQsXG4gICAgc2Vzc2lvbkZpbGU6IHNlc3Npb24uZmlsZSxcbiAgICBtb2RlbDogbW9kZWwubmFtZSxcbiAgICB1c2FnZTogcmVzdWx0LnVzYWdlLFxuICAgIGNvc3Q6IHVzYWdlQ29zdChmaW5kTW9kZWwobW9kZWxzLCBtb2RlbC5uYW1lKSwgcmVzdWx0LnVzYWdlKSxcbiAgICB0b29sQ2FsbHM6IHJlY29yZGVyLmVudHJpZXMubGVuZ3RoLFxuICAgIGludGVycnVwdGVkOiByZXN1bHQuaW50ZXJydXB0ZWQsXG4gICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgfVxuXG4gIGlmIChvcHRzLmpzb24pIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KHN1bW1hcnkpICsgJ1xcbicpXG4gIGVsc2UgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncmVzdWx0JywgLi4uc3VtbWFyeSwgdGV4dDogdW5kZWZpbmVkLCBhdDogRGF0ZS5ub3coKSB9KSArICdcXG4nKVxuICBlbHNlIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRleHQgKyAnXFxuJylcblxuICByZXR1cm4gcmVzdWx0LmludGVycnVwdGVkID8gMSA6IDBcbn1cbiIsICJpbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IHJ1blR1cm4gfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmNvbnN0IFNZU1RFTSA9ICh7IHBsYXRmb3JtLCBzaGVsbCwgY3dkIH0pID0+IGBHZW5lcmF0ZSBleGFjdGx5IG9uZSBzaGVsbCBjb21tYW5kIHRoYXQgc2F0aXNmaWVzIHRoZSB1c2VyJ3MgcmVxdWVzdC4gVGhlIG91dHB1dCBtdXN0IGJlIGEgdmFsaWQgc2hlbGwgY29tbWFuZCB3aXRob3V0IE1hcmtkb3duIGZvcm1hdHRpbmcuIElmIG11bHRpcGxlIHN0ZXBzIGFyZSByZXF1aXJlZCwgdHJ5IHRvIGNvbWJpbmUgdGhlbSB0b2dldGhlciB1c2luZyAmJi5cblxuRW52aXJvbm1lbnQ6XG4tIG9wZXJhdGluZyBzeXN0ZW06ICR7cGxhdGZvcm19XG4tIHNoZWxsOiAke3NoZWxsfVxuLSBjdXJyZW50IGRpcmVjdG9yeTogJHtjd2R9XG5cbk91dHB1dCBvbmx5IHRoZSBjb21tYW5kIGFzIG9uZSBsaW5lLiBEbyBub3QgdXNlIE1hcmtkb3duIGZvcm1hdHRpbmcgc3VjaCBhcyBcXGBcXGBcXGAuIERvIG5vdCBleHBsYWluIHRoZSBjb21tYW5kLiBEbyBub3QgZXhlY3V0ZSB0aGUgY29tbWFuZC5gXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpIHtcbiAgY29uc3QgY29tbWFuZCA9IHRleHQudHJpbSgpXG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgYW4gZW1wdHkgY29tbWFuZCcpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdcXDAnKSB8fCAvW1xcclxcbl0vLnRlc3QoY29tbWFuZCkpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIG1vcmUgdGhhbiBvbmUgbGluZScpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdgYGAnKSkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgTWFya2Rvd24gaW5zdGVhZCBvZiBhIGNvbW1hbmQnKVxuICByZXR1cm4gY29tbWFuZFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2hlbGwob3B0cywgZGVwZW5kZW5jaWVzID0ge30pIHtcbiAgY29uc3Qgc3RkZXJyID0gZGVwZW5kZW5jaWVzLnN0ZGVyciB8fCBwcm9jZXNzLnN0ZGVyclxuICBjb25zdCBzdGRvdXQgPSBkZXBlbmRlbmNpZXMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0XG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgKGRlcGVuZGVuY2llcy5yZWFkQ29uZmlnIHx8IHJlYWRDb25maWcpKClcbiAgICBjb25zdCBydW50aW1lID0gYXdhaXQgKGRlcGVuZGVuY2llcy5sb2FkTW9kZWxSdW50aW1lIHx8IGxvYWRNb2RlbFJ1bnRpbWUpKClcbiAgICBpZiAocnVudGltZS5wcm92aWRlcnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ25vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCBjb25maWd1cmVkTW9kZWwgPSBjb25maWcubW9kZWxzPy5zaGVsbFxuICAgIGNvbnN0IG1vZGVsID0gc2VsZWN0TW9kZWwoe1xuICAgICAgbW9kZWxzOiBydW50aW1lLm1vZGVscyxcbiAgICAgIHByb3ZpZGVyczogcnVudGltZS5wcm92aWRlcnMsXG4gICAgICByZXF1ZXN0ZWQ6IG9wdHMubW9kZWwsXG4gICAgICBjb25maWd1cmVkOiBjb25maWd1cmVkTW9kZWwgfHwgY29uZmlnLmRlZmF1bHRNb2RlbCxcbiAgICB9KVxuICAgIGNvbnN0IHJlcXVlc3RlZE5hbWUgPSBvcHRzLm1vZGVsIHx8IGNvbmZpZ3VyZWRNb2RlbFxuICAgIGlmICghbW9kZWwgfHwgbW9kZWwuYXZhaWxhYmxlID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyB1c2FibGUgbW9kZWwke3JlcXVlc3RlZE5hbWUgPyBgIG1hdGNoaW5nIFwiJHtyZXF1ZXN0ZWROYW1lfVwiYCA6ICcnfWApXG4gICAgfVxuXG4gICAgaWYgKG9wdHMuc3BlZWQgPT09ICdmYXN0JyAmJiAhbW9kZWwuc3BlZWQpIHRocm93IG5ldyBFcnJvcihgJHttb2RlbC5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xgKVxuXG4gICAgY29uc3QgYXV0aCA9IG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnID8gcnVudGltZS5jb2RleENyZWRlbnRpYWxzIDogbnVsbFxuICAgIGlmIChtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiAhYXV0aCkgdGhyb3cgbmV3IEVycm9yKCdjb2RleCBtb2RlbHMgbmVlZCBhIENoYXRHUFQgc2lnbi1pbiAocnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoZGVwZW5kZW5jaWVzLnJ1blR1cm4gfHwgcnVuVHVybikoe1xuICAgICAgaGlzdG9yeTogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiBvcHRzLnByb21wdCB9XSxcbiAgICAgIHRvb2xzOiBbXSxcbiAgICAgIHJlY29yZGVyOiBudWxsLFxuICAgICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgICAgZWZmb3J0OiBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2xvdycgOiBudWxsKSxcbiAgICAgIC4uLihtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiB7IHNwZWVkOiBtb2RlbC5zcGVlZCA/IChvcHRzLnNwZWVkID8/ICdzdGFuZGFyZCcpIDogJ3N0YW5kYXJkJyB9KSxcbiAgICAgIGF1dGgsXG4gICAgICBzeXN0ZW06IFNZU1RFTSh7XG4gICAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/ICdtYWNPUycgOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgICBzaGVsbDogYmFzZW5hbWUocHJvY2Vzcy5lbnYuU0hFTEwgfHwgJ3pzaCcpLFxuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICB9KSxcbiAgICB9KVxuICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IpXG4gICAgaWYgKHJlc3VsdC5pbnRlcnJ1cHRlZCkgdGhyb3cgbmV3IEVycm9yKCdjb21tYW5kIGdlbmVyYXRpb24gd2FzIGludGVycnVwdGVkJylcbiAgICBjb25zdCB0ZXh0ID0gcmVzdWx0Lm1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmIHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnKVxuICAgICAgLmF0KC0xKT8uY29udGVudCB8fCAnJ1xuICAgIHN0ZG91dC53cml0ZShjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpICsgJ1xcbicpXG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzdGRlcnIud3JpdGUoYHBpY286ICR7ZXJyb3IubWVzc2FnZX1cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJ1xuaW1wb3J0IHsgZW5zdXJlRGFlbW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9kYWVtb24tdHJhbnNwb3J0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlUmVtb3RlQ29udHJvbGxlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcmVtb3RlLWNvbnRyb2xsZXIuanMnXG5pbXBvcnQgeyBtb3VudCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IHBhcnNlQXJncywgVVNBR0UgfSBmcm9tICcuL2NsaS1hcmdzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IGRldGVjdFRlcm1pbmFsVGhlbWUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rlcm1pbmFsLXRoZW1lLmpzJ1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi91aS9hcHAuanN4J1xuaW1wb3J0IHsgREVGQVVMVF9BQ0NFTlQsIE1VVEVELCBzZXRQYWxldHRlLCBwYWxldHRlTGlzdCB9IGZyb20gJy4vdWkvdGhlbWUuanMnXG5cbmNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4uL3BhY2thZ2UuanNvbicsIGltcG9ydC5tZXRhLnVybCksICd1dGYtOCcpKVxuXG5sZXQgY2xpXG50cnkge1xuICBjbGkgPSBwYXJzZUFyZ3MocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxufSBjYXRjaCAoZXJyKSB7XG4gIGNvbnNvbGUuZXJyb3IoYHBpY286ICR7ZXJyLm1lc3NhZ2V9YClcbiAgY29uc29sZS5lcnJvcihVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWxwJykge1xuICBjb25zb2xlLmxvZyhVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd2ZXJzaW9uJykge1xuICBjb25zb2xlLmxvZyhwa2cudmVyc2lvbilcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd1cGRhdGUnKSB7XG4gIGNvbnN0IHsgaXNEZXZJbnN0YWxsLCBydW5VcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uIH0gPSBhd2FpdCBpbXBvcnQoJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJylcbiAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSB7XG4gICAgY29uc29sZS5lcnJvcigndGhpcyBwaWNvIHJ1bnMgZnJvbSBhIHNvdXJjZSBjaGVja291dDsgdXBkYXRlIGl0IHdpdGggZ2l0LCBub3QgbnBtJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICBpZiAobGF0ZXN0ICYmICFuZXdlclZlcnNpb24ocGtnLnZlcnNpb24sIGxhdGVzdCkpIHtcbiAgICBjb25zb2xlLmxvZyhgcGljbyB2JHtwa2cudmVyc2lvbn0gaXMgYWxyZWFkeSB0aGUgbGF0ZXN0YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGluZyBwaWNvY29kZSAke2xhdGVzdCA/IGB0byB2JHtsYXRlc3R9IGAgOiAnJ312aWEgbnBtLi4uYClcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVXBkYXRlKClcbiAgaWYgKHJlc3VsdC5vaykge1xuICAgIGNvbnNvbGUubG9nKGB1cGRhdGVkJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGUgZmFpbGVkOlxcbiR7cmVzdWx0Lm91dHB1dH1gKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ2Nvbm5lY3QnKSB7XG4gIGNvbnN0IHsgY29ubmVjdE9wZW5BSSB9ID0gYXdhaXQgaW1wb3J0KCdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJylcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmVycm9yKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjb25zdCB7IGVtYWlsIH0gPSBhd2FpdCBjb25uZWN0T3BlbkFJKHsgb25Vcmw6ICh1cmwpID0+IGNvbnNvbGUuZXJyb3IoYGlmIHRoZSBicm93c2VyIGRpZCBub3Qgb3BlbiwgdmlzaXQ6XFxuJHt1cmx9YCkgfSlcbiAgICBjb25zb2xlLmxvZyhgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J31gKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKGBjb25uZWN0IGZhaWxlZDogJHtlcnIubWVzc2FnZX1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWFkbGVzcycpIHtcbiAgY29uc3QgeyBydW5IZWFkbGVzcyB9ID0gYXdhaXQgaW1wb3J0KCcuL2hlYWRsZXNzLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1bkhlYWRsZXNzKGNsaSkpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdzaGVsbCcpIHtcbiAgY29uc3QgeyBydW5TaGVsbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3NoZWxsLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1blNoZWxsKGNsaSkpXG59XG5cbmNvbnN0IHsgcHJvdmlkZXJzIH0gPSBhd2FpdCBsb2FkTW9kZWxSdW50aW1lKClcblxuaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgY29uc29sZS5lcnJvcigncGljbzogbm8gY3JlZGVudGlhbHMgZm91bmQuJylcbiAgY29uc29sZS5lcnJvcignc2V0IG9uZSBvZjogR0VNSU5JX0FQSV9LRVksIEFOVEhST1BJQ19BUElfS0VZLCBPUEVOQUlfQVBJX0tFWSwgWEFJX0FQSV9LRVksIE9QRU5ST1VURVJfQVBJX0tFWScpXG4gIGNvbnNvbGUuZXJyb3IoJ29yIHNpZ24gaW4gd2l0aCBhIENoYXRHUFQgcGxhbjogcGljbyAtLWNvbm5lY3QnKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cblxuY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZENvbmZpZygpXG5cbmNvbnN0IGRldGVjdGVkVGhlbWUgPSBhd2FpdCBkZXRlY3RUZXJtaW5hbFRoZW1lKClcbmNvbnN0IHRoZW1lT3ZlcnJpZGUgPSBwYWxldHRlTGlzdCgpLnNvbWUoKHApID0+IHAua2V5ID09PSBjb25maWcudGhlbWUpID8gY29uZmlnLnRoZW1lIDogbnVsbFxuc2V0UGFsZXR0ZSh0aGVtZU92ZXJyaWRlIHx8IGRldGVjdGVkVGhlbWUpXG5jb25zdCB0aGVtZSA9IHsgYWNjZW50OiBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH1cblxuY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGVuc3VyZURhZW1vbih7IGVudHJ5OiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vZGFlbW9uLmpzJywgaW1wb3J0Lm1ldGEudXJsKSkgfSlcbmNvbnN0IGNvbnRyb2xsZXIgPSBhd2FpdCBjcmVhdGVSZW1vdGVDb250cm9sbGVyKGNvbm5lY3Rpb24sIHtcbiAgb3B0aW9uczogeyBjd2Q6IHByb2Nlc3MuY3dkKCksIHZlcnNpb246IHBrZy52ZXJzaW9uLCB0aGVtZSwgZGV0ZWN0ZWRUaGVtZSwgdGhlbWVQcmVmOiB0aGVtZU92ZXJyaWRlIHx8ICdhdXRvJyB9LFxuICBsb2NhbEJvb3Q6IHsgcmVmczoge30gfSxcbn0pXG5jb25zdCBib290ID0gY29udHJvbGxlci5ib290XG5pZiAoY2xpLnNwZWVkKSBhd2FpdCBjb250cm9sbGVyLnNwZWVkQ29tbWFuZChjbGkuc3BlZWQpXG5mb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR0lOVCcsICdTSUdURVJNJywgJ1NJR0hVUCddKSBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICBjb25uZWN0aW9uLmNsb3NlKClcbiAgcHJvY2Vzcy5leGl0KDApXG59KVxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IGNvbm5lY3Rpb24uY2xvc2UoKSlcbmNvbnN0IGFwcCA9IG1vdW50KCgpID0+IDxBcHAgYm9vdD17Ym9vdH0gY29udHJvbGxlcj17Y29udHJvbGxlcn0gLz4sIHsgdGl0bGU6IGBwaWNvICAke2Jvb3Qucm9vdC5zcGxpdCgnLycpLnBvcCgpfWAsIHRoZW1lIH0pXG5ib290LnNldFRoZW1lID0gYXBwLnNldFRoZW1lXG4iLCAiZXhwb3J0IGNvbnN0IFVTQUdFID0gYHBpY28gLSBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsXG5cbnVzYWdlOlxuICBwaWNvICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSBzZXNzaW9uIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICBwaWNvIC1wIFwicHJvbXB0XCIgICAgICAgICAgIGhlYWRsZXNzOiBydW4gb25lIGFnZW50aWMgdHVybiwgcHJpbnQgdGhlIGFuc3dlclxuICBwaWNvIC1zIFwicmVxdWVzdFwiICAgICAgICAgIGdlbmVyYXRlIG9uZSBzaGVsbCBjb21tYW5kLCB3aXRob3V0IHJ1bm5pbmcgaXRcbiAgY2F0IGxvZyB8IHBpY28gLXAgXCIuLi5cIiAgICBzdGRpbiBpcyBhcHBlbmRlZCB0byB0aGUgcHJvbXB0IGFzIGNvbnRleHRcblxuY29tbWFuZCBmbGFnczpcbiAgLXAsIC0tcHJpbnQgPHByb21wdD4gICAgICAgcnVuIG9uZSBhZ2VudGljIHR1cm4gYW5kIHByaW50IHRoZSBhbnN3ZXJcbiAgLXMsIC0tc2hlbGwgPHJlcXVlc3Q+ICAgICAgcHJpbnQgb25lIGdlbmVyYXRlZCBzaGVsbCBjb21tYW5kXG4gIC0tanNvbiAgICAgICAgICAgICAgICAgICAgIHByaW50IGEgc2luZ2xlIEpTT04gcmVzdWx0IG9iamVjdCB0byBzdGRvdXRcbiAgLS1zdHJlYW0tanNvbiAgICAgICAgICAgICAgc3RyZWFtIHNlc3Npb24gZXZlbnRzIHRvIHN0ZG91dCBhcyBqc29ubFxuICAtbSwgLS1tb2RlbCA8bmFtZT4gICAgICAgICBtb2RlbCB0byB1c2UgKGZ1enp5IG1hdGNoZWQsIG9yIHJhdyBwcm92aWRlci9tb2RlbClcbiAgLS1zcGVlZCA8bGV2ZWw+ICAgICAgICAgICAgc3BlZWQ6IHN0YW5kYXJkfGZhc3RcbiAgLS1lZmZvcnQgPGxldmVsPiAgICAgICAgICAgdGhpbmtpbmcgZWZmb3J0OiBhdXRvfGxvd3xtZWRpdW18aGlnaHxtYXhcbiAgLS1yZXN1bWUgPHNlc3Npb24taWQ+ICAgICAgY29udGludWUgYW4gZXhpc3Rpbmcgc2Vzc2lvbiBmcm9tIHRoaXMgcHJvamVjdFxuICAtLW1heC10b29sLWNhbGxzIDxuPiAgICAgICBzdG9wIHRoZSBhZ2VudCBhZnRlciBuIHRvb2wgY2FsbHMgKGRlZmF1bHQgNTApXG4gIC1xLCAtLXF1aWV0ICAgICAgICAgICAgICAgIG5vIHByb2dyZXNzIG91dHB1dCBvbiBzdGRlcnJcblxuICAtLWNvbm5lY3QgICAgICAgICAgICAgICAgICBzaWduIGluIHdpdGggYSBDaGF0R1BUIHBsYW4gKE9BdXRoIGluIHlvdXIgYnJvd3NlcilcbiAgdXBkYXRlLCAtLXVwZGF0ZSAgICAgICAgICAgdXBkYXRlIHBpY28gdG8gdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gbnBtXG4gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwXG4gIC12LCAtLXZlcnNpb24gICAgICAgICAgICAgIHNob3cgdmVyc2lvbmBcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2KSB7XG4gIGNvbnN0IG9wdHMgPSB7IG1vZGU6ICdpbnRlcmFjdGl2ZScgfVxuICBjb25zdCB0YWtlVmFsdWUgPSAobmFtZSwgaSkgPT4ge1xuICAgIGlmIChpICsgMSA+PSBhcmd2Lmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IHJlcXVpcmVzIGEgdmFsdWVgKVxuICAgIHJldHVybiBhcmd2W2kgKyAxXVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJnID0gYXJndltpXVxuICAgIGlmIChhcmcgPT09ICctcCcgfHwgYXJnID09PSAnLS1wcmludCcpIHtcbiAgICAgIGlmIChvcHRzLm1vZGUgIT09ICdpbnRlcmFjdGl2ZScpIHRocm93IG5ldyBFcnJvcihgJHthcmd9IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgY29tbWFuZCBtb2RlYClcbiAgICAgIG9wdHMubW9kZSA9ICdoZWFkbGVzcydcbiAgICAgIG9wdHMucHJvbXB0ID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLXMnIHx8IGFyZyA9PT0gJy0tc2hlbGwnKSB7XG4gICAgICBpZiAob3B0cy5tb2RlICE9PSAnaW50ZXJhY3RpdmUnKSB0aHJvdyBuZXcgRXJyb3IoYCR7YXJnfSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbm90aGVyIGNvbW1hbmQgbW9kZWApXG4gICAgICBvcHRzLm1vZGUgPSAnc2hlbGwnXG4gICAgICBvcHRzLnByb21wdCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tanNvbicpIG9wdHMuanNvbiA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctLXN0cmVhbS1qc29uJykgb3B0cy5zdHJlYW1Kc29uID0gdHJ1ZVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1tJyB8fCBhcmcgPT09ICctLW1vZGVsJykge1xuICAgICAgb3B0cy5tb2RlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tZWZmb3J0Jykge1xuICAgICAgY29uc3QgbGV2ZWwgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaWYgKCFbJ2F1dG8nLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddLmluY2x1ZGVzKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZWZmb3J0IFwiJHtsZXZlbH1cIjogdXNlIGF1dG98bG93fG1lZGl1bXxoaWdofG1heGApXG4gICAgICB9XG4gICAgICBvcHRzLmVmZm9ydCA9IGxldmVsXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tc3BlZWQnKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIVsnc3RhbmRhcmQnLCAnZmFzdCddLmluY2x1ZGVzKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3BlZWQgXCIke2xldmVsfVwiOiB1c2Ugc3RhbmRhcmR8ZmFzdGApXG4gICAgICB9XG4gICAgICBvcHRzLnNwZWVkID0gbGV2ZWxcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1yZXN1bWUnKSB7XG4gICAgICBvcHRzLnJlc3VtZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tbWF4LXRvb2wtY2FsbHMnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIS9eXFxkKyQvLnRlc3QodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJy0tbWF4LXRvb2wtY2FsbHMgcmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJylcbiAgICAgIG9wdHMubWF4VG9vbENhbGxzID0gTnVtYmVyKHZhbHVlKVxuICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihvcHRzLm1heFRvb2xDYWxscykgfHwgb3B0cy5tYXhUb29sQ2FsbHMgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignLS1tYXgtdG9vbC1jYWxscyByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXInKVxuICAgICAgfVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWNvbm5lY3QnKSBvcHRzLm1vZGUgPSAnY29ubmVjdCdcbiAgICBlbHNlIGlmIChhcmcgPT09ICd1cGRhdGUnIHx8IGFyZyA9PT0gJy0tdXBkYXRlJykgb3B0cy5tb2RlID0gJ3VwZGF0ZSdcbiAgICBlbHNlIGlmIChhcmcgPT09ICctcScgfHwgYXJnID09PSAnLS1xdWlldCcpIG9wdHMucXVpZXQgPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLWgnIHx8IGFyZyA9PT0gJy0taGVscCcpIG9wdHMubW9kZSA9ICdoZWxwJ1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy12JyB8fCBhcmcgPT09ICctLXZlcnNpb24nKSBvcHRzLm1vZGUgPSAndmVyc2lvbidcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBhcmd1bWVudCBcIiR7YXJnfVwiYClcbiAgfVxuXG4gIGlmIChvcHRzLm1vZGUgPT09ICdoZWFkbGVzcycgJiYgIW9wdHMucHJvbXB0Py50cmltKCkpIHRocm93IG5ldyBFcnJvcignLXAgcmVxdWlyZXMgYSBub24tZW1wdHkgcHJvbXB0JylcbiAgaWYgKG9wdHMubW9kZSA9PT0gJ3NoZWxsJykge1xuICAgIGlmICghb3B0cy5wcm9tcHQ/LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCctcyByZXF1aXJlcyBhIG5vbi1lbXB0eSByZXF1ZXN0JylcbiAgICBjb25zdCBpbmNvbXBhdGlibGUgPSBbb3B0cy5qc29uICYmICctLWpzb24nLCBvcHRzLnN0cmVhbUpzb24gJiYgJy0tc3RyZWFtLWpzb24nLCBvcHRzLnJlc3VtZSAmJiAnLS1yZXN1bWUnLCBvcHRzLm1heFRvb2xDYWxscyAmJiAnLS1tYXgtdG9vbC1jYWxscyddLmZpbmQoQm9vbGVhbilcbiAgICBpZiAoaW5jb21wYXRpYmxlKSB0aHJvdyBuZXcgRXJyb3IoYCR7aW5jb21wYXRpYmxlfSBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tc2hlbGxgKVxuICB9XG4gIHJldHVybiBvcHRzXG59XG4iLCAiaW1wb3J0IHsgU2Nyb2xsQm94LCB1c2VGb2N1cywgdXNlTGF5b3V0LCB1c2VJbnRlcnZhbCwgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBTRVNTSU9OX0NPTE9SUyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udHJvbGxlci5qcydcbmltcG9ydCB7IEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgYWNjZW50IH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IHRpbWVBZ28gfSBmcm9tICcuL3BhbmVscy5qc3gnXG5cbmZ1bmN0aW9uIFNlc3Npb25Sb3coeyByb3csIHNlbGVjdGVkLCBmb2N1cywgbm93IH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgZm9jdXMuaXRlbShyb3cuaWQsIGxheW91dClcbiAgY29uc3QgY29sb3IgPSBTRVNTSU9OX0NPTE9SU1tyb3cuY29sb3JdIHx8IHJvdy5jb2xvciB8fCBhY2NlbnQoKVxuICByZXR1cm4gPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDEsIGhlaWdodDogMiwgZmxleFNocmluazogMCwgYmc6IHNlbGVjdGVkID8gY29sb3IgOiB1bmRlZmluZWQgfX0+XG4gICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IGNvbG9yLCBib2xkOiB0cnVlLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCR7cm93LnN0YXR1cyA9PT0gJ2J1c3knID8gJ1x1MjVDRicgOiAnXHUyNUNCJ30gJHtyb3cubmFtZX1gfTwvdGV4dD5cbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e3Jvdy5zdGF0dXMgPT09ICdidXN5JyA/IHJvdy5hY3Rpdml0eSB8fCAnd29ya2luZycgOiByb3cubGFzdE1lc3NhZ2VBdCA/IGBMYXN0IG1lc3NhZ2UgJHt0aW1lQWdvKHJvdy5sYXN0TWVzc2FnZUF0KX1gIDogJ2lkbGUnfTwvdGV4dD5cbiAgPC9ib3g+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXb3Jrc3BhY2VTaWRlYmFyKHsgZ3JvdXBzLCBzZWxlY3RlZCwgd2lkdGgsIGxvYWRpbmcsIGVycm9yLCBvbkhlaWdodCB9KSB7XG4gIGNvbnN0IGZvY3VzID0gdXNlRm9jdXMoeyBpbml0aWFsOiBudWxsLCBhY3RpdmU6IGZhbHNlIH0pXG4gIGNvbnN0IFtub3csIHNldE5vd10gPSBjcmVhdGVTaWduYWwoRGF0ZS5ub3coKSlcbiAgdXNlSW50ZXJ2YWwoKCkgPT4gc2V0Tm93KERhdGUubm93KCkpLCAxMDAwMClcbiAgaWYgKHNlbGVjdGVkKSBmb2N1cy5mb2N1cyhzZWxlY3RlZClcbiAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICByZXR1cm4gPGJveCBzdHlsZT17eyB3aWR0aCwgZmxleFNocmluazogMCwgaGVpZ2h0OiAnMTAwJScsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcgfX0+XG4gICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUsIHBhZGRpbmdYOiAxIH19PlNlc3Npb25zPC90ZXh0PlxuICAgIHtsb2FkaW5nICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5sb2FkaW5nPC90ZXh0Pn1cbiAgICB7ZXJyb3IgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57ZXJyb3J9PC90ZXh0Pn1cbiAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvbGxvd0ZvY3VzPXtmb2N1c30gZm9jdXNQYWRkaW5nPXsxfSBvbk1ldHJpY3M9eyhtZXRyaWNzKSA9PiBvbkhlaWdodChtZXRyaWNzLnZpc2libGVIZWlnaHQpfT5cbiAgICAgIHtncm91cHMubWFwKChncm91cCkgPT4gPGJveCBrZXk9e2dyb3VwLmN3ZH0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIHBhZGRpbmdYOiAxIH19Pntncm91cC5jd2QgPT09IGhvbWUgPyAnficgOiBncm91cC5jd2Quc3RhcnRzV2l0aChob21lICsgJy8nKSA/ICd+JyArIGdyb3VwLmN3ZC5zbGljZShob21lLmxlbmd0aCkgOiBncm91cC5jd2R9PC90ZXh0PlxuICAgICAgICB7Z3JvdXAuc2Vzc2lvbnMubWFwKChyb3cpID0+IDxTZXNzaW9uUm93IGtleT17cm93LmlkfSByb3c9e3Jvd30gc2VsZWN0ZWQ9e3Jvdy5pZCA9PT0gc2VsZWN0ZWR9IGZvY3VzPXtmb2N1c30gbm93PXtub3coKX0gLz4pfVxuICAgICAgPC9ib3g+KX1cbiAgICA8L1Njcm9sbEJveD5cbiAgPC9ib3g+XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuXG5jb25zdCBQQUxFVFRFUyA9IHtcbiAgZGFyazoge1xuICAgIGRlc2M6ICdsaWdodCB0ZXh0IGZvciBkYXJrIHRlcm1pbmFscycsXG4gICAgYWNjZW50OiAnI2Y4NzE3MScsXG4gICAgZmc6ICcjZTVlN2ViJyxcbiAgICBmZ1NvZnQ6ICcjOWNhM2FmJyxcbiAgICBtdXRlZDogJyNiOGMwZDAnLFxuICAgIHBhbmVsQmc6ICcjMWUxZTIyJyxcbiAgICBzZWxlY3RCZzogJyMzNzQxNTEnLFxuICAgIHJlZDogJyNmODcxNzEnLFxuICAgIGdyZWVuOiAnIzRhZGU4MCcsXG4gICAgcGVlcjogJyNjNGI1ZmQnLFxuICAgIGhpZ2hsaWdodDogJyNmZmZmZmYnLFxuICAgIHNoaWtpOiAnbm9yZCcsXG4gIH0sXG4gIGxpZ2h0OiB7XG4gICAgZGVzYzogJ2RhcmsgdGV4dCBmb3IgbGlnaHQgdGVybWluYWxzJyxcbiAgICBhY2NlbnQ6ICcjZGMyNjI2JyxcbiAgICBmZzogJyMxZjI0MzAnLFxuICAgIGZnU29mdDogJyM0YjU1NjMnLFxuICAgIG11dGVkOiAnIzRiNTU2MycsXG4gICAgcGFuZWxCZzogJyNlOWU5ZWUnLFxuICAgIHNlbGVjdEJnOiAnI2Q0ZDRkYycsXG4gICAgcmVkOiAnI2RjMjYyNicsXG4gICAgZ3JlZW46ICcjMTZhMzRhJyxcbiAgICBwZWVyOiAnIzZkMjhkOScsXG4gICAgaGlnaGxpZ2h0OiAnIzExMTgyNycsXG4gICAgc2hpa2k6ICdnaXRodWItbGlnaHQnLFxuICB9LFxuICBub3JkOiB7XG4gICAgZGVzYzogJ2FyY3RpYyBibHVlcyBvbiBwb2xhciBuaWdodCcsXG4gICAgYWNjZW50OiAnIzg4YzBkMCcsXG4gICAgZmc6ICcjZDhkZWU5JyxcbiAgICBmZ1NvZnQ6ICcjYWFiMmM0JyxcbiAgICBtdXRlZDogJyNiOGMwZDAnLFxuICAgIHBhbmVsQmc6ICcjM2I0MjUyJyxcbiAgICBzZWxlY3RCZzogJyM0MzRjNWUnLFxuICAgIHJlZDogJyNiZjYxNmEnLFxuICAgIGdyZWVuOiAnI2EzYmU4YycsXG4gICAgcGVlcjogJyNkOGI0ZmUnLFxuICAgIGhpZ2hsaWdodDogJyNlY2VmZjQnLFxuICAgIHNoaWtpOiAnbm9yZCcsXG4gIH0sXG59XG5cbmV4cG9ydCBsZXQgREVGQVVMVF9BQ0NFTlQgPSBQQUxFVFRFUy5kYXJrLmFjY2VudFxuZXhwb3J0IGxldCBGRyA9IFBBTEVUVEVTLmRhcmsuZmdcbmV4cG9ydCBsZXQgRkdfU09GVCA9IFBBTEVUVEVTLmRhcmsuZmdTb2Z0XG5leHBvcnQgbGV0IE1VVEVEID0gUEFMRVRURVMuZGFyay5tdXRlZFxuZXhwb3J0IGxldCBQQU5FTF9CRyA9IFBBTEVUVEVTLmRhcmsucGFuZWxCZ1xuZXhwb3J0IGxldCBTRUxFQ1RfQkcgPSBQQUxFVFRFUy5kYXJrLnNlbGVjdEJnXG5leHBvcnQgbGV0IFJFRCA9IFBBTEVUVEVTLmRhcmsucmVkXG5leHBvcnQgbGV0IEdSRUVOID0gUEFMRVRURVMuZGFyay5ncmVlblxuZXhwb3J0IGxldCBQRUVSID0gUEFMRVRURVMuZGFyay5wZWVyXG5leHBvcnQgbGV0IEhJR0hMSUdIVCA9IFBBTEVUVEVTLmRhcmsuaGlnaGxpZ2h0XG5cbmxldCBjdXJyZW50UGFsZXR0ZSA9ICdkYXJrJ1xubGV0IGV4cGxpY2l0QWNjZW50ID0gbnVsbFxuXG5jb25zdCBbYWNjZW50VmFsdWUsIHNldEFjY2VudFZhbHVlXSA9IGNyZWF0ZVNpZ25hbChERUZBVUxUX0FDQ0VOVClcblxuZXhwb3J0IGNvbnN0IGFjY2VudCA9IGFjY2VudFZhbHVlXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBY2NlbnQoY29sb3IpIHtcbiAgZXhwbGljaXRBY2NlbnQgPSBjb2xvciB8fCBudWxsXG4gIHNldEFjY2VudFZhbHVlKGV4cGxpY2l0QWNjZW50IHx8IERFRkFVTFRfQUNDRU5UKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UGFsZXR0ZShuYW1lKSB7XG4gIGN1cnJlbnRQYWxldHRlID0gUEFMRVRURVNbbmFtZV0gPyBuYW1lIDogJ2RhcmsnXG4gIGNvbnN0IHAgPSBQQUxFVFRFU1tjdXJyZW50UGFsZXR0ZV1cbiAgREVGQVVMVF9BQ0NFTlQgPSBwLmFjY2VudFxuICBGRyA9IHAuZmdcbiAgRkdfU09GVCA9IHAuZmdTb2Z0XG4gIE1VVEVEID0gcC5tdXRlZFxuICBQQU5FTF9CRyA9IHAucGFuZWxCZ1xuICBTRUxFQ1RfQkcgPSBwLnNlbGVjdEJnXG4gIFJFRCA9IHAucmVkXG4gIEdSRUVOID0gcC5ncmVlblxuICBQRUVSID0gcC5wZWVyXG4gIEhJR0hMSUdIVCA9IHAuaGlnaGxpZ2h0XG4gIHNldEFjY2VudFZhbHVlKGV4cGxpY2l0QWNjZW50IHx8IHAuYWNjZW50KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZU5hbWUoKSB7XG4gIHJldHVybiBjdXJyZW50UGFsZXR0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFsZXR0ZUxpc3QoKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhQQUxFVFRFUykubWFwKChba2V5LCBwXSkgPT4gKHsga2V5LCBkZXNjOiBwLmRlc2MgfSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaGlraVRoZW1lKCkge1xuICByZXR1cm4gUEFMRVRURVNbY3VycmVudFBhbGV0dGVdLnNoaWtpXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBCdXR0b24sIENoZWNrYm94LCBlYXNlLCBGaWVsZCwgRmllbGRMaXN0LCBNZW51LCBOdW1iZXJJbnB1dCwgUGlja0xpc3QsIFJhZGlvLCBTY3JvbGxCb3gsIFRleHRJbnB1dCwgdXNlQW5pbWF0ZWQsIHVzZUZvY3VzLCB1c2VJbnB1dCwgdXNlSW50ZXJ2YWwsIHVzZUxheW91dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgRkcsIEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgU0VMRUNUX0JHLCBSRUQsIEdSRUVOIH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IEFuaW1hdGVkVmFsdWUgfSBmcm9tICcuL2FuaW1hdGVkLXZhbHVlLmpzeCdcbmltcG9ydCB7IGNvbnRleHRCYXIgfSBmcm9tICcuL2NvbnRleHQtYmFyLmpzJ1xuaW1wb3J0IHsgY29tcGFjdE51bWJlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZm9ybWF0LmpzJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBmdXp6eVNjb3JlLCByYW5rRnV6enkgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgZm9ybWF0SHR0cFNlcnZlclNwZWMsIHBhcnNlU2VydmVyU3BlYywgcmVkYWN0U2VydmVyU3BlYywgUkVEQUNURURfSEVBREVSIH0gZnJvbSAncGljb2NvZGUtY29yZS9tY3AuanMnXG5cbmZ1bmN0aW9uIHNob3J0ZW5Ib21lKHBhdGgpIHtcbiAgY29uc3QgdmFsdWUgPSBTdHJpbmcocGF0aClcbiAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICByZXR1cm4gdmFsdWUgPT09IGhvbWUgfHwgdmFsdWUuc3RhcnRzV2l0aChgJHtob21lfS9gKSA/IGB+JHt2YWx1ZS5zbGljZShob21lLmxlbmd0aCl9YCA6IHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lQWdvKGF0KSB7XG4gIGNvbnN0IHMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gYXQpIC8gMTAwMCkpXG4gIGlmIChzIDwgNjApIHJldHVybiBgJHtzfXMgYWdvYFxuICBjb25zdCBtID0gTWF0aC5mbG9vcihzIC8gNjApXG4gIGlmIChtIDwgNjApIHJldHVybiBgJHttfW0gYWdvYFxuICBjb25zdCBoID0gTWF0aC5mbG9vcihtIC8gNjApXG4gIGlmIChoIDwgMjQpIHJldHVybiBgJHtofWggYWdvYFxuICByZXR1cm4gYCR7TWF0aC5mbG9vcihoIC8gMjQpfWQgYWdvYFxufVxuXG5mdW5jdGlvbiBQYW5lbERpdmlkZXIoKSB7XG4gIHJldHVybiA8dGV4dCBzdHlsZT17eyBjb2xvcjogU0VMRUNUX0JHLCBvdmVyZmxvdzogJ2NsaXAnIH19PnsnXHUyNTAwJy5yZXBlYXQocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCl9PC90ZXh0PlxufVxuXG5mdW5jdGlvbiBQYW5lbEZyYW1lKHsgdGl0bGUsIGhpbnQsIHJpZ2h0LCBmdWxsU2NyZWVuID0gZmFsc2UsIGNoaWxkcmVuIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIGhlaWdodDogZnVsbFNjcmVlbiA/ICcxMDAlJyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBwYWRkaW5nVG9wOiAxIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57dGl0bGV9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICB7cmlnaHR9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2hpbnR9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogZnVsbFNjcmVlbiA/IDAgOiAyLCBwYWRkaW5nQm90dG9tOiAxLCBmbGV4R3JvdzogZnVsbFNjcmVlbiA/IDEgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25maXJtUGFuZWwoeyB0aXRsZSwgbWVzc2FnZSwgY29uZmlybUxhYmVsID0gJ0NvbmZpcm0nLCBmb2N1c2VkLCBvbkNvbmZpcm0sIG9uQ2xvc2UgfSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBvbkNvbmZpcm0oKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT17dGl0bGV9IGhpbnQ9e2BlbnRlcjogJHtjb25maXJtTGFiZWwudG9Mb3dlckNhc2UoKX0gIGVzYzogY2FuY2VsYH0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57bWVzc2FnZX08L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQsIGJvbGQ6IHRydWUgfX0+VGhpcyBjYW5ub3QgYmUgdW5kb25lLjwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdGaWVsZCh7IGZpZWxkLCB2YWx1ZSwgZm9jdXNlZCwgb25DaGFuZ2UgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxDaGVja2JveCBjaGVja2VkPXt2YWx1ZX0gbGFiZWw9e2ZpZWxkLmxhYmVsfSBmb2N1c2VkPXtmb2N1c2VkfSBvbkNoYW5nZT17b25DaGFuZ2V9IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntmaWVsZC5wYXRofTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAgICR7ZmllbGQuZGVzY31gfTwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBDb25maWdOdW1iZXJGaWVsZCh7IHZhbHVlLCBmb2N1c2VkLCBvbkNoYW5nZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPE51bWJlcklucHV0IGZvY3VzZWQ9e2ZvY3VzZWR9IHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e29uQ2hhbmdlfSBtaW49ezF9IG1heD17MTAwfSB3aWR0aD17NX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PiBQYXJhbGxlbCBhZ2VudCBsaW1pdDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+cmVzZWFyY2guYWdlbnRMaW1pdDwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PiAgICBNYXhpbXVtIGFnZW50cyBwZXIgcGFyYWxsZWwgcnVuICgxLTEwMCk8L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29uZmlnTW9kZWxGaWVsZCh7IG1vZGVsLCBsYWJlbCwgcGF0aCwgZm9jdXNlZCwgb25QaWNrIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8QnV0dG9uIGxhYmVsPXtsYWJlbH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17b25QaWNrfSAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cGF0aH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgICAke21vZGVsIHx8ICdOb3QgY29uZmlndXJlZCd9YH08L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbmZpZ1BhbmVsKHsgdmFsdWVzLCBmb2N1c2VkLCBvbkNoYW5nZSwgb25QaWNrUmVzZWFyY2hNb2RlbCwgb25QaWNrU2hlbGxNb2RlbCwgb25QaWNrRGVsaWJlcmF0aW9uTW9kZWwsIG9uUGlja1BhcnRpY2lwYW50TW9kZWwsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBmaWVsZHMgPSBbXG4gICAgeyBuYW1lOiAnY2xvdWRzJywgbGFiZWw6ICdDbG91ZCBhbmltYXRpb24nLCBkZXNjOiAnU2hvdyBhbmltYXRlZCBjbG91ZHMgb24gdGhlIGVtcHR5IHNjcmVlbicsIHBhdGg6ICdhbmltYXRpb24uY2xvdWRzJyB9LFxuICAgIHsgbmFtZTogJ2NvbXBhY3RUb29scycsIGxhYmVsOiAnQ29tcGFjdCB0b29sIGhpc3RvcnknLCBkZXNjOiAnU3VtbWFyaXplIGNvbnNlY3V0aXZlIHRvb2wgY2FsbHMgaW4gb25lIHJvdycsIHBhdGg6ICdkaXNwbGF5LmNvbXBhY3RUb29sSGlzdG9yeScgfSxcbiAgICB7IG5hbWU6ICdnaXRTdGF0dXMnLCBsYWJlbDogJ0dpdCBpbmZvcm1hdGlvbicsIGRlc2M6ICdTaG93IGJyYW5jaCBhbmQgY2hhbmdlZCBsaW5lIGNvdW50cycsIHBhdGg6ICdkaXNwbGF5LmdpdFN0YXR1cycgfSxcbiAgICB7IG5hbWU6ICd3aWRlU2lkZWJhcicsIGxhYmVsOiAnV2lkZSBzaWRlYmFyJywgZGVzYzogJ01vdmUgcGFuZWxzIGFuZCBzdGF0dXMgZGV0YWlscyB0byBhIHJpZ2h0IHNpZGViYXIgd2hlbiB0aGUgdGVybWluYWwgaXMgd2lkZXIgdGhhbiAxNjAgY29sdW1ucycsIHBhdGg6ICdkaXNwbGF5LndpZGVTaWRlYmFyJyB9LFxuICBdXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiQ29uZmlndXJhdGlvblwiIGhpbnQ9XCJ0YWI6IG5leHQgc2V0dGluZyAgc3BhY2UvZW50ZXI6IGNoYW5nZSAgZXNjOiBjbG9zZVwiIGZ1bGxTY3JlZW4+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8RmllbGRMaXN0IGZvY3VzZWQ9e2ZvY3VzZWR9IGluaXRpYWxGb2N1cz1cImNsb3Vkc1wiIHNjcm9sbGJhciBmb2N1c1BhZGRpbmc9ezF9PlxuICAgICAgICAgIHtmaWVsZHMubWFwKChmaWVsZCkgPT4gKFxuICAgICAgICAgICAgPEZpZWxkIGtleT17ZmllbGQubmFtZX0gbmFtZT17ZmllbGQubmFtZX0+XG4gICAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxDb25maWdGaWVsZCBmaWVsZD17ZmllbGR9IHZhbHVlPXt2YWx1ZXNbZmllbGQubmFtZV19IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4gb25DaGFuZ2UoZmllbGQubmFtZSwgdmFsdWUpfSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInJlc2VhcmNoTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5yZXNlYXJjaE1vZGVsfSBsYWJlbD1cIlBhcmFsbGVsIHdvcmtlciBtb2RlbFwiIHBhdGg9XCJtb2RlbHMucmVzZWFyY2hXb3JrZXJcIiBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17b25QaWNrUmVzZWFyY2hNb2RlbH0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInNoZWxsTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5zaGVsbE1vZGVsfSBsYWJlbD1cIlNoZWxsIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5zaGVsbFwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tTaGVsbE1vZGVsfSAvPn1cbiAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgIHtbJ3BhcnRpY2lwYW50QScsICdwYXJ0aWNpcGFudEInXS5tYXAoKHJvbGUpID0+IChcbiAgICAgICAgICAgIDxGaWVsZCBuYW1lPXtgJHtyb2xlfU1vZGVsYH0+XG4gICAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlc1tgJHtyb2xlfU1vZGVsYF19IGxhYmVsPXtgUGFydGljaXBhbnQgJHtyb2xlID09PSAncGFydGljaXBhbnRBJyA/ICdBJyA6ICdCJ30gbW9kZWxgfSBwYXRoPXtgbW9kZWxzLiR7cm9sZX1gfSBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17KCkgPT4gb25QaWNrUGFydGljaXBhbnRNb2RlbChyb2xlKX0gLz59XG4gICAgICAgICAgICA8L0ZpZWxkPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxGaWVsZCBuYW1lPVwiZGVsaWJlcmF0aW9uTW9kZWxcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ01vZGVsRmllbGQgbW9kZWw9e3ZhbHVlcy5kZWxpYmVyYXRpb25Nb2RlbH0gbGFiZWw9XCJTeW50aGVzaXMgbW9kZWxcIiBwYXRoPVwibW9kZWxzLmRlbGliZXJhdGlvblwiIGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25QaWNrPXtvblBpY2tEZWxpYmVyYXRpb25Nb2RlbH0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICA8RmllbGQgbmFtZT1cInJlc2VhcmNoQWdlbnRMaW1pdFwiPlxuICAgICAgICAgICAgeyh7IGZvY3VzZWQ6IGZpZWxkRm9jdXNlZCB9KSA9PiA8Q29uZmlnTnVtYmVyRmllbGQgdmFsdWU9e3ZhbHVlcy5yZXNlYXJjaEFnZW50TGltaXR9IGZvY3VzZWQ9e2ZpZWxkRm9jdXNlZH0gb25DaGFuZ2U9eyh2YWx1ZSkgPT4gb25DaGFuZ2UoJ3Jlc2VhcmNoQWdlbnRMaW1pdCcsIHZhbHVlKX0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgPC9GaWVsZExpc3Q+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNjb3BlVGFicyh7IHNjb3BlcywgYWN0aXZlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAge3Njb3Blcy5tYXAoKHMsIGkpID0+IChcbiAgICAgICAgPHRleHQga2V5PXtzfSBzdHlsZT17eyBjb2xvcjogaSA9PT0gYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogaSA9PT0gYWN0aXZlIH19PntgJHtpID4gMCA/ICcgICcgOiAnJ30ke3MgPT09ICdjaGVja291dCcgPyAndGhpcyBjaGVja291dCcgOiBzfWB9PC90ZXh0PlxuICAgICAgKSl9XG4gICAgPC9ib3g+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+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU3BlZWRQYW5lbCh7IGxldmVscywgY3VycmVudCwgZGVmYXVsdExldmVsLCBmb2N1c2VkLCBvblBpY2ssIG9uUGlja0RlZmF1bHQsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKE1hdGgubWF4KDAsIGxldmVscy5maW5kSW5kZXgoKGwpID0+IGwua2V5ID09PSBjdXJyZW50KSkpXG4gIGNvbnN0IGl0ZW1zID0gbGV2ZWxzXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykge1xuICAgICAgb25QaWNrRGVmYXVsdChpdGVtc1tjdXJzb3IoKV0pXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBsYWJlbCA9IChsKSA9PiBsLmtleSA9PT0gJ2Zhc3QnID8gJ0Zhc3QnIDogJ1N0YW5kYXJkJ1xuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJTcGVlZFwiIGhpbnQ9XCJlbnRlcjogc2Vzc2lvbiAgY3RybCtzOiBkZWZhdWx0ICBlc2M6IGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgY291bnRlclxuICAgICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgICBzZWxlY3RlZD17Y3Vyc29yKCl9XG4gICAgICAgICAgb25TZWxlY3Q9e3NldEN1cnNvcn1cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KGwsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntsYWJlbChsKS5wYWRFbmQoTWF0aC5tYXgoMTAsIGxhYmVsKGwpLmxlbmd0aCArIDEpKX08L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7bC51c2FnZS5yZXBsYWNlKC8gdXNhZ2UkLywgJycpfSBpbmNsdWRlZCB1c2FnZWB9PC90ZXh0PlxuICAgICAgICAgICAgICB7bC5rZXkgPT09IGN1cnJlbnQgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/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+IHNlcnZlcnMuZmluZCgocykgPT4gcy5uYW1lID09PSB2aWV3aW5nKCkpIHx8IG51bGxcblxuICBpZiAodmlld2luZygpICYmIHZpZXdlZCgpKSB7XG4gICAgY29uc3Qgc2VydmVyID0gdmlld2VkKClcbiAgICBjb25zdCBkZXNjcmliZSA9ICh0KSA9PiB0LmRlc2NyaXB0aW9uLnJlcGxhY2UoL15cXFtbXlxcXV0qXFxdXFxzKi8sICcnKS50cmltKCkgfHwgJ25vIGRlc2NyaXB0aW9uJ1xuICAgIHJldHVybiAoXG4gICAgICA8UGFuZWxGcmFtZVxuICAgICAgICB0aXRsZT17YE1DUCBzZXJ2ZXJzICAke3NlcnZlci5uYW1lfSAgJHtzZXJ2ZXIudG9vbHMubGVuZ3RofSAke3NlcnZlci50b29scy5sZW5ndGggPT09IDEgPyAndG9vbCcgOiAndG9vbHMnfWB9XG4gICAgICAgIGhpbnQ9XCJqL2sgb3IgXHUyMTkxXHUyMTkzIHRvIHNjcm9sbCAgZXNjIGJhY2sgdG8gc2VydmVyc1wiXG4gICAgICAgIGZ1bGxTY3JlZW5cbiAgICAgID5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIG1hcmdpblRvcDogMSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge3NlcnZlci50b29scy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gdG9vbHMgcmVwb3J0ZWQgIGlzIHRoZSBzZXJ2ZXIgY29ubmVjdGVkPzwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICAgIHtzZXJ2ZXIudG9vbHMubWFwKCh0LCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBrZXk9e3QubmFtZX0gc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogaSA9PT0gMCA/IDAgOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19Pnt0Lm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntkZXNjcmliZSh0KX08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L1BhbmVsRnJhbWU+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZVxuICAgICAgdGl0bGU9XCJNQ1Agc2VydmVyc1wiXG4gICAgICBoaW50PXtmb3JtKClcbiAgICAgICAgPyAndGFiIG1vdmVzIGJldHdlZW4gZmllbGRzICBqL2sgKyBzcGFjZSBwaWNrcyBhIHJhZGlvIG9wdGlvbiAgZXNjIGNhbmNlbHMnXG4gICAgICAgIDogJ2VudGVyIGVuYWJsZS9kaXNhYmxlICB0IHRvb2xzICBlIGVkaXQgIHIgcmVjb25uZWN0ICBhIGFkZCAgY3RybCt4IHJlbW92ZSAodHdpY2UpICBlc2MgY2xvc2UnfVxuICAgICAgZnVsbFNjcmVlblxuICAgID5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICB7Zm9ybSgpID8gKFxuICAgICAgICAgIDxNY3BTZXJ2ZXJGb3JtXG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgc2VydmVyPXtmb3JtKCkgPT09ICdhZGQnID8gbnVsbCA6IGZvcm0oKX1cbiAgICAgICAgICAgIG9uU2F2ZT17KG5hbWUsIHNwZWMsIHNjb3BlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChmb3JtKCkgPT09ICdhZGQnKSBvbkFkZChuYW1lLCBzcGVjLCBzY29wZSlcbiAgICAgICAgICAgICAgZWxzZSBvbkVkaXQobmFtZSwgc3BlYylcbiAgICAgICAgICAgICAgc2V0Rm9ybShudWxsKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uSW52YWxpZD17b25JbnZhbGlkfVxuICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHNldEZvcm0obnVsbCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IHNlcnZlcnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBNQ1Agc2VydmVycyBjb25maWd1cmVkICBwcmVzcyBhIHRvIGFkZCBvbmU8L3RleHQ+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtzZXJ2ZXJzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2luZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0SW5kZXh9XG4gICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17Nn1cbiAgICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICAgIGl0ZW1IZWlnaHQ9ezJ9XG4gICAgICAgICAgICBvblN1Ym1pdD17KHMpID0+IG9uVG9nZ2xlKHMubmFtZSl9XG4gICAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhzLCB7IGFjdGl2ZSB9KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0ID0gbWNwU3RhdHVzKHMuc3RhdHVzKVxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc3QuY29sb3IgfX0+e3N0Lmljb259PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57YCAke3MubmFtZS5wYWRFbmQoTWF0aC5tYXgoMTQsIHMubmFtZS5sZW5ndGggKyAxKSl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IHMuc3RhdHVzID09PSAnZXJyb3InID8gUkVEIDogTVVURUQgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7cy5zdGF0dXMgPT09ICdlcnJvcicgPyBzLmVycm9yIDogcy5zdGF0dXMgPT09ICdjb25uZWN0ZWQnID8gYCR7cy50b29sQ291bnR9IHRvb2xzYCA6IHMuc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQ+eycgICAgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBNVVRFRCB9fT57c2hvcnRlbkhvbWUocmVkYWN0U2VydmVyU3BlYyhzLmNvbW1hbmQpKX08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICR7cy5zY29wZSA9PT0gJ3Byb2plY3QnID8gJ3Byb2plY3QnIDogJ2dsb2JhbCd9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgICB7IWZvcm0oKSAmJiAoXG4gICAgICAgIDxNY3BLZXlzXG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBvbktleT17KGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcyA9IHNlbGVjdGVkKClcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICdhJykgc2V0Rm9ybSgnYWRkJylcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAnZScpIHNldEZvcm0ocylcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAncicpIG9uUmVjb25uZWN0KHMubmFtZSlcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAncmVtb3ZlJykgb25SZW1vdmUocy5uYW1lKVxuICAgICAgICAgICAgZWxzZSBpZiAocyAmJiBrZXkgPT09ICd0Jykgc2V0Vmlld2luZyhzLm5hbWUpXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIE1jcEtleXMoeyBmb2N1c2VkLCBvbktleSB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIG9uS2V5KCdyZW1vdmUnKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWV2ZW50LmN0cmwgJiYgWydhJywgJ2UnLCAncicsICd0J10uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgb25LZXkoZXZlbnQua2V5KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIHJldHVybiBudWxsXG59XG4iLCAiaW1wb3J0IHsgZWFzZSwgbGluZWFyLCB1c2VBbmltYXRlZCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcblxuZnVuY3Rpb24gdG9SZ2IoY29sb3IpIHtcbiAgaWYgKGNvbG9yPy5zdGFydHNXaXRoKCcjJykgJiYgY29sb3IubGVuZ3RoID09PSA3KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDEsIDMpLCAxNiksXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSgzLCA1KSwgMTYpLFxuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoNSwgNyksIDE2KSxcbiAgICBdXG4gIH1cbiAgcmV0dXJuIFsxMjcsIDEyNywgMTI3XVxufVxuXG5mdW5jdGlvbiBtaXhDb2xvcihmcm9tLCB0bywgYW1vdW50KSB7XG4gIGlmIChmcm9tID09PSB0bykgcmV0dXJuIGZyb21cbiAgY29uc3QgYSA9IHRvUmdiKGZyb20pXG4gIGNvbnN0IGIgPSB0b1JnYih0bylcbiAgY29uc3QgY2hhbm5lbHMgPSBhLm1hcCgodmFsdWUsIGkpID0+IE1hdGgucm91bmQodmFsdWUgKyAoYltpXSAtIHZhbHVlKSAqIGFtb3VudCkpXG4gIHJldHVybiBgIyR7Y2hhbm5lbHMubWFwKCh2YWx1ZSkgPT4gdmFsdWUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFuaW1hdGVkVmFsdWUoeyB2YWx1ZSwgaW5pdGlhbCA9IHZhbHVlLCBkdXJhdGlvbiA9IDEwMDAsIGNvbG9yLCBoaWdobGlnaHQsIGJhY2tncm91bmQsIGZvcm1hdCA9IFN0cmluZyB9KSB7XG4gIGNvbnN0IGRpc3BsYXllZCA9IHVzZUFuaW1hdGVkKGluaXRpYWwsIGVhc2UoZHVyYXRpb24pKVxuICBjb25zdCBnbG93ID0gdXNlQW5pbWF0ZWQoMCwgZWFzZShkdXJhdGlvbiwgbGluZWFyKSlcblxuICBpZiAodmFsdWUgIT09IGRpc3BsYXllZC5fYW5pbS50YXJnZXQpIHtcbiAgICBkaXNwbGF5ZWQuc2V0KHZhbHVlKVxuICAgIGdsb3cuc25hcCgxKVxuICAgIGdsb3cuc2V0KDApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBtaXhDb2xvcihjb2xvciwgaGlnaGxpZ2h0LCBnbG93KCkpLCBiZzogYmFja2dyb3VuZCB9fT5cbiAgICAgIHtmb3JtYXQoZGlzcGxheWVkKCkpfVxuICAgIDwvdGV4dD5cbiAgKVxufVxuIiwgImNvbnN0IExFVkVMUyA9IFsnICcsICdcdTI1OEYnLCAnXHUyNThFJywgJ1x1MjU4RCcsICdcdTI1OEMnLCAnXHUyNThCJywgJ1x1MjU4QScsICdcdTI1ODknLCAnXHUyNTg4J11cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRleHRCYXIocGVyY2VudCwgd2lkdGggPSA0KSB7XG4gIGNvbnN0IGVpZ2h0aHMgPSBNYXRoLnJvdW5kKE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgcGVyY2VudCkpICogd2lkdGggKiA4IC8gMTAwKVxuICBjb25zdCBmdWxsID0gTWF0aC5mbG9vcihlaWdodGhzIC8gOClcbiAgY29uc3QgcGFydGlhbCA9IGVpZ2h0aHMgJSA4XG4gIHJldHVybiAnXHUyNTg4Jy5yZXBlYXQoZnVsbCkgKyAocGFydGlhbCA/IExFVkVMU1twYXJ0aWFsXSA6ICcnKSArICcgJy5yZXBlYXQod2lkdGggLSBmdWxsIC0gKHBhcnRpYWwgPyAxIDogMCkpXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZUdyb3Vwcyhyb3dzKSB7XG4gIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXAoKVxuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgaWYgKCFyb3cubmFtZT8udHJpbSgpKSBjb250aW51ZVxuICAgIGlmICghZ3JvdXBzLmhhcyhyb3cuY3dkKSkgZ3JvdXBzLnNldChyb3cuY3dkLCBbXSlcbiAgICBncm91cHMuZ2V0KHJvdy5jd2QpLnB1c2gocm93KVxuICB9XG4gIHJldHVybiBbLi4uZ3JvdXBzXS5zb3J0KChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpKS5tYXAoKFtjd2QsIHNlc3Npb25zXSkgPT4gKHsgY3dkLCBzZXNzaW9ucyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZVNlbGVjdGlvbihyb3dzLCBzZWxlY3RlZCwgcHJldmlvdXMgPSBbXSkge1xuICBpZiAocm93cy5zb21lKChyb3cpID0+IHJvdy5pZCA9PT0gc2VsZWN0ZWQpKSByZXR1cm4gc2VsZWN0ZWRcbiAgY29uc3QgaW5kZXggPSBNYXRoLm1heCgwLCBwcmV2aW91cy5maW5kSW5kZXgoKHJvdykgPT4gcm93LmlkID09PSBzZWxlY3RlZCkpXG4gIHJldHVybiByb3dzW01hdGgubWluKGluZGV4LCByb3dzLmxlbmd0aCAtIDEpXT8uaWQgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlTmF2aWdhdGUocm93cywgc2VsZWN0ZWQsIGV2ZW50LCBoZWlnaHQpIHtcbiAgY29uc3QgaW5kZXggPSBNYXRoLm1heCgwLCByb3dzLmZpbmRJbmRleCgocm93KSA9PiByb3cuaWQgPT09IHNlbGVjdGVkKSlcbiAgY29uc3QgaGFsZiA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoaGVpZ2h0IC8gNikpXG4gIGxldCBuZXh0XG4gIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2QnKSBuZXh0ID0gaW5kZXggKyBoYWxmXG4gIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBpbmRleCAtIGhhbGZcbiAgZWxzZSBpZiAoZXZlbnQuY3RybCB8fCBldmVudC5tZXRhIHx8IGV2ZW50LmFsdCkgcmV0dXJuIHVuZGVmaW5lZFxuICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdqJyB8fCBldmVudC5rZXkgPT09ICdkb3duJykgbmV4dCA9IGluZGV4ICsgMVxuICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdrJyB8fCBldmVudC5rZXkgPT09ICd1cCcpIG5leHQgPSBpbmRleCAtIDFcbiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZycpIG5leHQgPSAwXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gcm93cy5sZW5ndGggLSAxXG4gIGVsc2UgcmV0dXJuIHVuZGVmaW5lZFxuICByZXR1cm4gcm93c1tNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dzLmxlbmd0aCAtIDEsIG5leHQpKV0/LmlkID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZURyYWZ0QXR0YWNobWVudHModGV4dCwgYXR0YWNobWVudHMpIHtcbiAgcmV0dXJuIFsuLi50ZXh0Lm1hdGNoQWxsKC9cXFsoPzpJbWFnZXxGaWxlKSAjXFxkK1xcXS9nKV0uZmlsdGVyKG1hdGNoID0+IGF0dGFjaG1lbnRzLmhhcyhtYXRjaFswXSkpLmxlbmd0aFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlXb3Jrc3BhY2VDb21wb3Nlcih7IHRleHQsIGF0dGFjaG1lbnRzLCBkaWN0YXRpb24sIGNhcHR1cmUsIHBlbmRpbmcsIGhpc3RvcnksIGNvbXBsZXRpb24sIGNvbW1hbmQsIHF1ZXN0aW9uLCBzdGVlciwgcXVldWVkLCBleHBlZGl0ZWQgfSkge1xuICByZXR1cm4gdGV4dCA9PT0gJycgJiYgYXR0YWNobWVudHMgPT09IDAgJiYgZGljdGF0aW9uID09PSAnaWRsZScgJiYgY2FwdHVyZSA9PT0gJ2lkbGUnICYmICFwZW5kaW5nICYmIGhpc3RvcnkgPCAwICYmICFjb21wbGV0aW9uICYmICFjb21tYW5kICYmICFxdWVzdGlvbiAmJiAhc3RlZXIgJiYgcXVldWVkID09PSAwICYmIGV4cGVkaXRlZCA9PT0gMFxufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya3NwYWNlQWN0aW9uKHJvdykge1xuICByZXR1cm4gcm93Py5zdGF0dXMgPT09ICdidXN5JyA/ICdpbnRlcnJ1cHQnIDogcm93Py5zdGF0dXMgPT09ICdpZGxlJyA/ICdkZW1vdGUnIDogbnVsbFxufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVNpZGViYXIgfSBmcm9tICcuL3dvcmtzcGFjZS1zaWRlYmFyLmpzeCdcbmltcG9ydCB7IHdvcmtzcGFjZUdyb3Vwcywgd29ya3NwYWNlU2VsZWN0aW9uLCB3b3Jrc3BhY2VOYXZpZ2F0ZSwgd29ya3NwYWNlQWN0aW9uLCB3b3Jrc3BhY2VEcmFmdEF0dGFjaG1lbnRzLCBlbXB0eVdvcmtzcGFjZUNvbXBvc2VyIH0gZnJvbSAnLi93b3Jrc3BhY2Utc2lkZWJhci5qcydcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IHBhcnNlRnJvbnRtYXR0ZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3NraWxscy5qcydcbmltcG9ydCB7IGV4cGFuZENvbW1hbmQsIHBhcnNlQ29tbWFuZEFyZ3VtZW50cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29tbWFuZHMuanMnXG5pbXBvcnQgeyBjb21tYW5kQXQsIHJlcGxhY2VDb21tYW5kLCBjb21tYW5kRmllbGRzIH0gZnJvbSAnLi9jb21wb3Nlci1jb21tYW5kcy5qcydcbmltcG9ydCB7IENvbW1hbmRGb3JtIH0gZnJvbSAnLi9jb21tYW5kLWZvcm0uanN4J1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBjcmVhdGVEaWN0YXRpb24gfSBmcm9tICcuLi9kaWN0YXRpb24uanMnXG5pbXBvcnQgeyByZWFkQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi9jbGlwYm9hcmQuanMnXG5pbXBvcnQgeyBjcmVhdGVDbGlwYm9hcmRJbnB1dCB9IGZyb20gJy4vY2xpcGJvYXJkLWlucHV0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlRGljdGF0aW9uSW5wdXQgfSBmcm9tICcuL2RpY3RhdGlvbi1pbnB1dC5qcydcbmltcG9ydCB7IGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCB9IGZyb20gJy4vc2NyZWVuLWNhcHR1cmUtaW5wdXQuanMnXG5pbXBvcnQgeyBjYXB0dXJlUmVnaW9uIH0gZnJvbSAnLi4vc2NyZWVuLWNhcHR1cmUuanMnXG5pbXBvcnQgeyBjcmVhdGVDb21wb3NlckZpbGVzIH0gZnJvbSAnLi9jb21wb3Nlci1maWxlcy5qcydcbmltcG9ydCB7IGRpY3RhdGlvbkluZGljYXRvciwgYXBwZW5kTGV2ZWwgfSBmcm9tICcuL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMnXG5pbXBvcnQgeyBjcmVhdGVTaWduYWwsIHVzZUludGVydmFsLCBvbkNsZWFudXAsIE1lbnUsIFByb2dyZXNzQmFyLCBTY3JvbGxCb3gsIFNoaW1tZXIsIFNwaW5uZXIsIFRleHRBcmVhLCB1c2VGb2N1cywgdXNlRm9jdXNUcmFwLCB1c2VGcmFtZVN0YXRzLCB1c2VIaXRUZXN0LCB1c2VJbnB1dCwgdXNlTGF5b3V0LCB1c2VNb3VzZSwgdXNlUmVzaXplLCB1c2VTZWxlY3Rpb24sIHVzZVRvYXN0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgbWFrZUV2ZW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9ldmVudHMuanMnXG5pbXBvcnQgeyBsaXN0U2Vzc2lvbnMsIGRlbGV0ZVNlc3Npb24sIGRlbGV0ZVByb2plY3REYXRhIH0gZnJvbSAncGljb2NvZGUtY29yZS9zZXNzaW9uLmpzJ1xuaW1wb3J0IHsgdXNlckVudHJpZXMsIHJld2luZFN0YXRzIH0gZnJvbSAncGljb2NvZGUtY29yZS9kZXJpdmUuanMnXG5pbXBvcnQgeyBsb2FkUHJvamVjdFByb21wdHMsIGxvYWRHbG9iYWxQcm9tcHRzIH0gZnJvbSAncGljb2NvZGUtY29yZS9oaXN0b3J5LmpzJ1xuaW1wb3J0IHsgaW1wbGljaXRSZXdpbmRUYXJnZXQgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Jld2luZC5qcydcbmltcG9ydCB7IGNoZWNrRm9yVXBkYXRlLCBmZXRjaExhdGVzdFZlcnNpb24sIG5ld2VyVmVyc2lvbiwgaXNEZXZJbnN0YWxsLCBydW5VcGRhdGUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3VwZGF0ZS5qcydcbmltcG9ydCB7IFNURUVSX1JPTEVTLCBzdGVlcmFibGVUcmFuc2NyaXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9zdGVlci5qcydcbmltcG9ydCB7IHdyaXRlQ29uZmlnIH0gZnJvbSAncGljb2NvZGUtY29yZS9jb25maWcuanMnXG5pbXBvcnQgeyBvcGVuYWlTdGF0dXMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgRUZGT1JUX0xFVkVMUywgU1BFRURfTEVWRUxTLCBTRVNTSU9OX0NPTE9SUyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udHJvbGxlci5qcydcbmltcG9ydCB7IGFnZW50VHJhbnNjcmlwdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYWdlbnQtdHJhbnNjcmlwdC5qcydcbmltcG9ydCB7IGZ1enp5U2NvcmUgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Z1enp5LmpzJ1xuaW1wb3J0IHsgY29tcGxldGlvbkNvbnRleHQsIGFwcGx5Q29tcGxldGlvbiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29tcGxldGlvbi5qcydcbmltcG9ydCB7IGV4dHJhY3RJbWFnZVBhdGhzLCBwbGFjZWhvbGRlcml6ZUltYWdlUGF0aHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuaW1wb3J0IHsgbGlzdEZpbGVzIH0gZnJvbSAncGljb2NvZGUtY29yZS9maWxlcy5qcydcbmltcG9ydCB7IGxpc3RXb3JrdHJlZXMgfSBmcm9tICdwaWNvY29kZS1jb3JlL3dvcmt0cmVlcy5qcydcbmltcG9ydCB7IG93bmVyUm9vdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcGF0aHMuanMnXG5pbXBvcnQgeyBoaWdobGlnaHRWZXJzaW9uIH0gZnJvbSAnLi9oaWdobGlnaHQuanMnXG5pbXBvcnQgeyBjb21wYWN0TnVtYmVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9mb3JtYXQuanMnXG5pbXBvcnQgeyBjb250ZXh0QmFyIH0gZnJvbSAnLi9jb250ZXh0LWJhci5qcydcbmltcG9ydCB7IGFjdGl2aXR5Um93cywgYWN0aXZpdHlTdHJpcFNpemVzLCBzdHJpcFdpbmRvd1N0YXJ0IH0gZnJvbSAnLi9hY3Rpdml0eS1zdHJpcC5qcydcbmltcG9ydCB7IEFuaW1hdGVkVmFsdWUgfSBmcm9tICcuL2FuaW1hdGVkLXZhbHVlLmpzeCdcbmltcG9ydCB7IERlbGliZXJhdGlvbkV4Y2hhbmdlLCBNZXNzYWdlIH0gZnJvbSAnLi90cmFuc2NyaXB0LmpzeCdcbmltcG9ydCB7IENvbnZlcnNhdGlvblNlYXJjaEJhciwgQ29udmVyc2F0aW9uU2Nyb2xsQW5jaG9yLCBDb252ZXJzYXRpb25TZWFyY2hNZXNzYWdlLCBjcmVhdGVDb252ZXJzYXRpb25TZWFyY2ggfSBmcm9tICcuL2NvbnZlcnNhdGlvbi1zZWFyY2gtdmlldy5qc3gnXG5pbXBvcnQgeyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMsIHRyYW5zY3JpcHRXaW5kb3cgfSBmcm9tICcuL3RyYW5zY3JpcHQtd2luZG93LmpzJ1xuaW1wb3J0IHsgUXVlc3Rpb25Gb3JtIH0gZnJvbSAnLi9xdWVzdGlvbi1mb3JtLmpzeCdcbmltcG9ydCB7IEVtcHR5U3RhdGUgfSBmcm9tICcuL2VtcHR5LXN0YXRlLmpzeCdcbmltcG9ydCB7IEhlbHAgfSBmcm9tICcuL2hlbHAuanN4J1xuaW1wb3J0IHsgTW9kZWxQYW5lbCwgRWZmb3J0UGFuZWwsIFNwZWVkUGFuZWwsIFRoZW1lUGFuZWwsIENvbmZpZ1BhbmVsLCBDb25maXJtUGFuZWwsIEhpc3RvcnlQYW5lbCwgUmV3aW5kUGlja1BhbmVsLCBSZXdpbmRBY3Rpb25QYW5lbCwgUmVzdW1lUGFuZWwsIFByb2plY3RQYW5lbCwgTWNwUGFuZWwsIE1lbW9yeVBhbmVsLCBJbmZvTGlzdFBhbmVsLCBXYWtldXBzUGFuZWwsIENvbm5lY3RQYW5lbCwgdGltZUFnbyB9IGZyb20gJy4vcGFuZWxzLmpzeCdcbmltcG9ydCB7IGFjY2VudCwgc2V0QWNjZW50LCBzZXRQYWxldHRlLCBwYWxldHRlTmFtZSwgcGFsZXR0ZUxpc3QsIERFRkFVTFRfQUNDRU5ULCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBSRUQsIEdSRUVOLCBISUdITElHSFQgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5jb25zdCBDT01NQU5EUyA9IFtcbiAgeyBuYW1lOiAnbW9kZWwnLCBkZXNjOiAnU3dpdGNoIHRoZSBhY3RpdmUgbW9kZWwgZm9yIHRoaXMgc2Vzc2lvbicgfSxcbiAgeyBuYW1lOiAncmVmcmVzaC1tb2RlbHMnLCBkZXNjOiAnUmVmcmVzaCBhdmFpbGFibGUgbW9kZWxzIGZyb20gcHJvdmlkZXJzJyB9LFxuICB7IG5hbWU6ICdjb25uZWN0JywgZGVzYzogJ1NpZ24gaW4gd2l0aCBDaGF0R1BUIHRvIHVzZSBhIENvZGV4IHN1YnNjcmlwdGlvbicgfSxcbiAgeyBuYW1lOiAnZWZmb3J0JywgZGVzYzogJ1NldCB0aGUgdGhpbmtpbmcgZWZmb3J0IGZvciB0aGlzIHNlc3Npb24nIH0sXG4gIHsgbmFtZTogJ3NwZWVkJywgZGVzYzogJ1NwZWVkJyB9LFxuICB7IG5hbWU6ICdyZXN1bWUnLCBkZXNjOiAnUGljayB1cCBhIHByZXZpb3VzIHNlc3Npb24gd2hlcmUgeW91IGxlZnQgb2ZmJyB9LFxuICB7IG5hbWU6ICduZXcnLCBkZXNjOiAnU3RhcnQgYSBuZXcgc2Vzc2lvbiBpbiB0aGlzIHByb2plY3QnIH0sXG4gIHsgbmFtZTogJ2ZvcmsnLCBkZXNjOiAnRm9yayBjb252ZXJzYXRpb24nIH0sXG4gIHsgbmFtZTogJ2RlbGV0ZScsIGRlc2M6ICdQZXJtYW5lbnRseSBkZWxldGUgdGhlIGN1cnJlbnQgc2Vzc2lvbiBhbmQgc3RhcnQgZnJlc2gnIH0sXG4gIHsgbmFtZTogJ3Byb2plY3QnLCBkZXNjOiAnU3dpdGNoIHByb2plY3RzOiBqdW1wIHRvIGFub3RoZXIgcHJvamVjdCwgc2FtZSBhcyBjdHJsK3AnIH0sXG4gIHsgbmFtZTogJ2N3ZCcsIGRlc2M6ICdTaG93IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBwcm9qZWN0IHJvb3QnIH0sXG4gIHsgbmFtZTogJ3NraWxscycsIGRlc2M6ICdMaXN0IGV2ZXJ5IHNraWxsOiBidWlsdGluLCBnbG9iYWwsIGFuZCBwcm9qZWN0JyB9LFxuICB7IG5hbWU6ICdjb21tYW5kcycsIGRlc2M6ICdMaXN0IGV2ZXJ5IGNvbW1hbmQ6IGJ1aWx0aW4sIGdsb2JhbCwgYW5kIHByb2plY3QnIH0sXG4gIHsgbmFtZTogJ2luaXQnLCBkZXNjOiAnQ3JlYXRlIG9yIGltcHJvdmUgcmVwb3NpdG9yeSBBR0VOVFMubWQgZ3VpZGFuY2UnIH0sXG4gIHsgbmFtZTogJ3Rvb2xzJywgZGVzYzogJ0xpc3QgYnVpbHRpbiBhbmQgdXNlci1kZWZpbmVkIHRvb2xzOyBNQ1AgdG9vbHMgbGl2ZSBpbiAvbWNwJyB9LFxuICB7IG5hbWU6ICdyZXdpbmQnLCBkZXNjOiAnUmVzdG9yZSB0aGUgY29udmVyc2F0aW9uIHRvIGEgcHJldmlvdXMgbWVzc2FnZScgfSxcbiAgeyBuYW1lOiAnc3RlZXInLCBkZXNjOiAnRWRpdCBvciBhZGQgY29udmVyc2F0aW9uIG1lc3NhZ2VzIHdpdGhvdXQgc2VuZGluZycgfSxcbiAgeyBuYW1lOiAnaGlzdG9yeScsIGRlc2M6ICdTZWFyY2ggcHJvbXB0cyB5b3UgcHJldmlvdXNseSBzZW50JyB9LFxuICB7IG5hbWU6ICdyZW5hbWUnLCBkZXNjOiAnTmFtZSB0aGlzIHNlc3Npb247IG9taXQgdGhlIG5hbWUgdG8gcmVzdG9yZSBpdHMgYXV0b21hdGljIHRpdGxlJyB9LFxuICB7IG5hbWU6ICdjb2xvcicsIGRlc2M6ICdDb2xvciB0aGlzIHNlc3Npb246IC9jb2xvciA8bmFtZSBvciAjaGV4PiwgL2NvbG9yIG5vbmUgdG8gY2xlYXInIH0sXG4gIHsgbmFtZTogJ3RoZW1lJywgZGVzYzogJ1BpY2sgYSBjb2xvciB0aGVtZTsgL3RoZW1lIDxuYW1lPiBhcHBsaWVzIG9uZSBkaXJlY3RseScgfSxcbiAgeyBuYW1lOiAnY29uZmlnJywgZGVzYzogJ0NvbmZpZ3VyZSBwaWNvIGRpc3BsYXkgYW5kIGJlaGF2aW9yJyB9LFxuICB7IG5hbWU6ICdtY3AnLCBkZXNjOiAnTWFuYWdlIE1DUCBzZXJ2ZXJzOiBhZGQsIHRvZ2dsZSwgcmVjb25uZWN0JyB9LFxuICB7IG5hbWU6ICdwYXJhbGxlbCcsIGRlc2M6ICdSdW4gYSB0YXNrIHdpdGggcGFyYWxsZWwgYWdlbnRzOiAvcGFyYWxsZWwgPHRhc2s+JyB9LFxuICB7IG5hbWU6ICdkZWxpYmVyYXRlJywgZGVzYzogJ0RlbGliZXJhdGUgb24gYSBkZWNpc2lvbjogL2RlbGliZXJhdGUgPGRlY2lzaW9uPicgfSxcbiAgeyBuYW1lOiAnd2FrZXVwcycsIGRlc2M6ICdWaWV3IGFuZCBjYW5jZWwgc2NoZWR1bGVkIHdha2UtdXBzJyB9LFxuICB7IG5hbWU6ICdtZW1vcnknLCBkZXNjOiAnQnJvd3NlIGFuZCBtYW5hZ2Ugc2F2ZWQgbWVtb3JpZXM6IHByb2plY3QgYW5kIGdsb2JhbCcgfSxcbiAgeyBuYW1lOiAnY29tcGFjdCcsIGRlc2M6ICdTdW1tYXJpemUgdGhlIGNvbnZlcnNhdGlvbiB0byBmcmVlIHRoZSBjb250ZXh0IHdpbmRvdycgfSxcbiAgeyBuYW1lOiAnY2xlYXInLCBkZXNjOiAnQ2xlYXIgdGhlIGNvbnZlcnNhdGlvbiBhbmQgZnJlZSB0aGUgY29udGV4dCB3aW5kb3cnIH0sXG4gIHsgbmFtZTogJ2Nvc3QnLCBkZXNjOiAnU2hvdyB0b2tlbiB1c2FnZSBhbmQgZXN0aW1hdGVkIGNvc3Qgc28gZmFyJyB9LFxuICB7IG5hbWU6ICdjb250ZXh0JywgZGVzYzogXCJTaG93IHdoYXQncyBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGFuZCBob3cgYmlnIGVhY2ggcGllY2UgaXNcIiB9LFxuICB7IG5hbWU6ICdleHBvcnQnLCBkZXNjOiAnU2F2ZSB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gdG8gYSBtYXJrZG93biBmaWxlJyB9LFxuICB7IG5hbWU6ICd1cGRhdGUnLCBkZXNjOiAnVXBkYXRlIHBpY28gdG8gdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gbnBtJyB9LFxuICB7IG5hbWU6ICdoZWxwJywgZGVzYzogJ0xpc3QgZXZlcnkgY29tbWFuZCBhbmQgd2hhdCBpdCBkb2VzJyB9LFxuXVxuXG5jb25zdCBISVNUT1JZX1NDT1BFUyA9IFsnc2Vzc2lvbicsICdwcm9qZWN0JywgJ2V2ZXJ5d2hlcmUnXVxuY29uc3QgTUVNT1JZX1NDT1BFUyA9IFsnYWxsJywgJ3Byb2plY3QnLCAnZ2xvYmFsJ11cblxuXG5mdW5jdGlvbiBhZ2VudEVsYXBzZWQoYWdlbnQsIG5vdyA9IERhdGUubm93KCkpIHtcbiAgaWYgKCFhZ2VudC5zdGFydGVkQXQpIHJldHVybiAnd2FpdGluZydcbiAgY29uc3Qgc2Vjb25kcyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKChhZ2VudC5lbmRlZEF0IHx8IG5vdykgLSBhZ2VudC5zdGFydGVkQXQpIC8gMTAwMCkpXG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MClcbiAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MClcbiAgaWYgKGhvdXJzKSByZXR1cm4gYCR7aG91cnN9aCAke21pbnV0ZXMgJSA2MH1tYFxuICBpZiAobWludXRlcykgcmV0dXJuIGAke21pbnV0ZXN9bSAke3NlY29uZHMgJSA2MH1zYFxuICByZXR1cm4gYCR7c2Vjb25kc31zYFxufVxuXG5mdW5jdGlvbiBhZ2VudFN0YXR1cyhhZ2VudCkge1xuICBpZiAoYWdlbnQuc3RhdHVzID09PSAncnVubmluZycpIHJldHVybiB7IGljb246ICcnLCBsYWJlbDogJycsIGNvbG9yOiBhY2NlbnQoKSB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdxdWV1ZWQnKSByZXR1cm4geyBpY29uOiAnXHUyNUNDJywgbGFiZWw6ICdxdWV1ZWQnLCBjb2xvcjogTVVURUQgfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAnY29tcGxldGVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MjVDRicsIGxhYmVsOiAnJywgY29sb3I6IEdSRUVOIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHJldHVybiB7IGljb246ICdcdTAwRDcnLCBsYWJlbDogJ2ZhaWxlZCcsIGNvbG9yOiBSRUQgfVxuICByZXR1cm4geyBpY29uOiAnXHUyNUEwJywgbGFiZWw6ICdjYW5jZWxsZWQnLCBjb2xvcjogTVVURUQgfVxufVxuXG5mdW5jdGlvbiBTdGVlck1lc3NhZ2UoeyBpdGVtLCB2ZXJib3NlLCBzZWxlY3RlZCwgZm9jdXMgfSkge1xuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICBmb2N1cy5pdGVtKGl0ZW0ubWVzc2FnZUlkLCBsYXlvdXQpXG4gIHJldHVybiA8TWVzc2FnZSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSBzaG93TG9ja2VkIC8+XG59XG5cbmZ1bmN0aW9uIERpY3RhdGlvbktleXMoeyBpbnB1dCB9KSB7XG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmIChpbnB1dC5oYW5kbGUoZXZlbnQpKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9KVxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBNb3VzZUZvY3VzUmVnaW9uKHsgY2hpbGRyZW4sIG9uUHJlc3MsIC4uLnByb3BzIH0pIHtcbiAgY29uc3QgaGl0VGVzdCA9IHVzZUhpdFRlc3QoKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnICYmIGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSkpIG9uUHJlc3MoKVxuICB9KVxuICByZXR1cm4gPGJveCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L2JveD5cbn1cblxuZnVuY3Rpb24gQ29tcG9zZXJBY3Rpb24oeyBpY29uLCBhY3RpdmVJY29uLCBhY3RpdmUgPSBmYWxzZSwgb25QcmVzcywgb25Ib3ZlciB9KSB7XG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBjb25zdCBpbnNpZGUgPSBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpXG4gICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ21vdmUnICYmIGluc2lkZSAhPT0gaG92ZXJlZCgpKSB7XG4gICAgICBzZXRIb3ZlcmVkKGluc2lkZSlcbiAgICAgIG9uSG92ZXI/LihpbnNpZGUpXG4gICAgfVxuICAgIGlmIChpbnNpZGUgJiYgZXZlbnQuYWN0aW9uID09PSAncHJlc3MnICYmIGV2ZW50LmJ1dHRvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBvblByZXNzKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuICBjb25zdCBoaWdobGlnaHRlZCA9IGhvdmVyZWQoKSB8fCBhY3RpdmVcbiAgcmV0dXJuIDx0ZXh0IHN0eWxlPXt7IGJnOiBoaWdobGlnaHRlZCA/IGFjY2VudCgpIDogdW5kZWZpbmVkLCBjb2xvcjogaGlnaGxpZ2h0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgJHtoaWdobGlnaHRlZCA/IGFjdGl2ZUljb24gOiBpY29ufSBgfTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gQWdlbnRTdHJpcFJvdyh7IHNlbGVjdGVkLCBmb2N1c2VkLCBjaGlsZHJlbiwgb25QcmVzcyB9KSB7XG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBjb25zdCBpbnNpZGUgPSBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpXG4gICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ21vdmUnKSBzZXRIb3ZlcmVkKGluc2lkZSlcbiAgICBpZiAoaW5zaWRlICYmIGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJyAmJiBldmVudC5idXR0b24gPT09ICdsZWZ0Jykge1xuICAgICAgb25QcmVzcygpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBiZzogZm9jdXNlZCA/IGFjY2VudCgpIDogbnVsbCwgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogaG92ZXJlZCgpID8gRkdfU09GVCA6IE1VVEVEIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogc2VsZWN0ZWQgPyBhY2NlbnQoKSA6IE1VVEVELCBib2xkOiBzZWxlY3RlZCB9fT57c2VsZWN0ZWQgPyAnXHUyNzZGICcgOiAnICAnfTwvdGV4dD5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2JveD5cbiAgKVxufVxuXG4vLyBvbmx5IHRoZSBuZXdlc3Qgc2xpY2Ugb2YgYSBsb25nIHRyYW5zY3JpcHQgcmVuZGVyczsgb2xkZXIgaXRlbXMgbG9hZCBpblxuLy8gYmF0Y2hlcyB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgdG8gdGhlIHRvcC4gcmVuZGVyIGNvc3QgaXMgcGVyLWl0ZW0sIHNvIHRoaXNcbi8vIGtlZXBzIGRheS1sb25nIHNlc3Npb25zIGFzIGZhc3QgYXMgZnJlc2ggb25lc1xuY29uc3QgSElTVE9SWV9XSU5ET1cgPSA1MFxuXG5mdW5jdGlvbiBjb2xsYXBzZVN0ZWVyVG9vbHMoaXRlbXMpIHtcbiAgY29uc3QgY29sbGFwc2VkID0gW11cbiAgbGV0IGhpZGRlbiA9IDBcbiAgY29uc3QgZmx1c2ggPSAoKSA9PiB7XG4gICAgaWYgKCFoaWRkZW4pIHJldHVyblxuICAgIGNvbGxhcHNlZC5wdXNoKHsga2luZDogJ3N0ZWVyLXRvb2xzJywgY291bnQ6IGhpZGRlbiB9KVxuICAgIGhpZGRlbiA9IDBcbiAgfVxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBpZiAoaXRlbS5raW5kID09PSAndG9vbCcgfHwgaXRlbS5raW5kID09PSAndG9vbC1ncm91cCcgfHwgaXRlbS5raW5kID09PSAndGhvdWdodHMnKSB7XG4gICAgICBoaWRkZW4gKz0gaXRlbS5raW5kID09PSAndG9vbC1ncm91cCcgPyBpdGVtLml0ZW1zLmxlbmd0aCA6IDFcbiAgICB9IGVsc2Uge1xuICAgICAgZmx1c2goKVxuICAgICAgY29sbGFwc2VkLnB1c2goaXRlbSlcbiAgICB9XG4gIH1cbiAgZmx1c2goKVxuICByZXR1cm4gY29sbGFwc2VkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBcHAoeyBib290LCBjb250cm9sbGVyOiBjdGwgfSkge1xuICBjb25zdCB7IGN3ZCwgcm9vdCwgdmVyc2lvbiwgc2tpbGxzLCBtY3AgfSA9IGJvb3RcbiAgY29uc3Qgc3RhdGUgPSBjdGwuc3RhdGVcbiAgY29uc3QgW3dvcmtzcGFjZU9wZW4sIHNldFdvcmtzcGFjZU9wZW5dID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbd29ya3NwYWNlUm93cywgc2V0V29ya3NwYWNlUm93c10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFt3b3Jrc3BhY2VTZWxlY3RlZCwgc2V0V29ya3NwYWNlU2VsZWN0ZWRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFt3b3Jrc3BhY2VMb2FkaW5nLCBzZXRXb3Jrc3BhY2VMb2FkaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3dvcmtzcGFjZUVycm9yLCBzZXRXb3Jrc3BhY2VFcnJvcl0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFt3b3Jrc3BhY2VIZWlnaHQsIHNldFdvcmtzcGFjZUhlaWdodF0gPSBjcmVhdGVTaWduYWwoMjApXG4gIGNvbnN0IFt3b3Jrc3BhY2VQZW5kaW5nLCBzZXRXb3Jrc3BhY2VQZW5kaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3Qgd29ya3NwYWNlR3JvdXBzTm93ID0gd29ya3NwYWNlR3JvdXBzKHdvcmtzcGFjZVJvd3MoKSlcbiAgY29uc3Qgd29ya3NwYWNlU2Vzc2lvbnMgPSB3b3Jrc3BhY2VHcm91cHNOb3cuZmxhdE1hcCgoZ3JvdXApID0+IGdyb3VwLnNlc3Npb25zKVxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoV29ya3NwYWNlKCkge1xuICAgIGlmICghYm9vdC53b3Jrc3BhY2UgfHwgYm9vdC5yZWZzLndvcmtzcGFjZVJlZnJlc2hpbmcpIHJldHVyblxuICAgIGJvb3QucmVmcy53b3Jrc3BhY2VSZWZyZXNoaW5nID0gdHJ1ZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByb3dzID0gYXdhaXQgYm9vdC53b3Jrc3BhY2UubGlzdCgpXG4gICAgICBjb25zdCBuZXh0ID0gd29ya3NwYWNlR3JvdXBzKHJvd3MpLmZsYXRNYXAoKGdyb3VwKSA9PiBncm91cC5zZXNzaW9ucylcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gd29ya3NwYWNlU2VsZWN0aW9uKG5leHQsIHdvcmtzcGFjZVNlbGVjdGVkKCksIHdvcmtzcGFjZVNlc3Npb25zKVxuICAgICAgc2V0V29ya3NwYWNlU2VsZWN0ZWQoc2VsZWN0ZWQpXG4gICAgICBzZXRXb3Jrc3BhY2VSb3dzKHJvd3MpXG4gICAgICBzZXRXb3Jrc3BhY2VFcnJvcignJylcbiAgICAgIGlmICh3b3Jrc3BhY2VPcGVuKCkpIGF3YWl0IGJvb3Qud29ya3NwYWNlLnByZXZpZXcoc2VsZWN0ZWQpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldFdvcmtzcGFjZUVycm9yKGBzZXNzaW9ucyBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBib290LnJlZnMud29ya3NwYWNlUmVmcmVzaGluZyA9IGZhbHNlXG4gICAgICBzZXRXb3Jrc3BhY2VMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuICBib290LnJlZnMucmVmcmVzaFdvcmtzcGFjZSA9IHJlZnJlc2hXb3Jrc3BhY2VcbiAgdXNlSW50ZXJ2YWwoKCkgPT4geyBpZiAod29ya3NwYWNlT3BlbigpKSB2b2lkIGJvb3QucmVmcy5yZWZyZXNoV29ya3NwYWNlKCkgfSwgMTAwMClcbiAgaWYgKGJvb3Qud29ya3NwYWNlICYmICFib290LnJlZnMud29ya3NwYWNlU3Vic2NyaWJlZCkge1xuICAgIGJvb3QucmVmcy53b3Jrc3BhY2VTdWJzY3JpYmVkID0gdHJ1ZVxuICAgIGNvbnN0IGNsZWFudXAgPSBib290LndvcmtzcGFjZS5zdWJzY3JpYmU/LigoKSA9PiB2b2lkIGJvb3QucmVmcy5yZWZyZXNoV29ya3NwYWNlKCkpXG4gICAgb25DbGVhbnVwKCgpID0+IHsgY2xlYW51cD8uKCk7IGJvb3QucmVmcy53b3Jrc3BhY2VTdWJzY3JpYmVkID0gZmFsc2UgfSlcbiAgfVxuICBjb25zdCBbbW9kZWxzLCBzZXRNb2RlbHNdID0gY3JlYXRlU2lnbmFsKGJvb3QubW9kZWxzKVxuICBjb25zdCBbcmVmcmVzaGluZ01vZGVscywgc2V0UmVmcmVzaGluZ01vZGVsc10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG5cbiAgY29uc3QgW2Rlcml2ZWQsIHNldERlcml2ZWRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmRlcml2ZWQpXG4gIGNvbnN0IFt0ZXJtaW5hbFdpZHRoLCBzZXRUZXJtaW5hbFdpZHRoXSA9IGNyZWF0ZVNpZ25hbChwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwKVxuICBjb25zdCBbdGVybWluYWxIZWlnaHQsIHNldFRlcm1pbmFsSGVpZ2h0XSA9IGNyZWF0ZVNpZ25hbChwcm9jZXNzLnN0ZG91dC5yb3dzIHx8IDI0KVxuICB1c2VSZXNpemUoKHsgd2lkdGgsIGhlaWdodCB9KSA9PiB7IHNldFRlcm1pbmFsV2lkdGgod2lkdGgpOyBzZXRUZXJtaW5hbEhlaWdodChoZWlnaHQpIH0pXG4gIGNvbnN0IFtvdmVybGF5LCBzZXRPdmVybGF5XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5vdmVybGF5KVxuICBjb25zdCBbc3RyZWFtaW5nLCBzZXRTdHJlYW1pbmddID0gY3JlYXRlU2lnbmFsKHN0YXRlLnN0cmVhbWluZylcbiAgY29uc3QgW2xpdmVVc2FnZSwgc2V0TGl2ZVVzYWdlXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5saXZlVXNhZ2UpXG4gIGNvbnN0IFt0dXJuUGhhc2UsIHNldFR1cm5QaGFzZV0gPSBjcmVhdGVTaWduYWwoc3RhdGUudHVyblBoYXNlKVxuICBjb25zdCBbYnVzeSwgc2V0QnVzeV0gPSBjcmVhdGVTaWduYWwoc3RhdGUuYnVzeSlcbiAgY29uc3QgW2NvbXBhY3RpbmcsIHNldENvbXBhY3RpbmddID0gY3JlYXRlU2lnbmFsKHN0YXRlLmNvbXBhY3RpbmcpXG4gIGNvbnN0IFtjb21wYWN0U3RhdHVzLCBzZXRDb21wYWN0U3RhdHVzXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5jb21wYWN0U3RhdHVzKVxuICBjb25zdCBbc3RhcnRlZEF0LCBzZXRTdGFydGVkQXRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnN0YXJ0ZWRBdClcbiAgY29uc3QgW2lucHV0LCBzZXRJbnB1dFZhbHVlXSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgY29tcG9zZXJGaWxlcyA9IGJvb3QucmVmcy5jb21wb3NlckZpbGVzID8/PSBjcmVhdGVDb21wb3NlckZpbGVzKClcbiAgY29uc3QgW2lucHV0Q3Vyc29yLCBzZXRJbnB1dEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2NvbW1hbmRGb3JtLCBzZXRDb21tYW5kRm9ybV0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3Qgc2V0SW5wdXQgPSAodGV4dCwgY3Vyc29yKSA9PiB7XG4gICAgYm9vdC5yZWZzLmRyYWZ0UmV2aXNpb24gPSAoYm9vdC5yZWZzLmRyYWZ0UmV2aXNpb24gPz8gMCkgKyAxXG4gICAgY29uc3QgdmFsdWUgPSBjb21wb3NlckZpbGVzLnVwZGF0ZSh0ZXh0LCBzdGF0ZS5hdHRhY2htZW50cylcbiAgICBzZXRJbnB1dFZhbHVlKHZhbHVlKVxuICAgIHNldElucHV0Q3Vyc29yKGN1cnNvciA/PyB2YWx1ZS5sZW5ndGgpXG4gIH1cbiAgY29uc3QgW2RpY3RhdGlvblN0YXR1cywgc2V0RGljdGF0aW9uU3RhdHVzXSA9IGNyZWF0ZVNpZ25hbCgnaWRsZScpXG4gIGNvbnN0IFtkaWN0YXRpb25MZXZlbHMsIHNldERpY3RhdGlvbkxldmVsc10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtjYXB0dXJlU3RhdHVzLCBzZXRDYXB0dXJlU3RhdHVzXSA9IGNyZWF0ZVNpZ25hbCgnaWRsZScpXG4gIGNvbnN0IFtjb21wb3NlckFjdGlvbkxhYmVsLCBzZXRDb21wb3NlckFjdGlvbkxhYmVsXSA9IGNyZWF0ZVNpZ25hbCgnJylcbiAgY29uc3QgW21vZGVsLCBzZXRNb2RlbF0gPSBjcmVhdGVTaWduYWwoc3RhdGUubW9kZWwpXG4gIGNvbnN0IFtkZWZhdWx0TW9kZWwsIHNldERlZmF1bHRNb2RlbF0gPSBjcmVhdGVTaWduYWwoc3RhdGUuZGVmYXVsdE1vZGVsKVxuICBjb25zdCBbZWZmb3J0LCBzZXRFZmZvcnRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmVmZm9ydClcbiAgY29uc3QgW2RlZmF1bHRFZmZvcnQsIHNldERlZmF1bHRFZmZvcnRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmRlZmF1bHRFZmZvcnQpXG4gIGNvbnN0IFtzcGVlZCwgc2V0U3BlZWRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnNwZWVkKVxuICBjb25zdCBbc3BlZWREZWZhdWx0cywgc2V0U3BlZWREZWZhdWx0c10gPSBjcmVhdGVTaWduYWwoeyAuLi5zdGF0ZS5zcGVlZERlZmF1bHRzIH0pXG4gIGNvbnN0IFtzaG93U3BlZWRQYW5lbCwgc2V0U2hvd1NwZWVkUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0VmZm9ydFBhbmVsLCBzZXRTaG93RWZmb3J0UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd1RoZW1lUGFuZWwsIHNldFNob3dUaGVtZVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dDb25maWdQYW5lbCwgc2V0U2hvd0NvbmZpZ1BhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dEZWxldGVDb25maXJtLCBzZXRTaG93RGVsZXRlQ29uZmlybV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtjbG91ZHMsIHNldENsb3Vkc10gPSBjcmVhdGVTaWduYWwoYm9vdC5jbG91ZHMpXG4gIGNvbnN0IFtjb21wYWN0VG9vbEhpc3RvcnksIHNldENvbXBhY3RUb29sSGlzdG9yeV0gPSBjcmVhdGVTaWduYWwoYm9vdC5jb21wYWN0VG9vbEhpc3RvcnkpXG4gIGNvbnN0IFtnaXRGb290ZXIsIHNldEdpdEZvb3Rlcl0gPSBjcmVhdGVTaWduYWwoYm9vdC5naXRGb290ZXIpXG4gIGNvbnN0IFt3aWRlU2lkZWJhciwgc2V0V2lkZVNpZGViYXJdID0gY3JlYXRlU2lnbmFsKGJvb3Qud2lkZVNpZGViYXIpXG4gIGNvbnN0IFtyZXNlYXJjaEFnZW50TGltaXQsIHNldFJlc2VhcmNoQWdlbnRMaW1pdF0gPSBjcmVhdGVTaWduYWwoYm9vdC5yZXNlYXJjaEFnZW50TGltaXQpXG4gIGNvbnN0IFtxdWVzdGlvblJlcXVlc3QsIHNldFF1ZXN0aW9uUmVxdWVzdF0gPSBjcmVhdGVTaWduYWwoc3RhdGUucXVlc3Rpb24pXG4gIGNvbnN0IFtzaG93TWVtb3J5UGFuZWwsIHNldFNob3dNZW1vcnlQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFttZW1TY29wZSwgc2V0TWVtU2NvcGVdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFttZW1vcnlMaXN0LCBzZXRNZW1vcnlMaXN0XSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3RoZW1lUHJlZiwgc2V0VGhlbWVQcmVmXSA9IGNyZWF0ZVNpZ25hbChib290LnRoZW1lUHJlZiB8fCAnYXV0bycpXG4gIGNvbnN0IFtxdWV1ZWQsIHNldFF1ZXVlZF0gPSBjcmVhdGVTaWduYWwoc3RhdGUucXVldWVkKVxuICBjb25zdCBbZXhwZWRpdGVkLCBzZXRFeHBlZGl0ZWRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmV4cGVkaXRlZClcbiAgY29uc3QgW3NlbnQsIHNldFNlbnRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnNlbnQpXG4gIGNvbnN0IFtoaXN0SWR4LCBzZXRIaXN0SWR4XSA9IGNyZWF0ZVNpZ25hbCgtMSlcbiAgY29uc3QgW2NtZEluZGV4LCBzZXRDbWRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2NtZEN5Y2xlLCBzZXRDbWRDeWNsZV0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW2ZpbGVJbmRleCwgc2V0RmlsZUluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZmlsZUxpc3QsIHNldEZpbGVMaXN0XSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW2ZpbGVzRGlzbWlzc2VkLCBzZXRGaWxlc0Rpc21pc3NlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFt2aWV3LCBzZXRWaWV3U2lnbmFsXSA9IGNyZWF0ZVNpZ25hbCgnY2hhdCcpXG4gIGNvbnN0IFt2ZXJib3NlXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dNb2RlbFBhbmVsLCBzZXRTaG93TW9kZWxQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93UmVzZWFyY2hNb2RlbFBhbmVsLCBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jlc2VhcmNoTW9kZWxSZXR1cm4sIHNldFJlc2VhcmNoTW9kZWxSZXR1cm5dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCwgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0aW5nU2hlbGxNb2RlbCwgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0LCBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcGVuZGluZ1Jlc2VhcmNoLCBzZXRQZW5kaW5nUmVzZWFyY2hdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtwZW5kaW5nRGVsaWJlcmF0aW9uLCBzZXRQZW5kaW5nRGVsaWJlcmF0aW9uXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbYWdlbnRzVmVyc2lvbiwgc2V0QWdlbnRzVmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoc3RhdGUuYWN0aXZpdHlWZXJzaW9uKVxuICBjb25zdCBbdmlld2VkQWdlbnRJZCwgc2V0Vmlld2VkQWdlbnRJZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW2FnZW50V2luZG93T2Zmc2V0LCBzZXRBZ2VudFdpbmRvd09mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Nob3dIaXN0b3J5UGFuZWwsIHNldFNob3dIaXN0b3J5UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbaGlzdFNjb3BlLCBzZXRIaXN0U2NvcGVdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtoaXN0UHJvbXB0cywgc2V0SGlzdFByb21wdHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbc2hvd1Jlc3VtZVBhbmVsLCBzZXRTaG93UmVzdW1lUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcmVzdW1lU2NvcGVzLCBzZXRSZXN1bWVTY29wZXNdID0gY3JlYXRlU2lnbmFsKFsncmVwb3NpdG9yeScsICdldmVyeXdoZXJlJ10pXG4gIGNvbnN0IFtyZXN1bWVTY29wZSwgc2V0UmVzdW1lU2NvcGVdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtyZXN1bWVTZXNzaW9ucywgc2V0UmVzdW1lU2Vzc2lvbnNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbcmVzdW1lTG9hZGluZywgc2V0UmVzdW1lTG9hZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93TWNwUGFuZWwsIHNldFNob3dNY3BQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93UHJvamVjdFBhbmVsLCBzZXRTaG93UHJvamVjdFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2luZm9QYW5lbCwgc2V0SW5mb1BhbmVsXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbdmlld2VkU2hlbGxJZCwgc2V0Vmlld2VkU2hlbGxJZF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3NoZWxsV2luZG93T2Zmc2V0LCBzZXRTaGVsbFdpbmRvd09mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Nob3dXYWtldXBzUGFuZWwsIHNldFNob3dXYWtldXBzUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd0Nvbm5lY3RQYW5lbCwgc2V0U2hvd0Nvbm5lY3RQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFthdXRoUHJvdmlkZXJzLCBzZXRBdXRoUHJvdmlkZXJzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3NoZWxsc1ZlcnNpb24sIHNldFNoZWxsc1ZlcnNpb25dID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtnaXRWZXJzaW9uLCBzZXRHaXRWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbcHJvamVjdHMsIHNldFByb2plY3RzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3Byb2plY3RzTG9hZGluZywgc2V0UHJvamVjdHNMb2FkaW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW21jcFNlcnZlcnMsIHNldE1jcFNlcnZlcnNdID0gY3JlYXRlU2lnbmFsKG1jcC5saXN0KCkpXG4gIGNvbnN0IFtjb21wbGV0aW5nLCBzZXRDb21wbGV0aW5nXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2NvbXBJbmRleCwgc2V0Q29tcEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbcmV3aW5kU3RlcCwgc2V0UmV3aW5kU3RlcF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3Jld2luZFRhcmdldCwgc2V0UmV3aW5kVGFyZ2V0XSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbb2Zmc2V0LCBzZXRPZmZzZXRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtmb2xsb3csIHNldEZvbGxvd10gPSBjcmVhdGVTaWduYWwodHJ1ZSlcbiAgY29uc3QgW2hpc3RXaW5kb3csIHNldEhpc3RXaW5kb3ddID0gY3JlYXRlU2lnbmFsKEhJU1RPUllfV0lORE9XKVxuICBjb25zdCBbdHJhbnNjcmlwdE1ldHJpY3MsIHNldFRyYW5zY3JpcHRNZXRyaWNzXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc3RlZXIsIHNldFN0ZWVyXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc3RlZXJUZXh0LCBzZXRTdGVlclRleHRdID0gY3JlYXRlU2lnbmFsKCcnKVxuXG4gIGNvbnN0IHJlZnMgPSBib290LnJlZnNcbiAgcmVmcy5xdWl0QXQgPz89IDBcbiAgcmVmcy5yZXN1bWVPcGVuID8/PSAwXG5cbiAgZnVuY3Rpb24gc2V0VmlldyhuZXh0KSB7XG4gICAgc2V0Vmlld1NpZ25hbChuZXh0KVxuICAgIGN0bC5ob2xkKG5leHQgIT09ICdjaGF0JylcbiAgfVxuXG4gIC8vIHRoZSBjb250cm9sbGVyIG93bnMgZXZlcnkgcGllY2Ugb2YgY29udmVyc2F0aW9uIHN0YXRlOyB0aGVzZSBzaWduYWxzXG4gIC8vIG1pcnJvciBpdCBzbyB0aGUgcmVuZGVyIHRyZWUgYmVsb3cgc3RheXMgcmVhY3RpdmUgd2l0aG91dCBrbm93aW5nIHRoYXRcbiAgY29uc3QgbWlycm9yID0gKGdldCwgc2V0LCB2YWx1ZSkgPT4ge1xuICAgIGlmIChnZXQoKSAhPT0gdmFsdWUpIHNldCh2YWx1ZSlcbiAgfVxuICBjb25zdCBbcGVlclN0YXR1cywgc2V0UGVlclN0YXR1c10gPSBjcmVhdGVTaWduYWwoJycpXG5cbiAgZnVuY3Rpb24gc3luY0Zyb21Db250cm9sbGVyKCkge1xuICAgIHNldFBlZXJTdGF0dXMoc3RhdGUucGVlckVycm9yID8gYHBlZXIgZGlzY29ubmVjdGVkOiAke3N0YXRlLnBlZXJFcnJvcn1gIDogc3RhdGUucGVlclBhdXNlZCAmJiBzdGF0ZS5wZWVyQ29ubmVjdGlvbiA/ICdwZWVyIHJlc3BvbnNlcyBwYXVzZWQnIDogJycpXG4gICAgbWlycm9yKGRlcml2ZWQsIHNldERlcml2ZWQsIHN0YXRlLmRlcml2ZWQpXG4gICAgbWlycm9yKG92ZXJsYXksIHNldE92ZXJsYXksIHN0YXRlLm92ZXJsYXkpXG4gICAgbWlycm9yKHN0cmVhbWluZywgc2V0U3RyZWFtaW5nLCBzdGF0ZS5zdHJlYW1pbmcpXG4gICAgbWlycm9yKGxpdmVVc2FnZSwgc2V0TGl2ZVVzYWdlLCBzdGF0ZS5saXZlVXNhZ2UpXG4gICAgbWlycm9yKHR1cm5QaGFzZSwgc2V0VHVyblBoYXNlLCBzdGF0ZS50dXJuUGhhc2UpXG4gICAgbWlycm9yKGJ1c3ksIHNldEJ1c3ksIHN0YXRlLmJ1c3kpXG4gICAgbWlycm9yKGNvbXBhY3RpbmcsIHNldENvbXBhY3RpbmcsIHN0YXRlLmNvbXBhY3RpbmcpXG4gICAgbWlycm9yKGNvbXBhY3RTdGF0dXMsIHNldENvbXBhY3RTdGF0dXMsIHN0YXRlLmNvbXBhY3RTdGF0dXMpXG4gICAgbWlycm9yKHN0YXJ0ZWRBdCwgc2V0U3RhcnRlZEF0LCBzdGF0ZS5zdGFydGVkQXQpXG4gICAgbWlycm9yKG1vZGVsLCBzZXRNb2RlbCwgc3RhdGUubW9kZWwpXG4gICAgbWlycm9yKGRlZmF1bHRNb2RlbCwgc2V0RGVmYXVsdE1vZGVsLCBzdGF0ZS5kZWZhdWx0TW9kZWwpXG4gICAgbWlycm9yKHNwZWVkLCBzZXRTcGVlZCwgc3RhdGUuc3BlZWQpXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHNwZWVkRGVmYXVsdHMoKSkgIT09IEpTT04uc3RyaW5naWZ5KHN0YXRlLnNwZWVkRGVmYXVsdHMpKSBzZXRTcGVlZERlZmF1bHRzKHsgLi4uc3RhdGUuc3BlZWREZWZhdWx0cyB9KVxuICAgIG1pcnJvcihlZmZvcnQsIHNldEVmZm9ydCwgc3RhdGUuZWZmb3J0KVxuICAgIG1pcnJvcihkZWZhdWx0RWZmb3J0LCBzZXREZWZhdWx0RWZmb3J0LCBzdGF0ZS5kZWZhdWx0RWZmb3J0KVxuICAgIG1pcnJvcihxdWVzdGlvblJlcXVlc3QsIHNldFF1ZXN0aW9uUmVxdWVzdCwgc3RhdGUucXVlc3Rpb24pXG4gICAgbWlycm9yKHF1ZXVlZCwgc2V0UXVldWVkLCBzdGF0ZS5xdWV1ZWQpXG4gICAgbWlycm9yKGV4cGVkaXRlZCwgc2V0RXhwZWRpdGVkLCBzdGF0ZS5leHBlZGl0ZWQpXG4gICAgbWlycm9yKHNlbnQsIHNldFNlbnQsIHN0YXRlLnNlbnQpXG4gICAgbWlycm9yKGFnZW50c1ZlcnNpb24sIHNldEFnZW50c1ZlcnNpb24sIHN0YXRlLmFjdGl2aXR5VmVyc2lvbilcbiAgfVxuXG4gIC8vIHRyZW5kIHJlLXJ1bnMgdGhpcyBjb21wb25lbnQgb24gZXZlcnkgc2lnbmFsIGNoYW5nZSwgc28gdGhlIGNvbnRyb2xsZXJcbiAgLy8gaXMgc3Vic2NyaWJlZCBvbmNlIGFuZCBlYWNoIGhhbmRsZXIgcmVhY2hlcyB0aGUgbmV3ZXN0IHJlbmRlciB0aHJvdWdoXG4gIC8vIHJlZnMudWksIHdoaWNoIGlzIHJlcGxhY2VkIGJlbG93IG9uIGV2ZXJ5IHBhc3NcbiAgcmVmcy51aSA9IHtcbiAgICBzeW5jOiBzeW5jRnJvbUNvbnRyb2xsZXIsXG4gICAgZmxhc2g6IChtZXNzYWdlKSA9PiBmbGFzaChtZXNzYWdlKSxcbiAgICBkZXJpdmVkOiAobmV4dCkgPT4ge1xuICAgICAgc2V0QWNjZW50KG5leHQuY29sb3IpXG4gICAgICBib290LnNldFRoZW1lPy4oeyBhY2NlbnQ6IG5leHQuY29sb3IgfHwgREVGQVVMVF9BQ0NFTlQsIG11dGVkOiBNVVRFRCB9KVxuICAgIH0sXG4gICAgcXVlc3Rpb246ICgpID0+IHtcbiAgICAgIHJlZnMuZGljdGF0aW9uSW5wdXQ/LmNhbmNlbCgpXG4gICAgICBmbS5mb2N1cygncXVlc3Rpb24nKVxuICAgIH0sXG4gICAgdHVybjogKCkgPT4ge1xuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIH0sXG4gICAgaW5wdXQ6ICh0ZXh0KSA9PiB7XG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgc2V0SW5wdXQodGV4dClcbiAgICB9LFxuICAgIHNlc3Npb246ICgpID0+IHtcbiAgICAgIHNldENvbW1hbmRGb3JtKG51bGwpXG4gICAgICByZWZzLmNvbW1hbmRFeHBhbnNpb24gPSBudWxsXG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZChudWxsKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZChudWxsKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9LFxuICAgIHJlc3VtZWQ6IChtZXRhKSA9PiBmbGFzaChgcmVzdW1lZCAgJHttZXRhLnR1cm5zfSAke21ldGEudHVybnMgPT09IDEgPyAndHVybicgOiAndHVybnMnfSAgJHt0aW1lQWdvKG1ldGEuYXQpfWApLFxuICAgIHByb2plY3Q6IChuZXh0KSA9PiB7XG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxceDFiXTA7cGljbyAgJHtuZXh0LnJvb3Quc3BsaXQoJy8nKS5wb3AoKX1cXHgwN2ApXG4gICAgICBzZXRNY3BTZXJ2ZXJzKG5leHQubWNwLmxpc3QoKSlcbiAgICAgIHNldEZpbGVMaXN0KFtdKVxuICAgIH0sXG4gICAgbWNwOiAoc2VydmVycykgPT4gc2V0TWNwU2VydmVycyhzZXJ2ZXJzKSxcbiAgICBzaGVsbHM6ICgpID0+IHNldFNoZWxsc1ZlcnNpb24oKHYpID0+IHYgKyAxKSxcbiAgICBnaXQ6ICgpID0+IHNldEdpdFZlcnNpb24oKHYpID0+IHYgKyAxKSxcbiAgfVxuICBpZiAoIXJlZnMuc3Vic2NyaWJlZCkge1xuICAgIHJlZnMuc3Vic2NyaWJlZCA9IHRydWVcbiAgICBjdGwub24oJ2NoYW5nZScsICgpID0+IHJlZnMudWkuc3luYygpKVxuICAgIGZvciAoY29uc3QgdHlwZSBvZiBbJ2ZsYXNoJywgJ2Rlcml2ZWQnLCAncXVlc3Rpb24nLCAndHVybicsICdpbnB1dCcsICdzZXNzaW9uJywgJ3Jlc3VtZWQnLCAncHJvamVjdCcsICdtY3AnLCAnc2hlbGxzJywgJ2dpdCddKSB7XG4gICAgICBjdGwub24odHlwZSwgKHBheWxvYWQpID0+IHJlZnMudWlbdHlwZV0ocGF5bG9hZCkpXG4gICAgfVxuICB9XG4gIHN5bmNGcm9tQ29udHJvbGxlcigpXG5cbiAgY29uc3Qgc2tpbGxDb21tYW5kcyA9IHNraWxscy5saXN0KCkubWFwKChzKSA9PiAoeyBuYW1lOiBzLm5hbWUsIGRlc2M6IGBza2lsbCAgJHtzLmRlc2NyaXB0aW9uIHx8IHMuc291cmNlfWAsIHNraWxsOiB0cnVlIH0pKVxuICBjb25zdCB1c2VyQ29tbWFuZHMgPSBib290LmNvbW1hbmRzLmxpc3QoKS5tYXAoKGMpID0+ICh7IG5hbWU6IGMubmFtZSwgZGVzYzogYGNvbW1hbmQgICR7Yy5kZXNjcmlwdGlvbiB8fCBjLnNvdXJjZX1gLCBjb21tYW5kOiB0cnVlIH0pKVxuICBjb25zdCBieU5hbWUgPSBuZXcgTWFwKClcbiAgY29uc3Qgc2hhZG93ZWQgPSBbXVxuICBmb3IgKGNvbnN0IGMgb2YgWy4uLkNPTU1BTkRTLCAuLi5za2lsbENvbW1hbmRzLCAuLi51c2VyQ29tbWFuZHNdKSB7XG4gICAgaWYgKGJ5TmFtZS5oYXMoYy5uYW1lKSkgc2hhZG93ZWQucHVzaChgJHtjLnNraWxsID8gJ3NraWxsJyA6ICdjb21tYW5kJ30gXCIke2MubmFtZX1cImApXG4gICAgZWxzZSBieU5hbWUuc2V0KGMubmFtZSwgYylcbiAgfVxuICBjb25zdCBhbGxDb21tYW5kcyA9IFsuLi5ieU5hbWUudmFsdWVzKCldXG4gIGlmIChzaGFkb3dlZC5sZW5ndGggJiYgIXJlZnMud2FybmVkU2hhZG93ZWQpIHtcbiAgICByZWZzLndhcm5lZFNoYWRvd2VkID0gdHJ1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4gZmxhc2goYHNoYWRvd2VkIGJ5IGFuIGVhcmxpZXIgbmFtZSwgcmVuYW1lIHRvIHVzZTogJHtzaGFkb3dlZC5qb2luKCcsICcpfWApLCAwKVxuICB9XG5cbiAgY29uc3QgdG9hc3QgPSB1c2VUb2FzdCh7XG4gICAgZHVyYXRpb246IDM1MDAsXG4gICAgcG9zaXRpb246ICd0b3AtcmlnaHQnLFxuICAgIHJlbmRlcjogKG1lc3NhZ2UpID0+IDx0ZXh0IHN0eWxlPXt7IGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycsIGJvbGQ6IHRydWUgfX0+e2AgJHttZXNzYWdlfSBgfTwvdGV4dD4sXG4gIH0pXG5cbiAgY29uc3QgdXBkYXRlVG9hc3QgPSB1c2VUb2FzdCh7XG4gICAgZHVyYXRpb246IDgwMDAsXG4gICAgcG9zaXRpb246ICd0b3AtY2VudGVyJyxcbiAgICByZW5kZXI6IChtZXNzYWdlKSA9PiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGJnOiBhY2NlbnQoKSB9fT5cbiAgICAgICAgPFNoaW1tZXIgY29sb3I9XCJibGFja1wiIGhpZ2hsaWdodD17SElHSExJR0hUfSBkdXJhdGlvbj17MTUwMH0+e2AgJHttZXNzYWdlfSBgfTwvU2hpbW1lcj5cbiAgICAgIDwvYm94PlxuICAgICksXG4gIH0pXG5cbiAgZnVuY3Rpb24gZmxhc2gobXNnKSB7XG4gICAgdG9hc3QobXNnKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaE1vZGVscygpIHtcbiAgICBpZiAocmVmcmVzaGluZ01vZGVscygpKSByZXR1cm5cbiAgICBzZXRSZWZyZXNoaW5nTW9kZWxzKHRydWUpXG4gICAgZmxhc2goJ3JlZnJlc2hpbmcgbW9kZWxzJylcbiAgICBjb25zdCBzdGFydGVkID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVmcmVzaGVkID0gYXdhaXQgYm9vdC5yZWZyZXNoTW9kZWxzKClcbiAgICAgIGJvb3QubW9kZWxzID0gcmVmcmVzaGVkXG4gICAgICBzZXRNb2RlbHMocmVmcmVzaGVkKVxuICAgICAgY29uc3QgZWxhcHNlZCA9IE1hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydGVkKVxuICAgICAgZmxhc2goYG1vZGVscyByZWZyZXNoZWQgICR7cmVmcmVzaGVkLmxlbmd0aH0gbW9kZWxzICAke2VsYXBzZWR9bXNgKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYG1vZGVsIHJlZnJlc2ggZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDEyMCl9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0UmVmcmVzaGluZ01vZGVscyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICByZWZzLnBhc3RlSW1hZ2UgPz89IGNyZWF0ZUNsaXBib2FyZElucHV0KHtcbiAgICByZWFkSW1hZ2U6IHJlYWRDbGlwYm9hcmRJbWFnZSxcbiAgICBnZXREcmFmdDogKCkgPT4gKHsgdmFsdWU6IGlucHV0KCksIGN1cnNvcjogaW5wdXRDdXJzb3IoKSwgc2Vzc2lvbjogc3RhdGUuc2Vzc2lvbiwgcmV2aXNpb246IHJlZnMuZHJhZnRSZXZpc2lvbiB9KSxcbiAgICBhdHRhY2hJbWFnZTogY3RsLmF0dGFjaEltYWdlLFxuICAgIHNldElucHV0LFxuICAgIG9uRXJyb3I6IChtZXNzYWdlKSA9PiByZWZzLnVpLmZsYXNoKG1lc3NhZ2UpLFxuICB9KVxuICByZWZzLmNhcHR1cmVJbWFnZSA/Pz0gY3JlYXRlU2NyZWVuQ2FwdHVyZUlucHV0KHtcbiAgICBjYXB0dXJlUmVnaW9uLFxuICAgIGdldERyYWZ0OiAoKSA9PiAoeyB2YWx1ZTogaW5wdXQoKSwgY3Vyc29yOiBpbnB1dEN1cnNvcigpLCBzZXNzaW9uOiBzdGF0ZS5zZXNzaW9uLCByZXZpc2lvbjogcmVmcy5kcmFmdFJldmlzaW9uIH0pLFxuICAgIGF0dGFjaEltYWdlOiBjdGwuYXR0YWNoSW1hZ2UsXG4gICAgc2V0SW5wdXQsXG4gICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2gobWVzc2FnZSksXG4gICAgb25TdGF0dXM6IHNldENhcHR1cmVTdGF0dXMsXG4gIH0pXG5cbiAgaWYgKCFyZWZzLmRpY3RhdGlvbikge1xuICAgIHJlZnMuZGljdGF0aW9uID0gY3JlYXRlRGljdGF0aW9uKHtcbiAgICAgIG9uU3RhdHVzOiAoc3RhdHVzKSA9PiB7XG4gICAgICAgIHNldERpY3RhdGlvblN0YXR1cyhzdGF0dXMpXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdyZWNvcmRpbmcnKSBzZXREaWN0YXRpb25MZXZlbHMoW10pXG4gICAgICB9LFxuICAgICAgb25MZXZlbDogKGxldmVsKSA9PiBzZXREaWN0YXRpb25MZXZlbHMoYXBwZW5kTGV2ZWwoZGljdGF0aW9uTGV2ZWxzKCksIGxldmVsKSksXG4gICAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChgZGljdGF0aW9uIGZhaWxlZDogJHttZXNzYWdlfWApLFxuICAgIH0pXG4gICAgcmVmcy5kaWN0YXRpb25JbnB1dCA9IGNyZWF0ZURpY3RhdGlvbklucHV0KHsgZGljdGF0aW9uOiByZWZzLmRpY3RhdGlvbiwgZ2V0SW5wdXQ6IGlucHV0LCBzZXRJbnB1dCB9KVxuICAgIGNvbnN0IHByZWxvYWQgPSBzZXRJbW1lZGlhdGUoKCkgPT4gcmVmcy5kaWN0YXRpb24ucHJlbG9hZCgpKVxuICAgIHByZWxvYWQudW5yZWYoKVxuICAgIHByb2Nlc3Mub25jZSgnZXhpdCcsICgpID0+IHtcbiAgICAgIGNsZWFySW1tZWRpYXRlKHByZWxvYWQpXG4gICAgICByZWZzLmRpY3RhdGlvbi5kaXNwb3NlKClcbiAgICB9KVxuICAgIGZvciAoY29uc3QgW3NpZ25hbCwgY29kZV0gb2YgW1snU0lHVEVSTScsIDE0M10sIFsnU0lHSFVQJywgMTI5XV0pIHtcbiAgICAgIHByb2Nlc3Mub25jZShzaWduYWwsICgpID0+IHtcbiAgICAgICAgcmVmcy5kaWN0YXRpb24uZGlzcG9zZSgpXG4gICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoIXJlZnMudXBkYXRlQ2hlY2tlZCkge1xuICAgIHJlZnMudXBkYXRlQ2hlY2tlZCA9IHRydWVcbiAgICBjaGVja0ZvclVwZGF0ZSh2ZXJzaW9uKS50aGVuKChmb3VuZCkgPT4ge1xuICAgICAgaWYgKCFmb3VuZCkgcmV0dXJuXG4gICAgICB1cGRhdGVUb2FzdChgcGljbyB2JHtmb3VuZC52ZXJzaW9ufSBhdmFpbGFibGUgIC91cGRhdGVgKVxuICAgICAgZm91bmQubWFya05vdGlmaWVkKClcbiAgICB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgfVxuXG4gIGNvbnN0IHBlcmZvcm1Db21wYWN0aW9uID0gY3RsLmNvbXBhY3RcblxuICBmdW5jdGlvbiBjb21wbGV0aW9uU291cmNlKG5hbWUpIHtcbiAgICBpZiAobmFtZSA9PT0gJ3NwZWVkJykgcmV0dXJuIFNQRUVEX0xFVkVMUy5tYXAoKGwpID0+IGwua2V5KVxuICAgIGlmIChuYW1lID09PSAnY29sb3InKSByZXR1cm4gT2JqZWN0LmtleXMoU0VTU0lPTl9DT0xPUlMpXG4gICAgaWYgKG5hbWUgPT09ICd0aGVtZScpIHJldHVybiBbLi4ucGFsZXR0ZUxpc3QoKS5tYXAoKHApID0+IHAua2V5KSwgJ2F1dG8nXVxuICAgIGlmIChuYW1lID09PSAnZWZmb3J0JykgcmV0dXJuIFsnZGVmYXVsdCcsICdsb3cnLCAnbWVkaXVtJywgJ2hpZ2gnLCAnbWF4J11cbiAgICBpZiAobmFtZSA9PT0gJ21vZGVsJykgcmV0dXJuIG1vZGVscygpLmZpbHRlcigobSkgPT4gbS5hdmFpbGFibGUgIT09IGZhbHNlKS5tYXAoKG0pID0+IG0ubmFtZSlcbiAgICBjb25zdCBjbWQgPSBhbGxDb21tYW5kcy5maW5kKChjKSA9PiBjLm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGNtZD8uc2tpbGwgfHwgY21kPy5jb21tYW5kKSByZXR1cm4gZmlsZUxpc3QoKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBkaXNtaXNzQ29tcGxldGlvbigpIHtcbiAgICBzZXRDb21wbGV0aW5nKGZhbHNlKVxuICAgIHNldENvbXBJbmRleCgwKVxuICB9XG5cbiAgZnVuY3Rpb24gYWNjZXB0Q29tcGxldGlvbih2YWx1ZSwgY3R4LCBjYW5kaWRhdGUpIHtcbiAgICBzZXRJbnB1dChhcHBseUNvbXBsZXRpb24odmFsdWUsIGN0eCwgY2FuZGlkYXRlKSlcbiAgICBkaXNtaXNzQ29tcGxldGlvbigpXG4gIH1cblxuICBmdW5jdGlvbiBzZW5kKHRleHQpIHtcbiAgICBpZiAodmlld2VkQWdlbnRJZCgpIHx8IHZpZXdlZFNoZWxsSWQoKSkgcmV0dXJuXG4gICAgY29uc3QgdmFsdWUgPSB0ZXh0LnRyaW0oKVxuICAgIGlmICghdmFsdWUpIHJldHVyblxuICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBjb25zdCBbbmFtZSwgLi4ucmVzdF0gPSB2YWx1ZS5zbGljZSgxKS5zcGxpdCgvXFxzKy8pXG4gICAgICBjb25zdCBtYXRjaCA9IGFsbENvbW1hbmRzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5jb21tYW5kKSByZXR1cm4gaW5zZXJ0Q29tbWFuZChtYXRjaCwgeyBzdGFydDogdGV4dC5pbmRleE9mKCcvJyksIGVuZDogdGV4dC5sZW5ndGggfSwgcmVzdC5qb2luKCcgJykpXG4gICAgICAgIHNldElucHV0KCcnKVxuICAgICAgICBydW5Db21tYW5kKG1hdGNoLCByZXN0LmpvaW4oJyAnKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIHNldEhpc3RJZHgoLTEpXG4gICAgY29tcG9zZXJGaWxlcy51cGRhdGUodGV4dCwgc3RhdGUuYXR0YWNobWVudHMpXG4gICAgY3RsLnNlbmQoY29tcG9zZXJGaWxlcy5jb250ZW50KCkudHJpbSgpKVxuICAgIHNldElucHV0KCcnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW50ZXJydXB0KCkge1xuICAgIGlmICghYnVzeSgpKSByZXR1cm5cbiAgICBpZiAoc3RhdGUucXVlc3Rpb24pIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgY3RsLmludGVycnVwdCgpXG4gIH1cblxuICBjb25zdCBmbXRUb2tlbnMgPSAobikgPT4gKG4gPj0gMTAwMCA/IGAkeyhuIC8gMTAwMCkudG9GaXhlZCgxKX1rYCA6IFN0cmluZyhuKSlcblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoTWVtb3JpZXMoKSB7XG4gICAgc2V0TWVtb3J5TGlzdChhd2FpdCBib290Lm1lbW9yeS5saXN0KCkuY2F0Y2goKCkgPT4gW10pKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gdG9nZ2xlTWVtb3J5RGlzYWJsZWQobSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBib290Lm1lbW9yeS5zZXREaXNhYmxlZChtLCAhbS5kaXNhYmxlZClcbiAgICAgIGF3YWl0IHJlZnJlc2hNZW1vcmllcygpXG4gICAgICBmbGFzaChgJHttLmRpc2FibGVkID8gJ2VuYWJsZWQnIDogJ3N1cHByZXNzZWQnfSAke20ubmFtZX0gKCR7bS5zY29wZX0pYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBtZW1vcnkgdXBkYXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCAxMDApfWApXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZm9yZ2V0TWVtb3J5KG0pIHtcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuZm9yZ2V0QXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5maWxlICE9PSBtLmZpbGUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5mb3JnZXRBcm0gPSB7IGZpbGU6IG0uZmlsZSwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gZm9yZ2V0IFwiJHttLm5hbWV9XCJgKVxuICAgIH1cbiAgICByZWZzLmZvcmdldEFybSA9IG51bGxcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYm9vdC5tZW1vcnkuZm9yZ2V0KG0pXG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgZmxhc2goYGZvcmdvdCAke20ubmFtZX0gKCR7bS5zY29wZX0pYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBmb3JnZXQgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW5Db250ZXh0UGFuZWwoKSB7XG4gICAgY29uc3QgdG9rID0gKG4pID0+IGB+JHtmbXRUb2tlbnMobil9IHRva2BcbiAgICBjb25zdCBicmVha2Rvd24gPSBhd2FpdCBjdGwuY29udGV4dEJyZWFrZG93bigpXG4gICAgY29uc3Qgcm93cyA9IGJyZWFrZG93bi5yb3dzLm1hcCgocm93KSA9PiAoeyBuYW1lOiByb3cubmFtZSwgZGVzYzogcm93LmRlc2MsIG5vdGU6IHRvayhyb3cudG9rZW5zKSB9KSlcbiAgICBpZiAoYnJlYWtkb3duLm1lYXN1cmVkKSB7XG4gICAgICByb3dzLnB1c2goe1xuICAgICAgICBuYW1lOiAnbGFzdCBtZWFzdXJlZCByZXF1ZXN0JyxcbiAgICAgICAgZGVzYzogJ3Byb3ZpZGVyLXJlcG9ydGVkIGlucHV0IHRva2VucywgdGhlIG51bWJlciBiZWhpbmQgY3R4ICUnLFxuICAgICAgICBub3RlOiBgJHticmVha2Rvd24ubWVhc3VyZWQudG9Mb2NhbGVTdHJpbmcoKX0gdG9rYCxcbiAgICAgIH0pXG4gICAgfVxuICAgIHNldEluZm9QYW5lbCh7XG4gICAgICB0aXRsZTogYENvbnRleHQgICR7YnJlYWtkb3duLm1vZGVsfWAsXG4gICAgICByb3dzLFxuICAgICAgb3ZlcnZpZXc6IGJyZWFrZG93bi5zZWdtZW50cy5sZW5ndGggPyB7IHNlZ21lbnRzOiBicmVha2Rvd24uc2VnbWVudHMsIG1lYXN1cmVkOiBicmVha2Rvd24ubWVhc3VyZWQsIGxpbWl0OiBicmVha2Rvd24ubGltaXQgPz8gbW9kZWwoKS5jb250ZXh0IH0gOiBudWxsLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCB0aGVtZUl0ZW1zID0gKCkgPT4gW1xuICAgIC4uLnBhbGV0dGVMaXN0KCksXG4gICAgeyBrZXk6ICdhdXRvJywgZGVzYzogYGZvbGxvdyB0aGUgdGVybWluYWwgKGRldGVjdGVkOiAke2Jvb3QuZGV0ZWN0ZWRUaGVtZSB8fCAnZGFyayd9KWAgfSxcbiAgXVxuXG4gIGZ1bmN0aW9uIHBhbGV0dGVGb3IocHJlZikge1xuICAgIHJldHVybiBwcmVmID09PSAnYXV0bycgPyBib290LmRldGVjdGVkVGhlbWUgfHwgJ2RhcmsnIDogcHJlZlxuICB9XG5cbiAgZnVuY3Rpb24gcHJldmlld1BhbGV0dGUocHJlZikge1xuICAgIHNldFBhbGV0dGUocGFsZXR0ZUZvcihwcmVmKSlcbiAgICBib290LnNldFRoZW1lPy4oeyBhY2NlbnQ6IGFjY2VudCgpLCBtdXRlZDogTVVURUQgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5VGhlbWVQcmVmKHByZWYpIHtcbiAgICBzZXRUaGVtZVByZWYocHJlZilcbiAgICBwcmV2aWV3UGFsZXR0ZShwcmVmKVxuICAgIHdyaXRlQ29uZmlnKHsgdGhlbWU6IHByZWYgPT09ICdhdXRvJyA/IHVuZGVmaW5lZCA6IHByZWYgfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgZmxhc2gocHJlZiA9PT0gJ2F1dG8nID8gYHRoZW1lOiBhdXRvICBmb2xsb3dpbmcgdGhlIHRlcm1pbmFsICgke3BhbGV0dGVGb3IoJ2F1dG8nKX0pYCA6IGB0aGVtZTogJHtwcmVmfWApXG4gIH1cblxuICBmdW5jdGlvbiBzdGVlclByZXZpZXcoKSB7XG4gICAgcmV0dXJuIGN0bC5wcmV2aWV3U3RlZXIoc3RlZXIoKT8uY2hhbmdlcylcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0ZWVyUm93cygpIHtcbiAgICByZXR1cm4gc3RlZXJhYmxlVHJhbnNjcmlwdChzdGVlclByZXZpZXcoKS50cmFuc2NyaXB0KVxuICB9XG5cbiAgZnVuY3Rpb24gYmVnaW5TdGVlcigpIHtcbiAgICBpZiAoYnVzeSgpIHx8IGNvbXBhY3RpbmcoKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gTWF0aC5tYXgoMCwgcm93cy5sZW5ndGggLSAxKVxuICAgIHNldFN0ZWVyKHsgc2VsZWN0ZWQsIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlLCByb2xlOiAndXNlcicsIGNoYW5nZXM6IFtdIH0pXG4gICAgaWYgKHJvd3Nbc2VsZWN0ZWRdKSBzdGVlckxpc3RGb2N1cy5mb2N1cyhyb3dzW3NlbGVjdGVkXS5tZXNzYWdlSWQpXG4gICAgc2V0SGlzdFdpbmRvdyhJbmZpbml0eSlcbiAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICBmbS5mb2N1cygnc3RlZXInKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2VTdGVlcihhcHBsaWVkID0gZmFsc2UpIHtcbiAgICBzZXRTdGVlcihudWxsKVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgaWYgKGFwcGxpZWQpIGZsYXNoKCdjb252ZXJzYXRpb24gc3RlZXJpbmcgYXBwbGllZCAgbm90aGluZyBzZW50JylcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5U3RlZXIoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgaWYgKCFkcmFmdD8uY2hhbmdlcy5sZW5ndGgpIHJldHVybiBjbG9zZVN0ZWVyKClcbiAgICBjdGwuYXBwbHlTdGVlcihkcmFmdC5jaGFuZ2VzKVxuICAgIGNsb3NlU3RlZXIodHJ1ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RlZXJFZGl0KCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvdyA9IHN0ZWVyUm93cygpW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGlmICghcm93KSByZXR1cm4gc3RhcnRTdGVlckFkZCgpXG4gICAgaWYgKHJvdy5sb2NrZWQpIHJldHVybiBmbGFzaCgnbG9ja2VkICB0aGlzIG1lc3NhZ2UgaXMgYmVmb3JlIHRoZSBsYXRlc3QgY29tcGFjdGlvbicpXG4gICAgc2V0U3RlZXJUZXh0KHJvdy50ZXh0KVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IHRydWUsIGFkZGluZzogZmFsc2UsIHJvbGU6IHJvdy5yb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFN0ZWVyQWRkKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHNlbGVjdGVkID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBjb25zdCBwcmV2aW91c1JvbGUgPSBzZWxlY3RlZD8ucm9sZVxuICAgIGNvbnN0IHJvbGUgPSBwcmV2aW91c1JvbGUgPT09ICd1c2VyJyA/ICdhc3Npc3RhbnQnIDogU1RFRVJfUk9MRVNbMF1cbiAgICBzZXRTdGVlclRleHQoJycpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogdHJ1ZSwgYWRkaW5nOiB0cnVlLCByb2xlIH0pXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyVGV4dCh0ZXh0KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0ZXh0LnRyaW0oKVxuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGlmICghdmFsdWUpIHJldHVybiBmbGFzaCgnbWVzc2FnZSBjYW5ub3QgYmUgZW1wdHknKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgY29uc3QgY2hhbmdlID0gZHJhZnQuYWRkaW5nXG4gICAgICA/IHsgb3A6ICdpbnNlcnQnLCBpZDogbWFrZUV2ZW50KCdtZXNzYWdlJykuaWQsIGFmdGVyOiB0YXJnZXQ/Lm1lc3NhZ2VJZCA/PyBudWxsLCBtZXNzYWdlOiB7IHJvbGU6IGRyYWZ0LnJvbGUsIGNvbnRlbnQ6IHZhbHVlIH0gfVxuICAgICAgOiB7IG9wOiAncmVwbGFjZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCwgbWVzc2FnZTogeyByb2xlOiBkcmFmdC5yb2xlLCBjb250ZW50OiB2YWx1ZSB9IH1cbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSwgY2hhbmdlczogWy4uLmRyYWZ0LmNoYW5nZXMsIGNoYW5nZV0gfSlcbiAgICBzZXRTdGVlclRleHQoJycpXG4gIH1cblxuICBmdW5jdGlvbiBzdGFnZVN0ZWVyRGVsZXRlKCkge1xuICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgIGNvbnN0IHJvd3MgPSBzdGVlclJvd3MoKVxuICAgIGNvbnN0IHRhcmdldCA9IHJvd3NbZHJhZnQuc2VsZWN0ZWRdXG4gICAgaWYgKCF0YXJnZXQpIHJldHVyblxuICAgIGlmICh0YXJnZXQubG9ja2VkKSByZXR1cm4gZmxhc2goJ2xvY2tlZCAgdGhpcyBtZXNzYWdlIGlzIGJlZm9yZSB0aGUgbGF0ZXN0IGNvbXBhY3Rpb24nKVxuICAgIGNvbnN0IGNoYW5nZXMgPSBbLi4uZHJhZnQuY2hhbmdlcywgeyBvcDogJ2RlbGV0ZScsIHRhcmdldDogdGFyZ2V0Lm1lc3NhZ2VJZCB9XVxuICAgIGNvbnN0IHJlbWFpbmluZyA9IHJvd3MuZmlsdGVyKChyb3cpID0+IHJvdy5tZXNzYWdlSWQgIT09IHRhcmdldC5tZXNzYWdlSWQpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihkcmFmdC5zZWxlY3RlZCwgTWF0aC5tYXgoMCwgcmVtYWluaW5nLmxlbmd0aCAtIDEpKVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkLCBjaGFuZ2VzIH0pXG4gICAgaWYgKHJlbWFpbmluZ1tzZWxlY3RlZF0pIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJlbWFpbmluZ1tzZWxlY3RlZF0ubWVzc2FnZUlkKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaW5zZXJ0Q29tbWFuZChjb21tYW5kLCByYW5nZSA9IGNvbW1hbmRBdChpbnB1dCgpLCBpbnB1dEN1cnNvcigpKSwgYXJncyA9ICcnKSB7XG4gICAgaWYgKCFyYW5nZSkgcmV0dXJuXG4gICAgY29uc3QgZHJhZnQgPSBpbnB1dCgpXG4gICAgY29uc3QgdG9rZW4gPSB7fVxuICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IHRva2VuXG4gICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBib290LmNvbW1hbmRzLmxpc3QoKS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGNvbW1hbmQubmFtZSlcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gcGFyc2VGcm9udG1hdHRlcihhd2FpdCByZWFkRmlsZShtZXRhZGF0YS5maWxlLCAndXRmLTgnKSlcbiAgICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IHRva2VuIHx8IGlucHV0KCkgIT09IGRyYWZ0KSByZXR1cm5cbiAgICAgIGNvbnN0IGZvcm0gPSB7IG5hbWU6IGNvbW1hbmQubmFtZSwgYm9keTogYm9keS50cmltKCksIGRyYWZ0LCByYW5nZSwgYXJncywgdG9rZW4gfVxuICAgICAgY29uc3QgZmllbGRzID0gY29tbWFuZEZpZWxkcyh7IGFyZ3VtZW50czogcGFyc2VDb21tYW5kQXJndW1lbnRzKGJvZHkpIH0sIGJvZHksIGFyZ3MpXG4gICAgICBpZiAoZmllbGRzLmxlbmd0aCkge1xuICAgICAgICBzZXRDb21tYW5kRm9ybSh7IC4uLmZvcm0sIGZpZWxkcyB9KVxuICAgICAgICBpZiAoZmllbGRzLnNvbWUoKGZpZWxkKSA9PiBmaWVsZC50eXBlID09PSAncGF0aCcpKSB7XG4gICAgICAgICAgbGlzdEZpbGVzKGN3ZCkudGhlbihzZXRGaWxlTGlzdCkuY2F0Y2goKGVycm9yKSA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGZpbmlzaENvbW1hbmQoZm9ybSwge30pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGBjb3VsZCBub3QgbG9hZCAvJHtjb21tYW5kLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2hDb21tYW5kKGZvcm0sIHZhbHVlcykge1xuICAgIGlmIChyZWZzLmNvbW1hbmRFeHBhbnNpb24gIT09IGZvcm0udG9rZW4gfHwgaW5wdXQoKSAhPT0gZm9ybS5kcmFmdCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJvZHkgPSBleHBhbmRDb21tYW5kKGZvcm0uYm9keSwgdmFsdWVzWyckYXJncyddID8/IGZvcm0uYXJncywgdmFsdWVzKVxuICAgICAgY29uc3QgbmV4dCA9IHJlcGxhY2VDb21tYW5kKGZvcm0uZHJhZnQsIGZvcm0ucmFuZ2UsIGJvZHkpXG4gICAgICBzZXRJbnB1dChuZXh0LnRleHQsIG5leHQuY3Vyc29yKVxuICAgICAgc2V0Q29tbWFuZEZvcm0obnVsbClcbiAgICAgIHJlZnMuY29tbWFuZEV4cGFuc2lvbiA9IG51bGxcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZsYXNoKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjLCBhcmdzID0gJycpIHtcbiAgICBpZiAodHlwZW9mIGFyZ3MgIT09ICdzdHJpbmcnKSBhcmdzID0gJydcbiAgICBpZiAoYy5jb21tYW5kKSByZXR1cm4gaW5zZXJ0Q29tbWFuZChjKVxuICAgIHNldElucHV0KCcnKVxuICAgIHNldENtZEN5Y2xlKG51bGwpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2ZvcmsnKSByZXR1cm4gY3RsLmZvcmsoYXJncy50cmltKCkpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3JlbmFtZScpIHJldHVybiBjdGwucmVuYW1lKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbG9yJykgcmV0dXJuIGN0bC5zZXRDb2xvcihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb25maWcnKSB7XG4gICAgICBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAndGhlbWUnKSB7XG4gICAgICBpZiAoIWFyZ3MpIHJldHVybiBzZXRTaG93VGhlbWVQYW5lbCh0cnVlKVxuICAgICAgY29uc3QgY2hvaWNlID0gYXJncy50b0xvd2VyQ2FzZSgpXG4gICAgICBjb25zdCB2YWxpZCA9IFsuLi5wYWxldHRlTGlzdCgpLm1hcCgocCkgPT4gcC5rZXkpLCAnYXV0byddXG4gICAgICBpZiAoIXZhbGlkLmluY2x1ZGVzKGNob2ljZSkpIHJldHVybiBmbGFzaChgdGhlbWU6ICR7cGFsZXR0ZU5hbWUoKX0gIC90aGVtZSA8JHt2YWxpZC5qb2luKCd8Jyl9PmApXG4gICAgICBhcHBseVRoZW1lUHJlZihjaG9pY2UpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMuc2tpbGwpIHJldHVybiBjdGwuc2VuZFNraWxsKGMubmFtZSlcbiAgICBpZiAoYy5uYW1lID09PSAnY29ubmVjdCcpIHJldHVybiBvcGVuQ29ubmVjdFBhbmVsKClcbiAgICBpZiAoYy5uYW1lID09PSAnaW5pdCcpIHJldHVybiBjdGwuc2VuZEluaXQoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAncGFyYWxsZWwnKSB7XG4gICAgICBjb25zdCB0YXNrID0gYXJncy50cmltKClcbiAgICAgIGlmIChhd2FpdCBjdGwuc2VuZFBhcmFsbGVsKHRhc2spKSByZXR1cm5cbiAgICAgIHNldFBlbmRpbmdSZXNlYXJjaCh7IHRhc2sgfSlcbiAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnZGVsaWJlcmF0ZScpIHtcbiAgICAgIGNvbnN0IGRlY2lzaW9uID0gYXJncy50cmltKClcbiAgICAgIGlmIChhd2FpdCBjdGwuc2VuZERlbGliZXJhdGUoZGVjaXNpb24pKSByZXR1cm5cbiAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24oeyBkZWNpc2lvbiB9KVxuICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwodHJ1ZSlcbiAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnbW9kZWwnKSB7XG4gICAgICBpZiAoIWFyZ3MpIHJldHVybiBzZXRTaG93TW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuIGN0bC5zd2l0Y2hNb2RlbEJ5TmFtZShhcmdzKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmVmcmVzaC1tb2RlbHMnKSByZXR1cm4gcmVmcmVzaE1vZGVscygpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3NwZWVkJykge1xuICAgICAgaWYgKCFzcGVlZEFwcGxpZXMoKSkgcmV0dXJuIGZsYXNoKGAke21vZGVsKCkubmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBzcGVlZCBjb250cm9sYClcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dTcGVlZFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnNwZWVkQ29tbWFuZChhcmdzLnRvTG93ZXJDYXNlKCkpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdlZmZvcnQnKSB7XG4gICAgICBpZiAoIWVmZm9ydEFwcGxpZXMoKSkgcmV0dXJuIGZsYXNoKGAke21vZGVsKCkubmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBlZmZvcnQgY29udHJvbGApXG4gICAgICBpZiAoIWFyZ3MpIHJldHVybiBzZXRTaG93RWZmb3J0UGFuZWwodHJ1ZSlcbiAgICAgIHJldHVybiBjdGwuc2V0RWZmb3J0QnlOYW1lKGFyZ3MudG9Mb3dlckNhc2UoKSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIGlmIChpc0Rldkluc3RhbGwoaW1wb3J0Lm1ldGEudXJsKSkgcmV0dXJuIGZsYXNoKCd0aGlzIHBpY28gcnVucyBmcm9tIGEgc291cmNlIGNoZWNrb3V0ICB1cGRhdGUgaXQgd2l0aCBnaXQnKVxuICAgICAgY29uc3QgbGF0ZXN0ID0gYXdhaXQgZmV0Y2hMYXRlc3RWZXJzaW9uKCkuY2F0Y2goKCkgPT4gbnVsbClcbiAgICAgIGlmIChsYXRlc3QgJiYgIW5ld2VyVmVyc2lvbih2ZXJzaW9uLCBsYXRlc3QpKSByZXR1cm4gZmxhc2goYHBpY28gdiR7dmVyc2lvbn0gaXMgYWxyZWFkeSB0aGUgbGF0ZXN0YClcbiAgICAgIGZsYXNoKGB1cGRhdGluZyR7bGF0ZXN0ID8gYCB0byB2JHtsYXRlc3R9YCA6ICcnfS4uLmApXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5VcGRhdGUoKVxuICAgICAgaWYgKHJlc3VsdC5vaykgcmV0dXJuIGZsYXNoKGB1cGRhdGVkJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9ICByZXN0YXJ0IHBpY28gdG8gdXNlIGl0YClcbiAgICAgIHJldHVybiBmbGFzaChgdXBkYXRlIGZhaWxlZDogJHtyZXN1bHQub3V0cHV0LnNsaWNlKDAsIDEwMCl9YClcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3N0ZWVyJykgcmV0dXJuIGJlZ2luU3RlZXIoKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb250ZXh0JykgcmV0dXJuIG9wZW5Db250ZXh0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdoaXN0b3J5JykgcmV0dXJuIG9wZW5IaXN0b3J5U2VhcmNoKClcbiAgICBpZiAoYy5uYW1lID09PSAnaGVscCcpIHJldHVybiBzZXRWaWV3KCdoZWxwJylcbiAgICBpZiAoYy5uYW1lID09PSAnbWNwJykgcmV0dXJuIHNldFNob3dNY3BQYW5lbCh0cnVlKVxuICAgIGlmIChjLm5hbWUgPT09ICd3YWtldXBzJykgcmV0dXJuIHNldFNob3dXYWtldXBzUGFuZWwodHJ1ZSlcbiAgICBpZiAoYy5uYW1lID09PSAnbWVtb3J5Jykge1xuICAgICAgYXdhaXQgcmVmcmVzaE1lbW9yaWVzKClcbiAgICAgIHJldHVybiBzZXRTaG93TWVtb3J5UGFuZWwodHJ1ZSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ3Jlc3VtZScpIHtcbiAgICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgICAgb3BlblJlc3VtZVBhbmVsKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncHJvamVjdCcpIHJldHVybiBvcGVuUHJvamVjdFBhbmVsKClcbiAgICBpZiAoYy5uYW1lID09PSAnY3dkJykge1xuICAgICAgY29uc3Qgcm9vdE5vdGUgPSBib290LnJvb3QgIT09IGJvb3QuY3dkID8gYCAgcHJvamVjdCByb290ICR7c2hvcnRlblBhdGgoYm9vdC5yb290KX1gIDogJydcbiAgICAgIHJldHVybiBmbGFzaChgJHtib290LmRpc3BsYXlDd2R9JHtyb290Tm90ZX1gKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnc2tpbGxzJykge1xuICAgICAgcmV0dXJuIHNldEluZm9QYW5lbCh7XG4gICAgICAgIHRpdGxlOiAnU2tpbGxzJyxcbiAgICAgICAgcm93czogc2tpbGxzLmxpc3QoKS5tYXAoKHMpID0+ICh7IG5hbWU6IHMubmFtZSwgZGVzYzogcy5kZXNjcmlwdGlvbiwgbm90ZTogcy5zb3VyY2UgfSkpLFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbW1hbmRzJykge1xuICAgICAgcmV0dXJuIHNldEluZm9QYW5lbCh7XG4gICAgICAgIHRpdGxlOiAnQ29tbWFuZHMnLFxuICAgICAgICByb3dzOiBbXG4gICAgICAgICAgLi4uQ09NTUFORFMubWFwKChjbWQpID0+ICh7IG5hbWU6IGAvJHtjbWQubmFtZX1gLCBkZXNjOiBjbWQuZGVzYywgbm90ZTogJ2J1aWx0aW4nIH0pKSxcbiAgICAgICAgICAuLi5ib290LmNvbW1hbmRzLmxpc3QoKS5tYXAoKGNtZCkgPT4gKHsgbmFtZTogYC8ke2NtZC5uYW1lfWAsIGRlc2M6IGNtZC5kZXNjcmlwdGlvbiwgbm90ZTogY21kLnNvdXJjZSB9KSksXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAndG9vbHMnKSB7XG4gICAgICBjb25zdCB7IHJvd3MsIG1jcENvdW50IH0gPSBhd2FpdCBjdGwuZGVzY3JpYmVUb29scygpXG4gICAgICBzZXRJbmZvUGFuZWwoeyB0aXRsZTogYFRvb2xzJHttY3BDb3VudCA/IGAgIHBsdXMgJHttY3BDb3VudH0gTUNQIChzZWUgL21jcClgIDogJyd9YCwgcm93cyB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICduZXcnKSByZXR1cm4gY3RsLm5ld1Nlc3Npb24oYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnZGVsZXRlJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgaWYgKCFzdGF0ZS5zZXNzaW9uKSByZXR1cm4gZmxhc2goJ25vIGN1cnJlbnQgc2Vzc2lvbiB0byBkZWxldGUnKVxuICAgICAgc2V0U2hvd0RlbGV0ZUNvbmZpcm0odHJ1ZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmV3aW5kJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSByZXR1cm4gZmxhc2goJ25vdGhpbmcgdG8gcmV3aW5kIHlldCcpXG4gICAgICBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY2xlYXInKSByZXR1cm4gY3RsLmNsZWFyKClcbiAgICBpZiAoYy5uYW1lID09PSAnY29tcGFjdCcpIHJldHVybiBwZXJmb3JtQ29tcGFjdGlvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb3N0Jykge1xuICAgICAgY29uc3QgY29zdCA9IGN0bC5jb3N0U3VtbWFyeSgpXG4gICAgICBpZiAoIWNvc3QpIHJldHVybiBmbGFzaCgnbm8gdXNhZ2UgeWV0JylcbiAgICAgIGNvbnN0IGJhc2UgPSBgJCR7Y29zdC5zcGVudC50b0ZpeGVkKDQpfSBzcGVudCAgJHtjb3N0LnByb21wdFRva2Vucy50b0xvY2FsZVN0cmluZygpfSBpbiAgJHtjb3N0LmNvbXBsZXRpb25Ub2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gb3V0YFxuICAgICAgZmxhc2goY29zdC5zcGVudCAtIGNvc3QuYWN0aXZlID4gMC4wMDAwNSA/IGAke2Jhc2V9ICBjdXJyZW50IGNvbnZlcnNhdGlvbiAkJHtjb3N0LmFjdGl2ZS50b0ZpeGVkKDQpfWAgOiBiYXNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdleHBvcnQnKSB7XG4gICAgICBjb25zdCBmaWxlID0gYXdhaXQgY3RsLmV4cG9ydE1hcmtkb3duKClcbiAgICAgIGZsYXNoKGBleHBvcnRlZCB0byAke2ZpbGV9YClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hBdXRoUHJvdmlkZXJzKCkge1xuICAgIGNvbnN0IG9wZW5haSA9IGF3YWl0IG9wZW5haVN0YXR1cygpLmNhdGNoKCgpID0+ICh7IGNvbm5lY3RlZDogZmFsc2UsIGVtYWlsOiBudWxsIH0pKVxuICAgIHNldEF1dGhQcm92aWRlcnMoW1xuICAgICAgeyBpZDogJ29wZW5haScsIGxhYmVsOiAnT3BlbkFJICBDaGF0R1BUIC8gQ29kZXggcGxhbicsIGNvbm5lY3RlZDogb3BlbmFpLmNvbm5lY3RlZCwgZW1haWw6IG9wZW5haS5lbWFpbCB9LFxuICAgIF0pXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuQ29ubmVjdFBhbmVsKCkge1xuICAgIHNldFNob3dDb25uZWN0UGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoQXV0aFByb3ZpZGVycygpXG4gIH1cblxuICBmdW5jdGlvbiBjb25uZWN0UHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIuaWQgIT09ICdvcGVuYWknKSByZXR1cm5cbiAgICBzZXRTaG93Q29ubmVjdFBhbmVsKGZhbHNlKVxuICAgIGZsYXNoKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjdGwuY29ubmVjdFByb3ZpZGVyKClcbiAgICAgIC50aGVuKCh7IGVtYWlsLCBjb3VudCB9KSA9PiBmbGFzaChgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J30gICR7Y291bnR9IGNvZGV4IG1vZGVscyB1bmxvY2tlZCBpbiAvbW9kZWxgKSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiBmbGFzaChgY29ubmVjdCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc2Nvbm5lY3RQcm92aWRlcihwcm92aWRlcikge1xuICAgIGlmIChwcm92aWRlci5pZCAhPT0gJ29wZW5haScpIHJldHVyblxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kaXNjb25uZWN0QXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gcHJvdmlkZXIuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5kaXNjb25uZWN0QXJtID0geyBpZDogcHJvdmlkZXIuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRpc2Nvbm5lY3QgJHtwcm92aWRlci5sYWJlbH0gKHlvdSB3aWxsIG5lZWQgdG8gc2lnbiBpbiBhZ2FpbilgKVxuICAgIH1cbiAgICByZWZzLmRpc2Nvbm5lY3RBcm0gPSBudWxsXG4gICAgYXdhaXQgY3RsLmRpc2Nvbm5lY3RQcm92aWRlcigpXG4gICAgcmVmcmVzaEF1dGhQcm92aWRlcnMoKVxuICAgIGZsYXNoKCdkaXNjb25uZWN0ZWQgZnJvbSBDaGF0R1BUJylcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5SZXN1bWVQYW5lbCgpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gKytyZWZzLnJlc3VtZU9wZW5cbiAgICBjb25zdCBzY29wZXMgPSBbJ3JlcG9zaXRvcnknLCAnZXZlcnl3aGVyZSddXG4gICAgc2V0UmVzdW1lU2NvcGVzKHNjb3BlcylcbiAgICBzZXRSZXN1bWVTY29wZSgwKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hTZXNzaW9ucygwLCBzY29wZXMpXG4gICAgbGlzdFdvcmt0cmVlcyhvd25lclJvb3QoYm9vdC5yb290KSkudGhlbigodHJlZXMpID0+IHtcbiAgICAgIGlmICh0cmVlcy5sZW5ndGggPCAyIHx8ICFzaG93UmVzdW1lUGFuZWwoKSB8fCByZXF1ZXN0ICE9PSByZWZzLnJlc3VtZU9wZW4pIHJldHVyblxuICAgICAgc2V0UmVzdW1lU2NvcGVzKFsncmVwb3NpdG9yeScsICdjaGVja291dCcsICdldmVyeXdoZXJlJ10pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZnJlc2hTZXNzaW9ucyhzY29wZUluZGV4LCBzY29wZXMgPSByZXN1bWVTY29wZXMoKSkge1xuICAgIHNldFJlc3VtZUxvYWRpbmcodHJ1ZSlcbiAgICBjdGwubGlzdFJlc3VtZVNlc3Npb25zKHNjb3Blc1tzY29wZUluZGV4XSlcbiAgICAgIC50aGVuKHNldFJlc3VtZVNlc3Npb25zKVxuICAgICAgLmZpbmFsbHkoKCkgPT4gc2V0UmVzdW1lTG9hZGluZyhmYWxzZSkpXG4gIH1cblxuICBmdW5jdGlvbiBzaG9ydGVuUGF0aChwYXRoKSB7XG4gICAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoaG9tZSkgPyBwYXRoLnJlcGxhY2UoaG9tZSwgJ34nKSA6IHBhdGhcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Qcm9qZWN0UGFuZWwoKSB7XG4gICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgc2V0U2hvd1Byb2plY3RQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hQcm9qZWN0cygpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoUHJvamVjdHMoKSB7XG4gICAgc2V0UHJvamVjdHNMb2FkaW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBjdGwubGlzdFByb2plY3RzKClcbiAgICAgIHNldFByb2plY3RzKGxpc3QubWFwKChwcm9qZWN0KSA9PiAoe1xuICAgICAgICAuLi5wcm9qZWN0LFxuICAgICAgICBwYXRoOiBzaG9ydGVuUGF0aChwcm9qZWN0LnJvb3QpLFxuICAgICAgICBjaGVja291dHM6IHByb2plY3QuY2hlY2tvdXRzLm1hcCgoY2hlY2tvdXQpID0+ICh7IC4uLmNoZWNrb3V0LCBwYXRoOiBzaG9ydGVuUGF0aChjaGVja291dC5yb290KSB9KSksXG4gICAgICB9KSkpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFByb2plY3RzTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRQcm9qZWN0V29ya3RyZWUoY2hlY2tvdXQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJlZSA9IGF3YWl0IGN0bC5hZGRXb3JrdHJlZShjaGVja291dC5vd25lcilcbiAgICAgIGF3YWl0IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKHsgcm9vdDogdHJlZS5wYXRoIH0pXG4gICAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYHdvcmt0cmVlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVQcm9qZWN0Q2hlY2tvdXQoY2hlY2tvdXQpIHtcbiAgICBpZiAoY2hlY2tvdXQud29ya3RyZWUpIHtcbiAgICAgIGlmIChjaGVja291dC5jdXJyZW50KSByZXR1cm4gZmxhc2goJ2Nhbm5vdCByZW1vdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5wcm9qZWN0RGVsZXRlQXJtXG4gICAgICBpZiAoIWFybWVkIHx8IGFybWVkLnJvb3QgIT09IGNoZWNrb3V0LnJvb3QgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gcmVtb3ZlIFwiJHtjaGVja291dC5icmFuY2ggfHwgY2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgICB9XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjdGwuZGVsZXRlV29ya3RyZWUoY2hlY2tvdXQpXG4gICAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICAgIGZsYXNoKGByZW1vdmVkICR7Y2hlY2tvdXQuYnJhbmNoIHx8IGNoZWNrb3V0LnBhdGh9YClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBmbGFzaChgcmVtb3ZlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2hlY2tvdXQuY3VycmVudCkgcmV0dXJuIGZsYXNoKCdjYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50IHByb2plY3QgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMucHJvamVjdERlbGV0ZUFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQucm9vdCAhPT0gY2hlY2tvdXQucm9vdCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRlbGV0ZSBcIiR7Y2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgfVxuICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IG51bGxcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlUHJvamVjdERhdGEoY2hlY2tvdXQucm9vdClcbiAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICBmbGFzaChgZGVsZXRlZCAke2NoZWNrb3V0LnBhdGh9ICAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ30gcmVtb3ZlZGApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZGVsZXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVTZXNzaW9uTWV0YShtZXRhKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHN0YXRlLnNlc3Npb24/LmlkID09PSBtZXRhLmhlYWRlci5pZFxuICAgIGlmIChjdXJyZW50ICYmIGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kZWxldGVBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG1ldGEuZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmRlbGV0ZUFybSA9IHsgZmlsZTogbWV0YS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkZWxldGUgXCIke21ldGEudGl0bGUuc2xpY2UoMCwgNTApfVwiYClcbiAgICB9XG4gICAgcmVmcy5kZWxldGVBcm0gPSBudWxsXG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIGlmIChhd2FpdCBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSkgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNlc3Npb24obWV0YS5maWxlKVxuICAgICAgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICBmbGFzaCgnc2Vzc2lvbiBkZWxldGVkJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBkZWxldGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlc3VtZVNlc3Npb24obWV0YSkge1xuICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSlcbiAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIGF3YWl0IGN0bC5yZXN1bWUobWV0YSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5IaXN0b3J5U2VhcmNoKCkge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZW50KClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKHNlc3Npb24pKVxuICAgIHNldFNob3dIaXN0b3J5UGFuZWwodHJ1ZSlcbiAgICBzZXRIaXN0U2NvcGUoMClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZHVwZVByb21wdHMocG9vbCkge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KClcbiAgICBjb25zdCBvdXQgPSBbXVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnBvb2xdLnNvcnQoKGEsIGIpID0+IGIuYXQgLSBhLmF0KSkge1xuICAgICAgaWYgKHNlZW4uaGFzKGVudHJ5LnRleHQpKSBjb250aW51ZVxuICAgICAgc2Vlbi5hZGQoZW50cnkudGV4dClcbiAgICAgIG91dC5wdXNoKGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzd2l0Y2hIaXN0U2NvcGUobmV4dCkge1xuICAgIHNldEhpc3RTY29wZShuZXh0KVxuICAgIGlmIChuZXh0ID09PSAwKSByZXR1cm4gc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhzZW50KCkpKVxuICAgIGNvbnN0IHByb2plY3QgPSBhd2FpdCBsb2FkUHJvamVjdFByb21wdHMocm9vdClcbiAgICBpZiAobmV4dCA9PT0gMSkgcmV0dXJuIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoWy4uLnNlbnQoKSwgLi4ucHJvamVjdF0pKVxuICAgIGNvbnN0IGdsb2JhbCA9IGF3YWl0IGxvYWRHbG9iYWxQcm9tcHRzKClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKFsuLi5zZW50KCksIC4uLnByb2plY3QsIC4uLmdsb2JhbF0pKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVJld2luZFRvKHRhcmdldCwgb3B0KSB7XG4gICAgYXdhaXQgY3RsLnJld2luZCh0YXJnZXQsIG9wdC5rZXkpXG4gICAgc2V0UmV3aW5kU3RlcChudWxsKVxuICAgIHNldFJld2luZFRhcmdldChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gcGVyZm9ybVJld2luZChvcHQpIHtcbiAgICByZXR1cm4gcGVyZm9ybVJld2luZFRvKHJld2luZFRhcmdldCgpLCBvcHQpXG4gIH1cblxuICBjb25zdCB1bmRvUmV3aW5kID0gY3RsLnVuZG9SZXdpbmRcblxuICBhc3luYyBmdW5jdGlvbiBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSB7XG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IGN0bC5kZWxldGVDdXJyZW50U2Vzc2lvbigpXG4gICAgc2V0U2hvd0RlbGV0ZUNvbmZpcm0oZmFsc2UpXG4gICAgcmV0dXJuIGRlbGV0ZWRcbiAgfVxuXG4gIGNvbnN0IGFueVBhbmVsID0gKCkgPT5cbiAgICBzaG93TW9kZWxQYW5lbCgpIHx8IHNob3dSZXNlYXJjaE1vZGVsUGFuZWwoKSB8fCBzaG93U3BlZWRQYW5lbCgpIHx8IHNob3dFZmZvcnRQYW5lbCgpIHx8IHNob3dUaGVtZVBhbmVsKCkgfHwgc2hvd0NvbmZpZ1BhbmVsKCkgfHwgc2hvd0RlbGV0ZUNvbmZpcm0oKSB8fCBzaG93TWVtb3J5UGFuZWwoKSB8fCBzaG93SGlzdG9yeVBhbmVsKCkgfHwgc2hvd1Jlc3VtZVBhbmVsKCkgfHwgc2hvd01jcFBhbmVsKCkgfHxcbiAgICBzaG93UHJvamVjdFBhbmVsKCkgfHwgc2hvd1dha2V1cHNQYW5lbCgpIHx8IHNob3dDb25uZWN0UGFuZWwoKSB8fFxuICAgIGNvbW1hbmRGb3JtKCkgIT09IG51bGwgfHwgaW5mb1BhbmVsKCkgIT09IG51bGwgfHwgcmV3aW5kU3RlcCgpICE9PSBudWxsXG5cbiAgLy8gZXZlcnkgZm9jdXMtdGFraW5nIHBhbmVsIGRpbXMgdGhlIGNvbnZlcnNhdGlvbiBiZWhpbmQgaXQ7IHRoZSB0aGVtZVxuICAvLyBwaWNrZXIgaXMgdGhlIG9uZSBleGVtcHRpb24sIHNpbmNlIGl0cyBqb2IgaXMgcHJldmlld2luZyBwYWxldHRlcyBvblxuICAvLyB0aGUgdW5kaW1tZWQgdWlcbiAgY29uc3QgZGltbWluZ1BhbmVsID0gKCkgPT4gYW55UGFuZWwoKSAmJiAhc2hvd1RoZW1lUGFuZWwoKVxuXG4gIGZ1bmN0aW9uIGNhbmNlbEFnZW50KGFnZW50KSB7XG4gICAgY3RsLmNhbmNlbEFnZW50KGFnZW50LmlkKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0FnZW50KGFnZW50KSB7XG4gICAgaWYgKCFhd2FpdCBjdGwuZGlzbWlzc0FnZW50KGFnZW50LmlkKSkgcmV0dXJuXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gYWdlbnQuaWQpIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSkge1xuICAgIGlmIChpdGVtLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICBpbnRlcnJ1cHQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0bC5kaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0uZGVsaWJlcmF0aW9uSWQpXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gaXRlbS5pZCkgc2V0Vmlld2VkQWdlbnRJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzbWlzc1NoZWxsKHNoZWxsKSB7XG4gICAgYm9vdC5zaGVsbHMuZGlzbWlzcyhzaGVsbC5pZClcbiAgICBpZiAodmlld2VkU2hlbGxJZCgpID09PSBzaGVsbC5pZCkgc2V0Vmlld2VkU2hlbGxJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24ga2lsbFNoZWxsKHNoZWxsKSB7XG4gICAgaWYgKHNoZWxsLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKSByZXR1cm4gZmxhc2goYHNoZWxsICR7c2hlbGwuaWR9IGFscmVhZHkgZXhpdGVkYClcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuc2hlbGxLaWxsQXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gc2hlbGwuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5zaGVsbEtpbGxBcm0gPSB7IGlkOiBzaGVsbC5pZCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8ga2lsbCBcIiR7c2hlbGwuZGVzY3JpcHRpb24gfHwgYHNoZWxsICR7c2hlbGwuaWR9YH1cImApXG4gICAgfVxuICAgIHJlZnMuc2hlbGxLaWxsQXJtID0gbnVsbFxuICAgIGJvb3Quc2hlbGxzLmtpbGwoc2hlbGwuaWQsICd1c2VyJylcbiAgfVxuXG4gIGNvbnN0IHNwZWVkQXBwbGllcyA9IGN0bC5zcGVlZEFwcGxpZXNcbiAgY29uc3QgZWZmb3J0QXBwbGllcyA9IGN0bC5lZmZvcnRBcHBsaWVzXG4gIGNvbnN0IHNldFNlc3Npb25FZmZvcnQgPSBjdGwuc2V0RWZmb3J0XG5cbiAgY29uc3QgZm0gPSB1c2VGb2N1cyh7IGluaXRpYWw6ICdpbnB1dCcgfSlcbiAgY29uc3Qgc3RlZXJMaXN0Rm9jdXMgPSB1c2VGb2N1cyh7IGluaXRpYWw6IG51bGwsIGN5Y2xlOiAnbm9uZScsIGFjdGl2ZTogZmFsc2UgfSlcbiAgZm0uaXRlbSgnZmVlZCcpXG4gIGlmIChzdGVlcigpKSB7XG4gICAgZm0uaXRlbSgnc3RlZXInKVxuICAgIGlmICghZm0uaXMoJ3N0ZWVyJykpIGZtLmZvY3VzKCdzdGVlcicpXG4gIH1cbiAgY29uc3QgY29udmVyc2F0aW9uU2VhcmNoID0gY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoKHsgZm0sIHZlcmJvc2UsIHNldEZvbGxvdywgc2V0T2Zmc2V0IH0pXG4gIGNvbnZlcnNhdGlvblNlYXJjaC5yZWdpc3RlckZvY3VzKClcbiAgbGV0IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBbXVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgYWdlbnRSb3dzID0gYWN0aXZpdHlSb3dzKGN0bC5hY3Rpdml0eSgpKVxuICBzaGVsbHNWZXJzaW9uKClcbiAgY29uc3Qgc2hlbGxSb3dzID0gYWN0aXZpdHlSb3dzKGN0bC5zaGVsbFJvd3MoKSlcbiAgY29uc3Qgc2hvd0NvbXBvc2VyQWN0aW9ucyA9ICFzdGVlcigpICYmICF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSAmJiAhYW55UGFuZWwoKSAmJiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJ1xuICBjb25zdCBhY3Rpdml0eU1hcmdpbiA9IChzaGVsbFJvd3MubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMCkgfHwgIXNob3dDb21wb3NlckFjdGlvbnMgPyAxIDogMFxuICBjb25zdCBbc2hlbGxTdHJpcFNpemUsIGFnZW50U3RyaXBTaXplXSA9IGFjdGl2aXR5U3RyaXBTaXplcyh0ZXJtaW5hbEhlaWdodCgpLCBbc2hlbGxSb3dzLmxlbmd0aCwgYWdlbnRSb3dzLmxlbmd0aF0sIGFjdGl2aXR5TWFyZ2luKVxuICBpZiAocXVlc3Rpb25SZXF1ZXN0KCkpIHtcbiAgICBmbS5pdGVtKCdxdWVzdGlvbicpXG4gICAgaWYgKCFmbS5pcygncXVlc3Rpb24nKSkgZm0uZm9jdXMoJ3F1ZXN0aW9uJylcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXZpZXdlZEFnZW50SWQoKSAmJiAhdmlld2VkU2hlbGxJZCgpKSBmbS5pdGVtKCdpbnB1dCcpXG4gICAgaWYgKHNoZWxsUm93cy5sZW5ndGggPiAwICYmIGFnZW50Um93cy5sZW5ndGggPiAwKSB7XG4gICAgICBmbS5ncm91cCgnYWN0aXZpdHktc3RyaXAnLCB7IGl0ZW1zOiBbJ2FjdGl2aXR5LW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzKSA9PiBgc2hlbGwtJHtzLmlkfWApLCAuLi5hZ2VudFJvd3MubWFwKChhKSA9PiBgYWdlbnQtJHthLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2hlbGxSb3dzLmxlbmd0aCA+IDApIGZtLmdyb3VwKCdzaGVsbC1zdHJpcCcsIHsgaXRlbXM6IFsnc2hlbGwtbWFpbicsIC4uLnNoZWxsUm93cy5tYXAoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCldLCBuYXZpZ2F0ZTogJ2JvdGgnLCB3cmFwOiB0cnVlIH0pXG4gICAgICBpZiAoYWdlbnRSb3dzLmxlbmd0aCA+IDApIGZtLmdyb3VwKCdhZ2VudC1zdHJpcCcsIHsgaXRlbXM6IFsnYWdlbnQtbWFpbicsIC4uLmFnZW50Um93cy5tYXAoKGEpID0+IGBhZ2VudC0ke2EuaWR9YCldLCBuYXZpZ2F0ZTogJ2JvdGgnLCB3cmFwOiB0cnVlIH0pXG4gICAgfVxuICAgIGlmIChyZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uICYmICF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSkge1xuICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IGZhbHNlXG4gICAgICBmbS5mb2N1cygnaW5wdXQnKVxuICAgIH1cbiAgfVxuICBpZiAod29ya3NwYWNlT3BlbigpKSB7IGZtLml0ZW0oJ3dvcmtzcGFjZScpOyBmbS5mb2N1cygnd29ya3NwYWNlJykgfVxuICBlbHNlIGlmIChyZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSkge1xuICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyV29ya3NwYWNlID0gZmFsc2VcbiAgICBmbS5mb2N1cyhxdWVzdGlvblJlcXVlc3QoKSA/ICdxdWVzdGlvbicgOiAnaW5wdXQnKVxuICB9XG4gIHVzZUZvY3VzVHJhcCh3b3Jrc3BhY2VPcGVuKCkgfHwgYW55UGFuZWwoKSB8fCB2aWV3KCkgPT09ICdoZWxwJylcbiAgdXNlU2VsZWN0aW9uKHtcbiAgICBvbkNvcHk6ICh0ZXh0KSA9PiBmbGFzaChgY29waWVkICR7dGV4dC5sZW5ndGh9ICR7dGV4dC5sZW5ndGggPT09IDEgPyAnY2hhcmFjdGVyJyA6ICdjaGFyYWN0ZXJzJ31gKSxcbiAgfSlcblxuICBmdW5jdGlvbiBuYXZpZ2F0ZUFjdGl2aXR5U3RyaXAoZXZlbnQpIHtcbiAgICBjb25zdCBpdGVtcyA9IFsnYWN0aXZpdHktbWFpbicsIC4uLnNoZWxsUm93cy5tYXAoKHNoZWxsKSA9PiBgc2hlbGwtJHtzaGVsbC5pZH1gKSwgLi4uYWdlbnRSb3dzLm1hcCgoYWdlbnQpID0+IGBhZ2VudC0ke2FnZW50LmlkfWApXVxuICAgIGNvbnN0IGN1cnJlbnQgPSBpdGVtcy5pbmRleE9mKGZtLmN1cnJlbnQoKSlcbiAgICBjb25zdCBwYWdlU2l6ZSA9IGZtLmN1cnJlbnQoKS5zdGFydHNXaXRoKCdzaGVsbC0nKSA/IHNoZWxsU3RyaXBTaXplIDogYWdlbnRTdHJpcFNpemVcbiAgICBsZXQgbmV4dCA9IGN1cnJlbnRcbiAgICBpZiAoIWV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZycpIG5leHQgPSAwXG4gICAgZWxzZSBpZiAoIWV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnRycpIG5leHQgPSBpdGVtcy5sZW5ndGggLSAxXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdkJykgbmV4dCA9IE1hdGgubWluKGl0ZW1zLmxlbmd0aCAtIDEsIGN1cnJlbnQgKyBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHBhZ2VTaXplIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBNYXRoLm1heCgwLCBjdXJyZW50IC0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihwYWdlU2l6ZSAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdqJyB8fCBldmVudC5rZXkgPT09ICdkb3duJykgbmV4dCA9IChjdXJyZW50ICsgMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdrJyB8fCBldmVudC5rZXkgPT09ICd1cCcpIG5leHQgPSAoY3VycmVudCAtIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCB0YXJnZXQgPSBpdGVtc1tuZXh0XVxuICAgIGZtLmZvY3VzKHRhcmdldClcbiAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldC5zdGFydHNXaXRoKCdzaGVsbC0nKSA/IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpIDogbnVsbClcbiAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIG5hdmlnYXRlU3RyaXAoZXZlbnQsIHByZWZpeCwgcm93cywgeyBtYWluID0gZmFsc2UsIHByZXZpZXdBZ2VudCA9IGZhbHNlLCBwcmV2aWV3U2hlbGwgPSBmYWxzZSB9ID0ge30pIHtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi4obWFpbiA/IFtgJHtwcmVmaXh9LW1haW5gXSA6IFtdKSwgLi4ucm93cy5tYXAoKHJvdykgPT4gYCR7cHJlZml4fS0ke3Jvdy5pZH1gKV1cbiAgICBjb25zdCBjdXJyZW50ID0gaXRlbXMuaW5kZXhPZihmbS5jdXJyZW50KCkpXG4gICAgbGV0IG5leHQgPSBjdXJyZW50XG4gICAgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2cnKSBuZXh0ID0gMFxuICAgIGVsc2UgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gaXRlbXMubGVuZ3RoIC0gMVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBNYXRoLm1pbihpdGVtcy5sZW5ndGggLSAxLCBjdXJyZW50ICsgTWF0aC5tYXgoMSwgTWF0aC5mbG9vcigocHJlZml4ID09PSAnc2hlbGwnID8gc2hlbGxTdHJpcFNpemUgOiBhZ2VudFN0cmlwU2l6ZSkgLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd1JykgbmV4dCA9IE1hdGgubWF4KDAsIGN1cnJlbnQgLSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKChwcmVmaXggPT09ICdzaGVsbCcgPyBzaGVsbFN0cmlwU2l6ZSA6IGFnZW50U3RyaXBTaXplKSAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdqJyB8fCBldmVudC5rZXkgPT09ICdkb3duJykgbmV4dCA9IChjdXJyZW50ICsgMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdrJyB8fCBldmVudC5rZXkgPT09ICd1cCcpIG5leHQgPSAoY3VycmVudCAtIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCB0YXJnZXQgPSBpdGVtc1tuZXh0XVxuICAgIGZtLmZvY3VzKHRhcmdldClcbiAgICBpZiAocHJldmlld0FnZW50KSB7XG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIH1cbiAgICBpZiAocHJldmlld1NoZWxsKSB7XG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldCA9PT0gJ3NoZWxsLW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHVzZUlucHV0KGFzeW5jIChldmVudCkgPT4ge1xuICAgIGlmICh3b3Jrc3BhY2VPcGVuKCkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgICBzZXRXb3Jrc3BhY2VQZW5kaW5nKHRydWUpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYm9vdC53b3Jrc3BhY2UuY2FuY2VsUHJldmlldygpXG4gICAgICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJXb3Jrc3BhY2UgPSB0cnVlXG4gICAgICAgICAgc2V0V29ya3NwYWNlT3BlbihmYWxzZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgcmV0dXJuIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgICAgIH0gZmluYWxseSB7IHNldFdvcmtzcGFjZVBlbmRpbmcoZmFsc2UpIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAod29ya3NwYWNlUGVuZGluZygpKSByZXR1cm5cbiAgICAgIGNvbnN0IG5leHQgPSB3b3Jrc3BhY2VOYXZpZ2F0ZSh3b3Jrc3BhY2VTZXNzaW9ucywgd29ya3NwYWNlU2VsZWN0ZWQoKSwgZXZlbnQsIHdvcmtzcGFjZUhlaWdodCgpKVxuICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRXb3Jrc3BhY2VTZWxlY3RlZChuZXh0KVxuICAgICAgICB2b2lkIGJvb3Qud29ya3NwYWNlLnByZXZpZXcobmV4dCkuY2F0Y2goZXJyb3IgPT4gc2V0V29ya3NwYWNlRXJyb3IoYHByZXZpZXcgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCkpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3Qgcm93ID0gd29ya3NwYWNlU2Vzc2lvbnMuZmluZCgocm93KSA9PiByb3cuaWQgPT09IHdvcmtzcGFjZVNlbGVjdGVkKCkpXG4gICAgICBpZiAoIXJvdykgcmV0dXJuXG4gICAgICBjb25zdCBhdHRhY2ggPSAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSAmJiAhZXZlbnQuYWx0ICYmIChldmVudC5rZXkgPT09ICdyaWdodCcgfHwgZXZlbnQua2V5ID09PSAnbCcpXG4gICAgICBjb25zdCBhY3Rpb24gPSBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnID8gd29ya3NwYWNlQWN0aW9uKHJvdykgOiBudWxsXG4gICAgICBpZiAoIWF0dGFjaCAmJiAhYWN0aW9uKSByZXR1cm5cbiAgICAgIHNldFdvcmtzcGFjZVBlbmRpbmcodHJ1ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChhdHRhY2gpIHtcbiAgICAgICAgICBhd2FpdCBib290LndvcmtzcGFjZS5zZWxlY3Qocm93LmlkKVxuICAgICAgICAgIHNldElucHV0KCcnKVxuICAgICAgICAgIHNldEhpc3RJZHgoLTEpXG4gICAgICAgICAgc2V0T2Zmc2V0KDApXG4gICAgICAgICAgc2V0VHJhbnNjcmlwdE1ldHJpY3MobnVsbClcbiAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZChmYWxzZSlcbiAgICAgICAgICBjb252ZXJzYXRpb25TZWFyY2guY2xvc2UoKVxuICAgICAgICAgIHJlZnMudWkuc2Vzc2lvbigpXG4gICAgICAgICAgcmVmcy51aS5zeW5jKClcbiAgICAgICAgICByZWZzLnVpLmRlcml2ZWQoc3RhdGUuZGVyaXZlZClcbiAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSA9IHRydWVcbiAgICAgICAgICBzZXRXb3Jrc3BhY2VPcGVuKGZhbHNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGJvb3Qud29ya3NwYWNlW2FjdGlvbl0ocm93LmlkKVxuICAgICAgICAgIGF3YWl0IHJlZnJlc2hXb3Jrc3BhY2UoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgJHthdHRhY2ggPyAnYXR0YWNoJyA6IGFjdGlvbn0gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICAgIH0gZmluYWxseSB7IHNldFdvcmtzcGFjZVBlbmRpbmcoZmFsc2UpIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmVmcy5kaWN0YXRpb25JbnB1dC5oYW5kbGUoZXZlbnQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVlcigpICYmIGZtLmlzKCdzdGVlcicpICYmICFzdGVlcigpLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykgYXBwbHlTdGVlcigpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZVN0ZWVyKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHN0YXJ0U3RlZXJFZGl0KClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2EnKSBzdGFydFN0ZWVyQWRkKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3gnIHx8IGV2ZW50LmtleSA9PT0gJ2QnKSBzdGFnZVN0ZWVyRGVsZXRlKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIGRyYWZ0LnNlbGVjdGVkIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpLCBkcmFmdC5zZWxlY3RlZCArIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2hvbWUnIHx8IGV2ZW50LmtleSA9PT0gJ2cnKSB7XG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3NbMF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQ6IDAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZW5kJyB8fCBldmVudC5rZXkgPT09ICdHJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIHJvd3MubGVuZ3RoIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb252ZXJzYXRpb25TZWFyY2guaGFuZGxlSW5wdXQoZXZlbnQsIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMpKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3Qgc2hlbGwgPSB0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyBzaGVsbFJvd3MuZmluZCgocykgPT4gYHNoZWxsLSR7cy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnQgPSBpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJyA/IG51bGwgOiBpdGVtXG4gICAgICBpZiAoc2hlbGwpIHNoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8ga2lsbFNoZWxsKHNoZWxsKSA6IGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIGlmIChpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJykgc3RvcE9yRGlzbWlzc0RlbGliZXJhdGlvbihpdGVtKVxuICAgICAgZWxzZSBpZiAoYWdlbnQpIFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhhZ2VudC5zdGF0dXMpID8gY2FuY2VsQWdlbnQoYWdlbnQpIDogZGlzbWlzc0FnZW50KGFnZW50KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgbmF2aWdhdGVTdHJpcChldmVudCwgJ3NoZWxsJywgc2hlbGxSb3dzLCB7IG1haW46IHRydWUsIHByZXZpZXdTaGVsbDogdHJ1ZSB9KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIG5hdmlnYXRlU3RyaXAoZXZlbnQsICdhZ2VudCcsIGFnZW50Um93cywgeyBtYWluOiB0cnVlLCBwcmV2aWV3QWdlbnQ6IHRydWUgfSkpIHJldHVyblxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0ID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHNoZWxsID0gZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogc2hlbGxSb3dzLmZpbmQoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCA9PT0gZm0uY3VycmVudCgpKVxuICAgICAgaWYgKHNoZWxsKSB7XG4gICAgICAgIGlmIChzaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJykga2lsbFNoZWxsKHNoZWxsKVxuICAgICAgICBlbHNlIGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpXG4gICAgICBpZiAoaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicpIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSlcbiAgICAgIGVsc2UgaWYgKGl0ZW0pIHtcbiAgICAgICAgaWYgKFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhpdGVtLnN0YXR1cykpIGNhbmNlbEFnZW50KGl0ZW0pXG4gICAgICAgIGVsc2UgZGlzbWlzc0FnZW50KGl0ZW0pXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnICYmIGJ1c3koKSAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgIGlmIChub3cgLSByZWZzLnF1aXRBdCA8IDE1MDApIHtcbiAgICAgICAgYXdhaXQgY3RsLnNodXRkb3duKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZzLnF1aXRBdCA9IG5vd1xuICAgICAgICBjb25zdCBydW5uaW5nID0gYm9vdC5zaGVsbHMucnVubmluZygpXG4gICAgICAgIGZsYXNoKHJ1bm5pbmcgPyBgJHtydW5uaW5nfSAke3J1bm5pbmcgPT09IDEgPyAnc2hlbGwnIDogJ3NoZWxscyd9IHJ1bm5pbmcgIGN0cmwrYyBhZ2FpbiB0byBleGl0IGFuZCBraWxsICR7cnVubmluZyA9PT0gMSA/ICdpdCcgOiAndGhlbSd9YCA6ICdjdHJsK2MgYWdhaW4gdG8gZXhpdCcpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnZmVlZCcpICYmIGV2ZW50LmtleSA9PT0gJy8nKSB7XG4gICAgICBjb252ZXJzYXRpb25TZWFyY2gub3BlbigpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3InICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoYnVzeSgpKSBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGZpcnN0JylcbiAgICAgIGVsc2UgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSBmbGFzaCgnbm90aGluZyB0byByZXdpbmQgeWV0JylcbiAgICAgIGVsc2Ugc2V0UmV3aW5kU3RlcCgncGljaycpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoYnVzeSgpKSBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgICAgZWxzZSBvcGVuUmVzdW1lUGFuZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd0JyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgc2V0U2hvd01vZGVsUGFuZWwodHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncCcgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIG9wZW5Qcm9qZWN0UGFuZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdiJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaWYgKCFlZmZvcnRBcHBsaWVzKCkpIGZsYXNoKGAke21vZGVsKCkubmFtZX0gZG9lcyBub3Qgc3VwcG9ydCBlZmZvcnQgY29udHJvbGApXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBbbnVsbCwgJ2xvdycsICdtZWRpdW0nLCAnaGlnaCcsICdtYXgnXVxuICAgICAgICBjb25zdCBuZXh0ID0gb3JkZXJbKG9yZGVyLmluZGV4T2YoZWZmb3J0KCkgPz8gbnVsbCkgKyAxKSAlIG9yZGVyLmxlbmd0aF1cbiAgICAgICAgc2V0U2Vzc2lvbkVmZm9ydChuZXh0KVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93SGlzdG9yeVBhbmVsKCkpIHtcbiAgICAgIHN3aXRjaEhpc3RTY29wZSgoaGlzdFNjb3BlKCkgKyAxKSAlIEhJU1RPUllfU0NPUEVTLmxlbmd0aClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd01lbW9yeVBhbmVsKCkpIHtcbiAgICAgIHNldE1lbVNjb3BlKChzKSA9PiAocyArIDEpICUgTUVNT1JZX1NDT1BFUy5sZW5ndGgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dSZXN1bWVQYW5lbCgpKSB7XG4gICAgICBjb25zdCBuZXh0ID0gKHJlc3VtZVNjb3BlKCkgKyAxKSAlIHJlc3VtZVNjb3BlcygpLmxlbmd0aFxuICAgICAgc2V0UmVzdW1lU2NvcGUobmV4dClcbiAgICAgIHJlZnJlc2hTZXNzaW9ucyhuZXh0KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd6JyAmJiBzdGF0ZS5yZXdpbmRVbmRvICYmICFidXN5KCkgJiYgdmlldygpID09PSAnY2hhdCcpIHtcbiAgICAgIHVuZG9SZXdpbmQoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgZm10RWxhcHNlZCA9IChzKSA9PiAocyA8IDYwID8gYCR7c31zYCA6IGAke01hdGguZmxvb3IocyAvIDYwKX1tICR7cyAlIDYwfXNgKVxuICBjb25zdCBlbGFwc2VkID0gZm10RWxhcHNlZChidXN5KCkgPyBNYXRoLm1heCgwLCBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gc3RhcnRlZEF0KCkpIC8gMTAwMCkpIDogMClcblxuICBjb25zdCBzbGFzaFJhbmdlID0gY29tbWFuZEF0KGlucHV0KCksIGlucHV0Q3Vyc29yKCkpXG4gIGNvbnN0IHNsYXNoUXVlcnkgPSBzbGFzaFJhbmdlPy5xdWVyeSA/PyBudWxsXG4gIGNvbnN0IHNob3dDb21tYW5kcyA9IHNsYXNoUmFuZ2UgIT09IG51bGwgJiYgIWFueVBhbmVsKClcbiAgY29uc3QgbWF0Y2hlZENvbW1hbmRzID0gIXNob3dDb21tYW5kc1xuICAgID8gW11cbiAgICA6IGNtZEN5Y2xlKClcbiAgICAgID8gY21kQ3ljbGUoKS5tYXRjaGVzXG4gICAgICA6IGFsbENvbW1hbmRzLmZpbHRlcigoYykgPT4gKGMuY29tbWFuZCB8fCAoc2xhc2hSYW5nZS5zdGFydCA9PT0gMCAmJiBzbGFzaFJhbmdlLmVuZCA9PT0gaW5wdXQoKS5sZW5ndGgpKSAmJiBjLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHNsYXNoUXVlcnkudG9Mb3dlckNhc2UoKSkpXG5cbiAgY29uc3QgYXRNYXRjaCA9IGlucHV0KCkubWF0Y2goLyhefFtcXHMoXSlAKFteXFxzQF0qKSQvKVxuICBjb25zdCBzaG93RmlsZXMgPSBhdE1hdGNoICE9PSBudWxsICYmICFzaG93Q29tbWFuZHMgJiYgIWZpbGVzRGlzbWlzc2VkKCkgJiYgIWFueVBhbmVsKClcbiAgaWYgKHNob3dGaWxlcykge1xuICAgIGxpc3RGaWxlcyhjd2QpLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICBpZiAoZmlsZXMgIT09IGZpbGVMaXN0KCkpIHNldEZpbGVMaXN0KGZpbGVzKVxuICAgIH0pXG4gIH1cbiAgY29uc3QgbWF0Y2hlZEZpbGVzID0gc2hvd0ZpbGVzXG4gICAgPyBmaWxlTGlzdCgpXG4gICAgICAgIC5tYXAoKGYpID0+IFtmdXp6eVNjb3JlKGF0TWF0Y2hbMl0sIGYpLCBmXSlcbiAgICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMF0gLSBhWzBdKVxuICAgICAgICAubWFwKChbLCBmXSkgPT4gZilcbiAgICA6IFtdXG5cbiAgYXN5bmMgZnVuY3Rpb24gcGlja0ZpbGUoZikge1xuICAgIGNvbnN0IHYgPSBpbnB1dCgpXG4gICAgY29uc3QgYXQgPSB2Lmxhc3RJbmRleE9mKCdAJylcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGF3YWl0IGN0bC5hdHRhY2hQcm9qZWN0RmlsZShmKVxuICAgIGlmIChwbGFjZWhvbGRlcikge1xuICAgICAgc2V0SW5wdXQodi5zbGljZSgwLCBhdCkgKyBwbGFjZWhvbGRlciArICcgJylcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0SW5wdXQodi5zbGljZSgwLCBhdCArIDEpICsgZiArICcgJylcbiAgICB9XG4gICAgc2V0RmlsZUluZGV4KDApXG4gIH1cblxuICBjb25zdCBjb21wQ3R4ID0gY29tcGxldGluZygpID8gY29tcGxldGlvbkNvbnRleHQoeyB2YWx1ZTogaW5wdXQoKSwgcmVzb2x2ZTogY29tcGxldGlvblNvdXJjZSB9KSA6IG51bGxcbiAgY29uc3Qgc2hvd0NvbXBsZXRpb24gPSAhIWNvbXBDdHggJiYgY29tcEN0eC5tYXRjaGVzLmxlbmd0aCA+IDAgJiYgIXNob3dDb21tYW5kcyAmJiAhc2hvd0ZpbGVzICYmICFhbnlQYW5lbCgpXG5cbiAgY29uc3QgcmV3aW5kRW50cmllcyA9ICgpID0+IHVzZXJFbnRyaWVzKGRlcml2ZWQoKSlcbiAgY29uc3QgcmV3aW5kT3B0aW9ucyA9ICgoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmV3aW5kVGFyZ2V0KClcbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuIFtdXG4gICAgY29uc3QgeyBtc2dzLCBlZGl0cyB9ID0gcmV3aW5kU3RhdHMoZGVyaXZlZCgpLCB0YXJnZXQuaW5kZXgpXG4gICAgY29uc3QgZSA9IGVkaXRzLmxlbmd0aFxuICAgIGNvbnN0IGVkaXRzTGFiZWwgPSBgJHtlfSAke2UgPT09IDEgPyAnZWRpdCcgOiAnZWRpdHMnfWBcbiAgICBjb25zdCBvcHRzID0gW11cbiAgICBpZiAoZSA+IDApIG9wdHMucHVzaCh7IGtleTogJ2JvdGgnLCBsYWJlbDogJ3Jlc3RvcmUgY29kZSBhbmQgY29udmVyc2F0aW9uJywgZGVzYzogYGNoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgICR7ZWRpdHNMYWJlbH0gcmV2ZXJ0ZWRgIH0pXG4gICAgb3B0cy5wdXNoKHtcbiAgICAgIGtleTogJ2NoYXQnLFxuICAgICAgbGFiZWw6IGUgPiAwID8gJ3Jlc3RvcmUgY29udmVyc2F0aW9uIG9ubHknIDogJ3Jlc3RvcmUgY29udmVyc2F0aW9uJyxcbiAgICAgIGRlc2M6IGUgPiAwID8gJ2NoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgIGZpbGUgY2hhbmdlcyBrZXB0JyA6IGBjaGF0IHJldHVybnMgdG8gdGhpcyBtZXNzYWdlICBkcm9wcyAke21zZ3N9IGVudHJpZXNgLFxuICAgIH0pXG4gICAgaWYgKGUgPiAwKSBvcHRzLnB1c2goeyBrZXk6ICdjb2RlJywgbGFiZWw6ICdyZXN0b3JlIGNvZGUgb25seScsIGRlc2M6IGBjb252ZXJzYXRpb24ga2VwdCAgJHtlZGl0c0xhYmVsfSByZXZlcnRlZGAgfSlcbiAgICBvcHRzLnB1c2goeyBrZXk6ICdzdW1tYXJ5JywgbGFiZWw6ICdyZXdpbmQgYW5kIGtlZXAgYSBzdW1tYXJ5JywgZGVzYzogJ2Ryb3BwZWQgZW50cmllcyBjb2xsYXBzZSBpbnRvIGEgb25lLWxpbmUgbm90ZScgfSlcbiAgICByZXR1cm4gb3B0c1xuICB9KSgpXG5cbiAgY29uc3QgdXNhZ2UgPSBsaXZlVXNhZ2UoKSB8fCBkZXJpdmVkKCkudXNhZ2VBY3RpdmVcbiAgY29uc3QgY29udGV4dFBlcmNlbnQgPSBtb2RlbCgpLmNvbnRleHQgPiAwICYmIGRlcml2ZWQoKS5sYXN0UHJvbXB0VG9rZW5zID4gMCAmJiBkZXJpdmVkKCkubGFzdFByb21wdE1vZGVsID09PSBtb2RlbCgpLm5hbWVcbiAgICA/IE1hdGgubWluKDEwMCwgTWF0aC5yb3VuZCgoZGVyaXZlZCgpLmxhc3RQcm9tcHRUb2tlbnMgLyBtb2RlbCgpLmNvbnRleHQpICogMTAwKSlcbiAgICA6IDBcbiAgY29uc3QgdmlzaWJsZVNoZWxscyA9IHNoZWxsUm93c1xuICBjb25zdCB2aWV3ZWRTaGVsbCA9IHZpZXdlZFNoZWxsSWQoKSA/IHZpc2libGVTaGVsbHMuZmluZCgocykgPT4gcy5pZCA9PT0gdmlld2VkU2hlbGxJZCgpKSA6IG51bGxcbiAgY29uc3QgY29tYmluZWRBY3Rpdml0eSA9IHZpc2libGVTaGVsbHMubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMFxuICBjb25zdCBzaGVsbFN0cmlwRm9jdXMgPSBmbS5pcygnc2hlbGwtc3RyaXAnKSB8fCAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgZm0uY3VycmVudCgpLnN0YXJ0c1dpdGgoJ3NoZWxsLScpKSA/IGZtLmN1cnJlbnQoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZFNoZWxsSWQgPSBzaGVsbFN0cmlwRm9jdXMgJiYgc2hlbGxTdHJpcEZvY3VzICE9PSAnc2hlbGwtbWFpbicgPyBzaGVsbFN0cmlwRm9jdXMuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGxcbiAgY29uc3QgZm9jdXNlZFNoZWxsID0gZm9jdXNlZFNoZWxsSWQgPyB2aXNpYmxlU2hlbGxzLmZpbmQoKHMpID0+IHMuaWQgPT09IGZvY3VzZWRTaGVsbElkKSA6IG51bGxcbiAgY29uc3QgaGludGVkU2hlbGwgPSBmb2N1c2VkU2hlbGwgfHwgdmlld2VkU2hlbGxcbiAgY29uc3Qgc2hlbGxBY3Rpb25IaW50ID0gaGludGVkU2hlbGwgPyBgY3RybCt4ICR7aGludGVkU2hlbGwuc3RhdHVzID09PSAncnVubmluZycgPyAna2lsbCcgOiAnZGlzbWlzcyd9YCA6ICcnXG4gIGNvbnN0IHNoZWxsV2luZG93VGFyZ2V0ID0gc2hlbGxTdHJpcEZvY3VzID09PSAnc2hlbGwtbWFpbicgPyAwIDogdmlzaWJsZVNoZWxscy5maW5kSW5kZXgoKHMpID0+IHMuaWQgPT09IChmb2N1c2VkU2hlbGxJZCB8fCB2aWV3ZWRTaGVsbElkKCkpKVxuICBjb25zdCBzaGVsbFdpbmRvd1N0YXJ0ID0gc3RyaXBXaW5kb3dTdGFydChzaGVsbFdpbmRvd09mZnNldCgpLCBzaGVsbFdpbmRvd1RhcmdldCwgdmlzaWJsZVNoZWxscy5sZW5ndGgsIHNoZWxsU3RyaXBTaXplKVxuICBpZiAoc2hlbGxXaW5kb3dTdGFydCAhPT0gc2hlbGxXaW5kb3dPZmZzZXQoKSkgc2V0U2hlbGxXaW5kb3dPZmZzZXQoc2hlbGxXaW5kb3dTdGFydClcbiAgY29uc3Qgc2hlbGxXaW5kb3cgPSB2aXNpYmxlU2hlbGxzLnNsaWNlKHNoZWxsV2luZG93U3RhcnQsIHNoZWxsV2luZG93U3RhcnQgKyBzaGVsbFN0cmlwU2l6ZSlcbiAgYWdlbnRzVmVyc2lvbigpXG4gIGNvbnN0IHZpc2libGVBZ2VudHMgPSBhZ2VudFJvd3NcbiAgY29uc3Qgdmlld2VkQWdlbnQgPSB2aWV3ZWRBZ2VudElkKCkgPyBhZ2VudFJvd3MuZmluZCgocm93KSA9PiByb3cuaWQgPT09IHZpZXdlZEFnZW50SWQoKSkgOiBudWxsXG4gIGNvbnN0IGFnZW50U3RyaXBGb2N1cyA9IGZtLmlzKCdhZ2VudC1zdHJpcCcpIHx8IChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnYWdlbnQtJykpID8gZm0uY3VycmVudCgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkQWdlbnRJZCA9IGFnZW50U3RyaXBGb2N1cyAmJiBhZ2VudFN0cmlwRm9jdXMgIT09ICdhZ2VudC1tYWluJyA/IGFnZW50U3RyaXBGb2N1cy5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkQWdlbnQgPSBmb2N1c2VkQWdlbnRJZCA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gZm9jdXNlZEFnZW50SWQpIDogbnVsbFxuICBjb25zdCBoaW50ZWRBZ2VudCA9IGZvY3VzZWRBZ2VudCB8fCB2aWV3ZWRBZ2VudFxuICBjb25zdCBhZ2VudEFjdGlvbkhpbnQgPSBoaW50ZWRBZ2VudFxuICAgID8gYGN0cmwreCAke1sncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhoaW50ZWRBZ2VudC5zdGF0dXMpID8gJ2NhbmNlbCcgOiAnZGlzbWlzcyd9YFxuICAgIDogJydcbiAgY29uc3QgYWdlbnRXaW5kb3dUYXJnZXQgPSBhZ2VudFN0cmlwRm9jdXMgPT09ICdhZ2VudC1tYWluJ1xuICAgID8gMFxuICAgIDogdmlzaWJsZUFnZW50cy5maW5kSW5kZXgoKGEpID0+IGEuaWQgPT09IChmb2N1c2VkQWdlbnRJZCB8fCB2aWV3ZWRBZ2VudElkKCkpKVxuICBjb25zdCBhZ2VudFdpbmRvd1N0YXJ0ID0gc3RyaXBXaW5kb3dTdGFydChhZ2VudFdpbmRvd09mZnNldCgpLCBhZ2VudFdpbmRvd1RhcmdldCwgdmlzaWJsZUFnZW50cy5sZW5ndGgsIGFnZW50U3RyaXBTaXplKVxuICBpZiAoYWdlbnRXaW5kb3dTdGFydCAhPT0gYWdlbnRXaW5kb3dPZmZzZXQoKSkgc2V0QWdlbnRXaW5kb3dPZmZzZXQoYWdlbnRXaW5kb3dTdGFydClcbiAgY29uc3QgYWdlbnRXaW5kb3cgPSB2aXNpYmxlQWdlbnRzLnNsaWNlKGFnZW50V2luZG93U3RhcnQsIGFnZW50V2luZG93U3RhcnQgKyBhZ2VudFN0cmlwU2l6ZSlcbiAgY29uc3QgcGVuZGluZ1dha2V1cHMgPSBib290Lndha2V1cHMucGVuZGluZygpXG4gIGdpdFZlcnNpb24oKVxuICBjb25zdCBnaXRJbmZvID0gZ2l0Rm9vdGVyKCkgPyBib290LmdpdC5zdGF0dXMoKSA6IG51bGxcblxuICBpZiAodmlldygpID09PSAnaGVscCcpIHtcbiAgICByZXR1cm4gPEhlbHAgY29tbWFuZHM9e0NPTU1BTkRTfSBvbkNsb3NlPXsoKSA9PiBzZXRWaWV3KCdjaGF0Jyl9IC8+XG4gIH1cblxuICBoaWdobGlnaHRWZXJzaW9uKClcblxuICBjb25zdCBtYWluVHJhbnNjcmlwdCA9IHN0ZWVyKCkgPyBzdGVlclByZXZpZXcoKS50cmFuc2NyaXB0IDogZGVyaXZlZCgpLnRyYW5zY3JpcHRcbiAgY29uc3Qgc2VsZWN0ZWRTdGVlck1lc3NhZ2VJZCA9IHN0ZWVyUm93cygpW3N0ZWVyKCk/LnNlbGVjdGVkXT8ubWVzc2FnZUlkXG4gIGNvbnN0IGRlY29yYXRlZFRyYW5zY3JpcHQgPSBzdGVlcigpID8gbWFpblRyYW5zY3JpcHQubWFwKChpdGVtKSA9PiAoe1xuICAgIC4uLml0ZW0sXG4gICAgc3RlZXJTZWxlY3RlZDogaXRlbS5tZXNzYWdlSWQgPT09IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWQsXG4gIH0pKSA6IG1haW5UcmFuc2NyaXB0XG4gIGNvbnN0IGFjdGl2ZVNoZWxsID0gc2hlbGxTdHJpcEZvY3VzID8gZm9jdXNlZFNoZWxsIDogYWdlbnRTdHJpcEZvY3VzID8gbnVsbCA6IHZpZXdlZFNoZWxsXG4gIGNvbnN0IGFjdGl2ZUFnZW50ID0gYWdlbnRTdHJpcEZvY3VzID8gZm9jdXNlZEFnZW50IDogc2hlbGxTdHJpcEZvY3VzID8gbnVsbCA6IHZpZXdlZEFnZW50XG4gIGxldCBzaGVsbE91dHB1dCA9IG51bGxcbiAgaWYgKGFjdGl2ZVNoZWxsKSB7XG4gICAgdHJ5IHsgc2hlbGxPdXRwdXQgPSBib290LnNoZWxscy5vdXRwdXQoYWN0aXZlU2hlbGwuaWQsIHsgdGFpbDogMjAwMCB9KSB9IGNhdGNoIHt9XG4gIH1cbiAgY29uc3Qgc2hlbGxUcmFuc2NyaXB0ID0gYWN0aXZlU2hlbGwgPyBbXG4gICAgeyBraW5kOiAnc2hlbGwtY29tbWFuZCcsIHRleHQ6IGFjdGl2ZVNoZWxsLmNvbW1hbmQgfSxcbiAgICB7IGtpbmQ6ICdzaGVsbC1vdXRwdXQnLCB0ZXh0OiBzaGVsbE91dHB1dD8ub3V0cHV0IHx8ICdubyBvdXRwdXQgeWV0JyB9LFxuICBdIDogbnVsbFxuICBjb25zdCB0cmFuc2NyaXB0U291cmNlID0gYWN0aXZlU2hlbGwgPyBgc2hlbGw6JHthY3RpdmVTaGVsbC5pZH1gIDogYWN0aXZlQWdlbnQgPyBgYWdlbnQ6JHthY3RpdmVBZ2VudC5pZH1gIDogJ21haW4nXG4gIGNvbnN0IGxpdmVQZWVySWRzID0gbmV3IFNldChvdmVybGF5KCkuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgPT09ICdwZWVyJykubWFwKChpdGVtKSA9PiBpdGVtLm1lc3NhZ2VJZCkpXG4gIGNvbnN0IHVucmVhZFBlZXJzID0gZGVjb3JhdGVkVHJhbnNjcmlwdC5maWx0ZXIoaXRlbSA9PiBpdGVtLmtpbmQgPT09ICdwZWVyJyAmJiBpdGVtLmRpcmVjdGlvbiA9PT0gJ2luY29taW5nJyAmJiAhaXRlbS5yZWFkKVxuICBjb25zdCB1bnJlYWRQZWVySWRzID0gbmV3IFNldCh1bnJlYWRQZWVycy5tYXAoaXRlbSA9PiBpdGVtLm1lc3NhZ2VJZCkpXG4gIGNvbnN0IHRyYW5zY3JpcHQgPSBzaGVsbFRyYW5zY3JpcHQgfHwgKGFjdGl2ZUFnZW50ID8gYWdlbnRUcmFuc2NyaXB0KGFjdGl2ZUFnZW50KSA6IGRlY29yYXRlZFRyYW5zY3JpcHQuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgIT09ICdwZWVyJyB8fCAoIWxpdmVQZWVySWRzLmhhcyhpdGVtLm1lc3NhZ2VJZCkgJiYgIXVucmVhZFBlZXJJZHMuaGFzKGl0ZW0ubWVzc2FnZUlkKSkpKVxuICBjb25zdCBkZWxpYmVyYXRpb25WaWV3ID0gYWN0aXZlQWdlbnQ/LnJvbGUgPT09ICdkZWxpYmVyYXRpb24nXG4gIGNvbnN0IGlzb2xhdGVkVHJhbnNjcmlwdCA9IGFjdGl2ZUFnZW50IHx8IGFjdGl2ZVNoZWxsXG4gIGNvbnN0IGdyb3VwSXRlbXMgPSAoc291cmNlLCBhY3RpdmUgPSBmYWxzZSkgPT4gc3RlZXIoKVxuICAgID8gY29sbGFwc2VTdGVlclRvb2xzKHNvdXJjZSlcbiAgICA6IGNvbXBhY3RUb29sSGlzdG9yeSgpXG4gICAgICA/IGNvbXBhY3RUcmFuc2NyaXB0UnVucyhzb3VyY2UsIGFjdGl2ZSlcbiAgICAgIDogc291cmNlXG4gIGNvbnN0IHRyYW5zY3JpcHRJdGVtcyA9IGdyb3VwSXRlbXModHJhbnNjcmlwdCwgYWN0aXZlQWdlbnQ/LnN0YXR1cyA9PT0gJ3J1bm5pbmcnKVxuICBjb25zdCB3aW5kb3dlZCA9IGRlbGliZXJhdGlvblZpZXcgPyB7IGl0ZW1zOiB0cmFuc2NyaXB0SXRlbXMsIGhpZGRlbkl0ZW1zOiAwLCBoaWRkZW5Db3VudDogMCB9IDogdHJhbnNjcmlwdFdpbmRvdyh0cmFuc2NyaXB0SXRlbXMsIGhpc3RXaW5kb3coKSlcbiAgY29uc3QgaGlkZGVuQ291bnQgPSB3aW5kb3dlZC5oaWRkZW5Db3VudFxuICBjb25zdCB2aXNpYmxlSXRlbXMgPSBpc29sYXRlZFRyYW5zY3JpcHQgPyB3aW5kb3dlZC5pdGVtcyA6IFsuLi53aW5kb3dlZC5pdGVtcywgLi4uZ3JvdXBJdGVtcyhvdmVybGF5KCksIHR1cm5QaGFzZSgpID09PSAndG9vbHMnKSwgLi4uKHN0cmVhbWluZygpID8gW3sga2luZDogJ2Fzc2lzdGFudCcsIHRleHQ6IGAke3N0cmVhbWluZygpfVx1MjU4QmAgfV0gOiBbXSksIC4uLnVucmVhZFBlZXJzXVxuICBjb25zdCBwcmVwYXJlZENvbnZlcnNhdGlvbiA9IGNvbnZlcnNhdGlvblNlYXJjaC5wcmVwYXJlKHZpc2libGVJdGVtcylcbiAgY29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlcyA9IHByZXBhcmVkQ29udmVyc2F0aW9uLm1hdGNoZXNcbiAgY29uc3QgaXRlbXMgPSBwcmVwYXJlZENvbnZlcnNhdGlvbi5pdGVtc1xuXG4gIGNvbnN0IHdvcmtzcGFjZVdpZHRoID0gTWF0aC5taW4oMzgsIE1hdGgubWF4KDE4LCBNYXRoLmZsb29yKHRlcm1pbmFsV2lkdGgoKSAvIDMpKSlcbiAgY29uc3Qgd2lkZUxheW91dCA9IHdpZGVTaWRlYmFyKCkgJiYgdGVybWluYWxXaWR0aCgpIC0gKHdvcmtzcGFjZU9wZW4oKSA/IHdvcmtzcGFjZVdpZHRoIDogMCkgPiAxNjBcblxuICBpZiAoc2hvd01lbW9yeVBhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lbW9yeVBhbmVsXG4gICAgICAgIG1lbW9yaWVzPXttZW1vcnlMaXN0KCkuZmlsdGVyKChtKSA9PiBNRU1PUllfU0NPUEVTW21lbVNjb3BlKCldID09PSAnYWxsJyB8fCBtLnNjb3BlID09PSBNRU1PUllfU0NPUEVTW21lbVNjb3BlKCldKX1cbiAgICAgICAgc2NvcGVzPXtNRU1PUllfU0NPUEVTfVxuICAgICAgICBzY29wZUluZGV4PXttZW1TY29wZSgpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uVG9nZ2xlRGlzYWJsZWQ9e3RvZ2dsZU1lbW9yeURpc2FibGVkfVxuICAgICAgICBvbkZvcmdldD17Zm9yZ2V0TWVtb3J5fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TWVtb3J5UGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd01jcFBhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1jcFBhbmVsXG4gICAgICAgIHNlcnZlcnM9e21jcFNlcnZlcnMoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblRvZ2dsZT17KG5hbWUpID0+IG1jcC50b2dnbGUobmFtZSl9XG4gICAgICAgIG9uUmVjb25uZWN0PXsobmFtZSkgPT4gbWNwLnJlY29ubmVjdChuYW1lKX1cbiAgICAgICAgb25SZW1vdmU9eyhuYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXJtZWQgPSByZWZzLm1jcFJlbW92ZUFybVxuICAgICAgICAgIGlmICghYXJtZWQgfHwgYXJtZWQubmFtZSAhPT0gbmFtZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICAgICAgICByZWZzLm1jcFJlbW92ZUFybSA9IHsgbmFtZSwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gcmVtb3ZlIFwiJHtuYW1lfVwiIGFuZCBpdHMgY29uZmlnYClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVmcy5tY3BSZW1vdmVBcm0gPSBudWxsXG4gICAgICAgICAgbWNwLnJlbW92ZShuYW1lKVxuICAgICAgICAgIGZsYXNoKGByZW1vdmVkIG1jcCBzZXJ2ZXIgJHtuYW1lfWApXG4gICAgICAgIH19XG4gICAgICAgIG9uQWRkPXsobmFtZSwgY29tbWFuZCwgc2NvcGUpID0+IHtcbiAgICAgICAgICBtY3AuYWRkKG5hbWUsIGNvbW1hbmQsIHNjb3BlKVxuICAgICAgICAgIGZsYXNoKGBhZGRlZCAke25hbWV9ICgke3Njb3BlfSlgKVxuICAgICAgICB9fVxuICAgICAgICBvbkVkaXQ9eyhuYW1lLCBjb21tYW5kKSA9PiB7XG4gICAgICAgICAgbWNwLnVwZGF0ZShuYW1lLCBjb21tYW5kKVxuICAgICAgICAgIGZsYXNoKGB1cGRhdGVkICR7bmFtZX1gKVxuICAgICAgICB9fVxuICAgICAgICBvbkludmFsaWQ9e2ZsYXNofVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93TWNwUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd1Jlc3VtZVBhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFJlc3VtZVBhbmVsXG4gICAgICAgIHNlc3Npb25zPXtyZXN1bWVTZXNzaW9ucygpfVxuICAgICAgICBzY29wZXM9e3Jlc3VtZVNjb3BlcygpfVxuICAgICAgICBzY29wZUluZGV4PXtyZXN1bWVTY29wZSgpfVxuICAgICAgICBsb2FkaW5nPXtyZXN1bWVMb2FkaW5nKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgY3VycmVudElkPXtzdGF0ZS5zZXNzaW9uPy5pZH1cbiAgICAgICAgb25QaWNrPXsobWV0YSkgPT4ge1xuICAgICAgICAgIGlmIChtZXRhLmhlYWRlci5pZCA9PT0gc3RhdGUuc2Vzc2lvbj8uaWQpIHJldHVybiBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgcmVzdW1lU2Vzc2lvbihtZXRhKVxuICAgICAgICB9fVxuICAgICAgICBvbkRlbGV0ZT17ZGVsZXRlU2Vzc2lvbk1ldGF9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGlmIChzaG93UHJvamVjdFBhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFByb2plY3RQYW5lbFxuICAgICAgICBwcm9qZWN0cz17cHJvamVjdHMoKX1cbiAgICAgICAgbG9hZGluZz17cHJvamVjdHNMb2FkaW5nKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25QaWNrQ2hlY2tvdXQ9eyhjaGVja291dCkgPT4gY2hlY2tvdXQubGF0ZXN0ID8gcmVzdW1lU2Vzc2lvbihjaGVja291dC5sYXRlc3QpIDogY3RsLnN3aXRjaFRvV29ya3RyZWUoY2hlY2tvdXQpLnRoZW4oKCkgPT4gc2V0U2hvd1Byb2plY3RQYW5lbChmYWxzZSkpfVxuICAgICAgICBvblBpY2tTZXNzaW9uPXtyZXN1bWVTZXNzaW9ufVxuICAgICAgICBvbkFkZFdvcmt0cmVlPXthZGRQcm9qZWN0V29ya3RyZWV9XG4gICAgICAgIG9uRGVsZXRlPXtkZWxldGVQcm9qZWN0Q2hlY2tvdXR9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd0NvbmZpZ1BhbmVsKCkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPENvbmZpZ1BhbmVsXG4gICAgICAgIHZhbHVlcz17eyBjbG91ZHM6IGNsb3VkcygpLCBjb21wYWN0VG9vbHM6IGNvbXBhY3RUb29sSGlzdG9yeSgpLCBnaXRTdGF0dXM6IGdpdEZvb3RlcigpLCB3aWRlU2lkZWJhcjogd2lkZVNpZGViYXIoKSwgcmVzZWFyY2hNb2RlbDogYm9vdC5yZXNlYXJjaE1vZGVsLCBzaGVsbE1vZGVsOiBib290LnNoZWxsTW9kZWwsIGRlbGliZXJhdGlvbk1vZGVsOiBib290LmRlbGliZXJhdGlvbk1vZGVsLCBwYXJ0aWNpcGFudEFNb2RlbDogYm9vdC5wYXJ0aWNpcGFudEFNb2RlbCwgcGFydGljaXBhbnRCTW9kZWw6IGJvb3QucGFydGljaXBhbnRCTW9kZWwsIHJlc2VhcmNoQWdlbnRMaW1pdDogcmVzZWFyY2hBZ2VudExpbWl0KCkgfX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblBpY2tTaGVsbE1vZGVsPXsoKSA9PiB7XG4gICAgICAgICAgc2V0U2VsZWN0aW5nU2hlbGxNb2RlbCh0cnVlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrUmVzZWFyY2hNb2RlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwoZmFsc2UpXG4gICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybignY29uZmlnJylcbiAgICAgICAgICBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpXG4gICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgICB9fVxuICAgICAgICBvblBpY2tQYXJ0aWNpcGFudE1vZGVsPXsodGFyZ2V0KSA9PiB7XG4gICAgICAgICAgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldCh0YXJnZXQpXG4gICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybignY29uZmlnJylcbiAgICAgICAgICBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpXG4gICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgICB9fVxuICAgICAgICBvblBpY2tEZWxpYmVyYXRpb25Nb2RlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKHRydWUpXG4gICAgICAgICAgc2V0UmVzZWFyY2hNb2RlbFJldHVybignY29uZmlnJylcbiAgICAgICAgICBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpXG4gICAgICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgICB9fVxuICAgICAgICBvbkNoYW5nZT17KG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdjbG91ZHMnKSB7XG4gICAgICAgICAgICBzZXRDbG91ZHModmFsdWUpXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGFuaW1hdGlvbjogeyBjbG91ZHM6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdnaXRTdGF0dXMnKSB7XG4gICAgICAgICAgICBzZXRHaXRGb290ZXIodmFsdWUpXG4gICAgICAgICAgICBib290LmdpdEZvb3RlciA9IHZhbHVlXG4gICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyBnaXRGb290ZXI6IHZhbHVlIH0pXG4gICAgICAgICAgICBib290LmdpdC5zZXRFbmFibGVkKHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBkaXNwbGF5OiB7IGdpdFN0YXR1czogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3dpZGVTaWRlYmFyJykge1xuICAgICAgICAgICAgc2V0V2lkZVNpZGViYXIodmFsdWUpXG4gICAgICAgICAgICBib290LndpZGVTaWRlYmFyID0gdmFsdWVcbiAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IHdpZGVTaWRlYmFyOiB2YWx1ZSB9KVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBkaXNwbGF5OiB7IHdpZGVTaWRlYmFyOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAncmVzZWFyY2hBZ2VudExpbWl0Jykge1xuICAgICAgICAgICAgc2V0UmVzZWFyY2hBZ2VudExpbWl0KHZhbHVlKVxuICAgICAgICAgICAgYm9vdC5yZXNlYXJjaEFnZW50TGltaXQgPSB2YWx1ZVxuICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgcmVzZWFyY2hBZ2VudExpbWl0OiB2YWx1ZSB9KVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyByZXNlYXJjaDogeyBhZ2VudExpbWl0OiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldENvbXBhY3RUb29sSGlzdG9yeSh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyBjb21wYWN0VG9vbEhpc3Rvcnk6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dDb25maWdQYW5lbChmYWxzZSl9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgaGVpZ2h0OiAnMTAwJScgfX0+XG4gICAgICB7d29ya3NwYWNlT3BlbigpICYmIDxXb3Jrc3BhY2VTaWRlYmFyIGdyb3Vwcz17d29ya3NwYWNlR3JvdXBzTm93fSBzZWxlY3RlZD17d29ya3NwYWNlU2VsZWN0ZWQoKX0gd2lkdGg9e3dvcmtzcGFjZVdpZHRofSBsb2FkaW5nPXt3b3Jrc3BhY2VMb2FkaW5nKCl9IGVycm9yPXt3b3Jrc3BhY2VFcnJvcigpfSBvbkhlaWdodD17KGhlaWdodCkgPT4geyBpZiAod29ya3NwYWNlSGVpZ2h0KCkgIT09IGhlaWdodCkgc2V0V29ya3NwYWNlSGVpZ2h0KGhlaWdodCkgfX0gLz59XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246IHdpZGVMYXlvdXQgPyAncm93JyA6ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgZmxleEJhc2lzOiAwLCBoZWlnaHQ6ICcxMDAlJyB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgcGFkZGluZ1g6IDIsIGdhcDogMSwgYmc6IFBBTkVMX0JHIH19PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAge2J1c3koKVxuICAgICAgICAgICAgPyAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogYWNjZW50KCksIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgICAgPFNoaW1tZXIgY29sb3I9XCJibGFja1wiIGhpZ2hsaWdodD17UEFORUxfQkd9IGR1cmF0aW9uPXsxNTAwfSByZXZlcnNlPlxuICAgICAgICAgICAgICAgICAgICB7Y29tcGFjdGluZygpXG4gICAgICAgICAgICAgICAgICAgICAgPyBjb21wYWN0U3RhdHVzKCk/LnBoYXNlID09PSAnd3JpdGluZycgPyBgQ29tcGFjdGluZyAgd3JpdGluZyAke2NvbXBhY3RTdGF0dXMoKS5zZWN0aW9ufS84YCA6ICdDb21wYWN0aW5nICBhbmFseXppbmcnXG4gICAgICAgICAgICAgICAgICAgICAgOiB0dXJuUGhhc2UoKSA9PT0gJ3RoaW5raW5nJyA/ICdUaGlua2luZycgOiB0dXJuUGhhc2UoKSA9PT0gJ3Rvb2xzJyA/ICdXb3JraW5nJyA6ICdSZXNwb25kaW5nJ31cbiAgICAgICAgICAgICAgICAgIDwvU2hpbW1lcj5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntgICAke2VsYXBzZWR9ICBlc2MgdG8gaW50ZXJydXB0YH08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19Pntib290LmRpc3BsYXlDd2R9PC90ZXh0Pn1cbiAgICAgICAgPC9ib3g+XG4gICAgICAgIHtnaXRJbmZvPy5icmFuY2ggJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Z2l0SW5mby5icmFuY2h9PC90ZXh0Pn1cbiAgICAgICAge2dpdEluZm8/LmFkZGVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogR1JFRU4gfX0+e2ArJHtnaXRJbmZvLmFkZGVkfWB9PC90ZXh0Pn1cbiAgICAgICAge2dpdEluZm8/LnJlbW92ZWQgPiAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBSRUQgfX0+e2AtJHtnaXRJbmZvLnJlbW92ZWR9YH08L3RleHQ+fVxuICAgICAgPC9ib3g+XG4gICAgICB7dHJhbnNjcmlwdC5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGRpbTogZGltbWluZ1BhbmVsKCkgfX0+XG4gICAgICAgICAgPEVtcHR5U3RhdGUgdmVyc2lvbj17dmVyc2lvbn0gY2xvdWRzPXtjbG91ZHMoKX0gLz5cbiAgICAgICAgPC9ib3g+XG4gICAgICApIDogPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIHtkZWxpYmVyYXRpb25WaWV3ICYmIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5raW5kID09PSAndXNlcicpLm1hcCgoaXRlbSwgaSkgPT4gKFxuICAgICAgICAgIDxib3gga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfTpwcm9tcHQ6JHtpdGVtLm1lc3NhZ2VJZCB8fCBpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiwgcGFkZGluZ1JpZ2h0OiA0LCBwYWRkaW5nQm90dG9tOiAxLCBmbGV4U2hyaW5rOiAwIH19PlxuICAgICAgICAgICAgPE1lc3NhZ2UgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZSgpfSAvPlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApKX1cbiAgICAgICAgPFNjcm9sbEJveFxuICAgICAgICAgIHN0eWxlPXt7IGZsZXhHcm93OiAxLCBkaW06IGRpbW1pbmdQYW5lbCgpIH19XG4gICAgICAgICAgZm9jdXNlZD17IWRlbGliZXJhdGlvblZpZXcgJiYgKGZtLmlzKCdmZWVkJykgfHwgZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSl9XG4gICAgICAgICAgZm9sbG93Rm9jdXM9e3N0ZWVyKCkgPyBzdGVlckxpc3RGb2N1cyA6IG51bGx9XG4gICAgICAgICAgZm9jdXNQYWRkaW5nPXsxfVxuICAgICAgICAgIHNjcm9sbE9mZnNldD17Zm9sbG93KCkgPyAxZTkgOiBvZmZzZXQoKX1cbiAgICAgICAgICBvbk1ldHJpY3M9eyhtZXRyaWNzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IHRyYW5zY3JpcHRNZXRyaWNzKClcbiAgICAgICAgICAgIGlmIChwcmV2aW91cz8udmlzaWJsZUhlaWdodCA9PT0gbWV0cmljcy52aXNpYmxlSGVpZ2h0ICYmIHByZXZpb3VzPy5jb250ZW50SGVpZ2h0ID09PSBtZXRyaWNzLmNvbnRlbnRIZWlnaHQpIHJldHVyblxuICAgICAgICAgICAgc2V0VHJhbnNjcmlwdE1ldHJpY3MobWV0cmljcylcbiAgICAgICAgICAgIGlmIChoaWRkZW5Db3VudCA+IDAgJiYgbWV0cmljcy52aXNpYmxlSGVpZ2h0ID4gMCAmJiBtZXRyaWNzLmNvbnRlbnRIZWlnaHQgPD0gbWV0cmljcy52aXNpYmxlSGVpZ2h0KSB7XG4gICAgICAgICAgICAgIHNldEhpc3RXaW5kb3coKHNpemUpID0+IHNpemUgKyBISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU2Nyb2xsPXsobmV4dCwgbWV0YSkgPT4ge1xuICAgICAgICAgIHNldEZvbGxvdyghIW1ldGE/LmF0Qm90dG9tKVxuICAgICAgICAgIC8vIGJhY2sgYXQgdGhlIGJvdHRvbTogbG9hZGVkIGhpc3RvcnkgaXMgb2ZmLXNjcmVlbiwgc28gcmUtaGlkaW5nXG4gICAgICAgICAgLy8gaXQgaXMgaW52aXNpYmxlIGFuZCByZXN0b3JlcyB0aGUgc21hbGwgcmVuZGVyIHdpbmRvd1xuICAgICAgICAgIGlmIChtZXRhPy5hdEJvdHRvbSAmJiBoaXN0V2luZG93KCkgPiBISVNUT1JZX1dJTkRPVykgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICBpZiAobmV4dCA9PT0gMCAmJiBoaWRkZW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIGtlZXAgdGhlIHZpZXcgYW5jaG9yZWQ6IGVzdGltYXRlIHRoZSByb3dzIHRoZSBuZXcgYmF0Y2ggYWRkc1xuICAgICAgICAgICAgLy8gYW5kIHNjcm9sbCBwYXN0IHRoZW0gc28gdGhlIGN1cnJlbnQgdG9wIGl0ZW0gc3RheXMgaW4gcGxhY2VcbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gTWF0aC5taW4oSElTVE9SWV9XSU5ET1csIHdpbmRvd2VkLmhpZGRlbkl0ZW1zKVxuICAgICAgICAgICAgY29uc3QgYXZnUm93cyA9IE1hdGgubWF4KDIsIE1hdGgucm91bmQoKG1ldGE/Lm1heE9mZnNldCB8fCAwKSAvIE1hdGgubWF4KDEsIGl0ZW1zLmxlbmd0aCkpKVxuICAgICAgICAgICAgc2V0SGlzdFdpbmRvdygodykgPT4gdyArIEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgc2V0T2Zmc2V0KGFkZGVkICogYXZnUm93cylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRPZmZzZXQobmV4dClcbiAgICAgICAgfX1cbiAgICAgICAgc2Nyb2xsYmFyXG4gICAgICA+XG4gICAgICAgIDxDb252ZXJzYXRpb25TY3JvbGxBbmNob3IgdGFyZ2V0PXtjb252ZXJzYXRpb25TZWFyY2guc2Nyb2xsfSAvPlxuICAgICAgICB7aGlkZGVuQ291bnQgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTIzMDMgJHtoaWRkZW5Db3VudC50b0xvY2FsZVN0cmluZygpfSBvbGRlciAke2hpZGRlbkNvdW50ID09PSAxID8gJ21lc3NhZ2UnIDogJ21lc3NhZ2VzJ30gIHNjcm9sbCB0byB0b3AgdG8gbG9hZGB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPERlbGliZXJhdGlvbkV4Y2hhbmdlIHR1cm5zPXtpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ2RlbGliZXJhdGlvbi10dXJuJyl9IHZlcmJvc2U9e3ZlcmJvc2UoKX0gd2lkZT17dGVybWluYWxXaWR0aCgpID49IDExMH0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3RvcnkoKX0gdmlld3BvcnRIZWlnaHQ9e3RyYW5zY3JpcHRNZXRyaWNzKCk/LnZpc2libGVIZWlnaHR9IGZvY3VzZWQ9e2ZtLmlzKCdmZWVkJyl9IG9uRm9jdXM9eygpID0+IGZtLmZvY3VzKCdmZWVkJyl9IC8+XG4gICAgICAgICAgICB7aXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgIT09ICd1c2VyJyAmJiBpdGVtLmtpbmQgIT09ICdkZWxpYmVyYXRpb24tdHVybicpLm1hcCgoaXRlbSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OnRhaWw6JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBpfWB9IGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2UoKX0gLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogaXRlbXMubWFwKChpdGVtLCBpKSA9PiBzdGVlcigpICYmIGl0ZW0ubWVzc2FnZUlkID8gKFxuICAgICAgICAgIDxTdGVlck1lc3NhZ2VcbiAgICAgICAgICAgIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBoaWRkZW5Db3VudCArIGl9YH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlKCl9XG4gICAgICAgICAgICBzZWxlY3RlZD17aXRlbS5tZXNzYWdlSWQgPT09IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWR9XG4gICAgICAgICAgICBmb2N1cz17c3RlZXJMaXN0Rm9jdXN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZVxuICAgICAgICAgICAga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfToke2l0ZW0ubWVzc2FnZUlkIHx8IGl0ZW0uY2FsbElkIHx8IGhpZGRlbkNvdW50ICsgaX1gfVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2UoKX1cbiAgICAgICAgICAgIGN1cnJlbnRNYXRjaD17Y29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlc1tjb252ZXJzYXRpb25TZWFyY2guaW5kZXgoKV0/Lml0ZW1JbmRleCA9PT0gaSA/IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXNbY29udmVyc2F0aW9uU2VhcmNoLmluZGV4KCldIDogbnVsbH1cbiAgICAgICAgICAgIHNlYXJjaD17Y29udmVyc2F0aW9uU2VhcmNofVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAge2NvbnZlcnNhdGlvblNlYXJjaC5hY3RpdmUoKSA/IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uU2VhcmNoQmFyIHNlYXJjaD17Y29udmVyc2F0aW9uU2VhcmNofSBtYXRjaGVzPXtjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzfSAvPlxuICAgICAgICApIDogZm0uaXMoJ2ZlZWQnKSAmJiAhYW55UGFuZWwoKSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBhY2NlbnQoKSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogJ2JsYWNrJyB9fT57J2ovayAgXHUyMTkxL1x1MjE5MyBzY3JvbGwgICBnL0cgZW5kcyAgIC8gc2VhcmNoICAgY3RybC11L2QgcGFnZSd9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+fVxuXG4gICAgICB7KGV4cGVkaXRlZCgpLmxlbmd0aCA+IDAgfHwgcXVldWVkKCkubGVuZ3RoID4gMCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHtleHBlZGl0ZWQoKS5tYXAoKG1lc3NhZ2UsIGkpID0+IChcbiAgICAgICAgICAgIDxib3gga2V5PXtgZXhwZWRpdGVkLSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PnsnXHUyMUEwICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBhY2NlbnQoKSB9fT57bWVzc2FnZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7aSA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eycgIGFmdGVyIG5leHQgdG9vbCAgXHUyMTkxIHRvIGVkaXQnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICB7cXVldWVkKCkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICA8Ym94IGtleT17YHBlbmRpbmctJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydcdTIwM0EgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PnttZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIHtpID09PSAwICYmIGV4cGVkaXRlZCgpLmxlbmd0aCA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgIHBlbmRpbmcgIFx1MjE5MSBlZGl0ICBcdTIxOTIgc2VuZCBhZnRlciBuZXh0IHRvb2wnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7Y29tbWFuZEZvcm0oKSAmJiA8Q29tbWFuZEZvcm1cbiAgICAgICAgbmFtZT17Y29tbWFuZEZvcm0oKS5uYW1lfVxuICAgICAgICBmaWVsZHM9e2NvbW1hbmRGb3JtKCkuZmllbGRzfVxuICAgICAgICBmaWxlcz17ZmlsZUxpc3QoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblN1Ym1pdD17KHZhbHVlcykgPT4gZmluaXNoQ29tbWFuZChjb21tYW5kRm9ybSgpLCB2YWx1ZXMpfVxuICAgICAgICBvbkNhbmNlbD17KCkgPT4geyBzZXRDb21tYW5kRm9ybShudWxsKTsgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbDsgZm0uZm9jdXMoJ2lucHV0JykgfX1cbiAgICAgIC8+fVxuXG4gICAgICB7cXVlc3Rpb25SZXF1ZXN0KCkgJiYgKFxuICAgICAgICA8UXVlc3Rpb25Gb3JtXG4gICAgICAgICAgcmVxdWVzdD17cXVlc3Rpb25SZXF1ZXN0KCl9XG4gICAgICAgICAgZm9jdXNlZD17IXdvcmtzcGFjZU9wZW4oKSAmJiBmbS5pcygncXVlc3Rpb24nKSAmJiAhYW55UGFuZWwoKX1cbiAgICAgICAgICBvblN1Ym1pdD17KGFuc3dlcnMpID0+IHtcbiAgICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgICAgICAgICBjdGwuYW5zd2VyUXVlc3Rpb24oYW5zd2VycylcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgY3RsLmNhbmNlbFF1ZXN0aW9uKClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3N0ZWVyKCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57c3RlZXIoKS5lZGl0aW5nID8gYCR7c3RlZXIoKS5hZGRpbmcgPyAnQWRkJyA6ICdFZGl0J30gJHtzdGVlcigpLnJvbGV9YCA6IGBTdGVlciAgJHtzdGVlcigpLmNoYW5nZXMubGVuZ3RofSBzdGFnZWRgfTwvdGV4dD5cbiAgICAgICAgICB7c3RlZXIoKS5lZGl0aW5nID8gKFxuICAgICAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZtLmlzKCdzdGVlcicpfVxuICAgICAgICAgICAgICB2YWx1ZT17c3RlZXJUZXh0KCl9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRTdGVlclRleHR9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtzdGFnZVN0ZWVyVGV4dH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGVlclRleHQoJycpXG4gICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdCA9IFNURUVSX1JPTEVTLmluZGV4T2Yoc3RlZXIoKS5yb2xlKVxuICAgICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCByb2xlOiBTVEVFUl9ST0xFU1soYXQgKyAxKSAlIFNURUVSX1JPTEVTLmxlbmd0aF0gfSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgICAgIGNsZWFyT25TdWJtaXRcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgICAgICBjdXJzb3I9e3sgYmxpbms6IHRydWUsIGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjE5MVx1MjE5MyBzZWxlY3QgIGVudGVyIGVkaXQgIGEgYWRkIGFmdGVyICB4L2QgZGVsZXRlICBjdHJsK3MgYXBwbHkgIGVzYyBkaXNjYXJkJ308L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7cGVlclN0YXR1cygpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cGVlclN0YXR1cygpfTwvdGV4dD59XG4gICAgICB7IXN0ZWVyKCkgJiYgIXZpZXdlZEFnZW50ICYmICF2aWV3ZWRTaGVsbCAmJiA8TW91c2VGb2N1c1JlZ2lvbiBvblByZXNzPXsoKSA9PiB7IGlmICghd29ya3NwYWNlT3BlbigpKSBmbS5mb2N1cygnaW5wdXQnKSB9fSBzdHlsZT17eyBiZzogUEFORUxfQkcsIGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogdHJhbnNjcmlwdC5sZW5ndGggPT09IDAgJiYgY2xvdWRzKCkgPyAwIDogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB8fCAhIXF1ZXN0aW9uUmVxdWVzdCgpIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J1x1Mjc2Rid9PC90ZXh0PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICB7KHN0YXRlLnNlc3Npb24/LmhlYWRlci5mb3JrZWRGcm9tIHx8IGRlcml2ZWQoKS50aXRsZSkgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgcmlnaHQ6IDAsIGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAge3N0YXRlLnNlc3Npb24/LmhlYWRlci5mb3JrZWRGcm9tICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZGVyaXZlZCgpLnRpdGxlID8gJ1x1MjQ0MiAnIDogJ1x1MjQ0Mid9PC90ZXh0Pn1cbiAgICAgICAgICAgIHtkZXJpdmVkKCkudGl0bGUgJiYgPHRleHQgc3R5bGU9e3sgYmc6IGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKSA/IGFjY2VudCgpIDogTVVURUQsIGNvbG9yOiAnYmxhY2snLCBib2xkOiB0cnVlIH19PntgICR7ZGVyaXZlZCgpLnRpdGxlfSBgfTwvdGV4dD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIDxUZXh0QXJlYVxuICAgICAgICAgIGNvbG9yPXtGR31cbiAgICAgICAgICBsaW5lQ291bnRlclxuICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgIGZvY3VzZWQ9eyF3b3Jrc3BhY2VPcGVuKCkgJiYgZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpfVxuICAgICAgICAgIHZhbHVlPXtpbnB1dCgpfVxuICAgICAgICAgIGN1cnNvck9mZnNldD17aW5wdXRDdXJzb3IoKX1cbiAgICAgICAgICBvbkN1cnNvckNoYW5nZT17KGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgc2V0SW5wdXRDdXJzb3IoY3Vyc29yKVxuICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgIHNldENtZEluZGV4KDApXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNoYW5nZT17KHYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHBsYWNlaG9sZGVyaXplSW1hZ2VQYXRocyh2LCB7XG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBzdGF0ZS5hdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgbmV4dElkOiAoKSA9PiArK3N0YXRlLmltYWdlQ291bnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc2V0SW5wdXQoY29udmVydGVkLnRleHQsIGNvbnZlcnRlZC50ZXh0ID09PSB2ID8gaW5wdXRDdXJzb3IoKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHNldENtZEluZGV4KDApXG4gICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgc2V0RmlsZUluZGV4KDApXG4gICAgICAgICAgICBzZXRIaXN0SWR4KC0xKVxuICAgICAgICAgICAgc2V0RmlsZXNEaXNtaXNzZWQoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNhbmNlbD17KCkgPT4ge1xuICAgICAgICAgICAgaWYgKGJ1c3koKSkgaW50ZXJydXB0KClcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBpbXBsaWNpdFJld2luZFRhcmdldChkZXJpdmVkKCksIGlucHV0KCkpXG4gICAgICAgICAgICAgIGlmICh0YXJnZXQpIHBlcmZvcm1SZXdpbmRUbyh0YXJnZXQsIHsga2V5OiAnY2hhdCcgfSlcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgICAgICBzZXRDb21wbGV0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgIHNldEZpbGVzRGlzbWlzc2VkKHRydWUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU3VibWl0PXtzZW5kfVxuICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ2xlZnQnICYmICFlLmN0cmwgJiYgIWUubWV0YSAmJiAhZS5hbHQgJiYgYm9vdC53b3Jrc3BhY2UgJiYgZm0uaXMoJ2lucHV0JykgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkgJiYgZW1wdHlXb3Jrc3BhY2VDb21wb3Nlcih7XG4gICAgICAgICAgICAgIHRleHQ6IGUudmFsdWUsIGF0dGFjaG1lbnRzOiB3b3Jrc3BhY2VEcmFmdEF0dGFjaG1lbnRzKGUudmFsdWUsIHN0YXRlLmF0dGFjaG1lbnRzKSwgZGljdGF0aW9uOiBkaWN0YXRpb25TdGF0dXMoKSwgY2FwdHVyZTogY2FwdHVyZVN0YXR1cygpLCBwZW5kaW5nOiByZWZzLmNvbW1hbmRFeHBhbnNpb24gfHwgcmVmcy53b3Jrc3BhY2VQYXN0ZVBlbmRpbmcsXG4gICAgICAgICAgICAgIGhpc3Rvcnk6IGhpc3RJZHgoKSwgY29tcGxldGlvbjogY29tcGxldGluZygpLCBjb21tYW5kOiBjb21tYW5kRm9ybSgpLCBxdWVzdGlvbjogcXVlc3Rpb25SZXF1ZXN0KCksIHN0ZWVyOiBzdGVlcigpLCBxdWV1ZWQ6IHF1ZXVlZCgpLmxlbmd0aCwgZXhwZWRpdGVkOiBleHBlZGl0ZWQoKS5sZW5ndGgsXG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICBzZXRXb3Jrc3BhY2VTZWxlY3RlZChib290LndvcmtzcGFjZS5jdXJyZW50SWQoKSlcbiAgICAgICAgICAgICAgc2V0V29ya3NwYWNlT3Blbih0cnVlKVxuICAgICAgICAgICAgICBzZXRXb3Jrc3BhY2VMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgIGZtLmZvY3VzKCd3b3Jrc3BhY2UnKVxuICAgICAgICAgICAgICB2b2lkIHJlZnJlc2hXb3Jrc3BhY2UoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZnMuZGljdGF0aW9uSW5wdXQuaGFuZGxlKGUpKSByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ3YnKSB7XG4gICAgICAgICAgICAgIHJlZnMud29ya3NwYWNlUGFzdGVQZW5kaW5nID0gdHJ1ZVxuICAgICAgICAgICAgICB2b2lkIHJlZnMucGFzdGVJbWFnZSgpLmZpbmFsbHkoKCkgPT4geyByZWZzLndvcmtzcGFjZVBhc3RlUGVuZGluZyA9IGZhbHNlIH0pXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jdHJsICYmIGUua2V5ID09PSAnZycpIHtcbiAgICAgICAgICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dC5zdGFydChlKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ28nKSB7XG4gICAgICAgICAgICAgIHZvaWQgcmVmcy5jYXB0dXJlSW1hZ2UoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndGFiJyAmJiAhZS5jdHJsICYmICFlLm1ldGEgJiYgc2hvd0ZpbGVzICYmIG1hdGNoZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBpY2tGaWxlKG1hdGNoZWRGaWxlc1tNYXRoLm1pbihmaWxlSW5kZXgoKSwgbWF0Y2hlZEZpbGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhICYmIHNob3dDb21tYW5kcyAmJiBtYXRjaGVkQ29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBjeWNsZSA9IGNtZEN5Y2xlKClcbiAgICAgICAgICAgICAgaWYgKCFjeWNsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oY21kSW5kZXgoKSwgbWF0Y2hlZENvbW1hbmRzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgc2V0Q21kQ3ljbGUoeyBtYXRjaGVzOiBtYXRjaGVkQ29tbWFuZHMgfSlcbiAgICAgICAgICAgICAgICBzZXRDbWRJbmRleChzdGFydClcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gcmVwbGFjZUNvbW1hbmQoaW5wdXQoKSwgc2xhc2hSYW5nZSwgJy8nICsgbWF0Y2hlZENvbW1hbmRzW3N0YXJ0XS5uYW1lKVxuICAgICAgICAgICAgICAgIHNldElucHV0KG5leHQudGV4dCwgbmV4dC5jdXJzb3IpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IChjbWRJbmRleCgpICsgMSkgJSBjeWNsZS5tYXRjaGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgIHNldENtZEluZGV4KG5leHQpXG4gICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSByZXBsYWNlQ29tbWFuZChpbnB1dCgpLCBzbGFzaFJhbmdlLCAnLycgKyBjeWNsZS5tYXRjaGVzW25leHRdLm5hbWUpXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQocmVwbGFjZW1lbnQudGV4dCwgcmVwbGFjZW1lbnQuY3Vyc29yKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdwYXN0ZScgJiYgZS50ZXh0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gZXh0cmFjdEltYWdlUGF0aHMoZS50ZXh0KVxuICAgICAgICAgICAgICBpZiAocGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYWZ0ID0gZS52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gZS5jdXJzb3IgPz8gZHJhZnQubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3RsLmlkXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocGF0aHMubWFwKHBhdGggPT4gY3RsLmF0dGFjaEltYWdlKHBhdGgpKSkudGhlbihwbGFjZWhvbGRlcnMgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGN0bC5pZCAhPT0gc2Vzc2lvbklkIHx8IGlucHV0KCkgIT09IGRyYWZ0KSByZXR1cm5cbiAgICAgICAgICAgICAgICAgIHNldElucHV0KGRyYWZ0LnNsaWNlKDAsIGF0KSArIHBsYWNlaG9sZGVycy5qb2luKCcgJykgKyBkcmFmdC5zbGljZShhdCkpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ2JhY2tzcGFjZScgJiYgZS5jdXJzb3IgPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gZS52YWx1ZS5zbGljZSgwLCBlLmN1cnNvcikubWF0Y2goL1xcW0ltYWdlICNcXGQrXFxdJC8pXG4gICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGN0bC5kZXRhY2hJbWFnZShtYXRjaFswXSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChlLnZhbHVlLnNsaWNlKDAsIGUuY3Vyc29yIC0gbWF0Y2hbMF0ubGVuZ3RoKSArIGUudmFsdWUuc2xpY2UoZS5jdXJzb3IpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNvbXBsZXRpb25Db250ZXh0KHsgdmFsdWU6IGUudmFsdWUsIHJlc29sdmU6IGNvbXBsZXRpb25Tb3VyY2UgfSlcbiAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICBpZiAoIWNvbXBsZXRpbmcoKSkge1xuICAgICAgICAgICAgICAgIHNldENvbXBsZXRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICBzZXRDb21wSW5kZXgoMClcbiAgICAgICAgICAgICAgICBsaXN0RmlsZXMoY3dkKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzICE9PSBmaWxlTGlzdCgpKSBzZXRGaWxlTGlzdChmaWxlcylcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN0eC5tYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhY2NlcHRDb21wbGV0aW9uKGUudmFsdWUsIGN0eCwgY3R4Lm1hdGNoZXNbTWF0aC5taW4oY29tcEluZGV4KCksIGN0eC5tYXRjaGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCB8fCBlLm1ldGEgfHwgc2hvd0NvbW1hbmRzIHx8IHNob3dGaWxlcykgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd1cCcgJiYgZS52YWx1ZSA9PT0gJycgJiYgKGV4cGVkaXRlZCgpLmxlbmd0aCA+IDAgfHwgcXVldWVkKCkubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgY3RsLnJlY2FsbFBlbmRpbmcoKS50aGVuKHNldElucHV0KS5jYXRjaChlcnJvciA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3JpZ2h0JyAmJiBlLnZhbHVlID09PSAnJyAmJiBxdWV1ZWQoKS5sZW5ndGggPiAwICYmIGJ1c3koKSAmJiAhY29tcGFjdGluZygpKSB7XG4gICAgICAgICAgICAgIGN0bC5leHBlZGl0ZVF1ZXVlZCgpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBicm93c2luZyA9IGhpc3RJZHgoKSA+PSAwXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd1cCcgJiYgKGJyb3dzaW5nIHx8IGUudmFsdWUgPT09ICcnKSAmJiBoaXN0SWR4KCkgPCBzZW50KCkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb25zdCBuID0gaGlzdElkeCgpICsgMVxuICAgICAgICAgICAgICBzZXRIaXN0SWR4KG4pXG4gICAgICAgICAgICAgIHNldElucHV0KHNlbnQoKVtzZW50KCkubGVuZ3RoIC0gMSAtIG5dLnRleHQpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdkb3duJyAmJiBicm93c2luZykge1xuICAgICAgICAgICAgICBjb25zdCBuID0gaGlzdElkeCgpIC0gMVxuICAgICAgICAgICAgICBzZXRIaXN0SWR4KG4pXG4gICAgICAgICAgICAgIHNldElucHV0KG4gPCAwID8gJycgOiBzZW50KClbc2VudCgpLmxlbmd0aCAtIDEgLSBuXS50ZXh0KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgbmV3bGluZU9uQmFja3NsYXNoRW50ZXJcbiAgICAgICAgICBjbGVhck9uU3VibWl0PXtmYWxzZX1cbiAgICAgICAgICBtYXhIZWlnaHQ9ezh9XG4gICAgICAgICAgY3Vyc29yPXt7IGJsaW5rOiB0cnVlLCBiZzogYWNjZW50KCksIGNvbG9yOiAnYmxhY2snIH19XG4gICAgICAgIC8+XG4gICAgICA8L01vdXNlRm9jdXNSZWdpb24+fVxuXG4gICAgICB7c2hvd0NvbXBvc2VyQWN0aW9ucyAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgbWFyZ2luTGVmdDogMSB9fT5cbiAgICAgICAgICA8Q29tcG9zZXJBY3Rpb25cbiAgICAgICAgICAgIGljb249XCJcdTI1Q0JcIlxuICAgICAgICAgICAgYWN0aXZlSWNvbj1cIlx1MjVDRlwiXG4gICAgICAgICAgICBhY3RpdmU9e2RpY3RhdGlvblN0YXR1cygpICE9PSAnaWRsZSd9XG4gICAgICAgICAgICBvbkhvdmVyPXsoaG92ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaG92ZXJlZCkgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnY2FwdHVyZSBhdWRpbyAoY3RybC1nKScpXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA9PT0gJ2NhcHR1cmUgYXVkaW8gKGN0cmwtZyknKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCcnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IGRpY3RhdGlvblN0YXR1cygpID09PSAncmVjb3JkaW5nJ1xuICAgICAgICAgICAgICA/IHZvaWQgcmVmcy5kaWN0YXRpb25JbnB1dC5zdG9wKClcbiAgICAgICAgICAgICAgOiByZWZzLmRpY3RhdGlvbklucHV0LnN0YXJ0KHsgdmFsdWU6IGlucHV0KCksIGN1cnNvcjogaW5wdXRDdXJzb3IoKSB9KX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxDb21wb3NlckFjdGlvblxuICAgICAgICAgICAgaWNvbj1cIlx1MjVBMVwiXG4gICAgICAgICAgICBhY3RpdmVJY29uPVwiXHUyNUEwXCJcbiAgICAgICAgICAgIGFjdGl2ZT17Y2FwdHVyZVN0YXR1cygpID09PSAnY2FwdHVyaW5nJ31cbiAgICAgICAgICAgIG9uSG92ZXI9eyhob3ZlcmVkKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChob3ZlcmVkKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCdjYXB0dXJlIGltYWdlIChjdHJsLW8pJylcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9zZXJBY3Rpb25MYWJlbCgpID09PSAnY2FwdHVyZSBpbWFnZSAoY3RybC1vKScpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJycpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gdm9pZCByZWZzLmNhcHR1cmVJbWFnZSgpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2RpY3RhdGlvblN0YXR1cygpICE9PSAnaWRsZScgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57ZGljdGF0aW9uSW5kaWNhdG9yKGRpY3RhdGlvblN0YXR1cygpLCBkaWN0YXRpb25MZXZlbHMoKSl9PC90ZXh0Pn1cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2RpY3RhdGlvblN0YXR1cygpID09PSAncmVjb3JkaW5nJyA/ICdlc2MgY2FuY2VsICBlbnRlciBjb25maXJtJyA6IGNhcHR1cmVTdGF0dXMoKSA9PT0gJ2NhcHR1cmluZycgPyAnIGVzYyBjYW5jZWwnIDogY29tcG9zZXJBY3Rpb25MYWJlbCgpID8gYCAke2NvbXBvc2VyQWN0aW9uTGFiZWwoKX1gIDogJyd9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29tbWFuZHMgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7bWF0Y2hlZENvbW1hbmRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBjb21tYW5kczwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17bWF0Y2hlZENvbW1hbmRzfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17Y21kSW5kZXgoKX1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3NldENtZEluZGV4fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17KGMpID0+IHJ1bkNvbW1hbmQoYyl9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21tYW5kcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhjLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57YC8ke2MubmFtZX1gLnBhZEVuZChtYXRjaGVkQ29tbWFuZHMucmVkdWNlKChtLCB4KSA9PiBNYXRoLm1heChtLCB4Lm5hbWUubGVuZ3RoICsgMyksIDEyKSl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IEZHIDogTVVURUQgfX0+e2MuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dGaWxlcyAmJiBtYXRjaGVkRmlsZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17bWF0Y2hlZEZpbGVzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2ZpbGVJbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldEZpbGVJbmRleH1cbiAgICAgICAgICAgIG9uU3VibWl0PXtwaWNrRmlsZX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRGaWxlc0Rpc21pc3NlZCh0cnVlKX1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dGaWxlcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhmLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGR19TT0ZUIH19PntmfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb21wbGV0aW9uICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtjb21wQ3R4Lm1hdGNoZXN9XG4gICAgICAgICAgICBzZWxlY3RlZD17Y29tcEluZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0Q29tcEluZGV4fVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhjYW5kaWRhdGUpID0+IGFjY2VwdENvbXBsZXRpb24oaW5wdXQoKSwgY29tcEN0eCwgY2FuZGlkYXRlKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtkaXNtaXNzQ29tcGxldGlvbn1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21wbGV0aW9uICYmIGRpY3RhdGlvblN0YXR1cygpID09PSAnaWRsZSd9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KGNhbmRpZGF0ZSwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkdfU09GVCB9fT57Y2FuZGlkYXRlfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogd2lkZUxheW91dCA/IDY0IDogdW5kZWZpbmVkLCBoZWlnaHQ6IHdpZGVMYXlvdXQgPyAnMTAwJScgOiB1bmRlZmluZWQgfX0+XG4gICAgICB7c2hvd01vZGVsUGFuZWwoKSAmJiAoXG4gICAgICAgIDxNb2RlbFBhbmVsXG4gICAgICAgICAgbW9kZWxzPXttb2RlbHMoKX1cbiAgICAgICAgICBjdXJyZW50PXttb2RlbCgpLm5hbWV9XG4gICAgICAgICAgZGVmYXVsdE5hbWU9e2RlZmF1bHRNb2RlbCgpLm5hbWV9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd01vZGVsUGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9e2FzeW5jIChtKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgY3RsLnN3aXRjaE1vZGVsKG0pKSBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9e2FzeW5jIChtKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgY3RsLnN3aXRjaE1vZGVsKG0sIHsgYXNEZWZhdWx0OiB0cnVlIH0pKSBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNb2RlbFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCkgJiYgKFxuICAgICAgICA8TW9kZWxQYW5lbFxuICAgICAgICAgIG1vZGVscz17bW9kZWxzKCkuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpfVxuICAgICAgICAgIGN1cnJlbnQ9e3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA/IGJvb3RbYCR7cGFydGljaXBhbnRNb2RlbFRhcmdldCgpfU1vZGVsYF0gOiBzZWxlY3RpbmdTaGVsbE1vZGVsKCkgPyBib290LnNoZWxsTW9kZWwgOiBzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpID8gYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA6IGJvb3QucmVzZWFyY2hNb2RlbH1cbiAgICAgICAgICBkZWZhdWx0TmFtZT17bnVsbH1cbiAgICAgICAgICB0aXRsZT17cGFydGljaXBhbnRNb2RlbFRhcmdldCgpID8gYENob29zZSBQYXJ0aWNpcGFudCAke3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA9PT0gJ3BhcnRpY2lwYW50QScgPyAnQScgOiAnQid9IG1vZGVsYCA6IHNlbGVjdGluZ1NoZWxsTW9kZWwoKSA/ICdDaG9vc2Ugc2hlbGwgbW9kZWwnIDogc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSA/ICdDaG9vc2Ugc3ludGhlc2lzIG1vZGVsJyA6ICdDaG9vc2UgcGFyYWxsZWwgd29ya2VyIG1vZGVsJ31cbiAgICAgICAgICBoaW50PVwiZW50ZXI6IHNhdmUgbW9kZWwgIGVzYzogY2FuY2VsXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobSkgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSkge1xuICAgICAgICAgICAgICBjb25zdCBtZXRob2QgPSBwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPT09ICdwYXJ0aWNpcGFudEEnID8gJ3NldFBhcnRpY2lwYW50QU1vZGVsJyA6ICdzZXRQYXJ0aWNpcGFudEJNb2RlbCdcbiAgICAgICAgICAgICAgY3RsW21ldGhvZF0obS5uYW1lKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RpbmdTaGVsbE1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgY3RsLnNldFNoZWxsTW9kZWwobS5uYW1lKVxuICAgICAgICAgICAgICBmbGFzaChgc2hlbGw6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA9IG0ubmFtZVxuICAgICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyBkZWxpYmVyYXRpb25Nb2RlbDogbS5uYW1lIH0pXG4gICAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgbW9kZWxzOiB7IGRlbGliZXJhdGlvbjogbS5uYW1lIH0gfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgICAgICAgICAgIGZsYXNoKGBkZWxpYmVyYXRpb246ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBib290LnJlc2VhcmNoTW9kZWwgPSBtLm5hbWVcbiAgICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgcmVzZWFyY2hNb2RlbDogbS5uYW1lIH0pXG4gICAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgbW9kZWxzOiB7IHJlc2VhcmNoV29ya2VyOiBtLm5hbWUgfSB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICAgICAgZmxhc2goYHBhcmFsbGVsIHdvcmtlcnM6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdSZXNlYXJjaCgpXG4gICAgICAgICAgICBjb25zdCBwZW5kaW5nRGVjaXNpb24gPSBwZW5kaW5nRGVsaWJlcmF0aW9uKClcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblRvID0gcmVzZWFyY2hNb2RlbFJldHVybigpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSBydW5Db21tYW5kKHsgbmFtZTogJ3BhcmFsbGVsJyB9LCBwZW5kaW5nLnRhc2spXG4gICAgICAgICAgICBlbHNlIGlmIChwZW5kaW5nRGVjaXNpb24pIHJ1bkNvbW1hbmQoeyBuYW1lOiAnZGVsaWJlcmF0ZScgfSwgcGVuZGluZ0RlY2lzaW9uLmRlY2lzaW9uKVxuICAgICAgICAgICAgZWxzZSBpZiAocmV0dXJuVG8gPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eygpID0+IHt9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIGlmIChyZXNlYXJjaE1vZGVsUmV0dXJuKCkgPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dTcGVlZFBhbmVsKCkgJiYgKFxuICAgICAgICA8U3BlZWRQYW5lbFxuICAgICAgICAgIGxldmVscz17U1BFRURfTEVWRUxTfVxuICAgICAgICAgIGN1cnJlbnQ9e3NwZWVkKCl9XG4gICAgICAgICAgZGVmYXVsdExldmVsPXtzcGVlZERlZmF1bHRzKClbbW9kZWwoKS5uYW1lXSA/PyAnc3RhbmRhcmQnfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dTcGVlZFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobCkgPT4ge1xuICAgICAgICAgICAgY3RsLmFwcGx5U3BlZWQobC5rZXkpXG4gICAgICAgICAgICBzZXRTaG93U3BlZWRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eyhsKSA9PiB7XG4gICAgICAgICAgICBjdGwuYXBwbHlTcGVlZChsLmtleSwgeyBhc0RlZmF1bHQ6IHRydWUgfSlcbiAgICAgICAgICAgIHNldFNob3dTcGVlZFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1NwZWVkUGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dFZmZvcnRQYW5lbCgpICYmIChcbiAgICAgICAgPEVmZm9ydFBhbmVsXG4gICAgICAgICAgbGV2ZWxzPXtFRkZPUlRfTEVWRUxTfVxuICAgICAgICAgIGN1cnJlbnQ9e2VmZm9ydCgpID8/IG51bGx9XG4gICAgICAgICAgZGVmYXVsdExldmVsPXtkZWZhdWx0RWZmb3J0KCkgPz8gbnVsbH1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93RWZmb3J0UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyhsKSA9PiB7XG4gICAgICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KGwua2V5KVxuICAgICAgICAgICAgc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QaWNrRGVmYXVsdD17KGwpID0+IHtcbiAgICAgICAgICAgIHNldFNlc3Npb25FZmZvcnQobC5rZXksIHsgYXNEZWZhdWx0OiB0cnVlIH0pXG4gICAgICAgICAgICBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dUaGVtZVBhbmVsKCkgJiYgKFxuICAgICAgICA8VGhlbWVQYW5lbFxuICAgICAgICAgIHRoZW1lcz17dGhlbWVJdGVtcygpfVxuICAgICAgICAgIHByZWY9e3RoZW1lUHJlZigpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dUaGVtZVBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsodCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1RoZW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBhcHBseVRoZW1lUHJlZih0LmtleSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUHJldmlldz17KHQpID0+IHByZXZpZXdQYWxldHRlKHQua2V5KX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93VGhlbWVQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIHByZXZpZXdQYWxldHRlKHRoZW1lUHJlZigpKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0RlbGV0ZUNvbmZpcm0oKSAmJiAoXG4gICAgICAgIDxDb25maXJtUGFuZWxcbiAgICAgICAgICB0aXRsZT1cIkRlbGV0ZSBjdXJyZW50IHNlc3Npb24/XCJcbiAgICAgICAgICBtZXNzYWdlPVwiVGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIGFuZCBpdHMgcGVyc2lzdGVkIGhpc3Rvcnkgd2lsbCBiZSBwZXJtYW5lbnRseSBkZWxldGVkLlwiXG4gICAgICAgICAgY29uZmlybUxhYmVsPVwiRGVsZXRlXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93RGVsZXRlQ29uZmlybSgpfVxuICAgICAgICAgIG9uQ29uZmlybT17Y29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9ufVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dEZWxldGVDb25maXJtKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93SGlzdG9yeVBhbmVsKCkgJiYgKFxuICAgICAgICA8SGlzdG9yeVBhbmVsXG4gICAgICAgICAgcHJvbXB0cz17aGlzdFByb21wdHMoKX1cbiAgICAgICAgICBzY29wZXM9e0hJU1RPUllfU0NPUEVTfVxuICAgICAgICAgIHNjb3BlSW5kZXg9e2hpc3RTY29wZSgpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dIaXN0b3J5UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyh0ZXh0KSA9PiB7IHNldElucHV0KHRleHQpOyBzZXRTaG93SGlzdG9yeVBhbmVsKGZhbHNlKSB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dIaXN0b3J5UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge2luZm9QYW5lbCgpICYmIChcbiAgICAgICAgPEluZm9MaXN0UGFuZWxcbiAgICAgICAgICB0aXRsZT17aW5mb1BhbmVsKCkudGl0bGV9XG4gICAgICAgICAgcm93cz17aW5mb1BhbmVsKCkucm93c31cbiAgICAgICAgICBvdmVydmlldz17aW5mb1BhbmVsKCkub3ZlcnZpZXd9XG4gICAgICAgICAgZm9jdXNlZD17aW5mb1BhbmVsKCkgIT09IG51bGx9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0SW5mb1BhbmVsKG51bGwpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb25uZWN0UGFuZWwoKSAmJiAoXG4gICAgICAgIDxDb25uZWN0UGFuZWxcbiAgICAgICAgICBwcm92aWRlcnM9e2F1dGhQcm92aWRlcnMoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93Q29ubmVjdFBhbmVsKCl9XG4gICAgICAgICAgb25Db25uZWN0PXtjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25EaXNjb25uZWN0PXtkaXNjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0Nvbm5lY3RQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1dha2V1cHNQYW5lbCgpICYmIChcbiAgICAgICAgPFdha2V1cHNQYW5lbFxuICAgICAgICAgIHdha2V1cHM9eyhzaGVsbHNWZXJzaW9uKCksIGJvb3Qud2FrZXVwcy5saXN0KCkpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dXYWtldXBzUGFuZWwoKX1cbiAgICAgICAgICBvbkNhbmNlbD17KHcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy53YWtldXBDYW5jZWxBcm1cbiAgICAgICAgICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHcuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgICByZWZzLndha2V1cENhbmNlbEFybSA9IHsgaWQ6IHcuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZsYXNoKGBhZ2FpbiB0byBjYW5jZWwgd2FrZS11cCAke3cuaWR9ICgke3cubm90ZS5zcGxpdCgnXFxuJylbMF0uc2xpY2UoMCwgNDApfSlgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmcy53YWtldXBDYW5jZWxBcm0gPSBudWxsXG4gICAgICAgICAgICBjdGwuY2FuY2VsV2FrZXVwKHcpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93V2FrZXVwc1BhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtyZXdpbmRTdGVwKCkgPT09ICdwaWNrJyAmJiAoXG4gICAgICAgIDxSZXdpbmRQaWNrUGFuZWxcbiAgICAgICAgICBlbnRyaWVzPXtbLi4ucmV3aW5kRW50cmllcygpXS5yZXZlcnNlKCl9XG4gICAgICAgICAgc3RhdHM9eyhpbmRleCkgPT4gcmV3aW5kU3RhdHMoZGVyaXZlZCgpLCBpbmRleCl9XG4gICAgICAgICAgZm9jdXNlZD17cmV3aW5kU3RlcCgpID09PSAncGljayd9XG4gICAgICAgICAgb25QaWNrPXsoZW50cnkpID0+IHsgc2V0UmV3aW5kVGFyZ2V0KGVudHJ5KTsgc2V0UmV3aW5kU3RlcCgnYWN0aW9uJykgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRSZXdpbmRTdGVwKG51bGwpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Jld2luZFN0ZXAoKSA9PT0gJ2FjdGlvbicgJiYgcmV3aW5kVGFyZ2V0KCkgJiYgKFxuICAgICAgICA8UmV3aW5kQWN0aW9uUGFuZWxcbiAgICAgICAgICB0YXJnZXQ9e3Jld2luZFRhcmdldCgpfVxuICAgICAgICAgIG9wdGlvbnM9e3Jld2luZE9wdGlvbnN9XG4gICAgICAgICAgZm9jdXNlZD17cmV3aW5kU3RlcCgpID09PSAnYWN0aW9uJ31cbiAgICAgICAgICBvblN1Ym1pdD17cGVyZm9ybVJld2luZH1cbiAgICAgICAgICBvbkJhY2s9eygpID0+IHNldFJld2luZFN0ZXAoJ3BpY2snKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBzZWxlY3RlZD17IXZpZXdlZFNoZWxsICYmICF2aWV3ZWRBZ2VudH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ2FjdGl2aXR5LW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkU2hlbGwgJiYgIXZpZXdlZEFnZW50ID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Zpc2libGVTaGVsbHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IGNvbWJpbmVkQWN0aXZpdHkgfHwgc2hvd0NvbXBvc2VyQWN0aW9ucyA/IDAgOiAxIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzaGVsbEFjdGlvbkhpbnQgPyBgJHtzaGVsbEFjdGlvbkhpbnR9ICBgIDogJyd9ai9rIG1vdmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgICB7IWNvbWJpbmVkQWN0aXZpdHkgJiYgKFxuICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRTaGVsbH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ3NoZWxsLW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkU2hlbGwgPyBGRyA6IE1VVEVEIH19PnsnbWFpbid9PC90ZXh0PlxuICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3NoZWxsV2luZG93Lm1hcCgocykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGZtLmN1cnJlbnQoKSA9PT0gYHNoZWxsLSR7cy5pZH1gXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHZpZXdlZFNoZWxsSWQoKSA9PT0gcy5pZFxuICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IGFnZW50RWxhcHNlZCh7IHN0YXJ0ZWRBdDogcy5zdGFydGVkQXQsIGVuZGVkQXQ6IHMuZW5kZWRBdCB9KVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cga2V5PXtgc2hlbGwtJHtzLmlkfWB9IHNlbGVjdGVkPXtzZWxlY3RlZH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cyhgc2hlbGwtJHtzLmlkfWApOyBzZXRWaWV3ZWRTaGVsbElkKHMuaWQpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSkgfX0+XG4gICAgICAgICAgICAgICAge3Muc3RhdHVzID09PSAncnVubmluZycgPyA8U3Bpbm5lciBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gdmFyaWFudD1cImRvdHNcIiAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHMuZXhpdENvZGUgPT09IDAgPyBHUkVFTiA6IFJFRCB9fT57cy5leGl0Q29kZSA9PT0gMCA/ICdcdTI1Q0YnIDogJ1x1MDBENyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dD57JyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzZWxlY3RlZCA/IEZHIDogTVVURUQgfX0+e2BzaGVsbCBbJHtzLmlkfV0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57cy5kZXNjcmlwdGlvbiB8fCBzLmNvbW1hbmQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Muc3RhdHVzID09PSAncnVubmluZycgPyAnJyA6IGBleGl0ICR7cy5leGl0Q29kZX0gIGB9JHtlbGFwc2VkfWB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgICAge3Zpc2libGVTaGVsbHMubGVuZ3RoID4gc2hlbGxTdHJpcFNpemUgJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke3NoZWxsV2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke3NoZWxsV2luZG93U3RhcnR9YCA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCA+IDAgJiYgc2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVTaGVsbHMubGVuZ3RoIC0gc2hlbGxXaW5kb3dTdGFydCAtIHNoZWxsV2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt2aXNpYmxlQWdlbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiBjb21iaW5lZEFjdGl2aXR5IHx8IHNob3dDb21wb3NlckFjdGlvbnMgPyAwIDogMSB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7YWdlbnRBY3Rpb25IaW50ID8gYCR7YWdlbnRBY3Rpb25IaW50fSAgYCA6ICcnfWovayBtb3ZlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgeyFjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IHNlbGVjdGVkPXshdmlld2VkQWdlbnR9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdhZ2VudC1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhZ2VudC1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nID8gJ2JsYWNrJyA6ICF2aWV3ZWRBZ2VudCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7YWdlbnRXaW5kb3cubWFwKChhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhZ2VudFN0YXR1cyhhKVxuICAgICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGZtLmN1cnJlbnQoKSA9PT0gYGFnZW50LSR7YS5pZH1gXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBrZXk9e2BhZ2VudC0ke2EuaWR9YH0gc2VsZWN0ZWQ9e3ZpZXdlZEFnZW50SWQoKSA9PT0gYS5pZH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cyhgYWdlbnQtJHthLmlkfWApOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKGEuaWQpOyBzZXRGb2xsb3codHJ1ZSk7IHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpIH19PlxuICAgICAgICAgICAgICAgIHthLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gPFNwaW5uZXIgY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IHZhcmlhbnQ9XCJkb3RzXCIgLz4gOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzdGF0dXMuY29sb3IgfX0+e3N0YXR1cy5pY29ufTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQ+eycgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogdmlld2VkQWdlbnRJZCgpID09PSBhLmlkID8gRkcgOiBNVVRFRCB9fT57YCR7YS5yb2xlIHx8ICdhZ2VudCd9IFske2EuaWR9XSAgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnthLmRlc2NyaXB0aW9ufTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICB7c3RhdHVzLmxhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHN0YXR1cy5jb2xvciB9fT57YCAgJHtzdGF0dXMubGFiZWx9YH08L3RleHQ+fVxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgJHtzdGF0dXMubGFiZWwgPyAnICAnIDogJyAgJ30gJHthZ2VudEVsYXBzZWQoYSl9ICBcdTIxOTMgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2EudXNhZ2U/LnRvdGFsVG9rZW5zIHx8IGEudXNhZ2U/LnByb21wdFRva2VucyB8fCAwfSBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRH0gaGlnaGxpZ2h0PXtmb2N1c2VkID8gJ2JsYWNrJyA6IGFjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSB0b2tlbnNgfSAvPlxuICAgICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgICAge3Zpc2libGVBZ2VudHMubGVuZ3RoID4gYWdlbnRTdHJpcFNpemUgJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke2FnZW50V2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke2FnZW50V2luZG93U3RhcnR9YCA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCA+IDAgJiYgYWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVBZ2VudHMubGVuZ3RoIC0gYWdlbnRXaW5kb3dTdGFydCAtIGFnZW50V2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt3aWRlTGF5b3V0ICYmIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz59XG5cbiAgICAgIHt3aWRlTGF5b3V0ID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgcGFkZGluZ1RvcDogMSB9fT5cbiAgICAgICAgICB7YnVzeSgpICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8U2hpbW1lciBjb2xvcj17YWNjZW50KCl9IGhpZ2hsaWdodD17SElHSExJR0hUfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgIHtjb21wYWN0aW5nKClcbiAgICAgICAgICAgICAgICAgICAgPyBjb21wYWN0U3RhdHVzKCk/LnBoYXNlID09PSAnd3JpdGluZycgPyBgQ29tcGFjdGluZyAgd3JpdGluZyAke2NvbXBhY3RTdGF0dXMoKS5zZWN0aW9ufS84YCA6ICdDb21wYWN0aW5nICBhbmFseXppbmcnXG4gICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgPC9TaGltbWVyPlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2NvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyAmJiA8UHJvZ3Jlc3NCYXIgdmFyaWFudD1cInRoaW5cIiB2YWx1ZT17Y29tcGFjdFN0YXR1cygpLnNlY3Rpb24gLyA4fSB3aWR0aD17MzB9IHBlcmNlbnRhZ2U9e2ZhbHNlfSBjb2xvcj17YWNjZW50KCl9IC8+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUgfX0+eydSZXBvc2l0b3J5J308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQnJhbmNoICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQ2hhbmdlcyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgJHtnaXRJbmZvLmFkZGVkfSBhZGRlZGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgZ2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgJHtnaXRJbmZvLnJlbW92ZWR9IHJlbW92ZWRgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAge2dpdEluZm8uYWRkZWQgPT09IDAgJiYgZ2l0SW5mby5yZW1vdmVkID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J2NsZWFuJ308L3RleHQ+fVxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlIH19PnsnU2Vzc2lvbid9PC90ZXh0PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydEaXJlY3RvcnkgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Jvb3QuZGlzcGxheUN3ZH08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J01vZGVsICAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57bW9kZWwoKS5uYW1lfTwvdGV4dD57c3BlZWRBcHBsaWVzKCkgJiYgc3BlZWQoKSA9PT0gJ2Zhc3QnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57JyBGYXN0J308L3RleHQ+fTwvYm94PlxuICAgICAgICAgICAge2VmZm9ydEFwcGxpZXMoKSAmJiBlZmZvcnQoKSAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0VmZm9ydCAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntlZmZvcnQoKX08L3RleHQ+PC9ib3g+fVxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydJbnB1dCB0b2tlbnMgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5wcm9tcHRUb2tlbnMpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydPdXRwdXQgdG9rZW5zICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5jb21wbGV0aW9uVG9rZW5zKS50b0xvY2FsZVN0cmluZygpfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1Rob3VnaHQgdG9rZW5zICd9PC90ZXh0PjxBbmltYXRlZFZhbHVlIHZhbHVlPXt1c2FnZS50aG91Z2h0VG9rZW5zfSBjb2xvcj17RkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gTWF0aC5yb3VuZChuKS50b0xvY2FsZVN0cmluZygpfSAvPjwvYm94Pn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydDb250ZXh0IHVzZWQgICAnfTwvdGV4dD48QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17Y29udGV4dFBlcmNlbnR9IGNvbG9yPXtjb250ZXh0UGVyY2VudCA+PSA4MCA/IFJFRCA6IEZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke01hdGgucm91bmQobil9JWB9IC8+PC9ib3g+fVxuICAgICAgICAgICAge3BlbmRpbmdXYWtldXBzID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1dha2UtdXBzICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwZW5kaW5nV2FrZXVwc308L3RleHQ+PC9ib3g+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBoZWlnaHQ6IDEgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgZ2FwOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnttb2RlbCgpLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAge3NwZWVkQXBwbGllcygpICYmIHNwZWVkKCkgPT09ICdmYXN0JyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+RmFzdDwvdGV4dD59XG4gICAgICAgICAgICB7ZWZmb3J0QXBwbGllcygpICYmIGVmZm9ydCgpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZWZmb3J0KCl9PC90ZXh0Pn1cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgIHtwZW5kaW5nV2FrZXVwcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyM0YwICR7cGVuZGluZ1dha2V1cHN9YH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLnByb21wdFRva2Vucyl9IFx1MjE5M2B9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLmNvbXBsZXRpb25Ub2tlbnMpfSBcdTIxOTFgfTwvdGV4dD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17dXNhZ2UudGhvdWdodFRva2Vuc30gY29sb3I9e01VVEVEfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSBcdTI1QzhgfSAvPn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2NvbnRleHRQZXJjZW50fSBjb2xvcj17Y29udGV4dFBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17UEFORUxfQkd9IGZvcm1hdD17Y29udGV4dEJhcn0gLz59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgICAgeyF3b3Jrc3BhY2VPcGVuKCkgJiYgPERpY3RhdGlvbktleXMgaW5wdXQ9e3JlZnMuZGljdGF0aW9uSW5wdXR9IC8+fVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tbWFuZEF0KHRleHQsIGN1cnNvciA9IHRleHQubGVuZ3RoKSB7XG4gIGNvbnN0IG1hdGNoID0gdGV4dC5zbGljZSgwLCBjdXJzb3IpLm1hdGNoKC8oXnxbXFxzKF0pXFwvKFtBLVphLXowLTlfLV0qKSQvKVxuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuICBjb25zdCBzdGFydCA9IGN1cnNvciAtIG1hdGNoWzJdLmxlbmd0aCAtIDFcbiAgY29uc3Qgc3VmZml4ID0gdGV4dC5zbGljZShjdXJzb3IpLm1hdGNoKC9eW0EtWmEtejAtOV8tXSovKVswXVxuICByZXR1cm4geyBzdGFydCwgZW5kOiBjdXJzb3IgKyBzdWZmaXgubGVuZ3RoLCBxdWVyeTogbWF0Y2hbMl0gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNvbW1hbmQodGV4dCwgcmFuZ2UsIGJvZHkpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiB0ZXh0LnNsaWNlKDAsIHJhbmdlLnN0YXJ0KSArIGJvZHkgKyB0ZXh0LnNsaWNlKHJhbmdlLmVuZCksXG4gICAgY3Vyc29yOiByYW5nZS5zdGFydCArIGJvZHkubGVuZ3RoLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRmllbGRzKGNvbW1hbmQsIGJvZHksIGFyZ3MgPSAnJykge1xuICBjb25zdCBmaWVsZHMgPSBbLi4uKGNvbW1hbmQuYXJndW1lbnRzID8/IFtdKV1cbiAgaWYgKGJvZHkuaW5jbHVkZXMoJyRBUkdVTUVOVFMnKSAmJiAhYXJncykge1xuICAgIGZpZWxkcy5wdXNoKHsgbmFtZTogJyRhcmdzJywgbGFiZWw6ICdBcmd1bWVudHMnLCB0eXBlOiAndGV4dCcgfSlcbiAgfVxuICByZXR1cm4gZmllbGRzXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBUZXh0QXJlYSwgTWVudSwgQnV0dG9uLCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBNVVRFRCwgUEFORUxfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tbWFuZEZvcm0oeyBuYW1lLCBmaWVsZHMsIGZpbGVzLCBmb2N1c2VkLCBvblN1Ym1pdCwgb25DYW5jZWwgfSkge1xuICBjb25zdCBbc3RlcCwgc2V0U3RlcF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IGNyZWF0ZVNpZ25hbCh7fSlcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IGZpZWxkID0gZmllbGRzW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkLnR5cGUgPT09ICdjaG9pY2UnID8gZmllbGQuY2hvaWNlcyA6IGZpZWxkLnR5cGUgPT09ICdwYXRoJyA/IGZpbGVzIDogW11cbiAgY29uc3QgbWF0Y2hlcyA9IHJhbmtGdXp6eShvcHRpb25zLCBxdWVyeSgpLCAocSwgdmFsdWUpID0+IGZ1enp5U2NvcmUocSwgdmFsdWUpKVxuXG4gIGZ1bmN0aW9uIGFkdmFuY2UodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0ID0geyAuLi52YWx1ZXMoKSwgW2ZpZWxkLm5hbWVdOiB2YWx1ZSB9XG4gICAgc2V0VmFsdWVzKG5leHQpXG4gICAgaWYgKHN0ZXAoKSA9PT0gZmllbGRzLmxlbmd0aCAtIDEpIHJldHVybiBvblN1Ym1pdChuZXh0KVxuICAgIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRTZWxlY3RlZCgwKVxuICB9XG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGdhcDogMiB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PntgLyR7bmFtZX1gfTwvdGV4dD5cbiAgICAgICAge2ZpZWxkcy5zbGljZSgwLCBzdGVwKCkpLm1hcCgoaXRlbSkgPT4gPHRleHQga2V5PXtpdGVtLm5hbWV9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57dmFsdWVzKClbaXRlbS5uYW1lXX08L3RleHQ+KX1cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD1cIkNhbmNlbFwiIG9uUHJlc3M9e29uQ2FuY2VsfSAvPlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2ZpZWxkLmxhYmVsfTwvdGV4dD5cbiAgICAgIDxUZXh0QXJlYVxuICAgICAgICBrZXk9e2ZpZWxkLm5hbWV9XG4gICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgIHZhbHVlPXtxdWVyeSgpfVxuICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgIGNsZWFyT25TdWJtaXQ9e2ZhbHNlfVxuICAgICAgICBtYXhIZWlnaHQ9ezF9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtmaWVsZC5sYWJlbH1cbiAgICAgICAgb25DYW5jZWw9e29uQ2FuY2VsfVxuICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiB7IHNldFF1ZXJ5KHZhbHVlKTsgc2V0U2VsZWN0ZWQoMCkgfX1cbiAgICAgICAgb25TdWJtaXQ9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnY2hvaWNlJykge1xuICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoKSBhZHZhbmNlKG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgfSBlbHNlIGFkdmFuY2UoZmllbGQudHlwZSA9PT0gJ3BhdGgnICYmIG1hdGNoZXMubGVuZ3RoICYmICF2YWx1ZS5zdGFydHNXaXRoKCcvJykgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoJ34nKSA/IG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0gOiB2YWx1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKE1hdGgubWluKHNlbGVjdGVkKCkgKyAxLCBtYXRjaGVzLmxlbmd0aCAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoTWF0aC5tYXgoMCwgc2VsZWN0ZWQoKSAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFF1ZXJ5KG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICB7bWF0Y2hlcy5sZW5ndGggPiAwICYmIDxNZW51XG4gICAgICAgIGl0ZW1zPXttYXRjaGVzfVxuICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWQoKX1cbiAgICAgICAgb25TZWxlY3Q9e3NldFNlbGVjdGVkfVxuICAgICAgICBvblN1Ym1pdD17YWR2YW5jZX1cbiAgICAgICAgZm9jdXNlZD17ZmFsc2V9XG4gICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgIHJlbmRlckl0ZW09eyh2YWx1ZSwgeyBhY3RpdmUgfSkgPT4gPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2Ake2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9JHt2YWx1ZX1gfTwvdGV4dD59XG4gICAgICAvPn1cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImNvbnN0IGZpbGxlciA9IC8oPzwhW15cXHMsOzohP10pKD86dWh8dW0pKD89JHxbXFxzLDs6LiE/XSkoWyBcXHRdKlssOzouIT9dKilbIFxcdF0qL2dpdVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5EaWN0YXRpb24odGV4dCkge1xuICByZXR1cm4gdGV4dC5zcGxpdCgnXFxuJykubWFwKGNsZWFuTGluZSkuam9pbignXFxuJykudHJpbSgpXG59XG5cbmZ1bmN0aW9uIGNsZWFuTGluZShsaW5lKSB7XG4gIGxldCByZXN1bHQgPSAnJ1xuICBsZXQgb2Zmc2V0ID0gMFxuICBsZXQgY2FwaXRhbGl6ZSA9IGZhbHNlXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbGluZS5tYXRjaEFsbChmaWxsZXIpKSB7XG4gICAgbGV0IGJlZm9yZSA9IGxpbmUuc2xpY2Uob2Zmc2V0LCBtYXRjaC5pbmRleClcbiAgICBpZiAoY2FwaXRhbGl6ZSkgYmVmb3JlID0gdXBwZXJGaXJzdChiZWZvcmUpXG4gICAgcmVzdWx0ICs9IGJlZm9yZVxuICAgIGNvbnN0IGFmdGVyID0gbGluZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aClcbiAgICBjb25zdCB0ZXJtaW5hbCA9IG1hdGNoWzFdLm1hdGNoKC9bLiE/XSsvKT8uWzBdID8/ICcnXG4gICAgcmVzdWx0ID0gcmVzdWx0LnRyaW1FbmQoKVxuICAgIGNvbnN0IHNlbnRlbmNlU3RhcnQgPSAhcmVzdWx0IHx8IC9bLiE/XSQvLnRlc3QocmVzdWx0KVxuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8sJC8sICcnKVxuICAgIGlmICghYWZ0ZXIpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bOzpdJC8sICcnKVxuICAgIGlmICh0ZXJtaW5hbCAmJiAhc2VudGVuY2VTdGFydCkgcmVzdWx0ICs9IHRlcm1pbmFsXG4gICAgY2FwaXRhbGl6ZSA9IHNlbnRlbmNlU3RhcnQgfHwgQm9vbGVhbih0ZXJtaW5hbClcbiAgICBpZiAocmVzdWx0ICYmIGFmdGVyKSByZXN1bHQgKz0gJyAnXG4gICAgb2Zmc2V0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgfVxuICBjb25zdCB0YWlsID0gbGluZS5zbGljZShvZmZzZXQpXG4gIHJldHVybiByZXN1bHQgKyAoY2FwaXRhbGl6ZSA/IHVwcGVyRmlyc3QodGFpbCkgOiB0YWlsKVxufVxuXG5mdW5jdGlvbiB1cHBlckZpcnN0KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgvXihcXHMqKShcXHB7TGx9KSg/IVxccHtMdX0pL3UsIChfLCBzcGFjZSwgbGV0dGVyKSA9PiBzcGFjZSArIGxldHRlci50b1VwcGVyQ2FzZSgpKVxufVxuXG4iLCAiaW1wb3J0IHsgY2xlYW5EaWN0YXRpb24gfSBmcm9tICcuL2RpY3RhdGlvbi10ZXh0LmpzJ1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCdcblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3RhdGlvbkhlbHBlclBhdGgoKSB7XG4gIGNvbnN0IGJ1bmRsZWQgPSBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vcGljby1kaWN0YXRlJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgcmV0dXJuIGV4aXN0c1N5bmMoYnVuZGxlZCkgPyBidW5kbGVkIDogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi9oZWxwZXIvLmJ1aWxkL3JlbGVhc2UvcGljby1kaWN0YXRlJywgaW1wb3J0Lm1ldGEudXJsKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpY3RhdGlvbih7IG9uU3RhdHVzID0gKCkgPT4ge30sIG9uTGV2ZWwgPSAoKSA9PiB7fSwgb25FcnJvciA9ICgpID0+IHt9LCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sIGFyY2ggPSBwcm9jZXNzLmFyY2gsIGxhdW5jaCA9ICgpID0+IHNwYXduKGRpY3RhdGlvbkhlbHBlclBhdGgoKSwgW10sIHsgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSB9KSwgbG9hZGluZ1RpbWVvdXQgPSA2MDAwMDAsIHJlcXVlc3RUaW1lb3V0ID0gNDUwMDAgfSA9IHt9KSB7XG4gIGxldCBjaGlsZCA9IG51bGxcbiAgbGV0IHN0YXR1cyA9ICdpZGxlJ1xuICBsZXQgc2VxdWVuY2UgPSAwXG4gIGxldCBnZW5lcmF0aW9uID0gMFxuICBsZXQgcmVhZHkgPSBudWxsXG4gIGxldCBkaXNwb3NlZCA9IGZhbHNlXG4gIGNvbnN0IHBlbmRpbmcgPSBuZXcgTWFwKClcblxuICBmdW5jdGlvbiBzZXRTdGF0dXModmFsdWUpIHtcbiAgICBzdGF0dXMgPSB2YWx1ZVxuICAgIG9uU3RhdHVzKHZhbHVlKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoZXJyb3IgPSBuZXcgRXJyb3IoJ2RpY3RhdGlvbiBjYW5jZWxsZWQnKSkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gY2hpbGRcbiAgICBjaGlsZCA9IG51bGxcbiAgICByZWFkeSA9IG51bGxcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBlbmRpbmcudmFsdWVzKCkpIHtcbiAgICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lcilcbiAgICAgIGVudHJ5LnJlamVjdChlcnJvcilcbiAgICB9XG4gICAgcGVuZGluZy5jbGVhcigpXG4gICAgcHJldmlvdXM/LnN0ZGluLmVuZCgpXG4gICAgcHJldmlvdXM/LmtpbGwoKVxuICAgIHNldFN0YXR1cygnaWRsZScpXG4gIH1cblxuICBmdW5jdGlvbiB3YWl0Rm9yKGlkLCB0aW1lb3V0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZXNldChuZXcgRXJyb3IoJ2RpY3RhdGlvbiB0aW1lZCBvdXQnKSksIHRpbWVvdXQpXG4gICAgICBwZW5kaW5nLnNldChpZCwgeyByZXNvbHZlLCByZWplY3QsIHRpbWVyIH0pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRsZShpZCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGVudHJ5ID0gcGVuZGluZy5nZXQoaWQpXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuXG4gICAgcGVuZGluZy5kZWxldGUoaWQpXG4gICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKVxuICAgIGlmIChtZXNzYWdlLmVycm9yKSBlbnRyeS5yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UuZXJyb3IpKVxuICAgIGVsc2UgZW50cnkucmVzb2x2ZShtZXNzYWdlKVxuICB9XG5cbiAgZnVuY3Rpb24gbG9hZCgpIHtcbiAgICBpZiAocmVhZHkpIHJldHVybiByZWFkeVxuICAgIGlmIChwbGF0Zm9ybSAhPT0gJ2RhcndpbicgfHwgYXJjaCAhPT0gJ2FybTY0JykgdGhyb3cgbmV3IEVycm9yKCdkaWN0YXRpb24gcmVxdWlyZXMgYW4gQXBwbGUgU2lsaWNvbiBNYWMnKVxuICAgIGNvbnN0IGluc3RhbmNlID0gbGF1bmNoKClcbiAgICBjaGlsZCA9IGluc3RhbmNlXG4gICAgcmVhZHkgPSB3YWl0Rm9yKCdyZWFkeScsIGxvYWRpbmdUaW1lb3V0KVxuICAgIGxldCBidWZmZXIgPSAnJ1xuICAgIGluc3RhbmNlLnN0ZG91dC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9PSBpbnN0YW5jZSkgcmV0dXJuXG4gICAgICBidWZmZXIgKz0gY2h1bmsudG9TdHJpbmcoKVxuICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAxMDI0ICogMTAyNCkgcmV0dXJuIHJlc2V0KG5ldyBFcnJvcignaW52YWxpZCBkaWN0YXRpb24gaGVscGVyIG91dHB1dCcpKVxuICAgICAgbGV0IGF0XG4gICAgICB3aGlsZSAoKGF0ID0gYnVmZmVyLmluZGV4T2YoJ1xcbicpKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBidWZmZXIuc2xpY2UoMCwgYXQpXG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZShhdCArIDEpXG4gICAgICAgIGxldCBtZXNzYWdlXG4gICAgICAgIHRyeSB7IG1lc3NhZ2UgPSBKU09OLnBhcnNlKGxpbmUpIH0gY2F0Y2ggeyBjb250aW51ZSB9XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ2xldmVsJykge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdyZWNvcmRpbmcnICYmIE51bWJlci5pc0Zpbml0ZShtZXNzYWdlLmxldmVsKSkgb25MZXZlbChNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBtZXNzYWdlLmxldmVsKSkpXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGF0dXMgPT09ICdyZWFkeScpIHNldHRsZSgncmVhZHknLCBtZXNzYWdlKVxuICAgICAgICBlbHNlIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UubWVzc2FnZSB8fCAnZGljdGF0aW9uIGZhaWxlZCcpXG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gcGVuZGluZy5zaXplID4gMFxuICAgICAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgICAgIGlmICghYWN0aXZlKSBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZCAhPSBudWxsKSBzZXR0bGUobWVzc2FnZS5pZCwgbWVzc2FnZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGluc3RhbmNlLnN0ZGVyci5vbignZGF0YScsICgpID0+IHt9KVxuICAgIGNvbnN0IGZhaWxlZCA9IChlcnJvcikgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9PSBpbnN0YW5jZSkgcmV0dXJuXG4gICAgICBjb25zdCBhY3RpdmUgPSBwZW5kaW5nLnNpemUgPiAwXG4gICAgICBjb25zdCByZWNvcmRpbmcgPSBzdGF0dXMgPT09ICdyZWNvcmRpbmcnXG4gICAgICByZXNldChlcnJvcilcbiAgICAgIGlmICghYWN0aXZlICYmIHJlY29yZGluZykgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgIH1cbiAgICBpbnN0YW5jZS5vbignZXJyb3InLCAoZXJyb3IpID0+IGZhaWxlZChuZXcgRXJyb3IoYGRpY3RhdGlvbiBoZWxwZXIgdW5hdmFpbGFibGU6ICR7ZXJyb3IubWVzc2FnZX1gKSkpXG4gICAgaW5zdGFuY2Uuc3RkaW4ub24oJ2Vycm9yJywgZmFpbGVkKVxuICAgIGluc3RhbmNlLm9uKCdleGl0JywgKCkgPT4gZmFpbGVkKG5ldyBFcnJvcignZGljdGF0aW9uIGhlbHBlciBleGl0ZWQnKSkpXG4gICAgcmV0dXJuIHJlYWR5XG4gIH1cblxuICBmdW5jdGlvbiByZXF1ZXN0KG9wKSB7XG4gICAgY29uc3QgaWQgPSArK3NlcXVlbmNlXG4gICAgY29uc3QgcmVzdWx0ID0gd2FpdEZvcihpZCwgcmVxdWVzdFRpbWVvdXQpXG4gICAgdHJ5IHsgY2hpbGQuc3RkaW4ud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkoeyBpZCwgb3AgfSl9XFxuYCkgfSBjYXRjaCAoZXJyb3IpIHsgcmVzZXQoZXJyb3IpIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBwcmVsb2FkKCkge1xuICAgIGlmIChkaXNwb3NlZCkgcmV0dXJuXG4gICAgdHJ5IHsgYXdhaXQgbG9hZCgpIH0gY2F0Y2gge31cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgIGlmIChkaXNwb3NlZCB8fCBzdGF0dXMgIT09ICdpZGxlJykgcmV0dXJuXG4gICAgY29uc3QgdG9rZW4gPSArK2dlbmVyYXRpb25cbiAgICBzZXRTdGF0dXMoJ2xvYWRpbmcnKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBsb2FkKClcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuXG4gICAgICBzZXRTdGF0dXMoJ3N0YXJ0aW5nJylcbiAgICAgIGF3YWl0IHJlcXVlc3QoJ3N0YXJ0JylcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgc2V0U3RhdHVzKCdyZWNvcmRpbmcnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVyblxuICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIG51bGxcbiAgICBjb25zdCB0b2tlbiA9IGdlbmVyYXRpb25cbiAgICBzZXRTdGF0dXMoJ3RyYW5zY3JpYmluZycpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3QoJ3N0b3AnKVxuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm4gbnVsbFxuICAgICAgc2V0U3RhdHVzKCdpZGxlJylcbiAgICAgIHJldHVybiBjbGVhbkRpY3RhdGlvbihyZXN1bHQudGV4dCB8fCAnJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSB7XG4gICAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgICBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBjb25zdCB0b2tlbiA9ICsrZ2VuZXJhdGlvblxuICAgIGlmIChzdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiByZXNldCgpXG4gICAgc2V0U3RhdHVzKCdjYW5jZWxsaW5nJylcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmVxdWVzdCgnY2FuY2VsJylcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgc2V0U3RhdHVzKCdpZGxlJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSByZXNldChlcnJvcilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICAgICsrZ2VuZXJhdGlvblxuICAgIHJlc2V0KClcbiAgfVxuXG4gIHJldHVybiB7IHByZWxvYWQsIHN0YXJ0LCBzdG9wLCBjYW5jZWwsIGRpc3Bvc2UsIGdldCBzdGF0dXMoKSB7IHJldHVybiBzdGF0dXMgfSB9XG59XG4iLCAiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICdub2RlOnV0aWwnXG5pbXBvcnQgeyBta2R0ZW1wLCB3cml0ZUZpbGUsIHJtIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IHJtU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcblxuY29uc3QgZXhlY3V0ZSA9IHByb21pc2lmeShleGVjRmlsZSlcbmNvbnN0IGRpcmVjdG9yaWVzID0gbmV3IFNldCgpXG5wcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZGlyIG9mIGRpcmVjdG9yaWVzKSBybVN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbn0pXG5cbmNvbnN0IG1hY1NjcmlwdCA9IGBPYmpDLmltcG9ydCgnQXBwS2l0Jyk7IE9iakMuaW1wb3J0KCdGb3VuZGF0aW9uJyk7XG5jb25zdCBwYXN0ZWJvYXJkID0gJC5OU1Bhc3RlYm9hcmQuZ2VuZXJhbFBhc3RlYm9hcmQ7XG5jb25zdCBmaWxlcyA9IHBhc3RlYm9hcmQucHJvcGVydHlMaXN0Rm9yVHlwZSgnTlNGaWxlbmFtZXNQYm9hcmRUeXBlJyk7XG5sZXQgaW1hZ2UgPSBudWxsO1xuaWYgKCFmaWxlcy5pc05pbCgpICYmIGZpbGVzLmNvdW50ID4gMCkge1xuICBjb25zdCBwYXRoID0gT2JqQy51bndyYXAoZmlsZXMub2JqZWN0QXRJbmRleCgwKSk7XG4gIGlmICgvXFxcXC4ocG5nfGpwZT9nfGdpZnx3ZWJwKSQvaS50ZXN0KHBhdGgpKSBpbWFnZSA9ICQuTlNJbWFnZS5hbGxvYy5pbml0V2l0aENvbnRlbnRzT2ZGaWxlKHBhdGgpO1xufVxuaWYgKCFpbWFnZSB8fCBpbWFnZS5pc05pbCgpKSBpbWFnZSA9ICQuTlNJbWFnZS5hbGxvYy5pbml0V2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7XG5sZXQgZGF0YSA9IG51bGw7XG5pZiAoIWltYWdlLmlzTmlsKCkpIHtcbiAgY29uc3QgYml0bWFwID0gJC5OU0JpdG1hcEltYWdlUmVwLmltYWdlUmVwV2l0aERhdGEoaW1hZ2UuVElGRlJlcHJlc2VudGF0aW9uKTtcbiAgZGF0YSA9IGJpdG1hcC5yZXByZXNlbnRhdGlvblVzaW5nVHlwZVByb3BlcnRpZXMoJC5OU0JpdG1hcEltYWdlRmlsZVR5cGVQTkcsICQoe30pKTtcbn1cbmRhdGEgPyBPYmpDLnVud3JhcChkYXRhLmJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9ucygwKSkgOiAnJ2BcblxuY29uc3Qgd2luZG93c1NjcmlwdCA9IGBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lIFN5c3RlbS5XaW5kb3dzLkZvcm1zOyBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lIFN5c3RlbS5EcmF3aW5nO1xuaWYgKFtTeXN0ZW0uV2luZG93cy5Gb3Jtcy5DbGlwYm9hcmRdOjpDb250YWluc0ltYWdlKCkpIHtcbiAgJGltYWdlID0gW1N5c3RlbS5XaW5kb3dzLkZvcm1zLkNsaXBib2FyZF06OkdldEltYWdlKCk7XG4gICRzdHJlYW0gPSBOZXctT2JqZWN0IFN5c3RlbS5JTy5NZW1vcnlTdHJlYW07XG4gIHRyeSB7ICRpbWFnZS5TYXZlKCRzdHJlYW0sIFtTeXN0ZW0uRHJhd2luZy5JbWFnaW5nLkltYWdlRm9ybWF0XTo6UG5nKTsgW0NvbnZlcnRdOjpUb0Jhc2U2NFN0cmluZygkc3RyZWFtLlRvQXJyYXkoKSkgfVxuICBmaW5hbGx5IHsgJHN0cmVhbS5EaXNwb3NlKCk7ICRpbWFnZS5EaXNwb3NlKCkgfVxufWBcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRDbGlwYm9hcmRJbWFnZSh7IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSwgZW52ID0gcHJvY2Vzcy5lbnYsIHJ1biA9IGV4ZWN1dGUgfSA9IHt9KSB7XG4gIGlmIChlbnYuU1NIX0NPTk5FQ1RJT04gfHwgZW52LlNTSF9UVFkpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGltYWdlcyBhcmUgdW5hdmFpbGFibGUgb3ZlciBTU0gnKVxuICBjb25zdCBvcHRpb25zID0geyBlbmNvZGluZzogJ2J1ZmZlcicsIHRpbWVvdXQ6IDEwMDAwLCBtYXhCdWZmZXI6IDMyICogMTAyNCAqIDEwMjQgfVxuICBsZXQgZGF0YVxuICB0cnkge1xuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oJ29zYXNjcmlwdCcsIFsnLWwnLCAnSmF2YVNjcmlwdCcsICctZScsIG1hY1NjcmlwdF0sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpLCAnYmFzZTY0JylcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKCdwb3dlcnNoZWxsLmV4ZScsIFsnLU5vUHJvZmlsZScsICctTm9uSW50ZXJhY3RpdmUnLCAnLVNUQScsICctQ29tbWFuZCcsIHdpbmRvd3NTY3JpcHRdLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dC50b1N0cmluZygpLnRyaW0oKSwgJ2Jhc2U2NCcpXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgICAgY29uc3Qgd2F5bGFuZCA9IEJvb2xlYW4oZW52LldBWUxBTkRfRElTUExBWSlcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSB3YXlsYW5kID8gJ3dsLXBhc3RlJyA6ICd4Y2xpcCdcbiAgICAgIGNvbnN0IHsgc3Rkb3V0OiB0eXBlcyB9ID0gYXdhaXQgcnVuKGNvbW1hbmQsIHdheWxhbmQgPyBbJy0tbGlzdC10eXBlcyddIDogWyctc2VsZWN0aW9uJywgJ2NsaXBib2FyZCcsICctdCcsICdUQVJHRVRTJywgJy1vJ10sIG9wdGlvbnMpXG4gICAgICBpZiAoIXR5cGVzLnRvU3RyaW5nKCkuc3BsaXQoL1xccysvKS5pbmNsdWRlcygnaW1hZ2UvcG5nJykpIHJldHVybiBudWxsXG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKGNvbW1hbmQsIHdheWxhbmQgPyBbJy0tdHlwZScsICdpbWFnZS9wbmcnLCAnLS1uby1uZXdsaW5lJ10gOiBbJy1zZWxlY3Rpb24nLCAnY2xpcGJvYXJkJywgJy10JywgJ2ltYWdlL3BuZycsICctbyddLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgaW1hZ2VzIGFyZSB1bnN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtJylcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCByZWFkZXIgdW5hdmFpbGFibGU6IGluc3RhbGwgJyArIChlbnYuV0FZTEFORF9ESVNQTEFZID8gJ3dsLWNsaXBib2FyZCcgOiBwbGF0Zm9ybSA9PT0gJ2xpbnV4JyA/ICd4Y2xpcCcgOiAndGhlIHN5c3RlbSBjbGlwYm9hcmQgdG9vbHMnKSlcbiAgICB0aHJvdyBlcnJvclxuICB9XG4gIGlmICghZGF0YS5sZW5ndGgpIHJldHVybiBudWxsXG4gIGlmICghZGF0YS5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oWzEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTBdKSkpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGRpZCBub3QgcmV0dXJuIGEgUE5HIGltYWdlJylcbiAgY29uc3QgZGlyID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCAncGljby1jbGlwYm9hcmQtJykpXG4gIGRpcmVjdG9yaWVzLmFkZChkaXIpXG4gIGNvbnN0IGRpc3Bvc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcm0oZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICBkaXJlY3Rvcmllcy5kZWxldGUoZGlyKVxuICB9XG4gIGNvbnN0IHBhdGggPSBqb2luKGRpciwgJ2NsaXBib2FyZC5wbmcnKVxuICB0cnkge1xuICAgIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBkYXRhLCB7IG1vZGU6IDBvNjAwIH0pXG4gICAgcmV0dXJuIHsgcGF0aCwgZGlzcG9zZSB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYXdhaXQgZGlzcG9zZSgpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGlwYm9hcmRJbnB1dCh7IHJlYWRJbWFnZSwgZ2V0RHJhZnQsIGF0dGFjaEltYWdlLCBzZXRJbnB1dCwgb25FcnJvciB9KSB7XG4gIGxldCBwZW5kaW5nID0gZmFsc2VcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHBhc3RlSW1hZ2UoKSB7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVyblxuICAgIHBlbmRpbmcgPSB0cnVlXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RHJhZnQoKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHJlYWRJbWFnZSgpXG4gICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgIG9uRXJyb3IoJ05vIGltYWdlIG9uIHRoZSBjbGlwYm9hcmQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBnZXREcmFmdCgpXG4gICAgICBpZiAoY3VycmVudC5yZXZpc2lvbiAhPT0gdGFyZ2V0LnJldmlzaW9uIHx8IGN1cnJlbnQuc2Vzc2lvbiAhPT0gdGFyZ2V0LnNlc3Npb24gfHwgY3VycmVudC52YWx1ZSAhPT0gdGFyZ2V0LnZhbHVlIHx8IGN1cnJlbnQuY3Vyc29yICE9PSB0YXJnZXQuY3Vyc29yKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICBvbkVycm9yKCdDbGlwYm9hcmQgaW1hZ2Ugbm90IGF0dGFjaGVkOiB0aGUgZHJhZnQgY2hhbmdlZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWwgPSBhd2FpdCBhdHRhY2hJbWFnZShpbWFnZS5wYXRoKVxuICAgICAgaWYgKCFsYWJlbCkge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBhdHRhY2htZW50IGZhaWxlZCcpXG4gICAgICB9XG4gICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgICBzZXRJbnB1dChiZWZvcmUgKyBsYWJlbCArIGFmdGVyLCBiZWZvcmUubGVuZ3RoICsgbGFiZWwubGVuZ3RoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGBDbGlwYm9hcmQgcGFzdGUgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGVuZGluZyA9IGZhbHNlXG4gICAgfVxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpY3RhdGlvbklucHV0KHsgZGljdGF0aW9uLCBnZXRJbnB1dCwgc2V0SW5wdXQgfSkge1xuICBsZXQgZHJhZnQgPSBudWxsXG4gIGxldCBnZW5lcmF0aW9uID0gMFxuXG4gIGZ1bmN0aW9uIHN0YXJ0KHsgdmFsdWUsIGN1cnNvciB9KSB7XG4gICAgaWYgKGRpY3RhdGlvbi5zdGF0dXMgIT09ICdpZGxlJykgcmV0dXJuXG4gICAgZHJhZnQgPSB7IHZhbHVlLCBjdXJzb3IgfVxuICAgICsrZ2VuZXJhdGlvblxuICAgIHZvaWQgZGljdGF0aW9uLnN0YXJ0KClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgY29uc3QgdG9rZW4gPSBnZW5lcmF0aW9uXG4gICAgY29uc3QgdGFyZ2V0ID0gZHJhZnRcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZGljdGF0aW9uLnN0b3AoKVxuICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbiB8fCAhdGFyZ2V0IHx8IHRleHQgPT0gbnVsbCB8fCBnZXRJbnB1dCgpICE9PSB0YXJnZXQudmFsdWUpIHJldHVyblxuICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldC52YWx1ZS5zbGljZSgwLCB0YXJnZXQuY3Vyc29yKVxuICAgIGNvbnN0IGxlYWQgPSB0ZXh0ICYmIGJlZm9yZSAmJiAhL1xccyQvLnRlc3QoYmVmb3JlKSAmJiAhL15cXHMvLnRlc3QodGV4dCkgPyAnICcgOiAnJ1xuICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgY29uc3QgdHJhaWwgPSB0ZXh0ICYmIGFmdGVyICYmICEvXFxzJC8udGVzdCh0ZXh0KSAmJiAhL15bXFxzLiw7OiE/XS8udGVzdChhZnRlcikgPyAnICcgOiAnJ1xuICAgIHNldElucHV0KGJlZm9yZSArIGxlYWQgKyB0ZXh0ICsgdHJhaWwgKyBhZnRlcilcbiAgICBkcmFmdCA9IG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICArK2dlbmVyYXRpb25cbiAgICBkcmFmdCA9IG51bGxcbiAgICB2b2lkIGRpY3RhdGlvbi5jYW5jZWwoKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlKGV2ZW50KSB7XG4gICAgaWYgKGRpY3RhdGlvbi5zdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScgfHwgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpKSBjYW5jZWwoKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicgJiYgIWV2ZW50LnNoaWZ0ICYmICFldmVudC5tZXRhICYmIGRpY3RhdGlvbi5zdGF0dXMgPT09ICdyZWNvcmRpbmcnKSB2b2lkIHN0b3AoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4geyBzdGFydCwgc3RvcCwgY2FuY2VsLCBoYW5kbGUgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQoeyBjYXB0dXJlUmVnaW9uLCBnZXREcmFmdCwgYXR0YWNoSW1hZ2UsIHNldElucHV0LCBvbkVycm9yLCBvblN0YXR1cyA9ICgpID0+IHt9IH0pIHtcbiAgbGV0IHBlbmRpbmcgPSBmYWxzZVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY2FwdHVyZUltYWdlKCkge1xuICAgIGlmIChwZW5kaW5nKSByZXR1cm5cbiAgICBwZW5kaW5nID0gdHJ1ZVxuICAgIG9uU3RhdHVzKCdjYXB0dXJpbmcnKVxuICAgIGNvbnN0IHRhcmdldCA9IGdldERyYWZ0KClcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCBjYXB0dXJlUmVnaW9uKClcbiAgICAgIGlmICghaW1hZ2UpIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudCA9IGdldERyYWZ0KClcbiAgICAgIGlmIChjdXJyZW50LnJldmlzaW9uICE9PSB0YXJnZXQucmV2aXNpb24gfHwgY3VycmVudC5zZXNzaW9uICE9PSB0YXJnZXQuc2Vzc2lvbiB8fCBjdXJyZW50LnZhbHVlICE9PSB0YXJnZXQudmFsdWUgfHwgY3VycmVudC5jdXJzb3IgIT09IHRhcmdldC5jdXJzb3IpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIG9uRXJyb3IoJ1NjcmVlbiBjYXB0dXJlIG5vdCBhdHRhY2hlZDogdGhlIGRyYWZ0IGNoYW5nZWQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhYmVsID0gYXdhaXQgYXR0YWNoSW1hZ2UoaW1hZ2UucGF0aClcbiAgICAgIGlmICghbGFiZWwpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2UgYXR0YWNobWVudCBmYWlsZWQnKVxuICAgICAgfVxuICAgICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgICBjb25zdCBhZnRlciA9IHRhcmdldC52YWx1ZS5zbGljZSh0YXJnZXQuY3Vyc29yKVxuICAgICAgc2V0SW5wdXQoYmVmb3JlICsgbGFiZWwgKyBhZnRlciwgYmVmb3JlLmxlbmd0aCArIGxhYmVsLmxlbmd0aClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihgU2NyZWVuIGNhcHR1cmUgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGVuZGluZyA9IGZhbHNlXG4gICAgICBvblN0YXR1cygnaWRsZScpXG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBta2R0ZW1wLCB1bmxpbmsgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcblxubGV0IGNhcHR1cmVEaXIgPSBudWxsXG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUNhcHR1cmVEaXIoKSB7XG4gIGNhcHR1cmVEaXIgPz89IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgJ3BpY28tY2FwdHVyZS0nKSlcbiAgcmV0dXJuIGNhcHR1cmVEaXJcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVSZWdpb24oKSB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnZGFyd2luJykgdGhyb3cgbmV3IEVycm9yKCdzY3JlZW4gY2FwdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBvbiBtYWNPUycpXG4gIGNvbnN0IGZpbGUgPSBqb2luKGF3YWl0IGVuc3VyZUNhcHR1cmVEaXIoKSwgYGNhcHR1cmUtJHtEYXRlLm5vdygpfS5wbmdgKVxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZXhlY0ZpbGUoJ3NjcmVlbmNhcHR1cmUnLCBbJy1pJywgJy14JywgZmlsZV0sIChlcnJvcikgPT4ge1xuICAgICAgaWYgKCFlcnJvciB8fCAhZXhpc3RzU3luYyhmaWxlKSkgcmVzb2x2ZSgpXG4gICAgICBlbHNlIHJlamVjdChlcnJvcilcbiAgICB9KVxuICB9KVxuICBpZiAoIWV4aXN0c1N5bmMoZmlsZSkpIHJldHVybiBudWxsXG4gIHJldHVybiB7XG4gICAgcGF0aDogZmlsZSxcbiAgICBkaXNwb3NlOiAoKSA9PiB1bmxpbmsoZmlsZSkuY2F0Y2goKCkgPT4ge30pLFxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBvc2VyRmlsZXMoKSB7XG4gIGxldCB0ZXh0ID0gJydcbiAgbGV0IHJlZmVyZW5jZXMgPSBbXVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSh2YWx1ZSwgYXR0YWNobWVudHMpIHtcbiAgICBsZXQgc3RhcnQgPSAwXG4gICAgd2hpbGUgKHN0YXJ0IDwgdGV4dC5sZW5ndGggJiYgc3RhcnQgPCB2YWx1ZS5sZW5ndGggJiYgdGV4dFtzdGFydF0gPT09IHZhbHVlW3N0YXJ0XSkgc3RhcnQrK1xuICAgIGxldCBlbmQgPSB0ZXh0Lmxlbmd0aFxuICAgIGxldCBuZXh0RW5kID0gdmFsdWUubGVuZ3RoXG4gICAgd2hpbGUgKGVuZCA+IHN0YXJ0ICYmIG5leHRFbmQgPiBzdGFydCAmJiB0ZXh0W2VuZCAtIDFdID09PSB2YWx1ZVtuZXh0RW5kIC0gMV0pIHtcbiAgICAgIGVuZC0tXG4gICAgICBuZXh0RW5kLS1cbiAgICB9XG4gICAgY29uc3QgZGVsdGEgPSBuZXh0RW5kIC0gZW5kXG4gICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmxhdE1hcCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICBpZiAocmVmZXJlbmNlLmVuZCA8PSBzdGFydCkgcmV0dXJuIFtyZWZlcmVuY2VdXG4gICAgICBpZiAocmVmZXJlbmNlLnN0YXJ0ID49IGVuZCkgcmV0dXJuIFt7IC4uLnJlZmVyZW5jZSwgc3RhcnQ6IHJlZmVyZW5jZS5zdGFydCArIGRlbHRhLCBlbmQ6IHJlZmVyZW5jZS5lbmQgKyBkZWx0YSB9XVxuICAgICAgcmV0dXJuIFtdXG4gICAgfSlcbiAgICB0ZXh0ID0gdmFsdWVcbiAgICBjb25zdCBtYXRjaGVzID0gWy4uLnRleHQubWF0Y2hBbGwoL1xcW0ZpbGUgI1xcZCtcXF0vZyldLnJldmVyc2UoKVxuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgY29uc3QgYXR0YWNobWVudCA9IGF0dGFjaG1lbnRzLmdldChtYXRjaFswXSlcbiAgICAgIGlmIChhdHRhY2htZW50Py5raW5kICE9PSAnZmlsZScpIGNvbnRpbnVlXG4gICAgICBjb25zdCBwYXRoID0gYXR0YWNobWVudC5wYXRoXG4gICAgICBjb25zdCBvZmZzZXQgPSBwYXRoLmxlbmd0aCAtIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMubWFwKChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5zdGFydCA+PSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICA/IHsgLi4ucmVmZXJlbmNlLCBzdGFydDogcmVmZXJlbmNlLnN0YXJ0ICsgb2Zmc2V0LCBlbmQ6IHJlZmVyZW5jZS5lbmQgKyBvZmZzZXQgfVxuICAgICAgICA6IHJlZmVyZW5jZSlcbiAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIG1hdGNoLmluZGV4KSArIHBhdGggKyB0ZXh0LnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKVxuICAgICAgcmVmZXJlbmNlcy5wdXNoKHsgc3RhcnQ6IG1hdGNoLmluZGV4LCBlbmQ6IG1hdGNoLmluZGV4ICsgcGF0aC5sZW5ndGgsIHBsYWNlaG9sZGVyOiBtYXRjaFswXSB9KVxuICAgIH1cbiAgICByZWZlcmVuY2VzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KVxuICAgIHJldHVybiB0ZXh0XG4gIH1cblxuICBmdW5jdGlvbiBjb250ZW50KCkge1xuICAgIGxldCB2YWx1ZSA9IHRleHRcbiAgICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiBbLi4ucmVmZXJlbmNlc10ucmV2ZXJzZSgpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHJlZmVyZW5jZS5zdGFydCkgKyByZWZlcmVuY2UucGxhY2Vob2xkZXIgKyB2YWx1ZS5zbGljZShyZWZlcmVuY2UuZW5kKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJldHVybiB7IHVwZGF0ZSwgY29udGVudCB9XG59XG4iLCAiY29uc3QgYmFycyA9ICdcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1ODgnXG5jb25zdCB3aWR0aCA9IDE2XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRMZXZlbChsZXZlbHMsIGxldmVsKSB7XG4gIHJldHVybiBbLi4ubGV2ZWxzLnNsaWNlKDEgLSB3aWR0aCksIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGxldmVsKSldXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWN0YXRpb25JbmRpY2F0b3Ioc3RhdHVzLCBsZXZlbHMpIHtcbiAgaWYgKHN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm4gJydcbiAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiBgICR7c3RhdHVzfSBgXG4gIGNvbnN0IHNhbXBsZXMgPSBbLi4uQXJyYXkoTWF0aC5tYXgoMCwgd2lkdGggLSBsZXZlbHMubGVuZ3RoKSkuZmlsbCgwKSwgLi4ubGV2ZWxzLnNsaWNlKC13aWR0aCldXG4gIHJldHVybiBgICR7c2FtcGxlcy5tYXAoKGxldmVsKSA9PiBiYXJzW01hdGgucm91bmQobGV2ZWwgKiAoYmFycy5sZW5ndGggLSAxKSldKS5qb2luKCcnKX0gcmVjb3JkaW5nIGBcbn1cbiIsICJpbXBvcnQgeyBjb2RlVG9BTlNJIH0gZnJvbSAnQHNoaWtpanMvY2xpJ1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgc2hpa2lUaGVtZSB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IExBTkdTID0ge1xuICBqczogJ2pzJywgbWpzOiAnanMnLCBjanM6ICdqcycsIGpzeDogJ2pzeCcsIHRzOiAndHMnLCB0c3g6ICd0c3gnLFxuICBqc29uOiAnanNvbicsIGpzb25sOiAnanNvbicsIG1kOiAnbWQnLCBweTogJ3B5dGhvbicsIHJiOiAncnVieScsIGdvOiAnZ28nLFxuICByczogJ3J1c3QnLCBjOiAnYycsIGg6ICdjJywgY3BwOiAnY3BwJywgamF2YTogJ2phdmEnLCBjc3M6ICdjc3MnLFxuICBodG1sOiAnaHRtbCcsIHZ1ZTogJ3Z1ZScsIHNoOiAnYmFzaCcsIGJhc2g6ICdiYXNoJywgenNoOiAnYmFzaCcsXG4gIHltbDogJ3lhbWwnLCB5YW1sOiAneWFtbCcsIHRvbWw6ICd0b21sJywgc3FsOiAnc3FsJywgc3ZlbHRlOiAnc3ZlbHRlJyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhbmdGb3JQYXRoKHBhdGgpIHtcbiAgY29uc3QgZXh0ID0gU3RyaW5nKHBhdGgpLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKVxuICByZXR1cm4gTEFOR1NbZXh0XSB8fCAndHh0J1xufVxuXG5jb25zdCBjYWNoZSA9IG5ldyBNYXAoKVxuY29uc3QgcGVuZGluZyA9IG5ldyBTZXQoKVxuY29uc3QgZmFpbGVkID0gbmV3IFNldCgpXG5jb25zdCBbdmVyc2lvbiwgc2V0VmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcblxuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodFZlcnNpb24gPSB2ZXJzaW9uXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHQoY29kZSwgbGFuZykge1xuICBjb25zdCBzYWZlTGFuZyA9IGxhbmcgJiYgIWZhaWxlZC5oYXMobGFuZykgPyBsYW5nIDogJ3R4dCdcbiAgY29uc3QgdGhlbWUgPSBzaGlraVRoZW1lKClcbiAgcmV0dXJuIGNvZGVcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7dGhlbWV9XFxuJHtzYWZlTGFuZ31cXG4ke2xpbmV9YFxuICAgICAgaWYgKGNhY2hlLmhhcyhrZXkpKSByZXR1cm4gY2FjaGUuZ2V0KGtleSlcbiAgICAgIHdhcm0obGluZSwgc2FmZUxhbmcsIHRoZW1lLCBrZXkpXG4gICAgICByZXR1cm4gbGluZVxuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpXG59XG5cbmZ1bmN0aW9uIHdhcm0obGluZSwgbGFuZywgdGhlbWUsIGtleSkge1xuICBpZiAocGVuZGluZy5oYXMoa2V5KSkgcmV0dXJuXG4gIHBlbmRpbmcuYWRkKGtleSlcbiAgY29kZVRvQU5TSShsaW5lLCBsYW5nLCB0aGVtZSlcbiAgICAudGhlbigoYW5zaSkgPT4gY2FjaGUuc2V0KGtleSwgYW5zaS5yZXBsYWNlKC9cXG4kLywgJycpKSlcbiAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgZmFpbGVkLmFkZChsYW5nKVxuICAgICAgY2FjaGUuc2V0KGtleSwgbGluZSlcbiAgICB9KVxuICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgIHBlbmRpbmcuZGVsZXRlKGtleSlcbiAgICAgIHNldFZlcnNpb24oKHYpID0+IHYgKyAxKVxuICAgIH0pXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGFjdGl2aXR5Um93cyhyb3dzKSB7XG4gIGNvbnN0IGFjdGl2ZSA9IChyb3cpID0+IHJvdy5zdGF0dXMgPT09ICdydW5uaW5nJyB8fCByb3cuc3RhdHVzID09PSAncXVldWVkJ1xuICByZXR1cm4gWy4uLnJvd3NdLnNvcnQoKGEsIGIpID0+IE51bWJlcihhY3RpdmUoYikpIC0gTnVtYmVyKGFjdGl2ZShhKSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3Rpdml0eVN0cmlwU2l6ZXMoaGVpZ2h0LCBsZW5ndGhzLCBtYXJnaW4gPSAxKSB7XG4gIGNvbnN0IGdyb3VwcyA9IGxlbmd0aHMuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aFxuICBpZiAoIWdyb3VwcykgcmV0dXJuIGxlbmd0aHMubWFwKCgpID0+IDApXG4gIGNvbnN0IGJ1ZGdldCA9IE1hdGguZmxvb3IoaGVpZ2h0ICogMC4yKVxuICBjb25zdCBzaXplcyA9IGxlbmd0aHMubWFwKChsZW5ndGgpID0+IGxlbmd0aCA/IDEgOiAwKVxuICBjb25zdCB1c2VkID0gKCkgPT4gbWFyZ2luICsgMSArIGdyb3VwcyArIHNpemVzLnJlZHVjZSgoc3VtLCBzaXplLCBpKSA9PiBzdW0gKyBzaXplICsgTnVtYmVyKHNpemUgPCBsZW5ndGhzW2ldKSwgMClcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gc2l6ZXMubWFwKChzaXplLCBpKSA9PiBpKVxuICAgICAgLmZpbHRlcigoaSkgPT4gc2l6ZXNbaV0gPCBsZW5ndGhzW2ldKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHNpemVzW2FdIC0gc2l6ZXNbYl0gfHwgYSAtIGIpXG4gICAgY29uc3QgbmV4dCA9IGNhbmRpZGF0ZXMuZmluZCgoaSkgPT4gdXNlZCgpICsgTnVtYmVyKHNpemVzW2ldICsgMSA8IGxlbmd0aHNbaV0pIDw9IGJ1ZGdldClcbiAgICBpZiAobmV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gc2l6ZXNcbiAgICBzaXplc1tuZXh0XSsrXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwV2luZG93U3RhcnQoY3VycmVudCwgdGFyZ2V0LCBsZW5ndGgsIHNpemUpIHtcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgoMCwgbGVuZ3RoIC0gc2l6ZSlcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjdXJyZW50LCBtYXgpKVxuICBjb25zdCBzY3JvbGxvZmYgPSBzaXplID4gMiA/IDEgOiAwXG4gIGlmICh0YXJnZXQgPCAwKSByZXR1cm4gc3RhcnRcbiAgaWYgKHRhcmdldCA8IHN0YXJ0ICsgc2Nyb2xsb2ZmKSByZXR1cm4gTWF0aC5tYXgoMCwgdGFyZ2V0IC0gc2Nyb2xsb2ZmKVxuICBpZiAodGFyZ2V0ID49IHN0YXJ0ICsgc2l6ZSAtIHNjcm9sbG9mZikgcmV0dXJuIE1hdGgubWluKG1heCwgdGFyZ2V0IC0gc2l6ZSArIHNjcm9sbG9mZiArIDEpXG4gIHJldHVybiBzdGFydFxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgRGlmZiwgZWFzZSwgSG9yaXpvbnRhbFNjcm9sbEJveCwgbGluZWFyLCBNYXJrZG93biwgU2Nyb2xsQm94LCBTcGlubmVyLCB1c2VBbmltYXRlZCwgdXNlSGl0VGVzdCwgdXNlSW5wdXQsIHVzZU1vdXNlIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcsIFJFRCwgR1JFRU4sIFBFRVIgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgaGlnaGxpZ2h0LCBsYW5nRm9yUGF0aCB9IGZyb20gJy4vaGlnaGxpZ2h0LmpzJ1xuaW1wb3J0IHsgY29tcGFjdFRyYW5zY3JpcHRSdW5zIH0gZnJvbSAnLi90cmFuc2NyaXB0LXdpbmRvdy5qcydcblxuZXhwb3J0IHsgZGVmYXVsdFRpdGxlIGFzIHVpVGl0bGUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rvb2xzL3JlY29yZGVyLmpzJ1xuXG5mdW5jdGlvbiBQcm9zZVNuaXBwZXQoeyB2YWx1ZSwgbGFuZ3VhZ2UsIGhpZ2hsaWdodDogaGlnaGxpZ2h0Q29kZSwgY29kZUJnIH0pIHtcbiAgY29uc3Qgc2hvd24gPSBoaWdobGlnaHRDb2RlID8gaGlnaGxpZ2h0Q29kZSh2YWx1ZSwgbGFuZ3VhZ2UpIDogdmFsdWVcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGJnOiBjb2RlQmcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgPHRleHQ+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+XG4gIClcbn1cblxuZnVuY3Rpb24gRGVsaWJlcmF0aW9uVHVybih7IGl0ZW0sIHZlcmJvc2UsIGNvbXBhY3RUb29sSGlzdG9yeSA9IGZhbHNlLCBwYWlyZWQgPSBmYWxzZSwgYm9yZGVyID0gdHJ1ZSwgcGFuZUhlaWdodCwgZm9jdXNlZCA9IGZhbHNlLCBvbkZvY3VzIH0pIHtcbiAgY29uc3QgcGFydGljaXBhbnRBID0gaXRlbS5yb2xlID09PSAncGFydGljaXBhbnQtYScgfHwgaXRlbS5yb2xlID09PSAncHJvcG9zZXInXG4gIGNvbnN0IHN5bnRoZXNpcyA9IGl0ZW0ucm9sZSA9PT0gJ3N5bnRoZXNpcydcbiAgY29uc3QgbGFiZWwgPSBzeW50aGVzaXMgPyAnU3ludGhlc2lzJyA6IGAke3BhcnRpY2lwYW50QSA/ICdQYXJ0aWNpcGFudCBBJyA6ICdQYXJ0aWNpcGFudCBCJ30gIHJvdW5kICR7aXRlbS5yb3VuZH1gXG4gIGNvbnN0IHRleHQgPSBpdGVtLmludGVycnVwdGVkID8gYCR7aXRlbS50ZXh0fSAqKGludGVycnVwdGVkKSpgIDogaXRlbS50ZXh0XG4gIGNvbnN0IFtvZmZzZXQsIHNldE9mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZvbGxvdywgc2V0Rm9sbG93XSA9IGNyZWF0ZVNpZ25hbCh0cnVlKVxuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChwYW5lSGVpZ2h0ICYmIGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSkgJiYgKGV2ZW50LmFjdGlvbiA9PT0gJ3Njcm9sbCcgfHwgZXZlbnQuYWN0aW9uID09PSAncHJlc3MnKSkgb25Gb2N1cz8uKClcbiAgfSlcbiAgY29uc3QgdG9vbHMgPSBjb21wYWN0VG9vbEhpc3RvcnkgPyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMoaXRlbS50b29scyB8fCBbXSwgISFpdGVtLmFjdGl2ZSAmJiAhaXRlbS50ZXh0KSA6IGl0ZW0udG9vbHMgfHwgW11cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIHBhZGRpbmdYOiBwYWlyZWQgPyAwIDogMiwgaGVpZ2h0OiBwYW5lSGVpZ2h0LCBiZzogcGFpcmVkID8gUEFORUxfQkcgOiB1bmRlZmluZWQgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBmbGV4R3JvdzogcGFuZUhlaWdodCA/IDEgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgIHtib3JkZXIgJiYgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IHN5bnRoZXNpcyB8fCBwYXJ0aWNpcGFudEEgPyBhY2NlbnQoKSA6IE1VVEVEIH19IC8+fVxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgYmc6IHN5bnRoZXNpcyA/IFNFTEVDVF9CRyA6IHBhcnRpY2lwYW50QSB8fCBwYWlyZWQgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCB8fCBzeW50aGVzaXMgfHwgcGFydGljaXBhbnRBID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57bGFiZWx9PC90ZXh0PlxuICAgICAgICAgIHtwYW5lSGVpZ2h0ID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveFxuICAgICAgICAgICAgICBzdHlsZT17eyBmbGV4R3JvdzogMSB9fVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQ9e2ZvbGxvdygpID8gMWU5IDogb2Zmc2V0KCl9XG4gICAgICAgICAgICAgIG9uU2Nyb2xsPXsobmV4dCwgbWV0YSkgPT4geyBzZXRPZmZzZXQobmV4dCk7IHNldEZvbGxvdyghIW1ldGE/LmF0Qm90dG9tKSB9fVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPERlbGliZXJhdGlvbkNvbnRlbnQgdG9vbHM9e3Rvb2xzfSB0ZXh0PXt0ZXh0fSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IDxEZWxpYmVyYXRpb25Db250ZW50IHRvb2xzPXt0b29sc30gdGV4dD17dGV4dH0gdmVyYm9zZT17dmVyYm9zZX0gLz59XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gRGVsaWJlcmF0aW9uQ29udGVudCh7IHRvb2xzLCB0ZXh0LCB2ZXJib3NlIH0pIHtcbiAgcmV0dXJuIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAge3Rvb2xzLm1hcCgodG9vbCkgPT4gPE1lc3NhZ2Uga2V5PXt0b29sLmNhbGxJZH0gaXRlbT17dG9vbH0gdmVyYm9zZT17dmVyYm9zZX0gLz4pfVxuICAgICAgICAgIHt0ZXh0ICYmIHRvb2xzLmxlbmd0aCA+IDAgJiYgPHRleHQ+IDwvdGV4dD59XG4gICAgICAgICAge3RleHQgJiYgKFxuICAgICAgICAgICAgPE1hcmtkb3duXG4gICAgICAgICAgICAgIHRleHQ9e3RleHR9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgICBjb2RlQmc9e251bGx9XG4gICAgICAgICAgICAgIGNvZGVCbG9jaz17VHJhbnNjcmlwdENvZGVCbG9ja31cbiAgICAgICAgICAgICAgdGFibGVCb3JkZXJDb2xvcj17TVVURUR9XG4gICAgICAgICAgICAgIHRhYmxlUm93SG92ZXJCZz17UEFORUxfQkd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gIDwvYm94PlxufVxuXG5mdW5jdGlvbiBkZWxpYmVyYXRpb25Sb3dzKHR1cm5zKSB7XG4gIGNvbnN0IHJvd3MgPSBbXVxuICBmb3IgKGNvbnN0IHR1cm4gb2YgdHVybnMpIHtcbiAgICBpZiAodHVybi5yb2xlID09PSAnc3ludGhlc2lzJyB8fCAhdHVybi5wYXJhbGxlbEdyb3VwKSB7XG4gICAgICByb3dzLnB1c2goW3R1cm5dKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSByb3dzLmZpbmQoKHJvdykgPT4gcm93WzBdPy5wYXJhbGxlbEdyb3VwID09PSB0dXJuLnBhcmFsbGVsR3JvdXApXG4gICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5wdXNoKHR1cm4pXG4gICAgZWxzZSByb3dzLnB1c2goW3R1cm5dKVxuICB9XG4gIHJldHVybiByb3dzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEZWxpYmVyYXRpb25FeGNoYW5nZSh7IHR1cm5zLCB2ZXJib3NlLCB3aWRlLCBjb21wYWN0VG9vbEhpc3RvcnkgPSBmYWxzZSwgdmlld3BvcnRIZWlnaHQsIGZvY3VzZWQgPSBmYWxzZSwgb25Gb2N1cyB9KSB7XG4gIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IGlkID0gdHVybiA9PiBgJHt0dXJuLnJvbGV9OiR7dHVybi5yb3VuZCA/PyAnc3ludGhlc2lzJ31gXG4gIGNvbnN0IHNlbGVjdGVkSWQgPSBzZWxlY3RlZCgpIHx8ICh0dXJuc1swXSAmJiBpZCh0dXJuc1swXSkpXG4gIGNvbnN0IGZvY3VzVHVybiA9IHR1cm4gPT4geyBzZXRTZWxlY3RlZChpZCh0dXJuKSk7IG9uRm9jdXM/LigpIH1cbiAgdXNlSW5wdXQoZXZlbnQgPT4ge1xuICAgIGlmICghZm9jdXNlZCB8fCAoZXZlbnQua2V5ICE9PSAnbGVmdCcgJiYgZXZlbnQua2V5ICE9PSAncmlnaHQnKSkgcmV0dXJuXG4gICAgY29uc3QgaW5kZXggPSB0dXJucy5maW5kSW5kZXgodHVybiA9PiBpZCh0dXJuKSA9PT0gc2VsZWN0ZWRJZClcbiAgICBjb25zdCBuZXh0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odHVybnMubGVuZ3RoIC0gMSwgaW5kZXggKyAoZXZlbnQua2V5ID09PSAnbGVmdCcgPyAtMSA6IDEpKSlcbiAgICBpZiAodHVybnNbbmV4dF0pIGZvY3VzVHVybih0dXJuc1tuZXh0XSlcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9KVxuICBjb25zdCBwYW5lSGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgPyBNYXRoLm1heCg2LCBNYXRoLmZsb29yKHZpZXdwb3J0SGVpZ2h0ICogKHR1cm5zLnNvbWUodHVybiA9PiB0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnKSA/IDAuNiA6IDEpKSAtIDEpIDogdW5kZWZpbmVkXG4gIGNvbnN0IHBhbmVQcm9wcyA9IHR1cm4gPT4gKHsgcGFuZUhlaWdodDogdHVybi5yb2xlID09PSAnc3ludGhlc2lzJyAmJiB2aWV3cG9ydEhlaWdodCA/IE1hdGgubWF4KDYsIE1hdGguZmxvb3Iodmlld3BvcnRIZWlnaHQgKiAwLjM1KSkgOiBwYW5lSGVpZ2h0LCBmb2N1c2VkOiBmb2N1c2VkICYmIHNlbGVjdGVkSWQgPT09IGlkKHR1cm4pLCBvbkZvY3VzOiAoKSA9PiBmb2N1c1R1cm4odHVybikgfSlcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtkZWxpYmVyYXRpb25Sb3dzKHR1cm5zKS5tYXAoKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ludGhlc2lzID0gcm93WzBdPy5yb2xlID09PSAnc3ludGhlc2lzJ1xuICAgICAgICBpZiAoIXdpZGUgfHwgc3ludGhlc2lzKSByZXR1cm4gcm93Lm1hcCgodHVybikgPT4gPERlbGliZXJhdGlvblR1cm4ga2V5PXtgJHt0dXJuLnJvbGV9OiR7dHVybi5yb3VuZCA/PyAnc3ludGhlc2lzJ31gfSBpdGVtPXt0dXJufSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeX0gey4uLnBhbmVQcm9wcyh0dXJuKX0gLz4pXG4gICAgICAgIGNvbnN0IGxlZnQgPSByb3cuZmluZCgodHVybikgPT4gdHVybi5yb2xlID09PSAncGFydGljaXBhbnQtYScgfHwgdHVybi5yb2xlID09PSAncHJvcG9zZXInKVxuICAgICAgICBjb25zdCByaWdodCA9IHJvdy5maW5kKCh0dXJuKSA9PiB0dXJuLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1iJyB8fCB0dXJuLnJvbGUgPT09ICdyZXZpZXdlcicpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Jvd1swXT8ucGFyYWxsZWxHcm91cCB8fCBgJHtyb3dbMF0/LnJvbGV9OiR7cm93WzBdPy5yb3VuZH06JHtpbmRleH1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93Jywgd2lkdGg6ICcxMDAlJywgb3ZlcmZsb3c6ICdjbGlwJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAnNTAlJywgbWluV2lkdGg6IDAsIG92ZXJmbG93OiAnY2xpcCcgfX0+e2xlZnQgJiYgPERlbGliZXJhdGlvblR1cm4gaXRlbT17bGVmdH0gdmVyYm9zZT17dmVyYm9zZX0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3Rvcnl9IHBhaXJlZCBib3JkZXI9e2ZhbHNlfSB7Li4ucGFuZVByb3BzKGxlZnQpfSAvPn08L2JveD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAgfX0gLz5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwLCBvdmVyZmxvdzogJ2NsaXAnIH19PntyaWdodCAmJiA8RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtyaWdodH0gdmVyYm9zZT17dmVyYm9zZX0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3Rvcnl9IHBhaXJlZCBib3JkZXI9e2ZhbHNlfSB7Li4ucGFuZVByb3BzKHJpZ2h0KX0gLz59PC9ib3g+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNZXNzYWdlKHsgaXRlbSwgdmVyYm9zZSwgc2hvd0xvY2tlZCA9IGZhbHNlIH0pIHtcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnKSByZXR1cm4gPFRvb2xHcm91cCBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd1c2VyJyAmJiBpdGVtLm9yaWdpbiA9PT0gJ3ZpZXcnKSB7XG4gICAgY29uc3QgbGFiZWwgPSAvXlxcW3ZpZXc6IChbXlxcXV0rKVxcXS8uZXhlYyhpdGVtLnRleHQpPy5bMV0gfHwgJ2ltYWdlJ1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyNzEzIFZpZXdlZCAke2xhYmVsfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2FnZW50LW5vdGljZS1ncm91cCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI2OTkgJHtpdGVtLm5vdGljZXMubGVuZ3RofSBhZ2VudHMgZmluaXNoZWRgfTwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dmVyYm9zZSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgICAge2l0ZW0ubm90aWNlcy5tYXAoKG5vdGljZSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19Pntub3RpY2UudGV4dC5yZXBsYWNlKC9eXFxbc3lzdGVtIG5vdGlmaWNhdGlvblxcXVxccyovLCAnJyl9PC90ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndG9vbCcpIHtcbiAgICByZXR1cm4gPFRvb2xDYXJkIHsuLi5pdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3N1bW1hcnknKSB7XG4gICAgY29uc3QgbGluZXMgPSBpdGVtLnRleHQuc3BsaXQoJ1xcbicpXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntpdGVtLnNvdXJjZSA9PT0gJ2NvbXBhY3QnID8gJ1x1MjcyNiBzdW1tYXJ5ICBjb252ZXJzYXRpb24gY29tcGFjdGVkIGFib3ZlIHRoaXMgcG9pbnQnIDogJ1x1MjcyNiBzdW1tYXJ5ICByZXdvdW5kIGNvbnZlcnNhdGlvbid9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2xpbmVzLmxlbmd0aH0gJHtsaW5lcy5sZW5ndGggPT09IDEgPyAnbGluZScgOiAnbGluZXMnfWB9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICAge3ZlcmJvc2UgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICAgIHtsaW5lcy5zbGljZSgwLCA1MDApLm1hcCgobGluZSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICAgIHtsaW5lcy5sZW5ndGggPiA1MDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyMDI2ICR7bGluZXMubGVuZ3RoIC0gNTAwfSBtb3JlIGxpbmVzYH08L3RleHQ+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rob3VnaHRzJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICA8TWFya2Rvd24gdGV4dD17aXRlbS50ZXh0fSBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fSAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdkZWxpYmVyYXRpb24tdHVybicpIHtcbiAgICByZXR1cm4gPGJveCBzdHlsZT17eyBtYXJnaW5Ub3A6IDEgfX0+PERlbGliZXJhdGlvblR1cm4gaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz48L2JveD5cbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdub3RpY2UnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjY5OSAke2l0ZW0udGV4dC5yZXBsYWNlKC9eXFxbc3lzdGVtIG5vdGlmaWNhdGlvblxcXVxccyovLCAnJyl9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2tpbGwnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjcyNiBza2lsbDogJHtpdGVtLm5hbWV9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc3RlZXItdG9vbHMnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjUwMFx1MjUwMCAke2l0ZW0uY291bnR9IHRvb2wgJHtpdGVtLmNvdW50ID09PSAxID8gJ2ludGVyYWN0aW9uJyA6ICdpbnRlcmFjdGlvbnMnfSBoaWRkZW4gXHUyNTAwXHUyNTAwYH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2hlbGwtY29tbWFuZCcpIHtcbiAgICBjb25zdCBzaG93biA9IGhpZ2hsaWdodChpdGVtLnRleHQsICdiYXNoJylcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J2NvbW1hbmQnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgICAge3Nob3duLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGkpID0+IDx0ZXh0IGtleT17aX0+e2Ake2kgPT09IDAgPyAnJCAnIDogJyAgJ30ke2xpbmUgfHwgJyAnfWB9PC90ZXh0Pil9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NoZWxsLW91dHB1dCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J291dHB1dCd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAgICB7aXRlbS50ZXh0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGkpID0+IDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD4pfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdwZWVyJykge1xuICAgIGNvbnN0IGluY29taW5nID0gaXRlbS5kaXJlY3Rpb24gPT09ICdpbmNvbWluZydcbiAgICBjb25zdCB1bnJlYWQgPSBpbmNvbWluZyAmJiAhaXRlbS5yZWFkXG4gICAgY29uc3QgY29sb3IgPSBpbmNvbWluZyAmJiBpdGVtLnJlYWQgPyBNVVRFRCA6IFBFRVJcbiAgICBjb25zdCBzdGF0dXMgPSBpbmNvbWluZyA/IGAgICR7dW5yZWFkID8gJ3VucmVhZCcgOiAncmVhZCd9YCA6IGAgICR7aXRlbS5zdGF0dXMgfHwgJ3Vua25vd24nfWBcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IFBFRVIsIGJvbGQ6IHRydWUgfX0+e2BAJHtpdGVtLmZyb20ubmFtZX0gXHUyMTkyIEAke2l0ZW0udG8ubmFtZX0ke2l0ZW0udXJnZW50ID8gJyAgdXJnZW50JyA6ICcnfWB9PC90ZXh0PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yLCBib2xkOiB1bnJlYWQgfX0+e3N0YXR1c308L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvciB9fT57aXRlbS50ZXh0fTwvdGV4dD5cbiAgICAgICAge2l0ZW0uZXJyb3IgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57aXRlbS5lcnJvcn08L3RleHQ+fVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3VzZXInKSB7XG4gICAgY29uc3QgbGFiZWwgPSBzaG93TG9ja2VkICYmIGl0ZW0ubG9ja2VkID8gJ0xvY2tlZCAgY29tcGFjdGVkJyA6IHNob3dMb2NrZWQgPyAnVXNlcicgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogUEFORUxfQkcgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBTRUxFQ1RfQkcgOiBQQU5FTF9CRywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBwYWRkaW5nTGVmdDogMSwgcGFkZGluZ1JpZ2h0OiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgICAgICAgIHtsYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57aXRlbS50ZXh0fTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBjb25zdCB0ZXh0ID0gaXRlbS5pbnRlcnJ1cHRlZCA/IGAke2l0ZW0udGV4dH0gKihpbnRlcnJ1cHRlZCkqYCA6IGl0ZW0udGV4dFxuICBjb25zdCBsYWJlbCA9IHNob3dMb2NrZWQgJiYgaXRlbS5sb2NrZWQgPyAnTG9ja2VkICBjb21wYWN0ZWQnIDogc2hvd0xvY2tlZCA/ICdBc3Npc3RhbnQnIDogbnVsbFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogdW5kZWZpbmVkIH19IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBwYWRkaW5nTGVmdDogMSwgcGFkZGluZ1JpZ2h0OiAyLCBwYWRkaW5nWTogc2hvd0xvY2tlZCA/IDEgOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gU0VMRUNUX0JHIDogdW5kZWZpbmVkIH19PlxuICAgICAgICAgIHtsYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgIHRleHQ9e3RleHR9XG4gICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgIGNvZGVCZz17bnVsbH1cbiAgICAgICAgICAgIGNvZGVCbG9jaz17VHJhbnNjcmlwdENvZGVCbG9ja31cbiAgICAgICAgICAgIHRhYmxlQm9yZGVyQ29sb3I9e01VVEVEfVxuICAgICAgICAgICAgdGFibGVSb3dIb3ZlckJnPXtQQU5FTF9CR31cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNvbXBhY3RUcmFuc2NyaXB0UnVucyhpdGVtcywgYWN0aXZlID0gZmFsc2UpIHtcbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7KSB7XG4gICAgaWYgKGl0ZW1zW2ldLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtc1tpXS5raW5kID09PSAndGhvdWdodHMnKSB7XG4gICAgICBsZXQgZW5kID0gaSArIDFcbiAgICAgIHdoaWxlIChlbmQgPCBpdGVtcy5sZW5ndGggJiYgKGl0ZW1zW2VuZF0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW1zW2VuZF0ua2luZCA9PT0gJ3Rob3VnaHRzJykpIGVuZCsrXG4gICAgICBjb25zdCBydW4gPSBpdGVtcy5zbGljZShpLCBlbmQpXG4gICAgICBjb25zdCB0b29scyA9IHJ1bi5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3Rvb2wnKVxuICAgICAgcmVzdWx0LnB1c2goeyBraW5kOiAndG9vbC1ncm91cCcsIGNhbGxJZDogdG9vbHMuYXQoLTEpPy5jYWxsSWQsIGl0ZW1zOiBydW4sIHRvb2xzLCBhY3RpdmU6IGFjdGl2ZSAmJiBlbmQgPT09IGl0ZW1zLmxlbmd0aCB9KVxuICAgICAgaSA9IGVuZFxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKGl0ZW1zW2ldLmtpbmQgPT09ICdub3RpY2UnICYmIGl0ZW1zW2ldLmFnZW50Q29tcGxldGlvbikge1xuICAgICAgbGV0IGVuZCA9IGkgKyAxXG4gICAgICB3aGlsZSAoZW5kIDwgaXRlbXMubGVuZ3RoICYmIGl0ZW1zW2VuZF0ua2luZCA9PT0gJ25vdGljZScgJiYgaXRlbXNbZW5kXS5hZ2VudENvbXBsZXRpb24pIGVuZCsrXG4gICAgICBjb25zdCBydW4gPSBpdGVtcy5zbGljZShpLCBlbmQpXG4gICAgICByZXN1bHQucHVzaChydW4ubGVuZ3RoID09PSAxID8gcnVuWzBdIDogeyBraW5kOiAnYWdlbnQtbm90aWNlLWdyb3VwJywgbm90aWNlczogcnVuIH0pXG4gICAgICBpID0gZW5kXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICByZXN1bHQucHVzaChpdGVtc1tpKytdKVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zY3JpcHRXaW5kb3coaXRlbXMsIHNpemUpIHtcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBpdGVtcy5sZW5ndGggLSBzaXplKVxuICBjb25zdCBoaWRkZW4gPSBpdGVtcy5zbGljZSgwLCBzdGFydClcbiAgcmV0dXJuIHtcbiAgICBpdGVtczogaXRlbXMuc2xpY2Uoc3RhcnQpLFxuICAgIGhpZGRlbkl0ZW1zOiBoaWRkZW4ubGVuZ3RoLFxuICAgIGhpZGRlbkNvdW50OiBoaWRkZW4ucmVkdWNlKCh0b3RhbCwgaXRlbSkgPT4gdG90YWwgKyBzb3VyY2VJdGVtQ291bnQoaXRlbSksIDApLFxuICB9XG59XG5cbmZ1bmN0aW9uIHNvdXJjZUl0ZW1Db3VudChpdGVtKSB7XG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJykgcmV0dXJuIGl0ZW0uaXRlbXMubGVuZ3RoXG4gIGlmIChpdGVtLmtpbmQgPT09ICdhZ2VudC1ub3RpY2UtZ3JvdXAnKSByZXR1cm4gaXRlbS5ub3RpY2VzLmxlbmd0aFxuICBpZiAoaXRlbS5raW5kID09PSAnc3RlZXItdG9vbHMnKSByZXR1cm4gaXRlbS5jb3VudFxuICByZXR1cm4gMVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgVGV4dElucHV0LCB1c2VMYXlvdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi90cmFuc2NyaXB0LmpzeCdcbmltcG9ydCB7IGFjY2VudCwgRkcsIE1VVEVELCBQQU5FTF9CRyB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyBjb252ZXJzYXRpb25NYXRjaGVzLCBoaWdobGlnaHRDb252ZXJzYXRpb24gfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbnZlcnNhdGlvbi1zZWFyY2guanMnXG5cbmZ1bmN0aW9uIFNjcm9sbEFuY2hvcih7IHRhcmdldCB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIHRhcmdldC5hbmNob3JZID0gbGF5b3V0LnlcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gU2VhcmNoTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIGN1cnJlbnRNYXRjaCwgc2VhcmNoIH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgaWYgKGN1cnJlbnRNYXRjaCkgc2VhcmNoLnNjcm9sbFRvTWF0Y2gobGF5b3V0LCBjdXJyZW50TWF0Y2gpXG4gIHJldHVybiA8TWVzc2FnZSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoKHsgZm0sIHZlcmJvc2UsIHNldEZvbGxvdywgc2V0T2Zmc2V0IH0pIHtcbiAgY29uc3QgW2FjdGl2ZSwgc2V0QWN0aXZlXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFtjb21taXR0ZWQsIHNldENvbW1pdHRlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtlbnRlckZvY3VzLCBzZXRFbnRlckZvY3VzXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Njcm9sbFJlcXVlc3QsIHNldFNjcm9sbFJlcXVlc3RdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtzY3JvbGxdID0gY3JlYXRlU2lnbmFsKHsgYW5jaG9yWTogMCwga2V5OiBudWxsIH0pXG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJGb2N1cygpIHtcbiAgICBpZiAoIWFjdGl2ZSgpKSByZXR1cm5cbiAgICBmbS5pdGVtKCdjb252ZXJzYXRpb24tc2VhcmNoJylcbiAgICBpZiAoZW50ZXJGb2N1cygpKSB7XG4gICAgICBzZXRFbnRlckZvY3VzKGZhbHNlKVxuICAgICAgZm0uZm9jdXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgc2V0QWN0aXZlKHRydWUpXG4gICAgc2V0UXVlcnkoJycpXG4gICAgc2V0Q29tbWl0dGVkKGZhbHNlKVxuICAgIHNldEluZGV4KDApXG4gICAgc2V0RW50ZXJGb2N1cyh0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2UoeyByZXN0b3JlRm9jdXMgPSB0cnVlIH0gPSB7fSkge1xuICAgIHNldEFjdGl2ZShmYWxzZSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRDb21taXR0ZWQoZmFsc2UpXG4gICAgc2V0SW5kZXgoMClcbiAgICBpZiAocmVzdG9yZUZvY3VzICYmIGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpIGZtLmZvY3VzKCdmZWVkJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50LCBtYXRjaGVzKSB7XG4gICAgaWYgKGFjdGl2ZSgpICYmICFmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpKSB7XG4gICAgICBjbG9zZSh7IHJlc3RvcmVGb2N1czogZmFsc2UgfSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmICghYWN0aXZlKCkgfHwgIWNvbW1pdHRlZCgpKSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCBjb3VudCA9IG1hdGNoZXMubGVuZ3RoXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIGNsb3NlKClcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICduJyAmJiAhZXZlbnQuc2hpZnQpIHtcbiAgICAgIGlmIChjb3VudCkge1xuICAgICAgICBzZXRJbmRleCgoaW5kZXgoKSArIDEpICUgY291bnQpXG4gICAgICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnTicgfHwgKGV2ZW50LnNoaWZ0ICYmIGV2ZW50LmtleSA9PT0gJ24nKSkge1xuICAgICAgaWYgKGNvdW50KSB7XG4gICAgICAgIHNldEluZGV4KChpbmRleCgpIC0gMSArIGNvdW50KSAlIGNvdW50KVxuICAgICAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnbycpIHJldHVybiBmYWxzZVxuICAgIGVsc2UgcmV0dXJuIHRydWVcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlKGl0ZW1zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnZlcnNhdGlvbk1hdGNoZXMoaXRlbXMsIHF1ZXJ5KCksIHZlcmJvc2UoKSlcbiAgICBjb25zdCBsYXN0SW5kZXggPSBNYXRoLm1heCgwLCBtYXRjaGVzLmxlbmd0aCAtIDEpXG4gICAgaWYgKGluZGV4KCkgPiBsYXN0SW5kZXgpIHNldEluZGV4KGxhc3RJbmRleClcbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2hlcyxcbiAgICAgIGl0ZW1zOiBhY3RpdmUoKSA/IGhpZ2hsaWdodENvbnZlcnNhdGlvbihpdGVtcywgcXVlcnkoKSwgaW5kZXgoKSwgdmVyYm9zZSgpKSA6IGl0ZW1zLFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvTWF0Y2gobGF5b3V0LCBtYXRjaCkge1xuICAgIGNvbnN0IHRhcmdldCA9IHNjcm9sbCgpXG4gICAgY29uc3Qga2V5ID0gYCR7cXVlcnkoKX1cXDAke2luZGV4KCl9XFwwJHt2ZXJib3NlKCl9XFwwJHtzY3JvbGxSZXF1ZXN0KCl9YFxuICAgIGlmICh0YXJnZXQua2V5ID09PSBrZXkpIHJldHVyblxuICAgIHRhcmdldC5rZXkgPSBrZXlcbiAgICBzZXRGb2xsb3coZmFsc2UpXG4gICAgc2V0T2Zmc2V0KE1hdGgubWF4KDAsIGxheW91dC55IC0gdGFyZ2V0LmFuY2hvclkgKyBtYXRjaC5saW5lIC0gMykpXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVRdWVyeSh2YWx1ZSkge1xuICAgIHNldFF1ZXJ5KHZhbHVlKVxuICAgIHNldEluZGV4KDApXG4gICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGl2ZSxcbiAgICBxdWVyeSxcbiAgICBjb21taXR0ZWQsXG4gICAgaW5kZXgsXG4gICAgZm9jdXNlZDogKCkgPT4gZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSxcbiAgICByZWdpc3RlckZvY3VzLFxuICAgIG9wZW4sXG4gICAgY2xvc2UsXG4gICAgaGFuZGxlSW5wdXQsXG4gICAgcHJlcGFyZSxcbiAgICBzY3JvbGw6IHNjcm9sbCgpLFxuICAgIHNjcm9sbFRvTWF0Y2gsXG4gICAgY29tbWl0OiAoKSA9PiBzZXRDb21taXR0ZWQodHJ1ZSksXG4gICAgdXBkYXRlUXVlcnksXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbnZlcnNhdGlvblNlYXJjaEJhcih7IHNlYXJjaCwgbWF0Y2hlcyB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgZmxleFNocmluazogMCwgaGVpZ2h0OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnsnLyAnfTwvdGV4dD5cbiAgICAgIHtzZWFyY2guY29tbWl0dGVkKClcbiAgICAgICAgPyA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIGZsZXhHcm93OiAxIH19PntzZWFyY2gucXVlcnkoKX08L3RleHQ+XG4gICAgICAgIDogPFRleHRJbnB1dFxuICAgICAgICAgICAgZm9jdXNlZD17c2VhcmNoLmZvY3VzZWQoKX1cbiAgICAgICAgICAgIHZhbHVlPXtzZWFyY2gucXVlcnkoKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzZWFyY2gudXBkYXRlUXVlcnl9XG4gICAgICAgICAgICBvblN1Ym1pdD17c2VhcmNoLmNvbW1pdH1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtzZWFyY2guY2xvc2V9XG4gICAgICAgICAgLz59XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e21hdGNoZXMubGVuZ3RoID8gYCR7c2VhcmNoLmluZGV4KCkgKyAxfS8ke21hdGNoZXMubGVuZ3RofWAgOiAnMC8wJ308L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IHsgU2Nyb2xsQW5jaG9yIGFzIENvbnZlcnNhdGlvblNjcm9sbEFuY2hvciwgU2VhcmNoTWVzc2FnZSBhcyBDb252ZXJzYXRpb25TZWFyY2hNZXNzYWdlIH1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIEJ1dHRvbiwgVGV4dElucHV0LCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQsIEZHLCBGR19TT0ZULCBQQU5FTF9CRywgU0VMRUNUX0JHIH0gZnJvbSAnLi90aGVtZS5qcydcblxuZnVuY3Rpb24gYW5zd2VyVGV4dChxdWVzdGlvbiwgYW5zd2VyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFuc3dlcikpIHJldHVybiBhbnN3ZXIuam9pbignLCAnKVxuICByZXR1cm4gYW5zd2VyIHx8ICdOb3QgYW5zd2VyZWQnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBRdWVzdGlvbkZvcm0oeyByZXF1ZXN0LCBmb2N1c2VkLCBvblN1Ym1pdCwgb25DYW5jZWwgfSkge1xuICBjb25zdCBxdWVzdGlvbnMgPSByZXF1ZXN0LnF1ZXN0aW9uc1xuICBjb25zdCByZXZpZXdpbmcgPSBxdWVzdGlvbnMubGVuZ3RoID4gMVxuICBjb25zdCBbc3RlcCwgc2V0U3RlcF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2Fuc3dlcnMsIHNldEFuc3dlcnNdID0gY3JlYXRlU2lnbmFsKHt9KVxuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtjdXN0b20sIHNldEN1c3RvbV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXZpZXcsIHNldFJldmlld10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtjb250cm9sLCBzZXRDb250cm9sXSA9IGNyZWF0ZVNpZ25hbCgnYW5zd2VyJylcblxuICBjb25zdCBxdWVzdGlvbiA9ICgpID0+IHF1ZXN0aW9uc1tzdGVwKCldXG4gIGNvbnN0IG9wdGlvbnMgPSAoKSA9PiBxdWVzdGlvbigpLm9wdGlvbnMgfHwgW11cbiAgY29uc3Qgcm93cyA9ICgpID0+IFsuLi5vcHRpb25zKCksIC4uLihxdWVzdGlvbigpLmFsbG93T3RoZXIgPT09IGZhbHNlID8gW10gOiBbeyBsYWJlbDogJ090aGVyJywgb3RoZXI6IHRydWUgfV0pXVxuICBjb25zdCBzZWxlY3RlZCA9IChsYWJlbCkgPT4gKGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXSB8fCBbXSkuaW5jbHVkZXMobGFiZWwpXG4gIGNvbnN0IG90aGVyQW5zd2VyID0gKCkgPT4ge1xuICAgIGNvbnN0IGFuc3dlciA9IGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXVxuICAgIGNvbnN0IGxhYmVscyA9IG5ldyBTZXQob3B0aW9ucygpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgIGlmIChBcnJheS5pc0FycmF5KGFuc3dlcikpIHJldHVybiBhbnN3ZXIuZmluZCgodmFsdWUpID0+ICFsYWJlbHMuaGFzKHZhbHVlKSkgfHwgJydcbiAgICByZXR1cm4gYW5zd2VyICYmICFsYWJlbHMuaGFzKGFuc3dlcikgPyBhbnN3ZXIgOiAnJ1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0QW5zd2VyKHZhbHVlKSB7XG4gICAgc2V0QW5zd2VycygoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgW3F1ZXN0aW9uKCkuaWRdOiB2YWx1ZSB9KSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkdmFuY2UoKSB7XG4gICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgIHNldEN1cnNvcigwKVxuICAgIHNldENvbnRyb2woJ2Fuc3dlcicpXG4gICAgaWYgKHN0ZXAoKSA8IHF1ZXN0aW9ucy5sZW5ndGggLSAxKSBzZXRTdGVwKHN0ZXAoKSArIDEpXG4gICAgZWxzZSBpZiAocmV2aWV3aW5nKSB7IHNldEN1cnNvcihxdWVzdGlvbnMubGVuZ3RoKTsgc2V0UmV2aWV3KHRydWUpIH1cbiAgICBlbHNlIGZpbmlzaCgpXG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgb25TdWJtaXQocXVlc3Rpb25zLm1hcCgoaXRlbSkgPT4gKHsgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXI6IGFuc3dlcnMoKVtpdGVtLmlkXSA/PyAnJyB9KSkpXG4gIH1cblxuICBmdW5jdGlvbiBzdWJtaXRUZXh0KHZhbHVlKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdmFsdWUudHJpbSgpXG4gICAgaWYgKCFhbnN3ZXIpIHJldHVyblxuICAgIHNldEFuc3dlcihhbnN3ZXIpXG4gICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyIH1dKVxuICAgIGVsc2UgYWR2YW5jZSgpXG4gIH1cblxuICBmdW5jdGlvbiBzdWJtaXRPdGhlcih2YWx1ZSkge1xuICAgIGNvbnN0IGFuc3dlciA9IHZhbHVlLnRyaW0oKVxuICAgIGNvbnN0IGtub3duID0gbmV3IFNldCgoaXRlbS5vcHRpb25zIHx8IFtdKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKSlcbiAgICBjb25zdCBjaG9pY2VzID0gaXRlbS50eXBlID09PSAnbXVsdGknID8gKGFuc3dlcnMoKVtpdGVtLmlkXSB8fCBbXSkuZmlsdGVyKChlbnRyeSkgPT4ga25vd24uaGFzKGVudHJ5KSkgOiBbXVxuICAgIGNvbnN0IG5leHRBbnN3ZXIgPSBpdGVtLnR5cGUgPT09ICdtdWx0aScgPyBbLi4uY2hvaWNlcywgLi4uKGFuc3dlciA/IFthbnN3ZXJdIDogW10pXSA6IGFuc3dlclxuICAgIHNldEFuc3dlcihuZXh0QW5zd2VyKVxuICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICBpZiAoaXRlbS50eXBlID09PSAnc2luZ2xlJyAmJiBhbnN3ZXIpIHtcbiAgICAgIGlmIChxdWVzdGlvbnMubGVuZ3RoID09PSAxKSBvblN1Ym1pdChbeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlciB9XSlcbiAgICAgIGVsc2UgYWR2YW5jZSgpXG4gICAgfVxuICB9XG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgaWYgKGN1c3RvbSgpKSB7IHNldEN1c3RvbShmYWxzZSk7IHNldENvbnRyb2woJ2Fuc3dlcicpIH1cbiAgICAgIGVsc2UgaWYgKHJldmlldygpKSBzZXRSZXZpZXcoZmFsc2UpXG4gICAgICBlbHNlIG9uQ2FuY2VsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHJldmlldygpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnIHx8IGV2ZW50LmtleSA9PT0gJ2snKSBzZXRDdXJzb3IoTWF0aC5tYXgoMCwgY3Vyc29yKCkgLSAxKSlcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ2onKSBzZXRDdXJzb3IoTWF0aC5taW4ocXVlc3Rpb25zLmxlbmd0aCwgY3Vyc29yKCkgKyAxKSlcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgICAgaWYgKGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoKSBmaW5pc2goKVxuICAgICAgICBlbHNlIHsgc2V0U3RlcChjdXJzb3IoKSk7IHNldEN1cnNvcigwKTsgc2V0Q29udHJvbCgnYW5zd2VyJyk7IHNldFJldmlldyhmYWxzZSkgfVxuICAgICAgfSBlbHNlIHJldHVyblxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoc3RlcCgpID4gMCAmJiAoZXZlbnQua2V5ID09PSAndGFiJyB8fCBldmVudC5rZXkgPT09ICdzaGlmdC10YWInKSkge1xuICAgICAgc2V0Q29udHJvbChjb250cm9sKCkgPT09ICdiYWNrJyA/ICdhbnN3ZXInIDogJ2JhY2snKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY29udHJvbCgpID09PSAnYmFjaycpIHJldHVyblxuICAgIGlmIChjdXN0b20oKSkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgfHwgZXZlbnQua2V5ID09PSAnc2hpZnQtdGFiJykge1xuICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgIHNldENvbnRyb2woJ2Fuc3dlcicpXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHF1ZXN0aW9uKCk/LnR5cGUgPT09ICd0ZXh0JykgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykgc2V0Q3Vyc29yKE1hdGgubWF4KDAsIGN1cnNvcigpIC0gMSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHNldEN1cnNvcihNYXRoLm1pbihyb3dzKCkubGVuZ3RoIC0gMSwgY3Vyc29yKCkgKyAxKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdzcGFjZScgJiYgcXVlc3Rpb24oKS50eXBlID09PSAnbXVsdGknKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dzKClbY3Vyc29yKCldXG4gICAgICBpZiAocm93Lm90aGVyKSB7XG4gICAgICAgIGlmIChvdGhlckFuc3dlcigpKSB7XG4gICAgICAgICAgY29uc3Qga25vd24gPSBuZXcgU2V0KG9wdGlvbnMoKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKSlcbiAgICAgICAgICBzZXRBbnN3ZXIoKGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXSB8fCBbXSkuZmlsdGVyKChlbnRyeSkgPT4ga25vd24uaGFzKGVudHJ5KSkpXG4gICAgICAgICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgICAgICB9IGVsc2Ugc2V0Q3VzdG9tKHRydWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdXG4gICAgICAgIHNldEFuc3dlcihjdXJyZW50LmluY2x1ZGVzKHJvdy5sYWJlbCkgPyBjdXJyZW50LmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSByb3cubGFiZWwpIDogWy4uLmN1cnJlbnQsIHJvdy5sYWJlbF0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dzKClbY3Vyc29yKCldXG4gICAgICBpZiAocXVlc3Rpb24oKS50eXBlID09PSAnbXVsdGknKSBhZHZhbmNlKClcbiAgICAgIGVsc2UgaWYgKHJvdy5vdGhlcikgc2V0Q3VzdG9tKHRydWUpXG4gICAgICBlbHNlIHtcbiAgICAgICAgc2V0QW5zd2VyKHJvdy5sYWJlbClcbiAgICAgICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBxdWVzdGlvbigpLmlkLCBxdWVzdGlvbjogcXVlc3Rpb24oKS5xdWVzdGlvbiwgYW5zd2VyOiByb3cubGFiZWwgfV0pXG4gICAgICAgIGVsc2UgYWR2YW5jZSgpXG4gICAgICB9XG4gICAgfSBlbHNlIHJldHVyblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG5cbiAgaWYgKHJldmlldygpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PlJldmlldyBhbnN3ZXJzPC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+ZW50ZXI6IGVkaXQgb3Igc3VibWl0ICBlc2M6IGJhY2s8L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7cXVlc3Rpb25zLm1hcCgoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogY3Vyc29yKCkgPT09IGluZGV4ID8gU0VMRUNUX0JHIDogdW5kZWZpbmVkLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBhY2NlbnQoKSA6IEZHIH19PntpdGVtLnF1ZXN0aW9ufTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YW5zd2VyVGV4dChpdGVtLCBhbnN3ZXJzKClbaXRlbS5pZF0pfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGJnOiBjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCA/IGFjY2VudCgpIDogdW5kZWZpbmVkLCBjb2xvcjogY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGggPyAnYmxhY2snIDogRkcsIGJvbGQ6IHRydWUgfX0+IFN1Ym1pdCBhbnN3ZXJzIDwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGl0ZW0gPSBxdWVzdGlvbigpXG4gIGNvbnN0IHByb2dyZXNzID0gcXVlc3Rpb25zLmxlbmd0aCA+IDEgPyBgJHtzdGVwKCkgKyAxfSBvZiAke3F1ZXN0aW9ucy5sZW5ndGh9YCA6ICdRdWVzdGlvbidcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAge3N0ZXAoKSA+IDAgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGxhYmVsPVwiQmFja1wiXG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgY29udHJvbCgpID09PSAnYmFjayd9XG4gICAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGVwKHN0ZXAoKSAtIDEpXG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKDApXG4gICAgICAgICAgICAgICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgICAgICAgICAgICAgIHNldENvbnRyb2woJ2Fuc3dlcicpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHRleHQ+ICA8L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57cHJvZ3Jlc3N9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57aXRlbS50eXBlID09PSAnbXVsdGknID8gJ3NwYWNlOiBzZWxlY3QgIGVudGVyOiBjb250aW51ZScgOiAnZW50ZXI6IGFuc3dlcid9ICBlc2M6IGNhbmNlbDwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBib2xkOiB0cnVlIH19PntpdGVtLnF1ZXN0aW9ufTwvdGV4dD5cbiAgICAgIHtpdGVtLmRlc2NyaXB0aW9uICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntpdGVtLmRlc2NyaXB0aW9ufTwvdGV4dD59XG4gICAgICB7aXRlbS50eXBlID09PSAndGV4dCcgPyAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFNFTEVDVF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBrZXk9e2Ake2l0ZW0uaWR9OnRleHRgfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjb250cm9sKCkgPT09ICdhbnN3ZXInfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHlvdXIgYW5zd2VyXCJcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZT17dHlwZW9mIGFuc3dlcnMoKVtpdGVtLmlkXSA9PT0gJ3N0cmluZycgPyBhbnN3ZXJzKClbaXRlbS5pZF0gOiAnJ31cbiAgICAgICAgICAgIG9uU3VibWl0PXtzdWJtaXRUZXh0fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHtyb3dzKCkubWFwKChvcHRpb24sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogY3Vyc29yKCkgPT09IGluZGV4ID8gU0VMRUNUX0JHIDogdW5kZWZpbmVkLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGN1cnNvcigpID09PSBpbmRleCA/IGFjY2VudCgpIDogRkcgfX0+XG4gICAgICAgICAgICAgICAge2l0ZW0udHlwZSA9PT0gJ211bHRpJ1xuICAgICAgICAgICAgICAgICAgPyBgJHtvcHRpb24ub3RoZXIgPyAob3RoZXJBbnN3ZXIoKSA/ICdbeF0nIDogJ1sgXScpIDogKHNlbGVjdGVkKG9wdGlvbi5sYWJlbCkgPyAnW3hdJyA6ICdbIF0nKX0gYFxuICAgICAgICAgICAgICAgICAgOiBgJHtjdXJzb3IoKSA9PT0gaW5kZXggPyAnXHUyMDNBJyA6ICcgJ30gYH17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgIHtvcHRpb24uZGVzY3JpcHRpb24gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2AgICR7b3B0aW9uLmRlc2NyaXB0aW9ufWB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAge29wdGlvbi5vdGhlciAmJiAoY3VzdG9tKCkgfHwgb3RoZXJBbnN3ZXIoKSkgJiYgKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGN1c3RvbSgpID8gUEFORUxfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdMZWZ0OiA0IH19PlxuICAgICAgICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2l0ZW0uaWR9Om90aGVyYH1cbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjdXN0b20oKX1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIGFub3RoZXIgYW5zd2VyXCJcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXtvdGhlckFuc3dlcigpfVxuICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17c3VibWl0T3RoZXJ9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgdXNlSW50ZXJ2YWwsIHVzZU1vdXNlLCB1c2VSZXNpemUgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVEIH0gZnJvbSAnLi90aGVtZS5qcydcblxuZnVuY3Rpb24gRW1wdHlDbG91ZCh7IHdpZHRoLCBoZWlnaHQsIHZlcnNpb24gfSkge1xuICBjb25zdCBbcGhhc2UsIHNldFBoYXNlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbd2FrZSwgc2V0V2FrZV0gPSBjcmVhdGVTaWduYWwoW10pXG4gIGxldCBwcmV2aW91cyA9IG51bGxcblxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQuYWN0aW9uICE9PSAnbW92ZScgJiYgZXZlbnQuYWN0aW9uICE9PSAnZHJhZycpIHJldHVyblxuICAgIGNvbnN0IHggPSBldmVudC54XG4gICAgY29uc3QgeSA9IGV2ZW50LnlcbiAgICBpZiAoeCA8IDAgfHwgeCA+PSB3aWR0aCB8fCB5IDwgMCB8fCB5ID49IGhlaWdodCkgcmV0dXJuXG4gICAgY29uc3QgZHggPSBwcmV2aW91cyA/IHggLSBwcmV2aW91cy54IDogMFxuICAgIGNvbnN0IGR5ID0gcHJldmlvdXMgPyB5IC0gcHJldmlvdXMueSA6IDBcbiAgICBwcmV2aW91cyA9IHsgeCwgeSB9XG4gICAgY29uc3Qgc3BlZWQgPSBNYXRoLmh5cG90KGR4ICogMC41LCBkeSlcbiAgICBpZiAoc3BlZWQgPT09IDApIHJldHVyblxuICAgIHNldFdha2UocG9pbnRzID0+IFsuLi5wb2ludHMuc2xpY2UoLTIwKSwgeyB4LCB5LCBkeCwgZHksIHNwZWVkOiBNYXRoLm1pbig0LCBzcGVlZCksIGFnZTogMCB9XSlcbiAgfSlcblxuICB1c2VJbnRlcnZhbCgoKSA9PiB7XG4gICAgc2V0UGhhc2UodmFsdWUgPT4gdmFsdWUgKyAwLjE2KVxuICAgIHNldFdha2UocG9pbnRzID0+IHBvaW50cy5tYXAocG9pbnQgPT4gKHsgLi4ucG9pbnQsIGFnZTogcG9pbnQuYWdlICsgMSB9KSkuZmlsdGVyKHBvaW50ID0+IHBvaW50LmFnZSA8IDE4KSlcbiAgfSwgOTApXG5cbiAgY29uc3QgZ2x5cGhzID0gJyAgLi46OisrKipcdTI1OTFcdTI1OTInXG4gIGNvbnN0IHJvd3MgPSBbXVxuICBjb25zdCBiYXNlID0gYWNjZW50KClcbiAgY29uc3QgcmdiID0gL14jKFswLTlhLWZdezZ9KSQvaS5leGVjKGJhc2UpXG4gIGNvbnN0IG5laWdoYm9yaW5nID0gcmdiXG4gICAgPyBgIyR7W1xuICAgICAgTWF0aC5tYXgoMCwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDAsIDIpLCAxNikgLSAxOCksXG4gICAgICBNYXRoLm1pbigyNTUsIHBhcnNlSW50KHJnYlsxXS5zbGljZSgyLCA0KSwgMTYpICsgOCksXG4gICAgICBNYXRoLm1pbigyNTUsIHBhcnNlSW50KHJnYlsxXS5zbGljZSg0LCA2KSwgMTYpICsgMjQpLFxuICAgIF0ubWFwKHZhbHVlID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG4gICAgOiBiYXNlXG5cbiAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgIGNvbnN0IHJvdyA9IFtdXG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICBjb25zdCBwID0gcGhhc2UoKVxuICAgICAgY29uc3QgYnJvYWQgPSBNYXRoLnNpbih4ICogMC4wOCArIHApICsgTWF0aC5zaW4oeSAqIDAuMjkgLSBwICogMC43KSArIE1hdGguc2luKCh4ICsgeSkgKiAwLjA1ICsgcCAqIDAuMzUpXG4gICAgICBjb25zdCB3aXNwcyA9IE1hdGguc2luKHggKiAwLjE5IC0geSAqIDAuMTEgLSBwICogMC41NSkgKyBNYXRoLnNpbih4ICogMC4wMyArIHkgKiAwLjQzICsgcCAqIDAuNClcbiAgICAgIGNvbnN0IHBvY2tldHMgPSBNYXRoLnNpbih4ICogMC4zMSArIHAgKiAwLjgpICogTWF0aC5zaW4oeSAqIDAuNDcgLSBwICogMC4zKVxuICAgICAgbGV0IGJyb2FkRGlzcGxhY2VtZW50ID0gMFxuICAgICAgbGV0IHdpc3BEaXNwbGFjZW1lbnQgPSAwXG4gICAgICBsZXQgaW50ZXJhY3Rpb24gPSAwXG4gICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHdha2UoKSkge1xuICAgICAgICBjb25zdCBsZW5ndGggPSBNYXRoLmh5cG90KHBvaW50LmR4ICogMC41LCBwb2ludC5keSkgfHwgMVxuICAgICAgICBjb25zdCB1eCA9IHBvaW50LmR4ICogMC41IC8gbGVuZ3RoXG4gICAgICAgIGNvbnN0IHV5ID0gcG9pbnQuZHkgLyBsZW5ndGhcbiAgICAgICAgY29uc3QgcnggPSAoeCAtIHBvaW50LngpICogMC41XG4gICAgICAgIGNvbnN0IHJ5ID0geSAtIHBvaW50LnlcbiAgICAgICAgY29uc3QgYWxvbmcgPSByeCAqIHV4ICsgcnkgKiB1eVxuICAgICAgICBjb25zdCBhY3Jvc3MgPSAtcnggKiB1eSArIHJ5ICogdXhcbiAgICAgICAgY29uc3QgdHJhaWxpbmcgPSBhbG9uZyA8PSAyICYmIGFsb25nID49IC0xOCAtIHBvaW50LnNwZWVkICogM1xuICAgICAgICBpZiAoIXRyYWlsaW5nKSBjb250aW51ZVxuICAgICAgICBjb25zdCBhZ2UgPSAxIC0gcG9pbnQuYWdlIC8gMThcbiAgICAgICAgY29uc3QgdHJhaWwgPSBNYXRoLmV4cCgtTWF0aC5wb3coKGFsb25nICsgNCArIHBvaW50LmFnZSAqIDAuMzUpIC8gKDcgKyBwb2ludC5zcGVlZCAqIDIpLCAyKSlcbiAgICAgICAgY29uc3QgY2VudGVyID0gTWF0aC5leHAoLShhY3Jvc3MgKiBhY3Jvc3MpIC8gNSlcbiAgICAgICAgY29uc3QgZWRnZXMgPSBNYXRoLmV4cCgtTWF0aC5wb3coTWF0aC5hYnMoYWNyb3NzKSAtIDMuMiwgMikgLyAzKVxuICAgICAgICBjb25zdCBmb3JjZSA9IGFnZSAqIHRyYWlsICogKDAuNSArIHBvaW50LnNwZWVkICogMC40NSlcbiAgICAgICAgY29uc3QgcmFkaWFsRGlzdGFuY2UgPSBNYXRoLnNxcnQocnggKiByeCArIHJ5ICogcnkpXG4gICAgICAgIGNvbnN0IHJpcHBsZUVudmVsb3BlID0gTWF0aC5leHAoLShyYWRpYWxEaXN0YW5jZSAqIHJhZGlhbERpc3RhbmNlKSAvICgzNSArIHBvaW50LnNwZWVkICogMTIpKVxuICAgICAgICBjb25zdCByaXBwbGUgPSBNYXRoLnNpbihyYWRpYWxEaXN0YW5jZSAqIDEuMzUgLSBwb2ludC5hZ2UgKiAwLjc1KSAqIHJpcHBsZUVudmVsb3BlICogYWdlXG4gICAgICAgIHdpc3BEaXNwbGFjZW1lbnQgKz0gKGVkZ2VzICogMC45IC0gY2VudGVyKSAqIGZvcmNlICogMS41ICsgcmlwcGxlICogKDEuMiArIHBvaW50LnNwZWVkICogMC4yNSlcbiAgICAgICAgYnJvYWREaXNwbGFjZW1lbnQgKz0gKGVkZ2VzICogMC40NSAtIGNlbnRlciAqIDAuMzUpICogZm9yY2UgKiAwLjU1ICsgcmlwcGxlICogMC4yNVxuICAgICAgICBpbnRlcmFjdGlvbiA9IE1hdGgubWF4KGludGVyYWN0aW9uLCBNYXRoLmFicyhyaXBwbGUpICogKDAuNSArIHBvaW50LnNwZWVkICogMC4xNSkpXG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIChcbiAgICAgICAgYnJvYWQgKyBicm9hZERpc3BsYWNlbWVudCArICh3aXNwcyArIHdpc3BEaXNwbGFjZW1lbnQpICogMC42NSArIHBvY2tldHMgKiAwLjggKyAzLjJcbiAgICAgICkgLyA3LjQpKVxuICAgICAgY29uc3QgaW5kZXggPSBNYXRoLm1pbihnbHlwaHMubGVuZ3RoIC0gMSwgTWF0aC5mbG9vcih2YWx1ZSAqIGdseXBocy5sZW5ndGgpKVxuICAgICAgcm93LnB1c2goeyBnbHlwaDogZ2x5cGhzW2luZGV4XSwgY29sb3I6IGludGVyYWN0aW9uID4gMC4xNiA/IG5laWdoYm9yaW5nIDogYmFzZSwgZGltOiBpbmRleCA8IDggfSlcbiAgICB9XG4gICAgcm93cy5wdXNoKHJvdylcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEgfX0+XG4gICAgICB7cm93cy5tYXAoKHJvdywgaSkgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGkgPT09IDEgPyAncGljbycgOiBpID09PSAyID8gYHYke3ZlcnNpb259YCA6ICcnXG4gICAgICAgIGNvbnN0IGluQnJhbmRCb3ggPSBpID49IDEgJiYgaSA8PSAyXG4gICAgICAgIGNvbnN0IGJveFN0YXJ0ID0gMVxuICAgICAgICBjb25zdCBib3hXaWR0aCA9IGB2JHt2ZXJzaW9ufWAubGVuZ3RoICsgMlxuICAgICAgICBjb25zdCBjbG91ZCA9IChjZWxscykgPT4gY2VsbHMubWFwKChjZWxsLCB4KSA9PiAoXG4gICAgICAgICAgPHRleHQga2V5PXt4fSBzdHlsZT17eyBjb2xvcjogY2VsbC5jb2xvciwgZGltOiBjZWxsLmRpbSB9fT57Y2VsbC5nbHlwaH08L3RleHQ+XG4gICAgICAgICkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGJveCBrZXk9e2l9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEsIG92ZXJmbG93OiAnY2xpcCcgfX0+XG4gICAgICAgICAgICB7aW5CcmFuZEJveCAmJiBjbG91ZChyb3cuc2xpY2UoMCwgYm94U3RhcnQpKX1cbiAgICAgICAgICAgIHtpbkJyYW5kQm94ICYmIChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogYm94V2lkdGgsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIHtsYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBib2xkOiBpID09PSAxLCBjb2xvcjogaSA9PT0gMSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2xhYmVsfTwvdGV4dD59XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtjbG91ZChyb3cuc2xpY2UoaW5CcmFuZEJveCA/IGJveFN0YXJ0ICsgYm94V2lkdGggOiAwKSl9XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbXB0eVN0YXRlKHsgdmVyc2lvbiwgY2xvdWRzID0gZmFsc2UgfSkge1xuICBjb25zdCBbc2l6ZSwgc2V0U2l6ZV0gPSBjcmVhdGVTaWduYWwoeyB3aWR0aDogcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCwgaGVpZ2h0OiBwcm9jZXNzLnN0ZG91dC5yb3dzIHx8IDI0IH0pXG4gIHVzZVJlc2l6ZShzZXRTaXplKVxuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIHNpemUoKS53aWR0aClcbiAgY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgc2l6ZSgpLmhlaWdodCAtIDQpXG4gIGlmICghY2xvdWRzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgYm9sZDogdHJ1ZSwgY29sb3I6IGFjY2VudCgpIH19PnsnICBwaWNvJ308L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgdiR7dmVyc2lvbn1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGgsIGhlaWdodCB9fT5cbiAgICAgIDxFbXB0eUNsb3VkIHdpZHRoPXt3aWR0aH0gaGVpZ2h0PXtoZWlnaHR9IHZlcnNpb249e3ZlcnNpb259IC8+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuIiwgImltcG9ydCB7IE1hcmtkb3duLCBTY3JvbGxCb3gsIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IEhFTFBfVEVYVCA9IChjb21tYW5kcykgPT4gYHBpY28gaXMgYSBjb2RpbmcgYWdlbnQgaW4geW91ciB0ZXJtaW5hbC4gSXQgcmVhZHMsIGVkaXRzLCBhbmQgc2VhcmNoZXMgZmlsZXMsIHJ1bnMgY29tbWFuZHMsIGFuZCBzdHJlYW1zIGl0cyB3b3JrIGludG8gdGhpcyB0cmFuc2NyaXB0LlxuXG4jIyBDb21tYW5kc1xuXG5UeXBlIFxcYC9cXGAgaW4gdGhlIGNvbXBvc2VyIHRvIGZpbHRlciB0aGVzZSBhcyB5b3UgdHlwZS5cblxuJHtjb21tYW5kcy5tYXAoKGMpID0+IGAtIFxcYC8ke2MubmFtZX1cXGAgLSAke2MuZGVzY31gKS5qb2luKCdcXG4nKX1cblxuVHdvIGtpbmRzIG9mIHVzZXItZGVmaW5lZCBlbnRyaWVzIGpvaW4gdGhpcyBtZW51OlxuXG4tICoqY29tbWFuZHMqKiAoXFxgfi8ucGljby9jb21tYW5kcy88bmFtZT4ubWRcXGAgb3IgXFxgLnBpY28vY29tbWFuZHMvPG5hbWU+Lm1kXFxgKTogcHJvbXB0IHRlbXBsYXRlcyB5b3UgaW52b2tlIGFzIFxcYC88bmFtZT4gW2FyZ3NdXFxgLiBcXGAkQVJHVU1FTlRTXFxgIGluIHRoZSBib2R5IGlzIHJlcGxhY2VkIHdpdGggd2hhdGV2ZXIgZm9sbG93cyB0aGUgY29tbWFuZDsgd2l0aG91dCBhIHBsYWNlaG9sZGVyLCBhcmdzIGFyZSBhcHBlbmRlZC4gVGhlIG1vZGVsIG5ldmVyIHNlZXMgdGhlc2UgdW50aWwgeW91IHJ1biBvbmUuXG4tICoqc2tpbGxzKiogKFxcYH4vLnBpY28vc2tpbGxzLzxuYW1lPi9TS0lMTC5tZFxcYCBvciBcXGAucGljby9za2lsbHMvPG5hbWU+L1NLSUxMLm1kXFxgKTogY2FwYWJpbGl0aWVzIHdpdGggYSBuYW1lIGFuZCBkZXNjcmlwdGlvbi4gWW91IGNhbiBpbnZva2UgdGhlbSBsaWtlIGNvbW1hbmRzLCBhbmQgdGhlIGFnZW50IGNhbiBhbHNvIGRpc2NvdmVyIGFuZCBsb2FkIHRoZW0gaXRzZWxmIHZpYSB0aGUgc2tpbGwgdG9vbC5cbi0gKip0b29scyoqIChcXGB+Ly5waWNvL3Rvb2xzLzxuYW1lPi5qc1xcYCBvciBcXGAucGljby90b29scy88bmFtZT4uanNcXGApOiBFUyBtb2R1bGVzIGRlZmF1bHQtZXhwb3J0aW5nIFxcYHsgbmFtZSwgZGVzY3JpcHRpb24sIHNjaGVtYSwgZXhlY3V0ZSB9XFxgIChvciBhIGZhY3RvcnkgcmVjZWl2aW5nIFxcYHsgY3dkLCByb290IH1cXGApLiBUaGV5IGpvaW4gdGhlIGFnZW50J3MgdG9vbHNldCBhbmQgYXJlIHJlc2Nhbm5lZCBldmVyeSB0dXJuLCBzbyBlZGl0cyBhcHBseSBvbiB0aGUgbmV4dCBtZXNzYWdlLiBBc2sgdGhlIGFnZW50IHRvIGJ1aWxkIG9uZSBmb3IgeW91OiB0aGUgYnVpbHQtaW4gXFxgL25ldy10b29sXFxgIHNraWxsIHRlYWNoZXMgaXQgdGhlIGZvcm1hdC5cblxuSW4gdGhlIE1DUCBwYW5lbDogZW50ZXIgZW5hYmxlcy9kaXNhYmxlcyBhIHNlcnZlciAoZGlzYWJsZWQgaXMgc3RpY2t5IGFjcm9zcyByZXN0YXJ0cyAtIGNvbmZpZyBrZXB0LCBubyBjb25uZWN0aW9uLCBubyB0b29scyBvZmZlcmVkIHRvIHRoZSBtb2RlbCwgcGVyIHByb2plY3QpLCBcXGB0XFxgIGxpc3RzIGl0cyB0b29scywgXFxgclxcYCByZWNvbm5lY3RzLCBcXGBhXFxgIGFkZHMsIFxcYGN0cmwreFxcYCByZW1vdmVzIChwcmVzcyB0d2ljZSkuIFVuZmlsdGVyZWQgbGlzdHMgKGVmZm9ydCwgcmV3aW5kIG9wdGlvbnMsIE1DUCkgYWxzbyBtb3ZlIHdpdGggXFxgalxcYC9cXGBrXFxgIGFuZCBqdW1wIHdpdGggXFxgZ1xcYC9cXGBHXFxgLlxuXG4jIyBDb21wb3NlclxuXG4tIFxcYGN0cmwrdlxcYDogQXR0YWNoIGNsaXBib2FyZCBpbWFnZVxuLSBcXGBjdHJsK29cXGA6IENhcHR1cmUgc2NyZWVuIHJlZ2lvbiAobWFjT1MpXG4tIFxcYGN0cmwrZ1xcYDogUmVjb3JkIChtYWNPUylcbi0gXFxgZW50ZXJcXGA6IFRyYW5zY3JpYmUgcmVjb3JkaW5nXG4tIFxcYGVzY1xcYDogQ2FuY2VsIGRpY3RhdGlvblxuXG4tIFxcYGVudGVyXFxgIHNlbmRzOyBcXGBzaGlmdCtlbnRlclxcYCBvciBcXGBcXFxcPGVudGVyPlxcYCBpbnNlcnRzIGEgbmV3bGluZVxuLSBcXGBAXFxgIG9wZW5zIGEgZnV6enkgZmlsZSBwaWNrZXI7IGVudGVyIGluc2VydHMgdGhlIHNlbGVjdGVkIHBhdGhcbi0gZHJhZyBhbiBpbWFnZSBmaWxlIGludG8gdGhlIHRlcm1pbmFsIHRvIGF0dGFjaCBpdDogaXQgYXBwZWFycyBpbmxpbmUgYXMgXFxgW0ltYWdlICNOXVxcYCwgZXhhY3RseSB3aGVyZSB5b3VyIGN1cnNvciBpcywgc28gaW1hZ2VzIGNhbiBzaXQgYmV0d2VlbiBzZW50ZW5jZXM7IGJhY2tzcGFjZSBhZnRlciBvbmUgcmVtb3ZlcyB0aGUgd2hvbGUgYXR0YWNobWVudFxuLSBcXGB0YWJcXGAgY29tcGxldGVzOiBcXGAvc3VtbTx0YWI+XFxgIGZpbmlzaGVzIHRoZSBjb21tYW5kIG5hbWUgYW5kIGN5Y2xlcyB0aHJvdWdoIG1hdGNoZXMgb24gcmVwZWF0OyBhZnRlciBhbiBhcmd1bWVudCBzcGFjZSBpdCBjb21wbGV0ZXMgdmFsdWVzIChcXGAvbW9kZWwgZmxhPHRhYj5cXGAsIFxcYC9jb2xvciA8dGFiPlxcYCwgXFxgL2VmZm9ydCA8dGFiPlxcYCkgYW5kIGZpbGUgcGF0aHMgZm9yIHNraWxscyBhbmQgY29tbWFuZHMuIEtlZXAgdHlwaW5nIHRvIG5hcnJvdywgdGFiIG9yIGVudGVyIGluc2VydHNcbi0gXFxgdXBcXGAgYW5kIFxcYGRvd25cXGAgb24gYW4gZW1wdHkgY29tcG9zZXIgcmVjYWxsIG1lc3NhZ2VzIHlvdSBhbHJlYWR5IHNlbnRcbi0gXFxgY3RybCtyXFxgIG9wZW5zIHJld2luZCAoc2FtZSBhcyBcXGAvcmV3aW5kXFxgKTsgXFxgL2hpc3RvcnlcXGAgZnV6enktc2VhcmNoZXMgeW91ciBvbGQgcHJvbXB0cyBhbmQgcHV0cyB0aGUgc2VsZWN0ZWQgb25lIGJhY2sgaW4gdGhlIGNvbXBvc2VyXG4tIFxcYGN0cmwrc1xcYCBvcGVucyB0aGUgc2Vzc2lvbiBwaWNrZXIgKHNhbWUgYXMgXFxgL3Jlc3VtZVxcYCk7IFxcYGN0cmwrdFxcYCBvcGVucyB0aGUgbW9kZWwgcGlja2VyXG4tIFxcYGN0cmwrcFxcYCBzd2l0Y2hlcyBwcm9qZWN0czogcGljayBvbmUgYW5kIHBpY28ganVtcHMgdG8gaXRzIG1vc3QgcmVjZW50IHNlc3Npb24sIGNoYW5naW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgdG9vbHMsIGNvbnRleHQsIGFuZCBNQ1Agc2VydmVycyB0byBtYXRjaDsgXFxgY3RybCt4XFxgIHR3aWNlIGRlbGV0ZXMgYSBwcm9qZWN0J3MgcGljbyBoaXN0b3J5IChhbGwgaXRzIHNlc3Npb25zIGFuZCBtZW1vcmllcyk7IFxcYC9uZXdcXGAgc3RhcnRzIGEgZnJlc2ggc2Vzc2lvbiBpbiB0aGUgY3VycmVudCBwcm9qZWN0XG4tIFxcYGN0cmwrYlxcYCBjeWNsZXMgdGhpbmtpbmcgZWZmb3J0IChkZWZhdWx0LCBsb3csIG1lZGl1bSwgaGlnaCwgbWF4KSBvbiBtb2RlbHMgdGhhdCBzdXBwb3J0IGl0OyBcXGAvZWZmb3J0XFxgIG9wZW5zIHRoZSBmdWxsIHBpY2tlclxuLSBpbnNpZGUgYSBzZWFyY2ggcGFuZWwsIFxcYGN0cmwrc1xcYCBjeWNsZXMgdGhlIHNjb3BlIGluc3RlYWQ6IHRoaXMgc2Vzc2lvbiwgdGhpcyBwcm9qZWN0LCBvciBldmVyeXdoZXJlXG4tIFxcYC9yZXdpbmRcXGAgcmVzdG9yZXMgdGhlIGNvbnZlcnNhdGlvbiB0byBhbiBlYXJsaWVyIG1lc3NhZ2U7IGEgcmV3aW5kIGNhbiBiZSB1bmRvbmUgd2l0aCBcXGBjdHJsK3pcXGBcbi0gbWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgYWdlbnQgaXMgcmVzcG9uZGluZyBxdWV1ZSB1cCBhYm92ZSB0aGUgY29tcG9zZXIgYW5kIGFyZSBkZWxpdmVyZWQgYXMgb25lIG1lc3NhZ2Ugd2hlbiB0aGUgdHVybiBmaW5pc2hlczsgXFxgdXBcXGAgcHVsbHMgdGhlbSBiYWNrIGZvciBlZGl0aW5nXG4tIFxcYGVzY1xcYCBpbnRlcnJ1cHRzIGEgc3RyZWFtaW5nIHJlc3BvbnNlLCBvciBjbGVhcnMgdGhlIGNvbXBvc2VyIHdoZW4gaWRsZVxuXG4jIyBNb3ZpbmcgYXJvdW5kXG5cbi0gXFxgdGFiXFxgIHN3aXRjaGVzIGZvY3VzIGJldHdlZW4gdGhlIHRyYW5zY3JpcHQgYW5kIHRoZSBjb21wb3NlclxuLSB3aXRoIHRoZSB0cmFuc2NyaXB0IGZvY3VzZWQsIFxcYHVwXFxgL1xcYGRvd25cXGAvXFxgalxcYC9cXGBrXFxgIHNjcm9sbCBhbmQgXFxgZ1xcYC9cXGBHXFxgIGp1bXAgdG8gdGhlIGVuZHNcbi0gbG9uZyBzZXNzaW9ucyByZW5kZXIgb25seSB0aGUgbmV3ZXN0IDUwIG1lc3NhZ2VzOyBzY3JvbGxpbmcgdG8gdGhlIHZlcnkgdG9wIGxvYWRzIG9sZGVyIG9uZXMgaW4gYmF0Y2hlcyAodGhlIHRvcCBsaW5lIHNob3dzIGhvdyBtYW55IGFyZSBoaWRkZW4pXG4tIHRoZSBtb3VzZSB3aGVlbCBzY3JvbGxzOyBjbGljay1kcmFnIHNlbGVjdHMgdGV4dCBhbmQgY29waWVzIGl0IG9uIHJlbGVhc2Vcbi0gXFxgY3RybCtjXFxgIHR3aWNlIGV4aXRzXG5cbiMjIFNoZWxsc1xuXG5UaGUgYWdlbnQgY2FuIHJ1biBsb25nLWxpdmVkIHByb2Nlc3NlcyAoZGV2IHNlcnZlcnMsIHdhdGNoZXJzKSB3aXRoIFxcYGJhc2ggYmFja2dyb3VuZDogdHJ1ZVxcYCwgdGhlbiByZWFkIHRoZWlyIG91dHB1dCBhbmQgc3RvcCB0aGVtIGl0c2VsZi4gU2hlbGxzIGFwcGVhciBiZWxvdyB0aGUgY29tcG9zZXIgYW5kIHJlbWFpbiB0aGVyZSBhZnRlciBleGl0OiB0YWIgZm9jdXNlcyB0aGUgbGlzdCwgai9rIG1vdmVzLCBlbnRlciBvcGVucyB0aGUgY29tbWFuZCBhbmQgbGl2ZSBvdXRwdXQsIGFuZCBcXGBjdHJsK3hcXGAga2lsbHMgYSBydW5uaW5nIHNoZWxsIG9yIGRpc21pc3NlcyBhIGZpbmlzaGVkIG9uZS4gV2hlbiBhIHNoZWxsIGV4aXRzIG9uIGl0cyBvd24sIHRoZSBhZ2VudCBpcyBub3RpZmllZCBhbmQgcmVzcG9uZHM7IHNoZWxscyBkaWUgd2l0aCBwaWNvLCBhbmQgcXVpdHRpbmcgd2FybnMgeW91IGlmIGFueSBhcmUgc3RpbGwgdXAuXG5cbiMjIFN1YnNjcmlwdGlvbnNcblxuXFxgL2Nvbm5lY3RcXGAgbGlzdHMgc3Vic2NyaXB0aW9uIHByb3ZpZGVycyB5b3UgY2FuIHNpZ24gaW4gd2l0aCBpbnN0ZWFkIG9mIEFQSSBrZXlzLiBPcGVuQUkgKENoYXRHUFQgLyBDb2RleCBwbGFuKSBzaWducyBpbiB0aHJvdWdoIHlvdXIgYnJvd3NlciB2aWEgT0F1dGg7IHRva2VucyBhcmUgc3RvcmVkIGluIFxcYH4vLnBpY28vYXV0aC5qc29uXFxgIGFuZCByZWZyZXNoZWQgYXV0b21hdGljYWxseSwgc28geW91IHNpZ24gaW4gb25jZS4gT25jZSBjb25uZWN0ZWQsIGNvZGV4IG1vZGVscyBhcHBlYXIgaW4gXFxgL21vZGVsXFxgLCBiaWxsZWQgdG8geW91ciBwbGFuLiBcXGBkXFxgIGluIHRoZSBwYW5lbCBkaXNjb25uZWN0cy5cblxuIyMgTWVtb3J5XG5cblRoZSBhZ2VudCBzYXZlcyBkdXJhYmxlIGZhY3RzIHdpdGggdGhlIHJlbWVtYmVyIHRvb2w6IG9uZSBmaWxlIHBlciBtZW1vcnkgdW5kZXIgXFxgfi8ucGljby9tZW1vcnlcXGAgKGdsb2JhbCkgb3IgdGhlIHByb2plY3QncyBkaXJlY3RvcnkgaW4gXFxgfi8ucGljby9wcm9qZWN0c1xcYC4gT25seSBhIG9uZS1saW5lIGluZGV4IGlzIGluIGl0cyBjb250ZXh0OyBpdCBsb2FkcyBhIHNwZWNpZmljIG1lbW9yeSB3aXRoIHRoZSByZWNhbGwgdG9vbCB3aGVuIHJlbGV2YW50LiBcXGAvbWVtb3J5XFxgIGxpc3RzIGV2ZXJ5dGhpbmcgaXQga25vd3Mgd2l0aCBhIGNvbnRlbnQgcHJldmlldzogXFxgY3RybCtzXFxgIGN5Y2xlcyB0aGUgc2NvcGUgZmlsdGVyIChhbGwsIHByb2plY3QsIGdsb2JhbCkgYW5kIFxcYGN0cmwreFxcYCB0d2ljZSBmb3JnZXRzIHRoZSBzZWxlY3RlZCBtZW1vcnkuIFlvdSBjYW4gYWxzbyBhc2sgdGhlIGFnZW50IHRvIHJlbWVtYmVyLCBmb3JnZXQsIG9yIGNsZWFuIHVwIGl0cyBtZW1vcmllcyBpbiBwbGFpbiBsYW5ndWFnZS5cblxuIyMgV2FrZS11cHNcblxuVGhlIGFnZW50IGNhbiBzY2hlZHVsZSBvbmUtdGltZSB3YWtlLXVwcyBmb3IgaXRzZWxmIHdpdGggdGhlIHNjaGVkdWxlX3dha2V1cCB0b29sOiBhZnRlciB0aGUgZGVsYXkgaXQgcmVjZWl2ZXMgaXRzIG93biBub3RlIGFzIGEgc3lzdGVtIG5vdGlmaWNhdGlvbiBhbmQgYWN0cyBvbiBpdC4gUmVjdXJyaW5nIGxvb3BzIGFyZSBqdXN0IHRoZSBhZ2VudCByZXNjaGVkdWxpbmcgYXQgdGhlIGVuZCBvZiBlYWNoIHdha2UtdXAuIFxcYC93YWtldXBzXFxgIGxpc3RzIHBlbmRpbmcgb25lcyB3aXRoIGxpdmUgY291bnRkb3duczsgZW50ZXIgb3IgXFxgY3RybCt4XFxgIGNhbmNlbHMgKHByZXNzIHR3aWNlKS4gQSBcXGBcdTIzRjAgTlxcYCBpbiB0aGUgZm9vdGVyIHNob3dzIGhvdyBtYW55IGFyZSBwZW5kaW5nLiBXYWtlLXVwcyBsaXZlIGluIG1lbW9yeSBhbmQgYXJlIGxvc3Qgd2hlbiBwaWNvIGV4aXRzLlxuXG4jIyBBcHBlYXJhbmNlXG5cbnBpY28gcGlja3MgYSBsaWdodCBvciBkYXJrIHBhbGV0dGUgYXQgc3RhcnR1cCBieSBhc2tpbmcgdGhlIHRlcm1pbmFsIGZvciBpdHMgYmFja2dyb3VuZCBjb2xvciAoT1NDIDExKSwgc28gaXQgbWF0Y2hlcyB3aGF0ZXZlciB0aGVtZSB5b3VyIHRlcm1pbmFsIHVzZXMuIFxcYC90aGVtZVxcYCBvcGVucyBhIHBpY2tlciB0aGF0IHByZXZpZXdzIGVhY2ggdGhlbWUgYXMgeW91IG1vdmUgYW5kIHBlcnNpc3RzIHlvdXIgY2hvaWNlIGluIFxcYH4vLnBpY28vY29uZmlnLmpzb25cXGA7IFxcYC90aGVtZSBsaWdodFxcYCwgXFxgL3RoZW1lIGRhcmtcXGAsIG9yIFxcYC90aGVtZSBhdXRvXFxgIGFwcGxpZXMgb25lIGRpcmVjdGx5LiBcXGAvY29sb3JcXGAgdGludHMgYSBzaW5nbGUgc2Vzc2lvbidzIGFjY2VudCBhbmQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHBhbGV0dGUuXG5cbiMjIENvbnRleHRcblxucGljbyByZWFkcyBBR0VOVFMubWQgZmlsZXMgYXV0b21hdGljYWxseTogYSBnbG9iYWwgb25lIGZyb20gfi8ucGljbywgdGhlbiBldmVyeSBhbmNlc3RvciBvZiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHVwIHRvIHRoZSBnaXQgcm9vdC4gRGVlcGVyIGZpbGVzIHdpbi4gQUdFTlRTLm1kIGZpbGVzIGluIHN1YmRpcmVjdG9yaWVzIGxvYWQgbGF6aWx5IHRoZSBmaXJzdCB0aW1lIGEgdG9vbCB0b3VjaGVzIHRoYXQgc3VidHJlZS4gSW4gYW55IHByb2plY3QgZGlyZWN0b3J5IHdpdGhvdXQgYW4gQUdFTlRTLm1kLCBhIENMQVVERS5tZCBpcyBob25vcmVkIGFzIGEgZmFsbGJhY2sgc28gZXhpc3RpbmcgcmVwb3Mgd29yayB1bmNoYW5nZWQ7IEFHRU5UUy5tZCBhbHdheXMgd2lucyB3aGVuIGJvdGggZXhpc3QsIGFuZCB0aGUgZmFsbGJhY2sgbmV2ZXIgYXBwbGllcyB0byB0aGUgZ2xvYmFsIGZpbGUuXG5cblNlc3Npb25zIGFyZSBzdG9yZWQgdW5kZXIgfi8ucGljbyBhcyBqc29ubCBldmVudCBsb2dzOyBcXGAvcmVzdW1lXFxgIGZvbGRzIG9uZSBiYWNrIGludG8gZXhhY3RseSB0aGlzIHZpZXcuXG5cblxcYC9jb250ZXh0XFxgIGJyZWFrcyBkb3duIHdoYXQgdGhlIG5leHQgcmVxdWVzdCB3aWxsIGNvbnRhaW4gLSBzeXN0ZW0gcHJvbXB0LCB0b29sIHNjaGVtYXMsIHByb2plY3QgaW5zdHJ1Y3Rpb25zLCBtZW1vcnkgaW5kZXgsIGNvbXBhY3Rpb24gc3VtbWFyeSwgYW5kIGNvbnZlcnNhdGlvbiAtIHdpdGggYW4gZXN0aW1hdGVkIHNpemUgZm9yIGVhY2ggcGllY2UgbmV4dCB0byB0aGUgcHJvdmlkZXItbWVhc3VyZWQgdG90YWwuXG5cblRoZSBmb290ZXIncyBcXGBjdHggJVxcYCBzaG93cyBob3cgZnVsbCB0aGUgbW9kZWwncyBjb250ZXh0IGlzLiBBdCA4NSUgcGljbyBhdXRvLWNvbXBhY3RzOiB0aGUgb2xkZXIgY29udmVyc2F0aW9uIGlzIHN1bW1hcml6ZWQgaW4gYSBzdHJ1Y3R1cmVkIGZvcm0sIHRoZSBtb3N0IHJlY2VudCB0dXJucyBhcmUga2VwdCB2ZXJiYXRpbSwgYW5kIHRoZSBtb2RlbCBpcyB0b2xkIHdoZXJlIHRoZSBmdWxsIHNlc3Npb24gZmlsZSBsaXZlcyBzbyBpdCBjYW4gcmVhZCBleGFjdCBkZXRhaWxzIGJhY2sgb24gZGVtYW5kLiBOb3RoaW5nIHZpc2libGUgY2hhbmdlcyBpbiB0aGUgdHJhbnNjcmlwdCwgYW5kIHJld2luZCBzdGlsbCB3b3JrcyBhY3Jvc3MgaXQuIFxcYC9jb21wYWN0XFxgIHJ1bnMgaXQgbWFudWFsbHkgYW5kIHRha2VzIG9wdGlvbmFsIGZvY3VzIGluc3RydWN0aW9ucyAoXFxgL2NvbXBhY3QgZm9jdXMgb24gdGhlIEFQSSBjaGFuZ2VzXFxgKS4gU2V0IFxcYFwiYXV0b0NvbXBhY3RcIjogZmFsc2VcXGAgaW4gXFxgfi8ucGljby9jb25maWcuanNvblxcYCB0byBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgdHJpZ2dlci5cblxuLS0tXG5cbiplc2MgdGFrZXMgeW91IGJhY2sgdG8gdGhlIGNvbnZlcnNhdGlvbipgXG5cbmV4cG9ydCBmdW5jdGlvbiBIZWxwKHsgY29tbWFuZHMsIG9uQ2xvc2UgfSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzEwMCUnLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+cGljbyAgaGVscDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+XHUyMTkxXHUyMTkzIHNjcm9sbCAgZXNjIGJhY2s8L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQgc2Nyb2xsYmFyPlxuICAgICAgICA8TWFya2Rvd24gdGV4dD17SEVMUF9URVhUKGNvbW1hbmRzKX0gY29kZUJnPXtudWxsfSAvPlxuICAgICAgPC9TY3JvbGxCb3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyxjQUFjLFdBQVcsZUFBZTtBQUNqRCxTQUFTLGFBQWEsZUFBZSxrQkFBa0I7QUFDdkQsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyw0QkFBNEI7QUFDckMsU0FBUyxpQkFBaUIseUJBQXlCO0FBQ25ELFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsa0JBQWtCO0FBSTNCLFNBQVMsYUFBYSxhQUFhLE9BQU87QUFDeEMsUUFBTSxRQUFRLFlBQVksUUFBUSxTQUFTLE1BQU0sS0FBSyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbkUsU0FBTyxNQUFNLFdBQVcsT0FBTyxPQUFPLFNBQVMsT0FBTyxPQUFPLFdBQVc7QUFDMUU7QUFFQSxlQUFlLFlBQVksRUFBRSxXQUFBQSxZQUFXLE1BQU0sR0FBRztBQUMvQyxRQUFNLE1BQU0sQ0FBQyxhQUFhQSxXQUFVLFNBQVMsUUFBUTtBQUNyRCxRQUFNLG1CQUFtQixJQUFJLE9BQU8sSUFBSSxNQUFNLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxJQUFJ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QkFBaUIsT0FBTztBQUFBLEVBQzlHLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUN4QixDQUFDO0FBQ0QsSUFBTSxPQUFPLFdBQVc7QUFDeEIsSUFBSSxJQUFJLE1BQU8sT0FBTSxXQUFXLGFBQWEsSUFBSSxLQUFLO0FBQ3RELFdBQVcsVUFBVSxDQUFDLFVBQVUsV0FBVyxRQUFRLEVBQUcsU0FBUSxHQUFHLFFBQVEsTUFBTTtBQUM3RSxhQUFXLE1BQU07QUFDakIsVUFBUSxLQUFLLENBQUM7QUFDaEIsQ0FBQztBQUNELFFBQVEsR0FBRyxRQUFRLE1BQU0sV0FBVyxNQUFNLENBQUM7QUFDM0MsSUFBTSxNQUFNLE1BQU0sTUFBTSxnQkFBQVIsTUFBQyxPQUFJLE1BQVksWUFBd0IsR0FBSSxFQUFFLE9BQU8sU0FBUyxLQUFLLEtBQUssTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDO0FBQzVILEtBQUssV0FBVyxJQUFJOyIsCiAgIm5hbWVzIjogWyJwcm92aWRlcnMiLCAiam9pbiIsICJtYWtlRXZlbnQiLCAicHJvdmlkZXJzIiwgImNvbmZpZyIsICJib290IiwgInJ1blR1cm4iLCAicmVhZENvbmZpZyIsICJjb25maWciLCAiZmlsZVVSTFRvUGF0aCIsICJyZWFkQ29uZmlnIiwgIlNjcm9sbEJveCIsICJ1c2VGb2N1cyIsICJ1c2VMYXlvdXQiLCAidXNlSW50ZXJ2YWwiLCAiY3JlYXRlU2lnbmFsIiwgImhvbWVkaXIiLCAiY3JlYXRlU2lnbmFsIiwgImVhc2UiLCAidXNlQW5pbWF0ZWQiLCAiaGlnaGxpZ2h0IiwgIndpZHRoIiwgImZ1enp5U2NvcmUiLCAianN4IiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgIndpZHRoIiwgInVzZWQiLCAicHJvdmlkZXJzIiwgIm5hbWUiLCAianN4IiwgImpzeHMiLCAidXNlTGF5b3V0IiwgIndpZHRoIiwgInVzZUZvY3VzIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJob21lZGlyIiwgIlNjcm9sbEJveCIsICJwZW5kaW5nIiwgImNyZWF0ZVNpZ25hbCIsICJNZW51IiwgIkJ1dHRvbiIsICJ1c2VJbnB1dCIsICJmdXp6eVNjb3JlIiwgInJhbmtGdXp6eSIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAicmFua0Z1enp5IiwgImZ1enp5U2NvcmUiLCAidXNlSW5wdXQiLCAiQnV0dG9uIiwgIk1lbnUiLCAiaG9tZWRpciIsICJwZW5kaW5nIiwgImZhaWxlZCIsICJwZW5kaW5nIiwgImNhcHR1cmVSZWdpb24iLCAicGVuZGluZyIsICJleGVjRmlsZSIsICJta2R0ZW1wIiwgImV4aXN0c1N5bmMiLCAidG1wZGlyIiwgImpvaW4iLCAiY3JlYXRlU2lnbmFsIiwgInVzZUludGVydmFsIiwgIk1lbnUiLCAiU2Nyb2xsQm94IiwgIlNwaW5uZXIiLCAiVGV4dEFyZWEiLCAidXNlRm9jdXMiLCAidXNlSGl0VGVzdCIsICJ1c2VJbnB1dCIsICJ1c2VMYXlvdXQiLCAidXNlTW91c2UiLCAidXNlUmVzaXplIiwgIlNFU1NJT05fQ09MT1JTIiwgImZ1enp5U2NvcmUiLCAiY3JlYXRlU2lnbmFsIiwgImNyZWF0ZVNpZ25hbCIsICJ0aGVtZSIsICJjb21wYWN0TnVtYmVyIiwgImNyZWF0ZVNpZ25hbCIsICJlYXNlIiwgImxpbmVhciIsICJTY3JvbGxCb3giLCAidXNlQW5pbWF0ZWQiLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAibWl4Q29sb3IiLCAidXNlQW5pbWF0ZWQiLCAiZWFzZSIsICJsaW5lYXIiLCAiZmFpbGVkIiwgImNyZWF0ZVNpZ25hbCIsICJTY3JvbGxCb3giLCAidXNlSW5wdXQiLCAibGFiZWwiLCAiY3JlYXRlU2lnbmFsIiwgIlRleHRJbnB1dCIsICJ1c2VMYXlvdXQiLCAianN4IiwgImpzeHMiLCAidXNlTGF5b3V0IiwgImNyZWF0ZVNpZ25hbCIsICJUZXh0SW5wdXQiLCAiY3JlYXRlU2lnbmFsIiwgIkJ1dHRvbiIsICJUZXh0SW5wdXQiLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAiY3JlYXRlU2lnbmFsIiwgIml0ZW0iLCAidXNlSW5wdXQiLCAiQnV0dG9uIiwgIlRleHRJbnB1dCIsICJjcmVhdGVTaWduYWwiLCAidXNlSW50ZXJ2YWwiLCAidXNlTW91c2UiLCAianN4IiwgImpzeHMiLCAid2lkdGgiLCAidmVyc2lvbiIsICJjcmVhdGVTaWduYWwiLCAidXNlTW91c2UiLCAidXNlSW50ZXJ2YWwiLCAiTWFya2Rvd24iLCAiU2Nyb2xsQm94IiwgInVzZUlucHV0IiwgImpzeCIsICJqc3hzIiwgInVzZUlucHV0IiwgIlNjcm9sbEJveCIsICJNYXJrZG93biIsICJqc3giLCAianN4cyIsICJ1c2VMYXlvdXQiLCAidXNlSW5wdXQiLCAidXNlSGl0VGVzdCIsICJ1c2VNb3VzZSIsICJjcmVhdGVTaWduYWwiLCAiYm9vdCIsICJ2ZXJzaW9uIiwgInVzZUludGVydmFsIiwgInVzZVJlc2l6ZSIsICJ3aWR0aCIsICJkZWZhdWx0TW9kZWwiLCAiZWxhcHNlZCIsICJTRVNTSU9OX0NPTE9SUyIsICJob21lZGlyIiwgImFybWVkIiwgInVzZUZvY3VzIiwgIml0ZW1zIiwgInJvdyIsICJmdXp6eVNjb3JlIiwgIlNjcm9sbEJveCIsICJUZXh0QXJlYSIsICJNZW51IiwgInBlbmRpbmciLCAiU3Bpbm5lciIsICJjb21wYWN0TnVtYmVyIiwgImpzeCIsICJpc0Rldkluc3RhbGwiLCAicnVuVXBkYXRlIiwgImZldGNoTGF0ZXN0VmVyc2lvbiIsICJuZXdlclZlcnNpb24iLCAicnVuSGVhZGxlc3MiLCAicnVuU2hlbGwiLCAicmVhZENvbmZpZyIsICJmaWxlVVJMVG9QYXRoIl0KfQo=
|
|
5645
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL21vZGVsLXJ1bnRpbWUuanMiLCAiLi4vc3JjL2hlYWRsZXNzLmpzIiwgIi4uL3NyYy9zaGVsbC5qcyIsICIuLi9zcmMvbWFpbi5qc3giLCAiLi4vc3JjL2NsaS1hcmdzLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qc3giLCAiLi4vc3JjL3VpL3RoZW1lLmpzIiwgIi4uL3NyYy91aS9wYW5lbHMuanN4IiwgIi4uL3NyYy91aS9hbmltYXRlZC12YWx1ZS5qc3giLCAiLi4vc3JjL3VpL2NvbnRleHQtYmFyLmpzIiwgIi4uL3NyYy91aS93b3Jrc3BhY2Utc2lkZWJhci5qcyIsICIuLi9zcmMvdWkvYXBwLmpzeCIsICIuLi9zcmMvdWkvY29tcG9zZXItY29tbWFuZHMuanMiLCAiLi4vc3JjL3VpL2NvbW1hbmQtZm9ybS5qc3giLCAiLi4vc3JjL2RpY3RhdGlvbi10ZXh0LmpzIiwgIi4uL3NyYy9kaWN0YXRpb24uanMiLCAiLi4vc3JjL2NsaXBib2FyZC5qcyIsICIuLi9zcmMvdWkvY2xpcGJvYXJkLWlucHV0LmpzIiwgIi4uL3NyYy91aS9kaWN0YXRpb24taW5wdXQuanMiLCAiLi4vc3JjL3VpL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzIiwgIi4uL3NyYy9zY3JlZW4tY2FwdHVyZS5qcyIsICIuLi9zcmMvdWkvY29tcG9zZXItZmlsZXMuanMiLCAiLi4vc3JjL3VpL2RpY3RhdGlvbi1pbmRpY2F0b3IuanMiLCAiLi4vc3JjL3VpL2hpZ2hsaWdodC5qcyIsICIuLi9zcmMvdWkvYWN0aXZpdHktc3RyaXAuanMiLCAiLi4vc3JjL3VpL3RyYW5zY3JpcHQuanN4IiwgIi4uL3NyYy91aS90cmFuc2NyaXB0LXdpbmRvdy5qcyIsICIuLi9zcmMvdWkvY29udmVyc2F0aW9uLXNlYXJjaC12aWV3LmpzeCIsICIuLi9zcmMvdWkvcXVlc3Rpb24tZm9ybS5qc3giLCAiLi4vc3JjL3VpL2VtcHR5LXN0YXRlLmpzeCIsICIuLi9zcmMvdWkvaGVscC5qc3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGRpc2NvdmVyS2V5cywgYXBwbHlLZXlzLCBrZXlIaW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9rZXlzLmpzJ1xuaW1wb3J0IHsgbG9hZENhdGFsb2csIGV4dHJhY3RNb2RlbHMsIGFkaG9jTW9kZWwgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NhdGFsb2cuanMnXG5pbXBvcnQgeyBsb2FkQ29kZXhNb2RlbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvZGV4LW1vZGVscy5qcydcbmltcG9ydCB7IGxvYWRPcGVuUm91dGVyTW9kZWxzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVucm91dGVyLW1vZGVscy5qcydcbmltcG9ydCB7IG9wZW5haUNvbm5lY3RlZCwgb3BlbmFpQ3JlZGVudGlhbHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJ1xuaW1wb3J0IHsgZGVmYXVsdE1vZGVsIH0gZnJvbSAncGljb2NvZGUtY29yZS9tb2RlbHMuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcblxuY29uc3QgQ0FUQUxPR19QUk9WSURFUlMgPSBbJ2dvb2dsZScsICdhbnRocm9waWMnLCAnb3BlbmFpJywgJ3hhaSddXG5cbmZ1bmN0aW9uIGNvZGV4Q29udGV4dChjYXRhbG9nRGF0YSwgbW9kZWwpIHtcbiAgY29uc3QgZW50cnkgPSBjYXRhbG9nRGF0YS5vcGVuYWk/Lm1vZGVscz8uW21vZGVsLm5hbWUuc3BsaXQoJy8nKVsxXV1cbiAgcmV0dXJuIG1vZGVsLmNvbnRleHQgPz8gZW50cnk/LmxpbWl0Py5pbnB1dCA/PyBlbnRyeT8ubGltaXQ/LmNvbnRleHQgPz8gbnVsbFxufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZE1vZGVscyh7IHByb3ZpZGVycywgZm9yY2UgfSkge1xuICBjb25zdCBoYXMgPSAocHJvdmlkZXIpID0+IHByb3ZpZGVycy5pbmNsdWRlcyhwcm92aWRlcilcbiAgY29uc3QgY29kZXhDcmVkZW50aWFscyA9IGhhcygnY29kZXgnKSA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IFtjYXRhbG9nRGF0YSwgY29kZXgsIG9wZW5yb3V0ZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGxvYWRDYXRhbG9nKHsgZm9yY2UgfSksXG4gICAgbG9hZENvZGV4TW9kZWxzKGNvZGV4Q3JlZGVudGlhbHMsIHsgZm9yY2UgfSksXG4gICAgaGFzKCdvcGVucm91dGVyJykgPyBsb2FkT3BlblJvdXRlck1vZGVscyh7IGZvcmNlIH0pIDogW10sXG4gIF0pXG4gIHJldHVybiBbXG4gICAgLi4uZXh0cmFjdE1vZGVscyhjYXRhbG9nRGF0YSwgQ0FUQUxPR19QUk9WSURFUlMpLm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAuLi5tb2RlbCxcbiAgICAgIGF2YWlsYWJsZTogaGFzKG1vZGVsLnByb3ZpZGVyKSxcbiAgICAgIGtleUhpbnQ6IGtleUhpbnQobW9kZWwucHJvdmlkZXIpLFxuICAgIH0pKSxcbiAgICAuLi5jb2RleC5tYXAoKG1vZGVsKSA9PiAoe1xuICAgICAgLi4ubW9kZWwsXG4gICAgICBjb250ZXh0OiBjb2RleENvbnRleHQoY2F0YWxvZ0RhdGEsIG1vZGVsKSxcbiAgICAgIGF2YWlsYWJsZTogaGFzKCdjb2RleCcpLFxuICAgICAga2V5SGludDogJy9jb25uZWN0JyxcbiAgICB9KSksXG4gICAgLi4ub3BlbnJvdXRlci5tYXAoKG1vZGVsKSA9PiAoeyAuLi5tb2RlbCwgYXZhaWxhYmxlOiB0cnVlLCBrZXlIaW50OiBrZXlIaW50KCdvcGVucm91dGVyJykgfSkpLFxuICBdXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxSdW50aW1lKCkge1xuICBjb25zdCBjaGF0Z3B0ID0gYXdhaXQgb3BlbmFpQ29ubmVjdGVkKClcbiAgY29uc3QgcHJvdmlkZXJzID0gWy4uLmFwcGx5S2V5cyhkaXNjb3ZlcktleXMoKSksIC4uLihjaGF0Z3B0ID8gWydjb2RleCddIDogW10pXVxuICBjb25zdCBjb2RleENyZWRlbnRpYWxzID0gY2hhdGdwdCA/IGF3YWl0IG9wZW5haUNyZWRlbnRpYWxzKCkuY2F0Y2goKCkgPT4gbnVsbCkgOiBudWxsXG4gIGNvbnN0IGxvYWRNb2RlbHMgPSAoeyBmb3JjZSA9IGZhbHNlIH0gPSB7fSkgPT4gYnVpbGRNb2RlbHMoeyBwcm92aWRlcnMsIGZvcmNlIH0pXG4gIHJldHVybiB7IHByb3ZpZGVycywgbW9kZWxzOiBhd2FpdCBsb2FkTW9kZWxzKCksIGNvZGV4Q3JlZGVudGlhbHMsIGxvYWRNb2RlbHMgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU1vZGVsKG1vZGVscywgcHJvdmlkZXJzLCBuYW1lKSB7XG4gIGlmICghbmFtZSkgcmV0dXJuIG51bGxcbiAgY29uc3QgZXhhY3QgPSBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IG5hbWUpXG4gIGlmIChleGFjdCkgcmV0dXJuIGV4YWN0XG4gIGlmIChuYW1lLmluY2x1ZGVzKCcvJykpIHJldHVybiBhZGhvY01vZGVsKG5hbWUsIHByb3ZpZGVycylcbiAgY29uc3QgYXZhaWxhYmxlID0gbW9kZWxzLmZpbHRlcigobW9kZWwpID0+IG1vZGVsLmF2YWlsYWJsZSAhPT0gZmFsc2UpXG4gIHJldHVybiBhdmFpbGFibGVcbiAgICAgIC5tYXAoKG1vZGVsKSA9PiBbZnV6enlTY29yZShuYW1lLCBtb2RlbC5uYW1lKSwgbW9kZWxdKVxuICAgICAgLmZpbHRlcigoW3Njb3JlXSkgPT4gc2NvcmUgPj0gMClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzBdIC0gYVswXSlbMF0/LlsxXVxuICAgIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZCwgY29uZmlndXJlZCB9KSB7XG4gIHJldHVybiByZXNvbHZlTW9kZWwobW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZClcbiAgICB8fCAoY29uZmlndXJlZCAmJiBtb2RlbHMuZmluZCgobW9kZWwpID0+IG1vZGVsLm5hbWUgPT09IGNvbmZpZ3VyZWQgJiYgbW9kZWwuYXZhaWxhYmxlKSlcbiAgICB8fCBkZWZhdWx0TW9kZWwobW9kZWxzKVxufVxuIiwgImltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgeyBmaW5kTW9kZWwsIHVzYWdlQ29zdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbW9kZWxzLmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0Qm9vdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvYm9vdC5qcydcbmltcG9ydCB7IGNyZWF0ZVNoZWxsTWFuYWdlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2hlbGxzLmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2Vzc2lvbiwgb3BlblNlc3Npb24sIGxvYWRTZXNzaW9uLCBvblNlc3Npb25Xcml0ZUVycm9yIH0gZnJvbSAncGljb2NvZGUtY29yZS9zZXNzaW9uLmpzJ1xuaW1wb3J0IHsgc2Vzc2lvbnNEaXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL3BhdGhzLmpzJ1xuaW1wb3J0IHsgbWFrZUV2ZW50IH0gZnJvbSAncGljb2NvZGUtY29yZS9ldmVudHMuanMnXG5pbXBvcnQgeyBkZXJpdmVTdGF0ZSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlVG9vbHNldCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvdG9vbHMvaW5kZXguanMnXG5pbXBvcnQgeyBydW5UdXJuIH0gZnJvbSAncGljb2NvZGUtY29yZS9hZ2VudC5qcydcbmltcG9ydCB7IGJ1aWxkU3lzdGVtUHJvbXB0IH0gZnJvbSAncGljb2NvZGUtY29yZS9zeXN0ZW0tcHJvbXB0LmpzJ1xuaW1wb3J0IHsgbWVtb3J5SW5kZXggfSBmcm9tICdwaWNvY29kZS1jb3JlL21lbW9yeS5qcydcbmltcG9ydCB7IGZpbmFsaXplVXNlckNvbnRlbnQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2F0dGFjaG1lbnRzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRTdGRpbigpIHtcbiAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpIHJldHVybiAnJ1xuICBsZXQgZGF0YSA9ICcnXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcHJvY2Vzcy5zdGRpbikge1xuICAgIGRhdGEgKz0gY2h1bmtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiA0MDAwMDApIGJyZWFrXG4gIH1cbiAgcmV0dXJuIGRhdGEuc2xpY2UoMCwgNDAwMDAwKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuSGVhZGxlc3Mob3B0cykge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGxvZyA9IG9wdHMucXVpZXQgPyAoKSA9PiB7fSA6IChsaW5lKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShsaW5lICsgJ1xcbicpXG5cbiAgb25TZXNzaW9uV3JpdGVFcnJvcigoZXJyLCBmaWxlKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogY291bGQgbm90IHdyaXRlICR7ZmlsZX06ICR7ZXJyLm1lc3NhZ2V9XFxuYCkpXG5cbiAgY29uc3QgeyBwcm92aWRlcnMsIG1vZGVscywgY29kZXhDcmVkZW50aWFsczogY29kZXhDcmVkcyB9ID0gYXdhaXQgbG9hZE1vZGVsUnVudGltZSgpXG4gIGlmIChwcm92aWRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IG5vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KVxcbicpXG4gICAgcmV0dXJuIDFcbiAgfVxuICBjb25zdCBjb25maWcgPSBhd2FpdCByZWFkQ29uZmlnKClcblxuICBjb25zdCBtb2RlbCA9IHNlbGVjdE1vZGVsKHsgbW9kZWxzLCBwcm92aWRlcnMsIHJlcXVlc3RlZDogb3B0cy5tb2RlbCwgY29uZmlndXJlZDogY29uZmlnLmRlZmF1bHRNb2RlbCB9KVxuICBpZiAoIW1vZGVsIHx8IG1vZGVsLmF2YWlsYWJsZSA9PT0gZmFsc2UpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogbm8gdXNhYmxlIG1vZGVsJHtvcHRzLm1vZGVsID8gYCBtYXRjaGluZyBcIiR7b3B0cy5tb2RlbH1cImAgOiAnJ31cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbiAgaWYgKG9wdHMuc3BlZWQgPT09ICdmYXN0JyAmJiAhbW9kZWwuc3BlZWQpIHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgcGljbzogJHttb2RlbC5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xcXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbiAgY29uc3QgZWZmb3J0ID0gb3B0cy5lZmZvcnQgPz8gKG1vZGVsLmVmZm9ydCA/ICdhdXRvJyA6IG51bGwpXG5cbiAgY29uc3QgYm9vdCA9IGF3YWl0IGJ1aWxkUHJvamVjdEJvb3QocHJvY2Vzcy5jd2QoKSlcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtib290Lm1jcC5jb25uZWN0QWxsKCksIG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMDAwKSldKVxuICBjb25zdCBzaGVsbHMgPSBjcmVhdGVTaGVsbE1hbmFnZXIoKVxuXG4gIGxldCBzZXNzaW9uXG4gIGxldCBldmVudHMgPSBbXVxuICBpZiAob3B0cy5yZXN1bWUpIHtcbiAgICBjb25zdCBmaWxlID0gb3B0cy5yZXN1bWUuaW5jbHVkZXMoJy8nKSA/IG9wdHMucmVzdW1lIDogam9pbihzZXNzaW9uc0Rpcihib290LnJvb3QpLCBgJHtvcHRzLnJlc3VtZX0uanNvbmxgKVxuICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IGxvYWRTZXNzaW9uKGZpbGUpXG4gICAgc2Vzc2lvbiA9IG9wZW5TZXNzaW9uKHsgZmlsZSwgaGVhZGVyOiBsb2FkZWQuaGVhZGVyIH0pXG4gICAgZXZlbnRzID0gbG9hZGVkLmV2ZW50c1xuICB9IGVsc2Uge1xuICAgIHNlc3Npb24gPSBjcmVhdGVTZXNzaW9uKHsgY3dkOiBib290LmN3ZCwgcm9vdDogYm9vdC5yb290IH0pXG4gIH1cblxuICBjb25zdCBwZXJzaXN0ID0gKGV2ZW50KSA9PiB7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQpXG4gICAgc2Vzc2lvbi5hcHBlbmQoZXZlbnQpXG4gICAgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoZXZlbnQpICsgJ1xcbicpXG4gIH1cblxuICBjb25zdCByZXN0b3JlZFNwZWVkID0gZGVyaXZlU3RhdGUoZXZlbnRzKS5zcGVlZFxuICBjb25zdCBzcGVlZCA9IG1vZGVsLnNwZWVkID8gKG9wdHMuc3BlZWQgPz8gKG9wdHMucmVzdW1lID8gcmVzdG9yZWRTcGVlZCA/PyAnc3RhbmRhcmQnIDogY29uZmlnLnNwZWVkRGVmYXVsdHM/Llttb2RlbC5uYW1lXSkgPz8gJ3N0YW5kYXJkJykgOiAnc3RhbmRhcmQnXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdzcGVlZCcsIHsgdG86IHNwZWVkIH0pKVxuXG4gIGNvbnN0IHN0ZGluRGF0YSA9IGF3YWl0IHJlYWRTdGRpbigpXG4gIGNvbnN0IHByb21wdFRleHQgPSBzdGRpbkRhdGEgPyBgJHtvcHRzLnByb21wdH1cXG5cXG5bcGlwZWQgaW5wdXRdXFxuJHtzdGRpbkRhdGF9YCA6IG9wdHMucHJvbXB0XG4gIGNvbnN0IHsgY29udGVudCB9ID0gZmluYWxpemVVc2VyQ29udGVudChwcm9tcHRUZXh0LCBuZXcgTWFwKCkpXG4gIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlOiB7IHJvbGU6ICd1c2VyJywgY29udGVudCB9IH0pKVxuXG4gIGNvbnN0IGRlcml2ZWQgPSBkZXJpdmVTdGF0ZShldmVudHMpXG4gIGNvbnN0IGxvYWRlZEJlZm9yZSA9IG5ldyBTZXQoYm9vdC50cmFja2VyLmxvYWRlZClcbiAgY29uc3QgeyB0b29scywgcmVjb3JkZXIgfSA9IGNyZWF0ZVRvb2xzZXQoe1xuICAgIGN3ZDogYm9vdC5jd2QsXG4gICAgdHJhY2tlcjogYm9vdC50cmFja2VyLFxuICAgIHNraWxsczogYm9vdC5za2lsbHMsXG4gICAgc2hlbGxzLFxuICAgIG1lbW9yeTogYm9vdC5tZW1vcnksXG4gICAgbWNwVG9vbHM6IGJvb3QubWNwLnRvb2xzKCksXG4gICAgdXNlclRvb2xzOiBbXSxcbiAgICBtYXhUb29sQ2FsbHM6IG9wdHMubWF4VG9vbENhbGxzID8/IDUwLFxuICB9KVxuXG4gIGxldCBhdXRoID0gbnVsbFxuICBpZiAobW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcpIHtcbiAgICBhdXRoID0gY29kZXhDcmVkc1xuICAgIGlmICghYXV0aCkge1xuICAgICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoJ3BpY286IGNvZGV4IG1vZGVscyBuZWVkIGEgQ2hhdEdQVCBzaWduLWluIChydW4gcGljbyAtLWNvbm5lY3QpXFxuJylcbiAgICAgIGF3YWl0IHNlc3Npb24uZmx1c2goKVxuICAgICAgcmV0dXJuIDFcbiAgICB9XG4gIH1cblxuICBsb2coYHBpY28gICR7bW9kZWwubmFtZX0ke21vZGVsLnNwZWVkICYmIHNwZWVkID09PSAnZmFzdCcgPyAnICBGYXN0JyA6ICcnfSR7ZWZmb3J0ID8gYCAgJHtlZmZvcnR9YCA6ICcnfSAgc2Vzc2lvbiAke3Nlc3Npb24uaWR9YClcbiAgbGV0IHRob3VnaHRzID0gJydcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVHVybih7XG4gICAgaGlzdG9yeTogZGVyaXZlZC5wcm92aWRlckhpc3RvcnksXG4gICAgdG9vbHMsXG4gICAgcmVjb3JkZXIsXG4gICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgIGVmZm9ydCxcbiAgICAuLi4obW9kZWwucHJvdmlkZXIgPT09ICdjb2RleCcgJiYgeyBzcGVlZCB9KSxcbiAgICBhdXRoLFxuICAgIHN5c3RlbTogYnVpbGRTeXN0ZW1Qcm9tcHQoe1xuICAgICAgY3dkOiBib290LmN3ZCxcbiAgICAgIGNvbnRleHRGaWxlczogYm9vdC5zdGFydHVwQ29udGV4dC5maWxlcyxcbiAgICAgIHNraWxsczogYm9vdC5za2lsbHMubGlzdCgpLFxuICAgICAgbWVtb3J5SW5kZXhUZXh0OiBtZW1vcnlJbmRleChhd2FpdCBib290Lm1lbW9yeS5saXN0KCkuY2F0Y2goKCkgPT4gW10pLCBib290LnJvb3QpLFxuICAgIH0pLFxuICAgIG9uU3RyZWFtOiAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAndGhpbmtpbmcnKSB0aG91Z2h0cyArPSBldmVudC5jb250ZW50XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfY29tcGxldGUnKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcmVjb3JkZXIuZW50cmllcy5hdCgtMSlcbiAgICAgICAgbG9nKGAgIFx1MjcxMyAke2VudHJ5Py5uYW1lID8/IGV2ZW50LmNhbGwuZnVuY3Rpb24ubmFtZX0gICR7ZW50cnk/LnRpdGxlID8/ICcnfWApXG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Rvb2xfZXJyb3InKSBsb2coYCAgXHUyNzE3ICR7ZXZlbnQuY2FsbC5mdW5jdGlvbi5uYW1lfSAgJHtldmVudC5lcnJvci5zbGljZSgwLCAxMjApfWApXG4gICAgfSxcbiAgfSlcblxuICBpZiAodGhvdWdodHMpIHBlcnNpc3QobWFrZUV2ZW50KCd0aG91Z2h0cycsIHsgdGV4dDogdGhvdWdodHMgfSkpXG4gIGZvciAoY29uc3QgbWVzc2FnZSBvZiByZXN1bHQubWVzc2FnZXMpIHBlcnNpc3QobWFrZUV2ZW50KCdtZXNzYWdlJywgeyBtZXNzYWdlIH0pKVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlY29yZGVyLmVudHJpZXMpIHBlcnNpc3QobWFrZUV2ZW50KCd0b29sX21ldGEnLCBlbnRyeSkpXG4gIGZvciAoY29uc3QgcGF0aCBvZiBib290LnRyYWNrZXIubG9hZGVkKSB7XG4gICAgaWYgKCFsb2FkZWRCZWZvcmUuaGFzKHBhdGgpKSBwZXJzaXN0KG1ha2VFdmVudCgnY29udGV4dF9maWxlJywgeyBwYXRoIH0pKVxuICB9XG4gIGlmIChyZXN1bHQudXNhZ2UpIHBlcnNpc3QobWFrZUV2ZW50KCd1c2FnZScsIHsgbW9kZWw6IG1vZGVsLm5hbWUsIHVzYWdlOiByZXN1bHQudXNhZ2UsIGxhc3RQcm9tcHQ6IHJlc3VsdC5sYXN0UHJvbXB0VG9rZW5zIH0pKVxuICBpZiAocmVzdWx0LmludGVycnVwdGVkKSBwZXJzaXN0KG1ha2VFdmVudCgnaW50ZXJydXB0Jywge30pKVxuXG4gIGNvbnN0IHJ1bm5pbmcgPSBzaGVsbHMucnVubmluZygpXG4gIGlmIChydW5uaW5nID4gMCkgbG9nKGAgIGtpbGxpbmcgJHtydW5uaW5nfSBiYWNrZ3JvdW5kIHNoZWxsJHtydW5uaW5nID09PSAxID8gJycgOiAncyd9YClcbiAgc2hlbGxzLmtpbGxBbGwoKVxuICBhd2FpdCBib290Lm1jcC5jbG9zZUFsbCgpLmNhdGNoKCgpID0+IHt9KVxuICAvLyB0aGUgY2FsbGVyIGV4aXRzIHRoZSBwcm9jZXNzIHRoZSBtb21lbnQgdGhpcyByZXR1cm5zLCB3aGljaCB3b3VsZCBkaXNjYXJkXG4gIC8vIGV2ZXJ5IGFwcGVuZCBzdGlsbCBpbiBmbGlnaHRcbiAgYXdhaXQgc2Vzc2lvbi5mbHVzaCgpXG5cbiAgY29uc3QgdGV4dCA9IHJlc3VsdC5tZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ucm9sZSA9PT0gJ2Fzc2lzdGFudCcgJiYgdHlwZW9mIG0uY29udGVudCA9PT0gJ3N0cmluZycgJiYgbS5jb250ZW50KS5hdCgtMSk/LmNvbnRlbnQgPz8gJydcbiAgY29uc3Qgc3VtbWFyeSA9IHtcbiAgICB0ZXh0LFxuICAgIHNlc3Npb246IHNlc3Npb24uaWQsXG4gICAgc2Vzc2lvbkZpbGU6IHNlc3Npb24uZmlsZSxcbiAgICBtb2RlbDogbW9kZWwubmFtZSxcbiAgICB1c2FnZTogcmVzdWx0LnVzYWdlLFxuICAgIGNvc3Q6IHVzYWdlQ29zdChmaW5kTW9kZWwobW9kZWxzLCBtb2RlbC5uYW1lKSwgcmVzdWx0LnVzYWdlKSxcbiAgICB0b29sQ2FsbHM6IHJlY29yZGVyLmVudHJpZXMubGVuZ3RoLFxuICAgIGludGVycnVwdGVkOiByZXN1bHQuaW50ZXJydXB0ZWQsXG4gICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgfVxuXG4gIGlmIChvcHRzLmpzb24pIHByb2Nlc3Muc3Rkb3V0LndyaXRlKEpTT04uc3RyaW5naWZ5KHN1bW1hcnkpICsgJ1xcbicpXG4gIGVsc2UgaWYgKG9wdHMuc3RyZWFtSnNvbikgcHJvY2Vzcy5zdGRvdXQud3JpdGUoSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAncmVzdWx0JywgLi4uc3VtbWFyeSwgdGV4dDogdW5kZWZpbmVkLCBhdDogRGF0ZS5ub3coKSB9KSArICdcXG4nKVxuICBlbHNlIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRleHQgKyAnXFxuJylcblxuICByZXR1cm4gcmVzdWx0LmludGVycnVwdGVkID8gMSA6IDBcbn1cbiIsICJpbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IHJ1blR1cm4gfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LmpzJ1xuaW1wb3J0IHsgcmVhZENvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSwgc2VsZWN0TW9kZWwgfSBmcm9tICcuL21vZGVsLXJ1bnRpbWUuanMnXG5cbmNvbnN0IFNZU1RFTSA9ICh7IHBsYXRmb3JtLCBzaGVsbCwgY3dkIH0pID0+IGBHZW5lcmF0ZSBleGFjdGx5IG9uZSBzaGVsbCBjb21tYW5kIHRoYXQgc2F0aXNmaWVzIHRoZSB1c2VyJ3MgcmVxdWVzdC4gVGhlIG91dHB1dCBtdXN0IGJlIGEgdmFsaWQgc2hlbGwgY29tbWFuZCB3aXRob3V0IE1hcmtkb3duIGZvcm1hdHRpbmcuIElmIG11bHRpcGxlIHN0ZXBzIGFyZSByZXF1aXJlZCwgdHJ5IHRvIGNvbWJpbmUgdGhlbSB0b2dldGhlciB1c2luZyAmJi5cblxuRW52aXJvbm1lbnQ6XG4tIG9wZXJhdGluZyBzeXN0ZW06ICR7cGxhdGZvcm19XG4tIHNoZWxsOiAke3NoZWxsfVxuLSBjdXJyZW50IGRpcmVjdG9yeTogJHtjd2R9XG5cbk91dHB1dCBvbmx5IHRoZSBjb21tYW5kIGFzIG9uZSBsaW5lLiBEbyBub3QgdXNlIE1hcmtkb3duIGZvcm1hdHRpbmcgc3VjaCBhcyBcXGBcXGBcXGAuIERvIG5vdCBleHBsYWluIHRoZSBjb21tYW5kLiBEbyBub3QgZXhlY3V0ZSB0aGUgY29tbWFuZC5gXG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpIHtcbiAgY29uc3QgY29tbWFuZCA9IHRleHQudHJpbSgpXG4gIGlmICghY29tbWFuZCkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgYW4gZW1wdHkgY29tbWFuZCcpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdcXDAnKSB8fCAvW1xcclxcbl0vLnRlc3QoY29tbWFuZCkpIHRocm93IG5ldyBFcnJvcigndGhlIG1vZGVsIHJldHVybmVkIG1vcmUgdGhhbiBvbmUgbGluZScpXG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKCdgYGAnKSkgdGhyb3cgbmV3IEVycm9yKCd0aGUgbW9kZWwgcmV0dXJuZWQgTWFya2Rvd24gaW5zdGVhZCBvZiBhIGNvbW1hbmQnKVxuICByZXR1cm4gY29tbWFuZFxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuU2hlbGwob3B0cywgZGVwZW5kZW5jaWVzID0ge30pIHtcbiAgY29uc3Qgc3RkZXJyID0gZGVwZW5kZW5jaWVzLnN0ZGVyciB8fCBwcm9jZXNzLnN0ZGVyclxuICBjb25zdCBzdGRvdXQgPSBkZXBlbmRlbmNpZXMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0XG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgKGRlcGVuZGVuY2llcy5yZWFkQ29uZmlnIHx8IHJlYWRDb25maWcpKClcbiAgICBjb25zdCBydW50aW1lID0gYXdhaXQgKGRlcGVuZGVuY2llcy5sb2FkTW9kZWxSdW50aW1lIHx8IGxvYWRNb2RlbFJ1bnRpbWUpKClcbiAgICBpZiAocnVudGltZS5wcm92aWRlcnMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ25vIGNyZWRlbnRpYWxzIGZvdW5kIChzZXQgYSBwcm92aWRlciBrZXkgb3IgcnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCBjb25maWd1cmVkTW9kZWwgPSBjb25maWcubW9kZWxzPy5zaGVsbFxuICAgIGNvbnN0IG1vZGVsID0gc2VsZWN0TW9kZWwoe1xuICAgICAgbW9kZWxzOiBydW50aW1lLm1vZGVscyxcbiAgICAgIHByb3ZpZGVyczogcnVudGltZS5wcm92aWRlcnMsXG4gICAgICByZXF1ZXN0ZWQ6IG9wdHMubW9kZWwsXG4gICAgICBjb25maWd1cmVkOiBjb25maWd1cmVkTW9kZWwgfHwgY29uZmlnLmRlZmF1bHRNb2RlbCxcbiAgICB9KVxuICAgIGNvbnN0IHJlcXVlc3RlZE5hbWUgPSBvcHRzLm1vZGVsIHx8IGNvbmZpZ3VyZWRNb2RlbFxuICAgIGlmICghbW9kZWwgfHwgbW9kZWwuYXZhaWxhYmxlID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyB1c2FibGUgbW9kZWwke3JlcXVlc3RlZE5hbWUgPyBgIG1hdGNoaW5nIFwiJHtyZXF1ZXN0ZWROYW1lfVwiYCA6ICcnfWApXG4gICAgfVxuXG4gICAgaWYgKG9wdHMuc3BlZWQgPT09ICdmYXN0JyAmJiAhbW9kZWwuc3BlZWQpIHRocm93IG5ldyBFcnJvcihgJHttb2RlbC5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xgKVxuXG4gICAgY29uc3QgYXV0aCA9IG1vZGVsLnByb3ZpZGVyID09PSAnY29kZXgnID8gcnVudGltZS5jb2RleENyZWRlbnRpYWxzIDogbnVsbFxuICAgIGlmIChtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiAhYXV0aCkgdGhyb3cgbmV3IEVycm9yKCdjb2RleCBtb2RlbHMgbmVlZCBhIENoYXRHUFQgc2lnbi1pbiAocnVuIHBpY28gLS1jb25uZWN0KScpXG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoZGVwZW5kZW5jaWVzLnJ1blR1cm4gfHwgcnVuVHVybikoe1xuICAgICAgaGlzdG9yeTogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiBvcHRzLnByb21wdCB9XSxcbiAgICAgIHRvb2xzOiBbXSxcbiAgICAgIHJlY29yZGVyOiBudWxsLFxuICAgICAgbW9kZWxOYW1lOiBtb2RlbC5uYW1lLFxuICAgICAgZWZmb3J0OiBvcHRzLmVmZm9ydCA/PyAobW9kZWwuZWZmb3J0ID8gJ2xvdycgOiBudWxsKSxcbiAgICAgIC4uLihtb2RlbC5wcm92aWRlciA9PT0gJ2NvZGV4JyAmJiB7IHNwZWVkOiBtb2RlbC5zcGVlZCA/IChvcHRzLnNwZWVkID8/ICdzdGFuZGFyZCcpIDogJ3N0YW5kYXJkJyB9KSxcbiAgICAgIGF1dGgsXG4gICAgICBzeXN0ZW06IFNZU1RFTSh7XG4gICAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJyA/ICdtYWNPUycgOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgICBzaGVsbDogYmFzZW5hbWUocHJvY2Vzcy5lbnYuU0hFTEwgfHwgJ3pzaCcpLFxuICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICB9KSxcbiAgICB9KVxuICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IpXG4gICAgaWYgKHJlc3VsdC5pbnRlcnJ1cHRlZCkgdGhyb3cgbmV3IEVycm9yKCdjb21tYW5kIGdlbmVyYXRpb24gd2FzIGludGVycnVwdGVkJylcbiAgICBjb25zdCB0ZXh0ID0gcmVzdWx0Lm1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnICYmIHR5cGVvZiBtZXNzYWdlLmNvbnRlbnQgPT09ICdzdHJpbmcnKVxuICAgICAgLmF0KC0xKT8uY29udGVudCB8fCAnJ1xuICAgIHN0ZG91dC53cml0ZShjb21tYW5kRnJvbVJlc3BvbnNlKHRleHQpICsgJ1xcbicpXG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBzdGRlcnIud3JpdGUoYHBpY286ICR7ZXJyb3IubWVzc2FnZX1cXG5gKVxuICAgIHJldHVybiAxXG4gIH1cbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJ1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJ1xuaW1wb3J0IHsgZW5zdXJlRGFlbW9uIH0gZnJvbSAncGljb2NvZGUtY29yZS9kYWVtb24tdHJhbnNwb3J0LmpzJ1xuaW1wb3J0IHsgY3JlYXRlUmVtb3RlQ29udHJvbGxlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvcmVtb3RlLWNvbnRyb2xsZXIuanMnXG5pbXBvcnQgeyBtb3VudCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IHBhcnNlQXJncywgVVNBR0UgfSBmcm9tICcuL2NsaS1hcmdzLmpzJ1xuaW1wb3J0IHsgbG9hZE1vZGVsUnVudGltZSB9IGZyb20gJy4vbW9kZWwtcnVudGltZS5qcydcbmltcG9ydCB7IHJlYWRDb25maWcgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbmZpZy5qcydcbmltcG9ydCB7IGRldGVjdFRlcm1pbmFsVGhlbWUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rlcm1pbmFsLXRoZW1lLmpzJ1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi91aS9hcHAuanN4J1xuaW1wb3J0IHsgREVGQVVMVF9BQ0NFTlQsIE1VVEVELCBzZXRQYWxldHRlLCBwYWxldHRlTGlzdCB9IGZyb20gJy4vdWkvdGhlbWUuanMnXG5cbmNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4uL3BhY2thZ2UuanNvbicsIGltcG9ydC5tZXRhLnVybCksICd1dGYtOCcpKVxuXG5sZXQgY2xpXG50cnkge1xuICBjbGkgPSBwYXJzZUFyZ3MocHJvY2Vzcy5hcmd2LnNsaWNlKDIpKVxufSBjYXRjaCAoZXJyKSB7XG4gIGNvbnNvbGUuZXJyb3IoYHBpY286ICR7ZXJyLm1lc3NhZ2V9YClcbiAgY29uc29sZS5lcnJvcihVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWxwJykge1xuICBjb25zb2xlLmxvZyhVU0FHRSlcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd2ZXJzaW9uJykge1xuICBjb25zb2xlLmxvZyhwa2cudmVyc2lvbilcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5pZiAoY2xpLm1vZGUgPT09ICd1cGRhdGUnKSB7XG4gIGNvbnN0IHsgaXNEZXZJbnN0YWxsLCBydW5VcGRhdGUsIGZldGNoTGF0ZXN0VmVyc2lvbiwgbmV3ZXJWZXJzaW9uIH0gPSBhd2FpdCBpbXBvcnQoJ3BpY29jb2RlLWNvcmUvdXBkYXRlLmpzJylcbiAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSB7XG4gICAgY29uc29sZS5lcnJvcigndGhpcyBwaWNvIHJ1bnMgZnJvbSBhIHNvdXJjZSBjaGVja291dDsgdXBkYXRlIGl0IHdpdGggZ2l0LCBub3QgbnBtJylcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxuICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICBpZiAobGF0ZXN0ICYmICFuZXdlclZlcnNpb24ocGtnLnZlcnNpb24sIGxhdGVzdCkpIHtcbiAgICBjb25zb2xlLmxvZyhgcGljbyB2JHtwa2cudmVyc2lvbn0gaXMgYWxyZWFkeSB0aGUgbGF0ZXN0YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGluZyBwaWNvY29kZSAke2xhdGVzdCA/IGB0byB2JHtsYXRlc3R9IGAgOiAnJ312aWEgbnBtLi4uYClcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuVXBkYXRlKClcbiAgaWYgKHJlc3VsdC5vaykge1xuICAgIGNvbnNvbGUubG9nKGB1cGRhdGVkJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9YClcbiAgICBwcm9jZXNzLmV4aXQoMClcbiAgfVxuICBjb25zb2xlLmVycm9yKGB1cGRhdGUgZmFpbGVkOlxcbiR7cmVzdWx0Lm91dHB1dH1gKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cbmlmIChjbGkubW9kZSA9PT0gJ2Nvbm5lY3QnKSB7XG4gIGNvbnN0IHsgY29ubmVjdE9wZW5BSSB9ID0gYXdhaXQgaW1wb3J0KCdwaWNvY29kZS1jb3JlL29wZW5haS1hdXRoLmpzJylcbiAgdHJ5IHtcbiAgICBjb25zb2xlLmVycm9yKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjb25zdCB7IGVtYWlsIH0gPSBhd2FpdCBjb25uZWN0T3BlbkFJKHsgb25Vcmw6ICh1cmwpID0+IGNvbnNvbGUuZXJyb3IoYGlmIHRoZSBicm93c2VyIGRpZCBub3Qgb3BlbiwgdmlzaXQ6XFxuJHt1cmx9YCkgfSlcbiAgICBjb25zb2xlLmxvZyhgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J31gKVxuICAgIHByb2Nlc3MuZXhpdCgwKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKGBjb25uZWN0IGZhaWxlZDogJHtlcnIubWVzc2FnZX1gKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9XG59XG5pZiAoY2xpLm1vZGUgPT09ICdoZWFkbGVzcycpIHtcbiAgY29uc3QgeyBydW5IZWFkbGVzcyB9ID0gYXdhaXQgaW1wb3J0KCcuL2hlYWRsZXNzLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1bkhlYWRsZXNzKGNsaSkpXG59XG5pZiAoY2xpLm1vZGUgPT09ICdzaGVsbCcpIHtcbiAgY29uc3QgeyBydW5TaGVsbCB9ID0gYXdhaXQgaW1wb3J0KCcuL3NoZWxsLmpzJylcbiAgcHJvY2Vzcy5leGl0KGF3YWl0IHJ1blNoZWxsKGNsaSkpXG59XG5cbmNvbnN0IHsgcHJvdmlkZXJzIH0gPSBhd2FpdCBsb2FkTW9kZWxSdW50aW1lKClcblxuaWYgKHByb3ZpZGVycy5sZW5ndGggPT09IDApIHtcbiAgY29uc29sZS5lcnJvcigncGljbzogbm8gY3JlZGVudGlhbHMgZm91bmQuJylcbiAgY29uc29sZS5lcnJvcignc2V0IG9uZSBvZjogR0VNSU5JX0FQSV9LRVksIEFOVEhST1BJQ19BUElfS0VZLCBPUEVOQUlfQVBJX0tFWSwgWEFJX0FQSV9LRVksIE9QRU5ST1VURVJfQVBJX0tFWScpXG4gIGNvbnNvbGUuZXJyb3IoJ29yIHNpZ24gaW4gd2l0aCBhIENoYXRHUFQgcGxhbjogcGljbyAtLWNvbm5lY3QnKVxuICBwcm9jZXNzLmV4aXQoMSlcbn1cblxuY29uc3QgY29uZmlnID0gYXdhaXQgcmVhZENvbmZpZygpXG5cbmNvbnN0IGRldGVjdGVkVGhlbWUgPSBhd2FpdCBkZXRlY3RUZXJtaW5hbFRoZW1lKClcbmNvbnN0IHRoZW1lT3ZlcnJpZGUgPSBwYWxldHRlTGlzdCgpLnNvbWUoKHApID0+IHAua2V5ID09PSBjb25maWcudGhlbWUpID8gY29uZmlnLnRoZW1lIDogbnVsbFxuc2V0UGFsZXR0ZSh0aGVtZU92ZXJyaWRlIHx8IGRldGVjdGVkVGhlbWUpXG5jb25zdCB0aGVtZSA9IHsgYWNjZW50OiBERUZBVUxUX0FDQ0VOVCwgbXV0ZWQ6IE1VVEVEIH1cblxuY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGVuc3VyZURhZW1vbih7IGVudHJ5OiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vZGFlbW9uLmpzJywgaW1wb3J0Lm1ldGEudXJsKSkgfSlcbmNvbnN0IGNvbnRyb2xsZXIgPSBhd2FpdCBjcmVhdGVSZW1vdGVDb250cm9sbGVyKGNvbm5lY3Rpb24sIHtcbiAgb3B0aW9uczogeyBjd2Q6IHByb2Nlc3MuY3dkKCksIHZlcnNpb246IHBrZy52ZXJzaW9uLCB0aGVtZSwgZGV0ZWN0ZWRUaGVtZSwgdGhlbWVQcmVmOiB0aGVtZU92ZXJyaWRlIHx8ICdhdXRvJyB9LFxuICBsb2NhbEJvb3Q6IHsgcmVmczoge30gfSxcbn0pXG5jb25zdCBib290ID0gY29udHJvbGxlci5ib290XG5pZiAoY2xpLnNwZWVkKSBhd2FpdCBjb250cm9sbGVyLnNwZWVkQ29tbWFuZChjbGkuc3BlZWQpXG5mb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR0lOVCcsICdTSUdURVJNJywgJ1NJR0hVUCddKSBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICBjb25uZWN0aW9uLmNsb3NlKClcbiAgcHJvY2Vzcy5leGl0KDApXG59KVxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IGNvbm5lY3Rpb24uY2xvc2UoKSlcbmNvbnN0IGFwcCA9IG1vdW50KCgpID0+IDxBcHAgYm9vdD17Ym9vdH0gY29udHJvbGxlcj17Y29udHJvbGxlcn0gLz4sIHsgdGl0bGU6IGBwaWNvICAke2Jvb3Qucm9vdC5zcGxpdCgnLycpLnBvcCgpfWAsIHRoZW1lIH0pXG5ib290LnNldFRoZW1lID0gYXBwLnNldFRoZW1lXG4iLCAiZXhwb3J0IGNvbnN0IFVTQUdFID0gYHBpY28gLSBhIGNvZGluZyBhZ2VudCBpbiB5b3VyIHRlcm1pbmFsXG5cbnVzYWdlOlxuICBwaWNvICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSBzZXNzaW9uIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeVxuICBwaWNvIC1wIFwicHJvbXB0XCIgICAgICAgICAgIGhlYWRsZXNzOiBydW4gb25lIGFnZW50aWMgdHVybiwgcHJpbnQgdGhlIGFuc3dlclxuICBwaWNvIC1zIFwicmVxdWVzdFwiICAgICAgICAgIGdlbmVyYXRlIG9uZSBzaGVsbCBjb21tYW5kLCB3aXRob3V0IHJ1bm5pbmcgaXRcbiAgY2F0IGxvZyB8IHBpY28gLXAgXCIuLi5cIiAgICBzdGRpbiBpcyBhcHBlbmRlZCB0byB0aGUgcHJvbXB0IGFzIGNvbnRleHRcblxuY29tbWFuZCBmbGFnczpcbiAgLXAsIC0tcHJpbnQgPHByb21wdD4gICAgICAgcnVuIG9uZSBhZ2VudGljIHR1cm4gYW5kIHByaW50IHRoZSBhbnN3ZXJcbiAgLXMsIC0tc2hlbGwgPHJlcXVlc3Q+ICAgICAgcHJpbnQgb25lIGdlbmVyYXRlZCBzaGVsbCBjb21tYW5kXG4gIC0tanNvbiAgICAgICAgICAgICAgICAgICAgIHByaW50IGEgc2luZ2xlIEpTT04gcmVzdWx0IG9iamVjdCB0byBzdGRvdXRcbiAgLS1zdHJlYW0tanNvbiAgICAgICAgICAgICAgc3RyZWFtIHNlc3Npb24gZXZlbnRzIHRvIHN0ZG91dCBhcyBqc29ubFxuICAtbSwgLS1tb2RlbCA8bmFtZT4gICAgICAgICBtb2RlbCB0byB1c2UgKGZ1enp5IG1hdGNoZWQsIG9yIHJhdyBwcm92aWRlci9tb2RlbClcbiAgLS1zcGVlZCA8bGV2ZWw+ICAgICAgICAgICAgc3BlZWQ6IHN0YW5kYXJkfGZhc3RcbiAgLS1lZmZvcnQgPGxldmVsPiAgICAgICAgICAgdGhpbmtpbmcgZWZmb3J0OiBhdXRvfGxvd3xtZWRpdW18aGlnaHxtYXhcbiAgLS1yZXN1bWUgPHNlc3Npb24taWQ+ICAgICAgY29udGludWUgYW4gZXhpc3Rpbmcgc2Vzc2lvbiBmcm9tIHRoaXMgcHJvamVjdFxuICAtLW1heC10b29sLWNhbGxzIDxuPiAgICAgICBzdG9wIHRoZSBhZ2VudCBhZnRlciBuIHRvb2wgY2FsbHMgKGRlZmF1bHQgNTApXG4gIC1xLCAtLXF1aWV0ICAgICAgICAgICAgICAgIG5vIHByb2dyZXNzIG91dHB1dCBvbiBzdGRlcnJcblxuICAtLWNvbm5lY3QgICAgICAgICAgICAgICAgICBzaWduIGluIHdpdGggYSBDaGF0R1BUIHBsYW4gKE9BdXRoIGluIHlvdXIgYnJvd3NlcilcbiAgdXBkYXRlLCAtLXVwZGF0ZSAgICAgICAgICAgdXBkYXRlIHBpY28gdG8gdGhlIGxhdGVzdCByZWxlYXNlIGZyb20gbnBtXG4gIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwXG4gIC12LCAtLXZlcnNpb24gICAgICAgICAgICAgIHNob3cgdmVyc2lvbmBcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2KSB7XG4gIGNvbnN0IG9wdHMgPSB7IG1vZGU6ICdpbnRlcmFjdGl2ZScgfVxuICBjb25zdCB0YWtlVmFsdWUgPSAobmFtZSwgaSkgPT4ge1xuICAgIGlmIChpICsgMSA+PSBhcmd2Lmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IHJlcXVpcmVzIGEgdmFsdWVgKVxuICAgIHJldHVybiBhcmd2W2kgKyAxXVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd2Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJnID0gYXJndltpXVxuICAgIGlmIChhcmcgPT09ICctcCcgfHwgYXJnID09PSAnLS1wcmludCcpIHtcbiAgICAgIGlmIChvcHRzLm1vZGUgIT09ICdpbnRlcmFjdGl2ZScpIHRocm93IG5ldyBFcnJvcihgJHthcmd9IGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFub3RoZXIgY29tbWFuZCBtb2RlYClcbiAgICAgIG9wdHMubW9kZSA9ICdoZWFkbGVzcydcbiAgICAgIG9wdHMucHJvbXB0ID0gdGFrZVZhbHVlKGFyZywgaSlcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLXMnIHx8IGFyZyA9PT0gJy0tc2hlbGwnKSB7XG4gICAgICBpZiAob3B0cy5tb2RlICE9PSAnaW50ZXJhY3RpdmUnKSB0aHJvdyBuZXcgRXJyb3IoYCR7YXJnfSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbm90aGVyIGNvbW1hbmQgbW9kZWApXG4gICAgICBvcHRzLm1vZGUgPSAnc2hlbGwnXG4gICAgICBvcHRzLnByb21wdCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tanNvbicpIG9wdHMuanNvbiA9IHRydWVcbiAgICBlbHNlIGlmIChhcmcgPT09ICctLXN0cmVhbS1qc29uJykgb3B0cy5zdHJlYW1Kc29uID0gdHJ1ZVxuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy1tJyB8fCBhcmcgPT09ICctLW1vZGVsJykge1xuICAgICAgb3B0cy5tb2RlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tZWZmb3J0Jykge1xuICAgICAgY29uc3QgbGV2ZWwgPSB0YWtlVmFsdWUoYXJnLCBpKVxuICAgICAgaWYgKCFbJ2F1dG8nLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddLmluY2x1ZGVzKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZWZmb3J0IFwiJHtsZXZlbH1cIjogdXNlIGF1dG98bG93fG1lZGl1bXxoaWdofG1heGApXG4gICAgICB9XG4gICAgICBvcHRzLmVmZm9ydCA9IGxldmVsXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tc3BlZWQnKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIVsnc3RhbmRhcmQnLCAnZmFzdCddLmluY2x1ZGVzKGxldmVsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3BlZWQgXCIke2xldmVsfVwiOiB1c2Ugc3RhbmRhcmR8ZmFzdGApXG4gICAgICB9XG4gICAgICBvcHRzLnNwZWVkID0gbGV2ZWxcbiAgICAgIGkrK1xuICAgIH0gZWxzZSBpZiAoYXJnID09PSAnLS1yZXN1bWUnKSB7XG4gICAgICBvcHRzLnJlc3VtZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpKytcbiAgICB9IGVsc2UgaWYgKGFyZyA9PT0gJy0tbWF4LXRvb2wtY2FsbHMnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRha2VWYWx1ZShhcmcsIGkpXG4gICAgICBpZiAoIS9eXFxkKyQvLnRlc3QodmFsdWUpKSB0aHJvdyBuZXcgRXJyb3IoJy0tbWF4LXRvb2wtY2FsbHMgcmVxdWlyZXMgYSBwb3NpdGl2ZSBpbnRlZ2VyJylcbiAgICAgIG9wdHMubWF4VG9vbENhbGxzID0gTnVtYmVyKHZhbHVlKVxuICAgICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihvcHRzLm1heFRvb2xDYWxscykgfHwgb3B0cy5tYXhUb29sQ2FsbHMgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignLS1tYXgtdG9vbC1jYWxscyByZXF1aXJlcyBhIHBvc2l0aXZlIGludGVnZXInKVxuICAgICAgfVxuICAgICAgaSsrXG4gICAgfSBlbHNlIGlmIChhcmcgPT09ICctLWNvbm5lY3QnKSBvcHRzLm1vZGUgPSAnY29ubmVjdCdcbiAgICBlbHNlIGlmIChhcmcgPT09ICd1cGRhdGUnIHx8IGFyZyA9PT0gJy0tdXBkYXRlJykgb3B0cy5tb2RlID0gJ3VwZGF0ZSdcbiAgICBlbHNlIGlmIChhcmcgPT09ICctcScgfHwgYXJnID09PSAnLS1xdWlldCcpIG9wdHMucXVpZXQgPSB0cnVlXG4gICAgZWxzZSBpZiAoYXJnID09PSAnLWgnIHx8IGFyZyA9PT0gJy0taGVscCcpIG9wdHMubW9kZSA9ICdoZWxwJ1xuICAgIGVsc2UgaWYgKGFyZyA9PT0gJy12JyB8fCBhcmcgPT09ICctLXZlcnNpb24nKSBvcHRzLm1vZGUgPSAndmVyc2lvbidcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBhcmd1bWVudCBcIiR7YXJnfVwiYClcbiAgfVxuXG4gIGlmIChvcHRzLm1vZGUgPT09ICdoZWFkbGVzcycgJiYgIW9wdHMucHJvbXB0Py50cmltKCkpIHRocm93IG5ldyBFcnJvcignLXAgcmVxdWlyZXMgYSBub24tZW1wdHkgcHJvbXB0JylcbiAgaWYgKG9wdHMubW9kZSA9PT0gJ3NoZWxsJykge1xuICAgIGlmICghb3B0cy5wcm9tcHQ/LnRyaW0oKSkgdGhyb3cgbmV3IEVycm9yKCctcyByZXF1aXJlcyBhIG5vbi1lbXB0eSByZXF1ZXN0JylcbiAgICBjb25zdCBpbmNvbXBhdGlibGUgPSBbb3B0cy5qc29uICYmICctLWpzb24nLCBvcHRzLnN0cmVhbUpzb24gJiYgJy0tc3RyZWFtLWpzb24nLCBvcHRzLnJlc3VtZSAmJiAnLS1yZXN1bWUnLCBvcHRzLm1heFRvb2xDYWxscyAmJiAnLS1tYXgtdG9vbC1jYWxscyddLmZpbmQoQm9vbGVhbilcbiAgICBpZiAoaW5jb21wYXRpYmxlKSB0aHJvdyBuZXcgRXJyb3IoYCR7aW5jb21wYXRpYmxlfSBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tc2hlbGxgKVxuICB9XG4gIHJldHVybiBvcHRzXG59XG4iLCAiaW1wb3J0IHsgU2Nyb2xsQm94LCB1c2VGb2N1cywgdXNlTGF5b3V0LCB1c2VJbnRlcnZhbCwgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnXG5pbXBvcnQgeyBTRVNTSU9OX0NPTE9SUyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29udHJvbGxlci5qcydcbmltcG9ydCB7IEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgYWNjZW50IH0gZnJvbSAnLi90aGVtZS5qcydcbmltcG9ydCB7IHRpbWVBZ28gfSBmcm9tICcuL3BhbmVscy5qc3gnXG5cbmZ1bmN0aW9uIFNlc3Npb25Sb3coeyByb3csIHNlbGVjdGVkLCBmb2N1cywgbm93IH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgZm9jdXMuaXRlbShyb3cuaWQsIGxheW91dClcbiAgY29uc3QgY29sb3IgPSBTRVNTSU9OX0NPTE9SU1tyb3cuY29sb3JdIHx8IHJvdy5jb2xvciB8fCBhY2NlbnQoKVxuICByZXR1cm4gPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDEsIGhlaWdodDogMiwgZmxleFNocmluazogMCwgYmc6IHNlbGVjdGVkID8gY29sb3IgOiB1bmRlZmluZWQgfX0+XG4gICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IGNvbG9yLCBib2xkOiB0cnVlLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCR7cm93LnN0YXR1cyA9PT0gJ2J1c3knID8gJ1x1MjVDRicgOiAnXHUyNUNCJ30gJHtyb3cubmFtZX1gfTwvdGV4dD5cbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e3Jvdy5zdGF0dXMgPT09ICdidXN5JyA/IHJvdy5hY3Rpdml0eSB8fCAnd29ya2luZycgOiByb3cubGFzdE1lc3NhZ2VBdCA/IGBMYXN0IG1lc3NhZ2UgJHt0aW1lQWdvKHJvdy5sYXN0TWVzc2FnZUF0KX1gIDogJ2lkbGUnfTwvdGV4dD5cbiAgPC9ib3g+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXb3Jrc3BhY2VTaWRlYmFyKHsgZ3JvdXBzLCBzZWxlY3RlZCwgd2lkdGgsIGxvYWRpbmcsIGVycm9yLCBvbkhlaWdodCB9KSB7XG4gIGNvbnN0IGZvY3VzID0gdXNlRm9jdXMoeyBpbml0aWFsOiBudWxsLCBhY3RpdmU6IGZhbHNlIH0pXG4gIGNvbnN0IFtub3csIHNldE5vd10gPSBjcmVhdGVTaWduYWwoRGF0ZS5ub3coKSlcbiAgdXNlSW50ZXJ2YWwoKCkgPT4gc2V0Tm93KERhdGUubm93KCkpLCAxMDAwMClcbiAgaWYgKHNlbGVjdGVkKSBmb2N1cy5mb2N1cyhzZWxlY3RlZClcbiAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICByZXR1cm4gPGJveCBzdHlsZT17eyB3aWR0aCwgZmxleFNocmluazogMCwgaGVpZ2h0OiAnMTAwJScsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcgfX0+XG4gICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUsIHBhZGRpbmdYOiAxIH19PlNlc3Npb25zPC90ZXh0PlxuICAgIHtsb2FkaW5nICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5sb2FkaW5nPC90ZXh0Pn1cbiAgICB7ZXJyb3IgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57ZXJyb3J9PC90ZXh0Pn1cbiAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvbGxvd0ZvY3VzPXtmb2N1c30gZm9jdXNQYWRkaW5nPXsxfSBvbk1ldHJpY3M9eyhtZXRyaWNzKSA9PiBvbkhlaWdodChtZXRyaWNzLnZpc2libGVIZWlnaHQpfT5cbiAgICAgIHtncm91cHMubWFwKChncm91cCwgaW5kZXgpID0+IDxib3gga2V5PXtncm91cC5jd2R9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IGluZGV4ID4gMCA/IDEgOiAwIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIG92ZXJmbG93OiAndHJ1bmNhdGUnLCBwYWRkaW5nWDogMSB9fT57Z3JvdXAuY3dkID09PSBob21lID8gJ34nIDogZ3JvdXAuY3dkLnN0YXJ0c1dpdGgoaG9tZSArICcvJykgPyAnficgKyBncm91cC5jd2Quc2xpY2UoaG9tZS5sZW5ndGgpIDogZ3JvdXAuY3dkfTwvdGV4dD5cbiAgICAgICAge2dyb3VwLnNlc3Npb25zLm1hcCgocm93KSA9PiA8U2Vzc2lvblJvdyBrZXk9e3Jvdy5pZH0gcm93PXtyb3d9IHNlbGVjdGVkPXtyb3cuaWQgPT09IHNlbGVjdGVkfSBmb2N1cz17Zm9jdXN9IG5vdz17bm93KCl9IC8+KX1cbiAgICAgIDwvYm94Pil9XG4gICAgPC9TY3JvbGxCb3g+XG4gIDwvYm94PlxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcblxuY29uc3QgUEFMRVRURVMgPSB7XG4gIGRhcms6IHtcbiAgICBkZXNjOiAnbGlnaHQgdGV4dCBmb3IgZGFyayB0ZXJtaW5hbHMnLFxuICAgIGFjY2VudDogJyNmODcxNzEnLFxuICAgIGZnOiAnI2U1ZTdlYicsXG4gICAgZmdTb2Z0OiAnIzljYTNhZicsXG4gICAgbXV0ZWQ6ICcjYjhjMGQwJyxcbiAgICBwYW5lbEJnOiAnIzFlMWUyMicsXG4gICAgc2VsZWN0Qmc6ICcjMzc0MTUxJyxcbiAgICByZWQ6ICcjZjg3MTcxJyxcbiAgICBncmVlbjogJyM0YWRlODAnLFxuICAgIHBlZXI6ICcjYzRiNWZkJyxcbiAgICBoaWdobGlnaHQ6ICcjZmZmZmZmJyxcbiAgICBzaGlraTogJ25vcmQnLFxuICB9LFxuICBsaWdodDoge1xuICAgIGRlc2M6ICdkYXJrIHRleHQgZm9yIGxpZ2h0IHRlcm1pbmFscycsXG4gICAgYWNjZW50OiAnI2RjMjYyNicsXG4gICAgZmc6ICcjMWYyNDMwJyxcbiAgICBmZ1NvZnQ6ICcjNGI1NTYzJyxcbiAgICBtdXRlZDogJyM0YjU1NjMnLFxuICAgIHBhbmVsQmc6ICcjZTllOWVlJyxcbiAgICBzZWxlY3RCZzogJyNkNGQ0ZGMnLFxuICAgIHJlZDogJyNkYzI2MjYnLFxuICAgIGdyZWVuOiAnIzE2YTM0YScsXG4gICAgcGVlcjogJyM2ZDI4ZDknLFxuICAgIGhpZ2hsaWdodDogJyMxMTE4MjcnLFxuICAgIHNoaWtpOiAnZ2l0aHViLWxpZ2h0JyxcbiAgfSxcbiAgbm9yZDoge1xuICAgIGRlc2M6ICdhcmN0aWMgYmx1ZXMgb24gcG9sYXIgbmlnaHQnLFxuICAgIGFjY2VudDogJyM4OGMwZDAnLFxuICAgIGZnOiAnI2Q4ZGVlOScsXG4gICAgZmdTb2Z0OiAnI2FhYjJjNCcsXG4gICAgbXV0ZWQ6ICcjYjhjMGQwJyxcbiAgICBwYW5lbEJnOiAnIzNiNDI1MicsXG4gICAgc2VsZWN0Qmc6ICcjNDM0YzVlJyxcbiAgICByZWQ6ICcjYmY2MTZhJyxcbiAgICBncmVlbjogJyNhM2JlOGMnLFxuICAgIHBlZXI6ICcjZDhiNGZlJyxcbiAgICBoaWdobGlnaHQ6ICcjZWNlZmY0JyxcbiAgICBzaGlraTogJ25vcmQnLFxuICB9LFxufVxuXG5leHBvcnQgbGV0IERFRkFVTFRfQUNDRU5UID0gUEFMRVRURVMuZGFyay5hY2NlbnRcbmV4cG9ydCBsZXQgRkcgPSBQQUxFVFRFUy5kYXJrLmZnXG5leHBvcnQgbGV0IEZHX1NPRlQgPSBQQUxFVFRFUy5kYXJrLmZnU29mdFxuZXhwb3J0IGxldCBNVVRFRCA9IFBBTEVUVEVTLmRhcmsubXV0ZWRcbmV4cG9ydCBsZXQgUEFORUxfQkcgPSBQQUxFVFRFUy5kYXJrLnBhbmVsQmdcbmV4cG9ydCBsZXQgU0VMRUNUX0JHID0gUEFMRVRURVMuZGFyay5zZWxlY3RCZ1xuZXhwb3J0IGxldCBSRUQgPSBQQUxFVFRFUy5kYXJrLnJlZFxuZXhwb3J0IGxldCBHUkVFTiA9IFBBTEVUVEVTLmRhcmsuZ3JlZW5cbmV4cG9ydCBsZXQgUEVFUiA9IFBBTEVUVEVTLmRhcmsucGVlclxuZXhwb3J0IGxldCBISUdITElHSFQgPSBQQUxFVFRFUy5kYXJrLmhpZ2hsaWdodFxuXG5sZXQgY3VycmVudFBhbGV0dGUgPSAnZGFyaydcbmxldCBleHBsaWNpdEFjY2VudCA9IG51bGxcblxuY29uc3QgW2FjY2VudFZhbHVlLCBzZXRBY2NlbnRWYWx1ZV0gPSBjcmVhdGVTaWduYWwoREVGQVVMVF9BQ0NFTlQpXG5cbmV4cG9ydCBjb25zdCBhY2NlbnQgPSBhY2NlbnRWYWx1ZVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QWNjZW50KGNvbG9yKSB7XG4gIGV4cGxpY2l0QWNjZW50ID0gY29sb3IgfHwgbnVsbFxuICBzZXRBY2NlbnRWYWx1ZShleHBsaWNpdEFjY2VudCB8fCBERUZBVUxUX0FDQ0VOVClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFBhbGV0dGUobmFtZSkge1xuICBjdXJyZW50UGFsZXR0ZSA9IFBBTEVUVEVTW25hbWVdID8gbmFtZSA6ICdkYXJrJ1xuICBjb25zdCBwID0gUEFMRVRURVNbY3VycmVudFBhbGV0dGVdXG4gIERFRkFVTFRfQUNDRU5UID0gcC5hY2NlbnRcbiAgRkcgPSBwLmZnXG4gIEZHX1NPRlQgPSBwLmZnU29mdFxuICBNVVRFRCA9IHAubXV0ZWRcbiAgUEFORUxfQkcgPSBwLnBhbmVsQmdcbiAgU0VMRUNUX0JHID0gcC5zZWxlY3RCZ1xuICBSRUQgPSBwLnJlZFxuICBHUkVFTiA9IHAuZ3JlZW5cbiAgUEVFUiA9IHAucGVlclxuICBISUdITElHSFQgPSBwLmhpZ2hsaWdodFxuICBzZXRBY2NlbnRWYWx1ZShleHBsaWNpdEFjY2VudCB8fCBwLmFjY2VudClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhbGV0dGVOYW1lKCkge1xuICByZXR1cm4gY3VycmVudFBhbGV0dGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhbGV0dGVMaXN0KCkge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoUEFMRVRURVMpLm1hcCgoW2tleSwgcF0pID0+ICh7IGtleSwgZGVzYzogcC5kZXNjIH0pKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hpa2lUaGVtZSgpIHtcbiAgcmV0dXJuIFBBTEVUVEVTW2N1cnJlbnRQYWxldHRlXS5zaGlraVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgQnV0dG9uLCBDaGVja2JveCwgZWFzZSwgRmllbGQsIEZpZWxkTGlzdCwgTWVudSwgTnVtYmVySW5wdXQsIFBpY2tMaXN0LCBSYWRpbywgU2Nyb2xsQm94LCBUZXh0SW5wdXQsIHVzZUFuaW1hdGVkLCB1c2VGb2N1cywgdXNlSW5wdXQsIHVzZUludGVydmFsLCB1c2VMYXlvdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBGR19TT0ZULCBNVVRFRCwgUEFORUxfQkcsIFNFTEVDVF9CRywgUkVELCBHUkVFTiB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyBBbmltYXRlZFZhbHVlIH0gZnJvbSAnLi9hbmltYXRlZC12YWx1ZS5qc3gnXG5pbXBvcnQgeyBjb250ZXh0QmFyIH0gZnJvbSAnLi9jb250ZXh0LWJhci5qcydcbmltcG9ydCB7IGNvbXBhY3ROdW1iZXIgfSBmcm9tICdwaWNvY29kZS1jb3JlL2Zvcm1hdC5qcydcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgZnV6enlTY29yZSwgcmFua0Z1enp5IH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcbmltcG9ydCB7IGZvcm1hdEh0dHBTZXJ2ZXJTcGVjLCBwYXJzZVNlcnZlclNwZWMsIHJlZGFjdFNlcnZlclNwZWMsIFJFREFDVEVEX0hFQURFUiB9IGZyb20gJ3BpY29jb2RlLWNvcmUvbWNwLmpzJ1xuXG5mdW5jdGlvbiBzaG9ydGVuSG9tZShwYXRoKSB7XG4gIGNvbnN0IHZhbHVlID0gU3RyaW5nKHBhdGgpXG4gIGNvbnN0IGhvbWUgPSBob21lZGlyKClcbiAgcmV0dXJuIHZhbHVlID09PSBob21lIHx8IHZhbHVlLnN0YXJ0c1dpdGgoYCR7aG9tZX0vYCkgPyBgfiR7dmFsdWUuc2xpY2UoaG9tZS5sZW5ndGgpfWAgOiB2YWx1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZUFnbyhhdCkge1xuICBjb25zdCBzID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIGF0KSAvIDEwMDApKVxuICBpZiAocyA8IDYwKSByZXR1cm4gYCR7c31zIGFnb2BcbiAgY29uc3QgbSA9IE1hdGguZmxvb3IocyAvIDYwKVxuICBpZiAobSA8IDYwKSByZXR1cm4gYCR7bX1tIGFnb2BcbiAgY29uc3QgaCA9IE1hdGguZmxvb3IobSAvIDYwKVxuICBpZiAoaCA8IDI0KSByZXR1cm4gYCR7aH1oIGFnb2BcbiAgcmV0dXJuIGAke01hdGguZmxvb3IoaCAvIDI0KX1kIGFnb2Bcbn1cblxuZnVuY3Rpb24gUGFuZWxEaXZpZGVyKCkge1xuICByZXR1cm4gPHRleHQgc3R5bGU9e3sgY29sb3I6IFNFTEVDVF9CRywgb3ZlcmZsb3c6ICdjbGlwJyB9fT57J1x1MjUwMCcucmVwZWF0KHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODApfTwvdGV4dD5cbn1cblxuZnVuY3Rpb24gUGFuZWxGcmFtZSh7IHRpdGxlLCBoaW50LCByaWdodCwgZnVsbFNjcmVlbiA9IGZhbHNlLCBjaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBoZWlnaHQ6IGZ1bGxTY3JlZW4gPyAnMTAwJScgOiB1bmRlZmluZWQgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgcGFkZGluZ1RvcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+e3RpdGxlfTwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAge3JpZ2h0fVxuICAgICAgICA8L2JveD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntoaW50fTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPFBhbmVsRGl2aWRlciAvPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IGZ1bGxTY3JlZW4gPyAwIDogMiwgcGFkZGluZ0JvdHRvbTogMSwgZmxleEdyb3c6IGZ1bGxTY3JlZW4gPyAxIDogdW5kZWZpbmVkIH19PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ29uZmlybVBhbmVsKHsgdGl0bGUsIG1lc3NhZ2UsIGNvbmZpcm1MYWJlbCA9ICdDb25maXJtJywgZm9jdXNlZCwgb25Db25maXJtLCBvbkNsb3NlIH0pIHtcbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAncmV0dXJuJykge1xuICAgICAgb25Db25maXJtKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9e3RpdGxlfSBoaW50PXtgZW50ZXI6ICR7Y29uZmlybUxhYmVsLnRvTG93ZXJDYXNlKCl9ICBlc2M6IGNhbmNlbGB9PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e21lc3NhZ2V9PC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVELCBib2xkOiB0cnVlIH19PlRoaXMgY2Fubm90IGJlIHVuZG9uZS48L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29uZmlnRmllbGQoeyBmaWVsZCwgdmFsdWUsIGZvY3VzZWQsIG9uQ2hhbmdlIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Cb3R0b206IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8Q2hlY2tib3ggY2hlY2tlZD17dmFsdWV9IGxhYmVsPXtmaWVsZC5sYWJlbH0gZm9jdXNlZD17Zm9jdXNlZH0gb25DaGFuZ2U9e29uQ2hhbmdlfSAvPlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZmllbGQucGF0aH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgICAke2ZpZWxkLmRlc2N9YH08L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gQ29uZmlnTnVtYmVyRmllbGQoeyB2YWx1ZSwgZm9jdXNlZCwgb25DaGFuZ2UgfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgIDxOdW1iZXJJbnB1dCBmb2N1c2VkPXtmb2N1c2VkfSB2YWx1ZT17dmFsdWV9IG9uQ2hhbmdlPXtvbkNoYW5nZX0gbWluPXsxfSBtYXg9ezEwMH0gd2lkdGg9ezV9IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT4gUGFyYWxsZWwgYWdlbnQgbGltaXQ8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnJlc2VhcmNoLmFnZW50TGltaXQ8L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT4gICAgTWF4aW11bSBhZ2VudHMgcGVyIHBhcmFsbGVsIHJ1biAoMS0xMDApPC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmZ1bmN0aW9uIENvbmZpZ01vZGVsRmllbGQoeyBtb2RlbCwgbGFiZWwsIHBhdGgsIGZvY3VzZWQsIG9uUGljayB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD17bGFiZWx9IGZvY3VzZWQ9e2ZvY3VzZWR9IG9uUHJlc3M9e29uUGlja30gLz5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3BhdGh9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2AgICAgJHttb2RlbCB8fCAnTm90IGNvbmZpZ3VyZWQnfWB9PC90ZXh0PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDb25maWdQYW5lbCh7IHZhbHVlcywgZm9jdXNlZCwgb25DaGFuZ2UsIG9uUGlja1Jlc2VhcmNoTW9kZWwsIG9uUGlja1NoZWxsTW9kZWwsIG9uUGlja0RlbGliZXJhdGlvbk1vZGVsLCBvblBpY2tQYXJ0aWNpcGFudE1vZGVsLCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgZmllbGRzID0gW1xuICAgIHsgbmFtZTogJ2Nsb3VkcycsIGxhYmVsOiAnQ2xvdWQgYW5pbWF0aW9uJywgZGVzYzogJ1Nob3cgYW5pbWF0ZWQgY2xvdWRzIG9uIHRoZSBlbXB0eSBzY3JlZW4nLCBwYXRoOiAnYW5pbWF0aW9uLmNsb3VkcycgfSxcbiAgICB7IG5hbWU6ICdjb21wYWN0VG9vbHMnLCBsYWJlbDogJ0NvbXBhY3QgdG9vbCBoaXN0b3J5JywgZGVzYzogJ1N1bW1hcml6ZSBjb25zZWN1dGl2ZSB0b29sIGNhbGxzIGluIG9uZSByb3cnLCBwYXRoOiAnZGlzcGxheS5jb21wYWN0VG9vbEhpc3RvcnknIH0sXG4gICAgeyBuYW1lOiAnZ2l0U3RhdHVzJywgbGFiZWw6ICdHaXQgaW5mb3JtYXRpb24nLCBkZXNjOiAnU2hvdyBicmFuY2ggYW5kIGNoYW5nZWQgbGluZSBjb3VudHMnLCBwYXRoOiAnZGlzcGxheS5naXRTdGF0dXMnIH0sXG4gICAgeyBuYW1lOiAnd2lkZVNpZGViYXInLCBsYWJlbDogJ1dpZGUgc2lkZWJhcicsIGRlc2M6ICdNb3ZlIHBhbmVscyBhbmQgc3RhdHVzIGRldGFpbHMgdG8gYSByaWdodCBzaWRlYmFyIHdoZW4gdGhlIHRlcm1pbmFsIGlzIHdpZGVyIHRoYW4gMTYwIGNvbHVtbnMnLCBwYXRoOiAnZGlzcGxheS53aWRlU2lkZWJhcicgfSxcbiAgXVxuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgIG9uQ2xvc2UoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT1cIkNvbmZpZ3VyYXRpb25cIiBoaW50PVwidGFiOiBuZXh0IHNldHRpbmcgIHNwYWNlL2VudGVyOiBjaGFuZ2UgIGVzYzogY2xvc2VcIiBmdWxsU2NyZWVuPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPEZpZWxkTGlzdCBmb2N1c2VkPXtmb2N1c2VkfSBpbml0aWFsRm9jdXM9XCJjbG91ZHNcIiBzY3JvbGxiYXIgZm9jdXNQYWRkaW5nPXsxfT5cbiAgICAgICAgICB7ZmllbGRzLm1hcCgoZmllbGQpID0+IChcbiAgICAgICAgICAgIDxGaWVsZCBrZXk9e2ZpZWxkLm5hbWV9IG5hbWU9e2ZpZWxkLm5hbWV9PlxuICAgICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IChcbiAgICAgICAgICAgICAgICA8Q29uZmlnRmllbGQgZmllbGQ9e2ZpZWxkfSB2YWx1ZT17dmFsdWVzW2ZpZWxkLm5hbWVdfSBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uQ2hhbmdlPXsodmFsdWUpID0+IG9uQ2hhbmdlKGZpZWxkLm5hbWUsIHZhbHVlKX0gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJyZXNlYXJjaE1vZGVsXCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdNb2RlbEZpZWxkIG1vZGVsPXt2YWx1ZXMucmVzZWFyY2hNb2RlbH0gbGFiZWw9XCJQYXJhbGxlbCB3b3JrZXIgbW9kZWxcIiBwYXRoPVwibW9kZWxzLnJlc2VhcmNoV29ya2VyXCIgZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9e29uUGlja1Jlc2VhcmNoTW9kZWx9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJzaGVsbE1vZGVsXCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdNb2RlbEZpZWxkIG1vZGVsPXt2YWx1ZXMuc2hlbGxNb2RlbH0gbGFiZWw9XCJTaGVsbCBtb2RlbFwiIHBhdGg9XCJtb2RlbHMuc2hlbGxcIiBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17b25QaWNrU2hlbGxNb2RlbH0gLz59XG4gICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICB7WydwYXJ0aWNpcGFudEEnLCAncGFydGljaXBhbnRCJ10ubWFwKChyb2xlKSA9PiAoXG4gICAgICAgICAgICA8RmllbGQgbmFtZT17YCR7cm9sZX1Nb2RlbGB9PlxuICAgICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdNb2RlbEZpZWxkIG1vZGVsPXt2YWx1ZXNbYCR7cm9sZX1Nb2RlbGBdfSBsYWJlbD17YFBhcnRpY2lwYW50ICR7cm9sZSA9PT0gJ3BhcnRpY2lwYW50QScgPyAnQScgOiAnQid9IG1vZGVsYH0gcGF0aD17YG1vZGVscy4ke3JvbGV9YH0gZm9jdXNlZD17ZmllbGRGb2N1c2VkfSBvblBpY2s9eygpID0+IG9uUGlja1BhcnRpY2lwYW50TW9kZWwocm9sZSl9IC8+fVxuICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICA8RmllbGQgbmFtZT1cImRlbGliZXJhdGlvbk1vZGVsXCI+XG4gICAgICAgICAgICB7KHsgZm9jdXNlZDogZmllbGRGb2N1c2VkIH0pID0+IDxDb25maWdNb2RlbEZpZWxkIG1vZGVsPXt2YWx1ZXMuZGVsaWJlcmF0aW9uTW9kZWx9IGxhYmVsPVwiU3ludGhlc2lzIG1vZGVsXCIgcGF0aD1cIm1vZGVscy5kZWxpYmVyYXRpb25cIiBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uUGljaz17b25QaWNrRGVsaWJlcmF0aW9uTW9kZWx9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgICAgPEZpZWxkIG5hbWU9XCJyZXNlYXJjaEFnZW50TGltaXRcIj5cbiAgICAgICAgICAgIHsoeyBmb2N1c2VkOiBmaWVsZEZvY3VzZWQgfSkgPT4gPENvbmZpZ051bWJlckZpZWxkIHZhbHVlPXt2YWx1ZXMucmVzZWFyY2hBZ2VudExpbWl0fSBmb2N1c2VkPXtmaWVsZEZvY3VzZWR9IG9uQ2hhbmdlPXsodmFsdWUpID0+IG9uQ2hhbmdlKCdyZXNlYXJjaEFnZW50TGltaXQnLCB2YWx1ZSl9IC8+fVxuICAgICAgICAgIDwvRmllbGQ+XG4gICAgICAgIDwvRmllbGRMaXN0PlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTY29wZVRhYnMoeyBzY29wZXMsIGFjdGl2ZSB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgIHtzY29wZXMubWFwKChzLCBpKSA9PiAoXG4gICAgICAgIDx0ZXh0IGtleT17c30gc3R5bGU9e3sgY29sb3I6IGkgPT09IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQsIGJvbGQ6IGkgPT09IGFjdGl2ZSB9fT57YCR7aSA+IDAgPyAnICAnIDogJyd9JHtzID09PSAnY2hlY2tvdXQnID8gJ3RoaXMgY2hlY2tvdXQnIDogc31gfTwvdGV4dD5cbiAgICAgICkpfVxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNb2RlbFBhbmVsKHsgbW9kZWxzLCBjdXJyZW50LCBkZWZhdWx0TmFtZSwgZm9jdXNlZCwgb25QaWNrLCBvblBpY2tEZWZhdWx0LCBvbkNsb3NlLCB0aXRsZSA9ICdTZWxlY3QgbW9kZWwnLCBoaW50ID0gJ2VudGVyOiB0aGlzIHNlc3Npb24gIGN0cmwrczogc2V0IGFzIGRlZmF1bHQgIGVzYzogY2xvc2UnIH0pIHtcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbChtb2RlbHNbMF0gfHwgbnVsbClcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IHJhbmtlZE1vZGVscyA9IHJhbmtGdXp6eShtb2RlbHMsIHF1ZXJ5KCksIChxLCBtb2RlbCkgPT4gZnV6enlTY29yZShxLCBtb2RlbC5uYW1lKSlcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+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+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNwZWVkUGFuZWwoeyBsZXZlbHMsIGN1cnJlbnQsIGRlZmF1bHRMZXZlbCwgZm9jdXNlZCwgb25QaWNrLCBvblBpY2tEZWZhdWx0LCBvbkNsb3NlIH0pIHtcbiAgY29uc3QgW2N1cnNvciwgc2V0Q3Vyc29yXSA9IGNyZWF0ZVNpZ25hbChNYXRoLm1heCgwLCBsZXZlbHMuZmluZEluZGV4KChsKSA9PiBsLmtleSA9PT0gY3VycmVudCkpKVxuICBjb25zdCBpdGVtcyA9IGxldmVsc1xuXG4gIHVzZUlucHV0KChldmVudCkgPT4ge1xuICAgIGlmICghZm9jdXNlZCkgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycpIHtcbiAgICAgIG9uUGlja0RlZmF1bHQoaXRlbXNbY3Vyc29yKCldKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgbGFiZWwgPSAobCkgPT4gbC5rZXkgPT09ICdmYXN0JyA/ICdGYXN0JyA6ICdTdGFuZGFyZCdcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiU3BlZWRcIiBoaW50PVwiZW50ZXI6IHNlc3Npb24gIGN0cmwrczogZGVmYXVsdCAgZXNjOiBjbG9zZVwiPlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICBpdGVtcz17aXRlbXN9XG4gICAgICAgICAgc2VsZWN0ZWQ9e2N1cnNvcigpfVxuICAgICAgICAgIG9uU2VsZWN0PXtzZXRDdXJzb3J9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17b25QaWNrfVxuICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgIHJlbmRlckl0ZW09eyhsLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+e2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGRyB9fT57bGFiZWwobCkucGFkRW5kKE1hdGgubWF4KDEwLCBsYWJlbChsKS5sZW5ndGggKyAxKSl9PC90ZXh0PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2wudXNhZ2UucmVwbGFjZSgvIHVzYWdlJC8sICcnKX0gaW5jbHVkZWQgdXNhZ2VgfTwvdGV4dD5cbiAgICAgICAgICAgICAge2wua2V5ID09PSBjdXJyZW50ICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PnsnICBcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgICAgICAgIHtsLmtleSA9PT0gZGVmYXVsdExldmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57JyAgIGRlZmF1bHQnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaGVtZVBhbmVsKHsgdGhlbWVzLCBwcmVmLCBmb2N1c2VkLCBvblBpY2ssIG9uUHJldmlldywgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtjdXJzb3IsIHNldEN1cnNvcl0gPSBjcmVhdGVTaWduYWwoTWF0aC5tYXgoMCwgdGhlbWVzLmZpbmRJbmRleCgodCkgPT4gdC5rZXkgPT09IHByZWYpKSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiVGhlbWVcIiBoaW50PVwiai9rIHRvIG1vdmUgYW5kIHByZXZpZXcgIGVudGVyIHRvIGFwcGx5ICBlc2M6IGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxNZW51XG4gICAgICAgICAgaXRlbXM9e3RoZW1lc31cbiAgICAgICAgICBzZWxlY3RlZD17Y3Vyc29yKCl9XG4gICAgICAgICAgb25TZWxlY3Q9eyhpKSA9PiB7XG4gICAgICAgICAgICBzZXRDdXJzb3IoaSlcbiAgICAgICAgICAgIG9uUHJldmlldyh0aGVtZXNbaV0pXG4gICAgICAgICAgfX1cbiAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgIG1heFZpc2libGU9ezZ9XG4gICAgICAgICAgdmltS2V5c1xuICAgICAgICAgIG9uU3VibWl0PXtvblBpY2t9XG4gICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgcmVuZGVySXRlbT17KHQsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19Pnt0LmtleS5wYWRFbmQoTWF0aC5tYXgoMTAsIHQua2V5Lmxlbmd0aCArIDEpKX08L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57dC5kZXNjfTwvdGV4dD5cbiAgICAgICAgICAgICAge3Qua2V5ID09PSBwcmVmICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IE1VVEVEIH19PnsnICBcdTI3MTMnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmZ1bmN0aW9uIENvbnRleHRPdmVydmlldyh7IG92ZXJ2aWV3IH0pIHtcbiAgY29uc3QgcmV2ZWFsID0gdXNlQW5pbWF0ZWQoMCwgZWFzZSg3MDApKVxuICBjb25zdCBsYXlvdXQgPSB1c2VMYXlvdXQoKVxuICByZXZlYWwuc2V0KDEpXG4gIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoMSwgbGF5b3V0LndpZHRoIHx8IDEpXG4gIGNvbnN0IHZpc2libGUgPSBNYXRoLnJvdW5kKHdpZHRoICogcmV2ZWFsKCkpXG4gIGNvbnN0IHVzYWdlV2lkdGggPSBNYXRoLm1heCgxLCB3aWR0aCAtIDUpXG4gIGNvbnN0IHRvdGFsID0gb3ZlcnZpZXcuc2VnbWVudHMucmVkdWNlKChzdW0sIHNlZ21lbnQpID0+IHN1bSArIHNlZ21lbnQudG9rZW5zLCAwKVxuICBjb25zdCB1c2VkID0gb3ZlcnZpZXcubWVhc3VyZWQgfHwgdG90YWxcbiAgY29uc3QgcGVyY2VudCA9IHVzZWQgJiYgb3ZlcnZpZXcubGltaXQgPyBNYXRoLm1pbigxMDAsIHVzZWQgLyBvdmVydmlldy5saW1pdCAqIDEwMCkgOiAwXG4gIGxldCBib3VuZGFyeSA9IDBcbiAgY29uc3QgY2VsbHMgPSBbXVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgd2lkdGg7IGkrKykge1xuICAgIGNvbnN0IHNlZ21lbnQgPSBvdmVydmlldy5zZWdtZW50cy5maW5kKChpdGVtKSA9PiB7XG4gICAgICBib3VuZGFyeSArPSBpdGVtLnRva2VucyAvIHRvdGFsICogd2lkdGhcbiAgICAgIHJldHVybiBpIDwgYm91bmRhcnlcbiAgICB9KVxuICAgIGJvdW5kYXJ5ID0gMFxuICAgIGNlbGxzLnB1c2goXG4gICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBpID49IHZpc2libGUgPyBQQU5FTF9CRyA6IHNlZ21lbnQ/LmNvbG9yIHx8IE1VVEVEIH19PlxuICAgICAgICB7aSA+PSB2aXNpYmxlID8gJyAnIDogc2VnbWVudCA/ICdcdTI1ODgnIDogJ1x1MjU5MSd9XG4gICAgICA8L3RleHQ+LFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFRva2VucyA9ICh0b2tlbnMpID0+IHRva2VucyA8IDEwMDAgPyBgJHtNYXRoLnJvdW5kKHRva2Vucyl9IHRva2AgOiBgJHsodG9rZW5zIC8gMTAwMCkudG9GaXhlZCgxKX1rYFxuICBjb25zdCBsZWdlbmRSb3dzID0gKCkgPT4ge1xuICAgIGNvbnN0IHJvd3MgPSBbW11dXG4gICAgbGV0IHVzZWQgPSAwXG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIG92ZXJ2aWV3LnNlZ21lbnRzKSB7XG4gICAgICBjb25zdCBpdGVtV2lkdGggPSBzZWdtZW50LmxhYmVsLmxlbmd0aCArIGZvcm1hdFRva2VucyhzZWdtZW50LnRva2VucykubGVuZ3RoICsgNVxuICAgICAgaWYgKHVzZWQgPiAwICYmIHVzZWQgKyBpdGVtV2lkdGggPiBNYXRoLm1heCgxLCBsYXlvdXQud2lkdGggfHwgMSkpIHtcbiAgICAgICAgcm93cy5wdXNoKFtdKVxuICAgICAgICB1c2VkID0gMFxuICAgICAgfVxuICAgICAgcm93cy5hdCgtMSkucHVzaChzZWdtZW50KVxuICAgICAgdXNlZCArPSBpdGVtV2lkdGhcbiAgICB9XG4gICAgcmV0dXJuIHJvd3NcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAge3BlcmNlbnQgPiAwICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgbWFyZ2luQm90dG9tOiAxIH19PlxuICAgICAgICAgIDxBbmltYXRlZFZhbHVlIHZhbHVlPXtwZXJjZW50fSBpbml0aWFsPXswfSBkdXJhdGlvbj17MTAwMH0gY29sb3I9e3BlcmNlbnQgPj0gODAgPyBSRUQgOiBGR19TT0ZUfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBiYWNrZ3JvdW5kPXtTRUxFQ1RfQkd9IGZvcm1hdD17KHZhbHVlKSA9PiBjb250ZXh0QmFyKHZhbHVlLCB1c2FnZVdpZHRoKX0gLz5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogcGVyY2VudCA+PSA4MCA/IFJFRCA6IE1VVEVEIH19PntgJHtvdmVydmlldy5tZWFzdXJlZCA/ICcnIDogJ34nfSR7TWF0aC5yb3VuZChwZXJjZW50KX0lYC5wYWRTdGFydCg1KX08L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+e2NlbGxzfTwvYm94PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAge2xlZ2VuZFJvd3MoKS5tYXAoKHJvdywgcm93SW5kZXgpID0+IChcbiAgICAgICAgICA8Ym94IGtleT17cm93SW5kZXh9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAge3Jvdy5tYXAoKHNlZ21lbnQpID0+IChcbiAgICAgICAgICAgICAgPGJveCBrZXk9e3NlZ21lbnQubGFiZWx9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBtYXJnaW5SaWdodDogMiB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VnbWVudC5jb2xvciB9fT5cdTI1QTA8L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICR7c2VnbWVudC5sYWJlbH0gYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPEFuaW1hdGVkVmFsdWVcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWdtZW50LnRva2Vuc31cbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9ezB9XG4gICAgICAgICAgICAgICAgICBkdXJhdGlvbj17MjAwMH1cbiAgICAgICAgICAgICAgICAgIGNvbG9yPXtNVVRFRH1cbiAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodD17YWNjZW50KCl9XG4gICAgICAgICAgICAgICAgICBmb3JtYXQ9e2Zvcm1hdFRva2Vuc31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApKX1cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBJbmZvTGlzdFBhbmVsKHsgdGl0bGUsIHJvd3MsIG92ZXJ2aWV3LCBmb2N1c2VkLCBvbkNsb3NlIH0pIHtcbiAgdXNlRXNjYXBlKCgpID0+IGZvY3VzZWQsIG9uQ2xvc2UpXG5cbiAgcmV0dXJuIChcbiAgICA8UGFuZWxGcmFtZSB0aXRsZT17dGl0bGV9IGhpbnQ9XCJqL2sgb3IgXHUyMTkxXHUyMTkzIHRvIHNjcm9sbCAgZXNjIGNsb3NlXCI+XG4gICAgICB7b3ZlcnZpZXcgJiYgPENvbnRleHRPdmVydmlldyBvdmVydmlldz17b3ZlcnZpZXd9IC8+fVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAxNCwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICB7cm93cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vdGhpbmcgaGVyZSB5ZXQ8L3RleHQ+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFNjcm9sbEJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSBmb2N1c2VkPXtmb2N1c2VkfSBzY3JvbGxiYXI+XG4gICAgICAgICAgICB7cm93cy5tYXAoKHJvdywgaSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IGtleT17YCR7cm93Lm5hbWV9LSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiBpID09PSAwID8gMCA6IDEgfX0+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57cm93Lm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICAgICAgICAgICAge3Jvdy5ub3RlICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cm93Lm5vdGV9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e3Jvdy5kZXNjIHx8ICdubyBkZXNjcmlwdGlvbid9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvU2Nyb2xsQm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQcm9qZWN0UGFuZWwoeyBwcm9qZWN0cywgbG9hZGluZywgZm9jdXNlZCwgb25QaWNrQ2hlY2tvdXQsIG9uUGlja1Nlc3Npb24sIG9uQWRkV29ya3RyZWUsIG9uRGVsZXRlLCBvbkNsb3NlIH0pIHtcbiAgY29uc3Qgcm93cyA9IHByb2plY3RzLmZsYXRNYXAoKHByb2plY3QpID0+IHByb2plY3QuY2hlY2tvdXRzLm1hcCgoY2hlY2tvdXQsIGluZGV4KSA9PiAoe1xuICAgIC4uLmNoZWNrb3V0LFxuICAgIHByb2plY3RQYXRoOiBwcm9qZWN0LnBhdGgsXG4gICAgZ3JvdXBlZDogcHJvamVjdC5jaGVja291dHMubGVuZ3RoID4gMSxcbiAgICBmaXJzdDogaW5kZXggPT09IDAsXG4gICAgbGFzdDogaW5kZXggPT09IHByb2plY3QuY2hlY2tvdXRzLmxlbmd0aCAtIDEsXG4gIH0pKSlcbiAgY29uc3QgW3ByZXZpZXcsIHNldFByZXZpZXddID0gY3JlYXRlU2lnbmFsKHJvd3NbMF0gfHwgbnVsbClcbiAgY29uc3QgW3BhbmUsIHNldFBhbmVdID0gY3JlYXRlU2lnbmFsKCdwcm9qZWN0cycpXG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkLCBvbkNsb3NlKVxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInICYmICFldmVudC5jdHJsICYmICFldmVudC5tZXRhKSB7XG4gICAgICBpZiAocHJldmlldygpPy5zZXNzaW9ucy5sZW5ndGgpIHNldFBhbmUoKGN1cnJlbnQpID0+IGN1cnJlbnQgPT09ICdwcm9qZWN0cycgPyAnc2Vzc2lvbnMnIDogJ3Byb2plY3RzJylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHBhbmUoKSA9PT0gJ3Byb2plY3RzJyAmJiBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3QnICYmIHByZXZpZXcoKSkge1xuICAgICAgb25BZGRXb3JrdHJlZShwcmV2aWV3KCkpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChwYW5lKCkgPT09ICdwcm9qZWN0cycgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyAmJiBwcmV2aWV3KCkpIHtcbiAgICAgIG9uRGVsZXRlKHByZXZpZXcoKSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IGNoZWNrb3V0TGFiZWwgPSAocm93KSA9PiBgJHtyb3cubGFzdCA/ICdcdTI1MTRcdTI1MDAnIDogJ1x1MjUxQ1x1MjUwMCd9ICR7cm93LmJyYW5jaCB8fCAocm93Lndvcmt0cmVlID8gcm93LnBhdGggOiAnbWFpbicpfWBcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiU3dpdGNoIHByb2plY3RcIiBoaW50PVwiXHUyMTkxXHUyMTkzIG1vdmUgIHRhYiBzd2l0Y2ggcGFuZSAgZW50ZXIgb3BlbiAgY3RybCt0IG5ldyB3b3JrdHJlZSAgY3RybCt4IGRlbGV0ZSAgZXNjIGNsb3NlXCIgZnVsbFNjcmVlbj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIGdhcDogMSB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiAnNDQlJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bG9hZGluZyBwcm9qZWN0cy4uLjwvdGV4dD5cbiAgICAgICAgICApIDogcm93cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8ga25vd24gcHJvamVjdHMgeWV0PC90ZXh0PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8UGlja0xpc3RcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17cm93c31cbiAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBwYW5lKCkgPT09ICdwcm9qZWN0cyd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZmlsdGVyIHByb2plY3RzLi4uXCJcbiAgICAgICAgICAgICAgZmlsdGVyPXsocXVlcnksIHJvdykgPT4gZnV6enlTY29yZShxdWVyeSwgYCR7cm93LnByb2plY3RQYXRofSAke3Jvdy5icmFuY2ggfHwgJyd9YCkgPj0gMH1cbiAgICAgICAgICAgICAgb25DdXJzb3JDaGFuZ2U9e3NldFByZXZpZXd9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtvblBpY2tDaGVja291dH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhyb3csIHsgc2VsZWN0ZWQsIGZvY3VzZWQ6IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICAgIHtyb3cuZ3JvdXBlZCAmJiByb3cuZmlyc3QgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHIH19PntgXHUyNUJFICR7cm93LnByb2plY3RQYXRofWB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChhY3RpdmUgPyBhY2NlbnQoKSA6IFNFTEVDVF9CRykgOiBudWxsLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogRkcgfX0+e3Jvdy5ncm91cGVkID8gYCAgJHtjaGVja291dExhYmVsKHJvdyl9YCA6IHJvdy5wcm9qZWN0UGF0aH08L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogc2VsZWN0ZWQgPyAnYmxhY2snIDogTVVURUQgfX0+e2AgICR7cm93LmN1cnJlbnQgPyAnY3VycmVudCAgJyA6ICcnfSR7cm93LmxhdGVzdCA/IHRpbWVBZ28ocm93LmxhdGVzdC5hdCkgOiAnbm8gc2Vzc2lvbnMnfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8UGFuZWxEaXZpZGVyIC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHtwcmV2aWV3KCk/LnNlc3Npb25zLmxlbmd0aCA/IChcbiAgICAgICAgICAgIDxQaWNrTGlzdFxuICAgICAgICAgICAgICBrZXk9e3ByZXZpZXcoKS5yb290fVxuICAgICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICAgIGl0ZW1zPXtwcmV2aWV3KCkuc2Vzc2lvbnN9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgcGFuZSgpID09PSAnc2Vzc2lvbnMnfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImZpbHRlciBzZXNzaW9ucy4uLlwiXG4gICAgICAgICAgICAgIGZpbHRlcj17KHF1ZXJ5LCBzZXNzaW9uKSA9PiBmdXp6eVNjb3JlKHF1ZXJ5LCBzZXNzaW9uLnRpdGxlKSA+PSAwfVxuICAgICAgICAgICAgICBvblN1Ym1pdD17b25QaWNrU2Vzc2lvbn1cbiAgICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgICAgICBnYXA9ezF9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhzZXNzaW9uLCB7IHNlbGVjdGVkLCBmb2N1c2VkOiBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBzZWxlY3RlZCA/IChhY3RpdmUgPyBhY2NlbnQoKSA6IFNFTEVDVF9CRykgOiBudWxsLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IEZHX1NPRlQsIG92ZXJmbG93OiAndHJ1bmNhdGUnIH19PntzZXNzaW9uLnRpdGxlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHNlbGVjdGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Nlc3Npb24udHVybnN9ICR7c2Vzc2lvbi50dXJucyA9PT0gMSA/ICd0dXJuJyA6ICd0dXJucyd9ICAke3RpbWVBZ28oc2Vzc2lvbi5hdCl9YH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gc2Vzc2lvbnM8L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICA8L1BhbmVsRnJhbWU+XG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbm5lY3RQYW5lbCh7IHByb3ZpZGVycywgZm9jdXNlZCwgb25Db25uZWN0LCBvbkRpc2Nvbm5lY3QsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbaW5kZXgsIHNldEluZGV4XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcblxuICBjb25zdCBzZWxlY3RlZCA9ICgpID0+IHByb3ZpZGVyc1tNYXRoLm1pbihpbmRleCgpLCBwcm92aWRlcnMubGVuZ3RoIC0gMSldIHx8IG51bGxcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGNvbnN0IHAgPSBzZWxlY3RlZCgpXG4gICAgaWYgKHAgJiYgZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd4JyAmJiBwLmNvbm5lY3RlZCkge1xuICAgICAgb25EaXNjb25uZWN0KHApXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxQYW5lbEZyYW1lIHRpdGxlPVwiQ29ubmVjdCBhIHN1YnNjcmlwdGlvblwiIGhpbnQ9XCJlbnRlciBzaWduIGluICBjdHJsK3ggZGlzY29ubmVjdCAodHdpY2UpICBlc2MgY2xvc2VcIj5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPE1lbnVcbiAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgaXRlbXM9e3Byb3ZpZGVyc31cbiAgICAgICAgICBzZWxlY3RlZD17aW5kZXgoKX1cbiAgICAgICAgICBvblNlbGVjdD17c2V0SW5kZXh9XG4gICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgIHZpbUtleXNcbiAgICAgICAgICBvblN1Ym1pdD17KHApID0+IG9uQ29ubmVjdChwKX1cbiAgICAgICAgICBvbkNhbmNlbD17b25DbG9zZX1cbiAgICAgICAgICByZW5kZXJJdGVtPXsocCwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHAuY29ubmVjdGVkID8gYWNjZW50KCkgOiBNVVRFRCB9fT57cC5jb25uZWN0ZWQgPyAnXHUyNUFBJyA6ICdcdTI1QUInfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e2AgJHtwLmxhYmVsfSAgYH08L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PlxuICAgICAgICAgICAgICAgICAge3AuY29ubmVjdGVkID8gYGNvbm5lY3RlZCR7cC5lbWFpbCA/IGAgYXMgJHtwLmVtYWlsfWAgOiAnJ31gIDogJ25vdCBjb25uZWN0ZWQnfVxuICAgICAgICAgICAgICAgIDwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApfVxuICAgICAgICAvPlxuICAgICAgPC9ib3g+XG4gICAgPC9QYW5lbEZyYW1lPlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXYWtldXBzUGFuZWwoeyB3YWtldXBzLCBmb2N1c2VkLCBvbkNhbmNlbCwgb25DbG9zZSB9KSB7XG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFt0aWNrLCBzZXRUaWNrXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICB1c2VFc2NhcGUoKCkgPT4gZm9jdXNlZCwgb25DbG9zZSlcbiAgdXNlSW50ZXJ2YWwoKCkgPT4gc2V0VGljaygodCkgPT4gdCArIDEpLCAxMDAwKVxuICB2b2lkIHRpY2soKVxuXG4gIGNvbnN0IHNlbGVjdGVkID0gKCkgPT4gd2FrZXVwc1tNYXRoLm1pbihpbmRleCgpLCB3YWtldXBzLmxlbmd0aCAtIDEpXSB8fCBudWxsXG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBjb25zdCB3ID0gc2VsZWN0ZWQoKVxuICAgIGlmICh3ICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIG9uQ2FuY2VsKHcpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBjb3VudGRvd24gPSAoYXQpID0+IHtcbiAgICBjb25zdCBzZWNzID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoYXQgLSBEYXRlLm5vdygpKSAvIDEwMDApKVxuICAgIGlmIChzZWNzIDwgNjApIHJldHVybiBgaW4gJHtzZWNzfXNgXG4gICAgY29uc3QgbWlucyA9IE1hdGguZmxvb3Ioc2VjcyAvIDYwKVxuICAgIGlmIChtaW5zIDwgNjApIHJldHVybiBgaW4gJHttaW5zfW0gJHtzZWNzICUgNjB9c2BcbiAgICByZXR1cm4gYGluICR7TWF0aC5mbG9vcihtaW5zIC8gNjApfWggJHttaW5zICUgNjB9bWBcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWUgdGl0bGU9XCJTY2hlZHVsZWQgd2FrZS11cHNcIiBoaW50PVwiai9rIHRvIG1vdmUgIGVudGVyIG9yIGN0cmwreCBjYW5jZWwgKHR3aWNlKSAgZXNjIGNsb3NlXCI+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIHt3YWtldXBzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gcGVuZGluZyB3YWtlLXVwcyAgdGhlIGFnZW50IHNjaGVkdWxlcyB0aGVtIHdpdGggc2NoZWR1bGVfd2FrZXVwPC90ZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17d2FrZXVwc31cbiAgICAgICAgICAgIHNlbGVjdGVkPXtpbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldEluZGV4fVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgICAgICBpdGVtSGVpZ2h0PXsyfVxuICAgICAgICAgICAgZ2FwPXsxfVxuICAgICAgICAgICAgdmltS2V5c1xuICAgICAgICAgICAgb25TdWJtaXQ9eyh3KSA9PiBvbkNhbmNlbCh3KX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtvbkNsb3NlfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KHcsIHsgYWN0aXZlIH0pID0+IChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY3RpdmUgPyBhY2NlbnQoKSA6IEZHIH19PntgXHUyM0YwICR7dy5pZH1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57Y291bnRkb3duKHcuYXQpfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtuZXcgRGF0ZSh3LmF0KS50b0xvY2FsZVRpbWVTdHJpbmcoKX1gfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEsIGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnICAgICd9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBGR19TT0ZUIH19Pnt3Lm5vdGUucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBtY3BTdGF0dXMoc3RhdHVzKSB7XG4gIGNvbnN0IHBhbGV0dGUgPSB7XG4gICAgY29ubmVjdGVkOiB7IGljb246ICdcdTI1QUEnLCBjb2xvcjogYWNjZW50KCkgfSxcbiAgICBjb25uZWN0aW5nOiB7IGljb246ICdcdTI1Q0MnLCBjb2xvcjogJyNmYmJmMjQnIH0sXG4gICAgZXJyb3I6IHsgaWNvbjogJ1x1MjcxNycsIGNvbG9yOiBSRUQgfSxcbiAgICBkaXNhYmxlZDogeyBpY29uOiAnXHUyNUFCJywgY29sb3I6IE1VVEVEIH0sXG4gICAgaWRsZTogeyBpY29uOiAnXHUyNUFCJywgY29sb3I6IE1VVEVEIH0sXG4gIH1cbiAgcmV0dXJuIHBhbGV0dGVbc3RhdHVzXSB8fCBwYWxldHRlLmlkbGVcbn1cblxuZnVuY3Rpb24gRm9ybUZpZWxkKHsgbGFiZWwsIGFjdGl2ZSwgY2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57bGFiZWx9PC90ZXh0PlxuICAgICAge2NoaWxkcmVufVxuICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5mdW5jdGlvbiBNY3BTZXJ2ZXJGb3JtKHsgZm9jdXNlZCwgc2VydmVyLCBvblNhdmUsIG9uSW52YWxpZCwgb25DYW5jZWwgfSkge1xuICBjb25zdCBpbml0aWFsID0gc2VydmVyID8gcGFyc2VTZXJ2ZXJTcGVjKHNlcnZlci5jb21tYW5kKSA6IG51bGxcbiAgY29uc3QgZWRpdGluZyA9ICEhc2VydmVyXG4gIGNvbnN0IFtuYW1lLCBzZXROYW1lXSA9IGNyZWF0ZVNpZ25hbChzZXJ2ZXI/Lm5hbWUgfHwgJycpXG4gIGNvbnN0IFtzY29wZSwgc2V0U2NvcGVdID0gY3JlYXRlU2lnbmFsKHNlcnZlcj8uc2NvcGUgfHwgJ2dsb2JhbCcpXG4gIGNvbnN0IFt0cmFuc3BvcnQsIHNldFRyYW5zcG9ydF0gPSBjcmVhdGVTaWduYWwoaW5pdGlhbD8udHlwZSB8fCAnc3RkaW8nKVxuICBjb25zdCBbdGFyZ2V0LCBzZXRUYXJnZXRdID0gY3JlYXRlU2lnbmFsKGluaXRpYWw/LnR5cGUgPT09ICdodHRwJyA/IGluaXRpYWwudXJsIDogc2VydmVyPy5jb21tYW5kIHx8ICcnKVxuICBjb25zdCBpbml0aWFsSGVhZGVycyA9IGluaXRpYWw/LnR5cGUgPT09ICdodHRwJ1xuICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5rZXlzKGluaXRpYWwuaGVhZGVycykubWFwKChuYW1lKSA9PiBbbmFtZSwgUkVEQUNURURfSEVBREVSXSkpXG4gICAgOiB7fVxuICBjb25zdCBbaGVhZGVycywgc2V0SGVhZGVyc10gPSBjcmVhdGVTaWduYWwoZm9ybWF0SHR0cFNlcnZlclNwZWMoJycsIGluaXRpYWxIZWFkZXJzKS50cmltKCkpXG5cbiAgY29uc3QgZm0gPSB1c2VGb2N1cyh7IGluaXRpYWw6IGVkaXRpbmcgPyAndHJhbnNwb3J0JyA6ICduYW1lJyB9KVxuICBpZiAoIWVkaXRpbmcpIHtcbiAgICBmbS5pdGVtKCduYW1lJylcbiAgICBmbS5pdGVtKCdzY29wZScpXG4gIH1cbiAgZm0uaXRlbSgndHJhbnNwb3J0JylcbiAgZm0uaXRlbSgndGFyZ2V0JylcbiAgaWYgKHRyYW5zcG9ydCgpID09PSAnaHR0cCcpIGZtLml0ZW0oJ2hlYWRlcnMnKVxuICBmbS5pdGVtKCdzYXZlJylcbiAgZm0uaXRlbSgnY2FuY2VsJylcblxuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSB7XG4gICAgICBvbkNhbmNlbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBodHRwID0gdHJhbnNwb3J0KCkgPT09ICdodHRwJ1xuXG4gIGNvbnN0IHN1Ym1pdCA9ICgpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXJOYW1lID0gbmFtZSgpLnRyaW0oKVxuICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0KCkudHJpbSgpXG4gICAgaWYgKCFzZXJ2ZXJOYW1lIHx8IC9cXHMvLnRlc3Qoc2VydmVyTmFtZSkpIHJldHVybiBvbkludmFsaWQoJ25hbWUgaXMgcmVxdWlyZWQgYW5kIGNhbm5vdCBjb250YWluIHNwYWNlcycpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG9uSW52YWxpZChodHRwID8gJ3VybCBpcyByZXF1aXJlZCcgOiAnY29tbWFuZCBpcyByZXF1aXJlZCcpXG4gICAgaWYgKGh0dHAgJiYgIS9eaHR0cHM/OlxcL1xcLy8udGVzdCh2YWx1ZSkpIHJldHVybiBvbkludmFsaWQoJ3VybCBtdXN0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovLycpXG4gICAgaWYgKCFodHRwICYmIC9eaHR0cHM/OlxcL1xcLy8udGVzdCh2YWx1ZSkpIHJldHVybiBvbkludmFsaWQoJ2Egc3RkaW8gY29tbWFuZCBjYW5ub3Qgc3RhcnQgd2l0aCBhIHVybDsgcGljayB0aGUgaHR0cCB0cmFuc3BvcnQnKVxuICAgIGNvbnN0IGV4dHJhID0gaGVhZGVycygpLnRyaW0oKVxuICAgIGxldCBzcGVjID0gaHR0cCAmJiBleHRyYSA/IGAke3ZhbHVlfSAke2V4dHJhfWAgOiB2YWx1ZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNlcnZlclNwZWMoc3BlYylcbiAgICAgIGlmIChwYXJzZWQudHlwZSA9PT0gJ2h0dHAnICYmIGluaXRpYWw/LnR5cGUgPT09ICdodHRwJykge1xuICAgICAgICBmb3IgKGNvbnN0IFtoZWFkZXIsIGhlYWRlclZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQuaGVhZGVycykpIHtcbiAgICAgICAgICBpZiAoaGVhZGVyVmFsdWUgPT09IFJFREFDVEVEX0hFQURFUiAmJiBpbml0aWFsLmhlYWRlcnNbaGVhZGVyXSAhPT0gdW5kZWZpbmVkKSBwYXJzZWQuaGVhZGVyc1toZWFkZXJdID0gaW5pdGlhbC5oZWFkZXJzW2hlYWRlcl1cbiAgICAgICAgfVxuICAgICAgICBzcGVjID0gZm9ybWF0SHR0cFNlcnZlclNwZWMocGFyc2VkLnVybCwgcGFyc2VkLmhlYWRlcnMpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gb25JbnZhbGlkKGVyci5tZXNzYWdlKVxuICAgIH1cbiAgICBvblNhdmUoc2VydmVyTmFtZSwgc3BlYywgc2NvcGUoKSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgeyFlZGl0aW5nICYmIChcbiAgICAgICAgPEZvcm1GaWVsZCBsYWJlbD1cIm5hbWVcIiBhY3RpdmU9e2ZtLmlzKCduYW1lJyl9PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnbmFtZScpfSBwbGFjZWhvbGRlcj1cImxpbmVhclwiIG9uQ2hhbmdlPXtzZXROYW1lfSAvPlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICl9XG4gICAgICB7IWVkaXRpbmcgJiYgKFxuICAgICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwic2NvcGVcIiBhY3RpdmU9e2ZtLmlzKCdzY29wZScpfT5cbiAgICAgICAgICA8UmFkaW8gb3B0aW9ucz17WydnbG9iYWwnLCAncHJvamVjdCddfSBzZWxlY3RlZD17c2NvcGUoKX0gb25DaGFuZ2U9e3NldFNjb3BlfSBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCdzY29wZScpfSAvPlxuICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICl9XG4gICAgICA8Rm9ybUZpZWxkIGxhYmVsPVwidHJhbnNwb3J0XCIgYWN0aXZlPXtmbS5pcygndHJhbnNwb3J0Jyl9PlxuICAgICAgICA8UmFkaW8gb3B0aW9ucz17WydzdGRpbycsICdodHRwJ119IHNlbGVjdGVkPXt0cmFuc3BvcnQoKX0gb25DaGFuZ2U9e3NldFRyYW5zcG9ydH0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygndHJhbnNwb3J0Jyl9IC8+XG4gICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgIDxGb3JtRmllbGQgbGFiZWw9e2h0dHAgPyAndXJsJyA6ICdjb21tYW5kJ30gYWN0aXZlPXtmbS5pcygndGFyZ2V0Jyl9PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEgfX0+XG4gICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygndGFyZ2V0Jyl9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17aHR0cCA/ICdodHRwczovL21jcC5saW5lYXIuYXBwL21jcCcgOiAnbnB4IC15IEBtb2RlbGNvbnRleHRwcm90b2NvbC9zZXJ2ZXItZmlsZXN5c3RlbSAvdG1wJ31cbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZT17dGFyZ2V0KCl9XG4gICAgICAgICAgICBvbkNoYW5nZT17c2V0VGFyZ2V0fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9Gb3JtRmllbGQ+XG4gICAgICB7aHR0cCAmJiAoXG4gICAgICAgIDxGb3JtRmllbGQgbGFiZWw9XCJoZWFkZXJzICBvcHRpb25hbFwiIGFjdGl2ZT17Zm0uaXMoJ2hlYWRlcnMnKX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgPFRleHRJbnB1dCBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCdoZWFkZXJzJyl9IHBsYWNlaG9sZGVyPSdBdXRob3JpemF0aW9uPVwiQmVhcmVyIC4uLlwiIFgtVGVhbT1cImNvcmVcIicgaW5pdGlhbFZhbHVlPXtoZWFkZXJzKCl9IG9uQ2hhbmdlPXtzZXRIZWFkZXJzfSAvPlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L0Zvcm1GaWVsZD5cbiAgICAgICl9XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8QnV0dG9uIGxhYmVsPXtlZGl0aW5nID8gJ3NhdmUnIDogJ2FkZCd9IG9uUHJlc3M9e3N1Ym1pdH0gZm9jdXNlZD17Zm9jdXNlZCAmJiBmbS5pcygnc2F2ZScpfSAvPlxuICAgICAgICA8dGV4dD4gIDwvdGV4dD5cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD1cImNhbmNlbFwiIG9uUHJlc3M9e29uQ2FuY2VsfSBmb2N1c2VkPXtmb2N1c2VkICYmIGZtLmlzKCdjYW5jZWwnKX0gdmFyaWFudD1cImRpbVwiIC8+XG4gICAgICA8L2JveD5cbiAgICA8L2JveD5cbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gTWNwUGFuZWwoeyBzZXJ2ZXJzLCBmb2N1c2VkLCBvblRvZ2dsZSwgb25SZWNvbm5lY3QsIG9uUmVtb3ZlLCBvbkFkZCwgb25FZGl0LCBvbkludmFsaWQsIG9uQ2xvc2UgfSkge1xuICBjb25zdCBbZm9ybSwgc2V0Rm9ybV0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3ZpZXdpbmcsIHNldFZpZXdpbmddID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIHVzZUVzY2FwZSgoKSA9PiBmb2N1c2VkICYmICFmb3JtKCksICgpID0+ICh2aWV3aW5nKCkgPyBzZXRWaWV3aW5nKG51bGwpIDogb25DbG9zZSgpKSlcblxuICBjb25zdCBzZWxlY3RlZCA9ICgpID0+IHNlcnZlcnNbTWF0aC5taW4oaW5kZXgoKSwgc2VydmVycy5sZW5ndGggLSAxKV0gfHwgbnVsbFxuICBjb25zdCB2aWV3ZWQgPSAoKSA9PiBzZXJ2ZXJzLmZpbmQoKHMpID0+IHMubmFtZSA9PT0gdmlld2luZygpKSB8fCBudWxsXG5cbiAgaWYgKHZpZXdpbmcoKSAmJiB2aWV3ZWQoKSkge1xuICAgIGNvbnN0IHNlcnZlciA9IHZpZXdlZCgpXG4gICAgY29uc3QgZGVzY3JpYmUgPSAodCkgPT4gdC5kZXNjcmlwdGlvbi5yZXBsYWNlKC9eXFxbW15cXF1dKlxcXVxccyovLCAnJykudHJpbSgpIHx8ICdubyBkZXNjcmlwdGlvbidcbiAgICByZXR1cm4gKFxuICAgICAgPFBhbmVsRnJhbWVcbiAgICAgICAgdGl0bGU9e2BNQ1Agc2VydmVycyAgJHtzZXJ2ZXIubmFtZX0gICR7c2VydmVyLnRvb2xzLmxlbmd0aH0gJHtzZXJ2ZXIudG9vbHMubGVuZ3RoID09PSAxID8gJ3Rvb2wnIDogJ3Rvb2xzJ31gfVxuICAgICAgICBoaW50PVwiai9rIG9yIFx1MjE5MVx1MjE5MyB0byBzY3JvbGwgIGVzYyBiYWNrIHRvIHNlcnZlcnNcIlxuICAgICAgICBmdWxsU2NyZWVuXG4gICAgICA+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBtYXJnaW5Ub3A6IDEsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgIHtzZXJ2ZXIudG9vbHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pm5vIHRvb2xzIHJlcG9ydGVkICBpcyB0aGUgc2VydmVyIGNvbm5lY3RlZD88L3RleHQ+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxTY3JvbGxCb3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gZm9jdXNlZD17Zm9jdXNlZH0gc2Nyb2xsYmFyPlxuICAgICAgICAgICAgICB7c2VydmVyLnRvb2xzLm1hcCgodCwgaSkgPT4gKFxuICAgICAgICAgICAgICAgIDxib3gga2V5PXt0Lm5hbWV9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXJnaW5Ub3A6IGkgPT09IDAgPyAwIDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57dC5uYW1lfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZGVzY3JpYmUodCl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvU2Nyb2xsQm94PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9QYW5lbEZyYW1lPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFBhbmVsRnJhbWVcbiAgICAgIHRpdGxlPVwiTUNQIHNlcnZlcnNcIlxuICAgICAgaGludD17Zm9ybSgpXG4gICAgICAgID8gJ3RhYiBtb3ZlcyBiZXR3ZWVuIGZpZWxkcyAgai9rICsgc3BhY2UgcGlja3MgYSByYWRpbyBvcHRpb24gIGVzYyBjYW5jZWxzJ1xuICAgICAgICA6ICdlbnRlciBlbmFibGUvZGlzYWJsZSAgdCB0b29scyAgZSBlZGl0ICByIHJlY29ubmVjdCAgYSBhZGQgIGN0cmwreCByZW1vdmUgKHR3aWNlKSAgZXNjIGNsb3NlJ31cbiAgICAgIGZ1bGxTY3JlZW5cbiAgICA+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWFyZ2luVG9wOiAxLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAge2Zvcm0oKSA/IChcbiAgICAgICAgICA8TWNwU2VydmVyRm9ybVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIHNlcnZlcj17Zm9ybSgpID09PSAnYWRkJyA/IG51bGwgOiBmb3JtKCl9XG4gICAgICAgICAgICBvblNhdmU9eyhuYW1lLCBzcGVjLCBzY29wZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZm9ybSgpID09PSAnYWRkJykgb25BZGQobmFtZSwgc3BlYywgc2NvcGUpXG4gICAgICAgICAgICAgIGVsc2Ugb25FZGl0KG5hbWUsIHNwZWMpXG4gICAgICAgICAgICAgIHNldEZvcm0obnVsbClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkludmFsaWQ9e29uSW52YWxpZH1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRGb3JtKG51bGwpfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBzZXJ2ZXJzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+bm8gTUNQIHNlcnZlcnMgY29uZmlndXJlZCAgcHJlc3MgYSB0byBhZGQgb25lPC90ZXh0PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17c2VydmVyc31cbiAgICAgICAgICAgIHNlbGVjdGVkPXtpbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldEluZGV4fVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZH1cbiAgICAgICAgICAgIG1heFZpc2libGU9ezZ9XG4gICAgICAgICAgICB2aW1LZXlzXG4gICAgICAgICAgICBpdGVtSGVpZ2h0PXsyfVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhzKSA9PiBvblRvZ2dsZShzLm5hbWUpfVxuICAgICAgICAgICAgb25DYW5jZWw9e29uQ2xvc2V9XG4gICAgICAgICAgICByZW5kZXJJdGVtPXsocywgeyBhY3RpdmUgfSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdCA9IG1jcFN0YXR1cyhzLnN0YXR1cylcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IHN0LmNvbG9yIH19PntzdC5pY29ufTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkcgfX0+e2AgJHtzLm5hbWUucGFkRW5kKE1hdGgubWF4KDE0LCBzLm5hbWUubGVuZ3RoICsgMSkpfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBzLnN0YXR1cyA9PT0gJ2Vycm9yJyA/IFJFRCA6IE1VVEVEIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAge3Muc3RhdHVzID09PSAnZXJyb3InID8gcy5lcnJvciA6IHMuc3RhdHVzID09PSAnY29ubmVjdGVkJyA/IGAke3MudG9vbENvdW50fSB0b29sc2AgOiBzLnN0YXR1c31cbiAgICAgICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0PnsnICAgICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogTVVURUQgfX0+e3Nob3J0ZW5Ib21lKHJlZGFjdFNlcnZlclNwZWMocy5jb21tYW5kKSl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke3Muc2NvcGUgPT09ICdwcm9qZWN0JyA/ICdwcm9qZWN0JyA6ICdnbG9iYWwnfWB9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgICAgeyFmb3JtKCkgJiYgKFxuICAgICAgICA8TWNwS2V5c1xuICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgICAgb25LZXk9eyhrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBzZWxlY3RlZCgpXG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnYScpIHNldEZvcm0oJ2FkZCcpXG4gICAgICAgICAgICBlbHNlIGlmIChzICYmIGtleSA9PT0gJ2UnKSBzZXRGb3JtKHMpXG4gICAgICAgICAgICBlbHNlIGlmIChzICYmIGtleSA9PT0gJ3InKSBvblJlY29ubmVjdChzLm5hbWUpXG4gICAgICAgICAgICBlbHNlIGlmIChzICYmIGtleSA9PT0gJ3JlbW92ZScpIG9uUmVtb3ZlKHMubmFtZSlcbiAgICAgICAgICAgIGVsc2UgaWYgKHMgJiYga2V5ID09PSAndCcpIHNldFZpZXdpbmcocy5uYW1lKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvUGFuZWxGcmFtZT5cbiAgKVxufVxuXG5mdW5jdGlvbiBNY3BLZXlzKHsgZm9jdXNlZCwgb25LZXkgfSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoIWZvY3VzZWQpIHJldHVyblxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnKSB7XG4gICAgICBvbktleSgncmVtb3ZlJylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCFldmVudC5jdHJsICYmIFsnYScsICdlJywgJ3InLCAndCddLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIG9uS2V5KGV2ZW50LmtleSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgfVxuICB9KVxuICByZXR1cm4gbnVsbFxufVxuIiwgImltcG9ydCB7IGVhc2UsIGxpbmVhciwgdXNlQW5pbWF0ZWQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5cbmZ1bmN0aW9uIHRvUmdiKGNvbG9yKSB7XG4gIGlmIChjb2xvcj8uc3RhcnRzV2l0aCgnIycpICYmIGNvbG9yLmxlbmd0aCA9PT0gNykge1xuICAgIHJldHVybiBbXG4gICAgICBwYXJzZUludChjb2xvci5zbGljZSgxLCAzKSwgMTYpLFxuICAgICAgcGFyc2VJbnQoY29sb3Iuc2xpY2UoMywgNSksIDE2KSxcbiAgICAgIHBhcnNlSW50KGNvbG9yLnNsaWNlKDUsIDcpLCAxNiksXG4gICAgXVxuICB9XG4gIHJldHVybiBbMTI3LCAxMjcsIDEyN11cbn1cblxuZnVuY3Rpb24gbWl4Q29sb3IoZnJvbSwgdG8sIGFtb3VudCkge1xuICBpZiAoZnJvbSA9PT0gdG8pIHJldHVybiBmcm9tXG4gIGNvbnN0IGEgPSB0b1JnYihmcm9tKVxuICBjb25zdCBiID0gdG9SZ2IodG8pXG4gIGNvbnN0IGNoYW5uZWxzID0gYS5tYXAoKHZhbHVlLCBpKSA9PiBNYXRoLnJvdW5kKHZhbHVlICsgKGJbaV0gLSB2YWx1ZSkgKiBhbW91bnQpKVxuICByZXR1cm4gYCMke2NoYW5uZWxzLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBbmltYXRlZFZhbHVlKHsgdmFsdWUsIGluaXRpYWwgPSB2YWx1ZSwgZHVyYXRpb24gPSAxMDAwLCBjb2xvciwgaGlnaGxpZ2h0LCBiYWNrZ3JvdW5kLCBmb3JtYXQgPSBTdHJpbmcgfSkge1xuICBjb25zdCBkaXNwbGF5ZWQgPSB1c2VBbmltYXRlZChpbml0aWFsLCBlYXNlKGR1cmF0aW9uKSlcbiAgY29uc3QgZ2xvdyA9IHVzZUFuaW1hdGVkKDAsIGVhc2UoZHVyYXRpb24sIGxpbmVhcikpXG5cbiAgaWYgKHZhbHVlICE9PSBkaXNwbGF5ZWQuX2FuaW0udGFyZ2V0KSB7XG4gICAgZGlzcGxheWVkLnNldCh2YWx1ZSlcbiAgICBnbG93LnNuYXAoMSlcbiAgICBnbG93LnNldCgwKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogbWl4Q29sb3IoY29sb3IsIGhpZ2hsaWdodCwgZ2xvdygpKSwgYmc6IGJhY2tncm91bmQgfX0+XG4gICAgICB7Zm9ybWF0KGRpc3BsYXllZCgpKX1cbiAgICA8L3RleHQ+XG4gIClcbn1cbiIsICJjb25zdCBMRVZFTFMgPSBbJyAnLCAnXHUyNThGJywgJ1x1MjU4RScsICdcdTI1OEQnLCAnXHUyNThDJywgJ1x1MjU4QicsICdcdTI1OEEnLCAnXHUyNTg5JywgJ1x1MjU4OCddXG5cbmV4cG9ydCBmdW5jdGlvbiBjb250ZXh0QmFyKHBlcmNlbnQsIHdpZHRoID0gNCkge1xuICBjb25zdCBlaWdodGhzID0gTWF0aC5yb3VuZChNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIHBlcmNlbnQpKSAqIHdpZHRoICogOCAvIDEwMClcbiAgY29uc3QgZnVsbCA9IE1hdGguZmxvb3IoZWlnaHRocyAvIDgpXG4gIGNvbnN0IHBhcnRpYWwgPSBlaWdodGhzICUgOFxuICByZXR1cm4gJ1x1MjU4OCcucmVwZWF0KGZ1bGwpICsgKHBhcnRpYWwgPyBMRVZFTFNbcGFydGlhbF0gOiAnJykgKyAnICcucmVwZWF0KHdpZHRoIC0gZnVsbCAtIChwYXJ0aWFsID8gMSA6IDApKVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VHcm91cHMocm93cykge1xuICBjb25zdCBncm91cHMgPSBuZXcgTWFwKClcbiAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgIGlmICghcm93Lm5hbWU/LnRyaW0oKSkgY29udGludWVcbiAgICBpZiAoIWdyb3Vwcy5oYXMocm93LmN3ZCkpIGdyb3Vwcy5zZXQocm93LmN3ZCwgW10pXG4gICAgZ3JvdXBzLmdldChyb3cuY3dkKS5wdXNoKHJvdylcbiAgfVxuICByZXR1cm4gWy4uLmdyb3Vwc10uc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSkubWFwKChbY3dkLCBzZXNzaW9uc10pID0+ICh7IGN3ZCwgc2Vzc2lvbnMgfSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VTZWxlY3Rpb24ocm93cywgc2VsZWN0ZWQsIHByZXZpb3VzID0gW10pIHtcbiAgaWYgKHJvd3Muc29tZSgocm93KSA9PiByb3cuaWQgPT09IHNlbGVjdGVkKSkgcmV0dXJuIHNlbGVjdGVkXG4gIGNvbnN0IGluZGV4ID0gTWF0aC5tYXgoMCwgcHJldmlvdXMuZmluZEluZGV4KChyb3cpID0+IHJvdy5pZCA9PT0gc2VsZWN0ZWQpKVxuICByZXR1cm4gcm93c1tNYXRoLm1pbihpbmRleCwgcm93cy5sZW5ndGggLSAxKV0/LmlkID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZU5hdmlnYXRlKHJvd3MsIHNlbGVjdGVkLCBldmVudCwgaGVpZ2h0KSB7XG4gIGNvbnN0IGluZGV4ID0gTWF0aC5tYXgoMCwgcm93cy5maW5kSW5kZXgoKHJvdykgPT4gcm93LmlkID09PSBzZWxlY3RlZCkpXG4gIGNvbnN0IGhhbGYgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGhlaWdodCAvIDYpKVxuICBsZXQgbmV4dFxuICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdkJykgbmV4dCA9IGluZGV4ICsgaGFsZlxuICBlbHNlIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3UnKSBuZXh0ID0gaW5kZXggLSBoYWxmXG4gIGVsc2UgaWYgKGV2ZW50LmN0cmwgfHwgZXZlbnQubWV0YSB8fCBldmVudC5hbHQpIHJldHVybiB1bmRlZmluZWRcbiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaicgfHwgZXZlbnQua2V5ID09PSAnZG93bicpIG5leHQgPSBpbmRleCArIDFcbiAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnaycgfHwgZXZlbnQua2V5ID09PSAndXAnKSBuZXh0ID0gaW5kZXggLSAxXG4gIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2cnKSBuZXh0ID0gMFxuICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdHJykgbmV4dCA9IHJvd3MubGVuZ3RoIC0gMVxuICBlbHNlIHJldHVybiB1bmRlZmluZWRcbiAgcmV0dXJuIHJvd3NbTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93cy5sZW5ndGggLSAxLCBuZXh0KSldPy5pZCA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3Jrc3BhY2VEcmFmdEF0dGFjaG1lbnRzKHRleHQsIGF0dGFjaG1lbnRzKSB7XG4gIHJldHVybiBbLi4udGV4dC5tYXRjaEFsbCgvXFxbKD86SW1hZ2V8RmlsZSkgI1xcZCtcXF0vZyldLmZpbHRlcihtYXRjaCA9PiBhdHRhY2htZW50cy5oYXMobWF0Y2hbMF0pKS5sZW5ndGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5V29ya3NwYWNlQ29tcG9zZXIoeyB0ZXh0LCBhdHRhY2htZW50cywgZGljdGF0aW9uLCBjYXB0dXJlLCBwZW5kaW5nLCBoaXN0b3J5LCBjb21wbGV0aW9uLCBjb21tYW5kLCBxdWVzdGlvbiwgc3RlZXIsIHF1ZXVlZCwgZXhwZWRpdGVkIH0pIHtcbiAgcmV0dXJuIHRleHQgPT09ICcnICYmIGF0dGFjaG1lbnRzID09PSAwICYmIGRpY3RhdGlvbiA9PT0gJ2lkbGUnICYmIGNhcHR1cmUgPT09ICdpZGxlJyAmJiAhcGVuZGluZyAmJiBoaXN0b3J5IDwgMCAmJiAhY29tcGxldGlvbiAmJiAhY29tbWFuZCAmJiAhcXVlc3Rpb24gJiYgIXN0ZWVyICYmIHF1ZXVlZCA9PT0gMCAmJiBleHBlZGl0ZWQgPT09IDBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtzcGFjZUFjdGlvbihyb3cpIHtcbiAgcmV0dXJuIHJvdz8uc3RhdHVzID09PSAnYnVzeScgPyAnaW50ZXJydXB0JyA6IHJvdz8uc3RhdHVzID09PSAnaWRsZScgPyAnZGVtb3RlJyA6IG51bGxcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VTaWRlYmFyIH0gZnJvbSAnLi93b3Jrc3BhY2Utc2lkZWJhci5qc3gnXG5pbXBvcnQgeyB3b3Jrc3BhY2VHcm91cHMsIHdvcmtzcGFjZVNlbGVjdGlvbiwgd29ya3NwYWNlTmF2aWdhdGUsIHdvcmtzcGFjZUFjdGlvbiwgd29ya3NwYWNlRHJhZnRBdHRhY2htZW50cywgZW1wdHlXb3Jrc3BhY2VDb21wb3NlciB9IGZyb20gJy4vd29ya3NwYWNlLXNpZGViYXIuanMnXG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnXG5pbXBvcnQgeyBwYXJzZUZyb250bWF0dGVyIH0gZnJvbSAncGljb2NvZGUtY29yZS9za2lsbHMuanMnXG5pbXBvcnQgeyBleHBhbmRDb21tYW5kLCBwYXJzZUNvbW1hbmRBcmd1bWVudHMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbW1hbmRzLmpzJ1xuaW1wb3J0IHsgY29tbWFuZEF0LCByZXBsYWNlQ29tbWFuZCwgY29tbWFuZEZpZWxkcyB9IGZyb20gJy4vY29tcG9zZXItY29tbWFuZHMuanMnXG5pbXBvcnQgeyBDb21tYW5kRm9ybSB9IGZyb20gJy4vY29tbWFuZC1mb3JtLmpzeCdcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgY3JlYXRlRGljdGF0aW9uIH0gZnJvbSAnLi4vZGljdGF0aW9uLmpzJ1xuaW1wb3J0IHsgcmVhZENsaXBib2FyZEltYWdlIH0gZnJvbSAnLi4vY2xpcGJvYXJkLmpzJ1xuaW1wb3J0IHsgY3JlYXRlQ2xpcGJvYXJkSW5wdXQgfSBmcm9tICcuL2NsaXBib2FyZC1pbnB1dC5qcydcbmltcG9ydCB7IGNyZWF0ZURpY3RhdGlvbklucHV0IH0gZnJvbSAnLi9kaWN0YXRpb24taW5wdXQuanMnXG5pbXBvcnQgeyBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQgfSBmcm9tICcuL3NjcmVlbi1jYXB0dXJlLWlucHV0LmpzJ1xuaW1wb3J0IHsgY2FwdHVyZVJlZ2lvbiB9IGZyb20gJy4uL3NjcmVlbi1jYXB0dXJlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlQ29tcG9zZXJGaWxlcyB9IGZyb20gJy4vY29tcG9zZXItZmlsZXMuanMnXG5pbXBvcnQgeyBkaWN0YXRpb25JbmRpY2F0b3IsIGFwcGVuZExldmVsIH0gZnJvbSAnLi9kaWN0YXRpb24taW5kaWNhdG9yLmpzJ1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCB1c2VJbnRlcnZhbCwgb25DbGVhbnVwLCBNZW51LCBQcm9ncmVzc0JhciwgU2Nyb2xsQm94LCBTaGltbWVyLCBTcGlubmVyLCBUZXh0QXJlYSwgdXNlRm9jdXMsIHVzZUZvY3VzVHJhcCwgdXNlRnJhbWVTdGF0cywgdXNlSGl0VGVzdCwgdXNlSW5wdXQsIHVzZUxheW91dCwgdXNlTW91c2UsIHVzZVJlc2l6ZSwgdXNlU2VsZWN0aW9uLCB1c2VUb2FzdCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IG1ha2VFdmVudCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZXZlbnRzLmpzJ1xuaW1wb3J0IHsgbGlzdFNlc3Npb25zLCBkZWxldGVTZXNzaW9uLCBkZWxldGVQcm9qZWN0RGF0YSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc2Vzc2lvbi5qcydcbmltcG9ydCB7IHVzZXJFbnRyaWVzLCByZXdpbmRTdGF0cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZGVyaXZlLmpzJ1xuaW1wb3J0IHsgbG9hZFByb2plY3RQcm9tcHRzLCBsb2FkR2xvYmFsUHJvbXB0cyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvaGlzdG9yeS5qcydcbmltcG9ydCB7IGltcGxpY2l0UmV3aW5kVGFyZ2V0IH0gZnJvbSAncGljb2NvZGUtY29yZS9yZXdpbmQuanMnXG5pbXBvcnQgeyBjaGVja0ZvclVwZGF0ZSwgZmV0Y2hMYXRlc3RWZXJzaW9uLCBuZXdlclZlcnNpb24sIGlzRGV2SW5zdGFsbCwgcnVuVXBkYXRlIH0gZnJvbSAncGljb2NvZGUtY29yZS91cGRhdGUuanMnXG5pbXBvcnQgeyBTVEVFUl9ST0xFUywgc3RlZXJhYmxlVHJhbnNjcmlwdCB9IGZyb20gJ3BpY29jb2RlLWNvcmUvc3RlZXIuanMnXG5pbXBvcnQgeyB3cml0ZUNvbmZpZyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvY29uZmlnLmpzJ1xuaW1wb3J0IHsgb3BlbmFpU3RhdHVzIH0gZnJvbSAncGljb2NvZGUtY29yZS9vcGVuYWktYXV0aC5qcydcbmltcG9ydCB7IEVGRk9SVF9MRVZFTFMsIFNQRUVEX0xFVkVMUywgU0VTU0lPTl9DT0xPUlMgfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbnRyb2xsZXIuanMnXG5pbXBvcnQgeyBhZ2VudFRyYW5zY3JpcHQgfSBmcm9tICdwaWNvY29kZS1jb3JlL2FnZW50LXRyYW5zY3JpcHQuanMnXG5pbXBvcnQgeyBmdXp6eVNjb3JlIH0gZnJvbSAncGljb2NvZGUtY29yZS9mdXp6eS5qcydcbmltcG9ydCB7IGNvbXBsZXRpb25Db250ZXh0LCBhcHBseUNvbXBsZXRpb24gfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbXBsZXRpb24uanMnXG5pbXBvcnQgeyBleHRyYWN0SW1hZ2VQYXRocywgcGxhY2Vob2xkZXJpemVJbWFnZVBhdGhzIH0gZnJvbSAncGljb2NvZGUtY29yZS9hdHRhY2htZW50cy5qcydcbmltcG9ydCB7IGxpc3RGaWxlcyB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZmlsZXMuanMnXG5pbXBvcnQgeyBsaXN0V29ya3RyZWVzIH0gZnJvbSAncGljb2NvZGUtY29yZS93b3JrdHJlZXMuanMnXG5pbXBvcnQgeyBvd25lclJvb3QgfSBmcm9tICdwaWNvY29kZS1jb3JlL3BhdGhzLmpzJ1xuaW1wb3J0IHsgaGlnaGxpZ2h0VmVyc2lvbiB9IGZyb20gJy4vaGlnaGxpZ2h0LmpzJ1xuaW1wb3J0IHsgY29tcGFjdE51bWJlciB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZm9ybWF0LmpzJ1xuaW1wb3J0IHsgY29udGV4dEJhciB9IGZyb20gJy4vY29udGV4dC1iYXIuanMnXG5pbXBvcnQgeyBhY3Rpdml0eVJvd3MsIGFjdGl2aXR5U3RyaXBTaXplcywgc3RyaXBXaW5kb3dTdGFydCB9IGZyb20gJy4vYWN0aXZpdHktc3RyaXAuanMnXG5pbXBvcnQgeyBBbmltYXRlZFZhbHVlIH0gZnJvbSAnLi9hbmltYXRlZC12YWx1ZS5qc3gnXG5pbXBvcnQgeyBEZWxpYmVyYXRpb25FeGNoYW5nZSwgTWVzc2FnZSB9IGZyb20gJy4vdHJhbnNjcmlwdC5qc3gnXG5pbXBvcnQgeyBDb252ZXJzYXRpb25TZWFyY2hCYXIsIENvbnZlcnNhdGlvblNjcm9sbEFuY2hvciwgQ29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZSwgY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoIH0gZnJvbSAnLi9jb252ZXJzYXRpb24tc2VhcmNoLXZpZXcuanN4J1xuaW1wb3J0IHsgY29tcGFjdFRyYW5zY3JpcHRSdW5zLCB0cmFuc2NyaXB0V2luZG93IH0gZnJvbSAnLi90cmFuc2NyaXB0LXdpbmRvdy5qcydcbmltcG9ydCB7IFF1ZXN0aW9uRm9ybSB9IGZyb20gJy4vcXVlc3Rpb24tZm9ybS5qc3gnXG5pbXBvcnQgeyBFbXB0eVN0YXRlIH0gZnJvbSAnLi9lbXB0eS1zdGF0ZS5qc3gnXG5pbXBvcnQgeyBIZWxwIH0gZnJvbSAnLi9oZWxwLmpzeCdcbmltcG9ydCB7IE1vZGVsUGFuZWwsIEVmZm9ydFBhbmVsLCBTcGVlZFBhbmVsLCBUaGVtZVBhbmVsLCBDb25maWdQYW5lbCwgQ29uZmlybVBhbmVsLCBIaXN0b3J5UGFuZWwsIFJld2luZFBpY2tQYW5lbCwgUmV3aW5kQWN0aW9uUGFuZWwsIFJlc3VtZVBhbmVsLCBQcm9qZWN0UGFuZWwsIE1jcFBhbmVsLCBNZW1vcnlQYW5lbCwgSW5mb0xpc3RQYW5lbCwgV2FrZXVwc1BhbmVsLCBDb25uZWN0UGFuZWwsIHRpbWVBZ28gfSBmcm9tICcuL3BhbmVscy5qc3gnXG5pbXBvcnQgeyBhY2NlbnQsIHNldEFjY2VudCwgc2V0UGFsZXR0ZSwgcGFsZXR0ZU5hbWUsIHBhbGV0dGVMaXN0LCBERUZBVUxUX0FDQ0VOVCwgRkcsIEZHX1NPRlQsIE1VVEVELCBQQU5FTF9CRywgUkVELCBHUkVFTiwgSElHSExJR0hUIH0gZnJvbSAnLi90aGVtZS5qcydcblxuY29uc3QgQ09NTUFORFMgPSBbXG4gIHsgbmFtZTogJ21vZGVsJywgZGVzYzogJ1N3aXRjaCB0aGUgYWN0aXZlIG1vZGVsIGZvciB0aGlzIHNlc3Npb24nIH0sXG4gIHsgbmFtZTogJ3JlZnJlc2gtbW9kZWxzJywgZGVzYzogJ1JlZnJlc2ggYXZhaWxhYmxlIG1vZGVscyBmcm9tIHByb3ZpZGVycycgfSxcbiAgeyBuYW1lOiAnY29ubmVjdCcsIGRlc2M6ICdTaWduIGluIHdpdGggQ2hhdEdQVCB0byB1c2UgYSBDb2RleCBzdWJzY3JpcHRpb24nIH0sXG4gIHsgbmFtZTogJ2VmZm9ydCcsIGRlc2M6ICdTZXQgdGhlIHRoaW5raW5nIGVmZm9ydCBmb3IgdGhpcyBzZXNzaW9uJyB9LFxuICB7IG5hbWU6ICdzcGVlZCcsIGRlc2M6ICdTcGVlZCcgfSxcbiAgeyBuYW1lOiAncmVzdW1lJywgZGVzYzogJ1BpY2sgdXAgYSBwcmV2aW91cyBzZXNzaW9uIHdoZXJlIHlvdSBsZWZ0IG9mZicgfSxcbiAgeyBuYW1lOiAnbmV3JywgZGVzYzogJ1N0YXJ0IGEgbmV3IHNlc3Npb24gaW4gdGhpcyBwcm9qZWN0JyB9LFxuICB7IG5hbWU6ICdmb3JrJywgZGVzYzogJ0ZvcmsgY29udmVyc2F0aW9uJyB9LFxuICB7IG5hbWU6ICdkZWxldGUnLCBkZXNjOiAnUGVybWFuZW50bHkgZGVsZXRlIHRoZSBjdXJyZW50IHNlc3Npb24gYW5kIHN0YXJ0IGZyZXNoJyB9LFxuICB7IG5hbWU6ICdwcm9qZWN0JywgZGVzYzogJ1N3aXRjaCBwcm9qZWN0czoganVtcCB0byBhbm90aGVyIHByb2plY3QsIHNhbWUgYXMgY3RybCtwJyB9LFxuICB7IG5hbWU6ICdjd2QnLCBkZXNjOiAnU2hvdyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgcHJvamVjdCByb290JyB9LFxuICB7IG5hbWU6ICdza2lsbHMnLCBkZXNjOiAnTGlzdCBldmVyeSBza2lsbDogYnVpbHRpbiwgZ2xvYmFsLCBhbmQgcHJvamVjdCcgfSxcbiAgeyBuYW1lOiAnY29tbWFuZHMnLCBkZXNjOiAnTGlzdCBldmVyeSBjb21tYW5kOiBidWlsdGluLCBnbG9iYWwsIGFuZCBwcm9qZWN0JyB9LFxuICB7IG5hbWU6ICdpbml0JywgZGVzYzogJ0NyZWF0ZSBvciBpbXByb3ZlIHJlcG9zaXRvcnkgQUdFTlRTLm1kIGd1aWRhbmNlJyB9LFxuICB7IG5hbWU6ICd0b29scycsIGRlc2M6ICdMaXN0IGJ1aWx0aW4gYW5kIHVzZXItZGVmaW5lZCB0b29sczsgTUNQIHRvb2xzIGxpdmUgaW4gL21jcCcgfSxcbiAgeyBuYW1lOiAncmV3aW5kJywgZGVzYzogJ1Jlc3RvcmUgdGhlIGNvbnZlcnNhdGlvbiB0byBhIHByZXZpb3VzIG1lc3NhZ2UnIH0sXG4gIHsgbmFtZTogJ3N0ZWVyJywgZGVzYzogJ0VkaXQgb3IgYWRkIGNvbnZlcnNhdGlvbiBtZXNzYWdlcyB3aXRob3V0IHNlbmRpbmcnIH0sXG4gIHsgbmFtZTogJ2hpc3RvcnknLCBkZXNjOiAnU2VhcmNoIHByb21wdHMgeW91IHByZXZpb3VzbHkgc2VudCcgfSxcbiAgeyBuYW1lOiAncmVuYW1lJywgZGVzYzogJ05hbWUgdGhpcyBzZXNzaW9uOyBvbWl0IHRoZSBuYW1lIHRvIHJlc3RvcmUgaXRzIGF1dG9tYXRpYyB0aXRsZScgfSxcbiAgeyBuYW1lOiAnY29sb3InLCBkZXNjOiAnQ29sb3IgdGhpcyBzZXNzaW9uOiAvY29sb3IgPG5hbWUgb3IgI2hleD4sIC9jb2xvciBub25lIHRvIGNsZWFyJyB9LFxuICB7IG5hbWU6ICd0aGVtZScsIGRlc2M6ICdQaWNrIGEgY29sb3IgdGhlbWU7IC90aGVtZSA8bmFtZT4gYXBwbGllcyBvbmUgZGlyZWN0bHknIH0sXG4gIHsgbmFtZTogJ2NvbmZpZycsIGRlc2M6ICdDb25maWd1cmUgcGljbyBkaXNwbGF5IGFuZCBiZWhhdmlvcicgfSxcbiAgeyBuYW1lOiAnbWNwJywgZGVzYzogJ01hbmFnZSBNQ1Agc2VydmVyczogYWRkLCB0b2dnbGUsIHJlY29ubmVjdCcgfSxcbiAgeyBuYW1lOiAncGFyYWxsZWwnLCBkZXNjOiAnUnVuIGEgdGFzayB3aXRoIHBhcmFsbGVsIGFnZW50czogL3BhcmFsbGVsIDx0YXNrPicgfSxcbiAgeyBuYW1lOiAnZGVsaWJlcmF0ZScsIGRlc2M6ICdEZWxpYmVyYXRlIG9uIGEgZGVjaXNpb246IC9kZWxpYmVyYXRlIDxkZWNpc2lvbj4nIH0sXG4gIHsgbmFtZTogJ3dha2V1cHMnLCBkZXNjOiAnVmlldyBhbmQgY2FuY2VsIHNjaGVkdWxlZCB3YWtlLXVwcycgfSxcbiAgeyBuYW1lOiAnbWVtb3J5JywgZGVzYzogJ0Jyb3dzZSBhbmQgbWFuYWdlIHNhdmVkIG1lbW9yaWVzOiBwcm9qZWN0IGFuZCBnbG9iYWwnIH0sXG4gIHsgbmFtZTogJ2NvbXBhY3QnLCBkZXNjOiAnU3VtbWFyaXplIHRoZSBjb252ZXJzYXRpb24gdG8gZnJlZSB0aGUgY29udGV4dCB3aW5kb3cnIH0sXG4gIHsgbmFtZTogJ2NsZWFyJywgZGVzYzogJ0NsZWFyIHRoZSBjb252ZXJzYXRpb24gYW5kIGZyZWUgdGhlIGNvbnRleHQgd2luZG93JyB9LFxuICB7IG5hbWU6ICdjb3N0JywgZGVzYzogJ1Nob3cgdG9rZW4gdXNhZ2UgYW5kIGVzdGltYXRlZCBjb3N0IHNvIGZhcicgfSxcbiAgeyBuYW1lOiAnY29udGV4dCcsIGRlc2M6IFwiU2hvdyB3aGF0J3MgaW4gdGhlIG1vZGVsJ3MgY29udGV4dCBhbmQgaG93IGJpZyBlYWNoIHBpZWNlIGlzXCIgfSxcbiAgeyBuYW1lOiAnZXhwb3J0JywgZGVzYzogJ1NhdmUgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIHRvIGEgbWFya2Rvd24gZmlsZScgfSxcbiAgeyBuYW1lOiAndXBkYXRlJywgZGVzYzogJ1VwZGF0ZSBwaWNvIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSBmcm9tIG5wbScgfSxcbiAgeyBuYW1lOiAnaGVscCcsIGRlc2M6ICdMaXN0IGV2ZXJ5IGNvbW1hbmQgYW5kIHdoYXQgaXQgZG9lcycgfSxcbl1cblxuY29uc3QgSElTVE9SWV9TQ09QRVMgPSBbJ3Nlc3Npb24nLCAncHJvamVjdCcsICdldmVyeXdoZXJlJ11cbmNvbnN0IE1FTU9SWV9TQ09QRVMgPSBbJ2FsbCcsICdwcm9qZWN0JywgJ2dsb2JhbCddXG5cblxuZnVuY3Rpb24gYWdlbnRFbGFwc2VkKGFnZW50LCBub3cgPSBEYXRlLm5vdygpKSB7XG4gIGlmICghYWdlbnQuc3RhcnRlZEF0KSByZXR1cm4gJ3dhaXRpbmcnXG4gIGNvbnN0IHNlY29uZHMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCgoYWdlbnQuZW5kZWRBdCB8fCBub3cpIC0gYWdlbnQuc3RhcnRlZEF0KSAvIDEwMDApKVxuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApXG4gIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihtaW51dGVzIC8gNjApXG4gIGlmIChob3VycykgcmV0dXJuIGAke2hvdXJzfWggJHttaW51dGVzICUgNjB9bWBcbiAgaWYgKG1pbnV0ZXMpIHJldHVybiBgJHttaW51dGVzfW0gJHtzZWNvbmRzICUgNjB9c2BcbiAgcmV0dXJuIGAke3NlY29uZHN9c2Bcbn1cblxuZnVuY3Rpb24gYWdlbnRTdGF0dXMoYWdlbnQpIHtcbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4geyBpY29uOiAnJywgbGFiZWw6ICcnLCBjb2xvcjogYWNjZW50KCkgfVxuICBpZiAoYWdlbnQuc3RhdHVzID09PSAncXVldWVkJykgcmV0dXJuIHsgaWNvbjogJ1x1MjVDQycsIGxhYmVsOiAncXVldWVkJywgY29sb3I6IE1VVEVEIH1cbiAgaWYgKGFnZW50LnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHJldHVybiB7IGljb246ICdcdTI1Q0YnLCBsYWJlbDogJycsIGNvbG9yOiBHUkVFTiB9XG4gIGlmIChhZ2VudC5zdGF0dXMgPT09ICdmYWlsZWQnKSByZXR1cm4geyBpY29uOiAnXHUwMEQ3JywgbGFiZWw6ICdmYWlsZWQnLCBjb2xvcjogUkVEIH1cbiAgcmV0dXJuIHsgaWNvbjogJ1x1MjVBMCcsIGxhYmVsOiAnY2FuY2VsbGVkJywgY29sb3I6IE1VVEVEIH1cbn1cblxuZnVuY3Rpb24gU3RlZXJNZXNzYWdlKHsgaXRlbSwgdmVyYm9zZSwgc2VsZWN0ZWQsIGZvY3VzIH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgZm9jdXMuaXRlbShpdGVtLm1lc3NhZ2VJZCwgbGF5b3V0KVxuICByZXR1cm4gPE1lc3NhZ2UgaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gc2hvd0xvY2tlZCAvPlxufVxuXG5mdW5jdGlvbiBEaWN0YXRpb25LZXlzKHsgaW5wdXQgfSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoaW5wdXQuaGFuZGxlKGV2ZW50KSkgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgfSlcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gTW91c2VGb2N1c1JlZ2lvbih7IGNoaWxkcmVuLCBvblByZXNzLCAuLi5wcm9wcyB9KSB7XG4gIGNvbnN0IGhpdFRlc3QgPSB1c2VIaXRUZXN0KClcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJyAmJiBldmVudC5idXR0b24gPT09ICdsZWZ0JyAmJiBoaXRUZXN0KGV2ZW50LngsIGV2ZW50LnkpKSBvblByZXNzKClcbiAgfSlcbiAgcmV0dXJuIDxib3ggey4uLnByb3BzfT57Y2hpbGRyZW59PC9ib3g+XG59XG5cbmZ1bmN0aW9uIENvbXBvc2VyQWN0aW9uKHsgaWNvbiwgYWN0aXZlSWNvbiwgYWN0aXZlID0gZmFsc2UsIG9uUHJlc3MsIG9uSG92ZXIgfSkge1xuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIGNvbnN0IFtob3ZlcmVkLCBzZXRIb3ZlcmVkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgaW5zaWRlID0gaGl0VGVzdChldmVudC54LCBldmVudC55KVxuICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdtb3ZlJyAmJiBpbnNpZGUgIT09IGhvdmVyZWQoKSkge1xuICAgICAgc2V0SG92ZXJlZChpbnNpZGUpXG4gICAgICBvbkhvdmVyPy4oaW5zaWRlKVxuICAgIH1cbiAgICBpZiAoaW5zaWRlICYmIGV2ZW50LmFjdGlvbiA9PT0gJ3ByZXNzJyAmJiBldmVudC5idXR0b24gPT09ICdsZWZ0Jykge1xuICAgICAgb25QcmVzcygpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcbiAgY29uc3QgaGlnaGxpZ2h0ZWQgPSBob3ZlcmVkKCkgfHwgYWN0aXZlXG4gIHJldHVybiA8dGV4dCBzdHlsZT17eyBiZzogaGlnaGxpZ2h0ZWQgPyBhY2NlbnQoKSA6IHVuZGVmaW5lZCwgY29sb3I6IGhpZ2hsaWdodGVkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICR7aGlnaGxpZ2h0ZWQgPyBhY3RpdmVJY29uIDogaWNvbn0gYH08L3RleHQ+XG59XG5cbmZ1bmN0aW9uIEFnZW50U3RyaXBSb3coeyBzZWxlY3RlZCwgZm9jdXNlZCwgY2hpbGRyZW4sIG9uUHJlc3MgfSkge1xuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIGNvbnN0IFtob3ZlcmVkLCBzZXRIb3ZlcmVkXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgdXNlTW91c2UoKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgaW5zaWRlID0gaGl0VGVzdChldmVudC54LCBldmVudC55KVxuICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdtb3ZlJykgc2V0SG92ZXJlZChpbnNpZGUpXG4gICAgaWYgKGluc2lkZSAmJiBldmVudC5hY3Rpb24gPT09ICdwcmVzcycgJiYgZXZlbnQuYnV0dG9uID09PSAnbGVmdCcpIHtcbiAgICAgIG9uUHJlc3MoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYmc6IGZvY3VzZWQgPyBhY2NlbnQoKSA6IG51bGwsIGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IGhvdmVyZWQoKSA/IEZHX1NPRlQgOiBNVVRFRCB9fT5cbiAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHNlbGVjdGVkID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogc2VsZWN0ZWQgfX0+e3NlbGVjdGVkID8gJ1x1Mjc2RiAnIDogJyAgJ308L3RleHQ+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9ib3g+XG4gIClcbn1cblxuLy8gb25seSB0aGUgbmV3ZXN0IHNsaWNlIG9mIGEgbG9uZyB0cmFuc2NyaXB0IHJlbmRlcnM7IG9sZGVyIGl0ZW1zIGxvYWQgaW5cbi8vIGJhdGNoZXMgd2hlbiB0aGUgdXNlciBzY3JvbGxzIHRvIHRoZSB0b3AuIHJlbmRlciBjb3N0IGlzIHBlci1pdGVtLCBzbyB0aGlzXG4vLyBrZWVwcyBkYXktbG9uZyBzZXNzaW9ucyBhcyBmYXN0IGFzIGZyZXNoIG9uZXNcbmNvbnN0IEhJU1RPUllfV0lORE9XID0gNTBcblxuZnVuY3Rpb24gY29sbGFwc2VTdGVlclRvb2xzKGl0ZW1zKSB7XG4gIGNvbnN0IGNvbGxhcHNlZCA9IFtdXG4gIGxldCBoaWRkZW4gPSAwXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgIGlmICghaGlkZGVuKSByZXR1cm5cbiAgICBjb2xsYXBzZWQucHVzaCh7IGtpbmQ6ICdzdGVlci10b29scycsIGNvdW50OiBoaWRkZW4gfSlcbiAgICBoaWRkZW4gPSAwXG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnIHx8IGl0ZW0ua2luZCA9PT0gJ3Rob3VnaHRzJykge1xuICAgICAgaGlkZGVuICs9IGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnID8gaXRlbS5pdGVtcy5sZW5ndGggOiAxXG4gICAgfSBlbHNlIHtcbiAgICAgIGZsdXNoKClcbiAgICAgIGNvbGxhcHNlZC5wdXNoKGl0ZW0pXG4gICAgfVxuICB9XG4gIGZsdXNoKClcbiAgcmV0dXJuIGNvbGxhcHNlZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQXBwKHsgYm9vdCwgY29udHJvbGxlcjogY3RsIH0pIHtcbiAgY29uc3QgeyBjd2QsIHJvb3QsIHZlcnNpb24sIHNraWxscywgbWNwIH0gPSBib290XG4gIGNvbnN0IHN0YXRlID0gY3RsLnN0YXRlXG4gIGNvbnN0IFt3b3Jrc3BhY2VPcGVuLCBzZXRXb3Jrc3BhY2VPcGVuXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3dvcmtzcGFjZVJvd3MsIHNldFdvcmtzcGFjZVJvd3NdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbd29ya3NwYWNlU2VsZWN0ZWQsIHNldFdvcmtzcGFjZVNlbGVjdGVkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbd29ya3NwYWNlTG9hZGluZywgc2V0V29ya3NwYWNlTG9hZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFt3b3Jrc3BhY2VFcnJvciwgc2V0V29ya3NwYWNlRXJyb3JdID0gY3JlYXRlU2lnbmFsKCcnKVxuICBjb25zdCBbd29ya3NwYWNlSGVpZ2h0LCBzZXRXb3Jrc3BhY2VIZWlnaHRdID0gY3JlYXRlU2lnbmFsKDIwKVxuICBjb25zdCBbd29ya3NwYWNlUGVuZGluZywgc2V0V29ya3NwYWNlUGVuZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IHdvcmtzcGFjZUdyb3Vwc05vdyA9IHdvcmtzcGFjZUdyb3Vwcyh3b3Jrc3BhY2VSb3dzKCkpXG4gIGNvbnN0IHdvcmtzcGFjZVNlc3Npb25zID0gd29ya3NwYWNlR3JvdXBzTm93LmZsYXRNYXAoKGdyb3VwKSA9PiBncm91cC5zZXNzaW9ucylcbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaFdvcmtzcGFjZSgpIHtcbiAgICBpZiAoIWJvb3Qud29ya3NwYWNlIHx8IGJvb3QucmVmcy53b3Jrc3BhY2VSZWZyZXNoaW5nKSByZXR1cm5cbiAgICBib290LnJlZnMud29ya3NwYWNlUmVmcmVzaGluZyA9IHRydWVcbiAgICB0cnkge1xuICAgICAgY29uc3Qgcm93cyA9IGF3YWl0IGJvb3Qud29ya3NwYWNlLmxpc3QoKVxuICAgICAgY29uc3QgbmV4dCA9IHdvcmtzcGFjZUdyb3Vwcyhyb3dzKS5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuc2Vzc2lvbnMpXG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHdvcmtzcGFjZVNlbGVjdGlvbihuZXh0LCB3b3Jrc3BhY2VTZWxlY3RlZCgpLCB3b3Jrc3BhY2VTZXNzaW9ucylcbiAgICAgIHNldFdvcmtzcGFjZVNlbGVjdGVkKHNlbGVjdGVkKVxuICAgICAgc2V0V29ya3NwYWNlUm93cyhyb3dzKVxuICAgICAgc2V0V29ya3NwYWNlRXJyb3IoJycpXG4gICAgICBpZiAod29ya3NwYWNlT3BlbigpKSBhd2FpdCBib290LndvcmtzcGFjZS5wcmV2aWV3KHNlbGVjdGVkKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgc2Vzc2lvbnMgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYm9vdC5yZWZzLndvcmtzcGFjZVJlZnJlc2hpbmcgPSBmYWxzZVxuICAgICAgc2V0V29ya3NwYWNlTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cbiAgYm9vdC5yZWZzLnJlZnJlc2hXb3Jrc3BhY2UgPSByZWZyZXNoV29ya3NwYWNlXG4gIHVzZUludGVydmFsKCgpID0+IHsgaWYgKHdvcmtzcGFjZU9wZW4oKSkgdm9pZCBib290LnJlZnMucmVmcmVzaFdvcmtzcGFjZSgpIH0sIDEwMDApXG4gIGlmIChib290LndvcmtzcGFjZSAmJiAhYm9vdC5yZWZzLndvcmtzcGFjZVN1YnNjcmliZWQpIHtcbiAgICBib290LnJlZnMud29ya3NwYWNlU3Vic2NyaWJlZCA9IHRydWVcbiAgICBjb25zdCBjbGVhbnVwID0gYm9vdC53b3Jrc3BhY2Uuc3Vic2NyaWJlPy4oKCkgPT4gdm9pZCBib290LnJlZnMucmVmcmVzaFdvcmtzcGFjZSgpKVxuICAgIG9uQ2xlYW51cCgoKSA9PiB7IGNsZWFudXA/LigpOyBib290LnJlZnMud29ya3NwYWNlU3Vic2NyaWJlZCA9IGZhbHNlIH0pXG4gIH1cbiAgY29uc3QgW21vZGVscywgc2V0TW9kZWxzXSA9IGNyZWF0ZVNpZ25hbChib290Lm1vZGVscylcbiAgY29uc3QgW3JlZnJlc2hpbmdNb2RlbHMsIHNldFJlZnJlc2hpbmdNb2RlbHNdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuXG4gIGNvbnN0IFtkZXJpdmVkLCBzZXREZXJpdmVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZXJpdmVkKVxuICBjb25zdCBbdGVybWluYWxXaWR0aCwgc2V0VGVybWluYWxXaWR0aF0gPSBjcmVhdGVTaWduYWwocHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MClcbiAgY29uc3QgW3Rlcm1pbmFsSGVpZ2h0LCBzZXRUZXJtaW5hbEhlaWdodF0gPSBjcmVhdGVTaWduYWwocHJvY2Vzcy5zdGRvdXQucm93cyB8fCAyNClcbiAgdXNlUmVzaXplKCh7IHdpZHRoLCBoZWlnaHQgfSkgPT4geyBzZXRUZXJtaW5hbFdpZHRoKHdpZHRoKTsgc2V0VGVybWluYWxIZWlnaHQoaGVpZ2h0KSB9KVxuICBjb25zdCBbb3ZlcmxheSwgc2V0T3ZlcmxheV0gPSBjcmVhdGVTaWduYWwoc3RhdGUub3ZlcmxheSlcbiAgY29uc3QgW3N0cmVhbWluZywgc2V0U3RyZWFtaW5nXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zdHJlYW1pbmcpXG4gIGNvbnN0IFtsaXZlVXNhZ2UsIHNldExpdmVVc2FnZV0gPSBjcmVhdGVTaWduYWwoc3RhdGUubGl2ZVVzYWdlKVxuICBjb25zdCBbdHVyblBoYXNlLCBzZXRUdXJuUGhhc2VdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnR1cm5QaGFzZSlcbiAgY29uc3QgW2J1c3ksIHNldEJ1c3ldID0gY3JlYXRlU2lnbmFsKHN0YXRlLmJ1c3kpXG4gIGNvbnN0IFtjb21wYWN0aW5nLCBzZXRDb21wYWN0aW5nXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5jb21wYWN0aW5nKVxuICBjb25zdCBbY29tcGFjdFN0YXR1cywgc2V0Q29tcGFjdFN0YXR1c10gPSBjcmVhdGVTaWduYWwoc3RhdGUuY29tcGFjdFN0YXR1cylcbiAgY29uc3QgW3N0YXJ0ZWRBdCwgc2V0U3RhcnRlZEF0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zdGFydGVkQXQpXG4gIGNvbnN0IFtpbnB1dCwgc2V0SW5wdXRWYWx1ZV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IGNvbXBvc2VyRmlsZXMgPSBib290LnJlZnMuY29tcG9zZXJGaWxlcyA/Pz0gY3JlYXRlQ29tcG9zZXJGaWxlcygpXG4gIGNvbnN0IFtpbnB1dEN1cnNvciwgc2V0SW5wdXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtjb21tYW5kRm9ybSwgc2V0Q29tbWFuZEZvcm1dID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IHNldElucHV0ID0gKHRleHQsIGN1cnNvcikgPT4ge1xuICAgIGJvb3QucmVmcy5kcmFmdFJldmlzaW9uID0gKGJvb3QucmVmcy5kcmFmdFJldmlzaW9uID8/IDApICsgMVxuICAgIGNvbnN0IHZhbHVlID0gY29tcG9zZXJGaWxlcy51cGRhdGUodGV4dCwgc3RhdGUuYXR0YWNobWVudHMpXG4gICAgc2V0SW5wdXRWYWx1ZSh2YWx1ZSlcbiAgICBzZXRJbnB1dEN1cnNvcihjdXJzb3IgPz8gdmFsdWUubGVuZ3RoKVxuICB9XG4gIGNvbnN0IFtkaWN0YXRpb25TdGF0dXMsIHNldERpY3RhdGlvblN0YXR1c10gPSBjcmVhdGVTaWduYWwoJ2lkbGUnKVxuICBjb25zdCBbZGljdGF0aW9uTGV2ZWxzLCBzZXREaWN0YXRpb25MZXZlbHNdID0gY3JlYXRlU2lnbmFsKFtdKVxuICBjb25zdCBbY2FwdHVyZVN0YXR1cywgc2V0Q2FwdHVyZVN0YXR1c10gPSBjcmVhdGVTaWduYWwoJ2lkbGUnKVxuICBjb25zdCBbY29tcG9zZXJBY3Rpb25MYWJlbCwgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbF0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFttb2RlbCwgc2V0TW9kZWxdID0gY3JlYXRlU2lnbmFsKHN0YXRlLm1vZGVsKVxuICBjb25zdCBbZGVmYXVsdE1vZGVsLCBzZXREZWZhdWx0TW9kZWxdID0gY3JlYXRlU2lnbmFsKHN0YXRlLmRlZmF1bHRNb2RlbClcbiAgY29uc3QgW2VmZm9ydCwgc2V0RWZmb3J0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5lZmZvcnQpXG4gIGNvbnN0IFtkZWZhdWx0RWZmb3J0LCBzZXREZWZhdWx0RWZmb3J0XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5kZWZhdWx0RWZmb3J0KVxuICBjb25zdCBbc3BlZWQsIHNldFNwZWVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zcGVlZClcbiAgY29uc3QgW3NwZWVkRGVmYXVsdHMsIHNldFNwZWVkRGVmYXVsdHNdID0gY3JlYXRlU2lnbmFsKHsgLi4uc3RhdGUuc3BlZWREZWZhdWx0cyB9KVxuICBjb25zdCBbc2hvd1NwZWVkUGFuZWwsIHNldFNob3dTcGVlZFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dFZmZvcnRQYW5lbCwgc2V0U2hvd0VmZm9ydFBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dUaGVtZVBhbmVsLCBzZXRTaG93VGhlbWVQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93Q29uZmlnUGFuZWwsIHNldFNob3dDb25maWdQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93RGVsZXRlQ29uZmlybSwgc2V0U2hvd0RlbGV0ZUNvbmZpcm1dID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbY2xvdWRzLCBzZXRDbG91ZHNdID0gY3JlYXRlU2lnbmFsKGJvb3QuY2xvdWRzKVxuICBjb25zdCBbY29tcGFjdFRvb2xIaXN0b3J5LCBzZXRDb21wYWN0VG9vbEhpc3RvcnldID0gY3JlYXRlU2lnbmFsKGJvb3QuY29tcGFjdFRvb2xIaXN0b3J5KVxuICBjb25zdCBbZ2l0Rm9vdGVyLCBzZXRHaXRGb290ZXJdID0gY3JlYXRlU2lnbmFsKGJvb3QuZ2l0Rm9vdGVyKVxuICBjb25zdCBbd2lkZVNpZGViYXIsIHNldFdpZGVTaWRlYmFyXSA9IGNyZWF0ZVNpZ25hbChib290LndpZGVTaWRlYmFyKVxuICBjb25zdCBbcmVzZWFyY2hBZ2VudExpbWl0LCBzZXRSZXNlYXJjaEFnZW50TGltaXRdID0gY3JlYXRlU2lnbmFsKGJvb3QucmVzZWFyY2hBZ2VudExpbWl0KVxuICBjb25zdCBbcXVlc3Rpb25SZXF1ZXN0LCBzZXRRdWVzdGlvblJlcXVlc3RdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnF1ZXN0aW9uKVxuICBjb25zdCBbc2hvd01lbW9yeVBhbmVsLCBzZXRTaG93TWVtb3J5UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbbWVtU2NvcGUsIHNldE1lbVNjb3BlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbbWVtb3J5TGlzdCwgc2V0TWVtb3J5TGlzdF0gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFt0aGVtZVByZWYsIHNldFRoZW1lUHJlZl0gPSBjcmVhdGVTaWduYWwoYm9vdC50aGVtZVByZWYgfHwgJ2F1dG8nKVxuICBjb25zdCBbcXVldWVkLCBzZXRRdWV1ZWRdID0gY3JlYXRlU2lnbmFsKHN0YXRlLnF1ZXVlZClcbiAgY29uc3QgW2V4cGVkaXRlZCwgc2V0RXhwZWRpdGVkXSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5leHBlZGl0ZWQpXG4gIGNvbnN0IFtzZW50LCBzZXRTZW50XSA9IGNyZWF0ZVNpZ25hbChzdGF0ZS5zZW50KVxuICBjb25zdCBbaGlzdElkeCwgc2V0SGlzdElkeF0gPSBjcmVhdGVTaWduYWwoLTEpXG4gIGNvbnN0IFtjbWRJbmRleCwgc2V0Q21kSW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtjbWRDeWNsZSwgc2V0Q21kQ3ljbGVdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtmaWxlSW5kZXgsIHNldEZpbGVJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZpbGVMaXN0LCBzZXRGaWxlTGlzdF0gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtmaWxlc0Rpc21pc3NlZCwgc2V0RmlsZXNEaXNtaXNzZWRdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbdmlldywgc2V0Vmlld1NpZ25hbF0gPSBjcmVhdGVTaWduYWwoJ2NoYXQnKVxuICBjb25zdCBbdmVyYm9zZV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtzaG93TW9kZWxQYW5lbCwgc2V0U2hvd01vZGVsUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCwgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXNlYXJjaE1vZGVsUmV0dXJuLCBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwsIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGluZ1NoZWxsTW9kZWwsIHNldFNlbGVjdGluZ1NoZWxsTW9kZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbcGFydGljaXBhbnRNb2RlbFRhcmdldCwgc2V0UGFydGljaXBhbnRNb2RlbFRhcmdldF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3BlbmRpbmdSZXNlYXJjaCwgc2V0UGVuZGluZ1Jlc2VhcmNoXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBjb25zdCBbcGVuZGluZ0RlbGliZXJhdGlvbiwgc2V0UGVuZGluZ0RlbGliZXJhdGlvbl0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW2FnZW50c1ZlcnNpb24sIHNldEFnZW50c1ZlcnNpb25dID0gY3JlYXRlU2lnbmFsKHN0YXRlLmFjdGl2aXR5VmVyc2lvbilcbiAgY29uc3QgW3ZpZXdlZEFnZW50SWQsIHNldFZpZXdlZEFnZW50SWRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFthZ2VudFdpbmRvd09mZnNldCwgc2V0QWdlbnRXaW5kb3dPZmZzZXRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtzaG93SGlzdG9yeVBhbmVsLCBzZXRTaG93SGlzdG9yeVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW2hpc3RTY29wZSwgc2V0SGlzdFNjb3BlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbaGlzdFByb21wdHMsIHNldEhpc3RQcm9tcHRzXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3Nob3dSZXN1bWVQYW5lbCwgc2V0U2hvd1Jlc3VtZVBhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Jlc3VtZVNjb3Blcywgc2V0UmVzdW1lU2NvcGVzXSA9IGNyZWF0ZVNpZ25hbChbJ3JlcG9zaXRvcnknLCAnZXZlcnl3aGVyZSddKVxuICBjb25zdCBbcmVzdW1lU2NvcGUsIHNldFJlc3VtZVNjb3BlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbcmVzdW1lU2Vzc2lvbnMsIHNldFJlc3VtZVNlc3Npb25zXSA9IGNyZWF0ZVNpZ25hbChbXSlcbiAgY29uc3QgW3Jlc3VtZUxvYWRpbmcsIHNldFJlc3VtZUxvYWRpbmddID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd01jcFBhbmVsLCBzZXRTaG93TWNwUGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbc2hvd1Byb2plY3RQYW5lbCwgc2V0U2hvd1Byb2plY3RQYW5lbF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtpbmZvUGFuZWwsIHNldEluZm9QYW5lbF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3ZpZXdlZFNoZWxsSWQsIHNldFZpZXdlZFNoZWxsSWRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtzaGVsbFdpbmRvd09mZnNldCwgc2V0U2hlbGxXaW5kb3dPZmZzZXRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtzaG93V2FrZXVwc1BhbmVsLCBzZXRTaG93V2FrZXVwc1BhbmVsXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Nob3dDb25uZWN0UGFuZWwsIHNldFNob3dDb25uZWN0UGFuZWxdID0gY3JlYXRlU2lnbmFsKGZhbHNlKVxuICBjb25zdCBbYXV0aFByb3ZpZGVycywgc2V0QXV0aFByb3ZpZGVyc10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtzaGVsbHNWZXJzaW9uLCBzZXRTaGVsbHNWZXJzaW9uXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZ2l0VmVyc2lvbiwgc2V0R2l0VmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Byb2plY3RzLCBzZXRQcm9qZWN0c10gPSBjcmVhdGVTaWduYWwoW10pXG4gIGNvbnN0IFtwcm9qZWN0c0xvYWRpbmcsIHNldFByb2plY3RzTG9hZGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFttY3BTZXJ2ZXJzLCBzZXRNY3BTZXJ2ZXJzXSA9IGNyZWF0ZVNpZ25hbChtY3AubGlzdCgpKVxuICBjb25zdCBbY29tcGxldGluZywgc2V0Q29tcGxldGluZ10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtjb21wSW5kZXgsIHNldENvbXBJbmRleF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3Jld2luZFN0ZXAsIHNldFJld2luZFN0ZXBdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IFtyZXdpbmRUYXJnZXQsIHNldFJld2luZFRhcmdldF0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW29mZnNldCwgc2V0T2Zmc2V0XSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbZm9sbG93LCBzZXRGb2xsb3ddID0gY3JlYXRlU2lnbmFsKHRydWUpXG4gIGNvbnN0IFtoaXN0V2luZG93LCBzZXRIaXN0V2luZG93XSA9IGNyZWF0ZVNpZ25hbChISVNUT1JZX1dJTkRPVylcbiAgY29uc3QgW3RyYW5zY3JpcHRNZXRyaWNzLCBzZXRUcmFuc2NyaXB0TWV0cmljc10gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3N0ZWVyLCBzZXRTdGVlcl0gPSBjcmVhdGVTaWduYWwobnVsbClcbiAgY29uc3QgW3N0ZWVyVGV4dCwgc2V0U3RlZXJUZXh0XSA9IGNyZWF0ZVNpZ25hbCgnJylcblxuICBjb25zdCByZWZzID0gYm9vdC5yZWZzXG4gIHJlZnMucXVpdEF0ID8/PSAwXG4gIHJlZnMucmVzdW1lT3BlbiA/Pz0gMFxuXG4gIGZ1bmN0aW9uIHNldFZpZXcobmV4dCkge1xuICAgIHNldFZpZXdTaWduYWwobmV4dClcbiAgICBjdGwuaG9sZChuZXh0ICE9PSAnY2hhdCcpXG4gIH1cblxuICAvLyB0aGUgY29udHJvbGxlciBvd25zIGV2ZXJ5IHBpZWNlIG9mIGNvbnZlcnNhdGlvbiBzdGF0ZTsgdGhlc2Ugc2lnbmFsc1xuICAvLyBtaXJyb3IgaXQgc28gdGhlIHJlbmRlciB0cmVlIGJlbG93IHN0YXlzIHJlYWN0aXZlIHdpdGhvdXQga25vd2luZyB0aGF0XG4gIGNvbnN0IG1pcnJvciA9IChnZXQsIHNldCwgdmFsdWUpID0+IHtcbiAgICBpZiAoZ2V0KCkgIT09IHZhbHVlKSBzZXQodmFsdWUpXG4gIH1cbiAgY29uc3QgW3BlZXJTdGF0dXMsIHNldFBlZXJTdGF0dXNdID0gY3JlYXRlU2lnbmFsKCcnKVxuXG4gIGZ1bmN0aW9uIHN5bmNGcm9tQ29udHJvbGxlcigpIHtcbiAgICBzZXRQZWVyU3RhdHVzKHN0YXRlLnBlZXJFcnJvciA/IGBwZWVyIGRpc2Nvbm5lY3RlZDogJHtzdGF0ZS5wZWVyRXJyb3J9YCA6IHN0YXRlLnBlZXJQYXVzZWQgJiYgc3RhdGUucGVlckNvbm5lY3Rpb24gPyAncGVlciByZXNwb25zZXMgcGF1c2VkJyA6ICcnKVxuICAgIG1pcnJvcihkZXJpdmVkLCBzZXREZXJpdmVkLCBzdGF0ZS5kZXJpdmVkKVxuICAgIG1pcnJvcihvdmVybGF5LCBzZXRPdmVybGF5LCBzdGF0ZS5vdmVybGF5KVxuICAgIG1pcnJvcihzdHJlYW1pbmcsIHNldFN0cmVhbWluZywgc3RhdGUuc3RyZWFtaW5nKVxuICAgIG1pcnJvcihsaXZlVXNhZ2UsIHNldExpdmVVc2FnZSwgc3RhdGUubGl2ZVVzYWdlKVxuICAgIG1pcnJvcih0dXJuUGhhc2UsIHNldFR1cm5QaGFzZSwgc3RhdGUudHVyblBoYXNlKVxuICAgIG1pcnJvcihidXN5LCBzZXRCdXN5LCBzdGF0ZS5idXN5KVxuICAgIG1pcnJvcihjb21wYWN0aW5nLCBzZXRDb21wYWN0aW5nLCBzdGF0ZS5jb21wYWN0aW5nKVxuICAgIG1pcnJvcihjb21wYWN0U3RhdHVzLCBzZXRDb21wYWN0U3RhdHVzLCBzdGF0ZS5jb21wYWN0U3RhdHVzKVxuICAgIG1pcnJvcihzdGFydGVkQXQsIHNldFN0YXJ0ZWRBdCwgc3RhdGUuc3RhcnRlZEF0KVxuICAgIG1pcnJvcihtb2RlbCwgc2V0TW9kZWwsIHN0YXRlLm1vZGVsKVxuICAgIG1pcnJvcihkZWZhdWx0TW9kZWwsIHNldERlZmF1bHRNb2RlbCwgc3RhdGUuZGVmYXVsdE1vZGVsKVxuICAgIG1pcnJvcihzcGVlZCwgc2V0U3BlZWQsIHN0YXRlLnNwZWVkKVxuICAgIGlmIChKU09OLnN0cmluZ2lmeShzcGVlZERlZmF1bHRzKCkpICE9PSBKU09OLnN0cmluZ2lmeShzdGF0ZS5zcGVlZERlZmF1bHRzKSkgc2V0U3BlZWREZWZhdWx0cyh7IC4uLnN0YXRlLnNwZWVkRGVmYXVsdHMgfSlcbiAgICBtaXJyb3IoZWZmb3J0LCBzZXRFZmZvcnQsIHN0YXRlLmVmZm9ydClcbiAgICBtaXJyb3IoZGVmYXVsdEVmZm9ydCwgc2V0RGVmYXVsdEVmZm9ydCwgc3RhdGUuZGVmYXVsdEVmZm9ydClcbiAgICBtaXJyb3IocXVlc3Rpb25SZXF1ZXN0LCBzZXRRdWVzdGlvblJlcXVlc3QsIHN0YXRlLnF1ZXN0aW9uKVxuICAgIG1pcnJvcihxdWV1ZWQsIHNldFF1ZXVlZCwgc3RhdGUucXVldWVkKVxuICAgIG1pcnJvcihleHBlZGl0ZWQsIHNldEV4cGVkaXRlZCwgc3RhdGUuZXhwZWRpdGVkKVxuICAgIG1pcnJvcihzZW50LCBzZXRTZW50LCBzdGF0ZS5zZW50KVxuICAgIG1pcnJvcihhZ2VudHNWZXJzaW9uLCBzZXRBZ2VudHNWZXJzaW9uLCBzdGF0ZS5hY3Rpdml0eVZlcnNpb24pXG4gIH1cblxuICAvLyB0cmVuZCByZS1ydW5zIHRoaXMgY29tcG9uZW50IG9uIGV2ZXJ5IHNpZ25hbCBjaGFuZ2UsIHNvIHRoZSBjb250cm9sbGVyXG4gIC8vIGlzIHN1YnNjcmliZWQgb25jZSBhbmQgZWFjaCBoYW5kbGVyIHJlYWNoZXMgdGhlIG5ld2VzdCByZW5kZXIgdGhyb3VnaFxuICAvLyByZWZzLnVpLCB3aGljaCBpcyByZXBsYWNlZCBiZWxvdyBvbiBldmVyeSBwYXNzXG4gIHJlZnMudWkgPSB7XG4gICAgc3luYzogc3luY0Zyb21Db250cm9sbGVyLFxuICAgIGZsYXNoOiAobWVzc2FnZSkgPT4gZmxhc2gobWVzc2FnZSksXG4gICAgZGVyaXZlZDogKG5leHQpID0+IHtcbiAgICAgIHNldEFjY2VudChuZXh0LmNvbG9yKVxuICAgICAgYm9vdC5zZXRUaGVtZT8uKHsgYWNjZW50OiBuZXh0LmNvbG9yIHx8IERFRkFVTFRfQUNDRU5ULCBtdXRlZDogTVVURUQgfSlcbiAgICB9LFxuICAgIHF1ZXN0aW9uOiAoKSA9PiB7XG4gICAgICByZWZzLmRpY3RhdGlvbklucHV0Py5jYW5jZWwoKVxuICAgICAgZm0uZm9jdXMoJ3F1ZXN0aW9uJylcbiAgICB9LFxuICAgIHR1cm46ICgpID0+IHtcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICB9LFxuICAgIGlucHV0OiAodGV4dCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHNldElucHV0KHRleHQpXG4gICAgfSxcbiAgICBzZXNzaW9uOiAoKSA9PiB7XG4gICAgICBzZXRDb21tYW5kRm9ybShudWxsKVxuICAgICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbFxuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQobnVsbClcbiAgICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGZtLmZvY3VzKCdpbnB1dCcpXG4gICAgfSxcbiAgICByZXN1bWVkOiAobWV0YSkgPT4gZmxhc2goYHJlc3VtZWQgICR7bWV0YS50dXJuc30gJHttZXRhLnR1cm5zID09PSAxID8gJ3R1cm4nIDogJ3R1cm5zJ30gICR7dGltZUFnbyhtZXRhLmF0KX1gKSxcbiAgICBwcm9qZWN0OiAobmV4dCkgPT4ge1xuICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dD8uY2FuY2VsKClcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXHgxYl0wO3BpY28gICR7bmV4dC5yb290LnNwbGl0KCcvJykucG9wKCl9XFx4MDdgKVxuICAgICAgc2V0TWNwU2VydmVycyhuZXh0Lm1jcC5saXN0KCkpXG4gICAgICBzZXRGaWxlTGlzdChbXSlcbiAgICB9LFxuICAgIG1jcDogKHNlcnZlcnMpID0+IHNldE1jcFNlcnZlcnMoc2VydmVycyksXG4gICAgc2hlbGxzOiAoKSA9PiBzZXRTaGVsbHNWZXJzaW9uKCh2KSA9PiB2ICsgMSksXG4gICAgZ2l0OiAoKSA9PiBzZXRHaXRWZXJzaW9uKCh2KSA9PiB2ICsgMSksXG4gIH1cbiAgaWYgKCFyZWZzLnN1YnNjcmliZWQpIHtcbiAgICByZWZzLnN1YnNjcmliZWQgPSB0cnVlXG4gICAgY3RsLm9uKCdjaGFuZ2UnLCAoKSA9PiByZWZzLnVpLnN5bmMoKSlcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgWydmbGFzaCcsICdkZXJpdmVkJywgJ3F1ZXN0aW9uJywgJ3R1cm4nLCAnaW5wdXQnLCAnc2Vzc2lvbicsICdyZXN1bWVkJywgJ3Byb2plY3QnLCAnbWNwJywgJ3NoZWxscycsICdnaXQnXSkge1xuICAgICAgY3RsLm9uKHR5cGUsIChwYXlsb2FkKSA9PiByZWZzLnVpW3R5cGVdKHBheWxvYWQpKVxuICAgIH1cbiAgfVxuICBzeW5jRnJvbUNvbnRyb2xsZXIoKVxuXG4gIGNvbnN0IHNraWxsQ29tbWFuZHMgPSBza2lsbHMubGlzdCgpLm1hcCgocykgPT4gKHsgbmFtZTogcy5uYW1lLCBkZXNjOiBgc2tpbGwgICR7cy5kZXNjcmlwdGlvbiB8fCBzLnNvdXJjZX1gLCBza2lsbDogdHJ1ZSB9KSlcbiAgY29uc3QgdXNlckNvbW1hbmRzID0gYm9vdC5jb21tYW5kcy5saXN0KCkubWFwKChjKSA9PiAoeyBuYW1lOiBjLm5hbWUsIGRlc2M6IGBjb21tYW5kICAke2MuZGVzY3JpcHRpb24gfHwgYy5zb3VyY2V9YCwgY29tbWFuZDogdHJ1ZSB9KSlcbiAgY29uc3QgYnlOYW1lID0gbmV3IE1hcCgpXG4gIGNvbnN0IHNoYWRvd2VkID0gW11cbiAgZm9yIChjb25zdCBjIG9mIFsuLi5DT01NQU5EUywgLi4uc2tpbGxDb21tYW5kcywgLi4udXNlckNvbW1hbmRzXSkge1xuICAgIGlmIChieU5hbWUuaGFzKGMubmFtZSkpIHNoYWRvd2VkLnB1c2goYCR7Yy5za2lsbCA/ICdza2lsbCcgOiAnY29tbWFuZCd9IFwiJHtjLm5hbWV9XCJgKVxuICAgIGVsc2UgYnlOYW1lLnNldChjLm5hbWUsIGMpXG4gIH1cbiAgY29uc3QgYWxsQ29tbWFuZHMgPSBbLi4uYnlOYW1lLnZhbHVlcygpXVxuICBpZiAoc2hhZG93ZWQubGVuZ3RoICYmICFyZWZzLndhcm5lZFNoYWRvd2VkKSB7XG4gICAgcmVmcy53YXJuZWRTaGFkb3dlZCA9IHRydWVcbiAgICBzZXRUaW1lb3V0KCgpID0+IGZsYXNoKGBzaGFkb3dlZCBieSBhbiBlYXJsaWVyIG5hbWUsIHJlbmFtZSB0byB1c2U6ICR7c2hhZG93ZWQuam9pbignLCAnKX1gKSwgMClcbiAgfVxuXG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3Qoe1xuICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgIHBvc2l0aW9uOiAndG9wLXJpZ2h0JyxcbiAgICByZW5kZXI6IChtZXNzYWdlKSA9PiA8dGV4dCBzdHlsZT17eyBiZzogYWNjZW50KCksIGNvbG9yOiAnYmxhY2snLCBib2xkOiB0cnVlIH19PntgICR7bWVzc2FnZX0gYH08L3RleHQ+LFxuICB9KVxuXG4gIGNvbnN0IHVwZGF0ZVRvYXN0ID0gdXNlVG9hc3Qoe1xuICAgIGR1cmF0aW9uOiA4MDAwLFxuICAgIHBvc2l0aW9uOiAndG9wLWNlbnRlcicsXG4gICAgcmVuZGVyOiAobWVzc2FnZSkgPT4gKFxuICAgICAgPGJveCBzdHlsZT17eyBiZzogYWNjZW50KCkgfX0+XG4gICAgICAgIDxTaGltbWVyIGNvbG9yPVwiYmxhY2tcIiBoaWdobGlnaHQ9e0hJR0hMSUdIVH0gZHVyYXRpb249ezE1MDB9PntgICR7bWVzc2FnZX0gYH08L1NoaW1tZXI+XG4gICAgICA8L2JveD5cbiAgICApLFxuICB9KVxuXG4gIGZ1bmN0aW9uIGZsYXNoKG1zZykge1xuICAgIHRvYXN0KG1zZylcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hNb2RlbHMoKSB7XG4gICAgaWYgKHJlZnJlc2hpbmdNb2RlbHMoKSkgcmV0dXJuXG4gICAgc2V0UmVmcmVzaGluZ01vZGVscyh0cnVlKVxuICAgIGZsYXNoKCdyZWZyZXNoaW5nIG1vZGVscycpXG4gICAgY29uc3Qgc3RhcnRlZCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IGJvb3QucmVmcmVzaE1vZGVscygpXG4gICAgICBib290Lm1vZGVscyA9IHJlZnJlc2hlZFxuICAgICAgc2V0TW9kZWxzKHJlZnJlc2hlZClcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZClcbiAgICAgIGZsYXNoKGBtb2RlbHMgcmVmcmVzaGVkICAke3JlZnJlc2hlZC5sZW5ndGh9IG1vZGVscyAgJHtlbGFwc2VkfW1zYClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBtb2RlbCByZWZyZXNoIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCAxMjApfWApXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFJlZnJlc2hpbmdNb2RlbHMoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgcmVmcy5wYXN0ZUltYWdlID8/PSBjcmVhdGVDbGlwYm9hcmRJbnB1dCh7XG4gICAgcmVhZEltYWdlOiByZWFkQ2xpcGJvYXJkSW1hZ2UsXG4gICAgZ2V0RHJhZnQ6ICgpID0+ICh7IHZhbHVlOiBpbnB1dCgpLCBjdXJzb3I6IGlucHV0Q3Vyc29yKCksIHNlc3Npb246IHN0YXRlLnNlc3Npb24sIHJldmlzaW9uOiByZWZzLmRyYWZ0UmV2aXNpb24gfSksXG4gICAgYXR0YWNoSW1hZ2U6IGN0bC5hdHRhY2hJbWFnZSxcbiAgICBzZXRJbnB1dCxcbiAgICBvbkVycm9yOiAobWVzc2FnZSkgPT4gcmVmcy51aS5mbGFzaChtZXNzYWdlKSxcbiAgfSlcbiAgcmVmcy5jYXB0dXJlSW1hZ2UgPz89IGNyZWF0ZVNjcmVlbkNhcHR1cmVJbnB1dCh7XG4gICAgY2FwdHVyZVJlZ2lvbixcbiAgICBnZXREcmFmdDogKCkgPT4gKHsgdmFsdWU6IGlucHV0KCksIGN1cnNvcjogaW5wdXRDdXJzb3IoKSwgc2Vzc2lvbjogc3RhdGUuc2Vzc2lvbiwgcmV2aXNpb246IHJlZnMuZHJhZnRSZXZpc2lvbiB9KSxcbiAgICBhdHRhY2hJbWFnZTogY3RsLmF0dGFjaEltYWdlLFxuICAgIHNldElucHV0LFxuICAgIG9uRXJyb3I6IChtZXNzYWdlKSA9PiByZWZzLnVpLmZsYXNoKG1lc3NhZ2UpLFxuICAgIG9uU3RhdHVzOiBzZXRDYXB0dXJlU3RhdHVzLFxuICB9KVxuXG4gIGlmICghcmVmcy5kaWN0YXRpb24pIHtcbiAgICByZWZzLmRpY3RhdGlvbiA9IGNyZWF0ZURpY3RhdGlvbih7XG4gICAgICBvblN0YXR1czogKHN0YXR1cykgPT4ge1xuICAgICAgICBzZXREaWN0YXRpb25TdGF0dXMoc3RhdHVzKVxuICAgICAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgc2V0RGljdGF0aW9uTGV2ZWxzKFtdKVxuICAgICAgfSxcbiAgICAgIG9uTGV2ZWw6IChsZXZlbCkgPT4gc2V0RGljdGF0aW9uTGV2ZWxzKGFwcGVuZExldmVsKGRpY3RhdGlvbkxldmVscygpLCBsZXZlbCkpLFxuICAgICAgb25FcnJvcjogKG1lc3NhZ2UpID0+IHJlZnMudWkuZmxhc2goYGRpY3RhdGlvbiBmYWlsZWQ6ICR7bWVzc2FnZX1gKSxcbiAgICB9KVxuICAgIHJlZnMuZGljdGF0aW9uSW5wdXQgPSBjcmVhdGVEaWN0YXRpb25JbnB1dCh7IGRpY3RhdGlvbjogcmVmcy5kaWN0YXRpb24sIGdldElucHV0OiBpbnB1dCwgc2V0SW5wdXQgfSlcbiAgICBjb25zdCBwcmVsb2FkID0gc2V0SW1tZWRpYXRlKCgpID0+IHJlZnMuZGljdGF0aW9uLnByZWxvYWQoKSlcbiAgICBwcmVsb2FkLnVucmVmKClcbiAgICBwcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gICAgICBjbGVhckltbWVkaWF0ZShwcmVsb2FkKVxuICAgICAgcmVmcy5kaWN0YXRpb24uZGlzcG9zZSgpXG4gICAgfSlcbiAgICBmb3IgKGNvbnN0IFtzaWduYWwsIGNvZGVdIG9mIFtbJ1NJR1RFUk0nLCAxNDNdLCBbJ1NJR0hVUCcsIDEyOV1dKSB7XG4gICAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgIHJlZnMuZGljdGF0aW9uLmRpc3Bvc2UoKVxuICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKCFyZWZzLnVwZGF0ZUNoZWNrZWQpIHtcbiAgICByZWZzLnVwZGF0ZUNoZWNrZWQgPSB0cnVlXG4gICAgY2hlY2tGb3JVcGRhdGUodmVyc2lvbikudGhlbigoZm91bmQpID0+IHtcbiAgICAgIGlmICghZm91bmQpIHJldHVyblxuICAgICAgdXBkYXRlVG9hc3QoYHBpY28gdiR7Zm91bmQudmVyc2lvbn0gYXZhaWxhYmxlICAvdXBkYXRlYClcbiAgICAgIGZvdW5kLm1hcmtOb3RpZmllZCgpXG4gICAgfSkuY2F0Y2goKCkgPT4ge30pXG4gIH1cblxuICBjb25zdCBwZXJmb3JtQ29tcGFjdGlvbiA9IGN0bC5jb21wYWN0XG5cbiAgZnVuY3Rpb24gY29tcGxldGlvblNvdXJjZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgPT09ICdzcGVlZCcpIHJldHVybiBTUEVFRF9MRVZFTFMubWFwKChsKSA9PiBsLmtleSlcbiAgICBpZiAobmFtZSA9PT0gJ2NvbG9yJykgcmV0dXJuIE9iamVjdC5rZXlzKFNFU1NJT05fQ09MT1JTKVxuICAgIGlmIChuYW1lID09PSAndGhlbWUnKSByZXR1cm4gWy4uLnBhbGV0dGVMaXN0KCkubWFwKChwKSA9PiBwLmtleSksICdhdXRvJ11cbiAgICBpZiAobmFtZSA9PT0gJ2VmZm9ydCcpIHJldHVybiBbJ2RlZmF1bHQnLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddXG4gICAgaWYgKG5hbWUgPT09ICdtb2RlbCcpIHJldHVybiBtb2RlbHMoKS5maWx0ZXIoKG0pID0+IG0uYXZhaWxhYmxlICE9PSBmYWxzZSkubWFwKChtKSA9PiBtLm5hbWUpXG4gICAgY29uc3QgY21kID0gYWxsQ29tbWFuZHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBuYW1lKVxuICAgIGlmIChjbWQ/LnNraWxsIHx8IGNtZD8uY29tbWFuZCkgcmV0dXJuIGZpbGVMaXN0KClcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gZGlzbWlzc0NvbXBsZXRpb24oKSB7XG4gICAgc2V0Q29tcGxldGluZyhmYWxzZSlcbiAgICBzZXRDb21wSW5kZXgoMClcbiAgfVxuXG4gIGZ1bmN0aW9uIGFjY2VwdENvbXBsZXRpb24odmFsdWUsIGN0eCwgY2FuZGlkYXRlKSB7XG4gICAgc2V0SW5wdXQoYXBwbHlDb21wbGV0aW9uKHZhbHVlLCBjdHgsIGNhbmRpZGF0ZSkpXG4gICAgZGlzbWlzc0NvbXBsZXRpb24oKVxuICB9XG5cbiAgZnVuY3Rpb24gc2VuZCh0ZXh0KSB7XG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSB8fCB2aWV3ZWRTaGVsbElkKCkpIHJldHVyblxuICAgIGNvbnN0IHZhbHVlID0gdGV4dC50cmltKClcbiAgICBpZiAoIXZhbHVlKSByZXR1cm5cbiAgICBkaXNtaXNzQ29tcGxldGlvbigpXG4gICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgY29uc3QgW25hbWUsIC4uLnJlc3RdID0gdmFsdWUuc2xpY2UoMSkuc3BsaXQoL1xccysvKVxuICAgICAgY29uc3QgbWF0Y2ggPSBhbGxDb21tYW5kcy5maW5kKChjKSA9PiBjLm5hbWUgPT09IG5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2guY29tbWFuZCkgcmV0dXJuIGluc2VydENvbW1hbmQobWF0Y2gsIHsgc3RhcnQ6IHRleHQuaW5kZXhPZignLycpLCBlbmQ6IHRleHQubGVuZ3RoIH0sIHJlc3Quam9pbignICcpKVxuICAgICAgICBzZXRJbnB1dCgnJylcbiAgICAgICAgcnVuQ29tbWFuZChtYXRjaCwgcmVzdC5qb2luKCcgJykpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBzZXRIaXN0SWR4KC0xKVxuICAgIGNvbXBvc2VyRmlsZXMudXBkYXRlKHRleHQsIHN0YXRlLmF0dGFjaG1lbnRzKVxuICAgIGN0bC5zZW5kKGNvbXBvc2VyRmlsZXMuY29udGVudCgpLnRyaW0oKSlcbiAgICBzZXRJbnB1dCgnJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGludGVycnVwdCgpIHtcbiAgICBpZiAoIWJ1c3koKSkgcmV0dXJuXG4gICAgaWYgKHN0YXRlLnF1ZXN0aW9uKSByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgIGN0bC5pbnRlcnJ1cHQoKVxuICB9XG5cbiAgY29uc3QgZm10VG9rZW5zID0gKG4pID0+IChuID49IDEwMDAgPyBgJHsobiAvIDEwMDApLnRvRml4ZWQoMSl9a2AgOiBTdHJpbmcobikpXG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVmcmVzaE1lbW9yaWVzKCkge1xuICAgIHNldE1lbW9yeUxpc3QoYXdhaXQgYm9vdC5tZW1vcnkubGlzdCgpLmNhdGNoKCgpID0+IFtdKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHRvZ2dsZU1lbW9yeURpc2FibGVkKG0pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYm9vdC5tZW1vcnkuc2V0RGlzYWJsZWQobSwgIW0uZGlzYWJsZWQpXG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgZmxhc2goYCR7bS5kaXNhYmxlZCA/ICdlbmFibGVkJyA6ICdzdXBwcmVzc2VkJ30gJHttLm5hbWV9ICgke20uc2NvcGV9KWApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgbWVtb3J5IHVwZGF0ZSBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTAwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGZvcmdldE1lbW9yeShtKSB7XG4gICAgY29uc3QgYXJtZWQgPSByZWZzLmZvcmdldEFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQuZmlsZSAhPT0gbS5maWxlIHx8IERhdGUubm93KCkgLSBhcm1lZC5hdCA+IDMwMDApIHtcbiAgICAgIHJlZnMuZm9yZ2V0QXJtID0geyBmaWxlOiBtLmZpbGUsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGZvcmdldCBcIiR7bS5uYW1lfVwiYClcbiAgICB9XG4gICAgcmVmcy5mb3JnZXRBcm0gPSBudWxsXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJvb3QubWVtb3J5LmZvcmdldChtKVxuICAgICAgYXdhaXQgcmVmcmVzaE1lbW9yaWVzKClcbiAgICAgIGZsYXNoKGBmb3Jnb3QgJHttLm5hbWV9ICgke20uc2NvcGV9KWApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZm9yZ2V0IGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBvcGVuQ29udGV4dFBhbmVsKCkge1xuICAgIGNvbnN0IHRvayA9IChuKSA9PiBgfiR7Zm10VG9rZW5zKG4pfSB0b2tgXG4gICAgY29uc3QgYnJlYWtkb3duID0gYXdhaXQgY3RsLmNvbnRleHRCcmVha2Rvd24oKVxuICAgIGNvbnN0IHJvd3MgPSBicmVha2Rvd24ucm93cy5tYXAoKHJvdykgPT4gKHsgbmFtZTogcm93Lm5hbWUsIGRlc2M6IHJvdy5kZXNjLCBub3RlOiB0b2socm93LnRva2VucykgfSkpXG4gICAgaWYgKGJyZWFrZG93bi5tZWFzdXJlZCkge1xuICAgICAgcm93cy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2xhc3QgbWVhc3VyZWQgcmVxdWVzdCcsXG4gICAgICAgIGRlc2M6ICdwcm92aWRlci1yZXBvcnRlZCBpbnB1dCB0b2tlbnMsIHRoZSBudW1iZXIgYmVoaW5kIGN0eCAlJyxcbiAgICAgICAgbm90ZTogYCR7YnJlYWtkb3duLm1lYXN1cmVkLnRvTG9jYWxlU3RyaW5nKCl9IHRva2AsXG4gICAgICB9KVxuICAgIH1cbiAgICBzZXRJbmZvUGFuZWwoe1xuICAgICAgdGl0bGU6IGBDb250ZXh0ICAke2JyZWFrZG93bi5tb2RlbH1gLFxuICAgICAgcm93cyxcbiAgICAgIG92ZXJ2aWV3OiBicmVha2Rvd24uc2VnbWVudHMubGVuZ3RoID8geyBzZWdtZW50czogYnJlYWtkb3duLnNlZ21lbnRzLCBtZWFzdXJlZDogYnJlYWtkb3duLm1lYXN1cmVkLCBsaW1pdDogYnJlYWtkb3duLmxpbWl0ID8/IG1vZGVsKCkuY29udGV4dCB9IDogbnVsbCxcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgdGhlbWVJdGVtcyA9ICgpID0+IFtcbiAgICAuLi5wYWxldHRlTGlzdCgpLFxuICAgIHsga2V5OiAnYXV0bycsIGRlc2M6IGBmb2xsb3cgdGhlIHRlcm1pbmFsIChkZXRlY3RlZDogJHtib290LmRldGVjdGVkVGhlbWUgfHwgJ2RhcmsnfSlgIH0sXG4gIF1cblxuICBmdW5jdGlvbiBwYWxldHRlRm9yKHByZWYpIHtcbiAgICByZXR1cm4gcHJlZiA9PT0gJ2F1dG8nID8gYm9vdC5kZXRlY3RlZFRoZW1lIHx8ICdkYXJrJyA6IHByZWZcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXZpZXdQYWxldHRlKHByZWYpIHtcbiAgICBzZXRQYWxldHRlKHBhbGV0dGVGb3IocHJlZikpXG4gICAgYm9vdC5zZXRUaGVtZT8uKHsgYWNjZW50OiBhY2NlbnQoKSwgbXV0ZWQ6IE1VVEVEIH0pXG4gIH1cblxuICBmdW5jdGlvbiBhcHBseVRoZW1lUHJlZihwcmVmKSB7XG4gICAgc2V0VGhlbWVQcmVmKHByZWYpXG4gICAgcHJldmlld1BhbGV0dGUocHJlZilcbiAgICB3cml0ZUNvbmZpZyh7IHRoZW1lOiBwcmVmID09PSAnYXV0bycgPyB1bmRlZmluZWQgOiBwcmVmIH0pLmNhdGNoKCgpID0+IHt9KVxuICAgIGZsYXNoKHByZWYgPT09ICdhdXRvJyA/IGB0aGVtZTogYXV0byAgZm9sbG93aW5nIHRoZSB0ZXJtaW5hbCAoJHtwYWxldHRlRm9yKCdhdXRvJyl9KWAgOiBgdGhlbWU6ICR7cHJlZn1gKVxuICB9XG5cbiAgY29uc3QgW3N0ZWVyRGVyaXZlZCwgc2V0U3RlZXJEZXJpdmVkXSA9IGNyZWF0ZVNpZ25hbChudWxsKVxuICBsZXQgc3RlZXJQcmV2aWV3UmVxdWVzdCA9IDBcbiAgZnVuY3Rpb24gc3RlZXJQcmV2aWV3KCkge1xuICAgIGNvbnN0IGNoYW5nZXMgPSBzdGVlcigpPy5jaGFuZ2VzXG4gICAgaWYgKCFjaGFuZ2VzPy5sZW5ndGgpIHJldHVybiBkZXJpdmVkKClcbiAgICBpZiAocmVmcy5zdGVlclByZXZpZXdDaGFuZ2VzICE9PSBjaGFuZ2VzKSB7XG4gICAgICByZWZzLnN0ZWVyUHJldmlld0NoYW5nZXMgPSBjaGFuZ2VzXG4gICAgICBjb25zdCByZXF1ZXN0ID0gKytzdGVlclByZXZpZXdSZXF1ZXN0XG4gICAgICBQcm9taXNlLnJlc29sdmUoY3RsLnByZXZpZXdTdGVlcihjaGFuZ2VzKSkudGhlbihuZXh0ID0+IHtcbiAgICAgICAgaWYgKHJlcXVlc3QgPT09IHN0ZWVyUHJldmlld1JlcXVlc3QpIHNldFN0ZWVyRGVyaXZlZChuZXh0KVxuICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gICAgfVxuICAgIHJldHVybiBzdGVlckRlcml2ZWQoKSB8fCBkZXJpdmVkKClcbiAgfVxuICBhc3luYyBmdW5jdGlvbiBsb2FkRnVsbEhpc3RvcnkoKSB7XG4gICAgaWYgKGN0bC5sb2FkSGlzdG9yeSAmJiAoc3RhdGUuZGVyaXZlZC50cmFuc2NyaXB0T2Zmc2V0IHx8IDApID4gMCkgYXdhaXQgY3RsLmxvYWRIaXN0b3J5KEluZmluaXR5KVxuICB9XG4gIGFzeW5jIGZ1bmN0aW9uIGxvYWRPbGRlckhpc3RvcnkoKSB7XG4gICAgaWYgKCFjdGwubG9hZEhpc3RvcnkgfHwgcmVmcy5oaXN0b3J5TG9hZGluZyB8fCAhKHN0YXRlLmRlcml2ZWQudHJhbnNjcmlwdE9mZnNldCA+IDApKSByZXR1cm5cbiAgICByZWZzLmhpc3RvcnlMb2FkaW5nID0gdHJ1ZVxuICAgIHRyeSB7IGF3YWl0IGN0bC5sb2FkSGlzdG9yeShzdGF0ZS5kZXJpdmVkLnRyYW5zY3JpcHQubGVuZ3RoICsgSElTVE9SWV9XSU5ET1cpIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZmxhc2goZXJyb3IubWVzc2FnZSkgfVxuICAgIGZpbmFsbHkgeyByZWZzLmhpc3RvcnlMb2FkaW5nID0gZmFsc2UgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RlZXJSb3dzKCkge1xuICAgIHJldHVybiBzdGVlcmFibGVUcmFuc2NyaXB0KHN0ZWVyUHJldmlldygpLnRyYW5zY3JpcHQpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBiZWdpblN0ZWVyKCkge1xuICAgIGlmIChidXN5KCkgfHwgY29tcGFjdGluZygpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgYXdhaXQgbG9hZEZ1bGxIaXN0b3J5KClcbiAgICBzZXRTdGVlckRlcml2ZWQobnVsbClcbiAgICByZWZzLnN0ZWVyUHJldmlld0NoYW5nZXMgPSBudWxsXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpXG4gICAgc2V0U3RlZXIoeyBzZWxlY3RlZCwgZWRpdGluZzogZmFsc2UsIGFkZGluZzogZmFsc2UsIHJvbGU6ICd1c2VyJywgY2hhbmdlczogW10gfSlcbiAgICBpZiAocm93c1tzZWxlY3RlZF0pIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdLm1lc3NhZ2VJZClcbiAgICBzZXRIaXN0V2luZG93KEluZmluaXR5KVxuICAgIHNldEZvbGxvdyh0cnVlKVxuICAgIGZtLmZvY3VzKCdzdGVlcicpXG4gIH1cblxuICBmdW5jdGlvbiBjbG9zZVN0ZWVyKGFwcGxpZWQgPSBmYWxzZSkge1xuICAgIHNldFN0ZWVyKG51bGwpXG4gICAgc2V0U3RlZXJUZXh0KCcnKVxuICAgIHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpXG4gICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICBpZiAoYXBwbGllZCkgZmxhc2goJ2NvbnZlcnNhdGlvbiBzdGVlcmluZyBhcHBsaWVkICBub3RoaW5nIHNlbnQnKVxuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlTdGVlcigpIHtcbiAgICBjb25zdCBkcmFmdCA9IHN0ZWVyKClcbiAgICBpZiAoIWRyYWZ0Py5jaGFuZ2VzLmxlbmd0aCkgcmV0dXJuIGNsb3NlU3RlZXIoKVxuICAgIGN0bC5hcHBseVN0ZWVyKGRyYWZ0LmNoYW5nZXMpXG4gICAgY2xvc2VTdGVlcih0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRTdGVlckVkaXQoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93ID0gc3RlZXJSb3dzKClbZHJhZnQuc2VsZWN0ZWRdXG4gICAgaWYgKCFyb3cpIHJldHVybiBzdGFydFN0ZWVyQWRkKClcbiAgICBpZiAocm93LmxvY2tlZCkgcmV0dXJuIGZsYXNoKCdsb2NrZWQgIHRoaXMgbWVzc2FnZSBpcyBiZWZvcmUgdGhlIGxhdGVzdCBjb21wYWN0aW9uJylcbiAgICBzZXRTdGVlclRleHQocm93LnRleHQpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgZWRpdGluZzogdHJ1ZSwgYWRkaW5nOiBmYWxzZSwgcm9sZTogcm93LnJvbGUgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0U3RlZXJBZGQoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3Qgc2VsZWN0ZWQgPSByb3dzW2RyYWZ0LnNlbGVjdGVkXVxuICAgIGNvbnN0IHByZXZpb3VzUm9sZSA9IHNlbGVjdGVkPy5yb2xlXG4gICAgY29uc3Qgcm9sZSA9IHByZXZpb3VzUm9sZSA9PT0gJ3VzZXInID8gJ2Fzc2lzdGFudCcgOiBTVEVFUl9ST0xFU1swXVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgICBzZXRTdGVlcih7IC4uLmRyYWZ0LCBlZGl0aW5nOiB0cnVlLCBhZGRpbmc6IHRydWUsIHJvbGUgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YWdlU3RlZXJUZXh0KHRleHQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRleHQudHJpbSgpXG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZsYXNoKCdtZXNzYWdlIGNhbm5vdCBiZSBlbXB0eScpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3QgdGFyZ2V0ID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBjb25zdCBjaGFuZ2UgPSBkcmFmdC5hZGRpbmdcbiAgICAgID8geyBvcDogJ2luc2VydCcsIGlkOiBtYWtlRXZlbnQoJ21lc3NhZ2UnKS5pZCwgYWZ0ZXI6IHRhcmdldD8ubWVzc2FnZUlkID8/IG51bGwsIG1lc3NhZ2U6IHsgcm9sZTogZHJhZnQucm9sZSwgY29udGVudDogdmFsdWUgfSB9XG4gICAgICA6IHsgb3A6ICdyZXBsYWNlJywgdGFyZ2V0OiB0YXJnZXQubWVzc2FnZUlkLCBtZXNzYWdlOiB7IHJvbGU6IGRyYWZ0LnJvbGUsIGNvbnRlbnQ6IHZhbHVlIH0gfVxuICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIGVkaXRpbmc6IGZhbHNlLCBhZGRpbmc6IGZhbHNlLCBjaGFuZ2VzOiBbLi4uZHJhZnQuY2hhbmdlcywgY2hhbmdlXSB9KVxuICAgIHNldFN0ZWVyVGV4dCgnJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YWdlU3RlZXJEZWxldGUoKSB7XG4gICAgY29uc3QgZHJhZnQgPSBzdGVlcigpXG4gICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgY29uc3QgdGFyZ2V0ID0gcm93c1tkcmFmdC5zZWxlY3RlZF1cbiAgICBpZiAoIXRhcmdldCkgcmV0dXJuXG4gICAgaWYgKHRhcmdldC5sb2NrZWQpIHJldHVybiBmbGFzaCgnbG9ja2VkICB0aGlzIG1lc3NhZ2UgaXMgYmVmb3JlIHRoZSBsYXRlc3QgY29tcGFjdGlvbicpXG4gICAgY29uc3QgY2hhbmdlcyA9IFsuLi5kcmFmdC5jaGFuZ2VzLCB7IG9wOiAnZGVsZXRlJywgdGFyZ2V0OiB0YXJnZXQubWVzc2FnZUlkIH1dXG4gICAgY29uc3QgcmVtYWluaW5nID0gcm93cy5maWx0ZXIoKHJvdykgPT4gcm93Lm1lc3NhZ2VJZCAhPT0gdGFyZ2V0Lm1lc3NhZ2VJZClcbiAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWluKGRyYWZ0LnNlbGVjdGVkLCBNYXRoLm1heCgwLCByZW1haW5pbmcubGVuZ3RoIC0gMSkpXG4gICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQsIGNoYW5nZXMgfSlcbiAgICBpZiAocmVtYWluaW5nW3NlbGVjdGVkXSkgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocmVtYWluaW5nW3NlbGVjdGVkXS5tZXNzYWdlSWQpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbnNlcnRDb21tYW5kKGNvbW1hbmQsIHJhbmdlID0gY29tbWFuZEF0KGlucHV0KCksIGlucHV0Q3Vyc29yKCkpLCBhcmdzID0gJycpIHtcbiAgICBpZiAoIXJhbmdlKSByZXR1cm5cbiAgICBjb25zdCBkcmFmdCA9IGlucHV0KClcbiAgICBjb25zdCB0b2tlbiA9IHt9XG4gICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gdG9rZW5cbiAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGJvb3QuY29tbWFuZHMubGlzdCgpLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gY29tbWFuZC5uYW1lKVxuICAgICAgY29uc3QgeyBib2R5IH0gPSBwYXJzZUZyb250bWF0dGVyKGF3YWl0IHJlYWRGaWxlKG1ldGFkYXRhLmZpbGUsICd1dGYtOCcpKVxuICAgICAgaWYgKHJlZnMuY29tbWFuZEV4cGFuc2lvbiAhPT0gdG9rZW4gfHwgaW5wdXQoKSAhPT0gZHJhZnQpIHJldHVyblxuICAgICAgY29uc3QgZm9ybSA9IHsgbmFtZTogY29tbWFuZC5uYW1lLCBib2R5OiBib2R5LnRyaW0oKSwgZHJhZnQsIHJhbmdlLCBhcmdzLCB0b2tlbiB9XG4gICAgICBjb25zdCBmaWVsZHMgPSBjb21tYW5kRmllbGRzKHsgYXJndW1lbnRzOiBwYXJzZUNvbW1hbmRBcmd1bWVudHMoYm9keSkgfSwgYm9keSwgYXJncylcbiAgICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgIHNldENvbW1hbmRGb3JtKHsgLi4uZm9ybSwgZmllbGRzIH0pXG4gICAgICAgIGlmIChmaWVsZHMuc29tZSgoZmllbGQpID0+IGZpZWxkLnR5cGUgPT09ICdwYXRoJykpIHtcbiAgICAgICAgICBsaXN0RmlsZXMoY3dkKS50aGVuKHNldEZpbGVMaXN0KS5jYXRjaCgoZXJyb3IpID0+IGZsYXNoKGVycm9yLm1lc3NhZ2UpKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgZmluaXNoQ29tbWFuZChmb3JtLCB7fSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZmxhc2goYGNvdWxkIG5vdCBsb2FkIC8ke2NvbW1hbmQubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaENvbW1hbmQoZm9ybSwgdmFsdWVzKSB7XG4gICAgaWYgKHJlZnMuY29tbWFuZEV4cGFuc2lvbiAhPT0gZm9ybS50b2tlbiB8fCBpbnB1dCgpICE9PSBmb3JtLmRyYWZ0KSByZXR1cm5cbiAgICB0cnkge1xuICAgICAgY29uc3QgYm9keSA9IGV4cGFuZENvbW1hbmQoZm9ybS5ib2R5LCB2YWx1ZXNbJyRhcmdzJ10gPz8gZm9ybS5hcmdzLCB2YWx1ZXMpXG4gICAgICBjb25zdCBuZXh0ID0gcmVwbGFjZUNvbW1hbmQoZm9ybS5kcmFmdCwgZm9ybS5yYW5nZSwgYm9keSlcbiAgICAgIHNldElucHV0KG5leHQudGV4dCwgbmV4dC5jdXJzb3IpXG4gICAgICBzZXRDb21tYW5kRm9ybShudWxsKVxuICAgICAgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbFxuICAgICAgZm0uZm9jdXMoJ2lucHV0JylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZmxhc2goZXJyb3IubWVzc2FnZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGMsIGFyZ3MgPSAnJykge1xuICAgIGlmICh0eXBlb2YgYXJncyAhPT0gJ3N0cmluZycpIGFyZ3MgPSAnJ1xuICAgIGlmIChjLmNvbW1hbmQpIHJldHVybiBpbnNlcnRDb21tYW5kKGMpXG4gICAgc2V0SW5wdXQoJycpXG4gICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICBpZiAoYy5uYW1lID09PSAnZm9yaycpIHJldHVybiBjdGwuZm9yayhhcmdzLnRyaW0oKSlcbiAgICBpZiAoYy5uYW1lID09PSAncmVuYW1lJykgcmV0dXJuIGN0bC5yZW5hbWUoYXJncylcbiAgICBpZiAoYy5uYW1lID09PSAnY29sb3InKSByZXR1cm4gY3RsLnNldENvbG9yKGFyZ3MpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbmZpZycpIHtcbiAgICAgIHNldFNob3dDb25maWdQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0aGVtZScpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dUaGVtZVBhbmVsKHRydWUpXG4gICAgICBjb25zdCBjaG9pY2UgPSBhcmdzLnRvTG93ZXJDYXNlKClcbiAgICAgIGNvbnN0IHZhbGlkID0gWy4uLnBhbGV0dGVMaXN0KCkubWFwKChwKSA9PiBwLmtleSksICdhdXRvJ11cbiAgICAgIGlmICghdmFsaWQuaW5jbHVkZXMoY2hvaWNlKSkgcmV0dXJuIGZsYXNoKGB0aGVtZTogJHtwYWxldHRlTmFtZSgpfSAgL3RoZW1lIDwke3ZhbGlkLmpvaW4oJ3wnKX0+YClcbiAgICAgIGFwcGx5VGhlbWVQcmVmKGNob2ljZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5za2lsbCkgcmV0dXJuIGN0bC5zZW5kU2tpbGwoYy5uYW1lKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb25uZWN0JykgcmV0dXJuIG9wZW5Db25uZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdpbml0JykgcmV0dXJuIGN0bC5zZW5kSW5pdChhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdwYXJhbGxlbCcpIHtcbiAgICAgIGNvbnN0IHRhc2sgPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGF3YWl0IGN0bC5zZW5kUGFyYWxsZWwodGFzaykpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ1Jlc2VhcmNoKHsgdGFzayB9KVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxpYmVyYXRlJykge1xuICAgICAgY29uc3QgZGVjaXNpb24gPSBhcmdzLnRyaW0oKVxuICAgICAgaWYgKGF3YWl0IGN0bC5zZW5kRGVsaWJlcmF0ZShkZWNpc2lvbikpIHJldHVyblxuICAgICAgc2V0UGVuZGluZ0RlbGliZXJhdGlvbih7IGRlY2lzaW9uIH0pXG4gICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgc2V0U2hvd1Jlc2VhcmNoTW9kZWxQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dNb2RlbFBhbmVsKHRydWUpXG4gICAgICByZXR1cm4gY3RsLnN3aXRjaE1vZGVsQnlOYW1lKGFyZ3MpXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZWZyZXNoLW1vZGVscycpIHJldHVybiByZWZyZXNoTW9kZWxzKClcbiAgICBpZiAoYy5uYW1lID09PSAnc3BlZWQnKSB7XG4gICAgICBpZiAoIXNwZWVkQXBwbGllcygpKSByZXR1cm4gZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkIGNvbnRyb2xgKVxuICAgICAgaWYgKCFhcmdzKSByZXR1cm4gc2V0U2hvd1NwZWVkUGFuZWwodHJ1ZSlcbiAgICAgIHJldHVybiBjdGwuc3BlZWRDb21tYW5kKGFyZ3MudG9Mb3dlckNhc2UoKSlcbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ2VmZm9ydCcpIHtcbiAgICAgIGlmICghZWZmb3J0QXBwbGllcygpKSByZXR1cm4gZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGVmZm9ydCBjb250cm9sYClcbiAgICAgIGlmICghYXJncykgcmV0dXJuIHNldFNob3dFZmZvcnRQYW5lbCh0cnVlKVxuICAgICAgcmV0dXJuIGN0bC5zZXRFZmZvcnRCeU5hbWUoYXJncy50b0xvd2VyQ2FzZSgpKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAndXBkYXRlJykge1xuICAgICAgaWYgKGlzRGV2SW5zdGFsbChpbXBvcnQubWV0YS51cmwpKSByZXR1cm4gZmxhc2goJ3RoaXMgcGljbyBydW5zIGZyb20gYSBzb3VyY2UgY2hlY2tvdXQgIHVwZGF0ZSBpdCB3aXRoIGdpdCcpXG4gICAgICBjb25zdCBsYXRlc3QgPSBhd2FpdCBmZXRjaExhdGVzdFZlcnNpb24oKS5jYXRjaCgoKSA9PiBudWxsKVxuICAgICAgaWYgKGxhdGVzdCAmJiAhbmV3ZXJWZXJzaW9uKHZlcnNpb24sIGxhdGVzdCkpIHJldHVybiBmbGFzaChgcGljbyB2JHt2ZXJzaW9ufSBpcyBhbHJlYWR5IHRoZSBsYXRlc3RgKVxuICAgICAgZmxhc2goYHVwZGF0aW5nJHtsYXRlc3QgPyBgIHRvIHYke2xhdGVzdH1gIDogJyd9Li4uYClcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJ1blVwZGF0ZSgpXG4gICAgICBpZiAocmVzdWx0Lm9rKSByZXR1cm4gZmxhc2goYHVwZGF0ZWQke2xhdGVzdCA/IGAgdG8gdiR7bGF0ZXN0fWAgOiAnJ30gIHJlc3RhcnQgcGljbyB0byB1c2UgaXRgKVxuICAgICAgcmV0dXJuIGZsYXNoKGB1cGRhdGUgZmFpbGVkOiAke3Jlc3VsdC5vdXRwdXQuc2xpY2UoMCwgMTAwKX1gKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnc3RlZXInKSByZXR1cm4gYmVnaW5TdGVlcigpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2NvbnRleHQnKSByZXR1cm4gb3BlbkNvbnRleHRQYW5lbCgpXG4gICAgaWYgKGMubmFtZSA9PT0gJ2hpc3RvcnknKSByZXR1cm4gb3Blbkhpc3RvcnlTZWFyY2goKVxuICAgIGlmIChjLm5hbWUgPT09ICdoZWxwJykgcmV0dXJuIHNldFZpZXcoJ2hlbHAnKVxuICAgIGlmIChjLm5hbWUgPT09ICdtY3AnKSByZXR1cm4gc2V0U2hvd01jcFBhbmVsKHRydWUpXG4gICAgaWYgKGMubmFtZSA9PT0gJ3dha2V1cHMnKSByZXR1cm4gc2V0U2hvd1dha2V1cHNQYW5lbCh0cnVlKVxuICAgIGlmIChjLm5hbWUgPT09ICdtZW1vcnknKSB7XG4gICAgICBhd2FpdCByZWZyZXNoTWVtb3JpZXMoKVxuICAgICAgcmV0dXJuIHNldFNob3dNZW1vcnlQYW5lbCh0cnVlKVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAncmVzdW1lJykge1xuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgICBvcGVuUmVzdW1lUGFuZWwoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdwcm9qZWN0JykgcmV0dXJuIG9wZW5Qcm9qZWN0UGFuZWwoKVxuICAgIGlmIChjLm5hbWUgPT09ICdjd2QnKSB7XG4gICAgICBjb25zdCByb290Tm90ZSA9IGJvb3Qucm9vdCAhPT0gYm9vdC5jd2QgPyBgICBwcm9qZWN0IHJvb3QgJHtzaG9ydGVuUGF0aChib290LnJvb3QpfWAgOiAnJ1xuICAgICAgcmV0dXJuIGZsYXNoKGAke2Jvb3QuZGlzcGxheUN3ZH0ke3Jvb3ROb3RlfWApXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdza2lsbHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdTa2lsbHMnLFxuICAgICAgICByb3dzOiBza2lsbHMubGlzdCgpLm1hcCgocykgPT4gKHsgbmFtZTogcy5uYW1lLCBkZXNjOiBzLmRlc2NyaXB0aW9uLCBub3RlOiBzLnNvdXJjZSB9KSksXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY29tbWFuZHMnKSB7XG4gICAgICByZXR1cm4gc2V0SW5mb1BhbmVsKHtcbiAgICAgICAgdGl0bGU6ICdDb21tYW5kcycsXG4gICAgICAgIHJvd3M6IFtcbiAgICAgICAgICAuLi5DT01NQU5EUy5tYXAoKGNtZCkgPT4gKHsgbmFtZTogYC8ke2NtZC5uYW1lfWAsIGRlc2M6IGNtZC5kZXNjLCBub3RlOiAnYnVpbHRpbicgfSkpLFxuICAgICAgICAgIC4uLmJvb3QuY29tbWFuZHMubGlzdCgpLm1hcCgoY21kKSA9PiAoeyBuYW1lOiBgLyR7Y21kLm5hbWV9YCwgZGVzYzogY21kLmRlc2NyaXB0aW9uLCBub3RlOiBjbWQuc291cmNlIH0pKSxcbiAgICAgICAgXSxcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICd0b29scycpIHtcbiAgICAgIGNvbnN0IHsgcm93cywgbWNwQ291bnQgfSA9IGF3YWl0IGN0bC5kZXNjcmliZVRvb2xzKClcbiAgICAgIHNldEluZm9QYW5lbCh7IHRpdGxlOiBgVG9vbHMke21jcENvdW50ID8gYCAgcGx1cyAke21jcENvdW50fSBNQ1AgKHNlZSAvbWNwKWAgOiAnJ31gLCByb3dzIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGMubmFtZSA9PT0gJ25ldycpIHJldHVybiBjdGwubmV3U2Vzc2lvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdkZWxldGUnKSB7XG4gICAgICBpZiAoYnVzeSgpKSByZXR1cm4gZmxhc2goJ2ZpbmlzaCBvciBpbnRlcnJ1cHQgdGhlIGN1cnJlbnQgdHVybiBmaXJzdCcpXG4gICAgICBpZiAoIXN0YXRlLnNlc3Npb24pIHJldHVybiBmbGFzaCgnbm8gY3VycmVudCBzZXNzaW9uIHRvIGRlbGV0ZScpXG4gICAgICBzZXRTaG93RGVsZXRlQ29uZmlybSh0cnVlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdyZXdpbmQnKSB7XG4gICAgICBhd2FpdCBsb2FkRnVsbEhpc3RvcnkoKVxuICAgICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgaWYgKHVzZXJFbnRyaWVzKGRlcml2ZWQoKSkubGVuZ3RoID09PSAwKSByZXR1cm4gZmxhc2goJ25vdGhpbmcgdG8gcmV3aW5kIHlldCcpXG4gICAgICBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYy5uYW1lID09PSAnY2xlYXInKSByZXR1cm4gY3RsLmNsZWFyKClcbiAgICBpZiAoYy5uYW1lID09PSAnY29tcGFjdCcpIHJldHVybiBwZXJmb3JtQ29tcGFjdGlvbihhcmdzKVxuICAgIGlmIChjLm5hbWUgPT09ICdjb3N0Jykge1xuICAgICAgY29uc3QgY29zdCA9IGN0bC5jb3N0U3VtbWFyeSgpXG4gICAgICBpZiAoIWNvc3QpIHJldHVybiBmbGFzaCgnbm8gdXNhZ2UgeWV0JylcbiAgICAgIGNvbnN0IGJhc2UgPSBgJCR7Y29zdC5zcGVudC50b0ZpeGVkKDQpfSBzcGVudCAgJHtjb3N0LnByb21wdFRva2Vucy50b0xvY2FsZVN0cmluZygpfSBpbiAgJHtjb3N0LmNvbXBsZXRpb25Ub2tlbnMudG9Mb2NhbGVTdHJpbmcoKX0gb3V0YFxuICAgICAgZmxhc2goY29zdC5zcGVudCAtIGNvc3QuYWN0aXZlID4gMC4wMDAwNSA/IGAke2Jhc2V9ICBjdXJyZW50IGNvbnZlcnNhdGlvbiAkJHtjb3N0LmFjdGl2ZS50b0ZpeGVkKDQpfWAgOiBiYXNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjLm5hbWUgPT09ICdleHBvcnQnKSB7XG4gICAgICBjb25zdCBmaWxlID0gYXdhaXQgY3RsLmV4cG9ydE1hcmtkb3duKClcbiAgICAgIGZsYXNoKGBleHBvcnRlZCB0byAke2ZpbGV9YClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hBdXRoUHJvdmlkZXJzKCkge1xuICAgIGNvbnN0IG9wZW5haSA9IGF3YWl0IG9wZW5haVN0YXR1cygpLmNhdGNoKCgpID0+ICh7IGNvbm5lY3RlZDogZmFsc2UsIGVtYWlsOiBudWxsIH0pKVxuICAgIHNldEF1dGhQcm92aWRlcnMoW1xuICAgICAgeyBpZDogJ29wZW5haScsIGxhYmVsOiAnT3BlbkFJICBDaGF0R1BUIC8gQ29kZXggcGxhbicsIGNvbm5lY3RlZDogb3BlbmFpLmNvbm5lY3RlZCwgZW1haWw6IG9wZW5haS5lbWFpbCB9LFxuICAgIF0pXG4gIH1cblxuICBmdW5jdGlvbiBvcGVuQ29ubmVjdFBhbmVsKCkge1xuICAgIHNldFNob3dDb25uZWN0UGFuZWwodHJ1ZSlcbiAgICByZWZyZXNoQXV0aFByb3ZpZGVycygpXG4gIH1cblxuICBmdW5jdGlvbiBjb25uZWN0UHJvdmlkZXIocHJvdmlkZXIpIHtcbiAgICBpZiAocHJvdmlkZXIuaWQgIT09ICdvcGVuYWknKSByZXR1cm5cbiAgICBzZXRTaG93Q29ubmVjdFBhbmVsKGZhbHNlKVxuICAgIGZsYXNoKCdvcGVuaW5nIHlvdXIgYnJvd3NlciBmb3IgQ2hhdEdQVCBzaWduLWluLi4uJylcbiAgICBjdGwuY29ubmVjdFByb3ZpZGVyKClcbiAgICAgIC50aGVuKCh7IGVtYWlsLCBjb3VudCB9KSA9PiBmbGFzaChgY29ubmVjdGVkIGFzICR7ZW1haWwgfHwgJ3lvdXIgQ2hhdEdQVCBhY2NvdW50J30gICR7Y291bnR9IGNvZGV4IG1vZGVscyB1bmxvY2tlZCBpbiAvbW9kZWxgKSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiBmbGFzaChgY29ubmVjdCBmYWlsZWQ6ICR7U3RyaW5nKGVyci5tZXNzYWdlIHx8IGVycikuc2xpY2UoMCwgMTIwKX1gKSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc2Nvbm5lY3RQcm92aWRlcihwcm92aWRlcikge1xuICAgIGlmIChwcm92aWRlci5pZCAhPT0gJ29wZW5haScpIHJldHVyblxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kaXNjb25uZWN0QXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gcHJvdmlkZXIuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5kaXNjb25uZWN0QXJtID0geyBpZDogcHJvdmlkZXIuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRpc2Nvbm5lY3QgJHtwcm92aWRlci5sYWJlbH0gKHlvdSB3aWxsIG5lZWQgdG8gc2lnbiBpbiBhZ2FpbilgKVxuICAgIH1cbiAgICByZWZzLmRpc2Nvbm5lY3RBcm0gPSBudWxsXG4gICAgYXdhaXQgY3RsLmRpc2Nvbm5lY3RQcm92aWRlcigpXG4gICAgcmVmcmVzaEF1dGhQcm92aWRlcnMoKVxuICAgIGZsYXNoKCdkaXNjb25uZWN0ZWQgZnJvbSBDaGF0R1BUJylcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5SZXN1bWVQYW5lbCgpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gKytyZWZzLnJlc3VtZU9wZW5cbiAgICBjb25zdCBzY29wZXMgPSBbJ3JlcG9zaXRvcnknLCAnZXZlcnl3aGVyZSddXG4gICAgc2V0UmVzdW1lU2NvcGVzKHNjb3BlcylcbiAgICBzZXRSZXN1bWVTY29wZSgwKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hTZXNzaW9ucygwLCBzY29wZXMpXG4gICAgbGlzdFdvcmt0cmVlcyhvd25lclJvb3QoYm9vdC5yb290KSkudGhlbigodHJlZXMpID0+IHtcbiAgICAgIGlmICh0cmVlcy5sZW5ndGggPCAyIHx8ICFzaG93UmVzdW1lUGFuZWwoKSB8fCByZXF1ZXN0ICE9PSByZWZzLnJlc3VtZU9wZW4pIHJldHVyblxuICAgICAgc2V0UmVzdW1lU2NvcGVzKFsncmVwb3NpdG9yeScsICdjaGVja291dCcsICdldmVyeXdoZXJlJ10pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZnJlc2hTZXNzaW9ucyhzY29wZUluZGV4LCBzY29wZXMgPSByZXN1bWVTY29wZXMoKSkge1xuICAgIHNldFJlc3VtZUxvYWRpbmcodHJ1ZSlcbiAgICBjdGwubGlzdFJlc3VtZVNlc3Npb25zKHNjb3Blc1tzY29wZUluZGV4XSlcbiAgICAgIC50aGVuKHNldFJlc3VtZVNlc3Npb25zKVxuICAgICAgLmZpbmFsbHkoKCkgPT4gc2V0UmVzdW1lTG9hZGluZyhmYWxzZSkpXG4gIH1cblxuICBmdW5jdGlvbiBzaG9ydGVuUGF0aChwYXRoKSB7XG4gICAgY29uc3QgaG9tZSA9IGhvbWVkaXIoKVxuICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoaG9tZSkgPyBwYXRoLnJlcGxhY2UoaG9tZSwgJ34nKSA6IHBhdGhcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5Qcm9qZWN0UGFuZWwoKSB7XG4gICAgaWYgKGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgc2V0U2hvd1Byb2plY3RQYW5lbCh0cnVlKVxuICAgIHJlZnJlc2hQcm9qZWN0cygpXG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiByZWZyZXNoUHJvamVjdHMoKSB7XG4gICAgc2V0UHJvamVjdHNMb2FkaW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpc3QgPSBhd2FpdCBjdGwubGlzdFByb2plY3RzKClcbiAgICAgIHNldFByb2plY3RzKGxpc3QubWFwKChwcm9qZWN0KSA9PiAoe1xuICAgICAgICAuLi5wcm9qZWN0LFxuICAgICAgICBwYXRoOiBzaG9ydGVuUGF0aChwcm9qZWN0LnJvb3QpLFxuICAgICAgICBjaGVja291dHM6IHByb2plY3QuY2hlY2tvdXRzLm1hcCgoY2hlY2tvdXQpID0+ICh7IC4uLmNoZWNrb3V0LCBwYXRoOiBzaG9ydGVuUGF0aChjaGVja291dC5yb290KSB9KSksXG4gICAgICB9KSkpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFByb2plY3RzTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBhZGRQcm9qZWN0V29ya3RyZWUoY2hlY2tvdXQpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJlZSA9IGF3YWl0IGN0bC5hZGRXb3JrdHJlZShjaGVja291dC5vd25lcilcbiAgICAgIGF3YWl0IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKHsgcm9vdDogdHJlZS5wYXRoIH0pXG4gICAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZmxhc2goYHdvcmt0cmVlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVQcm9qZWN0Q2hlY2tvdXQoY2hlY2tvdXQpIHtcbiAgICBpZiAoY2hlY2tvdXQud29ya3RyZWUpIHtcbiAgICAgIGlmIChjaGVja291dC5jdXJyZW50KSByZXR1cm4gZmxhc2goJ2Nhbm5vdCByZW1vdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5wcm9qZWN0RGVsZXRlQXJtXG4gICAgICBpZiAoIWFybWVkIHx8IGFybWVkLnJvb3QgIT09IGNoZWNrb3V0LnJvb3QgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8gcmVtb3ZlIFwiJHtjaGVja291dC5icmFuY2ggfHwgY2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgICB9XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjdGwuZGVsZXRlV29ya3RyZWUoY2hlY2tvdXQpXG4gICAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICAgIGZsYXNoKGByZW1vdmVkICR7Y2hlY2tvdXQuYnJhbmNoIHx8IGNoZWNrb3V0LnBhdGh9YClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBmbGFzaChgcmVtb3ZlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2hlY2tvdXQuY3VycmVudCkgcmV0dXJuIGZsYXNoKCdjYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50IHByb2plY3QgIHN3aXRjaCBhd2F5IGZpcnN0JylcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMucHJvamVjdERlbGV0ZUFybVxuICAgIGlmICghYXJtZWQgfHwgYXJtZWQucm9vdCAhPT0gY2hlY2tvdXQucm9vdCB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLnByb2plY3REZWxldGVBcm0gPSB7IHJvb3Q6IGNoZWNrb3V0LnJvb3QsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIGRlbGV0ZSBcIiR7Y2hlY2tvdXQucGF0aH1cIiBhbmQgaXRzICR7Y2hlY2tvdXQuY291bnR9ICR7Y2hlY2tvdXQuY291bnQgPT09IDEgPyAnc2Vzc2lvbicgOiAnc2Vzc2lvbnMnfWApXG4gICAgfVxuICAgIHJlZnMucHJvamVjdERlbGV0ZUFybSA9IG51bGxcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlUHJvamVjdERhdGEoY2hlY2tvdXQucm9vdClcbiAgICAgIGF3YWl0IHJlZnJlc2hQcm9qZWN0cygpXG4gICAgICBmbGFzaChgZGVsZXRlZCAke2NoZWNrb3V0LnBhdGh9ICAke2NoZWNrb3V0LmNvdW50fSAke2NoZWNrb3V0LmNvdW50ID09PSAxID8gJ3Nlc3Npb24nIDogJ3Nlc3Npb25zJ30gcmVtb3ZlZGApXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmbGFzaChgZGVsZXRlIGZhaWxlZDogJHtTdHJpbmcoZXJyLm1lc3NhZ2UgfHwgZXJyKS5zbGljZSgwLCA4MCl9YClcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBkZWxldGVTZXNzaW9uTWV0YShtZXRhKSB7XG4gICAgY29uc3QgY3VycmVudCA9IHN0YXRlLnNlc3Npb24/LmlkID09PSBtZXRhLmhlYWRlci5pZFxuICAgIGlmIChjdXJyZW50ICYmIGJ1c3koKSkgcmV0dXJuIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgIGNvbnN0IGFybWVkID0gcmVmcy5kZWxldGVBcm1cbiAgICBpZiAoIWFybWVkIHx8IGFybWVkLmZpbGUgIT09IG1ldGEuZmlsZSB8fCBEYXRlLm5vdygpIC0gYXJtZWQuYXQgPiAzMDAwKSB7XG4gICAgICByZWZzLmRlbGV0ZUFybSA9IHsgZmlsZTogbWV0YS5maWxlLCBhdDogRGF0ZS5ub3coKSB9XG4gICAgICByZXR1cm4gZmxhc2goYGN0cmwreCBhZ2FpbiB0byBkZWxldGUgXCIke21ldGEudGl0bGUuc2xpY2UoMCwgNTApfVwiYClcbiAgICB9XG4gICAgcmVmcy5kZWxldGVBcm0gPSBudWxsXG4gICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgIGlmIChhd2FpdCBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSkgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNlc3Npb24obWV0YS5maWxlKVxuICAgICAgcmVmcmVzaFNlc3Npb25zKHJlc3VtZVNjb3BlKCkpXG4gICAgICBmbGFzaCgnc2Vzc2lvbiBkZWxldGVkJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZsYXNoKGBkZWxldGUgZmFpbGVkOiAke1N0cmluZyhlcnIubWVzc2FnZSB8fCBlcnIpLnNsaWNlKDAsIDgwKX1gKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlc3VtZVNlc3Npb24obWV0YSkge1xuICAgIGlmIChidXN5KCkpIHJldHVybiBmbGFzaCgnZmluaXNoIG9yIGludGVycnVwdCB0aGUgY3VycmVudCB0dXJuIGJlZm9yZSBzd2l0Y2hpbmcgc2Vzc2lvbnMnKVxuICAgIHNldFNob3dSZXN1bWVQYW5lbChmYWxzZSlcbiAgICBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKVxuICAgIGF3YWl0IGN0bC5yZXN1bWUobWV0YSlcbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW5IaXN0b3J5U2VhcmNoKCkge1xuICAgIGNvbnN0IHNlc3Npb24gPSBzZW50KClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKHNlc3Npb24pKVxuICAgIHNldFNob3dIaXN0b3J5UGFuZWwodHJ1ZSlcbiAgICBzZXRIaXN0U2NvcGUoMClcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZHVwZVByb21wdHMocG9vbCkge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KClcbiAgICBjb25zdCBvdXQgPSBbXVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgWy4uLnBvb2xdLnNvcnQoKGEsIGIpID0+IGIuYXQgLSBhLmF0KSkge1xuICAgICAgaWYgKHNlZW4uaGFzKGVudHJ5LnRleHQpKSBjb250aW51ZVxuICAgICAgc2Vlbi5hZGQoZW50cnkudGV4dClcbiAgICAgIG91dC5wdXNoKGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzd2l0Y2hIaXN0U2NvcGUobmV4dCkge1xuICAgIHNldEhpc3RTY29wZShuZXh0KVxuICAgIGlmIChuZXh0ID09PSAwKSByZXR1cm4gc2V0SGlzdFByb21wdHMoZGVkdXBlUHJvbXB0cyhzZW50KCkpKVxuICAgIGNvbnN0IHByb2plY3QgPSBhd2FpdCBsb2FkUHJvamVjdFByb21wdHMocm9vdClcbiAgICBpZiAobmV4dCA9PT0gMSkgcmV0dXJuIHNldEhpc3RQcm9tcHRzKGRlZHVwZVByb21wdHMoWy4uLnNlbnQoKSwgLi4ucHJvamVjdF0pKVxuICAgIGNvbnN0IGdsb2JhbCA9IGF3YWl0IGxvYWRHbG9iYWxQcm9tcHRzKClcbiAgICBzZXRIaXN0UHJvbXB0cyhkZWR1cGVQcm9tcHRzKFsuLi5zZW50KCksIC4uLnByb2plY3QsIC4uLmdsb2JhbF0pKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gcGVyZm9ybVJld2luZFRvKHRhcmdldCwgb3B0KSB7XG4gICAgYXdhaXQgY3RsLnJld2luZCh0YXJnZXQsIG9wdC5rZXkpXG4gICAgc2V0UmV3aW5kU3RlcChudWxsKVxuICAgIHNldFJld2luZFRhcmdldChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gcGVyZm9ybVJld2luZChvcHQpIHtcbiAgICByZXR1cm4gcGVyZm9ybVJld2luZFRvKHJld2luZFRhcmdldCgpLCBvcHQpXG4gIH1cblxuICBjb25zdCB1bmRvUmV3aW5kID0gY3RsLnVuZG9SZXdpbmRcblxuICBhc3luYyBmdW5jdGlvbiBjb25maXJtRGVsZXRlQ3VycmVudFNlc3Npb24oKSB7XG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IGN0bC5kZWxldGVDdXJyZW50U2Vzc2lvbigpXG4gICAgc2V0U2hvd0RlbGV0ZUNvbmZpcm0oZmFsc2UpXG4gICAgcmV0dXJuIGRlbGV0ZWRcbiAgfVxuXG4gIGNvbnN0IGFueVBhbmVsID0gKCkgPT5cbiAgICBzaG93TW9kZWxQYW5lbCgpIHx8IHNob3dSZXNlYXJjaE1vZGVsUGFuZWwoKSB8fCBzaG93U3BlZWRQYW5lbCgpIHx8IHNob3dFZmZvcnRQYW5lbCgpIHx8IHNob3dUaGVtZVBhbmVsKCkgfHwgc2hvd0NvbmZpZ1BhbmVsKCkgfHwgc2hvd0RlbGV0ZUNvbmZpcm0oKSB8fCBzaG93TWVtb3J5UGFuZWwoKSB8fCBzaG93SGlzdG9yeVBhbmVsKCkgfHwgc2hvd1Jlc3VtZVBhbmVsKCkgfHwgc2hvd01jcFBhbmVsKCkgfHxcbiAgICBzaG93UHJvamVjdFBhbmVsKCkgfHwgc2hvd1dha2V1cHNQYW5lbCgpIHx8IHNob3dDb25uZWN0UGFuZWwoKSB8fFxuICAgIGNvbW1hbmRGb3JtKCkgIT09IG51bGwgfHwgaW5mb1BhbmVsKCkgIT09IG51bGwgfHwgcmV3aW5kU3RlcCgpICE9PSBudWxsXG5cbiAgLy8gZXZlcnkgZm9jdXMtdGFraW5nIHBhbmVsIGRpbXMgdGhlIGNvbnZlcnNhdGlvbiBiZWhpbmQgaXQ7IHRoZSB0aGVtZVxuICAvLyBwaWNrZXIgaXMgdGhlIG9uZSBleGVtcHRpb24sIHNpbmNlIGl0cyBqb2IgaXMgcHJldmlld2luZyBwYWxldHRlcyBvblxuICAvLyB0aGUgdW5kaW1tZWQgdWlcbiAgY29uc3QgZGltbWluZ1BhbmVsID0gKCkgPT4gYW55UGFuZWwoKSAmJiAhc2hvd1RoZW1lUGFuZWwoKVxuXG4gIGZ1bmN0aW9uIGNhbmNlbEFnZW50KGFnZW50KSB7XG4gICAgY3RsLmNhbmNlbEFnZW50KGFnZW50LmlkKVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZGlzbWlzc0FnZW50KGFnZW50KSB7XG4gICAgaWYgKCFhd2FpdCBjdGwuZGlzbWlzc0FnZW50KGFnZW50LmlkKSkgcmV0dXJuXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gYWdlbnQuaWQpIHNldFZpZXdlZEFnZW50SWQobnVsbClcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSkge1xuICAgIGlmIChpdGVtLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICBpbnRlcnJ1cHQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0bC5kaXNtaXNzRGVsaWJlcmF0aW9uKGl0ZW0uZGVsaWJlcmF0aW9uSWQpXG4gICAgaWYgKHZpZXdlZEFnZW50SWQoKSA9PT0gaXRlbS5pZCkgc2V0Vmlld2VkQWdlbnRJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzbWlzc1NoZWxsKHNoZWxsKSB7XG4gICAgYm9vdC5zaGVsbHMuZGlzbWlzcyhzaGVsbC5pZClcbiAgICBpZiAodmlld2VkU2hlbGxJZCgpID09PSBzaGVsbC5pZCkgc2V0Vmlld2VkU2hlbGxJZChudWxsKVxuICB9XG5cbiAgZnVuY3Rpb24ga2lsbFNoZWxsKHNoZWxsKSB7XG4gICAgaWYgKHNoZWxsLnN0YXR1cyAhPT0gJ3J1bm5pbmcnKSByZXR1cm4gZmxhc2goYHNoZWxsICR7c2hlbGwuaWR9IGFscmVhZHkgZXhpdGVkYClcbiAgICBjb25zdCBhcm1lZCA9IHJlZnMuc2hlbGxLaWxsQXJtXG4gICAgaWYgKCFhcm1lZCB8fCBhcm1lZC5pZCAhPT0gc2hlbGwuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgcmVmcy5zaGVsbEtpbGxBcm0gPSB7IGlkOiBzaGVsbC5pZCwgYXQ6IERhdGUubm93KCkgfVxuICAgICAgcmV0dXJuIGZsYXNoKGBjdHJsK3ggYWdhaW4gdG8ga2lsbCBcIiR7c2hlbGwuZGVzY3JpcHRpb24gfHwgYHNoZWxsICR7c2hlbGwuaWR9YH1cImApXG4gICAgfVxuICAgIHJlZnMuc2hlbGxLaWxsQXJtID0gbnVsbFxuICAgIGJvb3Quc2hlbGxzLmtpbGwoc2hlbGwuaWQsICd1c2VyJylcbiAgfVxuXG4gIGNvbnN0IHNwZWVkQXBwbGllcyA9IGN0bC5zcGVlZEFwcGxpZXNcbiAgY29uc3QgZWZmb3J0QXBwbGllcyA9IGN0bC5lZmZvcnRBcHBsaWVzXG4gIGNvbnN0IHNldFNlc3Npb25FZmZvcnQgPSBjdGwuc2V0RWZmb3J0XG5cbiAgY29uc3QgZm0gPSB1c2VGb2N1cyh7IGluaXRpYWw6ICdpbnB1dCcgfSlcbiAgY29uc3Qgc3RlZXJMaXN0Rm9jdXMgPSB1c2VGb2N1cyh7IGluaXRpYWw6IG51bGwsIGN5Y2xlOiAnbm9uZScsIGFjdGl2ZTogZmFsc2UgfSlcbiAgZm0uaXRlbSgnZmVlZCcpXG4gIGlmIChzdGVlcigpKSB7XG4gICAgZm0uaXRlbSgnc3RlZXInKVxuICAgIGlmICghZm0uaXMoJ3N0ZWVyJykpIGZtLmZvY3VzKCdzdGVlcicpXG4gIH1cbiAgY29uc3QgY29udmVyc2F0aW9uU2VhcmNoID0gY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoKHsgZm0sIHZlcmJvc2UsIHNldEZvbGxvdywgc2V0T2Zmc2V0IH0pXG4gIGNvbnZlcnNhdGlvblNlYXJjaC5yZWdpc3RlckZvY3VzKClcbiAgbGV0IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBbXVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgYWdlbnRSb3dzID0gYWN0aXZpdHlSb3dzKGN0bC5hY3Rpdml0eSgpKVxuICBzaGVsbHNWZXJzaW9uKClcbiAgY29uc3Qgc2hlbGxSb3dzID0gYWN0aXZpdHlSb3dzKGN0bC5zaGVsbFJvd3MoKSlcbiAgY29uc3Qgc2hvd0NvbXBvc2VyQWN0aW9ucyA9ICFzdGVlcigpICYmICF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSAmJiAhYW55UGFuZWwoKSAmJiBwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJ1xuICBjb25zdCBhY3Rpdml0eU1hcmdpbiA9IChzaGVsbFJvd3MubGVuZ3RoID4gMCAmJiBhZ2VudFJvd3MubGVuZ3RoID4gMCkgfHwgIXNob3dDb21wb3NlckFjdGlvbnMgPyAxIDogMFxuICBjb25zdCBbc2hlbGxTdHJpcFNpemUsIGFnZW50U3RyaXBTaXplXSA9IGFjdGl2aXR5U3RyaXBTaXplcyh0ZXJtaW5hbEhlaWdodCgpLCBbc2hlbGxSb3dzLmxlbmd0aCwgYWdlbnRSb3dzLmxlbmd0aF0sIGFjdGl2aXR5TWFyZ2luKVxuICBpZiAocXVlc3Rpb25SZXF1ZXN0KCkpIHtcbiAgICBmbS5pdGVtKCdxdWVzdGlvbicpXG4gICAgaWYgKCFmbS5pcygncXVlc3Rpb24nKSkgZm0uZm9jdXMoJ3F1ZXN0aW9uJylcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXZpZXdlZEFnZW50SWQoKSAmJiAhdmlld2VkU2hlbGxJZCgpKSBmbS5pdGVtKCdpbnB1dCcpXG4gICAgaWYgKHNoZWxsUm93cy5sZW5ndGggPiAwICYmIGFnZW50Um93cy5sZW5ndGggPiAwKSB7XG4gICAgICBmbS5ncm91cCgnYWN0aXZpdHktc3RyaXAnLCB7IGl0ZW1zOiBbJ2FjdGl2aXR5LW1haW4nLCAuLi5zaGVsbFJvd3MubWFwKChzKSA9PiBgc2hlbGwtJHtzLmlkfWApLCAuLi5hZ2VudFJvd3MubWFwKChhKSA9PiBgYWdlbnQtJHthLmlkfWApXSwgbmF2aWdhdGU6ICdib3RoJywgd3JhcDogdHJ1ZSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2hlbGxSb3dzLmxlbmd0aCA+IDApIGZtLmdyb3VwKCdzaGVsbC1zdHJpcCcsIHsgaXRlbXM6IFsnc2hlbGwtbWFpbicsIC4uLnNoZWxsUm93cy5tYXAoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCldLCBuYXZpZ2F0ZTogJ2JvdGgnLCB3cmFwOiB0cnVlIH0pXG4gICAgICBpZiAoYWdlbnRSb3dzLmxlbmd0aCA+IDApIGZtLmdyb3VwKCdhZ2VudC1zdHJpcCcsIHsgaXRlbXM6IFsnYWdlbnQtbWFpbicsIC4uLmFnZW50Um93cy5tYXAoKGEpID0+IGBhZ2VudC0ke2EuaWR9YCldLCBuYXZpZ2F0ZTogJ2JvdGgnLCB3cmFwOiB0cnVlIH0pXG4gICAgfVxuICAgIGlmIChyZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uICYmICF2aWV3ZWRBZ2VudElkKCkgJiYgIXZpZXdlZFNoZWxsSWQoKSkge1xuICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJRdWVzdGlvbiA9IGZhbHNlXG4gICAgICBmbS5mb2N1cygnaW5wdXQnKVxuICAgIH1cbiAgfVxuICBpZiAod29ya3NwYWNlT3BlbigpKSB7IGZtLml0ZW0oJ3dvcmtzcGFjZScpOyBmbS5mb2N1cygnd29ya3NwYWNlJykgfVxuICBlbHNlIGlmIChyZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSkge1xuICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyV29ya3NwYWNlID0gZmFsc2VcbiAgICBmbS5mb2N1cyhxdWVzdGlvblJlcXVlc3QoKSA/ICdxdWVzdGlvbicgOiAnaW5wdXQnKVxuICB9XG4gIHVzZUZvY3VzVHJhcCh3b3Jrc3BhY2VPcGVuKCkgfHwgYW55UGFuZWwoKSB8fCB2aWV3KCkgPT09ICdoZWxwJylcbiAgdXNlU2VsZWN0aW9uKHtcbiAgICBvbkNvcHk6ICh0ZXh0KSA9PiBmbGFzaChgY29waWVkICR7dGV4dC5sZW5ndGh9ICR7dGV4dC5sZW5ndGggPT09IDEgPyAnY2hhcmFjdGVyJyA6ICdjaGFyYWN0ZXJzJ31gKSxcbiAgfSlcblxuICBmdW5jdGlvbiBuYXZpZ2F0ZUFjdGl2aXR5U3RyaXAoZXZlbnQpIHtcbiAgICBjb25zdCBpdGVtcyA9IFsnYWN0aXZpdHktbWFpbicsIC4uLnNoZWxsUm93cy5tYXAoKHNoZWxsKSA9PiBgc2hlbGwtJHtzaGVsbC5pZH1gKSwgLi4uYWdlbnRSb3dzLm1hcCgoYWdlbnQpID0+IGBhZ2VudC0ke2FnZW50LmlkfWApXVxuICAgIGNvbnN0IGN1cnJlbnQgPSBpdGVtcy5pbmRleE9mKGZtLmN1cnJlbnQoKSlcbiAgICBjb25zdCBwYWdlU2l6ZSA9IGZtLmN1cnJlbnQoKS5zdGFydHNXaXRoKCdzaGVsbC0nKSA/IHNoZWxsU3RyaXBTaXplIDogYWdlbnRTdHJpcFNpemVcbiAgICBsZXQgbmV4dCA9IGN1cnJlbnRcbiAgICBpZiAoIWV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZycpIG5leHQgPSAwXG4gICAgZWxzZSBpZiAoIWV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnRycpIG5leHQgPSBpdGVtcy5sZW5ndGggLSAxXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdkJykgbmV4dCA9IE1hdGgubWluKGl0ZW1zLmxlbmd0aCAtIDEsIGN1cnJlbnQgKyBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHBhZ2VTaXplIC8gMikpKVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAndScpIG5leHQgPSBNYXRoLm1heCgwLCBjdXJyZW50IC0gTWF0aC5tYXgoMSwgTWF0aC5mbG9vcihwYWdlU2l6ZSAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdqJyB8fCBldmVudC5rZXkgPT09ICdkb3duJykgbmV4dCA9IChjdXJyZW50ICsgMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdrJyB8fCBldmVudC5rZXkgPT09ICd1cCcpIG5leHQgPSAoY3VycmVudCAtIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCB0YXJnZXQgPSBpdGVtc1tuZXh0XVxuICAgIGZtLmZvY3VzKHRhcmdldClcbiAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldC5zdGFydHNXaXRoKCdzaGVsbC0nKSA/IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpIDogbnVsbClcbiAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIG5hdmlnYXRlU3RyaXAoZXZlbnQsIHByZWZpeCwgcm93cywgeyBtYWluID0gZmFsc2UsIHByZXZpZXdBZ2VudCA9IGZhbHNlLCBwcmV2aWV3U2hlbGwgPSBmYWxzZSB9ID0ge30pIHtcbiAgICBjb25zdCBpdGVtcyA9IFsuLi4obWFpbiA/IFtgJHtwcmVmaXh9LW1haW5gXSA6IFtdKSwgLi4ucm93cy5tYXAoKHJvdykgPT4gYCR7cHJlZml4fS0ke3Jvdy5pZH1gKV1cbiAgICBjb25zdCBjdXJyZW50ID0gaXRlbXMuaW5kZXhPZihmbS5jdXJyZW50KCkpXG4gICAgbGV0IG5leHQgPSBjdXJyZW50XG4gICAgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2cnKSBuZXh0ID0gMFxuICAgIGVsc2UgaWYgKCFldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ0cnKSBuZXh0ID0gaXRlbXMubGVuZ3RoIC0gMVxuICAgIGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnZCcpIG5leHQgPSBNYXRoLm1pbihpdGVtcy5sZW5ndGggLSAxLCBjdXJyZW50ICsgTWF0aC5tYXgoMSwgTWF0aC5mbG9vcigocHJlZml4ID09PSAnc2hlbGwnID8gc2hlbGxTdHJpcFNpemUgOiBhZ2VudFN0cmlwU2l6ZSkgLyAyKSkpXG4gICAgZWxzZSBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICd1JykgbmV4dCA9IE1hdGgubWF4KDAsIGN1cnJlbnQgLSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKChwcmVmaXggPT09ICdzaGVsbCcgPyBzaGVsbFN0cmlwU2l6ZSA6IGFnZW50U3RyaXBTaXplKSAvIDIpKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdqJyB8fCBldmVudC5rZXkgPT09ICdkb3duJykgbmV4dCA9IChjdXJyZW50ICsgMSArIGl0ZW1zLmxlbmd0aCkgJSBpdGVtcy5sZW5ndGhcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdrJyB8fCBldmVudC5rZXkgPT09ICd1cCcpIG5leHQgPSAoY3VycmVudCAtIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoXG4gICAgZWxzZSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCB0YXJnZXQgPSBpdGVtc1tuZXh0XVxuICAgIGZtLmZvY3VzKHRhcmdldClcbiAgICBpZiAocHJldmlld0FnZW50KSB7XG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgICBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKVxuICAgIH1cbiAgICBpZiAocHJldmlld1NoZWxsKSB7XG4gICAgICBzZXRWaWV3ZWRTaGVsbElkKHRhcmdldCA9PT0gJ3NoZWxsLW1haW4nID8gbnVsbCA6IHRhcmdldC5zbGljZSgnc2hlbGwtJy5sZW5ndGgpKVxuICAgICAgc2V0Rm9sbG93KHRydWUpXG4gICAgfVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHVzZUlucHV0KGFzeW5jIChldmVudCkgPT4ge1xuICAgIGlmICh3b3Jrc3BhY2VPcGVuKCkpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgICBzZXRXb3Jrc3BhY2VQZW5kaW5nKHRydWUpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgYm9vdC53b3Jrc3BhY2UuY2FuY2VsUHJldmlldygpXG4gICAgICAgICAgcmVmcy5mb2N1c0NvbXBvc2VyQWZ0ZXJXb3Jrc3BhY2UgPSB0cnVlXG4gICAgICAgICAgc2V0V29ya3NwYWNlT3BlbihmYWxzZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgcmV0dXJuIGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApXG4gICAgICAgIH0gZmluYWxseSB7IHNldFdvcmtzcGFjZVBlbmRpbmcoZmFsc2UpIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAod29ya3NwYWNlUGVuZGluZygpKSByZXR1cm5cbiAgICAgIGNvbnN0IG5leHQgPSB3b3Jrc3BhY2VOYXZpZ2F0ZSh3b3Jrc3BhY2VTZXNzaW9ucywgd29ya3NwYWNlU2VsZWN0ZWQoKSwgZXZlbnQsIHdvcmtzcGFjZUhlaWdodCgpKVxuICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRXb3Jrc3BhY2VTZWxlY3RlZChuZXh0KVxuICAgICAgICB2b2lkIGJvb3Qud29ya3NwYWNlLnByZXZpZXcobmV4dCkuY2F0Y2goZXJyb3IgPT4gc2V0V29ya3NwYWNlRXJyb3IoYHByZXZpZXcgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YCkpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3Qgcm93ID0gd29ya3NwYWNlU2Vzc2lvbnMuZmluZCgocm93KSA9PiByb3cuaWQgPT09IHdvcmtzcGFjZVNlbGVjdGVkKCkpXG4gICAgICBpZiAoIXJvdykgcmV0dXJuXG4gICAgICBjb25zdCBhdHRhY2ggPSAhZXZlbnQuY3RybCAmJiAhZXZlbnQubWV0YSAmJiAhZXZlbnQuYWx0ICYmIChldmVudC5rZXkgPT09ICdyaWdodCcgfHwgZXZlbnQua2V5ID09PSAnbCcpXG4gICAgICBjb25zdCBhY3Rpb24gPSBldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3gnID8gd29ya3NwYWNlQWN0aW9uKHJvdykgOiBudWxsXG4gICAgICBpZiAoIWF0dGFjaCAmJiAhYWN0aW9uKSByZXR1cm5cbiAgICAgIHNldFdvcmtzcGFjZVBlbmRpbmcodHJ1ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChhdHRhY2gpIHtcbiAgICAgICAgICBhd2FpdCBib290LndvcmtzcGFjZS5zZWxlY3Qocm93LmlkKVxuICAgICAgICAgIHNldElucHV0KCcnKVxuICAgICAgICAgIHNldEhpc3RJZHgoLTEpXG4gICAgICAgICAgc2V0T2Zmc2V0KDApXG4gICAgICAgICAgc2V0VHJhbnNjcmlwdE1ldHJpY3MobnVsbClcbiAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgIGRpc21pc3NDb21wbGV0aW9uKClcbiAgICAgICAgICBzZXRGaWxlc0Rpc21pc3NlZChmYWxzZSlcbiAgICAgICAgICBjb252ZXJzYXRpb25TZWFyY2guY2xvc2UoKVxuICAgICAgICAgIHJlZnMudWkuc2Vzc2lvbigpXG4gICAgICAgICAgcmVmcy51aS5zeW5jKClcbiAgICAgICAgICByZWZzLnVpLmRlcml2ZWQoc3RhdGUuZGVyaXZlZClcbiAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlcldvcmtzcGFjZSA9IHRydWVcbiAgICAgICAgICBzZXRXb3Jrc3BhY2VPcGVuKGZhbHNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGJvb3Qud29ya3NwYWNlW2FjdGlvbl0ocm93LmlkKVxuICAgICAgICAgIGF3YWl0IHJlZnJlc2hXb3Jrc3BhY2UoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzZXRXb3Jrc3BhY2VFcnJvcihgJHthdHRhY2ggPyAnYXR0YWNoJyA6IGFjdGlvbn0gZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICAgIH0gZmluYWxseSB7IHNldFdvcmtzcGFjZVBlbmRpbmcoZmFsc2UpIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAocmVmcy5kaWN0YXRpb25JbnB1dC5oYW5kbGUoZXZlbnQpKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChzdGVlcigpICYmIGZtLmlzKCdzdGVlcicpICYmICFzdGVlcigpLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IGRyYWZ0ID0gc3RlZXIoKVxuICAgICAgY29uc3Qgcm93cyA9IHN0ZWVyUm93cygpXG4gICAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJykgYXBwbHlTdGVlcigpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnKSBjbG9zZVN0ZWVyKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHN0YXJ0U3RlZXJFZGl0KClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2EnKSBzdGFydFN0ZWVyQWRkKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3gnIHx8IGV2ZW50LmtleSA9PT0gJ2QnKSBzdGFnZVN0ZWVyRGVsZXRlKClcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIGRyYWZ0LnNlbGVjdGVkIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBNYXRoLm1pbihNYXRoLm1heCgwLCByb3dzLmxlbmd0aCAtIDEpLCBkcmFmdC5zZWxlY3RlZCArIDEpXG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3Nbc2VsZWN0ZWRdPy5tZXNzYWdlSWQpXG4gICAgICAgIHNldFN0ZWVyKHsgLi4uZHJhZnQsIHNlbGVjdGVkIH0pXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2hvbWUnIHx8IGV2ZW50LmtleSA9PT0gJ2cnKSB7XG4gICAgICAgIHN0ZWVyTGlzdEZvY3VzLmZvY3VzKHJvd3NbMF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQ6IDAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZW5kJyB8fCBldmVudC5rZXkgPT09ICdHJykge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE1hdGgubWF4KDAsIHJvd3MubGVuZ3RoIC0gMSlcbiAgICAgICAgc3RlZXJMaXN0Rm9jdXMuZm9jdXMocm93c1tzZWxlY3RlZF0/Lm1lc3NhZ2VJZClcbiAgICAgICAgc2V0U3RlZXIoeyAuLi5kcmFmdCwgc2VsZWN0ZWQgfSlcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjb252ZXJzYXRpb25TZWFyY2guaGFuZGxlSW5wdXQoZXZlbnQsIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMpKSByZXR1cm5cbiAgICBpZiAoZm0uaXMoJ2FjdGl2aXR5LXN0cmlwJykgJiYgbmF2aWdhdGVBY3Rpdml0eVN0cmlwKGV2ZW50KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkU2hlbGxJZCh0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyB0YXJnZXQuc2xpY2UoJ3NoZWxsLScubGVuZ3RoKSA6IG51bGwpXG4gICAgICBzZXRWaWV3ZWRBZ2VudElkKHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IHRhcmdldC5zbGljZSgnYWdlbnQtJy5sZW5ndGgpIDogbnVsbClcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3Qgc2hlbGwgPSB0YXJnZXQuc3RhcnRzV2l0aCgnc2hlbGwtJykgPyBzaGVsbFJvd3MuZmluZCgocykgPT4gYHNoZWxsLSR7cy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldC5zdGFydHNXaXRoKCdhZ2VudC0nKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnQgPSBpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJyA/IG51bGwgOiBpdGVtXG4gICAgICBpZiAoc2hlbGwpIHNoZWxsLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8ga2lsbFNoZWxsKHNoZWxsKSA6IGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIGlmIChpdGVtPy5yb2xlID09PSAnZGVsaWJlcmF0aW9uJykgc3RvcE9yRGlzbWlzc0RlbGliZXJhdGlvbihpdGVtKVxuICAgICAgZWxzZSBpZiAoYWdlbnQpIFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhhZ2VudC5zdGF0dXMpID8gY2FuY2VsQWdlbnQoYWdlbnQpIDogZGlzbWlzc0FnZW50KGFnZW50KVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZm0uaXMoJ3NoZWxsLXN0cmlwJykgJiYgbmF2aWdhdGVTdHJpcChldmVudCwgJ3NoZWxsJywgc2hlbGxSb3dzLCB7IG1haW46IHRydWUsIHByZXZpZXdTaGVsbDogdHJ1ZSB9KSkgcmV0dXJuXG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIG5hdmlnYXRlU3RyaXAoZXZlbnQsICdhZ2VudCcsIGFnZW50Um93cywgeyBtYWluOiB0cnVlLCBwcmV2aWV3QWdlbnQ6IHRydWUgfSkpIHJldHVyblxuICAgIGlmIChmbS5pcygnc2hlbGwtc3RyaXAnKSAmJiBldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBmbS5jdXJyZW50KClcbiAgICAgIHNldFZpZXdlZFNoZWxsSWQodGFyZ2V0ID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogdGFyZ2V0LnNsaWNlKCdzaGVsbC0nLmxlbmd0aCkpXG4gICAgICBzZXRGb2xsb3codHJ1ZSlcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdzaGVsbC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHNoZWxsID0gZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyBudWxsIDogc2hlbGxSb3dzLmZpbmQoKHMpID0+IGBzaGVsbC0ke3MuaWR9YCA9PT0gZm0uY3VycmVudCgpKVxuICAgICAgaWYgKHNoZWxsKSB7XG4gICAgICAgIGlmIChzaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJykga2lsbFNoZWxsKHNoZWxsKVxuICAgICAgICBlbHNlIGRpc21pc3NTaGVsbChzaGVsbClcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgc2V0Vmlld2VkQWdlbnRJZCh0YXJnZXQgPT09ICdhZ2VudC1tYWluJyA/IG51bGwgOiB0YXJnZXQuc2xpY2UoJ2FnZW50LScubGVuZ3RoKSlcbiAgICAgIHNldEZvbGxvdyh0cnVlKVxuICAgICAgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGZtLmlzKCdhZ2VudC1zdHJpcCcpICYmIGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAneCcpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGZtLmN1cnJlbnQoKVxuICAgICAgY29uc3QgaXRlbSA9IHRhcmdldCA9PT0gJ2FnZW50LW1haW4nID8gbnVsbCA6IGFnZW50Um93cy5maW5kKChyb3cpID0+IGBhZ2VudC0ke3Jvdy5pZH1gID09PSB0YXJnZXQpXG4gICAgICBpZiAoaXRlbT8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbicpIHN0b3BPckRpc21pc3NEZWxpYmVyYXRpb24oaXRlbSlcbiAgICAgIGVsc2UgaWYgKGl0ZW0pIHtcbiAgICAgICAgaWYgKFsncXVldWVkJywgJ3J1bm5pbmcnXS5pbmNsdWRlcyhpdGVtLnN0YXR1cykpIGNhbmNlbEFnZW50KGl0ZW0pXG4gICAgICAgIGVsc2UgZGlzbWlzc0FnZW50KGl0ZW0pXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdlc2NhcGUnICYmIGJ1c3koKSAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgaW50ZXJydXB0KClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcbiAgICAgIGlmIChub3cgLSByZWZzLnF1aXRBdCA8IDE1MDApIHtcbiAgICAgICAgYXdhaXQgY3RsLnNodXRkb3duKClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWZzLnF1aXRBdCA9IG5vd1xuICAgICAgICBjb25zdCBydW5uaW5nID0gYm9vdC5zaGVsbHMucnVubmluZygpXG4gICAgICAgIGZsYXNoKHJ1bm5pbmcgPyBgJHtydW5uaW5nfSAke3J1bm5pbmcgPT09IDEgPyAnc2hlbGwnIDogJ3NoZWxscyd9IHJ1bm5pbmcgIGN0cmwrYyBhZ2FpbiB0byBleGl0IGFuZCBraWxsICR7cnVubmluZyA9PT0gMSA/ICdpdCcgOiAndGhlbSd9YCA6ICdjdHJsK2MgYWdhaW4gdG8gZXhpdCcpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChmbS5pcygnZmVlZCcpICYmIGV2ZW50LmtleSA9PT0gJy8nKSB7XG4gICAgICBhd2FpdCBsb2FkRnVsbEhpc3RvcnkoKVxuICAgICAgY29udmVyc2F0aW9uU2VhcmNoLm9wZW4oKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdyJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgYXdhaXQgbG9hZEZ1bGxIaXN0b3J5KClcbiAgICAgIGlmIChidXN5KCkpIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gZmlyc3QnKVxuICAgICAgZWxzZSBpZiAodXNlckVudHJpZXMoZGVyaXZlZCgpKS5sZW5ndGggPT09IDApIGZsYXNoKCdub3RoaW5nIHRvIHJld2luZCB5ZXQnKVxuICAgICAgZWxzZSBzZXRSZXdpbmRTdGVwKCdwaWNrJylcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkpIHtcbiAgICAgIGlmIChidXN5KCkpIGZsYXNoKCdmaW5pc2ggb3IgaW50ZXJydXB0IHRoZSBjdXJyZW50IHR1cm4gYmVmb3JlIHN3aXRjaGluZyBzZXNzaW9ucycpXG4gICAgICBlbHNlIG9wZW5SZXN1bWVQYW5lbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3QnICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBzZXRTaG93TW9kZWxQYW5lbCh0cnVlKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdwJyAmJiB2aWV3KCkgPT09ICdjaGF0JyAmJiAhYW55UGFuZWwoKSkge1xuICAgICAgb3BlblByb2plY3RQYW5lbCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ2InICYmIHZpZXcoKSA9PT0gJ2NoYXQnICYmICFhbnlQYW5lbCgpKSB7XG4gICAgICBpZiAoIWVmZm9ydEFwcGxpZXMoKSkgZmxhc2goYCR7bW9kZWwoKS5uYW1lfSBkb2VzIG5vdCBzdXBwb3J0IGVmZm9ydCBjb250cm9sYClcbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBvcmRlciA9IFtudWxsLCAnbG93JywgJ21lZGl1bScsICdoaWdoJywgJ21heCddXG4gICAgICAgIGNvbnN0IG5leHQgPSBvcmRlclsob3JkZXIuaW5kZXhPZihlZmZvcnQoKSA/PyBudWxsKSArIDEpICUgb3JkZXIubGVuZ3RoXVxuICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KG5leHQpXG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3MnICYmIHNob3dIaXN0b3J5UGFuZWwoKSkge1xuICAgICAgc3dpdGNoSGlzdFNjb3BlKChoaXN0U2NvcGUoKSArIDEpICUgSElTVE9SWV9TQ09QRVMubGVuZ3RoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZXZlbnQuY3RybCAmJiBldmVudC5rZXkgPT09ICdzJyAmJiBzaG93TWVtb3J5UGFuZWwoKSkge1xuICAgICAgc2V0TWVtU2NvcGUoKHMpID0+IChzICsgMSkgJSBNRU1PUllfU0NPUEVTLmxlbmd0aClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAncycgJiYgc2hvd1Jlc3VtZVBhbmVsKCkpIHtcbiAgICAgIGNvbnN0IG5leHQgPSAocmVzdW1lU2NvcGUoKSArIDEpICUgcmVzdW1lU2NvcGVzKCkubGVuZ3RoXG4gICAgICBzZXRSZXN1bWVTY29wZShuZXh0KVxuICAgICAgcmVmcmVzaFNlc3Npb25zKG5leHQpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChldmVudC5jdHJsICYmIGV2ZW50LmtleSA9PT0gJ3onICYmIHN0YXRlLnJld2luZFVuZG8gJiYgIWJ1c3koKSAmJiB2aWV3KCkgPT09ICdjaGF0Jykge1xuICAgICAgdW5kb1Jld2luZCgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBmbXRFbGFwc2VkID0gKHMpID0+IChzIDwgNjAgPyBgJHtzfXNgIDogYCR7TWF0aC5mbG9vcihzIC8gNjApfW0gJHtzICUgNjB9c2ApXG4gIGNvbnN0IGVsYXBzZWQgPSBmbXRFbGFwc2VkKGJ1c3koKSA/IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBzdGFydGVkQXQoKSkgLyAxMDAwKSkgOiAwKVxuXG4gIGNvbnN0IHNsYXNoUmFuZ2UgPSBjb21tYW5kQXQoaW5wdXQoKSwgaW5wdXRDdXJzb3IoKSlcbiAgY29uc3Qgc2xhc2hRdWVyeSA9IHNsYXNoUmFuZ2U/LnF1ZXJ5ID8/IG51bGxcbiAgY29uc3Qgc2hvd0NvbW1hbmRzID0gc2xhc2hSYW5nZSAhPT0gbnVsbCAmJiAhYW55UGFuZWwoKVxuICBjb25zdCBtYXRjaGVkQ29tbWFuZHMgPSAhc2hvd0NvbW1hbmRzXG4gICAgPyBbXVxuICAgIDogY21kQ3ljbGUoKVxuICAgICAgPyBjbWRDeWNsZSgpLm1hdGNoZXNcbiAgICAgIDogYWxsQ29tbWFuZHMuZmlsdGVyKChjKSA9PiAoYy5jb21tYW5kIHx8IChzbGFzaFJhbmdlLnN0YXJ0ID09PSAwICYmIHNsYXNoUmFuZ2UuZW5kID09PSBpbnB1dCgpLmxlbmd0aCkpICYmIGMubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoc2xhc2hRdWVyeS50b0xvd2VyQ2FzZSgpKSlcblxuICBjb25zdCBhdE1hdGNoID0gaW5wdXQoKS5tYXRjaCgvKF58W1xccyhdKUAoW15cXHNAXSopJC8pXG4gIGNvbnN0IHNob3dGaWxlcyA9IGF0TWF0Y2ggIT09IG51bGwgJiYgIXNob3dDb21tYW5kcyAmJiAhZmlsZXNEaXNtaXNzZWQoKSAmJiAhYW55UGFuZWwoKVxuICBpZiAoc2hvd0ZpbGVzKSB7XG4gICAgbGlzdEZpbGVzKGN3ZCkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgIGlmIChmaWxlcyAhPT0gZmlsZUxpc3QoKSkgc2V0RmlsZUxpc3QoZmlsZXMpXG4gICAgfSlcbiAgfVxuICBjb25zdCBtYXRjaGVkRmlsZXMgPSBzaG93RmlsZXNcbiAgICA/IGZpbGVMaXN0KClcbiAgICAgICAgLm1hcCgoZikgPT4gW2Z1enp5U2NvcmUoYXRNYXRjaFsyXSwgZiksIGZdKVxuICAgICAgICAuZmlsdGVyKChbc2NvcmVdKSA9PiBzY29yZSA+PSAwKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYlswXSAtIGFbMF0pXG4gICAgICAgIC5tYXAoKFssIGZdKSA9PiBmKVxuICAgIDogW11cblxuICBhc3luYyBmdW5jdGlvbiBwaWNrRmlsZShmKSB7XG4gICAgY29uc3QgdiA9IGlucHV0KClcbiAgICBjb25zdCBhdCA9IHYubGFzdEluZGV4T2YoJ0AnKVxuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gYXdhaXQgY3RsLmF0dGFjaFByb2plY3RGaWxlKGYpXG4gICAgaWYgKHBsYWNlaG9sZGVyKSB7XG4gICAgICBzZXRJbnB1dCh2LnNsaWNlKDAsIGF0KSArIHBsYWNlaG9sZGVyICsgJyAnKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJbnB1dCh2LnNsaWNlKDAsIGF0ICsgMSkgKyBmICsgJyAnKVxuICAgIH1cbiAgICBzZXRGaWxlSW5kZXgoMClcbiAgfVxuXG4gIGNvbnN0IGNvbXBDdHggPSBjb21wbGV0aW5nKCkgPyBjb21wbGV0aW9uQ29udGV4dCh7IHZhbHVlOiBpbnB1dCgpLCByZXNvbHZlOiBjb21wbGV0aW9uU291cmNlIH0pIDogbnVsbFxuICBjb25zdCBzaG93Q29tcGxldGlvbiA9ICEhY29tcEN0eCAmJiBjb21wQ3R4Lm1hdGNoZXMubGVuZ3RoID4gMCAmJiAhc2hvd0NvbW1hbmRzICYmICFzaG93RmlsZXMgJiYgIWFueVBhbmVsKClcblxuICBjb25zdCByZXdpbmRFbnRyaWVzID0gKCkgPT4gdXNlckVudHJpZXMoZGVyaXZlZCgpKVxuICBjb25zdCByZXdpbmRPcHRpb25zID0gKCgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSByZXdpbmRUYXJnZXQoKVxuICAgIGlmICghdGFyZ2V0KSByZXR1cm4gW11cbiAgICBjb25zdCB7IG1zZ3MsIGVkaXRzIH0gPSByZXdpbmRTdGF0cyhkZXJpdmVkKCksIHRhcmdldC5pbmRleClcbiAgICBjb25zdCBlID0gZWRpdHMubGVuZ3RoXG4gICAgY29uc3QgZWRpdHNMYWJlbCA9IGAke2V9ICR7ZSA9PT0gMSA/ICdlZGl0JyA6ICdlZGl0cyd9YFxuICAgIGNvbnN0IG9wdHMgPSBbXVxuICAgIGlmIChlID4gMCkgb3B0cy5wdXNoKHsga2V5OiAnYm90aCcsIGxhYmVsOiAncmVzdG9yZSBjb2RlIGFuZCBjb252ZXJzYXRpb24nLCBkZXNjOiBgY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgJHtlZGl0c0xhYmVsfSByZXZlcnRlZGAgfSlcbiAgICBvcHRzLnB1c2goe1xuICAgICAga2V5OiAnY2hhdCcsXG4gICAgICBsYWJlbDogZSA+IDAgPyAncmVzdG9yZSBjb252ZXJzYXRpb24gb25seScgOiAncmVzdG9yZSBjb252ZXJzYXRpb24nLFxuICAgICAgZGVzYzogZSA+IDAgPyAnY2hhdCByZXR1cm5zIHRvIHRoaXMgbWVzc2FnZSAgZmlsZSBjaGFuZ2VzIGtlcHQnIDogYGNoYXQgcmV0dXJucyB0byB0aGlzIG1lc3NhZ2UgIGRyb3BzICR7bXNnc30gZW50cmllc2AsXG4gICAgfSlcbiAgICBpZiAoZSA+IDApIG9wdHMucHVzaCh7IGtleTogJ2NvZGUnLCBsYWJlbDogJ3Jlc3RvcmUgY29kZSBvbmx5JywgZGVzYzogYGNvbnZlcnNhdGlvbiBrZXB0ICAke2VkaXRzTGFiZWx9IHJldmVydGVkYCB9KVxuICAgIG9wdHMucHVzaCh7IGtleTogJ3N1bW1hcnknLCBsYWJlbDogJ3Jld2luZCBhbmQga2VlcCBhIHN1bW1hcnknLCBkZXNjOiAnZHJvcHBlZCBlbnRyaWVzIGNvbGxhcHNlIGludG8gYSBvbmUtbGluZSBub3RlJyB9KVxuICAgIHJldHVybiBvcHRzXG4gIH0pKClcblxuICBjb25zdCB1c2FnZSA9IGxpdmVVc2FnZSgpIHx8IGRlcml2ZWQoKS51c2FnZUFjdGl2ZVxuICBjb25zdCBjb250ZXh0UGVyY2VudCA9IG1vZGVsKCkuY29udGV4dCA+IDAgJiYgZGVyaXZlZCgpLmxhc3RQcm9tcHRUb2tlbnMgPiAwICYmIGRlcml2ZWQoKS5sYXN0UHJvbXB0TW9kZWwgPT09IG1vZGVsKCkubmFtZVxuICAgID8gTWF0aC5taW4oMTAwLCBNYXRoLnJvdW5kKChkZXJpdmVkKCkubGFzdFByb21wdFRva2VucyAvIG1vZGVsKCkuY29udGV4dCkgKiAxMDApKVxuICAgIDogMFxuICBjb25zdCB2aXNpYmxlU2hlbGxzID0gc2hlbGxSb3dzXG4gIGNvbnN0IHZpZXdlZFNoZWxsID0gdmlld2VkU2hlbGxJZCgpID8gdmlzaWJsZVNoZWxscy5maW5kKChzKSA9PiBzLmlkID09PSB2aWV3ZWRTaGVsbElkKCkpIDogbnVsbFxuICBjb25zdCBjb21iaW5lZEFjdGl2aXR5ID0gdmlzaWJsZVNoZWxscy5sZW5ndGggPiAwICYmIGFnZW50Um93cy5sZW5ndGggPiAwXG4gIGNvbnN0IHNoZWxsU3RyaXBGb2N1cyA9IGZtLmlzKCdzaGVsbC1zdHJpcCcpIHx8IChmbS5pcygnYWN0aXZpdHktc3RyaXAnKSAmJiBmbS5jdXJyZW50KCkuc3RhcnRzV2l0aCgnc2hlbGwtJykpID8gZm0uY3VycmVudCgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkU2hlbGxJZCA9IHNoZWxsU3RyaXBGb2N1cyAmJiBzaGVsbFN0cmlwRm9jdXMgIT09ICdzaGVsbC1tYWluJyA/IHNoZWxsU3RyaXBGb2N1cy5zbGljZSgnc2hlbGwtJy5sZW5ndGgpIDogbnVsbFxuICBjb25zdCBmb2N1c2VkU2hlbGwgPSBmb2N1c2VkU2hlbGxJZCA/IHZpc2libGVTaGVsbHMuZmluZCgocykgPT4gcy5pZCA9PT0gZm9jdXNlZFNoZWxsSWQpIDogbnVsbFxuICBjb25zdCBoaW50ZWRTaGVsbCA9IGZvY3VzZWRTaGVsbCB8fCB2aWV3ZWRTaGVsbFxuICBjb25zdCBzaGVsbEFjdGlvbkhpbnQgPSBoaW50ZWRTaGVsbCA/IGBjdHJsK3ggJHtoaW50ZWRTaGVsbC5zdGF0dXMgPT09ICdydW5uaW5nJyA/ICdraWxsJyA6ICdkaXNtaXNzJ31gIDogJydcbiAgY29uc3Qgc2hlbGxXaW5kb3dUYXJnZXQgPSBzaGVsbFN0cmlwRm9jdXMgPT09ICdzaGVsbC1tYWluJyA/IDAgOiB2aXNpYmxlU2hlbGxzLmZpbmRJbmRleCgocykgPT4gcy5pZCA9PT0gKGZvY3VzZWRTaGVsbElkIHx8IHZpZXdlZFNoZWxsSWQoKSkpXG4gIGNvbnN0IHNoZWxsV2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KHNoZWxsV2luZG93T2Zmc2V0KCksIHNoZWxsV2luZG93VGFyZ2V0LCB2aXNpYmxlU2hlbGxzLmxlbmd0aCwgc2hlbGxTdHJpcFNpemUpXG4gIGlmIChzaGVsbFdpbmRvd1N0YXJ0ICE9PSBzaGVsbFdpbmRvd09mZnNldCgpKSBzZXRTaGVsbFdpbmRvd09mZnNldChzaGVsbFdpbmRvd1N0YXJ0KVxuICBjb25zdCBzaGVsbFdpbmRvdyA9IHZpc2libGVTaGVsbHMuc2xpY2Uoc2hlbGxXaW5kb3dTdGFydCwgc2hlbGxXaW5kb3dTdGFydCArIHNoZWxsU3RyaXBTaXplKVxuICBhZ2VudHNWZXJzaW9uKClcbiAgY29uc3QgdmlzaWJsZUFnZW50cyA9IGFnZW50Um93c1xuICBjb25zdCB2aWV3ZWRBZ2VudCA9IHZpZXdlZEFnZW50SWQoKSA/IGFnZW50Um93cy5maW5kKChyb3cpID0+IHJvdy5pZCA9PT0gdmlld2VkQWdlbnRJZCgpKSA6IG51bGxcbiAgY29uc3QgYWdlbnRTdHJpcEZvY3VzID0gZm0uaXMoJ2FnZW50LXN0cmlwJykgfHwgKGZtLmlzKCdhY3Rpdml0eS1zdHJpcCcpICYmIGZtLmN1cnJlbnQoKS5zdGFydHNXaXRoKCdhZ2VudC0nKSkgPyBmbS5jdXJyZW50KCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudElkID0gYWdlbnRTdHJpcEZvY3VzICYmIGFnZW50U3RyaXBGb2N1cyAhPT0gJ2FnZW50LW1haW4nID8gYWdlbnRTdHJpcEZvY3VzLnNsaWNlKCdhZ2VudC0nLmxlbmd0aCkgOiBudWxsXG4gIGNvbnN0IGZvY3VzZWRBZ2VudCA9IGZvY3VzZWRBZ2VudElkID8gYWdlbnRSb3dzLmZpbmQoKHJvdykgPT4gcm93LmlkID09PSBmb2N1c2VkQWdlbnRJZCkgOiBudWxsXG4gIGNvbnN0IGhpbnRlZEFnZW50ID0gZm9jdXNlZEFnZW50IHx8IHZpZXdlZEFnZW50XG4gIGNvbnN0IGFnZW50QWN0aW9uSGludCA9IGhpbnRlZEFnZW50XG4gICAgPyBgY3RybCt4ICR7WydxdWV1ZWQnLCAncnVubmluZyddLmluY2x1ZGVzKGhpbnRlZEFnZW50LnN0YXR1cykgPyAnY2FuY2VsJyA6ICdkaXNtaXNzJ31gXG4gICAgOiAnJ1xuICBjb25zdCBhZ2VudFdpbmRvd1RhcmdldCA9IGFnZW50U3RyaXBGb2N1cyA9PT0gJ2FnZW50LW1haW4nXG4gICAgPyAwXG4gICAgOiB2aXNpYmxlQWdlbnRzLmZpbmRJbmRleCgoYSkgPT4gYS5pZCA9PT0gKGZvY3VzZWRBZ2VudElkIHx8IHZpZXdlZEFnZW50SWQoKSkpXG4gIGNvbnN0IGFnZW50V2luZG93U3RhcnQgPSBzdHJpcFdpbmRvd1N0YXJ0KGFnZW50V2luZG93T2Zmc2V0KCksIGFnZW50V2luZG93VGFyZ2V0LCB2aXNpYmxlQWdlbnRzLmxlbmd0aCwgYWdlbnRTdHJpcFNpemUpXG4gIGlmIChhZ2VudFdpbmRvd1N0YXJ0ICE9PSBhZ2VudFdpbmRvd09mZnNldCgpKSBzZXRBZ2VudFdpbmRvd09mZnNldChhZ2VudFdpbmRvd1N0YXJ0KVxuICBjb25zdCBhZ2VudFdpbmRvdyA9IHZpc2libGVBZ2VudHMuc2xpY2UoYWdlbnRXaW5kb3dTdGFydCwgYWdlbnRXaW5kb3dTdGFydCArIGFnZW50U3RyaXBTaXplKVxuICBjb25zdCBwZW5kaW5nV2FrZXVwcyA9IGJvb3Qud2FrZXVwcy5wZW5kaW5nKClcbiAgZ2l0VmVyc2lvbigpXG4gIGNvbnN0IGdpdEluZm8gPSBnaXRGb290ZXIoKSA/IGJvb3QuZ2l0LnN0YXR1cygpIDogbnVsbFxuXG4gIGlmICh2aWV3KCkgPT09ICdoZWxwJykge1xuICAgIHJldHVybiA8SGVscCBjb21tYW5kcz17Q09NTUFORFN9IG9uQ2xvc2U9eygpID0+IHNldFZpZXcoJ2NoYXQnKX0gLz5cbiAgfVxuXG4gIGhpZ2hsaWdodFZlcnNpb24oKVxuXG4gIGNvbnN0IG1haW5UcmFuc2NyaXB0ID0gc3RlZXIoKSA/IHN0ZWVyUHJldmlldygpLnRyYW5zY3JpcHQgOiBkZXJpdmVkKCkudHJhbnNjcmlwdFxuICBjb25zdCBzZWxlY3RlZFN0ZWVyTWVzc2FnZUlkID0gc3RlZXJSb3dzKClbc3RlZXIoKT8uc2VsZWN0ZWRdPy5tZXNzYWdlSWRcbiAgY29uc3QgZGVjb3JhdGVkVHJhbnNjcmlwdCA9IHN0ZWVyKCkgPyBtYWluVHJhbnNjcmlwdC5tYXAoKGl0ZW0pID0+ICh7XG4gICAgLi4uaXRlbSxcbiAgICBzdGVlclNlbGVjdGVkOiBpdGVtLm1lc3NhZ2VJZCA9PT0gc2VsZWN0ZWRTdGVlck1lc3NhZ2VJZCxcbiAgfSkpIDogbWFpblRyYW5zY3JpcHRcbiAgY29uc3QgYWN0aXZlU2hlbGwgPSBzaGVsbFN0cmlwRm9jdXMgPyBmb2N1c2VkU2hlbGwgOiBhZ2VudFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkU2hlbGxcbiAgY29uc3QgYWN0aXZlQWdlbnQgPSBhZ2VudFN0cmlwRm9jdXMgPyBmb2N1c2VkQWdlbnQgOiBzaGVsbFN0cmlwRm9jdXMgPyBudWxsIDogdmlld2VkQWdlbnRcbiAgbGV0IHNoZWxsT3V0cHV0ID0gbnVsbFxuICBpZiAoYWN0aXZlU2hlbGwpIHtcbiAgICB0cnkgeyBzaGVsbE91dHB1dCA9IGJvb3Quc2hlbGxzLm91dHB1dChhY3RpdmVTaGVsbC5pZCwgeyB0YWlsOiAyMDAwIH0pIH0gY2F0Y2gge31cbiAgfVxuICBjb25zdCBzaGVsbFRyYW5zY3JpcHQgPSBhY3RpdmVTaGVsbCA/IFtcbiAgICB7IGtpbmQ6ICdzaGVsbC1jb21tYW5kJywgdGV4dDogYWN0aXZlU2hlbGwuY29tbWFuZCB9LFxuICAgIHsga2luZDogJ3NoZWxsLW91dHB1dCcsIHRleHQ6IHNoZWxsT3V0cHV0Py5vdXRwdXQgfHwgJ25vIG91dHB1dCB5ZXQnIH0sXG4gIF0gOiBudWxsXG4gIGNvbnN0IHRyYW5zY3JpcHRTb3VyY2UgPSBhY3RpdmVTaGVsbCA/IGBzaGVsbDoke2FjdGl2ZVNoZWxsLmlkfWAgOiBhY3RpdmVBZ2VudCA/IGBhZ2VudDoke2FjdGl2ZUFnZW50LmlkfWAgOiAnbWFpbidcbiAgY29uc3QgbGl2ZVBlZXJJZHMgPSBuZXcgU2V0KG92ZXJsYXkoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3BlZXInKS5tYXAoKGl0ZW0pID0+IGl0ZW0ubWVzc2FnZUlkKSlcbiAgY29uc3QgdW5yZWFkUGVlcnMgPSBkZWNvcmF0ZWRUcmFuc2NyaXB0LmZpbHRlcihpdGVtID0+IGl0ZW0ua2luZCA9PT0gJ3BlZXInICYmIGl0ZW0uZGlyZWN0aW9uID09PSAnaW5jb21pbmcnICYmICFpdGVtLnJlYWQpXG4gIGNvbnN0IHVucmVhZFBlZXJJZHMgPSBuZXcgU2V0KHVucmVhZFBlZXJzLm1hcChpdGVtID0+IGl0ZW0ubWVzc2FnZUlkKSlcbiAgY29uc3QgdHJhbnNjcmlwdCA9IHNoZWxsVHJhbnNjcmlwdCB8fCAoYWN0aXZlQWdlbnQgPyBhZ2VudFRyYW5zY3JpcHQoYWN0aXZlQWdlbnQpIDogZGVjb3JhdGVkVHJhbnNjcmlwdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCAhPT0gJ3BlZXInIHx8ICghbGl2ZVBlZXJJZHMuaGFzKGl0ZW0ubWVzc2FnZUlkKSAmJiAhdW5yZWFkUGVlcklkcy5oYXMoaXRlbS5tZXNzYWdlSWQpKSkpXG4gIGNvbnN0IGRlbGliZXJhdGlvblZpZXcgPSBhY3RpdmVBZ2VudD8ucm9sZSA9PT0gJ2RlbGliZXJhdGlvbidcbiAgY29uc3QgaXNvbGF0ZWRUcmFuc2NyaXB0ID0gYWN0aXZlQWdlbnQgfHwgYWN0aXZlU2hlbGxcbiAgY29uc3QgZ3JvdXBJdGVtcyA9IChzb3VyY2UsIGFjdGl2ZSA9IGZhbHNlKSA9PiBzdGVlcigpXG4gICAgPyBjb2xsYXBzZVN0ZWVyVG9vbHMoc291cmNlKVxuICAgIDogY29tcGFjdFRvb2xIaXN0b3J5KClcbiAgICAgID8gY29tcGFjdFRyYW5zY3JpcHRSdW5zKHNvdXJjZSwgYWN0aXZlKVxuICAgICAgOiBzb3VyY2VcbiAgY29uc3QgdHJhbnNjcmlwdEl0ZW1zID0gZ3JvdXBJdGVtcyh0cmFuc2NyaXB0LCBhY3RpdmVBZ2VudD8uc3RhdHVzID09PSAncnVubmluZycpXG4gIGNvbnN0IHdpbmRvd2VkID0gZGVsaWJlcmF0aW9uVmlldyA/IHsgaXRlbXM6IHRyYW5zY3JpcHRJdGVtcywgaGlkZGVuSXRlbXM6IDAsIGhpZGRlbkNvdW50OiAwIH0gOiB0cmFuc2NyaXB0V2luZG93KHRyYW5zY3JpcHRJdGVtcywgaGlzdFdpbmRvdygpKVxuICBjb25zdCBoaWRkZW5Db3VudCA9IHdpbmRvd2VkLmhpZGRlbkNvdW50ICsgKCFhY3RpdmVBZ2VudCAmJiAhYWN0aXZlU2hlbGwgPyBkZXJpdmVkKCkudHJhbnNjcmlwdE9mZnNldCB8fCAwIDogMClcbiAgY29uc3QgdmlzaWJsZUl0ZW1zID0gaXNvbGF0ZWRUcmFuc2NyaXB0ID8gd2luZG93ZWQuaXRlbXMgOiBbLi4ud2luZG93ZWQuaXRlbXMsIC4uLmdyb3VwSXRlbXMob3ZlcmxheSgpLCB0dXJuUGhhc2UoKSA9PT0gJ3Rvb2xzJyksIC4uLihzdHJlYW1pbmcoKSA/IFt7IGtpbmQ6ICdhc3Npc3RhbnQnLCB0ZXh0OiBgJHtzdHJlYW1pbmcoKX1cdTI1OEJgIH1dIDogW10pLCAuLi51bnJlYWRQZWVyc11cbiAgY29uc3QgcHJlcGFyZWRDb252ZXJzYXRpb24gPSBjb252ZXJzYXRpb25TZWFyY2gucHJlcGFyZSh2aXNpYmxlSXRlbXMpXG4gIGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXMgPSBwcmVwYXJlZENvbnZlcnNhdGlvbi5tYXRjaGVzXG4gIGNvbnN0IGl0ZW1zID0gcHJlcGFyZWRDb252ZXJzYXRpb24uaXRlbXNcblxuICBjb25zdCB3b3Jrc3BhY2VXaWR0aCA9IE1hdGgubWluKDM4LCBNYXRoLm1heCgxOCwgTWF0aC5mbG9vcih0ZXJtaW5hbFdpZHRoKCkgLyAzKSkpXG4gIGNvbnN0IHdpZGVMYXlvdXQgPSB3aWRlU2lkZWJhcigpICYmIHRlcm1pbmFsV2lkdGgoKSAtICh3b3Jrc3BhY2VPcGVuKCkgPyB3b3Jrc3BhY2VXaWR0aCA6IDApID4gMTYwXG5cbiAgaWYgKHNob3dNZW1vcnlQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZW1vcnlQYW5lbFxuICAgICAgICBtZW1vcmllcz17bWVtb3J5TGlzdCgpLmZpbHRlcigobSkgPT4gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSA9PT0gJ2FsbCcgfHwgbS5zY29wZSA9PT0gTUVNT1JZX1NDT1BFU1ttZW1TY29wZSgpXSl9XG4gICAgICAgIHNjb3Blcz17TUVNT1JZX1NDT1BFU31cbiAgICAgICAgc2NvcGVJbmRleD17bWVtU2NvcGUoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblRvZ2dsZURpc2FibGVkPXt0b2dnbGVNZW1vcnlEaXNhYmxlZH1cbiAgICAgICAgb25Gb3JnZXQ9e2ZvcmdldE1lbW9yeX1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01lbW9yeVBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dNY3BQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNY3BQYW5lbFxuICAgICAgICBzZXJ2ZXJzPXttY3BTZXJ2ZXJzKCl9XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25Ub2dnbGU9eyhuYW1lKSA9PiBtY3AudG9nZ2xlKG5hbWUpfVxuICAgICAgICBvblJlY29ubmVjdD17KG5hbWUpID0+IG1jcC5yZWNvbm5lY3QobmFtZSl9XG4gICAgICAgIG9uUmVtb3ZlPXsobmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy5tY3BSZW1vdmVBcm1cbiAgICAgICAgICBpZiAoIWFybWVkIHx8IGFybWVkLm5hbWUgIT09IG5hbWUgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgcmVmcy5tY3BSZW1vdmVBcm0gPSB7IG5hbWUsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgIHJldHVybiBmbGFzaChgY3RybCt4IGFnYWluIHRvIHJlbW92ZSBcIiR7bmFtZX1cIiBhbmQgaXRzIGNvbmZpZ2ApXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlZnMubWNwUmVtb3ZlQXJtID0gbnVsbFxuICAgICAgICAgIG1jcC5yZW1vdmUobmFtZSlcbiAgICAgICAgICBmbGFzaChgcmVtb3ZlZCBtY3Agc2VydmVyICR7bmFtZX1gKVxuICAgICAgICB9fVxuICAgICAgICBvbkFkZD17KG5hbWUsIGNvbW1hbmQsIHNjb3BlKSA9PiB7XG4gICAgICAgICAgbWNwLmFkZChuYW1lLCBjb21tYW5kLCBzY29wZSlcbiAgICAgICAgICBmbGFzaChgYWRkZWQgJHtuYW1lfSAoJHtzY29wZX0pYClcbiAgICAgICAgfX1cbiAgICAgICAgb25FZGl0PXsobmFtZSwgY29tbWFuZCkgPT4ge1xuICAgICAgICAgIG1jcC51cGRhdGUobmFtZSwgY29tbWFuZClcbiAgICAgICAgICBmbGFzaChgdXBkYXRlZCAke25hbWV9YClcbiAgICAgICAgfX1cbiAgICAgICAgb25JbnZhbGlkPXtmbGFzaH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd01jcFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dSZXN1bWVQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxSZXN1bWVQYW5lbFxuICAgICAgICBzZXNzaW9ucz17cmVzdW1lU2Vzc2lvbnMoKX1cbiAgICAgICAgc2NvcGVzPXtyZXN1bWVTY29wZXMoKX1cbiAgICAgICAgc2NvcGVJbmRleD17cmVzdW1lU2NvcGUoKX1cbiAgICAgICAgbG9hZGluZz17cmVzdW1lTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIGN1cnJlbnRJZD17c3RhdGUuc2Vzc2lvbj8uaWR9XG4gICAgICAgIG9uUGljaz17KG1ldGEpID0+IHtcbiAgICAgICAgICBpZiAobWV0YS5oZWFkZXIuaWQgPT09IHN0YXRlLnNlc3Npb24/LmlkKSByZXR1cm4gc2V0U2hvd1Jlc3VtZVBhbmVsKGZhbHNlKVxuICAgICAgICAgIHJlc3VtZVNlc3Npb24obWV0YSlcbiAgICAgICAgfX1cbiAgICAgICAgb25EZWxldGU9e2RlbGV0ZVNlc3Npb25NZXRhfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UmVzdW1lUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBpZiAoc2hvd1Byb2plY3RQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxQcm9qZWN0UGFuZWxcbiAgICAgICAgcHJvamVjdHM9e3Byb2plY3RzKCl9XG4gICAgICAgIGxvYWRpbmc9e3Byb2plY3RzTG9hZGluZygpfVxuICAgICAgICBmb2N1c2VkXG4gICAgICAgIG9uUGlja0NoZWNrb3V0PXsoY2hlY2tvdXQpID0+IGNoZWNrb3V0LmxhdGVzdCA/IHJlc3VtZVNlc3Npb24oY2hlY2tvdXQubGF0ZXN0KSA6IGN0bC5zd2l0Y2hUb1dvcmt0cmVlKGNoZWNrb3V0KS50aGVuKCgpID0+IHNldFNob3dQcm9qZWN0UGFuZWwoZmFsc2UpKX1cbiAgICAgICAgb25QaWNrU2Vzc2lvbj17cmVzdW1lU2Vzc2lvbn1cbiAgICAgICAgb25BZGRXb3JrdHJlZT17YWRkUHJvamVjdFdvcmt0cmVlfVxuICAgICAgICBvbkRlbGV0ZT17ZGVsZXRlUHJvamVjdENoZWNrb3V0fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UHJvamVjdFBhbmVsKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgaWYgKHNob3dDb25maWdQYW5lbCgpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDb25maWdQYW5lbFxuICAgICAgICB2YWx1ZXM9e3sgY2xvdWRzOiBjbG91ZHMoKSwgY29tcGFjdFRvb2xzOiBjb21wYWN0VG9vbEhpc3RvcnkoKSwgZ2l0U3RhdHVzOiBnaXRGb290ZXIoKSwgd2lkZVNpZGViYXI6IHdpZGVTaWRlYmFyKCksIHJlc2VhcmNoTW9kZWw6IGJvb3QucmVzZWFyY2hNb2RlbCwgc2hlbGxNb2RlbDogYm9vdC5zaGVsbE1vZGVsLCBkZWxpYmVyYXRpb25Nb2RlbDogYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCwgcGFydGljaXBhbnRBTW9kZWw6IGJvb3QucGFydGljaXBhbnRBTW9kZWwsIHBhcnRpY2lwYW50Qk1vZGVsOiBib290LnBhcnRpY2lwYW50Qk1vZGVsLCByZXNlYXJjaEFnZW50TGltaXQ6IHJlc2VhcmNoQWdlbnRMaW1pdCgpIH19XG4gICAgICAgIGZvY3VzZWRcbiAgICAgICAgb25QaWNrU2hlbGxNb2RlbD17KCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGluZ1NoZWxsTW9kZWwodHJ1ZSlcbiAgICAgICAgICBzZXRSZXNlYXJjaE1vZGVsUmV0dXJuKCdjb25maWcnKVxuICAgICAgICAgIHNldFNob3dDb25maWdQYW5lbChmYWxzZSlcbiAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKHRydWUpXG4gICAgICAgIH19XG4gICAgICAgIG9uUGlja1Jlc2VhcmNoTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKGZhbHNlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrUGFydGljaXBhbnRNb2RlbD17KHRhcmdldCkgPT4ge1xuICAgICAgICAgIHNldFBhcnRpY2lwYW50TW9kZWxUYXJnZXQodGFyZ2V0KVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25QaWNrRGVsaWJlcmF0aW9uTW9kZWw9eygpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCh0cnVlKVxuICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4oJ2NvbmZpZycpXG4gICAgICAgICAgc2V0U2hvd0NvbmZpZ1BhbmVsKGZhbHNlKVxuICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwodHJ1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25DaGFuZ2U9eyhuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnY2xvdWRzJykge1xuICAgICAgICAgICAgc2V0Q2xvdWRzKHZhbHVlKVxuICAgICAgICAgICAgd3JpdGVDb25maWcoeyBhbmltYXRpb246IHsgY2xvdWRzOiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnZ2l0U3RhdHVzJykge1xuICAgICAgICAgICAgc2V0R2l0Rm9vdGVyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC5naXRGb290ZXIgPSB2YWx1ZVxuICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgZ2l0Rm9vdGVyOiB2YWx1ZSB9KVxuICAgICAgICAgICAgYm9vdC5naXQuc2V0RW5hYmxlZCh2YWx1ZSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyBnaXRTdGF0dXM6IHZhbHVlIH0gfSlcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3aWRlU2lkZWJhcicpIHtcbiAgICAgICAgICAgIHNldFdpZGVTaWRlYmFyKHZhbHVlKVxuICAgICAgICAgICAgYm9vdC53aWRlU2lkZWJhciA9IHZhbHVlXG4gICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyB3aWRlU2lkZWJhcjogdmFsdWUgfSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgZGlzcGxheTogeyB3aWRlU2lkZWJhcjogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3Jlc2VhcmNoQWdlbnRMaW1pdCcpIHtcbiAgICAgICAgICAgIHNldFJlc2VhcmNoQWdlbnRMaW1pdCh2YWx1ZSlcbiAgICAgICAgICAgIGJvb3QucmVzZWFyY2hBZ2VudExpbWl0ID0gdmFsdWVcbiAgICAgICAgICAgIGN0bC5jb25maWd1cmU/Lih7IHJlc2VhcmNoQWdlbnRMaW1pdDogdmFsdWUgfSlcbiAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgcmVzZWFyY2g6IHsgYWdlbnRMaW1pdDogdmFsdWUgfSB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRDb21wYWN0VG9vbEhpc3RvcnkodmFsdWUpXG4gICAgICAgICAgICB3cml0ZUNvbmZpZyh7IGRpc3BsYXk6IHsgY29tcGFjdFRvb2xIaXN0b3J5OiB2YWx1ZSB9IH0pXG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93Q29uZmlnUGFuZWwoZmFsc2UpfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogJzEwMCUnIH19PlxuICAgICAge3dvcmtzcGFjZU9wZW4oKSAmJiA8V29ya3NwYWNlU2lkZWJhciBncm91cHM9e3dvcmtzcGFjZUdyb3Vwc05vd30gc2VsZWN0ZWQ9e3dvcmtzcGFjZVNlbGVjdGVkKCl9IHdpZHRoPXt3b3Jrc3BhY2VXaWR0aH0gbG9hZGluZz17d29ya3NwYWNlTG9hZGluZygpfSBlcnJvcj17d29ya3NwYWNlRXJyb3IoKX0gb25IZWlnaHQ9eyhoZWlnaHQpID0+IHsgaWYgKHdvcmtzcGFjZUhlaWdodCgpICE9PSBoZWlnaHQpIHNldFdvcmtzcGFjZUhlaWdodChoZWlnaHQpIH19IC8+fVxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiB3aWRlTGF5b3V0ID8gJ3JvdycgOiAnY29sdW1uJywgZmxleEdyb3c6IDEsIGZsZXhCYXNpczogMCwgaGVpZ2h0OiAnMTAwJScgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIHBhZGRpbmdYOiAyLCBnYXA6IDEsIGJnOiBQQU5FTF9CRyB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgIHtidXN5KClcbiAgICAgICAgICAgID8gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGFjY2VudCgpLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDxTaGltbWVyIGNvbG9yPVwiYmxhY2tcIiBoaWdobGlnaHQ9e1BBTkVMX0JHfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgICAge2NvbXBhY3RpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgID8gY29tcGFjdFN0YXR1cygpPy5waGFzZSA9PT0gJ3dyaXRpbmcnID8gYENvbXBhY3RpbmcgIHdyaXRpbmcgJHtjb21wYWN0U3RhdHVzKCkuc2VjdGlvbn0vOGAgOiAnQ29tcGFjdGluZyAgYW5hbHl6aW5nJ1xuICAgICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgICA8L1NoaW1tZXI+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57Ym9vdC5kaXNwbGF5Q3dkfTwvdGV4dD59XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgKyR7Z2l0SW5mby5hZGRlZH1gfTwvdGV4dD59XG4gICAgICAgIHtnaXRJbmZvPy5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgLSR7Z2l0SW5mby5yZW1vdmVkfWB9PC90ZXh0Pn1cbiAgICAgIDwvYm94PlxuICAgICAge3RyYW5zY3JpcHQubGVuZ3RoID09PSAwID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBkaW06IGRpbW1pbmdQYW5lbCgpIH19PlxuICAgICAgICAgIDxFbXB0eVN0YXRlIHZlcnNpb249e3ZlcnNpb259IGNsb3Vkcz17Y2xvdWRzKCl9IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyAmJiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3VzZXInKS5tYXAoKGl0ZW0sIGkpID0+IChcbiAgICAgICAgICA8Ym94IGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06cHJvbXB0OiR7aXRlbS5tZXNzYWdlSWQgfHwgaX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIsIHBhZGRpbmdSaWdodDogNCwgcGFkZGluZ0JvdHRvbTogMSwgZmxleFNocmluazogMCB9fT5cbiAgICAgICAgICAgIDxNZXNzYWdlIGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2UoKX0gLz5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTY3JvbGxCb3hcbiAgICAgICAgICBzdHlsZT17eyBmbGV4R3JvdzogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB9fVxuICAgICAgICAgIGZvY3VzZWQ9eyFkZWxpYmVyYXRpb25WaWV3ICYmIChmbS5pcygnZmVlZCcpIHx8IGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpfVxuICAgICAgICAgIGZvbGxvd0ZvY3VzPXtzdGVlcigpID8gc3RlZXJMaXN0Rm9jdXMgOiBudWxsfVxuICAgICAgICAgIGZvY3VzUGFkZGluZz17MX1cbiAgICAgICAgICBzY3JvbGxPZmZzZXQ9e2ZvbGxvdygpID8gMWU5IDogb2Zmc2V0KCl9XG4gICAgICAgICAgb25NZXRyaWNzPXsobWV0cmljcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0cmFuc2NyaXB0TWV0cmljcygpXG4gICAgICAgICAgICBpZiAocHJldmlvdXM/LnZpc2libGVIZWlnaHQgPT09IG1ldHJpY3MudmlzaWJsZUhlaWdodCAmJiBwcmV2aW91cz8uY29udGVudEhlaWdodCA9PT0gbWV0cmljcy5jb250ZW50SGVpZ2h0KSByZXR1cm5cbiAgICAgICAgICAgIHNldFRyYW5zY3JpcHRNZXRyaWNzKG1ldHJpY3MpXG4gICAgICAgICAgICBpZiAoaGlkZGVuQ291bnQgPiAwICYmIG1ldHJpY3MudmlzaWJsZUhlaWdodCA+IDAgJiYgbWV0cmljcy5jb250ZW50SGVpZ2h0IDw9IG1ldHJpY3MudmlzaWJsZUhlaWdodCkge1xuICAgICAgICAgICAgICBpZiAod2luZG93ZWQuaGlkZGVuQ291bnQgPT09IDApIHZvaWQgbG9hZE9sZGVySGlzdG9yeSgpXG4gICAgICAgICAgICAgIHNldEhpc3RXaW5kb3coKHNpemUpID0+IHNpemUgKyBISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU2Nyb2xsPXsobmV4dCwgbWV0YSkgPT4ge1xuICAgICAgICAgIHNldEZvbGxvdyghIW1ldGE/LmF0Qm90dG9tKVxuICAgICAgICAgIC8vIGJhY2sgYXQgdGhlIGJvdHRvbTogbG9hZGVkIGhpc3RvcnkgaXMgb2ZmLXNjcmVlbiwgc28gcmUtaGlkaW5nXG4gICAgICAgICAgLy8gaXQgaXMgaW52aXNpYmxlIGFuZCByZXN0b3JlcyB0aGUgc21hbGwgcmVuZGVyIHdpbmRvd1xuICAgICAgICAgIGlmIChtZXRhPy5hdEJvdHRvbSAmJiBoaXN0V2luZG93KCkgPiBISVNUT1JZX1dJTkRPVykgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVylcbiAgICAgICAgICBpZiAobmV4dCA9PT0gMCAmJiBoaWRkZW5Db3VudCA+IDApIHtcbiAgICAgICAgICAgIC8vIGtlZXAgdGhlIHZpZXcgYW5jaG9yZWQ6IGVzdGltYXRlIHRoZSByb3dzIHRoZSBuZXcgYmF0Y2ggYWRkc1xuICAgICAgICAgICAgLy8gYW5kIHNjcm9sbCBwYXN0IHRoZW0gc28gdGhlIGN1cnJlbnQgdG9wIGl0ZW0gc3RheXMgaW4gcGxhY2VcbiAgICAgICAgICAgIGlmICh3aW5kb3dlZC5oaWRkZW5Db3VudCA9PT0gMCkgdm9pZCBsb2FkT2xkZXJIaXN0b3J5KClcbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gTWF0aC5taW4oSElTVE9SWV9XSU5ET1csIHdpbmRvd2VkLmhpZGRlbkl0ZW1zIHx8IEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgY29uc3QgYXZnUm93cyA9IE1hdGgubWF4KDIsIE1hdGgucm91bmQoKG1ldGE/Lm1heE9mZnNldCB8fCAwKSAvIE1hdGgubWF4KDEsIGl0ZW1zLmxlbmd0aCkpKVxuICAgICAgICAgICAgc2V0SGlzdFdpbmRvdygodykgPT4gdyArIEhJU1RPUllfV0lORE9XKVxuICAgICAgICAgICAgc2V0T2Zmc2V0KGFkZGVkICogYXZnUm93cylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRPZmZzZXQobmV4dClcbiAgICAgICAgfX1cbiAgICAgICAgc2Nyb2xsYmFyXG4gICAgICA+XG4gICAgICAgIDxDb252ZXJzYXRpb25TY3JvbGxBbmNob3IgdGFyZ2V0PXtjb252ZXJzYXRpb25TZWFyY2guc2Nyb2xsfSAvPlxuICAgICAgICB7aGlkZGVuQ291bnQgPiAwICYmIChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IHBhZGRpbmdYOiAyIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTIzMDMgJHtoaWRkZW5Db3VudC50b0xvY2FsZVN0cmluZygpfSBvbGRlciAke2hpZGRlbkNvdW50ID09PSAxID8gJ21lc3NhZ2UnIDogJ21lc3NhZ2VzJ30gIHNjcm9sbCB0byB0b3AgdG8gbG9hZGB9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgICB7ZGVsaWJlcmF0aW9uVmlldyA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPERlbGliZXJhdGlvbkV4Y2hhbmdlIHR1cm5zPXtpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ2RlbGliZXJhdGlvbi10dXJuJyl9IHZlcmJvc2U9e3ZlcmJvc2UoKX0gd2lkZT17dGVybWluYWxXaWR0aCgpID49IDExMH0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3RvcnkoKX0gdmlld3BvcnRIZWlnaHQ9e3RyYW5zY3JpcHRNZXRyaWNzKCk/LnZpc2libGVIZWlnaHR9IGZvY3VzZWQ9e2ZtLmlzKCdmZWVkJyl9IG9uRm9jdXM9eygpID0+IGZtLmZvY3VzKCdmZWVkJyl9IC8+XG4gICAgICAgICAgICB7aXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmtpbmQgIT09ICd1c2VyJyAmJiBpdGVtLmtpbmQgIT09ICdkZWxpYmVyYXRpb24tdHVybicpLm1hcCgoaXRlbSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8TWVzc2FnZSBrZXk9e2Ake3RyYW5zY3JpcHRTb3VyY2V9OnRhaWw6JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBpfWB9IGl0ZW09e2l0ZW19IHZlcmJvc2U9e3ZlcmJvc2UoKX0gLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogaXRlbXMubWFwKChpdGVtLCBpKSA9PiBzdGVlcigpICYmIGl0ZW0ubWVzc2FnZUlkID8gKFxuICAgICAgICAgIDxTdGVlck1lc3NhZ2VcbiAgICAgICAgICAgIGtleT17YCR7dHJhbnNjcmlwdFNvdXJjZX06JHtpdGVtLm1lc3NhZ2VJZCB8fCBpdGVtLmNhbGxJZCB8fCBoaWRkZW5Db3VudCArIGl9YH1cbiAgICAgICAgICAgIGl0ZW09e2l0ZW19XG4gICAgICAgICAgICB2ZXJib3NlPXt2ZXJib3NlKCl9XG4gICAgICAgICAgICBzZWxlY3RlZD17aXRlbS5tZXNzYWdlSWQgPT09IHNlbGVjdGVkU3RlZXJNZXNzYWdlSWR9XG4gICAgICAgICAgICBmb2N1cz17c3RlZXJMaXN0Rm9jdXN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uU2VhcmNoTWVzc2FnZVxuICAgICAgICAgICAga2V5PXtgJHt0cmFuc2NyaXB0U291cmNlfToke2l0ZW0ubWVzc2FnZUlkIHx8IGl0ZW0uY2FsbElkIHx8IGhpZGRlbkNvdW50ICsgaX1gfVxuICAgICAgICAgICAgaXRlbT17aXRlbX1cbiAgICAgICAgICAgIHZlcmJvc2U9e3ZlcmJvc2UoKX1cbiAgICAgICAgICAgIGN1cnJlbnRNYXRjaD17Y29udmVyc2F0aW9uU2VhcmNoTWF0Y2hlc1tjb252ZXJzYXRpb25TZWFyY2guaW5kZXgoKV0/Lml0ZW1JbmRleCA9PT0gaSA/IGNvbnZlcnNhdGlvblNlYXJjaE1hdGNoZXNbY29udmVyc2F0aW9uU2VhcmNoLmluZGV4KCldIDogbnVsbH1cbiAgICAgICAgICAgIHNlYXJjaD17Y29udmVyc2F0aW9uU2VhcmNofVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgICA8L1Njcm9sbEJveD5cbiAgICAgICAge2NvbnZlcnNhdGlvblNlYXJjaC5hY3RpdmUoKSA/IChcbiAgICAgICAgICA8Q29udmVyc2F0aW9uU2VhcmNoQmFyIHNlYXJjaD17Y29udmVyc2F0aW9uU2VhcmNofSBtYXRjaGVzPXtjb252ZXJzYXRpb25TZWFyY2hNYXRjaGVzfSAvPlxuICAgICAgICApIDogZm0uaXMoJ2ZlZWQnKSAmJiAhYW55UGFuZWwoKSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdG9wOiAwLCBsZWZ0OiAwLCByaWdodDogMCwgZmxleERpcmVjdGlvbjogJ3JvdycsIGJnOiBhY2NlbnQoKSwgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogJ2JsYWNrJyB9fT57J2ovayAgXHUyMTkxL1x1MjE5MyBzY3JvbGwgICBnL0cgZW5kcyAgIC8gc2VhcmNoICAgY3RybC11L2QgcGFnZSd9PC90ZXh0PlxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+fVxuXG4gICAgICB7KGV4cGVkaXRlZCgpLmxlbmd0aCA+IDAgfHwgcXVldWVkKCkubGVuZ3RoID4gMCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHtleHBlZGl0ZWQoKS5tYXAoKG1lc3NhZ2UsIGkpID0+IChcbiAgICAgICAgICAgIDxib3gga2V5PXtgZXhwZWRpdGVkLSR7aX1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PnsnXHUyMUEwICd9PC90ZXh0PlxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxLCBoZWlnaHQ6IDEgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBhY2NlbnQoKSB9fT57bWVzc2FnZS5yZXBsYWNlKC9cXG4vZywgJyAnKX08L3RleHQ+XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICB7aSA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCkgfX0+eycgIGFmdGVyIG5leHQgdG9vbCAgXHUyMTkxIHRvIGVkaXQnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgICB7cXVldWVkKCkubWFwKChtZXNzYWdlLCBpKSA9PiAoXG4gICAgICAgICAgICA8Ym94IGtleT17YHBlbmRpbmctJHtpfWB9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydcdTIwM0EgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBvdmVyZmxvdzogJ3RydW5jYXRlJywgY29sb3I6IE1VVEVEIH19PnttZXNzYWdlLnJlcGxhY2UoL1xcbi9nLCAnICcpfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIHtpID09PSAwICYmIGV4cGVkaXRlZCgpLmxlbmd0aCA9PT0gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgIHBlbmRpbmcgIFx1MjE5MSBlZGl0ICBcdTIxOTIgc2VuZCBhZnRlciBuZXh0IHRvb2wnfTwvdGV4dD59XG4gICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7Y29tbWFuZEZvcm0oKSAmJiA8Q29tbWFuZEZvcm1cbiAgICAgICAgbmFtZT17Y29tbWFuZEZvcm0oKS5uYW1lfVxuICAgICAgICBmaWVsZHM9e2NvbW1hbmRGb3JtKCkuZmllbGRzfVxuICAgICAgICBmaWxlcz17ZmlsZUxpc3QoKX1cbiAgICAgICAgZm9jdXNlZFxuICAgICAgICBvblN1Ym1pdD17KHZhbHVlcykgPT4gZmluaXNoQ29tbWFuZChjb21tYW5kRm9ybSgpLCB2YWx1ZXMpfVxuICAgICAgICBvbkNhbmNlbD17KCkgPT4geyBzZXRDb21tYW5kRm9ybShudWxsKTsgcmVmcy5jb21tYW5kRXhwYW5zaW9uID0gbnVsbDsgZm0uZm9jdXMoJ2lucHV0JykgfX1cbiAgICAgIC8+fVxuXG4gICAgICB7cXVlc3Rpb25SZXF1ZXN0KCkgJiYgKFxuICAgICAgICA8UXVlc3Rpb25Gb3JtXG4gICAgICAgICAgcmVxdWVzdD17cXVlc3Rpb25SZXF1ZXN0KCl9XG4gICAgICAgICAgZm9jdXNlZD17IXdvcmtzcGFjZU9wZW4oKSAmJiBmbS5pcygncXVlc3Rpb24nKSAmJiAhYW55UGFuZWwoKX1cbiAgICAgICAgICBvblN1Ym1pdD17KGFuc3dlcnMpID0+IHtcbiAgICAgICAgICAgIHJlZnMuZm9jdXNDb21wb3NlckFmdGVyUXVlc3Rpb24gPSB0cnVlXG4gICAgICAgICAgICBjdGwuYW5zd2VyUXVlc3Rpb24oYW5zd2VycylcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiB7XG4gICAgICAgICAgICByZWZzLmZvY3VzQ29tcG9zZXJBZnRlclF1ZXN0aW9uID0gdHJ1ZVxuICAgICAgICAgICAgY3RsLmNhbmNlbFF1ZXN0aW9uKClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3N0ZWVyKCkgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57c3RlZXIoKS5lZGl0aW5nID8gYCR7c3RlZXIoKS5hZGRpbmcgPyAnQWRkJyA6ICdFZGl0J30gJHtzdGVlcigpLnJvbGV9YCA6IGBTdGVlciAgJHtzdGVlcigpLmNoYW5nZXMubGVuZ3RofSBzdGFnZWRgfTwvdGV4dD5cbiAgICAgICAgICB7c3RlZXIoKS5lZGl0aW5nID8gKFxuICAgICAgICAgICAgPFRleHRBcmVhXG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZtLmlzKCdzdGVlcicpfVxuICAgICAgICAgICAgICB2YWx1ZT17c3RlZXJUZXh0KCl9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRTdGVlclRleHR9XG4gICAgICAgICAgICAgIG9uU3VibWl0PXtzdGFnZVN0ZWVyVGV4dH1cbiAgICAgICAgICAgICAgb25DYW5jZWw9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGVlclRleHQoJycpXG4gICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCBlZGl0aW5nOiBmYWxzZSwgYWRkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICd0YWInKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhdCA9IFNURUVSX1JPTEVTLmluZGV4T2Yoc3RlZXIoKS5yb2xlKVxuICAgICAgICAgICAgICAgICAgc2V0U3RlZXIoeyAuLi5zdGVlcigpLCByb2xlOiBTVEVFUl9ST0xFU1soYXQgKyAxKSAlIFNURUVSX1JPTEVTLmxlbmd0aF0gfSlcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgICAgIG5ld2xpbmVPbkJhY2tzbGFzaEVudGVyXG4gICAgICAgICAgICAgIGNsZWFyT25TdWJtaXRcbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXs4fVxuICAgICAgICAgICAgICBjdXJzb3I9e3sgYmxpbms6IHRydWUsIGJnOiBhY2NlbnQoKSwgY29sb3I6ICdibGFjaycgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1x1MjE5MVx1MjE5MyBzZWxlY3QgIGVudGVyIGVkaXQgIGEgYWRkIGFmdGVyICB4L2QgZGVsZXRlICBjdHJsK3MgYXBwbHkgIGVzYyBkaXNjYXJkJ308L3RleHQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9ib3g+XG4gICAgICApfVxuXG4gICAgICB7cGVlclN0YXR1cygpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57cGVlclN0YXR1cygpfTwvdGV4dD59XG4gICAgICB7IXN0ZWVyKCkgJiYgIXZpZXdlZEFnZW50ICYmICF2aWV3ZWRTaGVsbCAmJiA8TW91c2VGb2N1c1JlZ2lvbiBvblByZXNzPXsoKSA9PiB7IGlmICghd29ya3NwYWNlT3BlbigpKSBmbS5mb2N1cygnaW5wdXQnKSB9fSBzdHlsZT17eyBiZzogUEFORUxfQkcsIGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEsIG1hcmdpblRvcDogdHJhbnNjcmlwdC5sZW5ndGggPT09IDAgJiYgY2xvdWRzKCkgPyAwIDogMSwgZGltOiBkaW1taW5nUGFuZWwoKSB8fCAhIXF1ZXN0aW9uUmVxdWVzdCgpIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J1x1Mjc2Rid9PC90ZXh0PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICB7KHN0YXRlLnNlc3Npb24/LmhlYWRlci5mb3JrZWRGcm9tIHx8IGRlcml2ZWQoKS50aXRsZSkgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScsIHRvcDogMCwgcmlnaHQ6IDAsIGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAge3N0YXRlLnNlc3Npb24/LmhlYWRlci5mb3JrZWRGcm9tICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZGVyaXZlZCgpLnRpdGxlID8gJ1x1MjQ0MiAnIDogJ1x1MjQ0Mid9PC90ZXh0Pn1cbiAgICAgICAgICAgIHtkZXJpdmVkKCkudGl0bGUgJiYgPHRleHQgc3R5bGU9e3sgYmc6IGZtLmlzKCdpbnB1dCcpICYmICFhbnlQYW5lbCgpICYmICFxdWVzdGlvblJlcXVlc3QoKSA/IGFjY2VudCgpIDogTVVURUQsIGNvbG9yOiAnYmxhY2snLCBib2xkOiB0cnVlIH19PntgICR7ZGVyaXZlZCgpLnRpdGxlfSBgfTwvdGV4dD59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIDxUZXh0QXJlYVxuICAgICAgICAgIGNvbG9yPXtGR31cbiAgICAgICAgICBsaW5lQ291bnRlclxuICAgICAgICAgIHNjcm9sbGJhclxuICAgICAgICAgIGZvY3VzZWQ9eyF3b3Jrc3BhY2VPcGVuKCkgJiYgZm0uaXMoJ2lucHV0JykgJiYgIWFueVBhbmVsKCkgJiYgIXF1ZXN0aW9uUmVxdWVzdCgpfVxuICAgICAgICAgIHZhbHVlPXtpbnB1dCgpfVxuICAgICAgICAgIGN1cnNvck9mZnNldD17aW5wdXRDdXJzb3IoKX1cbiAgICAgICAgICBvbkN1cnNvckNoYW5nZT17KGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgc2V0SW5wdXRDdXJzb3IoY3Vyc29yKVxuICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgIHNldENtZEluZGV4KDApXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNoYW5nZT17KHYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHBsYWNlaG9sZGVyaXplSW1hZ2VQYXRocyh2LCB7XG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBzdGF0ZS5hdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgbmV4dElkOiAoKSA9PiArK3N0YXRlLmltYWdlQ291bnQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc2V0SW5wdXQoY29udmVydGVkLnRleHQsIGNvbnZlcnRlZC50ZXh0ID09PSB2ID8gaW5wdXRDdXJzb3IoKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHNldENtZEluZGV4KDApXG4gICAgICAgICAgICBzZXRDbWRDeWNsZShudWxsKVxuICAgICAgICAgICAgc2V0RmlsZUluZGV4KDApXG4gICAgICAgICAgICBzZXRIaXN0SWR4KC0xKVxuICAgICAgICAgICAgc2V0RmlsZXNEaXNtaXNzZWQoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNhbmNlbD17KCkgPT4ge1xuICAgICAgICAgICAgaWYgKGJ1c3koKSkgaW50ZXJydXB0KClcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBpbXBsaWNpdFJld2luZFRhcmdldChkZXJpdmVkKCksIGlucHV0KCkpXG4gICAgICAgICAgICAgIGlmICh0YXJnZXQpIHBlcmZvcm1SZXdpbmRUbyh0YXJnZXQsIHsga2V5OiAnY2hhdCcgfSlcbiAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0Q21kQ3ljbGUobnVsbClcbiAgICAgICAgICAgICAgICBzZXRDb21wbGV0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgIHNldEZpbGVzRGlzbWlzc2VkKHRydWUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uU3VibWl0PXtzZW5kfVxuICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ2xlZnQnICYmICFlLmN0cmwgJiYgIWUubWV0YSAmJiAhZS5hbHQgJiYgYm9vdC53b3Jrc3BhY2UgJiYgZm0uaXMoJ2lucHV0JykgJiYgdmlldygpID09PSAnY2hhdCcgJiYgIWFueVBhbmVsKCkgJiYgZW1wdHlXb3Jrc3BhY2VDb21wb3Nlcih7XG4gICAgICAgICAgICAgIHRleHQ6IGUudmFsdWUsIGF0dGFjaG1lbnRzOiB3b3Jrc3BhY2VEcmFmdEF0dGFjaG1lbnRzKGUudmFsdWUsIHN0YXRlLmF0dGFjaG1lbnRzKSwgZGljdGF0aW9uOiBkaWN0YXRpb25TdGF0dXMoKSwgY2FwdHVyZTogY2FwdHVyZVN0YXR1cygpLCBwZW5kaW5nOiByZWZzLmNvbW1hbmRFeHBhbnNpb24gfHwgcmVmcy53b3Jrc3BhY2VQYXN0ZVBlbmRpbmcsXG4gICAgICAgICAgICAgIGhpc3Rvcnk6IGhpc3RJZHgoKSwgY29tcGxldGlvbjogY29tcGxldGluZygpLCBjb21tYW5kOiBjb21tYW5kRm9ybSgpLCBxdWVzdGlvbjogcXVlc3Rpb25SZXF1ZXN0KCksIHN0ZWVyOiBzdGVlcigpLCBxdWV1ZWQ6IHF1ZXVlZCgpLmxlbmd0aCwgZXhwZWRpdGVkOiBleHBlZGl0ZWQoKS5sZW5ndGgsXG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICBzZXRXb3Jrc3BhY2VTZWxlY3RlZChib290LndvcmtzcGFjZS5jdXJyZW50SWQoKSlcbiAgICAgICAgICAgICAgc2V0V29ya3NwYWNlT3Blbih0cnVlKVxuICAgICAgICAgICAgICBzZXRXb3Jrc3BhY2VMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgIGZtLmZvY3VzKCd3b3Jrc3BhY2UnKVxuICAgICAgICAgICAgICB2b2lkIHJlZnJlc2hXb3Jrc3BhY2UoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZnMuZGljdGF0aW9uSW5wdXQuaGFuZGxlKGUpKSByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ3YnKSB7XG4gICAgICAgICAgICAgIHJlZnMud29ya3NwYWNlUGFzdGVQZW5kaW5nID0gdHJ1ZVxuICAgICAgICAgICAgICB2b2lkIHJlZnMucGFzdGVJbWFnZSgpLmZpbmFsbHkoKCkgPT4geyByZWZzLndvcmtzcGFjZVBhc3RlUGVuZGluZyA9IGZhbHNlIH0pXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5jdHJsICYmIGUua2V5ID09PSAnZycpIHtcbiAgICAgICAgICAgICAgcmVmcy5kaWN0YXRpb25JbnB1dC5zdGFydChlKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCAmJiBlLmtleSA9PT0gJ28nKSB7XG4gICAgICAgICAgICAgIHZvaWQgcmVmcy5jYXB0dXJlSW1hZ2UoKVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUua2V5ID09PSAndGFiJyAmJiAhZS5jdHJsICYmICFlLm1ldGEgJiYgc2hvd0ZpbGVzICYmIG1hdGNoZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHBpY2tGaWxlKG1hdGNoZWRGaWxlc1tNYXRoLm1pbihmaWxlSW5kZXgoKSwgbWF0Y2hlZEZpbGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhICYmIHNob3dDb21tYW5kcyAmJiBtYXRjaGVkQ29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBjeWNsZSA9IGNtZEN5Y2xlKClcbiAgICAgICAgICAgICAgaWYgKCFjeWNsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oY21kSW5kZXgoKSwgbWF0Y2hlZENvbW1hbmRzLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICAgICAgc2V0Q21kQ3ljbGUoeyBtYXRjaGVzOiBtYXRjaGVkQ29tbWFuZHMgfSlcbiAgICAgICAgICAgICAgICBzZXRDbWRJbmRleChzdGFydClcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gcmVwbGFjZUNvbW1hbmQoaW5wdXQoKSwgc2xhc2hSYW5nZSwgJy8nICsgbWF0Y2hlZENvbW1hbmRzW3N0YXJ0XS5uYW1lKVxuICAgICAgICAgICAgICAgIHNldElucHV0KG5leHQudGV4dCwgbmV4dC5jdXJzb3IpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IChjbWRJbmRleCgpICsgMSkgJSBjeWNsZS5tYXRjaGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgIHNldENtZEluZGV4KG5leHQpXG4gICAgICAgICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSByZXBsYWNlQ29tbWFuZChpbnB1dCgpLCBzbGFzaFJhbmdlLCAnLycgKyBjeWNsZS5tYXRjaGVzW25leHRdLm5hbWUpXG4gICAgICAgICAgICAgICAgc2V0SW5wdXQocmVwbGFjZW1lbnQudGV4dCwgcmVwbGFjZW1lbnQuY3Vyc29yKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdwYXN0ZScgJiYgZS50ZXh0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhdGhzID0gZXh0cmFjdEltYWdlUGF0aHMoZS50ZXh0KVxuICAgICAgICAgICAgICBpZiAocGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYWZ0ID0gZS52YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnN0IGF0ID0gZS5jdXJzb3IgPz8gZHJhZnQubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3RsLmlkXG4gICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocGF0aHMubWFwKHBhdGggPT4gY3RsLmF0dGFjaEltYWdlKHBhdGgpKSkudGhlbihwbGFjZWhvbGRlcnMgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGN0bC5pZCAhPT0gc2Vzc2lvbklkIHx8IGlucHV0KCkgIT09IGRyYWZ0KSByZXR1cm5cbiAgICAgICAgICAgICAgICAgIHNldElucHV0KGRyYWZ0LnNsaWNlKDAsIGF0KSArIHBsYWNlaG9sZGVycy5qb2luKCcgJykgKyBkcmFmdC5zbGljZShhdCkpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4gZmxhc2goZXJyb3IubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ2JhY2tzcGFjZScgJiYgZS5jdXJzb3IgPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gZS52YWx1ZS5zbGljZSgwLCBlLmN1cnNvcikubWF0Y2goL1xcW0ltYWdlICNcXGQrXFxdJC8pXG4gICAgICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIGN0bC5kZXRhY2hJbWFnZShtYXRjaFswXSlcbiAgICAgICAgICAgICAgICBzZXRJbnB1dChlLnZhbHVlLnNsaWNlKDAsIGUuY3Vyc29yIC0gbWF0Y2hbMF0ubGVuZ3RoKSArIGUudmFsdWUuc2xpY2UoZS5jdXJzb3IpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3RhYicgJiYgIWUuY3RybCAmJiAhZS5tZXRhKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNvbXBsZXRpb25Db250ZXh0KHsgdmFsdWU6IGUudmFsdWUsIHJlc29sdmU6IGNvbXBsZXRpb25Tb3VyY2UgfSlcbiAgICAgICAgICAgICAgaWYgKCFjdHgpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICBpZiAoIWNvbXBsZXRpbmcoKSkge1xuICAgICAgICAgICAgICAgIHNldENvbXBsZXRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICBzZXRDb21wSW5kZXgoMClcbiAgICAgICAgICAgICAgICBsaXN0RmlsZXMoY3dkKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzICE9PSBmaWxlTGlzdCgpKSBzZXRGaWxlTGlzdChmaWxlcylcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN0eC5tYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhY2NlcHRDb21wbGV0aW9uKGUudmFsdWUsIGN0eCwgY3R4Lm1hdGNoZXNbTWF0aC5taW4oY29tcEluZGV4KCksIGN0eC5tYXRjaGVzLmxlbmd0aCAtIDEpXSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY3RybCB8fCBlLm1ldGEgfHwgc2hvd0NvbW1hbmRzIHx8IHNob3dGaWxlcykgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd1cCcgJiYgZS52YWx1ZSA9PT0gJycgJiYgKGV4cGVkaXRlZCgpLmxlbmd0aCA+IDAgfHwgcXVldWVkKCkubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgY3RsLnJlY2FsbFBlbmRpbmcoKS50aGVuKHNldElucHV0KS5jYXRjaChlcnJvciA9PiBmbGFzaChlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ3JpZ2h0JyAmJiBlLnZhbHVlID09PSAnJyAmJiBxdWV1ZWQoKS5sZW5ndGggPiAwICYmIGJ1c3koKSAmJiAhY29tcGFjdGluZygpKSB7XG4gICAgICAgICAgICAgIGN0bC5leHBlZGl0ZVF1ZXVlZCgpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBicm93c2luZyA9IGhpc3RJZHgoKSA+PSAwXG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICd1cCcgJiYgKGJyb3dzaW5nIHx8IGUudmFsdWUgPT09ICcnKSAmJiBoaXN0SWR4KCkgPCBzZW50KCkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICBjb25zdCBuID0gaGlzdElkeCgpICsgMVxuICAgICAgICAgICAgICBzZXRIaXN0SWR4KG4pXG4gICAgICAgICAgICAgIHNldElucHV0KHNlbnQoKVtzZW50KCkubGVuZ3RoIC0gMSAtIG5dLnRleHQpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdkb3duJyAmJiBicm93c2luZykge1xuICAgICAgICAgICAgICBjb25zdCBuID0gaGlzdElkeCgpIC0gMVxuICAgICAgICAgICAgICBzZXRIaXN0SWR4KG4pXG4gICAgICAgICAgICAgIHNldElucHV0KG4gPCAwID8gJycgOiBzZW50KClbc2VudCgpLmxlbmd0aCAtIDEgLSBuXS50ZXh0KVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfX1cbiAgICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgICAgbmV3bGluZU9uQmFja3NsYXNoRW50ZXJcbiAgICAgICAgICBjbGVhck9uU3VibWl0PXtmYWxzZX1cbiAgICAgICAgICBtYXhIZWlnaHQ9ezh9XG4gICAgICAgICAgY3Vyc29yPXt7IGJsaW5rOiB0cnVlLCBiZzogYWNjZW50KCksIGNvbG9yOiAnYmxhY2snIH19XG4gICAgICAgIC8+XG4gICAgICA8L01vdXNlRm9jdXNSZWdpb24+fVxuXG4gICAgICB7c2hvd0NvbXBvc2VyQWN0aW9ucyAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGhlaWdodDogMSwgbWFyZ2luTGVmdDogMSB9fT5cbiAgICAgICAgICA8Q29tcG9zZXJBY3Rpb25cbiAgICAgICAgICAgIGljb249XCJcdTI1Q0JcIlxuICAgICAgICAgICAgYWN0aXZlSWNvbj1cIlx1MjVDRlwiXG4gICAgICAgICAgICBhY3RpdmU9e2RpY3RhdGlvblN0YXR1cygpICE9PSAnaWRsZSd9XG4gICAgICAgICAgICBvbkhvdmVyPXsoaG92ZXJlZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaG92ZXJlZCkgc2V0Q29tcG9zZXJBY3Rpb25MYWJlbCgnY2FwdHVyZSBhdWRpbyAoY3RybC1nKScpXG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBvc2VyQWN0aW9uTGFiZWwoKSA9PT0gJ2NhcHR1cmUgYXVkaW8gKGN0cmwtZyknKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCcnKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IGRpY3RhdGlvblN0YXR1cygpID09PSAncmVjb3JkaW5nJ1xuICAgICAgICAgICAgICA/IHZvaWQgcmVmcy5kaWN0YXRpb25JbnB1dC5zdG9wKClcbiAgICAgICAgICAgICAgOiByZWZzLmRpY3RhdGlvbklucHV0LnN0YXJ0KHsgdmFsdWU6IGlucHV0KCksIGN1cnNvcjogaW5wdXRDdXJzb3IoKSB9KX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxDb21wb3NlckFjdGlvblxuICAgICAgICAgICAgaWNvbj1cIlx1MjVBMVwiXG4gICAgICAgICAgICBhY3RpdmVJY29uPVwiXHUyNUEwXCJcbiAgICAgICAgICAgIGFjdGl2ZT17Y2FwdHVyZVN0YXR1cygpID09PSAnY2FwdHVyaW5nJ31cbiAgICAgICAgICAgIG9uSG92ZXI9eyhob3ZlcmVkKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChob3ZlcmVkKSBzZXRDb21wb3NlckFjdGlvbkxhYmVsKCdjYXB0dXJlIGltYWdlIChjdHJsLW8pJylcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcG9zZXJBY3Rpb25MYWJlbCgpID09PSAnY2FwdHVyZSBpbWFnZSAoY3RybC1vKScpIHNldENvbXBvc2VyQWN0aW9uTGFiZWwoJycpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25QcmVzcz17KCkgPT4gdm9pZCByZWZzLmNhcHR1cmVJbWFnZSgpfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2RpY3RhdGlvblN0YXR1cygpICE9PSAnaWRsZScgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBvdmVyZmxvdzogJ3RydW5jYXRlJyB9fT57ZGljdGF0aW9uSW5kaWNhdG9yKGRpY3RhdGlvblN0YXR1cygpLCBkaWN0YXRpb25MZXZlbHMoKSl9PC90ZXh0Pn1cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2RpY3RhdGlvblN0YXR1cygpID09PSAncmVjb3JkaW5nJyA/ICdlc2MgY2FuY2VsICBlbnRlciBjb25maXJtJyA6IGNhcHR1cmVTdGF0dXMoKSA9PT0gJ2NhcHR1cmluZycgPyAnIGVzYyBjYW5jZWwnIDogY29tcG9zZXJBY3Rpb25MYWJlbCgpID8gYCAke2NvbXBvc2VyQWN0aW9uTGFiZWwoKX1gIDogJyd9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93Q29tbWFuZHMgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBoZWlnaHQ6IDYsIG1pbkhlaWdodDogNiwgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICB7bWF0Y2hlZENvbW1hbmRzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT5ubyBtYXRjaGluZyBjb21tYW5kczwvdGV4dD5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgICAgY291bnRlclxuICAgICAgICAgICAgICBpdGVtcz17bWF0Y2hlZENvbW1hbmRzfVxuICAgICAgICAgICAgICBzZWxlY3RlZD17Y21kSW5kZXgoKX1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e3NldENtZEluZGV4fVxuICAgICAgICAgICAgICBvblN1Ym1pdD17KGMpID0+IHJ1bkNvbW1hbmQoYyl9XG4gICAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21tYW5kcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgICBzY3JvbGxvZmY9ezJ9XG4gICAgICAgICAgICAgIHJlbmRlckl0ZW09eyhjLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBNVVRFRCB9fT57YC8ke2MubmFtZX1gLnBhZEVuZChtYXRjaGVkQ29tbWFuZHMucmVkdWNlKChtLCB4KSA9PiBNYXRoLm1heChtLCB4Lm5hbWUubGVuZ3RoICsgMyksIDEyKSl9PC90ZXh0PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IEZHIDogTVVURUQgfX0+e2MuZGVzY308L3RleHQ+XG4gICAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dGaWxlcyAmJiBtYXRjaGVkRmlsZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogNiwgbWluSGVpZ2h0OiA2LCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIDxNZW51XG4gICAgICAgICAgICBjb3VudGVyXG4gICAgICAgICAgICBpdGVtcz17bWF0Y2hlZEZpbGVzfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9e2ZpbGVJbmRleCgpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3NldEZpbGVJbmRleH1cbiAgICAgICAgICAgIG9uU3VibWl0PXtwaWNrRmlsZX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXsoKSA9PiBzZXRGaWxlc0Rpc21pc3NlZCh0cnVlKX1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dGaWxlcyAmJiBkaWN0YXRpb25TdGF0dXMoKSA9PT0gJ2lkbGUnfVxuICAgICAgICAgICAgbWF4VmlzaWJsZT17NX1cbiAgICAgICAgICAgIHNjcm9sbG9mZj17Mn1cbiAgICAgICAgICAgIHJlbmRlckl0ZW09eyhmLCB7IGFjdGl2ZSB9KSA9PiAoXG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnthY3RpdmUgPyAnXHUyMDNBICcgOiAnICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWN0aXZlID8gYWNjZW50KCkgOiBGR19TT0ZUIH19PntmfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb21wbGV0aW9uICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgaGVpZ2h0OiA2LCBtaW5IZWlnaHQ6IDYsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgICAgPE1lbnVcbiAgICAgICAgICAgIGNvdW50ZXJcbiAgICAgICAgICAgIGl0ZW1zPXtjb21wQ3R4Lm1hdGNoZXN9XG4gICAgICAgICAgICBzZWxlY3RlZD17Y29tcEluZGV4KCl9XG4gICAgICAgICAgICBvblNlbGVjdD17c2V0Q29tcEluZGV4fVxuICAgICAgICAgICAgb25TdWJtaXQ9eyhjYW5kaWRhdGUpID0+IGFjY2VwdENvbXBsZXRpb24oaW5wdXQoKSwgY29tcEN0eCwgY2FuZGlkYXRlKX1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtkaXNtaXNzQ29tcGxldGlvbn1cbiAgICAgICAgICAgIGZvY3VzZWQ9e3Nob3dDb21wbGV0aW9uICYmIGRpY3RhdGlvblN0YXR1cygpID09PSAnaWRsZSd9XG4gICAgICAgICAgICBtYXhWaXNpYmxlPXs1fVxuICAgICAgICAgICAgc2Nyb2xsb2ZmPXsyfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17KGNhbmRpZGF0ZSwgeyBhY3RpdmUgfSkgPT4gKFxuICAgICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57YWN0aXZlID8gJ1x1MjAzQSAnIDogJyAgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogRkdfU09GVCB9fT57Y2FuZGlkYXRlfTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCB3aWR0aDogd2lkZUxheW91dCA/IDY0IDogdW5kZWZpbmVkLCBoZWlnaHQ6IHdpZGVMYXlvdXQgPyAnMTAwJScgOiB1bmRlZmluZWQgfX0+XG4gICAgICB7c2hvd01vZGVsUGFuZWwoKSAmJiAoXG4gICAgICAgIDxNb2RlbFBhbmVsXG4gICAgICAgICAgbW9kZWxzPXttb2RlbHMoKX1cbiAgICAgICAgICBjdXJyZW50PXttb2RlbCgpLm5hbWV9XG4gICAgICAgICAgZGVmYXVsdE5hbWU9e2RlZmF1bHRNb2RlbCgpLm5hbWV9XG4gICAgICAgICAgZm9jdXNlZD17c2hvd01vZGVsUGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9e2FzeW5jIChtKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgY3RsLnN3aXRjaE1vZGVsKG0pKSBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9e2FzeW5jIChtKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgY3RsLnN3aXRjaE1vZGVsKG0sIHsgYXNEZWZhdWx0OiB0cnVlIH0pKSBzZXRTaG93TW9kZWxQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dNb2RlbFBhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCkgJiYgKFxuICAgICAgICA8TW9kZWxQYW5lbFxuICAgICAgICAgIG1vZGVscz17bW9kZWxzKCkuZmlsdGVyKChtKSA9PiBtLmF2YWlsYWJsZSAhPT0gZmFsc2UpfVxuICAgICAgICAgIGN1cnJlbnQ9e3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA/IGJvb3RbYCR7cGFydGljaXBhbnRNb2RlbFRhcmdldCgpfU1vZGVsYF0gOiBzZWxlY3RpbmdTaGVsbE1vZGVsKCkgPyBib290LnNoZWxsTW9kZWwgOiBzZWxlY3RpbmdEZWxpYmVyYXRpb25Nb2RlbCgpID8gYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA6IGJvb3QucmVzZWFyY2hNb2RlbH1cbiAgICAgICAgICBkZWZhdWx0TmFtZT17bnVsbH1cbiAgICAgICAgICB0aXRsZT17cGFydGljaXBhbnRNb2RlbFRhcmdldCgpID8gYENob29zZSBQYXJ0aWNpcGFudCAke3BhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSA9PT0gJ3BhcnRpY2lwYW50QScgPyAnQScgOiAnQid9IG1vZGVsYCA6IHNlbGVjdGluZ1NoZWxsTW9kZWwoKSA/ICdDaG9vc2Ugc2hlbGwgbW9kZWwnIDogc2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoKSA/ICdDaG9vc2Ugc3ludGhlc2lzIG1vZGVsJyA6ICdDaG9vc2UgcGFyYWxsZWwgd29ya2VyIG1vZGVsJ31cbiAgICAgICAgICBoaW50PVwiZW50ZXI6IHNhdmUgbW9kZWwgIGVzYzogY2FuY2VsXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93UmVzZWFyY2hNb2RlbFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobSkgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcnRpY2lwYW50TW9kZWxUYXJnZXQoKSkge1xuICAgICAgICAgICAgICBjb25zdCBtZXRob2QgPSBwYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KCkgPT09ICdwYXJ0aWNpcGFudEEnID8gJ3NldFBhcnRpY2lwYW50QU1vZGVsJyA6ICdzZXRQYXJ0aWNpcGFudEJNb2RlbCdcbiAgICAgICAgICAgICAgY3RsW21ldGhvZF0obS5uYW1lKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RpbmdTaGVsbE1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgY3RsLnNldFNoZWxsTW9kZWwobS5uYW1lKVxuICAgICAgICAgICAgICBmbGFzaChgc2hlbGw6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGluZ0RlbGliZXJhdGlvbk1vZGVsKCkpIHtcbiAgICAgICAgICAgICAgYm9vdC5kZWxpYmVyYXRpb25Nb2RlbCA9IG0ubmFtZVxuICAgICAgICAgICAgICBjdGwuY29uZmlndXJlPy4oeyBkZWxpYmVyYXRpb25Nb2RlbDogbS5uYW1lIH0pXG4gICAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgbW9kZWxzOiB7IGRlbGliZXJhdGlvbjogbS5uYW1lIH0gfSkuY2F0Y2goKCkgPT4ge30pXG4gICAgICAgICAgICAgIGZsYXNoKGBkZWxpYmVyYXRpb246ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBib290LnJlc2VhcmNoTW9kZWwgPSBtLm5hbWVcbiAgICAgICAgICAgICAgY3RsLmNvbmZpZ3VyZT8uKHsgcmVzZWFyY2hNb2RlbDogbS5uYW1lIH0pXG4gICAgICAgICAgICAgIHdyaXRlQ29uZmlnKHsgbW9kZWxzOiB7IHJlc2VhcmNoV29ya2VyOiBtLm5hbWUgfSB9KS5jYXRjaCgoKSA9PiB7fSlcbiAgICAgICAgICAgICAgZmxhc2goYHBhcmFsbGVsIHdvcmtlcnM6ICR7bS5uYW1lfWApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRTaG93UmVzZWFyY2hNb2RlbFBhbmVsKGZhbHNlKVxuICAgICAgICAgICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdSZXNlYXJjaCgpXG4gICAgICAgICAgICBjb25zdCBwZW5kaW5nRGVjaXNpb24gPSBwZW5kaW5nRGVsaWJlcmF0aW9uKClcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblRvID0gcmVzZWFyY2hNb2RlbFJldHVybigpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICAgIGlmIChwZW5kaW5nKSBydW5Db21tYW5kKHsgbmFtZTogJ3BhcmFsbGVsJyB9LCBwZW5kaW5nLnRhc2spXG4gICAgICAgICAgICBlbHNlIGlmIChwZW5kaW5nRGVjaXNpb24pIHJ1bkNvbW1hbmQoeyBuYW1lOiAnZGVsaWJlcmF0ZScgfSwgcGVuZGluZ0RlY2lzaW9uLmRlY2lzaW9uKVxuICAgICAgICAgICAgZWxzZSBpZiAocmV0dXJuVG8gPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eygpID0+IHt9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICAgIHNldFNob3dSZXNlYXJjaE1vZGVsUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQYXJ0aWNpcGFudE1vZGVsVGFyZ2V0KG51bGwpXG4gICAgICAgICAgICBzZXRTZWxlY3RpbmdTaGVsbE1vZGVsKGZhbHNlKVxuICAgICAgICAgICAgc2V0U2VsZWN0aW5nRGVsaWJlcmF0aW9uTW9kZWwoZmFsc2UpXG4gICAgICAgICAgICBzZXRQZW5kaW5nUmVzZWFyY2gobnVsbClcbiAgICAgICAgICAgIHNldFBlbmRpbmdEZWxpYmVyYXRpb24obnVsbClcbiAgICAgICAgICAgIGlmIChyZXNlYXJjaE1vZGVsUmV0dXJuKCkgPT09ICdjb25maWcnKSBzZXRTaG93Q29uZmlnUGFuZWwodHJ1ZSlcbiAgICAgICAgICAgIHNldFJlc2VhcmNoTW9kZWxSZXR1cm4obnVsbClcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dTcGVlZFBhbmVsKCkgJiYgKFxuICAgICAgICA8U3BlZWRQYW5lbFxuICAgICAgICAgIGxldmVscz17U1BFRURfTEVWRUxTfVxuICAgICAgICAgIGN1cnJlbnQ9e3NwZWVkKCl9XG4gICAgICAgICAgZGVmYXVsdExldmVsPXtzcGVlZERlZmF1bHRzKClbbW9kZWwoKS5uYW1lXSA/PyAnc3RhbmRhcmQnfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dTcGVlZFBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsobCkgPT4ge1xuICAgICAgICAgICAgY3RsLmFwcGx5U3BlZWQobC5rZXkpXG4gICAgICAgICAgICBzZXRTaG93U3BlZWRQYW5lbChmYWxzZSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUGlja0RlZmF1bHQ9eyhsKSA9PiB7XG4gICAgICAgICAgICBjdGwuYXBwbHlTcGVlZChsLmtleSwgeyBhc0RlZmF1bHQ6IHRydWUgfSlcbiAgICAgICAgICAgIHNldFNob3dTcGVlZFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd1NwZWVkUGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dFZmZvcnRQYW5lbCgpICYmIChcbiAgICAgICAgPEVmZm9ydFBhbmVsXG4gICAgICAgICAgbGV2ZWxzPXtFRkZPUlRfTEVWRUxTfVxuICAgICAgICAgIGN1cnJlbnQ9e2VmZm9ydCgpID8/IG51bGx9XG4gICAgICAgICAgZGVmYXVsdExldmVsPXtkZWZhdWx0RWZmb3J0KCkgPz8gbnVsbH1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93RWZmb3J0UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyhsKSA9PiB7XG4gICAgICAgICAgICBzZXRTZXNzaW9uRWZmb3J0KGwua2V5KVxuICAgICAgICAgICAgc2V0U2hvd0VmZm9ydFBhbmVsKGZhbHNlKVxuICAgICAgICAgIH19XG4gICAgICAgICAgb25QaWNrRGVmYXVsdD17KGwpID0+IHtcbiAgICAgICAgICAgIHNldFNlc3Npb25FZmZvcnQobC5rZXksIHsgYXNEZWZhdWx0OiB0cnVlIH0pXG4gICAgICAgICAgICBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RWZmb3J0UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dUaGVtZVBhbmVsKCkgJiYgKFxuICAgICAgICA8VGhlbWVQYW5lbFxuICAgICAgICAgIHRoZW1lcz17dGhlbWVJdGVtcygpfVxuICAgICAgICAgIHByZWY9e3RoZW1lUHJlZigpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dUaGVtZVBhbmVsKCl9XG4gICAgICAgICAgb25QaWNrPXsodCkgPT4ge1xuICAgICAgICAgICAgc2V0U2hvd1RoZW1lUGFuZWwoZmFsc2UpXG4gICAgICAgICAgICBhcHBseVRoZW1lUHJlZih0LmtleSlcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uUHJldmlldz17KHQpID0+IHByZXZpZXdQYWxldHRlKHQua2V5KX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICBzZXRTaG93VGhlbWVQYW5lbChmYWxzZSlcbiAgICAgICAgICAgIHByZXZpZXdQYWxldHRlKHRoZW1lUHJlZigpKVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0RlbGV0ZUNvbmZpcm0oKSAmJiAoXG4gICAgICAgIDxDb25maXJtUGFuZWxcbiAgICAgICAgICB0aXRsZT1cIkRlbGV0ZSBjdXJyZW50IHNlc3Npb24/XCJcbiAgICAgICAgICBtZXNzYWdlPVwiVGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIGFuZCBpdHMgcGVyc2lzdGVkIGhpc3Rvcnkgd2lsbCBiZSBwZXJtYW5lbnRseSBkZWxldGVkLlwiXG4gICAgICAgICAgY29uZmlybUxhYmVsPVwiRGVsZXRlXCJcbiAgICAgICAgICBmb2N1c2VkPXtzaG93RGVsZXRlQ29uZmlybSgpfVxuICAgICAgICAgIG9uQ29uZmlybT17Y29uZmlybURlbGV0ZUN1cnJlbnRTZXNzaW9ufVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dEZWxldGVDb25maXJtKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93SGlzdG9yeVBhbmVsKCkgJiYgKFxuICAgICAgICA8SGlzdG9yeVBhbmVsXG4gICAgICAgICAgcHJvbXB0cz17aGlzdFByb21wdHMoKX1cbiAgICAgICAgICBzY29wZXM9e0hJU1RPUllfU0NPUEVTfVxuICAgICAgICAgIHNjb3BlSW5kZXg9e2hpc3RTY29wZSgpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dIaXN0b3J5UGFuZWwoKX1cbiAgICAgICAgICBvblBpY2s9eyh0ZXh0KSA9PiB7IHNldElucHV0KHRleHQpOyBzZXRTaG93SGlzdG9yeVBhbmVsKGZhbHNlKSB9fVxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dIaXN0b3J5UGFuZWwoZmFsc2UpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge2luZm9QYW5lbCgpICYmIChcbiAgICAgICAgPEluZm9MaXN0UGFuZWxcbiAgICAgICAgICB0aXRsZT17aW5mb1BhbmVsKCkudGl0bGV9XG4gICAgICAgICAgcm93cz17aW5mb1BhbmVsKCkucm93c31cbiAgICAgICAgICBvdmVydmlldz17aW5mb1BhbmVsKCkub3ZlcnZpZXd9XG4gICAgICAgICAgZm9jdXNlZD17aW5mb1BhbmVsKCkgIT09IG51bGx9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0SW5mb1BhbmVsKG51bGwpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Nob3dDb25uZWN0UGFuZWwoKSAmJiAoXG4gICAgICAgIDxDb25uZWN0UGFuZWxcbiAgICAgICAgICBwcm92aWRlcnM9e2F1dGhQcm92aWRlcnMoKX1cbiAgICAgICAgICBmb2N1c2VkPXtzaG93Q29ubmVjdFBhbmVsKCl9XG4gICAgICAgICAgb25Db25uZWN0PXtjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25EaXNjb25uZWN0PXtkaXNjb25uZWN0UHJvdmlkZXJ9XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2hvd0Nvbm5lY3RQYW5lbChmYWxzZSl9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1dha2V1cHNQYW5lbCgpICYmIChcbiAgICAgICAgPFdha2V1cHNQYW5lbFxuICAgICAgICAgIHdha2V1cHM9eyhzaGVsbHNWZXJzaW9uKCksIGJvb3Qud2FrZXVwcy5saXN0KCkpfVxuICAgICAgICAgIGZvY3VzZWQ9e3Nob3dXYWtldXBzUGFuZWwoKX1cbiAgICAgICAgICBvbkNhbmNlbD17KHcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFybWVkID0gcmVmcy53YWtldXBDYW5jZWxBcm1cbiAgICAgICAgICAgIGlmICghYXJtZWQgfHwgYXJtZWQuaWQgIT09IHcuaWQgfHwgRGF0ZS5ub3coKSAtIGFybWVkLmF0ID4gMzAwMCkge1xuICAgICAgICAgICAgICByZWZzLndha2V1cENhbmNlbEFybSA9IHsgaWQ6IHcuaWQsIGF0OiBEYXRlLm5vdygpIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZsYXNoKGBhZ2FpbiB0byBjYW5jZWwgd2FrZS11cCAke3cuaWR9ICgke3cubm90ZS5zcGxpdCgnXFxuJylbMF0uc2xpY2UoMCwgNDApfSlgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVmcy53YWtldXBDYW5jZWxBcm0gPSBudWxsXG4gICAgICAgICAgICBjdGwuY2FuY2VsV2FrZXVwKHcpXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93V2FrZXVwc1BhbmVsKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtyZXdpbmRTdGVwKCkgPT09ICdwaWNrJyAmJiAoXG4gICAgICAgIDxSZXdpbmRQaWNrUGFuZWxcbiAgICAgICAgICBlbnRyaWVzPXtbLi4ucmV3aW5kRW50cmllcygpXS5yZXZlcnNlKCl9XG4gICAgICAgICAgc3RhdHM9eyhpbmRleCkgPT4gcmV3aW5kU3RhdHMoZGVyaXZlZCgpLCBpbmRleCl9XG4gICAgICAgICAgZm9jdXNlZD17cmV3aW5kU3RlcCgpID09PSAncGljayd9XG4gICAgICAgICAgb25QaWNrPXsoZW50cnkpID0+IHsgc2V0UmV3aW5kVGFyZ2V0KGVudHJ5KTsgc2V0UmV3aW5kU3RlcCgnYWN0aW9uJykgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRSZXdpbmRTdGVwKG51bGwpfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge3Jld2luZFN0ZXAoKSA9PT0gJ2FjdGlvbicgJiYgcmV3aW5kVGFyZ2V0KCkgJiYgKFxuICAgICAgICA8UmV3aW5kQWN0aW9uUGFuZWxcbiAgICAgICAgICB0YXJnZXQ9e3Jld2luZFRhcmdldCgpfVxuICAgICAgICAgIG9wdGlvbnM9e3Jld2luZE9wdGlvbnN9XG4gICAgICAgICAgZm9jdXNlZD17cmV3aW5kU3RlcCgpID09PSAnYWN0aW9uJ31cbiAgICAgICAgICBvblN1Ym1pdD17cGVyZm9ybVJld2luZH1cbiAgICAgICAgICBvbkJhY2s9eygpID0+IHNldFJld2luZFN0ZXAoJ3BpY2snKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBzZWxlY3RlZD17IXZpZXdlZFNoZWxsICYmICF2aWV3ZWRBZ2VudH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnYWN0aXZpdHktbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ2FjdGl2aXR5LW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpOyBzZXRIaXN0V2luZG93KEhJU1RPUllfV0lORE9XKSB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhY3Rpdml0eS1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkU2hlbGwgJiYgIXZpZXdlZEFnZW50ID8gRkcgOiBNVVRFRCB9fT57J21haW4nfTwvdGV4dD5cbiAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cblxuICAgICAge3Zpc2libGVTaGVsbHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyLCBtYXJnaW5Ub3A6IGNvbWJpbmVkQWN0aXZpdHkgfHwgc2hvd0NvbXBvc2VyQWN0aW9ucyA/IDAgOiAxIH19PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtzaGVsbEFjdGlvbkhpbnQgPyBgJHtzaGVsbEFjdGlvbkhpbnR9ICBgIDogJyd9ai9rIG1vdmVgfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgICB7IWNvbWJpbmVkQWN0aXZpdHkgJiYgKFxuICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cgc2VsZWN0ZWQ9eyF2aWV3ZWRTaGVsbH0gZm9jdXNlZD17Zm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbid9IG9uUHJlc3M9eygpID0+IHsgZm0uZm9jdXMoJ3NoZWxsLW1haW4nKTsgc2V0Vmlld2VkU2hlbGxJZChudWxsKTsgc2V0Vmlld2VkQWdlbnRJZChudWxsKTsgc2V0Rm9sbG93KHRydWUpIH19PlxuICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm0uY3VycmVudCgpID09PSAnc2hlbGwtbWFpbicgPyAnYmxhY2snIDogYWNjZW50KCkgfX0+eydcdTI1Q0YgJ308L3RleHQ+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdzaGVsbC1tYWluJyA/ICdibGFjaycgOiAhdmlld2VkU2hlbGwgPyBGRyA6IE1VVEVEIH19PnsnbWFpbid9PC90ZXh0PlxuICAgICAgICAgICAgPC9BZ2VudFN0cmlwUm93PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3NoZWxsV2luZG93Lm1hcCgocykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGZtLmN1cnJlbnQoKSA9PT0gYHNoZWxsLSR7cy5pZH1gXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHZpZXdlZFNoZWxsSWQoKSA9PT0gcy5pZFxuICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IGFnZW50RWxhcHNlZCh7IHN0YXJ0ZWRBdDogcy5zdGFydGVkQXQsIGVuZGVkQXQ6IHMuZW5kZWRBdCB9KVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEFnZW50U3RyaXBSb3cga2V5PXtgc2hlbGwtJHtzLmlkfWB9IHNlbGVjdGVkPXtzZWxlY3RlZH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cyhgc2hlbGwtJHtzLmlkfWApOyBzZXRWaWV3ZWRTaGVsbElkKHMuaWQpOyBzZXRWaWV3ZWRBZ2VudElkKG51bGwpOyBzZXRGb2xsb3codHJ1ZSkgfX0+XG4gICAgICAgICAgICAgICAge3Muc3RhdHVzID09PSAncnVubmluZycgPyA8U3Bpbm5lciBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBhY2NlbnQoKX0gdmFyaWFudD1cImRvdHNcIiAvPiA6IDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHMuZXhpdENvZGUgPT09IDAgPyBHUkVFTiA6IFJFRCB9fT57cy5leGl0Q29kZSA9PT0gMCA/ICdcdTI1Q0YnIDogJ1x1MDBENyd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICA8dGV4dD57JyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzZWxlY3RlZCA/IEZHIDogTVVURUQgfX0+e2BzaGVsbCBbJHtzLmlkfV0gIGB9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIGhlaWdodDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IG92ZXJmbG93OiAndHJ1bmNhdGUnLCBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRCB9fT57cy5kZXNjcmlwdGlvbiB8fCBzLmNvbW1hbmQucmVwbGFjZSgvXFxuL2csICcgJyl9PC90ZXh0PlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgICAke3Muc3RhdHVzID09PSAncnVubmluZycgPyAnJyA6IGBleGl0ICR7cy5leGl0Q29kZX0gIGB9JHtlbGFwc2VkfWB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgICAge3Zpc2libGVTaGVsbHMubGVuZ3RoID4gc2hlbGxTdHJpcFNpemUgJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke3NoZWxsV2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke3NoZWxsV2luZG93U3RhcnR9YCA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCA+IDAgJiYgc2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7c2hlbGxXaW5kb3dTdGFydCArIHNoZWxsV2luZG93Lmxlbmd0aCA8IHZpc2libGVTaGVsbHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVTaGVsbHMubGVuZ3RoIC0gc2hlbGxXaW5kb3dTdGFydCAtIHNoZWxsV2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt2aXNpYmxlQWdlbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgbWFyZ2luVG9wOiBjb21iaW5lZEFjdGl2aXR5IHx8IHNob3dDb21wb3NlckFjdGlvbnMgPyAwIDogMSB9fT5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCR7YWdlbnRBY3Rpb25IaW50ID8gYCR7YWdlbnRBY3Rpb25IaW50fSAgYCA6ICcnfWovayBtb3ZlYH08L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgeyFjb21iaW5lZEFjdGl2aXR5ICYmIChcbiAgICAgICAgICAgIDxBZ2VudFN0cmlwUm93IHNlbGVjdGVkPXshdmlld2VkQWdlbnR9IGZvY3VzZWQ9e2ZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nfSBvblByZXNzPXsoKSA9PiB7IGZtLmZvY3VzKCdhZ2VudC1tYWluJyk7IHNldFZpZXdlZFNoZWxsSWQobnVsbCk7IHNldFZpZXdlZEFnZW50SWQobnVsbCk7IHNldEZvbGxvdyh0cnVlKTsgc2V0SGlzdFdpbmRvdyhISVNUT1JZX1dJTkRPVykgfX0+XG4gICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmbS5jdXJyZW50KCkgPT09ICdhZ2VudC1tYWluJyA/ICdibGFjaycgOiBhY2NlbnQoKSB9fT57J1x1MjVDRiAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZtLmN1cnJlbnQoKSA9PT0gJ2FnZW50LW1haW4nID8gJ2JsYWNrJyA6ICF2aWV3ZWRBZ2VudCA/IEZHIDogTVVURUQgfX0+eydtYWluJ308L3RleHQ+XG4gICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7YWdlbnRXaW5kb3cubWFwKChhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhZ2VudFN0YXR1cyhhKVxuICAgICAgICAgICAgY29uc3QgZm9jdXNlZCA9IGZtLmN1cnJlbnQoKSA9PT0gYGFnZW50LSR7YS5pZH1gXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QWdlbnRTdHJpcFJvdyBrZXk9e2BhZ2VudC0ke2EuaWR9YH0gc2VsZWN0ZWQ9e3ZpZXdlZEFnZW50SWQoKSA9PT0gYS5pZH0gZm9jdXNlZD17Zm9jdXNlZH0gb25QcmVzcz17KCkgPT4geyBmbS5mb2N1cyhgYWdlbnQtJHthLmlkfWApOyBzZXRWaWV3ZWRTaGVsbElkKG51bGwpOyBzZXRWaWV3ZWRBZ2VudElkKGEuaWQpOyBzZXRGb2xsb3codHJ1ZSk7IHNldEhpc3RXaW5kb3coSElTVE9SWV9XSU5ET1cpIH19PlxuICAgICAgICAgICAgICAgIHthLnN0YXR1cyA9PT0gJ3J1bm5pbmcnID8gPFNwaW5uZXIgY29sb3I9e2ZvY3VzZWQgPyAnYmxhY2snIDogYWNjZW50KCl9IHZhcmlhbnQ9XCJkb3RzXCIgLz4gOiA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCA/ICdibGFjaycgOiBzdGF0dXMuY29sb3IgfX0+e3N0YXR1cy5pY29ufTwvdGV4dD59XG4gICAgICAgICAgICAgICAgPHRleHQ+eycgJ308L3RleHQ+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGZvY3VzZWQgPyAnYmxhY2snIDogdmlld2VkQWdlbnRJZCgpID09PSBhLmlkID8gRkcgOiBNVVRFRCB9fT57YCR7YS5yb2xlIHx8ICdhZ2VudCd9IFske2EuaWR9XSAgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSwgaGVpZ2h0OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgb3ZlcmZsb3c6ICd0cnVuY2F0ZScsIGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PnthLmRlc2NyaXB0aW9ufTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAgICB7c3RhdHVzLmxhYmVsICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IHN0YXR1cy5jb2xvciB9fT57YCAgJHtzdGF0dXMubGFiZWx9YH08L3RleHQ+fVxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBmb2N1c2VkID8gJ2JsYWNrJyA6IE1VVEVEIH19PntgJHtzdGF0dXMubGFiZWwgPyAnICAnIDogJyAgJ30gJHthZ2VudEVsYXBzZWQoYSl9ICBcdTIxOTMgYH08L3RleHQ+XG4gICAgICAgICAgICAgICAgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2EudXNhZ2U/LnRvdGFsVG9rZW5zIHx8IGEudXNhZ2U/LnByb21wdFRva2VucyB8fCAwfSBjb2xvcj17Zm9jdXNlZCA/ICdibGFjaycgOiBNVVRFRH0gaGlnaGxpZ2h0PXtmb2N1c2VkID8gJ2JsYWNrJyA6IGFjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSB0b2tlbnNgfSAvPlxuICAgICAgICAgICAgICA8L0FnZW50U3RyaXBSb3c+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgICAge3Zpc2libGVBZ2VudHMubGVuZ3RoID4gYWdlbnRTdHJpcFNpemUgJiYgKFxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgICAke2FnZW50V2luZG93U3RhcnQgPiAwID8gYFx1MjE5MSAke2FnZW50V2luZG93U3RhcnR9YCA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCA+IDAgJiYgYWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gJyAgJyA6ICcnfSR7YWdlbnRXaW5kb3dTdGFydCArIGFnZW50V2luZG93Lmxlbmd0aCA8IHZpc2libGVBZ2VudHMubGVuZ3RoID8gYFx1MjE5MyAke3Zpc2libGVBZ2VudHMubGVuZ3RoIC0gYWdlbnRXaW5kb3dTdGFydCAtIGFnZW50V2luZG93Lmxlbmd0aH1gIDogJyd9IG1vcmVgfTwvdGV4dD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2JveD5cbiAgICAgICl9XG5cbiAgICAgIHt3aWRlTGF5b3V0ICYmIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz59XG5cbiAgICAgIHt3aWRlTGF5b3V0ID8gKFxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiwgcGFkZGluZ1RvcDogMSB9fT5cbiAgICAgICAgICB7YnVzeSgpICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgICAgICAgICA8U2hpbW1lciBjb2xvcj17YWNjZW50KCl9IGhpZ2hsaWdodD17SElHSExJR0hUfSBkdXJhdGlvbj17MTUwMH0gcmV2ZXJzZT5cbiAgICAgICAgICAgICAgICAgIHtjb21wYWN0aW5nKClcbiAgICAgICAgICAgICAgICAgICAgPyBjb21wYWN0U3RhdHVzKCk/LnBoYXNlID09PSAnd3JpdGluZycgPyBgQ29tcGFjdGluZyAgd3JpdGluZyAke2NvbXBhY3RTdGF0dXMoKS5zZWN0aW9ufS84YCA6ICdDb21wYWN0aW5nICBhbmFseXppbmcnXG4gICAgICAgICAgICAgICAgICAgIDogdHVyblBoYXNlKCkgPT09ICd0aGlua2luZycgPyAnVGhpbmtpbmcnIDogdHVyblBoYXNlKCkgPT09ICd0b29scycgPyAnV29ya2luZycgOiAnUmVzcG9uZGluZyd9XG4gICAgICAgICAgICAgICAgPC9TaGltbWVyPlxuICAgICAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgJHtlbGFwc2VkfSAgZXNjIHRvIGludGVycnVwdGB9PC90ZXh0PlxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgICAge2NvbXBhY3RTdGF0dXMoKT8ucGhhc2UgPT09ICd3cml0aW5nJyAmJiA8UHJvZ3Jlc3NCYXIgdmFyaWFudD1cInRoaW5cIiB2YWx1ZT17Y29tcGFjdFN0YXR1cygpLnNlY3Rpb24gLyA4fSB3aWR0aD17MzB9IHBlcmNlbnRhZ2U9e2ZhbHNlfSBjb2xvcj17YWNjZW50KCl9IC8+fVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7Z2l0SW5mbz8uYnJhbmNoICYmIChcbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpbkJvdHRvbTogMSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQsIGJvbGQ6IHRydWUgfX0+eydSZXBvc2l0b3J5J308L3RleHQ+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQnJhbmNoICAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2dpdEluZm8uYnJhbmNofTwvdGV4dD5cbiAgICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PnsnQ2hhbmdlcyAnfTwvdGV4dD5cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEdSRUVOIH19PntgJHtnaXRJbmZvLmFkZGVkfSBhZGRlZGB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5hZGRlZCA+IDAgJiYgZ2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eycgICd9PC90ZXh0Pn1cbiAgICAgICAgICAgICAgICB7Z2l0SW5mby5yZW1vdmVkID4gMCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogUkVEIH19PntgJHtnaXRJbmZvLnJlbW92ZWR9IHJlbW92ZWRgfTwvdGV4dD59XG4gICAgICAgICAgICAgICAge2dpdEluZm8uYWRkZWQgPT09IDAgJiYgZ2l0SW5mby5yZW1vdmVkID09PSAwICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J2NsZWFuJ308L3RleHQ+fVxuICAgICAgICAgICAgICA8L2JveD5cbiAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZULCBib2xkOiB0cnVlIH19PnsnU2Vzc2lvbid9PC90ZXh0PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydEaXJlY3RvcnkgICAgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCwgb3ZlcmZsb3c6ICd0cnVuY2F0ZScgfX0+e2Jvb3QuZGlzcGxheUN3ZH08L3RleHQ+PC9ib3g+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J01vZGVsICAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57bW9kZWwoKS5uYW1lfTwvdGV4dD57c3BlZWRBcHBsaWVzKCkgJiYgc3BlZWQoKSA9PT0gJ2Zhc3QnICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSB9fT57JyBGYXN0J308L3RleHQ+fTwvYm94PlxuICAgICAgICAgICAge2VmZm9ydEFwcGxpZXMoKSAmJiBlZmZvcnQoKSAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J0VmZm9ydCAgICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntlZmZvcnQoKX08L3RleHQ+PC9ib3g+fVxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydJbnB1dCB0b2tlbnMgICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5wcm9tcHRUb2tlbnMpLnRvTG9jYWxlU3RyaW5nKCl9PC90ZXh0PjwvYm94PlxuICAgICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydPdXRwdXQgdG9rZW5zICAnfTwvdGV4dD48dGV4dCBzdHlsZT17eyBjb2xvcjogRkdfU09GVCB9fT57TWF0aC5yb3VuZCh1c2FnZS5jb21wbGV0aW9uVG9rZW5zKS50b0xvY2FsZVN0cmluZygpfTwvdGV4dD48L2JveD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1Rob3VnaHQgdG9rZW5zICd9PC90ZXh0PjxBbmltYXRlZFZhbHVlIHZhbHVlPXt1c2FnZS50aG91Z2h0VG9rZW5zfSBjb2xvcj17RkdfU09GVH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gZm9ybWF0PXsobikgPT4gTWF0aC5yb3VuZChuKS50b0xvY2FsZVN0cmluZygpfSAvPjwvYm94Pn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT48dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+eydDb250ZXh0IHVzZWQgICAnfTwvdGV4dD48QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17Y29udGV4dFBlcmNlbnR9IGNvbG9yPXtjb250ZXh0UGVyY2VudCA+PSA4MCA/IFJFRCA6IEZHX1NPRlR9IGhpZ2hsaWdodD17YWNjZW50KCl9IGZvcm1hdD17KG4pID0+IGAke01hdGgucm91bmQobil9JWB9IC8+PC9ib3g+fVxuICAgICAgICAgICAge3BlbmRpbmdXYWtldXBzID4gMCAmJiA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57J1dha2UtdXBzICAgICAgICd9PC90ZXh0Pjx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntwZW5kaW5nV2FrZXVwc308L3RleHQ+PC9ib3g+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICA8L2JveD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyBoZWlnaHQ6IDEgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBwYWRkaW5nWDogMiwgZ2FwOiAxIH19PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19Pnttb2RlbCgpLm5hbWV9PC90ZXh0PlxuICAgICAgICAgICAge3NwZWVkQXBwbGllcygpICYmIHNwZWVkKCkgPT09ICdmYXN0JyAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+RmFzdDwvdGV4dD59XG4gICAgICAgICAgICB7ZWZmb3J0QXBwbGllcygpICYmIGVmZm9ydCgpICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57ZWZmb3J0KCl9PC90ZXh0Pn1cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICAgIHtwZW5kaW5nV2FrZXVwcyA+IDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyM0YwICR7cGVuZGluZ1dha2V1cHN9YH08L3RleHQ+fVxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLnByb21wdFRva2Vucyl9IFx1MjE5M2B9PC90ZXh0PlxuICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgJHtjb21wYWN0TnVtYmVyKHVzYWdlLmNvbXBsZXRpb25Ub2tlbnMpfSBcdTIxOTFgfTwvdGV4dD5cbiAgICAgICAgICAgIHt1c2FnZS50aG91Z2h0VG9rZW5zID4gMCAmJiA8QW5pbWF0ZWRWYWx1ZSB2YWx1ZT17dXNhZ2UudGhvdWdodFRva2Vuc30gY29sb3I9e01VVEVEfSBoaWdobGlnaHQ9e2FjY2VudCgpfSBmb3JtYXQ9eyhuKSA9PiBgJHtjb21wYWN0TnVtYmVyKG4pfSBcdTI1QzhgfSAvPn1cbiAgICAgICAgICAgIHtjb250ZXh0UGVyY2VudCA+IDAgJiYgPEFuaW1hdGVkVmFsdWUgdmFsdWU9e2NvbnRleHRQZXJjZW50fSBjb2xvcj17Y29udGV4dFBlcmNlbnQgPj0gODAgPyBSRUQgOiBNVVRFRH0gaGlnaGxpZ2h0PXthY2NlbnQoKX0gYmFja2dyb3VuZD17UEFORUxfQkd9IGZvcm1hdD17Y29udGV4dEJhcn0gLz59XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICAgIDwvYm94PlxuICAgICAgeyF3b3Jrc3BhY2VPcGVuKCkgJiYgPERpY3RhdGlvbktleXMgaW5wdXQ9e3JlZnMuZGljdGF0aW9uSW5wdXR9IC8+fVxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gY29tbWFuZEF0KHRleHQsIGN1cnNvciA9IHRleHQubGVuZ3RoKSB7XG4gIGNvbnN0IG1hdGNoID0gdGV4dC5zbGljZSgwLCBjdXJzb3IpLm1hdGNoKC8oXnxbXFxzKF0pXFwvKFtBLVphLXowLTlfLV0qKSQvKVxuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbFxuICBjb25zdCBzdGFydCA9IGN1cnNvciAtIG1hdGNoWzJdLmxlbmd0aCAtIDFcbiAgY29uc3Qgc3VmZml4ID0gdGV4dC5zbGljZShjdXJzb3IpLm1hdGNoKC9eW0EtWmEtejAtOV8tXSovKVswXVxuICByZXR1cm4geyBzdGFydCwgZW5kOiBjdXJzb3IgKyBzdWZmaXgubGVuZ3RoLCBxdWVyeTogbWF0Y2hbMl0gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUNvbW1hbmQodGV4dCwgcmFuZ2UsIGJvZHkpIHtcbiAgcmV0dXJuIHtcbiAgICB0ZXh0OiB0ZXh0LnNsaWNlKDAsIHJhbmdlLnN0YXJ0KSArIGJvZHkgKyB0ZXh0LnNsaWNlKHJhbmdlLmVuZCksXG4gICAgY3Vyc29yOiByYW5nZS5zdGFydCArIGJvZHkubGVuZ3RoLFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kRmllbGRzKGNvbW1hbmQsIGJvZHksIGFyZ3MgPSAnJykge1xuICBjb25zdCBmaWVsZHMgPSBbLi4uKGNvbW1hbmQuYXJndW1lbnRzID8/IFtdKV1cbiAgaWYgKGJvZHkuaW5jbHVkZXMoJyRBUkdVTUVOVFMnKSAmJiAhYXJncykge1xuICAgIGZpZWxkcy5wdXNoKHsgbmFtZTogJyRhcmdzJywgbGFiZWw6ICdBcmd1bWVudHMnLCB0eXBlOiAndGV4dCcgfSlcbiAgfVxuICByZXR1cm4gZmllbGRzXG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlU2lnbmFsLCBUZXh0QXJlYSwgTWVudSwgQnV0dG9uLCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGZ1enp5U2NvcmUsIHJhbmtGdXp6eSB9IGZyb20gJ3BpY29jb2RlLWNvcmUvZnV6enkuanMnXG5pbXBvcnQgeyBhY2NlbnQsIEZHLCBNVVRFRCwgUEFORUxfQkcgfSBmcm9tICcuL3RoZW1lLmpzJ1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tbWFuZEZvcm0oeyBuYW1lLCBmaWVsZHMsIGZpbGVzLCBmb2N1c2VkLCBvblN1Ym1pdCwgb25DYW5jZWwgfSkge1xuICBjb25zdCBbc3RlcCwgc2V0U3RlcF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IGNyZWF0ZVNpZ25hbCh7fSlcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IGZpZWxkID0gZmllbGRzW3N0ZXAoKV1cbiAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkLnR5cGUgPT09ICdjaG9pY2UnID8gZmllbGQuY2hvaWNlcyA6IGZpZWxkLnR5cGUgPT09ICdwYXRoJyA/IGZpbGVzIDogW11cbiAgY29uc3QgbWF0Y2hlcyA9IHJhbmtGdXp6eShvcHRpb25zLCBxdWVyeSgpLCAocSwgdmFsdWUpID0+IGZ1enp5U2NvcmUocSwgdmFsdWUpKVxuXG4gIGZ1bmN0aW9uIGFkdmFuY2UodmFsdWUpIHtcbiAgICBjb25zdCBuZXh0ID0geyAuLi52YWx1ZXMoKSwgW2ZpZWxkLm5hbWVdOiB2YWx1ZSB9XG4gICAgc2V0VmFsdWVzKG5leHQpXG4gICAgaWYgKHN0ZXAoKSA9PT0gZmllbGRzLmxlbmd0aCAtIDEpIHJldHVybiBvblN1Ym1pdChuZXh0KVxuICAgIHNldFN0ZXAoc3RlcCgpICsgMSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRTZWxlY3RlZCgwKVxuICB9XG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DYW5jZWwoKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGdhcDogMiB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PntgLyR7bmFtZX1gfTwvdGV4dD5cbiAgICAgICAge2ZpZWxkcy5zbGljZSgwLCBzdGVwKCkpLm1hcCgoaXRlbSkgPT4gPHRleHQga2V5PXtpdGVtLm5hbWV9IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57dmFsdWVzKClbaXRlbS5uYW1lXX08L3RleHQ+KX1cbiAgICAgICAgPEJ1dHRvbiBsYWJlbD1cIkNhbmNlbFwiIG9uUHJlc3M9e29uQ2FuY2VsfSAvPlxuICAgICAgPC9ib3g+XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcgfX0+e2ZpZWxkLmxhYmVsfTwvdGV4dD5cbiAgICAgIDxUZXh0QXJlYVxuICAgICAgICBrZXk9e2ZpZWxkLm5hbWV9XG4gICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWR9XG4gICAgICAgIHZhbHVlPXtxdWVyeSgpfVxuICAgICAgICBzdWJtaXRPbkVudGVyXG4gICAgICAgIGNsZWFyT25TdWJtaXQ9e2ZhbHNlfVxuICAgICAgICBtYXhIZWlnaHQ9ezF9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtmaWVsZC5sYWJlbH1cbiAgICAgICAgb25DYW5jZWw9e29uQ2FuY2VsfVxuICAgICAgICBvbkNoYW5nZT17KHZhbHVlKSA9PiB7IHNldFF1ZXJ5KHZhbHVlKTsgc2V0U2VsZWN0ZWQoMCkgfX1cbiAgICAgICAgb25TdWJtaXQ9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnY2hvaWNlJykge1xuICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoKSBhZHZhbmNlKG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgfSBlbHNlIGFkdmFuY2UoZmllbGQudHlwZSA9PT0gJ3BhdGgnICYmIG1hdGNoZXMubGVuZ3RoICYmICF2YWx1ZS5zdGFydHNXaXRoKCcvJykgJiYgIXZhbHVlLnN0YXJ0c1dpdGgoJ34nKSA/IG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0gOiB2YWx1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25LZXlEb3duPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKE1hdGgubWluKHNlbGVjdGVkKCkgKyAxLCBtYXRjaGVzLmxlbmd0aCAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWQoTWF0aC5tYXgoMCwgc2VsZWN0ZWQoKSAtIDEpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgJiYgbWF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNldFF1ZXJ5KG1hdGNoZXNbTWF0aC5taW4oc2VsZWN0ZWQoKSwgbWF0Y2hlcy5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICB7bWF0Y2hlcy5sZW5ndGggPiAwICYmIDxNZW51XG4gICAgICAgIGl0ZW1zPXttYXRjaGVzfVxuICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWQoKX1cbiAgICAgICAgb25TZWxlY3Q9e3NldFNlbGVjdGVkfVxuICAgICAgICBvblN1Ym1pdD17YWR2YW5jZX1cbiAgICAgICAgZm9jdXNlZD17ZmFsc2V9XG4gICAgICAgIG1heFZpc2libGU9ezV9XG4gICAgICAgIHJlbmRlckl0ZW09eyh2YWx1ZSwgeyBhY3RpdmUgfSkgPT4gPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjdGl2ZSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2Ake2FjdGl2ZSA/ICdcdTIwM0EgJyA6ICcgICd9JHt2YWx1ZX1gfTwvdGV4dD59XG4gICAgICAvPn1cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImNvbnN0IGZpbGxlciA9IC8oPzwhW15cXHMsOzohP10pKD86dWh8dW0pKD89JHxbXFxzLDs6LiE/XSkoWyBcXHRdKlssOzouIT9dKilbIFxcdF0qL2dpdVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5EaWN0YXRpb24odGV4dCkge1xuICByZXR1cm4gdGV4dC5zcGxpdCgnXFxuJykubWFwKGNsZWFuTGluZSkuam9pbignXFxuJykudHJpbSgpXG59XG5cbmZ1bmN0aW9uIGNsZWFuTGluZShsaW5lKSB7XG4gIGxldCByZXN1bHQgPSAnJ1xuICBsZXQgb2Zmc2V0ID0gMFxuICBsZXQgY2FwaXRhbGl6ZSA9IGZhbHNlXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgbGluZS5tYXRjaEFsbChmaWxsZXIpKSB7XG4gICAgbGV0IGJlZm9yZSA9IGxpbmUuc2xpY2Uob2Zmc2V0LCBtYXRjaC5pbmRleClcbiAgICBpZiAoY2FwaXRhbGl6ZSkgYmVmb3JlID0gdXBwZXJGaXJzdChiZWZvcmUpXG4gICAgcmVzdWx0ICs9IGJlZm9yZVxuICAgIGNvbnN0IGFmdGVyID0gbGluZS5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aClcbiAgICBjb25zdCB0ZXJtaW5hbCA9IG1hdGNoWzFdLm1hdGNoKC9bLiE/XSsvKT8uWzBdID8/ICcnXG4gICAgcmVzdWx0ID0gcmVzdWx0LnRyaW1FbmQoKVxuICAgIGNvbnN0IHNlbnRlbmNlU3RhcnQgPSAhcmVzdWx0IHx8IC9bLiE/XSQvLnRlc3QocmVzdWx0KVxuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC8sJC8sICcnKVxuICAgIGlmICghYWZ0ZXIpIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9bOzpdJC8sICcnKVxuICAgIGlmICh0ZXJtaW5hbCAmJiAhc2VudGVuY2VTdGFydCkgcmVzdWx0ICs9IHRlcm1pbmFsXG4gICAgY2FwaXRhbGl6ZSA9IHNlbnRlbmNlU3RhcnQgfHwgQm9vbGVhbih0ZXJtaW5hbClcbiAgICBpZiAocmVzdWx0ICYmIGFmdGVyKSByZXN1bHQgKz0gJyAnXG4gICAgb2Zmc2V0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgfVxuICBjb25zdCB0YWlsID0gbGluZS5zbGljZShvZmZzZXQpXG4gIHJldHVybiByZXN1bHQgKyAoY2FwaXRhbGl6ZSA/IHVwcGVyRmlyc3QodGFpbCkgOiB0YWlsKVxufVxuXG5mdW5jdGlvbiB1cHBlckZpcnN0KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgvXihcXHMqKShcXHB7TGx9KSg/IVxccHtMdX0pL3UsIChfLCBzcGFjZSwgbGV0dGVyKSA9PiBzcGFjZSArIGxldHRlci50b1VwcGVyQ2FzZSgpKVxufVxuXG4iLCAiaW1wb3J0IHsgY2xlYW5EaWN0YXRpb24gfSBmcm9tICcuL2RpY3RhdGlvbi10ZXh0LmpzJ1xuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcydcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCdcblxuZXhwb3J0IGZ1bmN0aW9uIGRpY3RhdGlvbkhlbHBlclBhdGgoKSB7XG4gIGNvbnN0IGJ1bmRsZWQgPSBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4vcGljby1kaWN0YXRlJywgaW1wb3J0Lm1ldGEudXJsKSlcbiAgcmV0dXJuIGV4aXN0c1N5bmMoYnVuZGxlZCkgPyBidW5kbGVkIDogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi9oZWxwZXIvLmJ1aWxkL3JlbGVhc2UvcGljby1kaWN0YXRlJywgaW1wb3J0Lm1ldGEudXJsKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpY3RhdGlvbih7IG9uU3RhdHVzID0gKCkgPT4ge30sIG9uTGV2ZWwgPSAoKSA9PiB7fSwgb25FcnJvciA9ICgpID0+IHt9LCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm0sIGFyY2ggPSBwcm9jZXNzLmFyY2gsIGxhdW5jaCA9ICgpID0+IHNwYXduKGRpY3RhdGlvbkhlbHBlclBhdGgoKSwgW10sIHsgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSB9KSwgbG9hZGluZ1RpbWVvdXQgPSA2MDAwMDAsIHJlcXVlc3RUaW1lb3V0ID0gNDUwMDAgfSA9IHt9KSB7XG4gIGxldCBjaGlsZCA9IG51bGxcbiAgbGV0IHN0YXR1cyA9ICdpZGxlJ1xuICBsZXQgc2VxdWVuY2UgPSAwXG4gIGxldCBnZW5lcmF0aW9uID0gMFxuICBsZXQgcmVhZHkgPSBudWxsXG4gIGxldCBkaXNwb3NlZCA9IGZhbHNlXG4gIGNvbnN0IHBlbmRpbmcgPSBuZXcgTWFwKClcblxuICBmdW5jdGlvbiBzZXRTdGF0dXModmFsdWUpIHtcbiAgICBzdGF0dXMgPSB2YWx1ZVxuICAgIG9uU3RhdHVzKHZhbHVlKVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXQoZXJyb3IgPSBuZXcgRXJyb3IoJ2RpY3RhdGlvbiBjYW5jZWxsZWQnKSkge1xuICAgIGNvbnN0IHByZXZpb3VzID0gY2hpbGRcbiAgICBjaGlsZCA9IG51bGxcbiAgICByZWFkeSA9IG51bGxcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBlbmRpbmcudmFsdWVzKCkpIHtcbiAgICAgIGNsZWFyVGltZW91dChlbnRyeS50aW1lcilcbiAgICAgIGVudHJ5LnJlamVjdChlcnJvcilcbiAgICB9XG4gICAgcGVuZGluZy5jbGVhcigpXG4gICAgcHJldmlvdXM/LnN0ZGluLmVuZCgpXG4gICAgcHJldmlvdXM/LmtpbGwoKVxuICAgIHNldFN0YXR1cygnaWRsZScpXG4gIH1cblxuICBmdW5jdGlvbiB3YWl0Rm9yKGlkLCB0aW1lb3V0KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiByZXNldChuZXcgRXJyb3IoJ2RpY3RhdGlvbiB0aW1lZCBvdXQnKSksIHRpbWVvdXQpXG4gICAgICBwZW5kaW5nLnNldChpZCwgeyByZXNvbHZlLCByZWplY3QsIHRpbWVyIH0pXG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldHRsZShpZCwgbWVzc2FnZSkge1xuICAgIGNvbnN0IGVudHJ5ID0gcGVuZGluZy5nZXQoaWQpXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuXG4gICAgcGVuZGluZy5kZWxldGUoaWQpXG4gICAgY2xlYXJUaW1lb3V0KGVudHJ5LnRpbWVyKVxuICAgIGlmIChtZXNzYWdlLmVycm9yKSBlbnRyeS5yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UuZXJyb3IpKVxuICAgIGVsc2UgZW50cnkucmVzb2x2ZShtZXNzYWdlKVxuICB9XG5cbiAgZnVuY3Rpb24gbG9hZCgpIHtcbiAgICBpZiAocmVhZHkpIHJldHVybiByZWFkeVxuICAgIGlmIChwbGF0Zm9ybSAhPT0gJ2RhcndpbicgfHwgYXJjaCAhPT0gJ2FybTY0JykgdGhyb3cgbmV3IEVycm9yKCdkaWN0YXRpb24gcmVxdWlyZXMgYW4gQXBwbGUgU2lsaWNvbiBNYWMnKVxuICAgIGNvbnN0IGluc3RhbmNlID0gbGF1bmNoKClcbiAgICBjaGlsZCA9IGluc3RhbmNlXG4gICAgcmVhZHkgPSB3YWl0Rm9yKCdyZWFkeScsIGxvYWRpbmdUaW1lb3V0KVxuICAgIGxldCBidWZmZXIgPSAnJ1xuICAgIGluc3RhbmNlLnN0ZG91dC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9PSBpbnN0YW5jZSkgcmV0dXJuXG4gICAgICBidWZmZXIgKz0gY2h1bmsudG9TdHJpbmcoKVxuICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAxMDI0ICogMTAyNCkgcmV0dXJuIHJlc2V0KG5ldyBFcnJvcignaW52YWxpZCBkaWN0YXRpb24gaGVscGVyIG91dHB1dCcpKVxuICAgICAgbGV0IGF0XG4gICAgICB3aGlsZSAoKGF0ID0gYnVmZmVyLmluZGV4T2YoJ1xcbicpKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBidWZmZXIuc2xpY2UoMCwgYXQpXG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zbGljZShhdCArIDEpXG4gICAgICAgIGxldCBtZXNzYWdlXG4gICAgICAgIHRyeSB7IG1lc3NhZ2UgPSBKU09OLnBhcnNlKGxpbmUpIH0gY2F0Y2ggeyBjb250aW51ZSB9XG4gICAgICAgIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ2xldmVsJykge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdyZWNvcmRpbmcnICYmIE51bWJlci5pc0Zpbml0ZShtZXNzYWdlLmxldmVsKSkgb25MZXZlbChNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBtZXNzYWdlLmxldmVsKSkpXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5zdGF0dXMgPT09ICdyZWFkeScpIHNldHRsZSgncmVhZHknLCBtZXNzYWdlKVxuICAgICAgICBlbHNlIGlmIChtZXNzYWdlLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UubWVzc2FnZSB8fCAnZGljdGF0aW9uIGZhaWxlZCcpXG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gcGVuZGluZy5zaXplID4gMFxuICAgICAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgICAgIGlmICghYWN0aXZlKSBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pZCAhPSBudWxsKSBzZXR0bGUobWVzc2FnZS5pZCwgbWVzc2FnZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIGluc3RhbmNlLnN0ZGVyci5vbignZGF0YScsICgpID0+IHt9KVxuICAgIGNvbnN0IGZhaWxlZCA9IChlcnJvcikgPT4ge1xuICAgICAgaWYgKGNoaWxkICE9PSBpbnN0YW5jZSkgcmV0dXJuXG4gICAgICBjb25zdCBhY3RpdmUgPSBwZW5kaW5nLnNpemUgPiAwXG4gICAgICBjb25zdCByZWNvcmRpbmcgPSBzdGF0dXMgPT09ICdyZWNvcmRpbmcnXG4gICAgICByZXNldChlcnJvcilcbiAgICAgIGlmICghYWN0aXZlICYmIHJlY29yZGluZykgb25FcnJvcihlcnJvci5tZXNzYWdlKVxuICAgIH1cbiAgICBpbnN0YW5jZS5vbignZXJyb3InLCAoZXJyb3IpID0+IGZhaWxlZChuZXcgRXJyb3IoYGRpY3RhdGlvbiBoZWxwZXIgdW5hdmFpbGFibGU6ICR7ZXJyb3IubWVzc2FnZX1gKSkpXG4gICAgaW5zdGFuY2Uuc3RkaW4ub24oJ2Vycm9yJywgZmFpbGVkKVxuICAgIGluc3RhbmNlLm9uKCdleGl0JywgKCkgPT4gZmFpbGVkKG5ldyBFcnJvcignZGljdGF0aW9uIGhlbHBlciBleGl0ZWQnKSkpXG4gICAgcmV0dXJuIHJlYWR5XG4gIH1cblxuICBmdW5jdGlvbiByZXF1ZXN0KG9wKSB7XG4gICAgY29uc3QgaWQgPSArK3NlcXVlbmNlXG4gICAgY29uc3QgcmVzdWx0ID0gd2FpdEZvcihpZCwgcmVxdWVzdFRpbWVvdXQpXG4gICAgdHJ5IHsgY2hpbGQuc3RkaW4ud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkoeyBpZCwgb3AgfSl9XFxuYCkgfSBjYXRjaCAoZXJyb3IpIHsgcmVzZXQoZXJyb3IpIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBwcmVsb2FkKCkge1xuICAgIGlmIChkaXNwb3NlZCkgcmV0dXJuXG4gICAgdHJ5IHsgYXdhaXQgbG9hZCgpIH0gY2F0Y2gge31cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgIGlmIChkaXNwb3NlZCB8fCBzdGF0dXMgIT09ICdpZGxlJykgcmV0dXJuXG4gICAgY29uc3QgdG9rZW4gPSArK2dlbmVyYXRpb25cbiAgICBzZXRTdGF0dXMoJ2xvYWRpbmcnKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBsb2FkKClcbiAgICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbikgcmV0dXJuXG4gICAgICBzZXRTdGF0dXMoJ3N0YXJ0aW5nJylcbiAgICAgIGF3YWl0IHJlcXVlc3QoJ3N0YXJ0JylcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgc2V0U3RhdHVzKCdyZWNvcmRpbmcnKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAodG9rZW4gIT09IGdlbmVyYXRpb24pIHJldHVyblxuICAgICAgcmVzZXQoZXJyb3IpXG4gICAgICBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBpZiAoc3RhdHVzICE9PSAncmVjb3JkaW5nJykgcmV0dXJuIG51bGxcbiAgICBjb25zdCB0b2tlbiA9IGdlbmVyYXRpb25cbiAgICBzZXRTdGF0dXMoJ3RyYW5zY3JpYmluZycpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcXVlc3QoJ3N0b3AnKVxuICAgICAgaWYgKHRva2VuICE9PSBnZW5lcmF0aW9uKSByZXR1cm4gbnVsbFxuICAgICAgc2V0U3RhdHVzKCdpZGxlJylcbiAgICAgIHJldHVybiBjbGVhbkRpY3RhdGlvbihyZXN1bHQudGV4dCB8fCAnJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSB7XG4gICAgICAgIHJlc2V0KGVycm9yKVxuICAgICAgICBvbkVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBjb25zdCB0b2tlbiA9ICsrZ2VuZXJhdGlvblxuICAgIGlmIChzdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiByZXNldCgpXG4gICAgc2V0U3RhdHVzKCdjYW5jZWxsaW5nJylcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmVxdWVzdCgnY2FuY2VsJylcbiAgICAgIGlmICh0b2tlbiA9PT0gZ2VuZXJhdGlvbikgc2V0U3RhdHVzKCdpZGxlJylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHRva2VuID09PSBnZW5lcmF0aW9uKSByZXNldChlcnJvcilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkaXNwb3NlKCkge1xuICAgIGRpc3Bvc2VkID0gdHJ1ZVxuICAgICsrZ2VuZXJhdGlvblxuICAgIHJlc2V0KClcbiAgfVxuXG4gIHJldHVybiB7IHByZWxvYWQsIHN0YXJ0LCBzdG9wLCBjYW5jZWwsIGRpc3Bvc2UsIGdldCBzdGF0dXMoKSB7IHJldHVybiBzdGF0dXMgfSB9XG59XG4iLCAiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICdub2RlOnV0aWwnXG5pbXBvcnQgeyBta2R0ZW1wLCB3cml0ZUZpbGUsIHJtIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcydcbmltcG9ydCB7IHJtU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcblxuY29uc3QgZXhlY3V0ZSA9IHByb21pc2lmeShleGVjRmlsZSlcbmNvbnN0IGRpcmVjdG9yaWVzID0gbmV3IFNldCgpXG5wcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZGlyIG9mIGRpcmVjdG9yaWVzKSBybVN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbn0pXG5cbmNvbnN0IG1hY1NjcmlwdCA9IGBPYmpDLmltcG9ydCgnQXBwS2l0Jyk7IE9iakMuaW1wb3J0KCdGb3VuZGF0aW9uJyk7XG5jb25zdCBwYXN0ZWJvYXJkID0gJC5OU1Bhc3RlYm9hcmQuZ2VuZXJhbFBhc3RlYm9hcmQ7XG5jb25zdCBmaWxlcyA9IHBhc3RlYm9hcmQucHJvcGVydHlMaXN0Rm9yVHlwZSgnTlNGaWxlbmFtZXNQYm9hcmRUeXBlJyk7XG5sZXQgaW1hZ2UgPSBudWxsO1xuaWYgKCFmaWxlcy5pc05pbCgpICYmIGZpbGVzLmNvdW50ID4gMCkge1xuICBjb25zdCBwYXRoID0gT2JqQy51bndyYXAoZmlsZXMub2JqZWN0QXRJbmRleCgwKSk7XG4gIGlmICgvXFxcXC4ocG5nfGpwZT9nfGdpZnx3ZWJwKSQvaS50ZXN0KHBhdGgpKSBpbWFnZSA9ICQuTlNJbWFnZS5hbGxvYy5pbml0V2l0aENvbnRlbnRzT2ZGaWxlKHBhdGgpO1xufVxuaWYgKCFpbWFnZSB8fCBpbWFnZS5pc05pbCgpKSBpbWFnZSA9ICQuTlNJbWFnZS5hbGxvYy5pbml0V2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCk7XG5sZXQgZGF0YSA9IG51bGw7XG5pZiAoIWltYWdlLmlzTmlsKCkpIHtcbiAgY29uc3QgYml0bWFwID0gJC5OU0JpdG1hcEltYWdlUmVwLmltYWdlUmVwV2l0aERhdGEoaW1hZ2UuVElGRlJlcHJlc2VudGF0aW9uKTtcbiAgZGF0YSA9IGJpdG1hcC5yZXByZXNlbnRhdGlvblVzaW5nVHlwZVByb3BlcnRpZXMoJC5OU0JpdG1hcEltYWdlRmlsZVR5cGVQTkcsICQoe30pKTtcbn1cbmRhdGEgPyBPYmpDLnVud3JhcChkYXRhLmJhc2U2NEVuY29kZWRTdHJpbmdXaXRoT3B0aW9ucygwKSkgOiAnJ2BcblxuY29uc3Qgd2luZG93c1NjcmlwdCA9IGBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lIFN5c3RlbS5XaW5kb3dzLkZvcm1zOyBBZGQtVHlwZSAtQXNzZW1ibHlOYW1lIFN5c3RlbS5EcmF3aW5nO1xuaWYgKFtTeXN0ZW0uV2luZG93cy5Gb3Jtcy5DbGlwYm9hcmRdOjpDb250YWluc0ltYWdlKCkpIHtcbiAgJGltYWdlID0gW1N5c3RlbS5XaW5kb3dzLkZvcm1zLkNsaXBib2FyZF06OkdldEltYWdlKCk7XG4gICRzdHJlYW0gPSBOZXctT2JqZWN0IFN5c3RlbS5JTy5NZW1vcnlTdHJlYW07XG4gIHRyeSB7ICRpbWFnZS5TYXZlKCRzdHJlYW0sIFtTeXN0ZW0uRHJhd2luZy5JbWFnaW5nLkltYWdlRm9ybWF0XTo6UG5nKTsgW0NvbnZlcnRdOjpUb0Jhc2U2NFN0cmluZygkc3RyZWFtLlRvQXJyYXkoKSkgfVxuICBmaW5hbGx5IHsgJHN0cmVhbS5EaXNwb3NlKCk7ICRpbWFnZS5EaXNwb3NlKCkgfVxufWBcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRDbGlwYm9hcmRJbWFnZSh7IHBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSwgZW52ID0gcHJvY2Vzcy5lbnYsIHJ1biA9IGV4ZWN1dGUgfSA9IHt9KSB7XG4gIGlmIChlbnYuU1NIX0NPTk5FQ1RJT04gfHwgZW52LlNTSF9UVFkpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGltYWdlcyBhcmUgdW5hdmFpbGFibGUgb3ZlciBTU0gnKVxuICBjb25zdCBvcHRpb25zID0geyBlbmNvZGluZzogJ2J1ZmZlcicsIHRpbWVvdXQ6IDEwMDAwLCBtYXhCdWZmZXI6IDMyICogMTAyNCAqIDEwMjQgfVxuICBsZXQgZGF0YVxuICB0cnkge1xuICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICAgIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBydW4oJ29zYXNjcmlwdCcsIFsnLWwnLCAnSmF2YVNjcmlwdCcsICctZScsIG1hY1NjcmlwdF0sIG9wdGlvbnMpXG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oc3Rkb3V0LnRvU3RyaW5nKCkudHJpbSgpLCAnYmFzZTY0JylcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKCdwb3dlcnNoZWxsLmV4ZScsIFsnLU5vUHJvZmlsZScsICctTm9uSW50ZXJhY3RpdmUnLCAnLVNUQScsICctQ29tbWFuZCcsIHdpbmRvd3NTY3JpcHRdLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dC50b1N0cmluZygpLnRyaW0oKSwgJ2Jhc2U2NCcpXG4gICAgfSBlbHNlIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xuICAgICAgY29uc3Qgd2F5bGFuZCA9IEJvb2xlYW4oZW52LldBWUxBTkRfRElTUExBWSlcbiAgICAgIGNvbnN0IGNvbW1hbmQgPSB3YXlsYW5kID8gJ3dsLXBhc3RlJyA6ICd4Y2xpcCdcbiAgICAgIGNvbnN0IHsgc3Rkb3V0OiB0eXBlcyB9ID0gYXdhaXQgcnVuKGNvbW1hbmQsIHdheWxhbmQgPyBbJy0tbGlzdC10eXBlcyddIDogWyctc2VsZWN0aW9uJywgJ2NsaXBib2FyZCcsICctdCcsICdUQVJHRVRTJywgJy1vJ10sIG9wdGlvbnMpXG4gICAgICBpZiAoIXR5cGVzLnRvU3RyaW5nKCkuc3BsaXQoL1xccysvKS5pbmNsdWRlcygnaW1hZ2UvcG5nJykpIHJldHVybiBudWxsXG4gICAgICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgcnVuKGNvbW1hbmQsIHdheWxhbmQgPyBbJy0tdHlwZScsICdpbWFnZS9wbmcnLCAnLS1uby1uZXdsaW5lJ10gOiBbJy1zZWxlY3Rpb24nLCAnY2xpcGJvYXJkJywgJy10JywgJ2ltYWdlL3BuZycsICctbyddLCBvcHRpb25zKVxuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKHN0ZG91dClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjbGlwYm9hcmQgaW1hZ2VzIGFyZSB1bnN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtJylcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB0aHJvdyBuZXcgRXJyb3IoJ2NsaXBib2FyZCByZWFkZXIgdW5hdmFpbGFibGU6IGluc3RhbGwgJyArIChlbnYuV0FZTEFORF9ESVNQTEFZID8gJ3dsLWNsaXBib2FyZCcgOiBwbGF0Zm9ybSA9PT0gJ2xpbnV4JyA/ICd4Y2xpcCcgOiAndGhlIHN5c3RlbSBjbGlwYm9hcmQgdG9vbHMnKSlcbiAgICB0aHJvdyBlcnJvclxuICB9XG4gIGlmICghZGF0YS5sZW5ndGgpIHJldHVybiBudWxsXG4gIGlmICghZGF0YS5zdWJhcnJheSgwLCA4KS5lcXVhbHMoQnVmZmVyLmZyb20oWzEzNywgODAsIDc4LCA3MSwgMTMsIDEwLCAyNiwgMTBdKSkpIHRocm93IG5ldyBFcnJvcignY2xpcGJvYXJkIGRpZCBub3QgcmV0dXJuIGEgUE5HIGltYWdlJylcbiAgY29uc3QgZGlyID0gYXdhaXQgbWtkdGVtcChqb2luKHRtcGRpcigpLCAncGljby1jbGlwYm9hcmQtJykpXG4gIGRpcmVjdG9yaWVzLmFkZChkaXIpXG4gIGNvbnN0IGRpc3Bvc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcm0oZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcbiAgICBkaXJlY3Rvcmllcy5kZWxldGUoZGlyKVxuICB9XG4gIGNvbnN0IHBhdGggPSBqb2luKGRpciwgJ2NsaXBib2FyZC5wbmcnKVxuICB0cnkge1xuICAgIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBkYXRhLCB7IG1vZGU6IDBvNjAwIH0pXG4gICAgcmV0dXJuIHsgcGF0aCwgZGlzcG9zZSB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYXdhaXQgZGlzcG9zZSgpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGlwYm9hcmRJbnB1dCh7IHJlYWRJbWFnZSwgZ2V0RHJhZnQsIGF0dGFjaEltYWdlLCBzZXRJbnB1dCwgb25FcnJvciB9KSB7XG4gIGxldCBwZW5kaW5nID0gZmFsc2VcbiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHBhc3RlSW1hZ2UoKSB7XG4gICAgaWYgKHBlbmRpbmcpIHJldHVyblxuICAgIHBlbmRpbmcgPSB0cnVlXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RHJhZnQoKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHJlYWRJbWFnZSgpXG4gICAgICBpZiAoIWltYWdlKSB7XG4gICAgICAgIG9uRXJyb3IoJ05vIGltYWdlIG9uIHRoZSBjbGlwYm9hcmQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBnZXREcmFmdCgpXG4gICAgICBpZiAoY3VycmVudC5yZXZpc2lvbiAhPT0gdGFyZ2V0LnJldmlzaW9uIHx8IGN1cnJlbnQuc2Vzc2lvbiAhPT0gdGFyZ2V0LnNlc3Npb24gfHwgY3VycmVudC52YWx1ZSAhPT0gdGFyZ2V0LnZhbHVlIHx8IGN1cnJlbnQuY3Vyc29yICE9PSB0YXJnZXQuY3Vyc29yKSB7XG4gICAgICAgIGF3YWl0IGltYWdlLmRpc3Bvc2UoKVxuICAgICAgICBvbkVycm9yKCdDbGlwYm9hcmQgaW1hZ2Ugbm90IGF0dGFjaGVkOiB0aGUgZHJhZnQgY2hhbmdlZCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWwgPSBhd2FpdCBhdHRhY2hJbWFnZShpbWFnZS5wYXRoKVxuICAgICAgaWYgKCFsYWJlbCkge1xuICAgICAgICBhd2FpdCBpbWFnZS5kaXNwb3NlKClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBhdHRhY2htZW50IGZhaWxlZCcpXG4gICAgICB9XG4gICAgICBjb25zdCBiZWZvcmUgPSB0YXJnZXQudmFsdWUuc2xpY2UoMCwgdGFyZ2V0LmN1cnNvcilcbiAgICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgICBzZXRJbnB1dChiZWZvcmUgKyBsYWJlbCArIGFmdGVyLCBiZWZvcmUubGVuZ3RoICsgbGFiZWwubGVuZ3RoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yKGBDbGlwYm9hcmQgcGFzdGUgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGVuZGluZyA9IGZhbHNlXG4gICAgfVxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpY3RhdGlvbklucHV0KHsgZGljdGF0aW9uLCBnZXRJbnB1dCwgc2V0SW5wdXQgfSkge1xuICBsZXQgZHJhZnQgPSBudWxsXG4gIGxldCBnZW5lcmF0aW9uID0gMFxuXG4gIGZ1bmN0aW9uIHN0YXJ0KHsgdmFsdWUsIGN1cnNvciB9KSB7XG4gICAgaWYgKGRpY3RhdGlvbi5zdGF0dXMgIT09ICdpZGxlJykgcmV0dXJuXG4gICAgZHJhZnQgPSB7IHZhbHVlLCBjdXJzb3IgfVxuICAgICsrZ2VuZXJhdGlvblxuICAgIHZvaWQgZGljdGF0aW9uLnN0YXJ0KClcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgY29uc3QgdG9rZW4gPSBnZW5lcmF0aW9uXG4gICAgY29uc3QgdGFyZ2V0ID0gZHJhZnRcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZGljdGF0aW9uLnN0b3AoKVxuICAgIGlmICh0b2tlbiAhPT0gZ2VuZXJhdGlvbiB8fCAhdGFyZ2V0IHx8IHRleHQgPT0gbnVsbCB8fCBnZXRJbnB1dCgpICE9PSB0YXJnZXQudmFsdWUpIHJldHVyblxuICAgIGNvbnN0IGJlZm9yZSA9IHRhcmdldC52YWx1ZS5zbGljZSgwLCB0YXJnZXQuY3Vyc29yKVxuICAgIGNvbnN0IGxlYWQgPSB0ZXh0ICYmIGJlZm9yZSAmJiAhL1xccyQvLnRlc3QoYmVmb3JlKSAmJiAhL15cXHMvLnRlc3QodGV4dCkgPyAnICcgOiAnJ1xuICAgIGNvbnN0IGFmdGVyID0gdGFyZ2V0LnZhbHVlLnNsaWNlKHRhcmdldC5jdXJzb3IpXG4gICAgY29uc3QgdHJhaWwgPSB0ZXh0ICYmIGFmdGVyICYmICEvXFxzJC8udGVzdCh0ZXh0KSAmJiAhL15bXFxzLiw7OiE/XS8udGVzdChhZnRlcikgPyAnICcgOiAnJ1xuICAgIHNldElucHV0KGJlZm9yZSArIGxlYWQgKyB0ZXh0ICsgdHJhaWwgKyBhZnRlcilcbiAgICBkcmFmdCA9IG51bGxcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICArK2dlbmVyYXRpb25cbiAgICBkcmFmdCA9IG51bGxcbiAgICB2b2lkIGRpY3RhdGlvbi5jYW5jZWwoKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlKGV2ZW50KSB7XG4gICAgaWYgKGRpY3RhdGlvbi5zdGF0dXMgPT09ICdpZGxlJykgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScgfHwgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnYycpKSBjYW5jZWwoKVxuICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicgJiYgIWV2ZW50LnNoaWZ0ICYmICFldmVudC5tZXRhICYmIGRpY3RhdGlvbi5zdGF0dXMgPT09ICdyZWNvcmRpbmcnKSB2b2lkIHN0b3AoKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZXR1cm4geyBzdGFydCwgc3RvcCwgY2FuY2VsLCBoYW5kbGUgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTY3JlZW5DYXB0dXJlSW5wdXQoeyBjYXB0dXJlUmVnaW9uLCBnZXREcmFmdCwgYXR0YWNoSW1hZ2UsIHNldElucHV0LCBvbkVycm9yLCBvblN0YXR1cyA9ICgpID0+IHt9IH0pIHtcbiAgbGV0IHBlbmRpbmcgPSBmYWxzZVxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY2FwdHVyZUltYWdlKCkge1xuICAgIGlmIChwZW5kaW5nKSByZXR1cm5cbiAgICBwZW5kaW5nID0gdHJ1ZVxuICAgIG9uU3RhdHVzKCdjYXB0dXJpbmcnKVxuICAgIGNvbnN0IHRhcmdldCA9IGdldERyYWZ0KClcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCBjYXB0dXJlUmVnaW9uKClcbiAgICAgIGlmICghaW1hZ2UpIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudCA9IGdldERyYWZ0KClcbiAgICAgIGlmIChjdXJyZW50LnJldmlzaW9uICE9PSB0YXJnZXQucmV2aXNpb24gfHwgY3VycmVudC5zZXNzaW9uICE9PSB0YXJnZXQuc2Vzc2lvbiB8fCBjdXJyZW50LnZhbHVlICE9PSB0YXJnZXQudmFsdWUgfHwgY3VycmVudC5jdXJzb3IgIT09IHRhcmdldC5jdXJzb3IpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIG9uRXJyb3IoJ1NjcmVlbiBjYXB0dXJlIG5vdCBhdHRhY2hlZDogdGhlIGRyYWZ0IGNoYW5nZWQnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhYmVsID0gYXdhaXQgYXR0YWNoSW1hZ2UoaW1hZ2UucGF0aClcbiAgICAgIGlmICghbGFiZWwpIHtcbiAgICAgICAgYXdhaXQgaW1hZ2UuZGlzcG9zZSgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2UgYXR0YWNobWVudCBmYWlsZWQnKVxuICAgICAgfVxuICAgICAgY29uc3QgYmVmb3JlID0gdGFyZ2V0LnZhbHVlLnNsaWNlKDAsIHRhcmdldC5jdXJzb3IpXG4gICAgICBjb25zdCBhZnRlciA9IHRhcmdldC52YWx1ZS5zbGljZSh0YXJnZXQuY3Vyc29yKVxuICAgICAgc2V0SW5wdXQoYmVmb3JlICsgbGFiZWwgKyBhZnRlciwgYmVmb3JlLmxlbmd0aCArIGxhYmVsLmxlbmd0aClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcihgU2NyZWVuIGNhcHR1cmUgZmFpbGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcGVuZGluZyA9IGZhbHNlXG4gICAgICBvblN0YXR1cygnaWRsZScpXG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBta2R0ZW1wLCB1bmxpbmsgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnXG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tICdub2RlOm9zJ1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCdcblxubGV0IGNhcHR1cmVEaXIgPSBudWxsXG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUNhcHR1cmVEaXIoKSB7XG4gIGNhcHR1cmVEaXIgPz89IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgJ3BpY28tY2FwdHVyZS0nKSlcbiAgcmV0dXJuIGNhcHR1cmVEaXJcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVSZWdpb24oKSB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnZGFyd2luJykgdGhyb3cgbmV3IEVycm9yKCdzY3JlZW4gY2FwdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBvbiBtYWNPUycpXG4gIGNvbnN0IGZpbGUgPSBqb2luKGF3YWl0IGVuc3VyZUNhcHR1cmVEaXIoKSwgYGNhcHR1cmUtJHtEYXRlLm5vdygpfS5wbmdgKVxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgZXhlY0ZpbGUoJ3NjcmVlbmNhcHR1cmUnLCBbJy1pJywgJy14JywgZmlsZV0sIChlcnJvcikgPT4ge1xuICAgICAgaWYgKCFlcnJvciB8fCAhZXhpc3RzU3luYyhmaWxlKSkgcmVzb2x2ZSgpXG4gICAgICBlbHNlIHJlamVjdChlcnJvcilcbiAgICB9KVxuICB9KVxuICBpZiAoIWV4aXN0c1N5bmMoZmlsZSkpIHJldHVybiBudWxsXG4gIHJldHVybiB7XG4gICAgcGF0aDogZmlsZSxcbiAgICBkaXNwb3NlOiAoKSA9PiB1bmxpbmsoZmlsZSkuY2F0Y2goKCkgPT4ge30pLFxuICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBvc2VyRmlsZXMoKSB7XG4gIGxldCB0ZXh0ID0gJydcbiAgbGV0IHJlZmVyZW5jZXMgPSBbXVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSh2YWx1ZSwgYXR0YWNobWVudHMpIHtcbiAgICBsZXQgc3RhcnQgPSAwXG4gICAgd2hpbGUgKHN0YXJ0IDwgdGV4dC5sZW5ndGggJiYgc3RhcnQgPCB2YWx1ZS5sZW5ndGggJiYgdGV4dFtzdGFydF0gPT09IHZhbHVlW3N0YXJ0XSkgc3RhcnQrK1xuICAgIGxldCBlbmQgPSB0ZXh0Lmxlbmd0aFxuICAgIGxldCBuZXh0RW5kID0gdmFsdWUubGVuZ3RoXG4gICAgd2hpbGUgKGVuZCA+IHN0YXJ0ICYmIG5leHRFbmQgPiBzdGFydCAmJiB0ZXh0W2VuZCAtIDFdID09PSB2YWx1ZVtuZXh0RW5kIC0gMV0pIHtcbiAgICAgIGVuZC0tXG4gICAgICBuZXh0RW5kLS1cbiAgICB9XG4gICAgY29uc3QgZGVsdGEgPSBuZXh0RW5kIC0gZW5kXG4gICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMuZmxhdE1hcCgocmVmZXJlbmNlKSA9PiB7XG4gICAgICBpZiAocmVmZXJlbmNlLmVuZCA8PSBzdGFydCkgcmV0dXJuIFtyZWZlcmVuY2VdXG4gICAgICBpZiAocmVmZXJlbmNlLnN0YXJ0ID49IGVuZCkgcmV0dXJuIFt7IC4uLnJlZmVyZW5jZSwgc3RhcnQ6IHJlZmVyZW5jZS5zdGFydCArIGRlbHRhLCBlbmQ6IHJlZmVyZW5jZS5lbmQgKyBkZWx0YSB9XVxuICAgICAgcmV0dXJuIFtdXG4gICAgfSlcbiAgICB0ZXh0ID0gdmFsdWVcbiAgICBjb25zdCBtYXRjaGVzID0gWy4uLnRleHQubWF0Y2hBbGwoL1xcW0ZpbGUgI1xcZCtcXF0vZyldLnJldmVyc2UoKVxuICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgbWF0Y2hlcykge1xuICAgICAgY29uc3QgYXR0YWNobWVudCA9IGF0dGFjaG1lbnRzLmdldChtYXRjaFswXSlcbiAgICAgIGlmIChhdHRhY2htZW50Py5raW5kICE9PSAnZmlsZScpIGNvbnRpbnVlXG4gICAgICBjb25zdCBwYXRoID0gYXR0YWNobWVudC5wYXRoXG4gICAgICBjb25zdCBvZmZzZXQgPSBwYXRoLmxlbmd0aCAtIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgcmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMubWFwKChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5zdGFydCA+PSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgICA/IHsgLi4ucmVmZXJlbmNlLCBzdGFydDogcmVmZXJlbmNlLnN0YXJ0ICsgb2Zmc2V0LCBlbmQ6IHJlZmVyZW5jZS5lbmQgKyBvZmZzZXQgfVxuICAgICAgICA6IHJlZmVyZW5jZSlcbiAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIG1hdGNoLmluZGV4KSArIHBhdGggKyB0ZXh0LnNsaWNlKG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKVxuICAgICAgcmVmZXJlbmNlcy5wdXNoKHsgc3RhcnQ6IG1hdGNoLmluZGV4LCBlbmQ6IG1hdGNoLmluZGV4ICsgcGF0aC5sZW5ndGgsIHBsYWNlaG9sZGVyOiBtYXRjaFswXSB9KVxuICAgIH1cbiAgICByZWZlcmVuY2VzLnNvcnQoKGEsIGIpID0+IGEuc3RhcnQgLSBiLnN0YXJ0KVxuICAgIHJldHVybiB0ZXh0XG4gIH1cblxuICBmdW5jdGlvbiBjb250ZW50KCkge1xuICAgIGxldCB2YWx1ZSA9IHRleHRcbiAgICBmb3IgKGNvbnN0IHJlZmVyZW5jZSBvZiBbLi4ucmVmZXJlbmNlc10ucmV2ZXJzZSgpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHJlZmVyZW5jZS5zdGFydCkgKyByZWZlcmVuY2UucGxhY2Vob2xkZXIgKyB2YWx1ZS5zbGljZShyZWZlcmVuY2UuZW5kKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHJldHVybiB7IHVwZGF0ZSwgY29udGVudCB9XG59XG4iLCAiY29uc3QgYmFycyA9ICdcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZcdTI1ODdcdTI1ODgnXG5jb25zdCB3aWR0aCA9IDE2XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRMZXZlbChsZXZlbHMsIGxldmVsKSB7XG4gIHJldHVybiBbLi4ubGV2ZWxzLnNsaWNlKDEgLSB3aWR0aCksIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGxldmVsKSldXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWN0YXRpb25JbmRpY2F0b3Ioc3RhdHVzLCBsZXZlbHMpIHtcbiAgaWYgKHN0YXR1cyA9PT0gJ2lkbGUnKSByZXR1cm4gJydcbiAgaWYgKHN0YXR1cyAhPT0gJ3JlY29yZGluZycpIHJldHVybiBgICR7c3RhdHVzfSBgXG4gIGNvbnN0IHNhbXBsZXMgPSBbLi4uQXJyYXkoTWF0aC5tYXgoMCwgd2lkdGggLSBsZXZlbHMubGVuZ3RoKSkuZmlsbCgwKSwgLi4ubGV2ZWxzLnNsaWNlKC13aWR0aCldXG4gIHJldHVybiBgICR7c2FtcGxlcy5tYXAoKGxldmVsKSA9PiBiYXJzW01hdGgucm91bmQobGV2ZWwgKiAoYmFycy5sZW5ndGggLSAxKSldKS5qb2luKCcnKX0gcmVjb3JkaW5nIGBcbn1cbiIsICJpbXBvcnQgeyBjb2RlVG9BTlNJIH0gZnJvbSAnQHNoaWtpanMvY2xpJ1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgc2hpa2lUaGVtZSB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IExBTkdTID0ge1xuICBqczogJ2pzJywgbWpzOiAnanMnLCBjanM6ICdqcycsIGpzeDogJ2pzeCcsIHRzOiAndHMnLCB0c3g6ICd0c3gnLFxuICBqc29uOiAnanNvbicsIGpzb25sOiAnanNvbicsIG1kOiAnbWQnLCBweTogJ3B5dGhvbicsIHJiOiAncnVieScsIGdvOiAnZ28nLFxuICByczogJ3J1c3QnLCBjOiAnYycsIGg6ICdjJywgY3BwOiAnY3BwJywgamF2YTogJ2phdmEnLCBjc3M6ICdjc3MnLFxuICBodG1sOiAnaHRtbCcsIHZ1ZTogJ3Z1ZScsIHNoOiAnYmFzaCcsIGJhc2g6ICdiYXNoJywgenNoOiAnYmFzaCcsXG4gIHltbDogJ3lhbWwnLCB5YW1sOiAneWFtbCcsIHRvbWw6ICd0b21sJywgc3FsOiAnc3FsJywgc3ZlbHRlOiAnc3ZlbHRlJyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhbmdGb3JQYXRoKHBhdGgpIHtcbiAgY29uc3QgZXh0ID0gU3RyaW5nKHBhdGgpLnNwbGl0KCcuJykucG9wKCkudG9Mb3dlckNhc2UoKVxuICByZXR1cm4gTEFOR1NbZXh0XSB8fCAndHh0J1xufVxuXG5jb25zdCBjYWNoZSA9IG5ldyBNYXAoKVxuY29uc3QgcGVuZGluZyA9IG5ldyBTZXQoKVxuY29uc3QgZmFpbGVkID0gbmV3IFNldCgpXG5jb25zdCBbdmVyc2lvbiwgc2V0VmVyc2lvbl0gPSBjcmVhdGVTaWduYWwoMClcblxuZXhwb3J0IGNvbnN0IGhpZ2hsaWdodFZlcnNpb24gPSB2ZXJzaW9uXG5cbmV4cG9ydCBmdW5jdGlvbiBoaWdobGlnaHQoY29kZSwgbGFuZykge1xuICBjb25zdCBzYWZlTGFuZyA9IGxhbmcgJiYgIWZhaWxlZC5oYXMobGFuZykgPyBsYW5nIDogJ3R4dCdcbiAgY29uc3QgdGhlbWUgPSBzaGlraVRoZW1lKClcbiAgcmV0dXJuIGNvZGVcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYCR7dGhlbWV9XFxuJHtzYWZlTGFuZ31cXG4ke2xpbmV9YFxuICAgICAgaWYgKGNhY2hlLmhhcyhrZXkpKSByZXR1cm4gY2FjaGUuZ2V0KGtleSlcbiAgICAgIHdhcm0obGluZSwgc2FmZUxhbmcsIHRoZW1lLCBrZXkpXG4gICAgICByZXR1cm4gbGluZVxuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpXG59XG5cbmZ1bmN0aW9uIHdhcm0obGluZSwgbGFuZywgdGhlbWUsIGtleSkge1xuICBpZiAocGVuZGluZy5oYXMoa2V5KSkgcmV0dXJuXG4gIHBlbmRpbmcuYWRkKGtleSlcbiAgY29kZVRvQU5TSShsaW5lLCBsYW5nLCB0aGVtZSlcbiAgICAudGhlbigoYW5zaSkgPT4gY2FjaGUuc2V0KGtleSwgYW5zaS5yZXBsYWNlKC9cXG4kLywgJycpKSlcbiAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgZmFpbGVkLmFkZChsYW5nKVxuICAgICAgY2FjaGUuc2V0KGtleSwgbGluZSlcbiAgICB9KVxuICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgIHBlbmRpbmcuZGVsZXRlKGtleSlcbiAgICAgIHNldFZlcnNpb24oKHYpID0+IHYgKyAxKVxuICAgIH0pXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGFjdGl2aXR5Um93cyhyb3dzKSB7XG4gIGNvbnN0IGFjdGl2ZSA9IChyb3cpID0+IHJvdy5zdGF0dXMgPT09ICdydW5uaW5nJyB8fCByb3cuc3RhdHVzID09PSAncXVldWVkJ1xuICByZXR1cm4gWy4uLnJvd3NdLnNvcnQoKGEsIGIpID0+IE51bWJlcihhY3RpdmUoYikpIC0gTnVtYmVyKGFjdGl2ZShhKSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhY3Rpdml0eVN0cmlwU2l6ZXMoaGVpZ2h0LCBsZW5ndGhzLCBtYXJnaW4gPSAxKSB7XG4gIGNvbnN0IGdyb3VwcyA9IGxlbmd0aHMuZmlsdGVyKEJvb2xlYW4pLmxlbmd0aFxuICBpZiAoIWdyb3VwcykgcmV0dXJuIGxlbmd0aHMubWFwKCgpID0+IDApXG4gIGNvbnN0IGJ1ZGdldCA9IE1hdGguZmxvb3IoaGVpZ2h0ICogMC4yKVxuICBjb25zdCBzaXplcyA9IGxlbmd0aHMubWFwKChsZW5ndGgpID0+IGxlbmd0aCA/IDEgOiAwKVxuICBjb25zdCB1c2VkID0gKCkgPT4gbWFyZ2luICsgMSArIGdyb3VwcyArIHNpemVzLnJlZHVjZSgoc3VtLCBzaXplLCBpKSA9PiBzdW0gKyBzaXplICsgTnVtYmVyKHNpemUgPCBsZW5ndGhzW2ldKSwgMClcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gc2l6ZXMubWFwKChzaXplLCBpKSA9PiBpKVxuICAgICAgLmZpbHRlcigoaSkgPT4gc2l6ZXNbaV0gPCBsZW5ndGhzW2ldKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHNpemVzW2FdIC0gc2l6ZXNbYl0gfHwgYSAtIGIpXG4gICAgY29uc3QgbmV4dCA9IGNhbmRpZGF0ZXMuZmluZCgoaSkgPT4gdXNlZCgpICsgTnVtYmVyKHNpemVzW2ldICsgMSA8IGxlbmd0aHNbaV0pIDw9IGJ1ZGdldClcbiAgICBpZiAobmV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gc2l6ZXNcbiAgICBzaXplc1tuZXh0XSsrXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwV2luZG93U3RhcnQoY3VycmVudCwgdGFyZ2V0LCBsZW5ndGgsIHNpemUpIHtcbiAgY29uc3QgbWF4ID0gTWF0aC5tYXgoMCwgbGVuZ3RoIC0gc2l6ZSlcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjdXJyZW50LCBtYXgpKVxuICBjb25zdCBzY3JvbGxvZmYgPSBzaXplID4gMiA/IDEgOiAwXG4gIGlmICh0YXJnZXQgPCAwKSByZXR1cm4gc3RhcnRcbiAgaWYgKHRhcmdldCA8IHN0YXJ0ICsgc2Nyb2xsb2ZmKSByZXR1cm4gTWF0aC5tYXgoMCwgdGFyZ2V0IC0gc2Nyb2xsb2ZmKVxuICBpZiAodGFyZ2V0ID49IHN0YXJ0ICsgc2l6ZSAtIHNjcm9sbG9mZikgcmV0dXJuIE1hdGgubWluKG1heCwgdGFyZ2V0IC0gc2l6ZSArIHNjcm9sbG9mZiArIDEpXG4gIHJldHVybiBzdGFydFxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgRGlmZiwgZWFzZSwgSG9yaXpvbnRhbFNjcm9sbEJveCwgbGluZWFyLCBNYXJrZG93biwgU2Nyb2xsQm94LCBTcGlubmVyLCB1c2VBbmltYXRlZCwgdXNlSGl0VGVzdCwgdXNlSW5wdXQsIHVzZU1vdXNlIH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBGRywgRkdfU09GVCwgTVVURUQsIFBBTkVMX0JHLCBTRUxFQ1RfQkcsIFJFRCwgR1JFRU4sIFBFRVIgfSBmcm9tICcuL3RoZW1lLmpzJ1xuaW1wb3J0IHsgaGlnaGxpZ2h0LCBsYW5nRm9yUGF0aCB9IGZyb20gJy4vaGlnaGxpZ2h0LmpzJ1xuaW1wb3J0IHsgY29tcGFjdFRyYW5zY3JpcHRSdW5zIH0gZnJvbSAnLi90cmFuc2NyaXB0LXdpbmRvdy5qcydcblxuZXhwb3J0IHsgZGVmYXVsdFRpdGxlIGFzIHVpVGl0bGUgfSBmcm9tICdwaWNvY29kZS1jb3JlL3Rvb2xzL3JlY29yZGVyLmpzJ1xuXG5mdW5jdGlvbiBQcm9zZVNuaXBwZXQoeyB2YWx1ZSwgbGFuZ3VhZ2UsIGhpZ2hsaWdodDogaGlnaGxpZ2h0Q29kZSwgY29kZUJnIH0pIHtcbiAgY29uc3Qgc2hvd24gPSBoaWdobGlnaHRDb2RlID8gaGlnaGxpZ2h0Q29kZSh2YWx1ZSwgbGFuZ3VhZ2UpIDogdmFsdWVcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGJnOiBjb2RlQmcsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgPHRleHQ+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+XG4gIClcbn1cblxuZnVuY3Rpb24gRGVsaWJlcmF0aW9uVHVybih7IGl0ZW0sIHZlcmJvc2UsIGNvbXBhY3RUb29sSGlzdG9yeSA9IGZhbHNlLCBwYWlyZWQgPSBmYWxzZSwgYm9yZGVyID0gdHJ1ZSwgcGFuZUhlaWdodCwgZm9jdXNlZCA9IGZhbHNlLCBvbkZvY3VzIH0pIHtcbiAgY29uc3QgcGFydGljaXBhbnRBID0gaXRlbS5yb2xlID09PSAncGFydGljaXBhbnQtYScgfHwgaXRlbS5yb2xlID09PSAncHJvcG9zZXInXG4gIGNvbnN0IHN5bnRoZXNpcyA9IGl0ZW0ucm9sZSA9PT0gJ3N5bnRoZXNpcydcbiAgY29uc3QgbGFiZWwgPSBzeW50aGVzaXMgPyAnU3ludGhlc2lzJyA6IGAke3BhcnRpY2lwYW50QSA/ICdQYXJ0aWNpcGFudCBBJyA6ICdQYXJ0aWNpcGFudCBCJ30gIHJvdW5kICR7aXRlbS5yb3VuZH1gXG4gIGNvbnN0IHRleHQgPSBpdGVtLmludGVycnVwdGVkID8gYCR7aXRlbS50ZXh0fSAqKGludGVycnVwdGVkKSpgIDogaXRlbS50ZXh0XG4gIGNvbnN0IFtvZmZzZXQsIHNldE9mZnNldF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2ZvbGxvdywgc2V0Rm9sbG93XSA9IGNyZWF0ZVNpZ25hbCh0cnVlKVxuICBjb25zdCBoaXRUZXN0ID0gdXNlSGl0VGVzdCgpXG4gIHVzZU1vdXNlKChldmVudCkgPT4ge1xuICAgIGlmIChwYW5lSGVpZ2h0ICYmIGhpdFRlc3QoZXZlbnQueCwgZXZlbnQueSkgJiYgKGV2ZW50LmFjdGlvbiA9PT0gJ3Njcm9sbCcgfHwgZXZlbnQuYWN0aW9uID09PSAncHJlc3MnKSkgb25Gb2N1cz8uKClcbiAgfSlcbiAgY29uc3QgdG9vbHMgPSBjb21wYWN0VG9vbEhpc3RvcnkgPyBjb21wYWN0VHJhbnNjcmlwdFJ1bnMoaXRlbS50b29scyB8fCBbXSwgISFpdGVtLmFjdGl2ZSAmJiAhaXRlbS50ZXh0KSA6IGl0ZW0udG9vbHMgfHwgW11cbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIHBhZGRpbmdYOiBwYWlyZWQgPyAwIDogMiwgaGVpZ2h0OiBwYW5lSGVpZ2h0LCBiZzogcGFpcmVkID8gUEFORUxfQkcgOiB1bmRlZmluZWQgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBmbGV4R3JvdzogcGFuZUhlaWdodCA/IDEgOiB1bmRlZmluZWQgfX0+XG4gICAgICAgIHtib3JkZXIgJiYgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IHN5bnRoZXNpcyB8fCBwYXJ0aWNpcGFudEEgPyBhY2NlbnQoKSA6IE1VVEVEIH19IC8+fVxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBmbGV4R3JvdzogMSwgbWluV2lkdGg6IDAsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgYmc6IHN5bnRoZXNpcyA/IFNFTEVDVF9CRyA6IHBhcnRpY2lwYW50QSB8fCBwYWlyZWQgPyBQQU5FTF9CRyA6IHVuZGVmaW5lZCB9fT5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogZm9jdXNlZCB8fCBzeW50aGVzaXMgfHwgcGFydGljaXBhbnRBID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57bGFiZWx9PC90ZXh0PlxuICAgICAgICAgIHtwYW5lSGVpZ2h0ID8gKFxuICAgICAgICAgICAgPFNjcm9sbEJveFxuICAgICAgICAgICAgICBzdHlsZT17eyBmbGV4R3JvdzogMSB9fVxuICAgICAgICAgICAgICBmb2N1c2VkPXtmb2N1c2VkfVxuICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQ9e2ZvbGxvdygpID8gMWU5IDogb2Zmc2V0KCl9XG4gICAgICAgICAgICAgIG9uU2Nyb2xsPXsobmV4dCwgbWV0YSkgPT4geyBzZXRPZmZzZXQobmV4dCk7IHNldEZvbGxvdyghIW1ldGE/LmF0Qm90dG9tKSB9fVxuICAgICAgICAgICAgICBzY3JvbGxiYXJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPERlbGliZXJhdGlvbkNvbnRlbnQgdG9vbHM9e3Rvb2xzfSB0ZXh0PXt0ZXh0fSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuICAgICAgICAgICAgPC9TY3JvbGxCb3g+XG4gICAgICAgICAgKSA6IDxEZWxpYmVyYXRpb25Db250ZW50IHRvb2xzPXt0b29sc30gdGV4dD17dGV4dH0gdmVyYm9zZT17dmVyYm9zZX0gLz59XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZnVuY3Rpb24gRGVsaWJlcmF0aW9uQ29udGVudCh7IHRvb2xzLCB0ZXh0LCB2ZXJib3NlIH0pIHtcbiAgcmV0dXJuIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAge3Rvb2xzLm1hcCgodG9vbCkgPT4gPE1lc3NhZ2Uga2V5PXt0b29sLmNhbGxJZH0gaXRlbT17dG9vbH0gdmVyYm9zZT17dmVyYm9zZX0gLz4pfVxuICAgICAgICAgIHt0ZXh0ICYmIHRvb2xzLmxlbmd0aCA+IDAgJiYgPHRleHQ+IDwvdGV4dD59XG4gICAgICAgICAge3RleHQgJiYgKFxuICAgICAgICAgICAgPE1hcmtkb3duXG4gICAgICAgICAgICAgIHRleHQ9e3RleHR9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodD17aGlnaGxpZ2h0fVxuICAgICAgICAgICAgICBjb2RlQmc9e251bGx9XG4gICAgICAgICAgICAgIGNvZGVCbG9jaz17VHJhbnNjcmlwdENvZGVCbG9ja31cbiAgICAgICAgICAgICAgdGFibGVCb3JkZXJDb2xvcj17TVVURUR9XG4gICAgICAgICAgICAgIHRhYmxlUm93SG92ZXJCZz17UEFORUxfQkd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gIDwvYm94PlxufVxuXG5mdW5jdGlvbiBkZWxpYmVyYXRpb25Sb3dzKHR1cm5zKSB7XG4gIGNvbnN0IHJvd3MgPSBbXVxuICBmb3IgKGNvbnN0IHR1cm4gb2YgdHVybnMpIHtcbiAgICBpZiAodHVybi5yb2xlID09PSAnc3ludGhlc2lzJyB8fCAhdHVybi5wYXJhbGxlbEdyb3VwKSB7XG4gICAgICByb3dzLnB1c2goW3R1cm5dKVxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSByb3dzLmZpbmQoKHJvdykgPT4gcm93WzBdPy5wYXJhbGxlbEdyb3VwID09PSB0dXJuLnBhcmFsbGVsR3JvdXApXG4gICAgaWYgKGV4aXN0aW5nKSBleGlzdGluZy5wdXNoKHR1cm4pXG4gICAgZWxzZSByb3dzLnB1c2goW3R1cm5dKVxuICB9XG4gIHJldHVybiByb3dzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEZWxpYmVyYXRpb25FeGNoYW5nZSh7IHR1cm5zLCB2ZXJib3NlLCB3aWRlLCBjb21wYWN0VG9vbEhpc3RvcnkgPSBmYWxzZSwgdmlld3BvcnRIZWlnaHQsIGZvY3VzZWQgPSBmYWxzZSwgb25Gb2N1cyB9KSB7XG4gIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gY3JlYXRlU2lnbmFsKG51bGwpXG4gIGNvbnN0IGlkID0gdHVybiA9PiBgJHt0dXJuLnJvbGV9OiR7dHVybi5yb3VuZCA/PyAnc3ludGhlc2lzJ31gXG4gIGNvbnN0IHNlbGVjdGVkSWQgPSBzZWxlY3RlZCgpIHx8ICh0dXJuc1swXSAmJiBpZCh0dXJuc1swXSkpXG4gIGNvbnN0IGZvY3VzVHVybiA9IHR1cm4gPT4geyBzZXRTZWxlY3RlZChpZCh0dXJuKSk7IG9uRm9jdXM/LigpIH1cbiAgdXNlSW5wdXQoZXZlbnQgPT4ge1xuICAgIGlmICghZm9jdXNlZCB8fCAoZXZlbnQua2V5ICE9PSAnbGVmdCcgJiYgZXZlbnQua2V5ICE9PSAncmlnaHQnKSkgcmV0dXJuXG4gICAgY29uc3QgaW5kZXggPSB0dXJucy5maW5kSW5kZXgodHVybiA9PiBpZCh0dXJuKSA9PT0gc2VsZWN0ZWRJZClcbiAgICBjb25zdCBuZXh0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odHVybnMubGVuZ3RoIC0gMSwgaW5kZXggKyAoZXZlbnQua2V5ID09PSAnbGVmdCcgPyAtMSA6IDEpKSlcbiAgICBpZiAodHVybnNbbmV4dF0pIGZvY3VzVHVybih0dXJuc1tuZXh0XSlcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICB9KVxuICBjb25zdCBwYW5lSGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgPyBNYXRoLm1heCg2LCBNYXRoLmZsb29yKHZpZXdwb3J0SGVpZ2h0ICogKHR1cm5zLnNvbWUodHVybiA9PiB0dXJuLnJvbGUgPT09ICdzeW50aGVzaXMnKSA/IDAuNiA6IDEpKSAtIDEpIDogdW5kZWZpbmVkXG4gIGNvbnN0IHBhbmVQcm9wcyA9IHR1cm4gPT4gKHsgcGFuZUhlaWdodDogdHVybi5yb2xlID09PSAnc3ludGhlc2lzJyAmJiB2aWV3cG9ydEhlaWdodCA/IE1hdGgubWF4KDYsIE1hdGguZmxvb3Iodmlld3BvcnRIZWlnaHQgKiAwLjM1KSkgOiBwYW5lSGVpZ2h0LCBmb2N1c2VkOiBmb2N1c2VkICYmIHNlbGVjdGVkSWQgPT09IGlkKHR1cm4pLCBvbkZvY3VzOiAoKSA9PiBmb2N1c1R1cm4odHVybikgfSlcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgIHtkZWxpYmVyYXRpb25Sb3dzKHR1cm5zKS5tYXAoKHJvdywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ludGhlc2lzID0gcm93WzBdPy5yb2xlID09PSAnc3ludGhlc2lzJ1xuICAgICAgICBpZiAoIXdpZGUgfHwgc3ludGhlc2lzKSByZXR1cm4gcm93Lm1hcCgodHVybikgPT4gPERlbGliZXJhdGlvblR1cm4ga2V5PXtgJHt0dXJuLnJvbGV9OiR7dHVybi5yb3VuZCA/PyAnc3ludGhlc2lzJ31gfSBpdGVtPXt0dXJufSB2ZXJib3NlPXt2ZXJib3NlfSBjb21wYWN0VG9vbEhpc3Rvcnk9e2NvbXBhY3RUb29sSGlzdG9yeX0gey4uLnBhbmVQcm9wcyh0dXJuKX0gLz4pXG4gICAgICAgIGNvbnN0IGxlZnQgPSByb3cuZmluZCgodHVybikgPT4gdHVybi5yb2xlID09PSAncGFydGljaXBhbnQtYScgfHwgdHVybi5yb2xlID09PSAncHJvcG9zZXInKVxuICAgICAgICBjb25zdCByaWdodCA9IHJvdy5maW5kKCh0dXJuKSA9PiB0dXJuLnJvbGUgPT09ICdwYXJ0aWNpcGFudC1iJyB8fCB0dXJuLnJvbGUgPT09ICdyZXZpZXdlcicpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGJveCBrZXk9e3Jvd1swXT8ucGFyYWxsZWxHcm91cCB8fCBgJHtyb3dbMF0/LnJvbGV9OiR7cm93WzBdPy5yb3VuZH06JHtpbmRleH1gfSBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93Jywgd2lkdGg6ICcxMDAlJywgb3ZlcmZsb3c6ICdjbGlwJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IHdpZHRoOiAnNTAlJywgbWluV2lkdGg6IDAsIG92ZXJmbG93OiAnY2xpcCcgfX0+e2xlZnQgJiYgPERlbGliZXJhdGlvblR1cm4gaXRlbT17bGVmdH0gdmVyYm9zZT17dmVyYm9zZX0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3Rvcnl9IHBhaXJlZCBib3JkZXI9e2ZhbHNlfSB7Li4ucGFuZVByb3BzKGxlZnQpfSAvPn08L2JveD5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgd2lkdGg6IDEsIGZsZXhTaHJpbms6IDAgfX0gLz5cbiAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEsIG1pbldpZHRoOiAwLCBvdmVyZmxvdzogJ2NsaXAnIH19PntyaWdodCAmJiA8RGVsaWJlcmF0aW9uVHVybiBpdGVtPXtyaWdodH0gdmVyYm9zZT17dmVyYm9zZX0gY29tcGFjdFRvb2xIaXN0b3J5PXtjb21wYWN0VG9vbEhpc3Rvcnl9IHBhaXJlZCBib3JkZXI9e2ZhbHNlfSB7Li4ucGFuZVByb3BzKHJpZ2h0KX0gLz59PC9ib3g+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNZXNzYWdlKHsgaXRlbSwgdmVyYm9zZSwgc2hvd0xvY2tlZCA9IGZhbHNlIH0pIHtcbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rvb2wtZ3JvdXAnKSByZXR1cm4gPFRvb2xHcm91cCBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICd1c2VyJyAmJiBpdGVtLm9yaWdpbiA9PT0gJ3ZpZXcnKSB7XG4gICAgY29uc3QgbGFiZWwgPSAvXlxcW3ZpZXc6IChbXlxcXV0rKVxcXS8uZXhlYyhpdGVtLnRleHQpPy5bMV0gfHwgJ2ltYWdlJ1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyNzEzIFZpZXdlZCAke2xhYmVsfWB9PC90ZXh0PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ2FnZW50LW5vdGljZS1ncm91cCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVELCBpdGFsaWM6IHRydWUgfX0+e2BcdTI2OTkgJHtpdGVtLm5vdGljZXMubGVuZ3RofSBhZ2VudHMgZmluaXNoZWRgfTwvdGV4dD5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7dmVyYm9zZSAmJiAoXG4gICAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgYmc6IFBBTkVMX0JHLCBwYWRkaW5nWDogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgICAge2l0ZW0ubm90aWNlcy5tYXAoKG5vdGljZSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19Pntub3RpY2UudGV4dC5yZXBsYWNlKC9eXFxbc3lzdGVtIG5vdGlmaWNhdGlvblxcXVxccyovLCAnJyl9PC90ZXh0PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAndG9vbCcpIHtcbiAgICByZXR1cm4gPFRvb2xDYXJkIHsuLi5pdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3N1bW1hcnknKSB7XG4gICAgY29uc3QgbGluZXMgPSBpdGVtLnRleHQuc3BsaXQoJ1xcbicpXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgaXRhbGljOiB0cnVlIH19PntpdGVtLnNvdXJjZSA9PT0gJ2NvbXBhY3QnID8gJ1x1MjcyNiBzdW1tYXJ5ICBjb252ZXJzYXRpb24gY29tcGFjdGVkIGFib3ZlIHRoaXMgcG9pbnQnIDogJ1x1MjcyNiBzdW1tYXJ5ICByZXdvdW5kIGNvbnZlcnNhdGlvbid9PC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e2Ake2xpbmVzLmxlbmd0aH0gJHtsaW5lcy5sZW5ndGggPT09IDEgPyAnbGluZScgOiAnbGluZXMnfWB9PC90ZXh0PlxuICAgICAgICA8L2JveD5cbiAgICAgICAge3ZlcmJvc2UgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICAgIHtsaW5lcy5zbGljZSgwLCA1MDApLm1hcCgobGluZSwgaSkgPT4gKFxuICAgICAgICAgICAgICA8dGV4dCBrZXk9e2l9IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntsaW5lIHx8ICcgJ308L3RleHQ+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICAgIHtsaW5lcy5sZW5ndGggPiA1MDAgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IE1VVEVEIH19PntgXHUyMDI2ICR7bGluZXMubGVuZ3RoIC0gNTAwfSBtb3JlIGxpbmVzYH08L3RleHQ+fVxuICAgICAgICAgIDwvYm94PlxuICAgICAgICApfVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3Rob3VnaHRzJykge1xuICAgIHJldHVybiAoXG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nWDogMiB9fT5cbiAgICAgICAgPHRleHQ+IDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICA8TWFya2Rvd24gdGV4dD17aXRlbS50ZXh0fSBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fSAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdkZWxpYmVyYXRpb24tdHVybicpIHtcbiAgICByZXR1cm4gPGJveCBzdHlsZT17eyBtYXJnaW5Ub3A6IDEgfX0+PERlbGliZXJhdGlvblR1cm4gaXRlbT17aXRlbX0gdmVyYm9zZT17dmVyYm9zZX0gLz48L2JveD5cbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdub3RpY2UnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjY5OSAke2l0ZW0udGV4dC5yZXBsYWNlKC9eXFxbc3lzdGVtIG5vdGlmaWNhdGlvblxcXVxccyovLCAnJyl9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2tpbGwnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjcyNiBza2lsbDogJHtpdGVtLm5hbWV9YH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc3RlZXItdG9vbHMnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQsIGl0YWxpYzogdHJ1ZSB9fT57YFx1MjUwMFx1MjUwMCAke2l0ZW0uY291bnR9IHRvb2wgJHtpdGVtLmNvdW50ID09PSAxID8gJ2ludGVyYWN0aW9uJyA6ICdpbnRlcmFjdGlvbnMnfSBoaWRkZW4gXHUyNTAwXHUyNTAwYH08L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBpZiAoaXRlbS5raW5kID09PSAnc2hlbGwtY29tbWFuZCcpIHtcbiAgICBjb25zdCBzaG93biA9IGhpZ2hsaWdodChpdGVtLnRleHQsICdiYXNoJylcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J2NvbW1hbmQnfTwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgICAge3Nob3duLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGkpID0+IDx0ZXh0IGtleT17aX0+e2Ake2kgPT09IDAgPyAnJCAnIDogJyAgJ30ke2xpbmUgfHwgJyAnfWB9PC90ZXh0Pil9XG4gICAgICAgIDwvYm94PlxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3NoZWxsLW91dHB1dCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ1g6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57J291dHB1dCd9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBwYWRkaW5nTGVmdDogMiB9fT5cbiAgICAgICAgICB7aXRlbS50ZXh0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGkpID0+IDx0ZXh0IGtleT17aX0gc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2xpbmUgfHwgJyAnfTwvdGV4dD4pfVxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGlmIChpdGVtLmtpbmQgPT09ICdwZWVyJykge1xuICAgIGNvbnN0IGluY29taW5nID0gaXRlbS5kaXJlY3Rpb24gPT09ICdpbmNvbWluZydcbiAgICBjb25zdCB1bnJlYWQgPSBpbmNvbWluZyAmJiAhaXRlbS5yZWFkXG4gICAgY29uc3QgY29sb3IgPSBpbmNvbWluZyAmJiBpdGVtLnJlYWQgPyBNVVRFRCA6IFBFRVJcbiAgICBjb25zdCBzdGF0dXMgPSBpbmNvbWluZyA/IGAgICR7dW5yZWFkID8gJ3VucmVhZCcgOiAncmVhZCd9YCA6IGAgICR7aXRlbS5zdGF0dXMgfHwgJ3Vua25vd24nfWBcbiAgICByZXR1cm4gKFxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgcGFkZGluZ0xlZnQ6IDIgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IFBFRVIsIGJvbGQ6IHRydWUgfX0+e2BAJHtpdGVtLmZyb20ubmFtZX0gXHUyMTkyIEAke2l0ZW0udG8ubmFtZX0ke2l0ZW0udXJnZW50ID8gJyAgdXJnZW50JyA6ICcnfWB9PC90ZXh0PlxuICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yLCBib2xkOiB1bnJlYWQgfX0+e3N0YXR1c308L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvciB9fT57aXRlbS50ZXh0fTwvdGV4dD5cbiAgICAgICAge2l0ZW0uZXJyb3IgJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IFJFRCB9fT57aXRlbS5lcnJvcn08L3RleHQ+fVxuICAgICAgPC9ib3g+XG4gICAgKVxuICB9XG5cbiAgaWYgKGl0ZW0ua2luZCA9PT0gJ3VzZXInKSB7XG4gICAgY29uc3QgbGFiZWwgPSBzaG93TG9ja2VkICYmIGl0ZW0ubG9ja2VkID8gJ0xvY2tlZCAgY29tcGFjdGVkJyA6IHNob3dMb2NrZWQgPyAnVXNlcicgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogUEFORUxfQkcgfX0gLz5cbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGJnOiBpdGVtLnN0ZWVyU2VsZWN0ZWQgPyBTRUxFQ1RfQkcgOiBQQU5FTF9CRywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBwYWRkaW5nTGVmdDogMSwgcGFkZGluZ1JpZ2h0OiAyLCBwYWRkaW5nWTogMSB9fT5cbiAgICAgICAgICAgIHtsYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGRyB9fT57aXRlbS50ZXh0fTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgPC9ib3g+XG4gICAgICA8L2JveD5cbiAgICApXG4gIH1cblxuICBjb25zdCB0ZXh0ID0gaXRlbS5pbnRlcnJ1cHRlZCA/IGAke2l0ZW0udGV4dH0gKihpbnRlcnJ1cHRlZCkqYCA6IGl0ZW0udGV4dFxuICBjb25zdCBsYWJlbCA9IHNob3dMb2NrZWQgJiYgaXRlbS5sb2NrZWQgPyAnTG9ja2VkICBjb21wYWN0ZWQnIDogc2hvd0xvY2tlZCA/ICdBc3Npc3RhbnQnIDogbnVsbFxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICA8dGV4dD4gPC90ZXh0PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogMSwgZmxleFNocmluazogMCwgYmc6IGl0ZW0uc3RlZXJTZWxlY3RlZCA/IGFjY2VudCgpIDogdW5kZWZpbmVkIH19IC8+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGZsZXhHcm93OiAxLCBwYWRkaW5nTGVmdDogMSwgcGFkZGluZ1JpZ2h0OiAyLCBwYWRkaW5nWTogc2hvd0xvY2tlZCA/IDEgOiAwLCBiZzogaXRlbS5zdGVlclNlbGVjdGVkID8gU0VMRUNUX0JHIDogdW5kZWZpbmVkIH19PlxuICAgICAgICAgIHtsYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBjb2xvcjogaXRlbS5zdGVlclNlbGVjdGVkID8gYWNjZW50KCkgOiBNVVRFRCwgYm9sZDogdHJ1ZSB9fT57bGFiZWx9PC90ZXh0Pn1cbiAgICAgICAgICA8TWFya2Rvd25cbiAgICAgICAgICAgIHRleHQ9e3RleHR9XG4gICAgICAgICAgICBoaWdobGlnaHQ9e2hpZ2hsaWdodH1cbiAgICAgICAgICAgIGNvZGVCZz17bnVsbH1cbiAgICAgICAgICAgIGNvZGVCbG9jaz17VHJhbnNjcmlwdENvZGVCbG9ja31cbiAgICAgICAgICAgIHRhYmxlQm9yZGVyQ29sb3I9e01VVEVEfVxuICAgICAgICAgICAgdGFibGVSb3dIb3ZlckJnPXtQQU5FTF9CR31cbiAgICAgICAgICAvPlxuICAgICAgICA8L2JveD5cbiAgICAgIDwvYm94PlxuICAgIDwvYm94PlxuICApXG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGNvbXBhY3RUcmFuc2NyaXB0UnVucyhpdGVtcywgYWN0aXZlID0gZmFsc2UpIHtcbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7KSB7XG4gICAgaWYgKGl0ZW1zW2ldLmtpbmQgPT09ICd0b29sJyB8fCBpdGVtc1tpXS5raW5kID09PSAndGhvdWdodHMnKSB7XG4gICAgICBsZXQgZW5kID0gaSArIDFcbiAgICAgIHdoaWxlIChlbmQgPCBpdGVtcy5sZW5ndGggJiYgKGl0ZW1zW2VuZF0ua2luZCA9PT0gJ3Rvb2wnIHx8IGl0ZW1zW2VuZF0ua2luZCA9PT0gJ3Rob3VnaHRzJykpIGVuZCsrXG4gICAgICBjb25zdCBydW4gPSBpdGVtcy5zbGljZShpLCBlbmQpXG4gICAgICBjb25zdCB0b29scyA9IHJ1bi5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2luZCA9PT0gJ3Rvb2wnKVxuICAgICAgcmVzdWx0LnB1c2goeyBraW5kOiAndG9vbC1ncm91cCcsIGNhbGxJZDogdG9vbHMuYXQoLTEpPy5jYWxsSWQsIGl0ZW1zOiBydW4sIHRvb2xzLCBhY3RpdmU6IGFjdGl2ZSAmJiBlbmQgPT09IGl0ZW1zLmxlbmd0aCB9KVxuICAgICAgaSA9IGVuZFxuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKGl0ZW1zW2ldLmtpbmQgPT09ICdub3RpY2UnICYmIGl0ZW1zW2ldLmFnZW50Q29tcGxldGlvbikge1xuICAgICAgbGV0IGVuZCA9IGkgKyAxXG4gICAgICB3aGlsZSAoZW5kIDwgaXRlbXMubGVuZ3RoICYmIGl0ZW1zW2VuZF0ua2luZCA9PT0gJ25vdGljZScgJiYgaXRlbXNbZW5kXS5hZ2VudENvbXBsZXRpb24pIGVuZCsrXG4gICAgICBjb25zdCBydW4gPSBpdGVtcy5zbGljZShpLCBlbmQpXG4gICAgICByZXN1bHQucHVzaChydW4ubGVuZ3RoID09PSAxID8gcnVuWzBdIDogeyBraW5kOiAnYWdlbnQtbm90aWNlLWdyb3VwJywgbm90aWNlczogcnVuIH0pXG4gICAgICBpID0gZW5kXG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICByZXN1bHQucHVzaChpdGVtc1tpKytdKVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zY3JpcHRXaW5kb3coaXRlbXMsIHNpemUpIHtcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBpdGVtcy5sZW5ndGggLSBzaXplKVxuICBjb25zdCBoaWRkZW4gPSBpdGVtcy5zbGljZSgwLCBzdGFydClcbiAgcmV0dXJuIHtcbiAgICBpdGVtczogaXRlbXMuc2xpY2Uoc3RhcnQpLFxuICAgIGhpZGRlbkl0ZW1zOiBoaWRkZW4ubGVuZ3RoLFxuICAgIGhpZGRlbkNvdW50OiBoaWRkZW4ucmVkdWNlKCh0b3RhbCwgaXRlbSkgPT4gdG90YWwgKyBzb3VyY2VJdGVtQ291bnQoaXRlbSksIDApLFxuICB9XG59XG5cbmZ1bmN0aW9uIHNvdXJjZUl0ZW1Db3VudChpdGVtKSB7XG4gIGlmIChpdGVtLmtpbmQgPT09ICd0b29sLWdyb3VwJykgcmV0dXJuIGl0ZW0uaXRlbXMubGVuZ3RoXG4gIGlmIChpdGVtLmtpbmQgPT09ICdhZ2VudC1ub3RpY2UtZ3JvdXAnKSByZXR1cm4gaXRlbS5ub3RpY2VzLmxlbmd0aFxuICBpZiAoaXRlbS5raW5kID09PSAnc3RlZXItdG9vbHMnKSByZXR1cm4gaXRlbS5jb3VudFxuICByZXR1cm4gMVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgVGV4dElucHV0LCB1c2VMYXlvdXQgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSAnLi90cmFuc2NyaXB0LmpzeCdcbmltcG9ydCB7IGFjY2VudCwgRkcsIE1VVEVELCBQQU5FTF9CRyB9IGZyb20gJy4vdGhlbWUuanMnXG5pbXBvcnQgeyBjb252ZXJzYXRpb25NYXRjaGVzLCBoaWdobGlnaHRDb252ZXJzYXRpb24gfSBmcm9tICdwaWNvY29kZS1jb3JlL2NvbnZlcnNhdGlvbi1zZWFyY2guanMnXG5cbmZ1bmN0aW9uIFNjcm9sbEFuY2hvcih7IHRhcmdldCB9KSB7XG4gIGNvbnN0IGxheW91dCA9IHVzZUxheW91dCgpXG4gIHRhcmdldC5hbmNob3JZID0gbGF5b3V0LnlcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gU2VhcmNoTWVzc2FnZSh7IGl0ZW0sIHZlcmJvc2UsIGN1cnJlbnRNYXRjaCwgc2VhcmNoIH0pIHtcbiAgY29uc3QgbGF5b3V0ID0gdXNlTGF5b3V0KClcbiAgaWYgKGN1cnJlbnRNYXRjaCkgc2VhcmNoLnNjcm9sbFRvTWF0Y2gobGF5b3V0LCBjdXJyZW50TWF0Y2gpXG4gIHJldHVybiA8TWVzc2FnZSBpdGVtPXtpdGVtfSB2ZXJib3NlPXt2ZXJib3NlfSAvPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udmVyc2F0aW9uU2VhcmNoKHsgZm0sIHZlcmJvc2UsIHNldEZvbGxvdywgc2V0T2Zmc2V0IH0pIHtcbiAgY29uc3QgW2FjdGl2ZSwgc2V0QWN0aXZlXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3F1ZXJ5LCBzZXRRdWVyeV0gPSBjcmVhdGVTaWduYWwoJycpXG4gIGNvbnN0IFtjb21taXR0ZWQsIHNldENvbW1pdHRlZF0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtpbmRleCwgc2V0SW5kZXhdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtlbnRlckZvY3VzLCBzZXRFbnRlckZvY3VzXSA9IGNyZWF0ZVNpZ25hbChmYWxzZSlcbiAgY29uc3QgW3Njcm9sbFJlcXVlc3QsIHNldFNjcm9sbFJlcXVlc3RdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtzY3JvbGxdID0gY3JlYXRlU2lnbmFsKHsgYW5jaG9yWTogMCwga2V5OiBudWxsIH0pXG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXJGb2N1cygpIHtcbiAgICBpZiAoIWFjdGl2ZSgpKSByZXR1cm5cbiAgICBmbS5pdGVtKCdjb252ZXJzYXRpb24tc2VhcmNoJylcbiAgICBpZiAoZW50ZXJGb2N1cygpKSB7XG4gICAgICBzZXRFbnRlckZvY3VzKGZhbHNlKVxuICAgICAgZm0uZm9jdXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9wZW4oKSB7XG4gICAgc2V0QWN0aXZlKHRydWUpXG4gICAgc2V0UXVlcnkoJycpXG4gICAgc2V0Q29tbWl0dGVkKGZhbHNlKVxuICAgIHNldEluZGV4KDApXG4gICAgc2V0RW50ZXJGb2N1cyh0cnVlKVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvc2UoeyByZXN0b3JlRm9jdXMgPSB0cnVlIH0gPSB7fSkge1xuICAgIHNldEFjdGl2ZShmYWxzZSlcbiAgICBzZXRRdWVyeSgnJylcbiAgICBzZXRDb21taXR0ZWQoZmFsc2UpXG4gICAgc2V0SW5kZXgoMClcbiAgICBpZiAocmVzdG9yZUZvY3VzICYmIGZtLmlzKCdjb252ZXJzYXRpb24tc2VhcmNoJykpIGZtLmZvY3VzKCdmZWVkJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50LCBtYXRjaGVzKSB7XG4gICAgaWYgKGFjdGl2ZSgpICYmICFmbS5pcygnY29udmVyc2F0aW9uLXNlYXJjaCcpKSB7XG4gICAgICBjbG9zZSh7IHJlc3RvcmVGb2N1czogZmFsc2UgfSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmICghYWN0aXZlKCkgfHwgIWNvbW1pdHRlZCgpKSByZXR1cm4gZmFsc2VcbiAgICBjb25zdCBjb3VudCA9IG1hdGNoZXMubGVuZ3RoXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ2VzY2FwZScpIGNsb3NlKClcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICduJyAmJiAhZXZlbnQuc2hpZnQpIHtcbiAgICAgIGlmIChjb3VudCkge1xuICAgICAgICBzZXRJbmRleCgoaW5kZXgoKSArIDEpICUgY291bnQpXG4gICAgICAgIHNldFNjcm9sbFJlcXVlc3QoKHJlcXVlc3QpID0+IHJlcXVlc3QgKyAxKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnTicgfHwgKGV2ZW50LnNoaWZ0ICYmIGV2ZW50LmtleSA9PT0gJ24nKSkge1xuICAgICAgaWYgKGNvdW50KSB7XG4gICAgICAgIHNldEluZGV4KChpbmRleCgpIC0gMSArIGNvdW50KSAlIGNvdW50KVxuICAgICAgICBzZXRTY3JvbGxSZXF1ZXN0KChyZXF1ZXN0KSA9PiByZXF1ZXN0ICsgMSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmwgJiYgZXZlbnQua2V5ID09PSAnbycpIHJldHVybiBmYWxzZVxuICAgIGVsc2UgcmV0dXJuIHRydWVcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlKGl0ZW1zKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGNvbnZlcnNhdGlvbk1hdGNoZXMoaXRlbXMsIHF1ZXJ5KCksIHZlcmJvc2UoKSlcbiAgICBjb25zdCBsYXN0SW5kZXggPSBNYXRoLm1heCgwLCBtYXRjaGVzLmxlbmd0aCAtIDEpXG4gICAgaWYgKGluZGV4KCkgPiBsYXN0SW5kZXgpIHNldEluZGV4KGxhc3RJbmRleClcbiAgICByZXR1cm4ge1xuICAgICAgbWF0Y2hlcyxcbiAgICAgIGl0ZW1zOiBhY3RpdmUoKSA/IGhpZ2hsaWdodENvbnZlcnNhdGlvbihpdGVtcywgcXVlcnkoKSwgaW5kZXgoKSwgdmVyYm9zZSgpKSA6IGl0ZW1zLFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvTWF0Y2gobGF5b3V0LCBtYXRjaCkge1xuICAgIGNvbnN0IHRhcmdldCA9IHNjcm9sbCgpXG4gICAgY29uc3Qga2V5ID0gYCR7cXVlcnkoKX1cXDAke2luZGV4KCl9XFwwJHt2ZXJib3NlKCl9XFwwJHtzY3JvbGxSZXF1ZXN0KCl9YFxuICAgIGlmICh0YXJnZXQua2V5ID09PSBrZXkpIHJldHVyblxuICAgIHRhcmdldC5rZXkgPSBrZXlcbiAgICBzZXRGb2xsb3coZmFsc2UpXG4gICAgc2V0T2Zmc2V0KE1hdGgubWF4KDAsIGxheW91dC55IC0gdGFyZ2V0LmFuY2hvclkgKyBtYXRjaC5saW5lIC0gMykpXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVRdWVyeSh2YWx1ZSkge1xuICAgIHNldFF1ZXJ5KHZhbHVlKVxuICAgIHNldEluZGV4KDApXG4gICAgc2V0U2Nyb2xsUmVxdWVzdCgocmVxdWVzdCkgPT4gcmVxdWVzdCArIDEpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGl2ZSxcbiAgICBxdWVyeSxcbiAgICBjb21taXR0ZWQsXG4gICAgaW5kZXgsXG4gICAgZm9jdXNlZDogKCkgPT4gZm0uaXMoJ2NvbnZlcnNhdGlvbi1zZWFyY2gnKSxcbiAgICByZWdpc3RlckZvY3VzLFxuICAgIG9wZW4sXG4gICAgY2xvc2UsXG4gICAgaGFuZGxlSW5wdXQsXG4gICAgcHJlcGFyZSxcbiAgICBzY3JvbGw6IHNjcm9sbCgpLFxuICAgIHNjcm9sbFRvTWF0Y2gsXG4gICAgY29tbWl0OiAoKSA9PiBzZXRDb21taXR0ZWQodHJ1ZSksXG4gICAgdXBkYXRlUXVlcnksXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbnZlcnNhdGlvblNlYXJjaEJhcih7IHNlYXJjaCwgbWF0Y2hlcyB9KSB7XG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgZmxleFNocmluazogMCwgaGVpZ2h0OiAxLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyIH19PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpIH19PnsnLyAnfTwvdGV4dD5cbiAgICAgIHtzZWFyY2guY29tbWl0dGVkKClcbiAgICAgICAgPyA8dGV4dCBzdHlsZT17eyBjb2xvcjogRkcsIGZsZXhHcm93OiAxIH19PntzZWFyY2gucXVlcnkoKX08L3RleHQ+XG4gICAgICAgIDogPFRleHRJbnB1dFxuICAgICAgICAgICAgZm9jdXNlZD17c2VhcmNoLmZvY3VzZWQoKX1cbiAgICAgICAgICAgIHZhbHVlPXtzZWFyY2gucXVlcnkoKX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzZWFyY2gudXBkYXRlUXVlcnl9XG4gICAgICAgICAgICBvblN1Ym1pdD17c2VhcmNoLmNvbW1pdH1cbiAgICAgICAgICAgIG9uQ2FuY2VsPXtzZWFyY2guY2xvc2V9XG4gICAgICAgICAgLz59XG4gICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+e21hdGNoZXMubGVuZ3RoID8gYCR7c2VhcmNoLmluZGV4KCkgKyAxfS8ke21hdGNoZXMubGVuZ3RofWAgOiAnMC8wJ308L3RleHQ+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuZXhwb3J0IHsgU2Nyb2xsQW5jaG9yIGFzIENvbnZlcnNhdGlvblNjcm9sbEFuY2hvciwgU2VhcmNoTWVzc2FnZSBhcyBDb252ZXJzYXRpb25TZWFyY2hNZXNzYWdlIH1cbiIsICJpbXBvcnQgeyBjcmVhdGVTaWduYWwsIEJ1dHRvbiwgVGV4dElucHV0LCB1c2VJbnB1dCB9IGZyb20gJ0B0cmVuZHIvY29yZSdcbmltcG9ydCB7IGFjY2VudCwgTVVURUQsIEZHLCBGR19TT0ZULCBQQU5FTF9CRywgU0VMRUNUX0JHIH0gZnJvbSAnLi90aGVtZS5qcydcblxuZnVuY3Rpb24gYW5zd2VyVGV4dChxdWVzdGlvbiwgYW5zd2VyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFuc3dlcikpIHJldHVybiBhbnN3ZXIuam9pbignLCAnKVxuICByZXR1cm4gYW5zd2VyIHx8ICdOb3QgYW5zd2VyZWQnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBRdWVzdGlvbkZvcm0oeyByZXF1ZXN0LCBmb2N1c2VkLCBvblN1Ym1pdCwgb25DYW5jZWwgfSkge1xuICBjb25zdCBxdWVzdGlvbnMgPSByZXF1ZXN0LnF1ZXN0aW9uc1xuICBjb25zdCByZXZpZXdpbmcgPSBxdWVzdGlvbnMubGVuZ3RoID4gMVxuICBjb25zdCBbc3RlcCwgc2V0U3RlcF0gPSBjcmVhdGVTaWduYWwoMClcbiAgY29uc3QgW2Fuc3dlcnMsIHNldEFuc3dlcnNdID0gY3JlYXRlU2lnbmFsKHt9KVxuICBjb25zdCBbY3Vyc29yLCBzZXRDdXJzb3JdID0gY3JlYXRlU2lnbmFsKDApXG4gIGNvbnN0IFtjdXN0b20sIHNldEN1c3RvbV0gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtyZXZpZXcsIHNldFJldmlld10gPSBjcmVhdGVTaWduYWwoZmFsc2UpXG4gIGNvbnN0IFtjb250cm9sLCBzZXRDb250cm9sXSA9IGNyZWF0ZVNpZ25hbCgnYW5zd2VyJylcblxuICBjb25zdCBxdWVzdGlvbiA9ICgpID0+IHF1ZXN0aW9uc1tzdGVwKCldXG4gIGNvbnN0IG9wdGlvbnMgPSAoKSA9PiBxdWVzdGlvbigpLm9wdGlvbnMgfHwgW11cbiAgY29uc3Qgcm93cyA9ICgpID0+IFsuLi5vcHRpb25zKCksIC4uLihxdWVzdGlvbigpLmFsbG93T3RoZXIgPT09IGZhbHNlID8gW10gOiBbeyBsYWJlbDogJ090aGVyJywgb3RoZXI6IHRydWUgfV0pXVxuICBjb25zdCBzZWxlY3RlZCA9IChsYWJlbCkgPT4gKGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXSB8fCBbXSkuaW5jbHVkZXMobGFiZWwpXG4gIGNvbnN0IG90aGVyQW5zd2VyID0gKCkgPT4ge1xuICAgIGNvbnN0IGFuc3dlciA9IGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXVxuICAgIGNvbnN0IGxhYmVscyA9IG5ldyBTZXQob3B0aW9ucygpLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubGFiZWwpKVxuICAgIGlmIChBcnJheS5pc0FycmF5KGFuc3dlcikpIHJldHVybiBhbnN3ZXIuZmluZCgodmFsdWUpID0+ICFsYWJlbHMuaGFzKHZhbHVlKSkgfHwgJydcbiAgICByZXR1cm4gYW5zd2VyICYmICFsYWJlbHMuaGFzKGFuc3dlcikgPyBhbnN3ZXIgOiAnJ1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0QW5zd2VyKHZhbHVlKSB7XG4gICAgc2V0QW5zd2VycygoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgW3F1ZXN0aW9uKCkuaWRdOiB2YWx1ZSB9KSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkdmFuY2UoKSB7XG4gICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgIHNldEN1cnNvcigwKVxuICAgIHNldENvbnRyb2woJ2Fuc3dlcicpXG4gICAgaWYgKHN0ZXAoKSA8IHF1ZXN0aW9ucy5sZW5ndGggLSAxKSBzZXRTdGVwKHN0ZXAoKSArIDEpXG4gICAgZWxzZSBpZiAocmV2aWV3aW5nKSB7IHNldEN1cnNvcihxdWVzdGlvbnMubGVuZ3RoKTsgc2V0UmV2aWV3KHRydWUpIH1cbiAgICBlbHNlIGZpbmlzaCgpXG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgb25TdWJtaXQocXVlc3Rpb25zLm1hcCgoaXRlbSkgPT4gKHsgaWQ6IGl0ZW0uaWQsIHF1ZXN0aW9uOiBpdGVtLnF1ZXN0aW9uLCBhbnN3ZXI6IGFuc3dlcnMoKVtpdGVtLmlkXSA/PyAnJyB9KSkpXG4gIH1cblxuICBmdW5jdGlvbiBzdWJtaXRUZXh0KHZhbHVlKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdmFsdWUudHJpbSgpXG4gICAgaWYgKCFhbnN3ZXIpIHJldHVyblxuICAgIHNldEFuc3dlcihhbnN3ZXIpXG4gICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBpdGVtLmlkLCBxdWVzdGlvbjogaXRlbS5xdWVzdGlvbiwgYW5zd2VyIH1dKVxuICAgIGVsc2UgYWR2YW5jZSgpXG4gIH1cblxuICBmdW5jdGlvbiBzdWJtaXRPdGhlcih2YWx1ZSkge1xuICAgIGNvbnN0IGFuc3dlciA9IHZhbHVlLnRyaW0oKVxuICAgIGNvbnN0IGtub3duID0gbmV3IFNldCgoaXRlbS5vcHRpb25zIHx8IFtdKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKSlcbiAgICBjb25zdCBjaG9pY2VzID0gaXRlbS50eXBlID09PSAnbXVsdGknID8gKGFuc3dlcnMoKVtpdGVtLmlkXSB8fCBbXSkuZmlsdGVyKChlbnRyeSkgPT4ga25vd24uaGFzKGVudHJ5KSkgOiBbXVxuICAgIGNvbnN0IG5leHRBbnN3ZXIgPSBpdGVtLnR5cGUgPT09ICdtdWx0aScgPyBbLi4uY2hvaWNlcywgLi4uKGFuc3dlciA/IFthbnN3ZXJdIDogW10pXSA6IGFuc3dlclxuICAgIHNldEFuc3dlcihuZXh0QW5zd2VyKVxuICAgIHNldEN1c3RvbShmYWxzZSlcbiAgICBpZiAoaXRlbS50eXBlID09PSAnc2luZ2xlJyAmJiBhbnN3ZXIpIHtcbiAgICAgIGlmIChxdWVzdGlvbnMubGVuZ3RoID09PSAxKSBvblN1Ym1pdChbeyBpZDogaXRlbS5pZCwgcXVlc3Rpb246IGl0ZW0ucXVlc3Rpb24sIGFuc3dlciB9XSlcbiAgICAgIGVsc2UgYWR2YW5jZSgpXG4gICAgfVxuICB9XG5cbiAgdXNlSW5wdXQoKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSByZXR1cm5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgaWYgKGN1c3RvbSgpKSB7IHNldEN1c3RvbShmYWxzZSk7IHNldENvbnRyb2woJ2Fuc3dlcicpIH1cbiAgICAgIGVsc2UgaWYgKHJldmlldygpKSBzZXRSZXZpZXcoZmFsc2UpXG4gICAgICBlbHNlIG9uQ2FuY2VsKClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHJldmlldygpKSB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAndXAnIHx8IGV2ZW50LmtleSA9PT0gJ2snKSBzZXRDdXJzb3IoTWF0aC5tYXgoMCwgY3Vyc29yKCkgLSAxKSlcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ2Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ2onKSBzZXRDdXJzb3IoTWF0aC5taW4ocXVlc3Rpb25zLmxlbmd0aCwgY3Vyc29yKCkgKyAxKSlcbiAgICAgIGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3JldHVybicpIHtcbiAgICAgICAgaWYgKGN1cnNvcigpID09PSBxdWVzdGlvbnMubGVuZ3RoKSBmaW5pc2goKVxuICAgICAgICBlbHNlIHsgc2V0U3RlcChjdXJzb3IoKSk7IHNldEN1cnNvcigwKTsgc2V0Q29udHJvbCgnYW5zd2VyJyk7IHNldFJldmlldyhmYWxzZSkgfVxuICAgICAgfSBlbHNlIHJldHVyblxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoc3RlcCgpID4gMCAmJiAoZXZlbnQua2V5ID09PSAndGFiJyB8fCBldmVudC5rZXkgPT09ICdzaGlmdC10YWInKSkge1xuICAgICAgc2V0Q29udHJvbChjb250cm9sKCkgPT09ICdiYWNrJyA/ICdhbnN3ZXInIDogJ2JhY2snKVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY29udHJvbCgpID09PSAnYmFjaycpIHJldHVyblxuICAgIGlmIChjdXN0b20oKSkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ3RhYicgfHwgZXZlbnQua2V5ID09PSAnc2hpZnQtdGFiJykge1xuICAgICAgICBzZXRDdXN0b20oZmFsc2UpXG4gICAgICAgIHNldENvbnRyb2woJ2Fuc3dlcicpXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHF1ZXN0aW9uKCk/LnR5cGUgPT09ICd0ZXh0JykgcmV0dXJuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ3VwJyB8fCBldmVudC5rZXkgPT09ICdrJykgc2V0Q3Vyc29yKE1hdGgubWF4KDAsIGN1cnNvcigpIC0gMSkpXG4gICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnZG93bicgfHwgZXZlbnQua2V5ID09PSAnaicpIHNldEN1cnNvcihNYXRoLm1pbihyb3dzKCkubGVuZ3RoIC0gMSwgY3Vyc29yKCkgKyAxKSlcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICdzcGFjZScgJiYgcXVlc3Rpb24oKS50eXBlID09PSAnbXVsdGknKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dzKClbY3Vyc29yKCldXG4gICAgICBpZiAocm93Lm90aGVyKSB7XG4gICAgICAgIGlmIChvdGhlckFuc3dlcigpKSB7XG4gICAgICAgICAgY29uc3Qga25vd24gPSBuZXcgU2V0KG9wdGlvbnMoKS5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsKSlcbiAgICAgICAgICBzZXRBbnN3ZXIoKGFuc3dlcnMoKVtxdWVzdGlvbigpLmlkXSB8fCBbXSkuZmlsdGVyKChlbnRyeSkgPT4ga25vd24uaGFzKGVudHJ5KSkpXG4gICAgICAgICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgICAgICB9IGVsc2Ugc2V0Q3VzdG9tKHRydWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gYW5zd2VycygpW3F1ZXN0aW9uKCkuaWRdIHx8IFtdXG4gICAgICAgIHNldEFuc3dlcihjdXJyZW50LmluY2x1ZGVzKHJvdy5sYWJlbCkgPyBjdXJyZW50LmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSByb3cubGFiZWwpIDogWy4uLmN1cnJlbnQsIHJvdy5sYWJlbF0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdyZXR1cm4nKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dzKClbY3Vyc29yKCldXG4gICAgICBpZiAocXVlc3Rpb24oKS50eXBlID09PSAnbXVsdGknKSBhZHZhbmNlKClcbiAgICAgIGVsc2UgaWYgKHJvdy5vdGhlcikgc2V0Q3VzdG9tKHRydWUpXG4gICAgICBlbHNlIHtcbiAgICAgICAgc2V0QW5zd2VyKHJvdy5sYWJlbClcbiAgICAgICAgaWYgKHF1ZXN0aW9ucy5sZW5ndGggPT09IDEpIG9uU3VibWl0KFt7IGlkOiBxdWVzdGlvbigpLmlkLCBxdWVzdGlvbjogcXVlc3Rpb24oKS5xdWVzdGlvbiwgYW5zd2VyOiByb3cubGFiZWwgfV0pXG4gICAgICAgIGVsc2UgYWR2YW5jZSgpXG4gICAgICB9XG4gICAgfSBlbHNlIHJldHVyblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH0pXG5cbiAgaWYgKHJldmlldygpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGJnOiBQQU5FTF9CRywgcGFkZGluZ1g6IDIsIHBhZGRpbmdZOiAxLCBtYXJnaW5Ub3A6IDEgfX0+XG4gICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGFjY2VudCgpLCBib2xkOiB0cnVlIH19PlJldmlldyBhbnN3ZXJzPC90ZXh0PlxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleEdyb3c6IDEgfX0gLz5cbiAgICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+ZW50ZXI6IGVkaXQgb3Igc3VibWl0ICBlc2M6IGJhY2s8L3RleHQ+XG4gICAgICAgIDwvYm94PlxuICAgICAgICB7cXVlc3Rpb25zLm1hcCgoaXRlbSwgaW5kZXgpID0+IChcbiAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogY3Vyc29yKCkgPT09IGluZGV4ID8gU0VMRUNUX0JHIDogdW5kZWZpbmVkLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBjdXJzb3IoKSA9PT0gaW5kZXggPyBhY2NlbnQoKSA6IEZHIH19PntpdGVtLnF1ZXN0aW9ufTwvdGV4dD5cbiAgICAgICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YW5zd2VyVGV4dChpdGVtLCBhbnN3ZXJzKClbaXRlbS5pZF0pfTwvdGV4dD5cbiAgICAgICAgICA8L2JveD5cbiAgICAgICAgKSl9XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGJnOiBjdXJzb3IoKSA9PT0gcXVlc3Rpb25zLmxlbmd0aCA/IGFjY2VudCgpIDogdW5kZWZpbmVkLCBjb2xvcjogY3Vyc29yKCkgPT09IHF1ZXN0aW9ucy5sZW5ndGggPyAnYmxhY2snIDogRkcsIGJvbGQ6IHRydWUgfX0+IFN1Ym1pdCBhbnN3ZXJzIDwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGl0ZW0gPSBxdWVzdGlvbigpXG4gIGNvbnN0IHByb2dyZXNzID0gcXVlc3Rpb25zLmxlbmd0aCA+IDEgPyBgJHtzdGVwKCkgKyAxfSBvZiAke3F1ZXN0aW9ucy5sZW5ndGh9YCA6ICdRdWVzdGlvbidcbiAgcmV0dXJuIChcbiAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogUEFORUxfQkcsIHBhZGRpbmdYOiAyLCBwYWRkaW5nWTogMSwgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JyB9fT5cbiAgICAgICAge3N0ZXAoKSA+IDAgJiYgKFxuICAgICAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycgfX0+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGxhYmVsPVwiQmFja1wiXG4gICAgICAgICAgICAgIGZvY3VzZWQ9e2ZvY3VzZWQgJiYgY29udHJvbCgpID09PSAnYmFjayd9XG4gICAgICAgICAgICAgIG9uUHJlc3M9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGVwKHN0ZXAoKSAtIDEpXG4gICAgICAgICAgICAgICAgc2V0Q3Vyc29yKDApXG4gICAgICAgICAgICAgICAgc2V0Q3VzdG9tKGZhbHNlKVxuICAgICAgICAgICAgICAgIHNldENvbnRyb2woJ2Fuc3dlcicpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHRleHQ+ICA8L3RleHQ+XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgICl9XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBhY2NlbnQoKSwgYm9sZDogdHJ1ZSB9fT57cHJvZ3Jlc3N9PC90ZXh0PlxuICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IC8+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57aXRlbS50eXBlID09PSAnbXVsdGknID8gJ3NwYWNlOiBzZWxlY3QgIGVudGVyOiBjb250aW51ZScgOiAnZW50ZXI6IGFuc3dlcid9ICBlc2M6IGNhbmNlbDwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHLCBib2xkOiB0cnVlIH19PntpdGVtLnF1ZXN0aW9ufTwvdGV4dD5cbiAgICAgIHtpdGVtLmRlc2NyaXB0aW9uICYmIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBGR19TT0ZUIH19PntpdGVtLmRlc2NyaXB0aW9ufTwvdGV4dD59XG4gICAgICB7aXRlbS50eXBlID09PSAndGV4dCcgPyAoXG4gICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IFNFTEVDVF9CRywgcGFkZGluZ1g6IDEsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgICA8VGV4dElucHV0XG4gICAgICAgICAgICBrZXk9e2Ake2l0ZW0uaWR9OnRleHRgfVxuICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjb250cm9sKCkgPT09ICdhbnN3ZXInfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHlvdXIgYW5zd2VyXCJcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZT17dHlwZW9mIGFuc3dlcnMoKVtpdGVtLmlkXSA9PT0gJ3N0cmluZycgPyBhbnN3ZXJzKClbaXRlbS5pZF0gOiAnJ31cbiAgICAgICAgICAgIG9uU3VibWl0PXtzdWJtaXRUZXh0fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvYm94PlxuICAgICAgKSA6IChcbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWFyZ2luVG9wOiAxIH19PlxuICAgICAgICAgIHtyb3dzKCkubWFwKChvcHRpb24sIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBiZzogY3Vyc29yKCkgPT09IGluZGV4ID8gU0VMRUNUX0JHIDogdW5kZWZpbmVkLCBwYWRkaW5nWDogMSB9fT5cbiAgICAgICAgICAgICAgPHRleHQgc3R5bGU9e3sgY29sb3I6IGN1cnNvcigpID09PSBpbmRleCA/IGFjY2VudCgpIDogRkcgfX0+XG4gICAgICAgICAgICAgICAge2l0ZW0udHlwZSA9PT0gJ211bHRpJ1xuICAgICAgICAgICAgICAgICAgPyBgJHtvcHRpb24ub3RoZXIgPyAob3RoZXJBbnN3ZXIoKSA/ICdbeF0nIDogJ1sgXScpIDogKHNlbGVjdGVkKG9wdGlvbi5sYWJlbCkgPyAnW3hdJyA6ICdbIF0nKX0gYFxuICAgICAgICAgICAgICAgICAgOiBgJHtjdXJzb3IoKSA9PT0gaW5kZXggPyAnXHUyMDNBJyA6ICcgJ30gYH17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgIHtvcHRpb24uZGVzY3JpcHRpb24gJiYgPHRleHQgc3R5bGU9e3sgY29sb3I6IEZHX1NPRlQgfX0+e2AgICR7b3B0aW9uLmRlc2NyaXB0aW9ufWB9PC90ZXh0Pn1cbiAgICAgICAgICAgICAge29wdGlvbi5vdGhlciAmJiAoY3VzdG9tKCkgfHwgb3RoZXJBbnN3ZXIoKSkgJiYgKFxuICAgICAgICAgICAgICAgIDxib3ggc3R5bGU9e3sgYmc6IGN1c3RvbSgpID8gUEFORUxfQkcgOiB1bmRlZmluZWQsIHBhZGRpbmdMZWZ0OiA0IH19PlxuICAgICAgICAgICAgICAgICAgPFRleHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2l0ZW0uaWR9Om90aGVyYH1cbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZD17Zm9jdXNlZCAmJiBjdXN0b20oKX1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIGFub3RoZXIgYW5zd2VyXCJcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlPXtvdGhlckFuc3dlcigpfVxuICAgICAgICAgICAgICAgICAgICBvblN1Ym1pdD17c3VibWl0T3RoZXJ9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9ib3g+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvYm94PlxuICAgICAgKX1cbiAgICA8L2JveD5cbiAgKVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZVNpZ25hbCwgdXNlSW50ZXJ2YWwsIHVzZU1vdXNlLCB1c2VSZXNpemUgfSBmcm9tICdAdHJlbmRyL2NvcmUnXG5pbXBvcnQgeyBhY2NlbnQsIE1VVEVEIH0gZnJvbSAnLi90aGVtZS5qcydcblxuZnVuY3Rpb24gRW1wdHlDbG91ZCh7IHdpZHRoLCBoZWlnaHQsIHZlcnNpb24gfSkge1xuICBjb25zdCBbcGhhc2UsIHNldFBoYXNlXSA9IGNyZWF0ZVNpZ25hbCgwKVxuICBjb25zdCBbd2FrZSwgc2V0V2FrZV0gPSBjcmVhdGVTaWduYWwoW10pXG4gIGxldCBwcmV2aW91cyA9IG51bGxcblxuICB1c2VNb3VzZSgoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQuYWN0aW9uICE9PSAnbW92ZScgJiYgZXZlbnQuYWN0aW9uICE9PSAnZHJhZycpIHJldHVyblxuICAgIGNvbnN0IHggPSBldmVudC54XG4gICAgY29uc3QgeSA9IGV2ZW50LnlcbiAgICBpZiAoeCA8IDAgfHwgeCA+PSB3aWR0aCB8fCB5IDwgMCB8fCB5ID49IGhlaWdodCkgcmV0dXJuXG4gICAgY29uc3QgZHggPSBwcmV2aW91cyA/IHggLSBwcmV2aW91cy54IDogMFxuICAgIGNvbnN0IGR5ID0gcHJldmlvdXMgPyB5IC0gcHJldmlvdXMueSA6IDBcbiAgICBwcmV2aW91cyA9IHsgeCwgeSB9XG4gICAgY29uc3Qgc3BlZWQgPSBNYXRoLmh5cG90KGR4ICogMC41LCBkeSlcbiAgICBpZiAoc3BlZWQgPT09IDApIHJldHVyblxuICAgIHNldFdha2UocG9pbnRzID0+IFsuLi5wb2ludHMuc2xpY2UoLTIwKSwgeyB4LCB5LCBkeCwgZHksIHNwZWVkOiBNYXRoLm1pbig0LCBzcGVlZCksIGFnZTogMCB9XSlcbiAgfSlcblxuICB1c2VJbnRlcnZhbCgoKSA9PiB7XG4gICAgc2V0UGhhc2UodmFsdWUgPT4gdmFsdWUgKyAwLjE2KVxuICAgIHNldFdha2UocG9pbnRzID0+IHBvaW50cy5tYXAocG9pbnQgPT4gKHsgLi4ucG9pbnQsIGFnZTogcG9pbnQuYWdlICsgMSB9KSkuZmlsdGVyKHBvaW50ID0+IHBvaW50LmFnZSA8IDE4KSlcbiAgfSwgOTApXG5cbiAgY29uc3QgZ2x5cGhzID0gJyAgLi46OisrKipcdTI1OTFcdTI1OTInXG4gIGNvbnN0IHJvd3MgPSBbXVxuICBjb25zdCBiYXNlID0gYWNjZW50KClcbiAgY29uc3QgcmdiID0gL14jKFswLTlhLWZdezZ9KSQvaS5leGVjKGJhc2UpXG4gIGNvbnN0IG5laWdoYm9yaW5nID0gcmdiXG4gICAgPyBgIyR7W1xuICAgICAgTWF0aC5tYXgoMCwgcGFyc2VJbnQocmdiWzFdLnNsaWNlKDAsIDIpLCAxNikgLSAxOCksXG4gICAgICBNYXRoLm1pbigyNTUsIHBhcnNlSW50KHJnYlsxXS5zbGljZSgyLCA0KSwgMTYpICsgOCksXG4gICAgICBNYXRoLm1pbigyNTUsIHBhcnNlSW50KHJnYlsxXS5zbGljZSg0LCA2KSwgMTYpICsgMjQpLFxuICAgIF0ubWFwKHZhbHVlID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKX1gXG4gICAgOiBiYXNlXG5cbiAgZm9yIChsZXQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgIGNvbnN0IHJvdyA9IFtdXG4gICAgZm9yIChsZXQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7XG4gICAgICBjb25zdCBwID0gcGhhc2UoKVxuICAgICAgY29uc3QgYnJvYWQgPSBNYXRoLnNpbih4ICogMC4wOCArIHApICsgTWF0aC5zaW4oeSAqIDAuMjkgLSBwICogMC43KSArIE1hdGguc2luKCh4ICsgeSkgKiAwLjA1ICsgcCAqIDAuMzUpXG4gICAgICBjb25zdCB3aXNwcyA9IE1hdGguc2luKHggKiAwLjE5IC0geSAqIDAuMTEgLSBwICogMC41NSkgKyBNYXRoLnNpbih4ICogMC4wMyArIHkgKiAwLjQzICsgcCAqIDAuNClcbiAgICAgIGNvbnN0IHBvY2tldHMgPSBNYXRoLnNpbih4ICogMC4zMSArIHAgKiAwLjgpICogTWF0aC5zaW4oeSAqIDAuNDcgLSBwICogMC4zKVxuICAgICAgbGV0IGJyb2FkRGlzcGxhY2VtZW50ID0gMFxuICAgICAgbGV0IHdpc3BEaXNwbGFjZW1lbnQgPSAwXG4gICAgICBsZXQgaW50ZXJhY3Rpb24gPSAwXG4gICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHdha2UoKSkge1xuICAgICAgICBjb25zdCBsZW5ndGggPSBNYXRoLmh5cG90KHBvaW50LmR4ICogMC41LCBwb2ludC5keSkgfHwgMVxuICAgICAgICBjb25zdCB1eCA9IHBvaW50LmR4ICogMC41IC8gbGVuZ3RoXG4gICAgICAgIGNvbnN0IHV5ID0gcG9pbnQuZHkgLyBsZW5ndGhcbiAgICAgICAgY29uc3QgcnggPSAoeCAtIHBvaW50LngpICogMC41XG4gICAgICAgIGNvbnN0IHJ5ID0geSAtIHBvaW50LnlcbiAgICAgICAgY29uc3QgYWxvbmcgPSByeCAqIHV4ICsgcnkgKiB1eVxuICAgICAgICBjb25zdCBhY3Jvc3MgPSAtcnggKiB1eSArIHJ5ICogdXhcbiAgICAgICAgY29uc3QgdHJhaWxpbmcgPSBhbG9uZyA8PSAyICYmIGFsb25nID49IC0xOCAtIHBvaW50LnNwZWVkICogM1xuICAgICAgICBpZiAoIXRyYWlsaW5nKSBjb250aW51ZVxuICAgICAgICBjb25zdCBhZ2UgPSAxIC0gcG9pbnQuYWdlIC8gMThcbiAgICAgICAgY29uc3QgdHJhaWwgPSBNYXRoLmV4cCgtTWF0aC5wb3coKGFsb25nICsgNCArIHBvaW50LmFnZSAqIDAuMzUpIC8gKDcgKyBwb2ludC5zcGVlZCAqIDIpLCAyKSlcbiAgICAgICAgY29uc3QgY2VudGVyID0gTWF0aC5leHAoLShhY3Jvc3MgKiBhY3Jvc3MpIC8gNSlcbiAgICAgICAgY29uc3QgZWRnZXMgPSBNYXRoLmV4cCgtTWF0aC5wb3coTWF0aC5hYnMoYWNyb3NzKSAtIDMuMiwgMikgLyAzKVxuICAgICAgICBjb25zdCBmb3JjZSA9IGFnZSAqIHRyYWlsICogKDAuNSArIHBvaW50LnNwZWVkICogMC40NSlcbiAgICAgICAgY29uc3QgcmFkaWFsRGlzdGFuY2UgPSBNYXRoLnNxcnQocnggKiByeCArIHJ5ICogcnkpXG4gICAgICAgIGNvbnN0IHJpcHBsZUVudmVsb3BlID0gTWF0aC5leHAoLShyYWRpYWxEaXN0YW5jZSAqIHJhZGlhbERpc3RhbmNlKSAvICgzNSArIHBvaW50LnNwZWVkICogMTIpKVxuICAgICAgICBjb25zdCByaXBwbGUgPSBNYXRoLnNpbihyYWRpYWxEaXN0YW5jZSAqIDEuMzUgLSBwb2ludC5hZ2UgKiAwLjc1KSAqIHJpcHBsZUVudmVsb3BlICogYWdlXG4gICAgICAgIHdpc3BEaXNwbGFjZW1lbnQgKz0gKGVkZ2VzICogMC45IC0gY2VudGVyKSAqIGZvcmNlICogMS41ICsgcmlwcGxlICogKDEuMiArIHBvaW50LnNwZWVkICogMC4yNSlcbiAgICAgICAgYnJvYWREaXNwbGFjZW1lbnQgKz0gKGVkZ2VzICogMC40NSAtIGNlbnRlciAqIDAuMzUpICogZm9yY2UgKiAwLjU1ICsgcmlwcGxlICogMC4yNVxuICAgICAgICBpbnRlcmFjdGlvbiA9IE1hdGgubWF4KGludGVyYWN0aW9uLCBNYXRoLmFicyhyaXBwbGUpICogKDAuNSArIHBvaW50LnNwZWVkICogMC4xNSkpXG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIChcbiAgICAgICAgYnJvYWQgKyBicm9hZERpc3BsYWNlbWVudCArICh3aXNwcyArIHdpc3BEaXNwbGFjZW1lbnQpICogMC42NSArIHBvY2tldHMgKiAwLjggKyAzLjJcbiAgICAgICkgLyA3LjQpKVxuICAgICAgY29uc3QgaW5kZXggPSBNYXRoLm1pbihnbHlwaHMubGVuZ3RoIC0gMSwgTWF0aC5mbG9vcih2YWx1ZSAqIGdseXBocy5sZW5ndGgpKVxuICAgICAgcm93LnB1c2goeyBnbHlwaDogZ2x5cGhzW2luZGV4XSwgY29sb3I6IGludGVyYWN0aW9uID4gMC4xNiA/IG5laWdoYm9yaW5nIDogYmFzZSwgZGltOiBpbmRleCA8IDggfSlcbiAgICB9XG4gICAgcm93cy5wdXNoKHJvdylcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZmxleEdyb3c6IDEgfX0+XG4gICAgICB7cm93cy5tYXAoKHJvdywgaSkgPT4ge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGkgPT09IDEgPyAncGljbycgOiBpID09PSAyID8gYHYke3ZlcnNpb259YCA6ICcnXG4gICAgICAgIGNvbnN0IGluQnJhbmRCb3ggPSBpID49IDEgJiYgaSA8PSAyXG4gICAgICAgIGNvbnN0IGJveFN0YXJ0ID0gMVxuICAgICAgICBjb25zdCBib3hXaWR0aCA9IGB2JHt2ZXJzaW9ufWAubGVuZ3RoICsgMlxuICAgICAgICBjb25zdCBjbG91ZCA9IChjZWxscykgPT4gY2VsbHMubWFwKChjZWxsLCB4KSA9PiAoXG4gICAgICAgICAgPHRleHQga2V5PXt4fSBzdHlsZT17eyBjb2xvcjogY2VsbC5jb2xvciwgZGltOiBjZWxsLmRpbSB9fT57Y2VsbC5nbHlwaH08L3RleHQ+XG4gICAgICAgICkpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGJveCBrZXk9e2l9IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBoZWlnaHQ6IDEsIG92ZXJmbG93OiAnY2xpcCcgfX0+XG4gICAgICAgICAgICB7aW5CcmFuZEJveCAmJiBjbG91ZChyb3cuc2xpY2UoMCwgYm94U3RhcnQpKX1cbiAgICAgICAgICAgIHtpbkJyYW5kQm94ICYmIChcbiAgICAgICAgICAgICAgPGJveCBzdHlsZT17eyB3aWR0aDogYm94V2lkdGgsIHBhZGRpbmdYOiAxIH19PlxuICAgICAgICAgICAgICAgIHtsYWJlbCAmJiA8dGV4dCBzdHlsZT17eyBib2xkOiBpID09PSAxLCBjb2xvcjogaSA9PT0gMSA/IGFjY2VudCgpIDogTVVURUQgfX0+e2xhYmVsfTwvdGV4dD59XG4gICAgICAgICAgICAgIDwvYm94PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtjbG91ZChyb3cuc2xpY2UoaW5CcmFuZEJveCA/IGJveFN0YXJ0ICsgYm94V2lkdGggOiAwKSl9XG4gICAgICAgICAgPC9ib3g+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvYm94PlxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbXB0eVN0YXRlKHsgdmVyc2lvbiwgY2xvdWRzID0gZmFsc2UgfSkge1xuICBjb25zdCBbc2l6ZSwgc2V0U2l6ZV0gPSBjcmVhdGVTaWduYWwoeyB3aWR0aDogcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MCwgaGVpZ2h0OiBwcm9jZXNzLnN0ZG91dC5yb3dzIHx8IDI0IH0pXG4gIHVzZVJlc2l6ZShzZXRTaXplKVxuICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDEsIHNpemUoKS53aWR0aClcbiAgY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoMSwgc2l6ZSgpLmhlaWdodCAtIDQpXG4gIGlmICghY2xvdWRzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1hcmdpblRvcDogMSB9fT5cbiAgICAgICAgPHRleHQgc3R5bGU9e3sgYm9sZDogdHJ1ZSwgY29sb3I6IGFjY2VudCgpIH19PnsnICBwaWNvJ308L3RleHQ+XG4gICAgICAgIDx0ZXh0IHN0eWxlPXt7IGNvbG9yOiBNVVRFRCB9fT57YCAgdiR7dmVyc2lvbn1gfTwvdGV4dD5cbiAgICAgIDwvYm94PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGJveCBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGgsIGhlaWdodCB9fT5cbiAgICAgIDxFbXB0eUNsb3VkIHdpZHRoPXt3aWR0aH0gaGVpZ2h0PXtoZWlnaHR9IHZlcnNpb249e3ZlcnNpb259IC8+XG4gICAgPC9ib3g+XG4gIClcbn1cblxuIiwgImltcG9ydCB7IE1hcmtkb3duLCBTY3JvbGxCb3gsIHVzZUlucHV0IH0gZnJvbSAnQHRyZW5kci9jb3JlJ1xuaW1wb3J0IHsgYWNjZW50LCBNVVRFRCB9IGZyb20gJy4vdGhlbWUuanMnXG5cbmNvbnN0IEhFTFBfVEVYVCA9IChjb21tYW5kcykgPT4gYHBpY28gaXMgYSBjb2RpbmcgYWdlbnQgaW4geW91ciB0ZXJtaW5hbC4gSXQgcmVhZHMsIGVkaXRzLCBhbmQgc2VhcmNoZXMgZmlsZXMsIHJ1bnMgY29tbWFuZHMsIGFuZCBzdHJlYW1zIGl0cyB3b3JrIGludG8gdGhpcyB0cmFuc2NyaXB0LlxuXG4jIyBDb21tYW5kc1xuXG5UeXBlIFxcYC9cXGAgaW4gdGhlIGNvbXBvc2VyIHRvIGZpbHRlciB0aGVzZSBhcyB5b3UgdHlwZS5cblxuJHtjb21tYW5kcy5tYXAoKGMpID0+IGAtIFxcYC8ke2MubmFtZX1cXGAgLSAke2MuZGVzY31gKS5qb2luKCdcXG4nKX1cblxuVHdvIGtpbmRzIG9mIHVzZXItZGVmaW5lZCBlbnRyaWVzIGpvaW4gdGhpcyBtZW51OlxuXG4tICoqY29tbWFuZHMqKiAoXFxgfi8ucGljby9jb21tYW5kcy88bmFtZT4ubWRcXGAgb3IgXFxgLnBpY28vY29tbWFuZHMvPG5hbWU+Lm1kXFxgKTogcHJvbXB0IHRlbXBsYXRlcyB5b3UgaW52b2tlIGFzIFxcYC88bmFtZT4gW2FyZ3NdXFxgLiBcXGAkQVJHVU1FTlRTXFxgIGluIHRoZSBib2R5IGlzIHJlcGxhY2VkIHdpdGggd2hhdGV2ZXIgZm9sbG93cyB0aGUgY29tbWFuZDsgd2l0aG91dCBhIHBsYWNlaG9sZGVyLCBhcmdzIGFyZSBhcHBlbmRlZC4gVGhlIG1vZGVsIG5ldmVyIHNlZXMgdGhlc2UgdW50aWwgeW91IHJ1biBvbmUuXG4tICoqc2tpbGxzKiogKFxcYH4vLnBpY28vc2tpbGxzLzxuYW1lPi9TS0lMTC5tZFxcYCBvciBcXGAucGljby9za2lsbHMvPG5hbWU+L1NLSUxMLm1kXFxgKTogY2FwYWJpbGl0aWVzIHdpdGggYSBuYW1lIGFuZCBkZXNjcmlwdGlvbi4gWW91IGNhbiBpbnZva2UgdGhlbSBsaWtlIGNvbW1hbmRzLCBhbmQgdGhlIGFnZW50IGNhbiBhbHNvIGRpc2NvdmVyIGFuZCBsb2FkIHRoZW0gaXRzZWxmIHZpYSB0aGUgc2tpbGwgdG9vbC5cbi0gKip0b29scyoqIChcXGB+Ly5waWNvL3Rvb2xzLzxuYW1lPi5qc1xcYCBvciBcXGAucGljby90b29scy88bmFtZT4uanNcXGApOiBFUyBtb2R1bGVzIGRlZmF1bHQtZXhwb3J0aW5nIFxcYHsgbmFtZSwgZGVzY3JpcHRpb24sIHNjaGVtYSwgZXhlY3V0ZSB9XFxgIChvciBhIGZhY3RvcnkgcmVjZWl2aW5nIFxcYHsgY3dkLCByb290IH1cXGApLiBUaGV5IGpvaW4gdGhlIGFnZW50J3MgdG9vbHNldCBhbmQgYXJlIHJlc2Nhbm5lZCBldmVyeSB0dXJuLCBzbyBlZGl0cyBhcHBseSBvbiB0aGUgbmV4dCBtZXNzYWdlLiBBc2sgdGhlIGFnZW50IHRvIGJ1aWxkIG9uZSBmb3IgeW91OiB0aGUgYnVpbHQtaW4gXFxgL25ldy10b29sXFxgIHNraWxsIHRlYWNoZXMgaXQgdGhlIGZvcm1hdC5cblxuSW4gdGhlIE1DUCBwYW5lbDogZW50ZXIgZW5hYmxlcy9kaXNhYmxlcyBhIHNlcnZlciAoZGlzYWJsZWQgaXMgc3RpY2t5IGFjcm9zcyByZXN0YXJ0cyAtIGNvbmZpZyBrZXB0LCBubyBjb25uZWN0aW9uLCBubyB0b29scyBvZmZlcmVkIHRvIHRoZSBtb2RlbCwgcGVyIHByb2plY3QpLCBcXGB0XFxgIGxpc3RzIGl0cyB0b29scywgXFxgclxcYCByZWNvbm5lY3RzLCBcXGBhXFxgIGFkZHMsIFxcYGN0cmwreFxcYCByZW1vdmVzIChwcmVzcyB0d2ljZSkuIFVuZmlsdGVyZWQgbGlzdHMgKGVmZm9ydCwgcmV3aW5kIG9wdGlvbnMsIE1DUCkgYWxzbyBtb3ZlIHdpdGggXFxgalxcYC9cXGBrXFxgIGFuZCBqdW1wIHdpdGggXFxgZ1xcYC9cXGBHXFxgLlxuXG4jIyBDb21wb3NlclxuXG4tIFxcYGN0cmwrdlxcYDogQXR0YWNoIGNsaXBib2FyZCBpbWFnZVxuLSBcXGBjdHJsK29cXGA6IENhcHR1cmUgc2NyZWVuIHJlZ2lvbiAobWFjT1MpXG4tIFxcYGN0cmwrZ1xcYDogUmVjb3JkIChtYWNPUylcbi0gXFxgZW50ZXJcXGA6IFRyYW5zY3JpYmUgcmVjb3JkaW5nXG4tIFxcYGVzY1xcYDogQ2FuY2VsIGRpY3RhdGlvblxuXG4tIFxcYGVudGVyXFxgIHNlbmRzOyBcXGBzaGlmdCtlbnRlclxcYCBvciBcXGBcXFxcPGVudGVyPlxcYCBpbnNlcnRzIGEgbmV3bGluZVxuLSBcXGBAXFxgIG9wZW5zIGEgZnV6enkgZmlsZSBwaWNrZXI7IGVudGVyIGluc2VydHMgdGhlIHNlbGVjdGVkIHBhdGhcbi0gZHJhZyBhbiBpbWFnZSBmaWxlIGludG8gdGhlIHRlcm1pbmFsIHRvIGF0dGFjaCBpdDogaXQgYXBwZWFycyBpbmxpbmUgYXMgXFxgW0ltYWdlICNOXVxcYCwgZXhhY3RseSB3aGVyZSB5b3VyIGN1cnNvciBpcywgc28gaW1hZ2VzIGNhbiBzaXQgYmV0d2VlbiBzZW50ZW5jZXM7IGJhY2tzcGFjZSBhZnRlciBvbmUgcmVtb3ZlcyB0aGUgd2hvbGUgYXR0YWNobWVudFxuLSBcXGB0YWJcXGAgY29tcGxldGVzOiBcXGAvc3VtbTx0YWI+XFxgIGZpbmlzaGVzIHRoZSBjb21tYW5kIG5hbWUgYW5kIGN5Y2xlcyB0aHJvdWdoIG1hdGNoZXMgb24gcmVwZWF0OyBhZnRlciBhbiBhcmd1bWVudCBzcGFjZSBpdCBjb21wbGV0ZXMgdmFsdWVzIChcXGAvbW9kZWwgZmxhPHRhYj5cXGAsIFxcYC9jb2xvciA8dGFiPlxcYCwgXFxgL2VmZm9ydCA8dGFiPlxcYCkgYW5kIGZpbGUgcGF0aHMgZm9yIHNraWxscyBhbmQgY29tbWFuZHMuIEtlZXAgdHlwaW5nIHRvIG5hcnJvdywgdGFiIG9yIGVudGVyIGluc2VydHNcbi0gXFxgdXBcXGAgYW5kIFxcYGRvd25cXGAgb24gYW4gZW1wdHkgY29tcG9zZXIgcmVjYWxsIG1lc3NhZ2VzIHlvdSBhbHJlYWR5IHNlbnRcbi0gXFxgY3RybCtyXFxgIG9wZW5zIHJld2luZCAoc2FtZSBhcyBcXGAvcmV3aW5kXFxgKTsgXFxgL2hpc3RvcnlcXGAgZnV6enktc2VhcmNoZXMgeW91ciBvbGQgcHJvbXB0cyBhbmQgcHV0cyB0aGUgc2VsZWN0ZWQgb25lIGJhY2sgaW4gdGhlIGNvbXBvc2VyXG4tIFxcYGN0cmwrc1xcYCBvcGVucyB0aGUgc2Vzc2lvbiBwaWNrZXIgKHNhbWUgYXMgXFxgL3Jlc3VtZVxcYCk7IFxcYGN0cmwrdFxcYCBvcGVucyB0aGUgbW9kZWwgcGlja2VyXG4tIFxcYGN0cmwrcFxcYCBzd2l0Y2hlcyBwcm9qZWN0czogcGljayBvbmUgYW5kIHBpY28ganVtcHMgdG8gaXRzIG1vc3QgcmVjZW50IHNlc3Npb24sIGNoYW5naW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgdG9vbHMsIGNvbnRleHQsIGFuZCBNQ1Agc2VydmVycyB0byBtYXRjaDsgXFxgY3RybCt4XFxgIHR3aWNlIGRlbGV0ZXMgYSBwcm9qZWN0J3MgcGljbyBoaXN0b3J5IChhbGwgaXRzIHNlc3Npb25zIGFuZCBtZW1vcmllcyk7IFxcYC9uZXdcXGAgc3RhcnRzIGEgZnJlc2ggc2Vzc2lvbiBpbiB0aGUgY3VycmVudCBwcm9qZWN0XG4tIFxcYGN0cmwrYlxcYCBjeWNsZXMgdGhpbmtpbmcgZWZmb3J0IChkZWZhdWx0LCBsb3csIG1lZGl1bSwgaGlnaCwgbWF4KSBvbiBtb2RlbHMgdGhhdCBzdXBwb3J0IGl0OyBcXGAvZWZmb3J0XFxgIG9wZW5zIHRoZSBmdWxsIHBpY2tlclxuLSBpbnNpZGUgYSBzZWFyY2ggcGFuZWwsIFxcYGN0cmwrc1xcYCBjeWNsZXMgdGhlIHNjb3BlIGluc3RlYWQ6IHRoaXMgc2Vzc2lvbiwgdGhpcyBwcm9qZWN0LCBvciBldmVyeXdoZXJlXG4tIFxcYC9yZXdpbmRcXGAgcmVzdG9yZXMgdGhlIGNvbnZlcnNhdGlvbiB0byBhbiBlYXJsaWVyIG1lc3NhZ2U7IGEgcmV3aW5kIGNhbiBiZSB1bmRvbmUgd2l0aCBcXGBjdHJsK3pcXGBcbi0gbWVzc2FnZXMgc2VudCB3aGlsZSB0aGUgYWdlbnQgaXMgcmVzcG9uZGluZyBxdWV1ZSB1cCBhYm92ZSB0aGUgY29tcG9zZXIgYW5kIGFyZSBkZWxpdmVyZWQgYXMgb25lIG1lc3NhZ2Ugd2hlbiB0aGUgdHVybiBmaW5pc2hlczsgXFxgdXBcXGAgcHVsbHMgdGhlbSBiYWNrIGZvciBlZGl0aW5nXG4tIFxcYGVzY1xcYCBpbnRlcnJ1cHRzIGEgc3RyZWFtaW5nIHJlc3BvbnNlLCBvciBjbGVhcnMgdGhlIGNvbXBvc2VyIHdoZW4gaWRsZVxuXG4jIyBNb3ZpbmcgYXJvdW5kXG5cbi0gXFxgdGFiXFxgIHN3aXRjaGVzIGZvY3VzIGJldHdlZW4gdGhlIHRyYW5zY3JpcHQgYW5kIHRoZSBjb21wb3NlclxuLSB3aXRoIHRoZSB0cmFuc2NyaXB0IGZvY3VzZWQsIFxcYHVwXFxgL1xcYGRvd25cXGAvXFxgalxcYC9cXGBrXFxgIHNjcm9sbCBhbmQgXFxgZ1xcYC9cXGBHXFxgIGp1bXAgdG8gdGhlIGVuZHNcbi0gbG9uZyBzZXNzaW9ucyByZW5kZXIgb25seSB0aGUgbmV3ZXN0IDUwIG1lc3NhZ2VzOyBzY3JvbGxpbmcgdG8gdGhlIHZlcnkgdG9wIGxvYWRzIG9sZGVyIG9uZXMgaW4gYmF0Y2hlcyAodGhlIHRvcCBsaW5lIHNob3dzIGhvdyBtYW55IGFyZSBoaWRkZW4pXG4tIHRoZSBtb3VzZSB3aGVlbCBzY3JvbGxzOyBjbGljay1kcmFnIHNlbGVjdHMgdGV4dCBhbmQgY29waWVzIGl0IG9uIHJlbGVhc2Vcbi0gXFxgY3RybCtjXFxgIHR3aWNlIGV4aXRzXG5cbiMjIFNoZWxsc1xuXG5UaGUgYWdlbnQgY2FuIHJ1biBsb25nLWxpdmVkIHByb2Nlc3NlcyAoZGV2IHNlcnZlcnMsIHdhdGNoZXJzKSB3aXRoIFxcYGJhc2ggYmFja2dyb3VuZDogdHJ1ZVxcYCwgdGhlbiByZWFkIHRoZWlyIG91dHB1dCBhbmQgc3RvcCB0aGVtIGl0c2VsZi4gU2hlbGxzIGFwcGVhciBiZWxvdyB0aGUgY29tcG9zZXIgYW5kIHJlbWFpbiB0aGVyZSBhZnRlciBleGl0OiB0YWIgZm9jdXNlcyB0aGUgbGlzdCwgai9rIG1vdmVzLCBlbnRlciBvcGVucyB0aGUgY29tbWFuZCBhbmQgbGl2ZSBvdXRwdXQsIGFuZCBcXGBjdHJsK3hcXGAga2lsbHMgYSBydW5uaW5nIHNoZWxsIG9yIGRpc21pc3NlcyBhIGZpbmlzaGVkIG9uZS4gV2hlbiBhIHNoZWxsIGV4aXRzIG9uIGl0cyBvd24sIHRoZSBhZ2VudCBpcyBub3RpZmllZCBhbmQgcmVzcG9uZHM7IHNoZWxscyBkaWUgd2l0aCBwaWNvLCBhbmQgcXVpdHRpbmcgd2FybnMgeW91IGlmIGFueSBhcmUgc3RpbGwgdXAuXG5cbiMjIFN1YnNjcmlwdGlvbnNcblxuXFxgL2Nvbm5lY3RcXGAgbGlzdHMgc3Vic2NyaXB0aW9uIHByb3ZpZGVycyB5b3UgY2FuIHNpZ24gaW4gd2l0aCBpbnN0ZWFkIG9mIEFQSSBrZXlzLiBPcGVuQUkgKENoYXRHUFQgLyBDb2RleCBwbGFuKSBzaWducyBpbiB0aHJvdWdoIHlvdXIgYnJvd3NlciB2aWEgT0F1dGg7IHRva2VucyBhcmUgc3RvcmVkIGluIFxcYH4vLnBpY28vYXV0aC5qc29uXFxgIGFuZCByZWZyZXNoZWQgYXV0b21hdGljYWxseSwgc28geW91IHNpZ24gaW4gb25jZS4gT25jZSBjb25uZWN0ZWQsIGNvZGV4IG1vZGVscyBhcHBlYXIgaW4gXFxgL21vZGVsXFxgLCBiaWxsZWQgdG8geW91ciBwbGFuLiBcXGBkXFxgIGluIHRoZSBwYW5lbCBkaXNjb25uZWN0cy5cblxuIyMgTWVtb3J5XG5cblRoZSBhZ2VudCBzYXZlcyBkdXJhYmxlIGZhY3RzIHdpdGggdGhlIHJlbWVtYmVyIHRvb2w6IG9uZSBmaWxlIHBlciBtZW1vcnkgdW5kZXIgXFxgfi8ucGljby9tZW1vcnlcXGAgKGdsb2JhbCkgb3IgdGhlIHByb2plY3QncyBkaXJlY3RvcnkgaW4gXFxgfi8ucGljby9wcm9qZWN0c1xcYC4gT25seSBhIG9uZS1saW5lIGluZGV4IGlzIGluIGl0cyBjb250ZXh0OyBpdCBsb2FkcyBhIHNwZWNpZmljIG1lbW9yeSB3aXRoIHRoZSByZWNhbGwgdG9vbCB3aGVuIHJlbGV2YW50LiBcXGAvbWVtb3J5XFxgIGxpc3RzIGV2ZXJ5dGhpbmcgaXQga25vd3Mgd2l0aCBhIGNvbnRlbnQgcHJldmlldzogXFxgY3RybCtzXFxgIGN5Y2xlcyB0aGUgc2NvcGUgZmlsdGVyIChhbGwsIHByb2plY3QsIGdsb2JhbCkgYW5kIFxcYGN0cmwreFxcYCB0d2ljZSBmb3JnZXRzIHRoZSBzZWxlY3RlZCBtZW1vcnkuIFlvdSBjYW4gYWxzbyBhc2sgdGhlIGFnZW50IHRvIHJlbWVtYmVyLCBmb3JnZXQsIG9yIGNsZWFuIHVwIGl0cyBtZW1vcmllcyBpbiBwbGFpbiBsYW5ndWFnZS5cblxuIyMgV2FrZS11cHNcblxuVGhlIGFnZW50IGNhbiBzY2hlZHVsZSBvbmUtdGltZSB3YWtlLXVwcyBmb3IgaXRzZWxmIHdpdGggdGhlIHNjaGVkdWxlX3dha2V1cCB0b29sOiBhZnRlciB0aGUgZGVsYXkgaXQgcmVjZWl2ZXMgaXRzIG93biBub3RlIGFzIGEgc3lzdGVtIG5vdGlmaWNhdGlvbiBhbmQgYWN0cyBvbiBpdC4gUmVjdXJyaW5nIGxvb3BzIGFyZSBqdXN0IHRoZSBhZ2VudCByZXNjaGVkdWxpbmcgYXQgdGhlIGVuZCBvZiBlYWNoIHdha2UtdXAuIFxcYC93YWtldXBzXFxgIGxpc3RzIHBlbmRpbmcgb25lcyB3aXRoIGxpdmUgY291bnRkb3duczsgZW50ZXIgb3IgXFxgY3RybCt4XFxgIGNhbmNlbHMgKHByZXNzIHR3aWNlKS4gQSBcXGBcdTIzRjAgTlxcYCBpbiB0aGUgZm9vdGVyIHNob3dzIGhvdyBtYW55IGFyZSBwZW5kaW5nLiBXYWtlLXVwcyBsaXZlIGluIG1lbW9yeSBhbmQgYXJlIGxvc3Qgd2hlbiBwaWNvIGV4aXRzLlxuXG4jIyBBcHBlYXJhbmNlXG5cbnBpY28gcGlja3MgYSBsaWdodCBvciBkYXJrIHBhbGV0dGUgYXQgc3RhcnR1cCBieSBhc2tpbmcgdGhlIHRlcm1pbmFsIGZvciBpdHMgYmFja2dyb3VuZCBjb2xvciAoT1NDIDExKSwgc28gaXQgbWF0Y2hlcyB3aGF0ZXZlciB0aGVtZSB5b3VyIHRlcm1pbmFsIHVzZXMuIFxcYC90aGVtZVxcYCBvcGVucyBhIHBpY2tlciB0aGF0IHByZXZpZXdzIGVhY2ggdGhlbWUgYXMgeW91IG1vdmUgYW5kIHBlcnNpc3RzIHlvdXIgY2hvaWNlIGluIFxcYH4vLnBpY28vY29uZmlnLmpzb25cXGA7IFxcYC90aGVtZSBsaWdodFxcYCwgXFxgL3RoZW1lIGRhcmtcXGAsIG9yIFxcYC90aGVtZSBhdXRvXFxgIGFwcGxpZXMgb25lIGRpcmVjdGx5LiBcXGAvY29sb3JcXGAgdGludHMgYSBzaW5nbGUgc2Vzc2lvbidzIGFjY2VudCBhbmQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHBhbGV0dGUuXG5cbiMjIENvbnRleHRcblxucGljbyByZWFkcyBBR0VOVFMubWQgZmlsZXMgYXV0b21hdGljYWxseTogYSBnbG9iYWwgb25lIGZyb20gfi8ucGljbywgdGhlbiBldmVyeSBhbmNlc3RvciBvZiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IHVwIHRvIHRoZSBnaXQgcm9vdC4gRGVlcGVyIGZpbGVzIHdpbi4gQUdFTlRTLm1kIGZpbGVzIGluIHN1YmRpcmVjdG9yaWVzIGxvYWQgbGF6aWx5IHRoZSBmaXJzdCB0aW1lIGEgdG9vbCB0b3VjaGVzIHRoYXQgc3VidHJlZS4gSW4gYW55IHByb2plY3QgZGlyZWN0b3J5IHdpdGhvdXQgYW4gQUdFTlRTLm1kLCBhIENMQVVERS5tZCBpcyBob25vcmVkIGFzIGEgZmFsbGJhY2sgc28gZXhpc3RpbmcgcmVwb3Mgd29yayB1bmNoYW5nZWQ7IEFHRU5UUy5tZCBhbHdheXMgd2lucyB3aGVuIGJvdGggZXhpc3QsIGFuZCB0aGUgZmFsbGJhY2sgbmV2ZXIgYXBwbGllcyB0byB0aGUgZ2xvYmFsIGZpbGUuXG5cblNlc3Npb25zIGFyZSBzdG9yZWQgdW5kZXIgfi8ucGljbyBhcyBqc29ubCBldmVudCBsb2dzOyBcXGAvcmVzdW1lXFxgIGZvbGRzIG9uZSBiYWNrIGludG8gZXhhY3RseSB0aGlzIHZpZXcuXG5cblxcYC9jb250ZXh0XFxgIGJyZWFrcyBkb3duIHdoYXQgdGhlIG5leHQgcmVxdWVzdCB3aWxsIGNvbnRhaW4gLSBzeXN0ZW0gcHJvbXB0LCB0b29sIHNjaGVtYXMsIHByb2plY3QgaW5zdHJ1Y3Rpb25zLCBtZW1vcnkgaW5kZXgsIGNvbXBhY3Rpb24gc3VtbWFyeSwgYW5kIGNvbnZlcnNhdGlvbiAtIHdpdGggYW4gZXN0aW1hdGVkIHNpemUgZm9yIGVhY2ggcGllY2UgbmV4dCB0byB0aGUgcHJvdmlkZXItbWVhc3VyZWQgdG90YWwuXG5cblRoZSBmb290ZXIncyBcXGBjdHggJVxcYCBzaG93cyBob3cgZnVsbCB0aGUgbW9kZWwncyBjb250ZXh0IGlzLiBBdCA4NSUgcGljbyBhdXRvLWNvbXBhY3RzOiB0aGUgb2xkZXIgY29udmVyc2F0aW9uIGlzIHN1bW1hcml6ZWQgaW4gYSBzdHJ1Y3R1cmVkIGZvcm0sIHRoZSBtb3N0IHJlY2VudCB0dXJucyBhcmUga2VwdCB2ZXJiYXRpbSwgYW5kIHRoZSBtb2RlbCBpcyB0b2xkIHdoZXJlIHRoZSBmdWxsIHNlc3Npb24gZmlsZSBsaXZlcyBzbyBpdCBjYW4gcmVhZCBleGFjdCBkZXRhaWxzIGJhY2sgb24gZGVtYW5kLiBOb3RoaW5nIHZpc2libGUgY2hhbmdlcyBpbiB0aGUgdHJhbnNjcmlwdCwgYW5kIHJld2luZCBzdGlsbCB3b3JrcyBhY3Jvc3MgaXQuIFxcYC9jb21wYWN0XFxgIHJ1bnMgaXQgbWFudWFsbHkgYW5kIHRha2VzIG9wdGlvbmFsIGZvY3VzIGluc3RydWN0aW9ucyAoXFxgL2NvbXBhY3QgZm9jdXMgb24gdGhlIEFQSSBjaGFuZ2VzXFxgKS4gU2V0IFxcYFwiYXV0b0NvbXBhY3RcIjogZmFsc2VcXGAgaW4gXFxgfi8ucGljby9jb25maWcuanNvblxcYCB0byBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgdHJpZ2dlci5cblxuLS0tXG5cbiplc2MgdGFrZXMgeW91IGJhY2sgdG8gdGhlIGNvbnZlcnNhdGlvbipgXG5cbmV4cG9ydCBmdW5jdGlvbiBIZWxwKHsgY29tbWFuZHMsIG9uQ2xvc2UgfSkge1xuICB1c2VJbnB1dCgoZXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnZXNjYXBlJykge1xuICAgICAgb25DbG9zZSgpXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxib3ggc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzEwMCUnLCBwYWRkaW5nWDogMiwgcGFkZGluZ1k6IDEgfX0+XG4gICAgICA8Ym94IHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnIH19PlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogYWNjZW50KCksIGJvbGQ6IHRydWUgfX0+cGljbyAgaGVscDwvdGV4dD5cbiAgICAgICAgPGJveCBzdHlsZT17eyBmbGV4R3JvdzogMSB9fSAvPlxuICAgICAgICA8dGV4dCBzdHlsZT17eyBjb2xvcjogTVVURUQgfX0+XHUyMTkxXHUyMTkzIHNjcm9sbCAgZXNjIGJhY2s8L3RleHQ+XG4gICAgICA8L2JveD5cbiAgICAgIDx0ZXh0PiA8L3RleHQ+XG4gICAgICA8U2Nyb2xsQm94IHN0eWxlPXt7IGZsZXhHcm93OiAxIH19IGZvY3VzZWQgc2Nyb2xsYmFyPlxuICAgICAgICA8TWFya2Rvd24gdGV4dD17SEVMUF9URVhUKGNvbW1hbmRzKX0gY29kZUJnPXtudWxsfSAvPlxuICAgICAgPC9TY3JvbGxCb3g+XG4gICAgPC9ib3g+XG4gIClcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7O0FBQUEsU0FBUyxjQUFjLFdBQVcsZUFBZTtBQUNqRCxTQUFTLGFBQWEsZUFBZSxrQkFBa0I7QUFDdkQsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyw0QkFBNEI7QUFDckMsU0FBUyxpQkFBaUIseUJBQXlCO0FBQ25ELFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsa0JBQWtCO0FBSTNCLFNBQVMsYUFBYSxhQUFhLE9BQU87QUFDeEMsUUFBTSxRQUFRLFlBQVksUUFBUSxTQUFTLE1BQU0sS0FBSyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbkUsU0FBTyxNQUFNLFdBQVcsT0FBTyxPQUFPLFNBQVMsT0FBTyxPQUFPLFdBQVc7QUFDMUU7QUFFQSxlQUFlLFlBQVksRUFBRSxXQUFBQSxZQUFXLE1BQU0sR0FBRztBQUMvQyxRQUFNLE1BQU0sQ0FBQyxhQUFhQSxXQUFVLFNBQVMsUUFBUTtBQUNyRCxRQUFNLG1CQUFtQixJQUFJLE9BQU8sSUFBSSxNQUFNLGtCQUFrQixFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUk7QUFDdEYsUUFBTSxDQUFDLGFBQWEsT0FBTyxVQUFVLElBQUksTUFBTSxRQUFRLElBQUk7QUFBQSxJQUN6RCxZQUFZLEVBQUUsTUFBTSxDQUFDO0FBQUEsSUFDckIsZ0JBQWdCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQztBQUFBLElBQzNDLElBQUksWUFBWSxJQUFJLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFBQSxFQUN6RCxDQUFDO0FBQ0QsU0FBTztBQUFBLElBQ0wsR0FBRyxjQUFjLGFBQWEsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFdBQVc7QUFBQSxNQUMvRCxHQUFHO0FBQUEsTUFDSCxXQUFXLElBQUksTUFBTSxRQUFRO0FBQUEsTUFDN0IsU0FBUyxRQUFRLE1BQU0sUUFBUTtBQUFBLElBQ2pDLEVBQUU7QUFBQSxJQUNGLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVztBQUFBLE1BQ3ZCLEdBQUc7QUFBQSxNQUNILFNBQVMsYUFBYSxhQUFhLEtBQUs7QUFBQSxNQUN4QyxXQUFXLElBQUksT0FBTztBQUFBLE1BQ3RCLFNBQVM7QUFBQSxJQUNYLEVBQUU7QUFBQSxJQUNGLEdBQUcsV0FBVyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsT0FBTyxXQUFXLE1BQU0sU0FBUyxRQUFRLFlBQVksRUFBRSxFQUFFO0FBQUEsRUFDOUY7QUFDRjtBQUVBLGVBQXNCLG1CQUFtQjtBQUN2QyxRQUFNLFVBQVUsTUFBTSxnQkFBZ0I7QUFDdEMsUUFBTUEsYUFBWSxDQUFDLEdBQUcsVUFBVSxhQUFhLENBQUMsR0FBRyxHQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFFO0FBQzlFLFFBQU0sbUJBQW1CLFVBQVUsTUFBTSxrQkFBa0IsRUFBRSxNQUFNLE1BQU0sSUFBSSxJQUFJO0FBQ2pGLFFBQU0sYUFBYSxDQUFDLEVBQUUsUUFBUSxNQUFNLElBQUksQ0FBQyxNQUFNLFlBQVksRUFBRSxXQUFBQSxZQUFXLE1BQU0sQ0FBQztBQUMvRSxTQUFPLEVBQUUsV0FBQUEsWUFBVyxRQUFRLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixXQUFXO0FBQy9FO0FBRU8sU0FBUyxhQUFhLFFBQVFBLFlBQVcsTUFBTTtBQUNwRCxNQUFJLENBQUMsS0FBTSxRQUFPO0FBQ2xCLFFBQU0sUUFBUSxPQUFPLEtBQUssQ0FBQyxVQUFVLE1BQU0sU0FBUyxJQUFJO0FBQ3hELE1BQUksTUFBTyxRQUFPO0FBQ2xCLE1BQUksS0FBSyxTQUFTLEdBQUcsRUFBRyxRQUFPLFdBQVcsTUFBTUEsVUFBUztBQUN6RCxRQUFNLFlBQVksT0FBTyxPQUFPLENBQUMsVUFBVSxNQUFNLGNBQWMsS0FBSztBQUNwRSxTQUFPLFVBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLE1BQU0sTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQ3BELE9BQU8sQ0FBQyxDQUFDLEtBQUssTUFBTSxTQUFTLENBQUMsRUFDOUIsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQ2xDO0FBQ1A7QUFFTyxTQUFTLFlBQVksRUFBRSxRQUFRLFdBQUFBLFlBQVcsV0FBVyxXQUFXLEdBQUc7QUFDeEUsU0FBTyxhQUFhLFFBQVFBLFlBQVcsU0FBUyxLQUMxQyxjQUFjLE9BQU8sS0FBSyxDQUFDLFVBQVUsTUFBTSxTQUFTLGNBQWMsTUFBTSxTQUFTLEtBQ2xGLGFBQWEsTUFBTTtBQUMxQjtBQWhFQSxJQVFNO0FBUk47QUFBQTtBQVFBLElBQU0sb0JBQW9CLENBQUMsVUFBVSxhQUFhLFVBQVUsS0FBSztBQUFBO0FBQUE7OztBQ1JqRTtBQUFBO0FBQUE7QUFBQTtBQUFBLFNBQVMsUUFBQUMsYUFBWTtBQUNyQixTQUFTLFdBQVcsaUJBQWlCO0FBQ3JDLFNBQVMsa0JBQWtCO0FBQzNCLFNBQVMsd0JBQXdCO0FBQ2pDLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsZUFBZSxhQUFhLGFBQWEsMkJBQTJCO0FBQzdFLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMsYUFBQUMsa0JBQWlCO0FBQzFCLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMsZUFBZTtBQUN4QixTQUFTLHlCQUF5QjtBQUNsQyxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLDJCQUEyQjtBQUdwQyxlQUFlLFlBQVk7QUFDekIsTUFBSSxRQUFRLE1BQU0sTUFBTyxRQUFPO0FBQ2hDLE1BQUksT0FBTztBQUNYLG1CQUFpQixTQUFTLFFBQVEsT0FBTztBQUN2QyxZQUFRO0FBQ1IsUUFBSSxLQUFLLFNBQVMsSUFBUTtBQUFBLEVBQzVCO0FBQ0EsU0FBTyxLQUFLLE1BQU0sR0FBRyxHQUFNO0FBQzdCO0FBRUEsZUFBc0IsWUFBWSxNQUFNO0FBQ3RDLFFBQU0sWUFBWSxLQUFLLElBQUk7QUFDM0IsUUFBTSxNQUFNLEtBQUssUUFBUSxNQUFNO0FBQUEsRUFBQyxJQUFJLENBQUMsU0FBUyxRQUFRLE9BQU8sTUFBTSxPQUFPLElBQUk7QUFFOUUsc0JBQW9CLENBQUMsS0FBSyxTQUFTLFFBQVEsT0FBTyxNQUFNLHlCQUF5QixJQUFJLEtBQUssSUFBSSxPQUFPO0FBQUEsQ0FBSSxDQUFDO0FBRTFHLFFBQU0sRUFBRSxXQUFBQyxZQUFXLFFBQVEsa0JBQWtCLFdBQVcsSUFBSSxNQUFNLGlCQUFpQjtBQUNuRixNQUFJQSxXQUFVLFdBQVcsR0FBRztBQUMxQixZQUFRLE9BQU8sTUFBTSx5RUFBeUU7QUFDOUYsV0FBTztBQUFBLEVBQ1Q7QUFDQSxRQUFNQyxVQUFTLE1BQU0sV0FBVztBQUVoQyxRQUFNLFFBQVEsWUFBWSxFQUFFLFFBQVEsV0FBQUQsWUFBVyxXQUFXLEtBQUssT0FBTyxZQUFZQyxRQUFPLGFBQWEsQ0FBQztBQUN2RyxNQUFJLENBQUMsU0FBUyxNQUFNLGNBQWMsT0FBTztBQUN2QyxZQUFRLE9BQU8sTUFBTSx3QkFBd0IsS0FBSyxRQUFRLGNBQWMsS0FBSyxLQUFLLE1BQU0sRUFBRTtBQUFBLENBQUk7QUFDOUYsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLEtBQUssVUFBVSxVQUFVLENBQUMsTUFBTSxPQUFPO0FBQ3pDLFlBQVEsT0FBTyxNQUFNLFNBQVMsTUFBTSxJQUFJO0FBQUEsQ0FBbUM7QUFDM0UsV0FBTztBQUFBLEVBQ1Q7QUFDQSxRQUFNLFNBQVMsS0FBSyxXQUFXLE1BQU0sU0FBUyxTQUFTO0FBRXZELFFBQU1DLFFBQU8sTUFBTSxpQkFBaUIsUUFBUSxJQUFJLENBQUM7QUFDakQsUUFBTSxRQUFRLEtBQUssQ0FBQ0EsTUFBSyxJQUFJLFdBQVcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLFdBQVcsR0FBRyxHQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLFFBQU0sU0FBUyxtQkFBbUI7QUFFbEMsTUFBSTtBQUNKLE1BQUksU0FBUyxDQUFDO0FBQ2QsTUFBSSxLQUFLLFFBQVE7QUFDZixVQUFNLE9BQU8sS0FBSyxPQUFPLFNBQVMsR0FBRyxJQUFJLEtBQUssU0FBU0osTUFBSyxZQUFZSSxNQUFLLElBQUksR0FBRyxHQUFHLEtBQUssTUFBTSxRQUFRO0FBQzFHLFVBQU0sU0FBUyxNQUFNLFlBQVksSUFBSTtBQUNyQyxjQUFVLFlBQVksRUFBRSxNQUFNLFFBQVEsT0FBTyxPQUFPLENBQUM7QUFDckQsYUFBUyxPQUFPO0FBQUEsRUFDbEIsT0FBTztBQUNMLGNBQVUsY0FBYyxFQUFFLEtBQUtBLE1BQUssS0FBSyxNQUFNQSxNQUFLLEtBQUssQ0FBQztBQUFBLEVBQzVEO0FBRUEsUUFBTSxVQUFVLENBQUMsVUFBVTtBQUN6QixXQUFPLEtBQUssS0FBSztBQUNqQixZQUFRLE9BQU8sS0FBSztBQUNwQixRQUFJLEtBQUssV0FBWSxTQUFRLE9BQU8sTUFBTSxLQUFLLFVBQVUsS0FBSyxJQUFJLElBQUk7QUFBQSxFQUN4RTtBQUVBLFFBQU0sZ0JBQWdCLFlBQVksTUFBTSxFQUFFO0FBQzFDLFFBQU0sUUFBUSxNQUFNLFFBQVMsS0FBSyxVQUFVLEtBQUssU0FBUyxpQkFBaUIsYUFBYUQsUUFBTyxnQkFBZ0IsTUFBTSxJQUFJLE1BQU0sYUFBYztBQUM3SSxVQUFRRixXQUFVLFNBQVMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBRXpDLFFBQU0sWUFBWSxNQUFNLFVBQVU7QUFDbEMsUUFBTSxhQUFhLFlBQVksR0FBRyxLQUFLLE1BQU07QUFBQTtBQUFBO0FBQUEsRUFBc0IsU0FBUyxLQUFLLEtBQUs7QUFDdEYsUUFBTSxFQUFFLFFBQVEsSUFBSSxvQkFBb0IsWUFBWSxvQkFBSSxJQUFJLENBQUM7QUFDN0QsVUFBUUEsV0FBVSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBRXBFLFFBQU0sVUFBVSxZQUFZLE1BQU07QUFDbEMsUUFBTSxlQUFlLElBQUksSUFBSUcsTUFBSyxRQUFRLE1BQU07QUFDaEQsUUFBTSxFQUFFLE9BQU8sU0FBUyxJQUFJLGNBQWM7QUFBQSxJQUN4QyxLQUFLQSxNQUFLO0FBQUEsSUFDVixTQUFTQSxNQUFLO0FBQUEsSUFDZCxRQUFRQSxNQUFLO0FBQUEsSUFDYjtBQUFBLElBQ0EsUUFBUUEsTUFBSztBQUFBLElBQ2IsVUFBVUEsTUFBSyxJQUFJLE1BQU07QUFBQSxJQUN6QixXQUFXLENBQUM7QUFBQSxJQUNaLGNBQWMsS0FBSyxnQkFBZ0I7QUFBQSxFQUNyQyxDQUFDO0FBRUQsTUFBSSxPQUFPO0FBQ1gsTUFBSSxNQUFNLGFBQWEsU0FBUztBQUM5QixXQUFPO0FBQ1AsUUFBSSxDQUFDLE1BQU07QUFDVCxjQUFRLE9BQU8sTUFBTSxrRUFBa0U7QUFDdkYsWUFBTSxRQUFRLE1BQU07QUFDcEIsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsTUFBSSxTQUFTLE1BQU0sSUFBSSxHQUFHLE1BQU0sU0FBUyxVQUFVLFNBQVMsV0FBVyxFQUFFLEdBQUcsU0FBUyxLQUFLLE1BQU0sS0FBSyxFQUFFLGFBQWEsUUFBUSxFQUFFLEVBQUU7QUFDaEksTUFBSSxXQUFXO0FBQ2YsUUFBTSxTQUFTLE1BQU0sUUFBUTtBQUFBLElBQzNCLFNBQVMsUUFBUTtBQUFBLElBQ2pCO0FBQUEsSUFDQTtBQUFBLElBQ0EsV0FBVyxNQUFNO0FBQUEsSUFDakI7QUFBQSxJQUNBLEdBQUksTUFBTSxhQUFhLFdBQVcsRUFBRSxNQUFNO0FBQUEsSUFDMUM7QUFBQSxJQUNBLFFBQVEsa0JBQWtCO0FBQUEsTUFDeEIsS0FBS0EsTUFBSztBQUFBLE1BQ1YsY0FBY0EsTUFBSyxlQUFlO0FBQUEsTUFDbEMsUUFBUUEsTUFBSyxPQUFPLEtBQUs7QUFBQSxNQUN6QixpQkFBaUIsWUFBWSxNQUFNQSxNQUFLLE9BQU8sS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDLENBQUMsR0FBR0EsTUFBSyxJQUFJO0FBQUEsSUFDbEYsQ0FBQztBQUFBLElBQ0QsVUFBVSxDQUFDLFVBQVU7QUFDbkIsVUFBSSxNQUFNLFNBQVMsV0FBWSxhQUFZLE1BQU07QUFDakQsVUFBSSxNQUFNLFNBQVMsaUJBQWlCO0FBQ2xDLGNBQU0sUUFBUSxTQUFTLFFBQVEsR0FBRyxFQUFFO0FBQ3BDLFlBQUksWUFBTyxPQUFPLFFBQVEsTUFBTSxLQUFLLFNBQVMsSUFBSSxLQUFLLE9BQU8sU0FBUyxFQUFFLEVBQUU7QUFBQSxNQUM3RTtBQUNBLFVBQUksTUFBTSxTQUFTLGFBQWMsS0FBSSxZQUFPLE1BQU0sS0FBSyxTQUFTLElBQUksS0FBSyxNQUFNLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFO0FBQUEsSUFDdEc7QUFBQSxFQUNGLENBQUM7QUFFRCxNQUFJLFNBQVUsU0FBUUgsV0FBVSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQztBQUMvRCxhQUFXLFdBQVcsT0FBTyxTQUFVLFNBQVFBLFdBQVUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hGLGFBQVcsU0FBUyxTQUFTLFFBQVMsU0FBUUEsV0FBVSxhQUFhLEtBQUssQ0FBQztBQUMzRSxhQUFXLFFBQVFHLE1BQUssUUFBUSxRQUFRO0FBQ3RDLFFBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFHLFNBQVFILFdBQVUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFBQSxFQUMxRTtBQUNBLE1BQUksT0FBTyxNQUFPLFNBQVFBLFdBQVUsU0FBUyxFQUFFLE9BQU8sTUFBTSxNQUFNLE9BQU8sT0FBTyxPQUFPLFlBQVksT0FBTyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzdILE1BQUksT0FBTyxZQUFhLFNBQVFBLFdBQVUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUUxRCxRQUFNLFVBQVUsT0FBTyxRQUFRO0FBQy9CLE1BQUksVUFBVSxFQUFHLEtBQUksYUFBYSxPQUFPLG9CQUFvQixZQUFZLElBQUksS0FBSyxHQUFHLEVBQUU7QUFDdkYsU0FBTyxRQUFRO0FBQ2YsUUFBTUcsTUFBSyxJQUFJLFNBQVMsRUFBRSxNQUFNLE1BQU07QUFBQSxFQUFDLENBQUM7QUFHeEMsUUFBTSxRQUFRLE1BQU07QUFFcEIsUUFBTSxPQUFPLE9BQU8sU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsZUFBZSxPQUFPLEVBQUUsWUFBWSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLFdBQVc7QUFDcEksUUFBTSxVQUFVO0FBQUEsSUFDZDtBQUFBLElBQ0EsU0FBUyxRQUFRO0FBQUEsSUFDakIsYUFBYSxRQUFRO0FBQUEsSUFDckIsT0FBTyxNQUFNO0FBQUEsSUFDYixPQUFPLE9BQU87QUFBQSxJQUNkLE1BQU0sVUFBVSxVQUFVLFFBQVEsTUFBTSxJQUFJLEdBQUcsT0FBTyxLQUFLO0FBQUEsSUFDM0QsV0FBVyxTQUFTLFFBQVE7QUFBQSxJQUM1QixhQUFhLE9BQU87QUFBQSxJQUNwQixZQUFZLEtBQUssSUFBSSxJQUFJO0FBQUEsRUFDM0I7QUFFQSxNQUFJLEtBQUssS0FBTSxTQUFRLE9BQU8sTUFBTSxLQUFLLFVBQVUsT0FBTyxJQUFJLElBQUk7QUFBQSxXQUN6RCxLQUFLLFdBQVksU0FBUSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUUsTUFBTSxVQUFVLEdBQUcsU0FBUyxNQUFNLFFBQVcsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksSUFBSTtBQUFBLE1BQ2hJLFNBQVEsT0FBTyxNQUFNLE9BQU8sSUFBSTtBQUVyQyxTQUFPLE9BQU8sY0FBYyxJQUFJO0FBQ2xDO0FBcEtBO0FBQUE7QUFjQTtBQUFBO0FBQUE7OztBQ2RBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLFdBQUFDLGdCQUFlO0FBQ3hCLFNBQVMsY0FBQUMsbUJBQWtCO0FBWXBCLFNBQVMsb0JBQW9CLE1BQU07QUFDeEMsUUFBTSxVQUFVLEtBQUssS0FBSztBQUMxQixNQUFJLENBQUMsUUFBUyxPQUFNLElBQUksTUFBTSxxQ0FBcUM7QUFDbkUsTUFBSSxRQUFRLFNBQVMsSUFBSSxLQUFLLFNBQVMsS0FBSyxPQUFPLEVBQUcsT0FBTSxJQUFJLE1BQU0sdUNBQXVDO0FBQzdHLE1BQUksUUFBUSxTQUFTLEtBQUssRUFBRyxPQUFNLElBQUksTUFBTSxrREFBa0Q7QUFDL0YsU0FBTztBQUNUO0FBRUEsZUFBc0IsU0FBUyxNQUFNLGVBQWUsQ0FBQyxHQUFHO0FBQ3RELFFBQU0sU0FBUyxhQUFhLFVBQVUsUUFBUTtBQUM5QyxRQUFNLFNBQVMsYUFBYSxVQUFVLFFBQVE7QUFDOUMsTUFBSTtBQUNGLFVBQU1DLFVBQVMsT0FBTyxhQUFhLGNBQWNELGFBQVk7QUFDN0QsVUFBTSxVQUFVLE9BQU8sYUFBYSxvQkFBb0Isa0JBQWtCO0FBQzFFLFFBQUksUUFBUSxVQUFVLFdBQVcsRUFBRyxPQUFNLElBQUksTUFBTSxpRUFBaUU7QUFFckgsVUFBTSxrQkFBa0JDLFFBQU8sUUFBUTtBQUN2QyxVQUFNLFFBQVEsWUFBWTtBQUFBLE1BQ3hCLFFBQVEsUUFBUTtBQUFBLE1BQ2hCLFdBQVcsUUFBUTtBQUFBLE1BQ25CLFdBQVcsS0FBSztBQUFBLE1BQ2hCLFlBQVksbUJBQW1CQSxRQUFPO0FBQUEsSUFDeEMsQ0FBQztBQUNELFVBQU0sZ0JBQWdCLEtBQUssU0FBUztBQUNwQyxRQUFJLENBQUMsU0FBUyxNQUFNLGNBQWMsT0FBTztBQUN2QyxZQUFNLElBQUksTUFBTSxrQkFBa0IsZ0JBQWdCLGNBQWMsYUFBYSxNQUFNLEVBQUUsRUFBRTtBQUFBLElBQ3pGO0FBRUEsUUFBSSxLQUFLLFVBQVUsVUFBVSxDQUFDLE1BQU0sTUFBTyxPQUFNLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxpQ0FBaUM7QUFFekcsVUFBTSxPQUFPLE1BQU0sYUFBYSxVQUFVLFFBQVEsbUJBQW1CO0FBQ3JFLFFBQUksTUFBTSxhQUFhLFdBQVcsQ0FBQyxLQUFNLE9BQU0sSUFBSSxNQUFNLDBEQUEwRDtBQUVuSCxVQUFNLFNBQVMsT0FBTyxhQUFhLFdBQVdGLFVBQVM7QUFBQSxNQUNyRCxTQUFTLENBQUMsRUFBRSxNQUFNLFFBQVEsU0FBUyxLQUFLLE9BQU8sQ0FBQztBQUFBLE1BQ2hELE9BQU8sQ0FBQztBQUFBLE1BQ1IsVUFBVTtBQUFBLE1BQ1YsV0FBVyxNQUFNO0FBQUEsTUFDakIsUUFBUSxLQUFLLFdBQVcsTUFBTSxTQUFTLFFBQVE7QUFBQSxNQUMvQyxHQUFJLE1BQU0sYUFBYSxXQUFXLEVBQUUsT0FBTyxNQUFNLFFBQVMsS0FBSyxTQUFTLGFBQWMsV0FBVztBQUFBLE1BQ2pHO0FBQUEsTUFDQSxRQUFRLE9BQU87QUFBQSxRQUNiLFVBQVUsUUFBUSxhQUFhLFdBQVcsVUFBVSxRQUFRO0FBQUEsUUFDNUQsT0FBTyxTQUFTLFFBQVEsSUFBSSxTQUFTLEtBQUs7QUFBQSxRQUMxQyxLQUFLLFFBQVEsSUFBSTtBQUFBLE1BQ25CLENBQUM7QUFBQSxJQUNILENBQUM7QUFDRCxRQUFJLE9BQU8sTUFBTyxPQUFNLElBQUksTUFBTSxPQUFPLEtBQUs7QUFDOUMsUUFBSSxPQUFPLFlBQWEsT0FBTSxJQUFJLE1BQU0sb0NBQW9DO0FBQzVFLFVBQU0sT0FBTyxPQUFPLFNBQ2pCLE9BQU8sQ0FBQyxZQUFZLFFBQVEsU0FBUyxlQUFlLE9BQU8sUUFBUSxZQUFZLFFBQVEsRUFDdkYsR0FBRyxFQUFFLEdBQUcsV0FBVztBQUN0QixXQUFPLE1BQU0sb0JBQW9CLElBQUksSUFBSSxJQUFJO0FBQzdDLFdBQU87QUFBQSxFQUNULFNBQVMsT0FBTztBQUNkLFdBQU8sTUFBTSxTQUFTLE1BQU0sT0FBTztBQUFBLENBQUk7QUFDdkMsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQXhFQSxJQUtNO0FBTE47QUFBQTtBQUdBO0FBRUEsSUFBTSxTQUFTLENBQUMsRUFBRSxVQUFVLE9BQU8sSUFBSSxNQUFNO0FBQUE7QUFBQTtBQUFBLHNCQUd2QixRQUFRO0FBQUEsV0FDbkIsS0FBSztBQUFBLHVCQUNPLEdBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDVjFCLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsaUJBQUFHLHNCQUFxQjtBQUM5QixTQUFTLG9CQUFvQjtBQUM3QixTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLGFBQWE7OztBQ0pmLElBQU0sUUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF5QmQsU0FBUyxVQUFVLE1BQU07QUFDOUIsUUFBTSxPQUFPLEVBQUUsTUFBTSxjQUFjO0FBQ25DLFFBQU0sWUFBWSxDQUFDLE1BQU0sTUFBTTtBQUM3QixRQUFJLElBQUksS0FBSyxLQUFLLE9BQVEsT0FBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLG1CQUFtQjtBQUNwRSxXQUFPLEtBQUssSUFBSSxDQUFDO0FBQUEsRUFDbkI7QUFFQSxXQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ3BDLFVBQU0sTUFBTSxLQUFLLENBQUM7QUFDbEIsUUFBSSxRQUFRLFFBQVEsUUFBUSxXQUFXO0FBQ3JDLFVBQUksS0FBSyxTQUFTLGNBQWUsT0FBTSxJQUFJLE1BQU0sR0FBRyxHQUFHLCtDQUErQztBQUN0RyxXQUFLLE9BQU87QUFDWixXQUFLLFNBQVMsVUFBVSxLQUFLLENBQUM7QUFDOUI7QUFBQSxJQUNGLFdBQVcsUUFBUSxRQUFRLFFBQVEsV0FBVztBQUM1QyxVQUFJLEtBQUssU0FBUyxjQUFlLE9BQU0sSUFBSSxNQUFNLEdBQUcsR0FBRywrQ0FBK0M7QUFDdEcsV0FBSyxPQUFPO0FBQ1osV0FBSyxTQUFTLFVBQVUsS0FBSyxDQUFDO0FBQzlCO0FBQUEsSUFDRixXQUFXLFFBQVEsU0FBVSxNQUFLLE9BQU87QUFBQSxhQUNoQyxRQUFRLGdCQUFpQixNQUFLLGFBQWE7QUFBQSxhQUMzQyxRQUFRLFFBQVEsUUFBUSxXQUFXO0FBQzFDLFdBQUssUUFBUSxVQUFVLEtBQUssQ0FBQztBQUM3QjtBQUFBLElBQ0YsV0FBVyxRQUFRLFlBQVk7QUFDN0IsWUFBTSxRQUFRLFVBQVUsS0FBSyxDQUFDO0FBQzlCLFVBQUksQ0FBQyxDQUFDLFFBQVEsT0FBTyxVQUFVLFFBQVEsS0FBSyxFQUFFLFNBQVMsS0FBSyxHQUFHO0FBQzdELGNBQU0sSUFBSSxNQUFNLG1CQUFtQixLQUFLLGlDQUFpQztBQUFBLE1BQzNFO0FBQ0EsV0FBSyxTQUFTO0FBQ2Q7QUFBQSxJQUNGLFdBQVcsUUFBUSxXQUFXO0FBQzVCLFlBQU0sUUFBUSxVQUFVLEtBQUssQ0FBQztBQUM5QixVQUFJLENBQUMsQ0FBQyxZQUFZLE1BQU0sRUFBRSxTQUFTLEtBQUssR0FBRztBQUN6QyxjQUFNLElBQUksTUFBTSxrQkFBa0IsS0FBSyxzQkFBc0I7QUFBQSxNQUMvRDtBQUNBLFdBQUssUUFBUTtBQUNiO0FBQUEsSUFDRixXQUFXLFFBQVEsWUFBWTtBQUM3QixXQUFLLFNBQVMsVUFBVSxLQUFLLENBQUM7QUFDOUI7QUFBQSxJQUNGLFdBQVcsUUFBUSxvQkFBb0I7QUFDckMsWUFBTSxRQUFRLFVBQVUsS0FBSyxDQUFDO0FBQzlCLFVBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFHLE9BQU0sSUFBSSxNQUFNLDhDQUE4QztBQUN4RixXQUFLLGVBQWUsT0FBTyxLQUFLO0FBQ2hDLFVBQUksQ0FBQyxPQUFPLGNBQWMsS0FBSyxZQUFZLEtBQUssS0FBSyxlQUFlLEdBQUc7QUFDckUsY0FBTSxJQUFJLE1BQU0sOENBQThDO0FBQUEsTUFDaEU7QUFDQTtBQUFBLElBQ0YsV0FBVyxRQUFRLFlBQWEsTUFBSyxPQUFPO0FBQUEsYUFDbkMsUUFBUSxZQUFZLFFBQVEsV0FBWSxNQUFLLE9BQU87QUFBQSxhQUNwRCxRQUFRLFFBQVEsUUFBUSxVQUFXLE1BQUssUUFBUTtBQUFBLGFBQ2hELFFBQVEsUUFBUSxRQUFRLFNBQVUsTUFBSyxPQUFPO0FBQUEsYUFDOUMsUUFBUSxRQUFRLFFBQVEsWUFBYSxNQUFLLE9BQU87QUFBQSxRQUNyRCxPQUFNLElBQUksTUFBTSxxQkFBcUIsR0FBRyxHQUFHO0FBQUEsRUFDbEQ7QUFFQSxNQUFJLEtBQUssU0FBUyxjQUFjLENBQUMsS0FBSyxRQUFRLEtBQUssRUFBRyxPQUFNLElBQUksTUFBTSxnQ0FBZ0M7QUFDdEcsTUFBSSxLQUFLLFNBQVMsU0FBUztBQUN6QixRQUFJLENBQUMsS0FBSyxRQUFRLEtBQUssRUFBRyxPQUFNLElBQUksTUFBTSxpQ0FBaUM7QUFDM0UsVUFBTSxlQUFlLENBQUMsS0FBSyxRQUFRLFVBQVUsS0FBSyxjQUFjLGlCQUFpQixLQUFLLFVBQVUsWUFBWSxLQUFLLGdCQUFnQixrQkFBa0IsRUFBRSxLQUFLLE9BQU87QUFDakssUUFBSSxhQUFjLE9BQU0sSUFBSSxNQUFNLEdBQUcsWUFBWSw4QkFBOEI7QUFBQSxFQUNqRjtBQUNBLFNBQU87QUFDVDs7O0FEbkZBO0FBQ0EsU0FBUyxjQUFBQyxtQkFBa0I7QUFDM0IsU0FBUywyQkFBMkI7OztBRVJwQyxTQUFTLGFBQUFDLFlBQVcsWUFBQUMsV0FBVSxhQUFBQyxZQUFXLGVBQUFDLGNBQWEsZ0JBQUFDLHFCQUFvQjtBQUMxRSxTQUFTLFdBQUFDLGdCQUFlO0FBQ3hCLFNBQVMsc0JBQXNCOzs7QUNGL0IsU0FBUyxvQkFBb0I7QUFFN0IsSUFBTSxXQUFXO0FBQUEsRUFDZixNQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixJQUFJO0FBQUEsSUFDSixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixXQUFXO0FBQUEsSUFDWCxPQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsSUFBSTtBQUFBLElBQ0osUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLElBQ1AsTUFBTTtBQUFBLElBQ04sV0FBVztBQUFBLElBQ1gsT0FBTztBQUFBLEVBQ1Q7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE1BQU07QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLElBQUk7QUFBQSxJQUNKLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxJQUNQLE1BQU07QUFBQSxJQUNOLFdBQVc7QUFBQSxJQUNYLE9BQU87QUFBQSxFQUNUO0FBQ0Y7QUFFTyxJQUFJLGlCQUFpQixTQUFTLEtBQUs7QUFDbkMsSUFBSSxLQUFLLFNBQVMsS0FBSztBQUN2QixJQUFJLFVBQVUsU0FBUyxLQUFLO0FBQzVCLElBQUksUUFBUSxTQUFTLEtBQUs7QUFDMUIsSUFBSSxXQUFXLFNBQVMsS0FBSztBQUM3QixJQUFJLFlBQVksU0FBUyxLQUFLO0FBQzlCLElBQUksTUFBTSxTQUFTLEtBQUs7QUFDeEIsSUFBSSxRQUFRLFNBQVMsS0FBSztBQUMxQixJQUFJLE9BQU8sU0FBUyxLQUFLO0FBQ3pCLElBQUksWUFBWSxTQUFTLEtBQUs7QUFFckMsSUFBSSxpQkFBaUI7QUFDckIsSUFBSSxpQkFBaUI7QUFFckIsSUFBTSxDQUFDLGFBQWEsY0FBYyxJQUFJLGFBQWEsY0FBYztBQUUxRCxJQUFNLFNBQVM7QUFFZixTQUFTLFVBQVUsT0FBTztBQUMvQixtQkFBaUIsU0FBUztBQUMxQixpQkFBZSxrQkFBa0IsY0FBYztBQUNqRDtBQUVPLFNBQVMsV0FBVyxNQUFNO0FBQy9CLG1CQUFpQixTQUFTLElBQUksSUFBSSxPQUFPO0FBQ3pDLFFBQU0sSUFBSSxTQUFTLGNBQWM7QUFDakMsbUJBQWlCLEVBQUU7QUFDbkIsT0FBSyxFQUFFO0FBQ1AsWUFBVSxFQUFFO0FBQ1osVUFBUSxFQUFFO0FBQ1YsYUFBVyxFQUFFO0FBQ2IsY0FBWSxFQUFFO0FBQ2QsUUFBTSxFQUFFO0FBQ1IsVUFBUSxFQUFFO0FBQ1YsU0FBTyxFQUFFO0FBQ1QsY0FBWSxFQUFFO0FBQ2QsaUJBQWUsa0JBQWtCLEVBQUUsTUFBTTtBQUMzQztBQUVPLFNBQVMsY0FBYztBQUM1QixTQUFPO0FBQ1Q7QUFFTyxTQUFTLGNBQWM7QUFDNUIsU0FBTyxPQUFPLFFBQVEsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzNFO0FBRU8sU0FBUyxhQUFhO0FBQzNCLFNBQU8sU0FBUyxjQUFjLEVBQUU7QUFDbEM7OztBQ2hHQSxTQUFTLGdCQUFBQyxlQUFjLFFBQVEsVUFBVSxRQUFBQyxPQUFNLE9BQU8sV0FBVyxNQUFNLGFBQWEsVUFBVSxPQUFPLFdBQVcsV0FBVyxlQUFBQyxjQUFhLFVBQVUsVUFBVSxhQUFhLGlCQUFpQjs7O0FDQTFMLFNBQVMsTUFBTSxRQUFRLG1CQUFtQjtBQWdDdEM7QUE5QkosU0FBUyxNQUFNLE9BQU87QUFDcEIsTUFBSSxPQUFPLFdBQVcsR0FBRyxLQUFLLE1BQU0sV0FBVyxHQUFHO0FBQ2hELFdBQU87QUFBQSxNQUNMLFNBQVMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUU7QUFBQSxNQUM5QixTQUFTLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFO0FBQUEsTUFDOUIsU0FBUyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUFBLElBQ2hDO0FBQUEsRUFDRjtBQUNBLFNBQU8sQ0FBQyxLQUFLLEtBQUssR0FBRztBQUN2QjtBQUVBLFNBQVMsU0FBUyxNQUFNLElBQUksUUFBUTtBQUNsQyxNQUFJLFNBQVMsR0FBSSxRQUFPO0FBQ3hCLFFBQU0sSUFBSSxNQUFNLElBQUk7QUFDcEIsUUFBTSxJQUFJLE1BQU0sRUFBRTtBQUNsQixRQUFNLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxNQUFNLEtBQUssTUFBTSxTQUFTLEVBQUUsQ0FBQyxJQUFJLFNBQVMsTUFBTSxDQUFDO0FBQ2hGLFNBQU8sSUFBSSxTQUFTLElBQUksQ0FBQyxVQUFVLE1BQU0sU0FBUyxFQUFFLEVBQUUsU0FBUyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ2xGO0FBRU8sU0FBUyxjQUFjLEVBQUUsT0FBTyxVQUFVLE9BQU8sV0FBVyxLQUFNLE9BQU8sV0FBQUMsWUFBVyxZQUFZLFNBQVMsT0FBTyxHQUFHO0FBQ3hILFFBQU0sWUFBWSxZQUFZLFNBQVMsS0FBSyxRQUFRLENBQUM7QUFDckQsUUFBTSxPQUFPLFlBQVksR0FBRyxLQUFLLFVBQVUsTUFBTSxDQUFDO0FBRWxELE1BQUksVUFBVSxVQUFVLE1BQU0sUUFBUTtBQUNwQyxjQUFVLElBQUksS0FBSztBQUNuQixTQUFLLEtBQUssQ0FBQztBQUNYLFNBQUssSUFBSSxDQUFDO0FBQUEsRUFDWjtBQUVBLFNBQ0Usb0JBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE9BQU9BLFlBQVcsS0FBSyxDQUFDLEdBQUcsSUFBSSxXQUFXLEdBQ3RFLGlCQUFPLFVBQVUsQ0FBQyxHQUNyQjtBQUVKOzs7QUNwQ0EsSUFBTSxTQUFTLENBQUMsS0FBSyxVQUFLLFVBQUssVUFBSyxVQUFLLFVBQUssVUFBSyxVQUFLLFFBQUc7QUFFcEQsU0FBUyxXQUFXLFNBQVNDLFNBQVEsR0FBRztBQUM3QyxRQUFNLFVBQVUsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJQSxTQUFRLElBQUksR0FBRztBQUNoRixRQUFNLE9BQU8sS0FBSyxNQUFNLFVBQVUsQ0FBQztBQUNuQyxRQUFNLFVBQVUsVUFBVTtBQUMxQixTQUFPLFNBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxPQUFPLE9BQU8sSUFBSSxNQUFNLElBQUksT0FBT0EsU0FBUSxRQUFRLFVBQVUsSUFBSSxFQUFFO0FBQzFHOzs7QUZIQSxTQUFTLHFCQUFxQjtBQUM5QixTQUFTLGVBQWU7QUFDeEIsU0FBUyxjQUFBQyxhQUFZLGlCQUFpQjtBQUN0QyxTQUFTLHNCQUFzQixpQkFBaUIsa0JBQWtCLHVCQUF1QjtBQW1CaEYsZ0JBQUFDLE1BT0QsWUFQQztBQWpCVCxTQUFTLFlBQVksTUFBTTtBQUN6QixRQUFNLFFBQVEsT0FBTyxJQUFJO0FBQ3pCLFFBQU0sT0FBTyxRQUFRO0FBQ3JCLFNBQU8sVUFBVSxRQUFRLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksTUFBTSxNQUFNLEtBQUssTUFBTSxDQUFDLEtBQUs7QUFDM0Y7QUFFTyxTQUFTLFFBQVEsSUFBSTtBQUMxQixRQUFNLElBQUksS0FBSyxJQUFJLEdBQUcsS0FBSyxPQUFPLEtBQUssSUFBSSxJQUFJLE1BQU0sR0FBSSxDQUFDO0FBQzFELE1BQUksSUFBSSxHQUFJLFFBQU8sR0FBRyxDQUFDO0FBQ3ZCLFFBQU0sSUFBSSxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQzNCLE1BQUksSUFBSSxHQUFJLFFBQU8sR0FBRyxDQUFDO0FBQ3ZCLFFBQU0sSUFBSSxLQUFLLE1BQU0sSUFBSSxFQUFFO0FBQzNCLE1BQUksSUFBSSxHQUFJLFFBQU8sR0FBRyxDQUFDO0FBQ3ZCLFNBQU8sR0FBRyxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDOUI7QUFFQSxTQUFTLGVBQWU7QUFDdEIsU0FBTyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFdBQVcsVUFBVSxPQUFPLEdBQUksbUJBQUksT0FBTyxRQUFRLE9BQU8sV0FBVyxFQUFFLEdBQUU7QUFDeEc7QUFFQSxTQUFTLFdBQVcsRUFBRSxPQUFPLE1BQU0sT0FBTyxhQUFhLE9BQU8sU0FBUyxHQUFHO0FBQ3hFLFNBQ0UscUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLElBQUksVUFBVSxRQUFRLGFBQWEsU0FBUyxPQUFVLEdBQzNGO0FBQUEseUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxZQUFZLEVBQUUsR0FDaEU7QUFBQSwyQkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSx3QkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sR0FBRyxNQUFNLEtBQUssR0FBSSxpQkFBTTtBQUFBLFFBQ3JELGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHO0FBQUEsUUFDNUI7QUFBQSxTQUNIO0FBQUEsTUFDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxnQkFBSztBQUFBLE9BQ3ZDO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxnQkFBYTtBQUFBLElBQ2QsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsYUFBYSxJQUFJLEdBQUcsZUFBZSxHQUFHLFVBQVUsYUFBYSxJQUFJLE9BQVUsR0FDekgsVUFDSDtBQUFBLEtBQ0Y7QUFFSjtBQUVPLFNBQVMsYUFBYSxFQUFFLE9BQU8sU0FBUyxlQUFlLFdBQVcsU0FBUyxXQUFXLFFBQVEsR0FBRztBQUN0RyxXQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFFBQUksTUFBTSxRQUFRLFVBQVU7QUFDMUIsY0FBUTtBQUNSLFlBQU0sZ0JBQWdCO0FBQUEsSUFDeEIsV0FBVyxNQUFNLFFBQVEsVUFBVTtBQUNqQyxnQkFBVTtBQUNWLFlBQU0sZ0JBQWdCO0FBQUEsSUFDeEI7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUNFLGdCQUFBQSxLQUFDLGNBQVcsT0FBYyxNQUFNLFVBQVUsYUFBYSxZQUFZLENBQUMsaUJBQ2xFLCtCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxXQUFXLEVBQUUsR0FDbEQ7QUFBQSxvQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEdBQUcsR0FBSSxtQkFBUTtBQUFBLElBQ3JDLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sS0FBSyxNQUFNLEtBQUssR0FBRyxvQ0FBc0I7QUFBQSxLQUNqRSxHQUNGO0FBRUo7QUFFQSxTQUFTLFlBQVksRUFBRSxPQUFPLE9BQU8sU0FBUyxTQUFTLEdBQUc7QUFDeEQsU0FDRSxxQkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsY0FBYyxFQUFFLEdBQ3JEO0FBQUEseUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsc0JBQUFBLEtBQUMsWUFBUyxTQUFTLE9BQU8sT0FBTyxNQUFNLE9BQU8sU0FBa0IsVUFBb0I7QUFBQSxNQUNwRixnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLE1BQzdCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGdCQUFNLE1BQUs7QUFBQSxPQUM3QztBQUFBLElBQ0EsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksaUJBQU8sTUFBTSxJQUFJLElBQUc7QUFBQSxLQUN0RDtBQUVKO0FBRUEsU0FBUyxrQkFBa0IsRUFBRSxPQUFPLFNBQVMsU0FBUyxHQUFHO0FBQ3ZELFNBQ0UscUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLGNBQWMsRUFBRSxHQUNyRDtBQUFBLHlCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHNCQUFBQSxLQUFDLGVBQVksU0FBa0IsT0FBYyxVQUFvQixLQUFLLEdBQUcsS0FBSyxLQUFLLE9BQU8sR0FBRztBQUFBLE1BQzdGLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sR0FBRyxHQUFHLG1DQUFxQjtBQUFBLE1BQ2pELGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHO0FBQUEsTUFDN0IsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsaUNBQW1CO0FBQUEsT0FDcEQ7QUFBQSxJQUNBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLHlEQUEyQztBQUFBLEtBQzVFO0FBRUo7QUFFQSxTQUFTLGlCQUFpQixFQUFFLE9BQU8sT0FBTyxNQUFNLFNBQVMsT0FBTyxHQUFHO0FBQ2pFLFNBQ0UscUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLGNBQWMsRUFBRSxHQUNyRDtBQUFBLHlCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHNCQUFBQSxLQUFDLFVBQU8sT0FBYyxTQUFrQixTQUFTLFFBQVE7QUFBQSxNQUN6RCxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLE1BQzdCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGdCQUFLO0FBQUEsT0FDdkM7QUFBQSxJQUNBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGlCQUFPLFNBQVMsZ0JBQWdCLElBQUc7QUFBQSxLQUNyRTtBQUVKO0FBRU8sU0FBUyxZQUFZLEVBQUUsUUFBUSxTQUFTLFVBQVUscUJBQXFCLGtCQUFrQix5QkFBeUIsd0JBQXdCLFFBQVEsR0FBRztBQUMxSixRQUFNLFNBQVM7QUFBQSxJQUNiLEVBQUUsTUFBTSxVQUFVLE9BQU8sbUJBQW1CLE1BQU0sNENBQTRDLE1BQU0sbUJBQW1CO0FBQUEsSUFDdkgsRUFBRSxNQUFNLGdCQUFnQixPQUFPLHdCQUF3QixNQUFNLCtDQUErQyxNQUFNLDZCQUE2QjtBQUFBLElBQy9JLEVBQUUsTUFBTSxhQUFhLE9BQU8sbUJBQW1CLE1BQU0sdUNBQXVDLE1BQU0sb0JBQW9CO0FBQUEsSUFDdEgsRUFBRSxNQUFNLGVBQWUsT0FBTyxnQkFBZ0IsTUFBTSxpR0FBaUcsTUFBTSxzQkFBc0I7QUFBQSxFQUNuTDtBQUVBLFdBQVMsQ0FBQyxVQUFVO0FBQ2xCLFFBQUksQ0FBQyxRQUFTO0FBQ2QsUUFBSSxNQUFNLFFBQVEsVUFBVTtBQUMxQixjQUFRO0FBQ1IsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQ0UsZ0JBQUFBLEtBQUMsY0FBVyxPQUFNLGlCQUFnQixNQUFLLHNEQUFxRCxZQUFVLE1BQ3BHLDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxXQUFXLEdBQUcsVUFBVSxFQUFFLEdBQ25ELCtCQUFDLGFBQVUsU0FBa0IsY0FBYSxVQUFTLFdBQVMsTUFBQyxjQUFjLEdBQ3hFO0FBQUEsV0FBTyxJQUFJLENBQUMsVUFDWCxnQkFBQUEsS0FBQyxTQUF1QixNQUFNLE1BQU0sTUFDakMsV0FBQyxFQUFFLFNBQVMsYUFBYSxNQUN4QixnQkFBQUEsS0FBQyxlQUFZLE9BQWMsT0FBTyxPQUFPLE1BQU0sSUFBSSxHQUFHLFNBQVMsY0FBYyxVQUFVLENBQUMsVUFBVSxTQUFTLE1BQU0sTUFBTSxLQUFLLEdBQUcsS0FGdkgsTUFBTSxJQUlsQixDQUNEO0FBQUEsSUFDRCxnQkFBQUEsS0FBQyxTQUFNLE1BQUssaUJBQ1QsV0FBQyxFQUFFLFNBQVMsYUFBYSxNQUFNLGdCQUFBQSxLQUFDLG9CQUFpQixPQUFPLE9BQU8sZUFBZSxPQUFNLHlCQUF3QixNQUFLLHlCQUF3QixTQUFTLGNBQWMsUUFBUSxxQkFBcUIsR0FDaE07QUFBQSxJQUNBLGdCQUFBQSxLQUFDLFNBQU0sTUFBSyxjQUNULFdBQUMsRUFBRSxTQUFTLGFBQWEsTUFBTSxnQkFBQUEsS0FBQyxvQkFBaUIsT0FBTyxPQUFPLFlBQVksT0FBTSxlQUFjLE1BQUssZ0JBQWUsU0FBUyxjQUFjLFFBQVEsa0JBQWtCLEdBQ3ZLO0FBQUEsSUFDQyxDQUFDLGdCQUFnQixjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQ3JDLGdCQUFBQSxLQUFDLFNBQU0sTUFBTSxHQUFHLElBQUksU0FDakIsV0FBQyxFQUFFLFNBQVMsYUFBYSxNQUFNLGdCQUFBQSxLQUFDLG9CQUFpQixPQUFPLE9BQU8sR0FBRyxJQUFJLE9BQU8sR0FBRyxPQUFPLGVBQWUsU0FBUyxpQkFBaUIsTUFBTSxHQUFHLFVBQVUsTUFBTSxVQUFVLElBQUksSUFBSSxTQUFTLGNBQWMsUUFBUSxNQUFNLHVCQUF1QixJQUFJLEdBQUcsR0FDalAsQ0FDRDtBQUFBLElBQ0QsZ0JBQUFBLEtBQUMsU0FBTSxNQUFLLHFCQUNULFdBQUMsRUFBRSxTQUFTLGFBQWEsTUFBTSxnQkFBQUEsS0FBQyxvQkFBaUIsT0FBTyxPQUFPLG1CQUFtQixPQUFNLG1CQUFrQixNQUFLLHVCQUFzQixTQUFTLGNBQWMsUUFBUSx5QkFBeUIsR0FDaE07QUFBQSxJQUNBLGdCQUFBQSxLQUFDLFNBQU0sTUFBSyxzQkFDVCxXQUFDLEVBQUUsU0FBUyxhQUFhLE1BQU0sZ0JBQUFBLEtBQUMscUJBQWtCLE9BQU8sT0FBTyxvQkFBb0IsU0FBUyxjQUFjLFVBQVUsQ0FBQyxVQUFVLFNBQVMsc0JBQXNCLEtBQUssR0FBRyxHQUMxSztBQUFBLEtBQ0YsR0FDRixHQUNGO0FBRUo7QUFFTyxTQUFTLFVBQVUsRUFBRSxRQUFRLE9BQU8sR0FBRztBQUM1QyxTQUNFLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNoQyxpQkFBTyxJQUFJLENBQUMsR0FBRyxNQUNkLGdCQUFBQSxLQUFDLFVBQWEsT0FBTyxFQUFFLE9BQU8sTUFBTSxTQUFTLE9BQU8sSUFBSSxPQUFPLE1BQU0sTUFBTSxPQUFPLEdBQUksYUFBRyxJQUFJLElBQUksT0FBTyxFQUFFLEdBQUcsTUFBTSxhQUFhLGtCQUFrQixDQUFDLE1BQXhJLENBQTJJLENBQ3ZKLEdBQ0g7QUFFSjtBQUVPLFNBQVMsV0FBVyxFQUFFLFFBQVEsU0FBUyxhQUFhLFNBQVMsUUFBUSxlQUFlLFNBQVMsUUFBUSxnQkFBZ0IsT0FBTywwREFBMEQsR0FBRztBQUM5TCxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlDLGNBQWEsT0FBTyxDQUFDLEtBQUssSUFBSTtBQUMxRCxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLGNBQWEsRUFBRTtBQUN6QyxRQUFNLGVBQWUsVUFBVSxRQUFRLE1BQU0sR0FBRyxDQUFDLEdBQUcsVUFBVUYsWUFBVyxHQUFHLE1BQU0sSUFBSSxDQUFDO0FBRXZGLFdBQVMsQ0FBQyxVQUFVO0FBQ2xCLFFBQUksQ0FBQyxRQUFTO0FBQ2QsUUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sT0FBTyxHQUFHO0FBQy9DLG9CQUFjLE9BQU8sQ0FBQztBQUN0QixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FDRSxnQkFBQUMsS0FBQyxjQUFXLE9BQWMsTUFDeEIsMEJBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFFBQVEsSUFBSSxXQUFXLEVBQUUsR0FDOUQsMEJBQUFBO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxTQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUDtBQUFBLE1BQ0EsYUFBWTtBQUFBLE1BQ1osUUFBUSxNQUFNO0FBQUEsTUFDZCxVQUFVO0FBQUEsTUFDVixnQkFBZ0I7QUFBQSxNQUNoQixVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixXQUFTO0FBQUEsTUFDVCxLQUFLO0FBQUEsTUFDTCxZQUFZO0FBQUEsTUFDWixXQUFXO0FBQUEsTUFDWCxZQUFZLENBQUMsR0FBRyxFQUFFLFVBQVUsU0FBUyxFQUFFLE1BQU07QUFDM0MsY0FBTSxNQUFNLEVBQUUsY0FBYztBQUM1QixlQUNFLHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxJQUFJLFdBQVksSUFBSSxPQUFPLElBQUksWUFBYSxNQUFNLFVBQVUsRUFBRSxHQUNuRztBQUFBLCtCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLDRCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLE9BQU8sV0FBVyxVQUFVLE1BQU0sUUFBUSxHQUFHLEdBQUksWUFBRSxNQUFLO0FBQUEsWUFDbEYsRUFBRSxTQUFTLFdBQVcsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLFVBQVUsT0FBTyxFQUFFLEdBQUkscUJBQUs7QUFBQSxZQUNuRixFQUFFLFNBQVMsZUFBZSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFdBQVcsVUFBVSxNQUFNLEdBQUksdUJBQVk7QUFBQSxZQUM1RixnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLFlBQzdCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE1BQU0sR0FDOUMsZ0JBQU0sU0FBUyxFQUFFLE9BQU8sS0FBSyxFQUFFLFFBQVEsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFBRSxhQUFhLFVBQVUsaUJBQWlCLGlCQUMvSDtBQUFBLGFBQ0Y7QUFBQSxVQUNBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE1BQU0sR0FBSSxZQUFFLE1BQUs7QUFBQSxXQUM5RDtBQUFBLE1BRUo7QUFBQTtBQUFBLEVBQ0YsR0FDRixHQUNGO0FBRUo7QUFFTyxTQUFTLGFBQWEsRUFBRSxTQUFTLFFBQVEsWUFBWSxTQUFTLFFBQVEsUUFBUSxHQUFHO0FBQ3RGLFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSUMsY0FBYSxRQUFRLENBQUMsS0FBSyxJQUFJO0FBQzdELFFBQU0sQ0FBQyxPQUFPLFFBQVEsSUFBSUEsY0FBYSxFQUFFO0FBQ3pDLFFBQU0sV0FBVyxRQUFRLEtBQUssQ0FBQyxNQUFNRixZQUFXLE1BQU0sR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDO0FBRXJFLFNBQ0UsZ0JBQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxPQUFNO0FBQUEsTUFDTixNQUFLO0FBQUEsTUFDTCxPQUFPLGdCQUFBQSxLQUFDLGFBQVUsUUFBZ0IsUUFBUSxZQUFZO0FBQUEsTUFFdEQsK0JBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLFFBQVEsSUFBSSxXQUFXLEdBQUcsS0FBSyxFQUFFLEdBQ25FO0FBQUEsd0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLE9BQU8sTUFBTSxHQUNsRCwwQkFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNDLFNBQU87QUFBQSxZQUNQLE9BQU87QUFBQSxZQUNQO0FBQUEsWUFDQSxhQUFZO0FBQUEsWUFDWixRQUFRLENBQUMsR0FBRyxNQUFNRCxZQUFXLEdBQUcsRUFBRSxJQUFJLEtBQUs7QUFBQSxZQUMzQyxVQUFVO0FBQUEsWUFDVixnQkFBZ0IsQ0FBQyxNQUFNLFdBQVcsQ0FBQztBQUFBLFlBQ25DLFVBQVUsQ0FBQyxNQUFNLE9BQU8sRUFBRSxJQUFJO0FBQUEsWUFDOUIsVUFBVTtBQUFBLFlBQ1YsV0FBUztBQUFBLFlBQ1QsS0FBSztBQUFBLFlBQ0wsWUFBWSxDQUFDLEdBQUcsRUFBRSxVQUFVLFNBQVMsRUFBRSxNQUNyQyxxQkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sSUFBSSxXQUFZLElBQUksT0FBTyxJQUFJLFlBQWEsTUFBTSxVQUFVLEVBQUUsR0FDaEc7QUFBQSw4QkFBQUMsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsUUFBUSxFQUFFLEdBQ25DLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLFdBQVcsVUFBVSxHQUFHLEdBQUksWUFBRSxLQUFLLFFBQVEsT0FBTyxHQUFHLEdBQUUsR0FDckc7QUFBQSxjQUNBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE1BQU0sR0FBSSxlQUFLLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBRztBQUFBLGVBQzVFO0FBQUE7QUFBQSxRQUVKLEdBQ0Y7QUFBQSxRQUNBLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsSUFBSSxVQUFVLFVBQVUsRUFBRSxHQUMzRSxzQkFBWSxRQUFRLElBQ25CLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sR0FBRyxHQUFJLGtCQUFRLEVBQUUsS0FBSyxNQUFNLEdBQUcsR0FBSSxHQUFFLElBRTNELGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLGlDQUFtQixHQUV0RDtBQUFBLFNBQ0Y7QUFBQTtBQUFBLEVBQ0Y7QUFFSjtBQUVPLFNBQVMsZ0JBQWdCLEVBQUUsU0FBUyxPQUFPLFNBQVMsUUFBUSxRQUFRLEdBQUc7QUFDNUUsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJQyxjQUFhLFFBQVEsQ0FBQyxLQUFLLElBQUk7QUFFN0QsU0FDRSxnQkFBQUQsS0FBQyxjQUFXLE9BQU0sdUJBQXNCLE1BQUssdURBQzNDLCtCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxRQUFRLElBQUksV0FBVyxHQUFHLEtBQUssRUFBRSxHQUNuRTtBQUFBLG9CQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxPQUFPLE1BQU0sR0FDbEQsMEJBQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDQyxTQUFPO0FBQUEsUUFDUCxPQUFPO0FBQUEsUUFDUDtBQUFBLFFBQ0EsYUFBWTtBQUFBLFFBQ1osUUFBUSxDQUFDLEdBQUcsTUFBTUQsWUFBVyxHQUFHLEVBQUUsSUFBSSxLQUFLO0FBQUEsUUFDM0MsZ0JBQWdCLENBQUMsTUFBTSxXQUFXLENBQUM7QUFBQSxRQUNuQyxVQUFVO0FBQUEsUUFDVixVQUFVO0FBQUEsUUFDVixXQUFTO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxZQUFZLENBQUMsR0FBRyxFQUFFLFVBQVUsU0FBUyxFQUFFLE1BQ3JDLHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxJQUFJLFdBQVksSUFBSSxPQUFPLElBQUksWUFBYSxNQUFNLFVBQVUsRUFBRSxHQUNoRztBQUFBLDBCQUFBQyxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsR0FDbkMsMEJBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsVUFBVSxZQUFZLE9BQU8sV0FBVyxVQUFVLEdBQUcsR0FBSSxZQUFFLEtBQUssUUFBUSxPQUFPLEdBQUcsR0FBRSxHQUNyRztBQUFBLFVBQ0EsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLFVBQVUsTUFBTSxHQUFJLGVBQUssTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVM7QUFBQSxXQUN4RjtBQUFBO0FBQUEsSUFFSixHQUNGO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLElBQUksVUFBVSxVQUFVLEVBQUUsR0FDM0Usa0JBQVEsSUFDUCxxQkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFNBQVMsR0FDcEM7QUFBQSxzQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxrQ0FBd0IsTUFBTSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksWUFBVztBQUFBLE1BQzdGLE1BQU0sUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxHQUFHLE1BQ3BDLGdCQUFBQSxLQUFDLFVBQWEsT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLHNCQUFPLEVBQUUsS0FBSyxNQUEzQyxDQUE4QyxDQUMxRDtBQUFBLE1BQ0QsZ0JBQUFBLEtBQUMsVUFBSyxlQUFDO0FBQUEsTUFDUCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEdBQUcsR0FBSSxrQkFBUSxFQUFFLEtBQUssTUFBTSxHQUFHLEdBQUksR0FBRTtBQUFBLE9BQzdELElBRUEsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsa0NBQW9CLEdBRXZEO0FBQUEsS0FDRixHQUNGO0FBRUo7QUFFTyxTQUFTLGtCQUFrQixFQUFFLFFBQVEsU0FBUyxTQUFTLFVBQVUsT0FBTyxHQUFHO0FBQ2hGLFNBQ0UscUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxXQUFXLEVBQUUsR0FDL0Q7QUFBQSxvQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sR0FBRyxNQUFNLEtBQUssR0FBRyw0QkFBYztBQUFBLElBQzVELHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHNCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGtCQUFPO0FBQUEsTUFDdkMsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUNuQywwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxVQUFVLFlBQVksT0FBTyxRQUFRLEdBQUksaUJBQU8sS0FBSyxRQUFRLE9BQU8sR0FBRyxHQUFFLEdBQzFGO0FBQUEsT0FDRjtBQUFBLElBQ0EsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFdBQVcsRUFBRSxHQUNsRCwwQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLFNBQU87QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQO0FBQUEsUUFDQSxZQUFZO0FBQUEsUUFDWixZQUFZO0FBQUEsUUFDWixLQUFLO0FBQUEsUUFDTCxTQUFPO0FBQUEsUUFDUDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFFBQ1YsWUFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLE1BQ3ZCLHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNwQztBQUFBLCtCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLDRCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksbUJBQVMsWUFBTyxNQUFLO0FBQUEsWUFDeEQsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE9BQU8sSUFBSSxHQUFHLEdBQUksWUFBRSxPQUFNO0FBQUEsYUFDM0Q7QUFBQSxVQUNBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGVBQUssRUFBRSxJQUFJLElBQUc7QUFBQSxXQUNoRDtBQUFBO0FBQUEsSUFFSixHQUNGO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRywrREFBaUQ7QUFBQSxLQUNsRjtBQUVKO0FBRUEsU0FBUyxVQUFVLFNBQVMsU0FBUztBQUNuQyxXQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUSxFQUFHO0FBQ2hCLFFBQUksTUFBTSxRQUFRLFVBQVU7QUFDMUIsY0FBUTtBQUNSLFlBQU0sZ0JBQWdCO0FBQUEsSUFDeEI7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUVPLFNBQVMsWUFBWSxFQUFFLFVBQVUsUUFBUSxZQUFZLFNBQVMsU0FBUyxXQUFXLFFBQVEsVUFBVSxRQUFRLEdBQUc7QUFDcEgsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJQyxjQUFhLFNBQVMsQ0FBQyxLQUFLLElBQUk7QUFDOUQsUUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJQSxjQUFhLE1BQU07QUFDM0MsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJQSxjQUFhLEVBQUU7QUFDekMsUUFBTSxpQkFBaUIsVUFBVSxVQUFVLE1BQU0sR0FBRyxDQUFDLEdBQUcsWUFBWTtBQUNsRSxVQUFNLGNBQWMsUUFBUSxjQUFjRixZQUFXLEdBQUcsUUFBUSxXQUFXLElBQUk7QUFDL0UsUUFBSSxlQUFlLEVBQUcsUUFBTyxNQUFTO0FBQ3RDLFdBQU8sS0FBSyxJQUFJQSxZQUFXLEdBQUcsUUFBUSxrQkFBa0IsUUFBUSxLQUFLLEdBQUdBLFlBQVcsR0FBRyxRQUFRLFlBQVksRUFBRSxDQUFDO0FBQUEsRUFDL0csQ0FBQztBQUNELFFBQU0sZ0JBQWdCLElBQUksSUFBSSxTQUFTLElBQUksQ0FBQyxZQUFZLFFBQVEsUUFBUSxFQUFFLE9BQU8sT0FBTyxDQUFDLEVBQUUsT0FBTztBQUNsRyxRQUFNLGtCQUFrQixNQUFNO0FBQzVCLFFBQUksUUFBUyxRQUFPO0FBQ3BCLFVBQU0sV0FBVyxRQUFRO0FBQ3pCLFdBQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSxXQUFXO0FBQUEsRUFDbEQ7QUFDQSxZQUFVLE1BQU0sU0FBUyxPQUFPO0FBQ2hDLFdBQVMsQ0FBQyxVQUFVO0FBQ2xCLFFBQUksQ0FBQyxRQUFTO0FBQ2QsUUFBSSxNQUFNLFFBQVEsU0FBUyxDQUFDLE1BQU0sUUFBUSxDQUFDLE1BQU0sTUFBTTtBQUNyRCxjQUFRLENBQUMsWUFBWSxZQUFZLFNBQVMsWUFBWSxNQUFNO0FBQzVELFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFVBQU0sV0FBVyxnQkFBZ0I7QUFDakMsUUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sVUFBVTtBQUMvQyxlQUFTLFFBQVE7QUFDakIsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQ0UsZ0JBQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxPQUFNO0FBQUEsTUFDTixNQUFLO0FBQUEsTUFDTCxPQUFPLGdCQUFBQSxLQUFDLGFBQVUsUUFBZ0IsUUFBUSxZQUFZO0FBQUEsTUFDdEQsWUFBVTtBQUFBLE1BRVYsK0JBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxXQUFXLEdBQUcsS0FBSyxFQUFFLEdBQ3ZFO0FBQUEsd0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFFBQVEsT0FBTyxVQUFVLEVBQUUsR0FDL0Qsb0JBQ0MsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsaUNBQW1CLElBQ2hELFNBQVMsV0FBVyxJQUN0QixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxrQ0FBb0IsSUFFbkQsZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxTQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxTQUFTLFdBQVcsS0FBSyxNQUFNLFVBQVUsQ0FBQztBQUFBLFlBQzFDLGFBQVk7QUFBQSxZQUNaLFFBQVEsTUFBTTtBQUFBLFlBQ2QsVUFBVTtBQUFBLFlBQ1YsZ0JBQWdCLENBQUMsTUFBTSxXQUFXLENBQUM7QUFBQSxZQUNuQyxVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixXQUFTO0FBQUEsWUFDVCxLQUFLO0FBQUEsWUFDTCxZQUFZLENBQUMsR0FBRyxFQUFFLFVBQVUsU0FBUyxFQUFFLE1BQ3JDLHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxJQUFJLFdBQVksSUFBSSxPQUFPLElBQUksWUFBYyxnQkFBZ0IsRUFBRSxRQUFRLE1BQU8sVUFBVSxFQUFFLEdBQzNIO0FBQUEsK0JBQWlCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE9BQU8sSUFBSSxXQUFXLE9BQU8sRUFBRSxNQUFNLEdBQUksYUFBRyxFQUFFLFFBQVEsTUFBSztBQUFBLGNBQ3hILGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsR0FDbkMsMEJBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsVUFBVSxZQUFZLE9BQU8sV0FBVyxVQUFVLElBQUksSUFBSSxZQUFZLGdCQUFnQixPQUFPLEVBQUUsTUFBTSxHQUFJLFlBQUUsTUFBTSxRQUFRLE9BQU8sR0FBRyxHQUFFLEdBQ3RKO0FBQUEsY0FDQyxFQUFFLE9BQU8sT0FBTyxhQUFhLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE9BQU8sRUFBRSxHQUFHLHNCQUFRO0FBQUEsY0FDN0YsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLFVBQVUsTUFBTSxHQUFJLGVBQUssUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFHO0FBQUEsZUFDNUU7QUFBQTtBQUFBLFFBRUosR0FFSjtBQUFBLFFBQ0EsZ0JBQUFBLEtBQUMsZ0JBQWE7QUFBQSxRQUNkLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsSUFBSSxVQUFVLFVBQVUsRUFBRSxHQUMzRSwwQkFBZ0IsSUFDZixnQkFBQUEsS0FBQyxhQUFVLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxTQUFTLFdBQVcsS0FBSyxNQUFNLFdBQVcsV0FBUyxNQUNwRiwrQkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFNBQVMsR0FDcEM7QUFBQSwwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxhQUFHLGdCQUFnQixFQUFFLEtBQUssSUFBSSxnQkFBZ0IsRUFBRSxVQUFVLElBQUksU0FBUyxPQUFPLEtBQUssUUFBUSxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsS0FBSyxZQUFZLGdCQUFnQixFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUc7QUFBQSxVQUNsTSxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRztBQUFBLFdBQ3pCLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxHQUFHLFNBQVMsSUFDMUMscUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxTQUFTLEdBQ25DO0FBQUEsNEJBQWdCLEVBQUUsc0JBQXNCLGdCQUFnQixFQUFFLFFBQVEsVUFDakUsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksYUFBRyxnQkFBZ0IsRUFBRSxzQkFBc0IsZ0JBQWdCLEVBQUUsUUFBUSxNQUFNLDZCQUE0QjtBQUFBLGFBRXZJLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLE1BQy9DLGdCQUFBQSxLQUFDLFNBQWlDLE9BQU8sRUFBRSxlQUFlLFVBQVUsV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEdBQzdGLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sUUFBUSxTQUFTLFNBQVMsS0FBSyxNQUFNLEdBQUksa0JBQVEsTUFBSyxLQURwRSxHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsRUFFOUIsQ0FDRDtBQUFBLGFBQ0gsSUFFQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxtQ0FBcUI7QUFBQSxXQUV4RCxHQUNGLElBRUEsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcseUJBQVcsR0FFOUM7QUFBQSxTQUNGO0FBQUE7QUFBQSxFQUNGO0FBRUo7QUFFTyxTQUFTLFlBQVksRUFBRSxVQUFVLFFBQVEsWUFBWSxTQUFTLGtCQUFrQixVQUFVLFFBQVEsR0FBRztBQUMxRyxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUlDLGNBQWEsSUFBSTtBQUNyRCxRQUFNLENBQUMsTUFBTSxPQUFPLElBQUlBLGNBQWEsTUFBTTtBQUMzQyxRQUFNLFVBQVUsU0FBUyxTQUFTLFdBQVcsQ0FBQyxJQUFJLFdBQVcsSUFBSSxTQUFTLENBQUMsS0FBSztBQUNoRixZQUFVLE1BQU0sU0FBUyxPQUFPO0FBQ2hDLFdBQVMsQ0FBQyxVQUFVO0FBQ2xCLFFBQUksQ0FBQyxRQUFTO0FBQ2QsUUFBSSxNQUFNLFFBQVEsU0FBUyxDQUFDLE1BQU0sUUFBUSxDQUFDLE1BQU0sTUFBTTtBQUNyRCxjQUFRLENBQUMsTUFBTyxNQUFNLFNBQVMsWUFBWSxNQUFPO0FBQ2xELFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxPQUFPLFNBQVM7QUFDOUMsZUFBUyxPQUFPO0FBQ2hCLFlBQU0sZ0JBQWdCO0FBQUEsSUFDeEI7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUNFLGdCQUFBRDtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0MsT0FBTTtBQUFBLE1BQ04sTUFBSztBQUFBLE1BQ0wsT0FBTyxnQkFBQUEsS0FBQyxhQUFVLFFBQWdCLFFBQVEsWUFBWTtBQUFBLE1BQ3RELFlBQVU7QUFBQSxNQUVWLCtCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsV0FBVyxHQUFHLEtBQUssRUFBRSxHQUN2RTtBQUFBLHdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxRQUFRLE9BQU8sVUFBVSxFQUFFLEdBQy9ELG1CQUFTLFdBQVcsSUFDbkIsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsa0NBQW9CLElBRW5ELGdCQUFBQTtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0MsU0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFlBQ1AsU0FBUyxXQUFXLEtBQUssTUFBTTtBQUFBLFlBQy9CLGFBQVk7QUFBQSxZQUNaLFFBQVEsQ0FBQyxHQUFHLE1BQU1ELFlBQVcsR0FBRyxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUs7QUFBQSxZQUNqRSxnQkFBZ0I7QUFBQSxZQUNoQixVQUFVO0FBQUEsWUFDVixVQUFVO0FBQUEsWUFDVixXQUFTO0FBQUEsWUFDVCxLQUFLO0FBQUEsWUFDTCxZQUFZLENBQUMsR0FBRyxFQUFFLFVBQVUsU0FBUyxFQUFFLE1BQ3JDLHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxJQUFJLFdBQVksSUFBSSxPQUFPLElBQUksWUFBYSxNQUFNLFVBQVUsRUFBRSxHQUNoRztBQUFBLDhCQUFBQyxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsR0FDbkMsMEJBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsVUFBVSxZQUFZLFFBQVEsRUFBRSxVQUFVLE9BQU8sV0FBVyxVQUFXLEVBQUUsV0FBVyxRQUFRLEdBQUksR0FBSSxhQUFHLEVBQUUsV0FBVyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBRyxHQUMzSjtBQUFBLGNBQ0MsRUFBRSxZQUFZLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE1BQU0sR0FBRywwQkFBWTtBQUFBLGNBQy9FLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE1BQU0sR0FBSSxlQUFLLEVBQUUsS0FBSyxJQUFHO0FBQUEsZUFDdEU7QUFBQTtBQUFBLFFBRUosR0FFSjtBQUFBLFFBQ0EsZ0JBQUFBLEtBQUMsZ0JBQWE7QUFBQSxRQUNkLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsSUFBSSxVQUFVLFVBQVUsRUFBRSxHQUMzRSxvQkFDQyxxQkFBQyxhQUFVLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxTQUFTLFdBQVcsS0FBSyxNQUFNLFdBQVcsV0FBUyxNQUNuRjtBQUFBLGtCQUFRLFlBQVksZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLE1BQU0sS0FBSyxHQUFHLHdCQUFVO0FBQUEsVUFDMUUsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLFFBQVEsS0FBSyxHQUFJLGtCQUFRLGVBQWUsa0JBQWlCO0FBQUEsVUFDdEYsZ0JBQUFBLEtBQUMsVUFBSyxlQUFDO0FBQUEsVUFDUCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFFBQVEsR0FBSSxrQkFBUSxNQUFLO0FBQUEsV0FDakQsSUFFQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyx5QkFBVyxHQUU5QztBQUFBLFNBQ0Y7QUFBQTtBQUFBLEVBQ0Y7QUFFSjtBQUVPLFNBQVMsWUFBWSxFQUFFLFFBQVEsU0FBUyxjQUFjLFNBQVMsUUFBUSxlQUFlLFFBQVEsR0FBRztBQUN0RyxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlDLGNBQWEsQ0FBQztBQUMxQyxRQUFNLFFBQVE7QUFFZCxXQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFFBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxLQUFLO0FBQ25DLG9CQUFjLE1BQU0sT0FBTyxDQUFDLENBQUM7QUFDN0IsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sUUFBUSxDQUFDLE1BQU8sRUFBRSxRQUFRLE9BQU8sWUFBWSxFQUFFO0FBRXJELFNBQ0UsZ0JBQUFELEtBQUMsY0FBVyxPQUFNLG1CQUFrQixNQUFLLHdFQUN2QywwQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsV0FBVyxFQUFFLEdBQ2xELDBCQUFBQTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0MsU0FBTztBQUFBLE1BQ1A7QUFBQSxNQUNBLFVBQVUsT0FBTztBQUFBLE1BQ2pCLFVBQVU7QUFBQSxNQUNWO0FBQUEsTUFDQSxZQUFZO0FBQUEsTUFDWixTQUFPO0FBQUEsTUFDUCxVQUFVO0FBQUEsTUFDVixVQUFVO0FBQUEsTUFDVixZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFDdkIscUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsR0FBSSxtQkFBUyxZQUFPLE1BQUs7QUFBQSxRQUN4RCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsT0FBTyxJQUFJLEdBQUcsR0FBSSxnQkFBTSxDQUFDLEVBQUUsT0FBTyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFFO0FBQUEsUUFDcEcsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksWUFBRSxNQUFLO0FBQUEsUUFDdEMsRUFBRSxRQUFRLFdBQVcsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE9BQU8sSUFBSSxNQUFNLEdBQUksc0JBQU07QUFBQSxRQUMvRSxFQUFFLFFBQVEsZ0JBQWdCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLHdCQUFhO0FBQUEsU0FDMUU7QUFBQTtBQUFBLEVBRUosR0FDRixHQUNGO0FBRUo7QUFFTyxTQUFTLFdBQVcsRUFBRSxRQUFRLFNBQVMsY0FBYyxTQUFTLFFBQVEsZUFBZSxRQUFRLEdBQUc7QUFDckcsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQyxjQUFhLEtBQUssSUFBSSxHQUFHLE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2hHLFFBQU0sUUFBUTtBQUVkLFdBQVMsQ0FBQyxVQUFVO0FBQ2xCLFFBQUksQ0FBQyxRQUFTO0FBQ2QsUUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLEtBQUs7QUFDbkMsb0JBQWMsTUFBTSxPQUFPLENBQUMsQ0FBQztBQUM3QixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBRUQsUUFBTSxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsU0FBUyxTQUFTO0FBRWpELFNBQ0UsZ0JBQUFELEtBQUMsY0FBVyxPQUFNLFNBQVEsTUFBSywrQ0FDN0IsMEJBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFdBQVcsRUFBRSxHQUNsRCwwQkFBQUE7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNDLFNBQU87QUFBQSxNQUNQO0FBQUEsTUFDQSxVQUFVLE9BQU87QUFBQSxNQUNqQixVQUFVO0FBQUEsTUFDVjtBQUFBLE1BQ0EsWUFBWTtBQUFBLE1BQ1osU0FBTztBQUFBLE1BQ1AsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsWUFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLE1BQ3ZCLHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksbUJBQVMsWUFBTyxNQUFLO0FBQUEsUUFDeEQsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE9BQU8sSUFBSSxHQUFHLEdBQUksZ0JBQU0sQ0FBQyxFQUFFLE9BQU8sS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLFFBQ3BHLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGFBQUcsRUFBRSxNQUFNLFFBQVEsV0FBVyxFQUFFLENBQUMsbUJBQWtCO0FBQUEsUUFDbEYsRUFBRSxRQUFRLFdBQVcsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE9BQU8sSUFBSSxNQUFNLEdBQUksc0JBQU07QUFBQSxRQUMvRSxFQUFFLFFBQVEsZ0JBQWdCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLHdCQUFhO0FBQUEsU0FDMUU7QUFBQTtBQUFBLEVBRUosR0FDRixHQUNGO0FBRUo7QUFFTyxTQUFTLFdBQVcsRUFBRSxRQUFRLE1BQU0sU0FBUyxRQUFRLFdBQVcsUUFBUSxHQUFHO0FBQ2hGLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUMsY0FBYSxLQUFLLElBQUksR0FBRyxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUU3RixTQUNFLGdCQUFBRCxLQUFDLGNBQVcsT0FBTSxTQUFRLE1BQUssdURBQzdCLDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxXQUFXLEVBQUUsR0FDbEQsMEJBQUFBO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxPQUFPO0FBQUEsTUFDUCxVQUFVLE9BQU87QUFBQSxNQUNqQixVQUFVLENBQUMsTUFBTTtBQUNmLGtCQUFVLENBQUM7QUFDWCxrQkFBVSxPQUFPLENBQUMsQ0FBQztBQUFBLE1BQ3JCO0FBQUEsTUFDQTtBQUFBLE1BQ0EsWUFBWTtBQUFBLE1BQ1osU0FBTztBQUFBLE1BQ1AsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsWUFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLE1BQ3ZCLHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksbUJBQVMsWUFBTyxNQUFLO0FBQUEsUUFDeEQsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE9BQU8sSUFBSSxHQUFHLEdBQUksWUFBRSxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUU7QUFBQSxRQUM5RixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxZQUFFLE1BQUs7QUFBQSxRQUN0QyxFQUFFLFFBQVEsUUFBUSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsT0FBTyxJQUFJLE1BQU0sR0FBSSxzQkFBTTtBQUFBLFNBQy9FO0FBQUE7QUFBQSxFQUVKLEdBQ0YsR0FDRjtBQUVKO0FBRUEsU0FBUyxnQkFBZ0IsRUFBRSxTQUFTLEdBQUc7QUFDckMsUUFBTSxTQUFTRSxhQUFZLEdBQUdDLE1BQUssR0FBRyxDQUFDO0FBQ3ZDLFFBQU0sU0FBUyxVQUFVO0FBQ3pCLFNBQU8sSUFBSSxDQUFDO0FBQ1osUUFBTUMsU0FBUSxLQUFLLElBQUksR0FBRyxPQUFPLFNBQVMsQ0FBQztBQUMzQyxRQUFNLFVBQVUsS0FBSyxNQUFNQSxTQUFRLE9BQU8sQ0FBQztBQUMzQyxRQUFNLGFBQWEsS0FBSyxJQUFJLEdBQUdBLFNBQVEsQ0FBQztBQUN4QyxRQUFNLFFBQVEsU0FBUyxTQUFTLE9BQU8sQ0FBQyxLQUFLLFlBQVksTUFBTSxRQUFRLFFBQVEsQ0FBQztBQUNoRixRQUFNLE9BQU8sU0FBUyxZQUFZO0FBQ2xDLFFBQU0sVUFBVSxRQUFRLFNBQVMsUUFBUSxLQUFLLElBQUksS0FBSyxPQUFPLFNBQVMsUUFBUSxHQUFHLElBQUk7QUFDdEYsTUFBSSxXQUFXO0FBQ2YsUUFBTSxRQUFRLENBQUM7QUFFZixXQUFTLElBQUksR0FBRyxJQUFJQSxRQUFPLEtBQUs7QUFDOUIsVUFBTSxVQUFVLFNBQVMsU0FBUyxLQUFLLENBQUMsU0FBUztBQUMvQyxrQkFBWSxLQUFLLFNBQVMsUUFBUUE7QUFDbEMsYUFBTyxJQUFJO0FBQUEsSUFDYixDQUFDO0FBQ0QsZUFBVztBQUNYLFVBQU07QUFBQSxNQUNKLGdCQUFBSixLQUFDLFVBQWEsT0FBTyxFQUFFLE9BQU8sS0FBSyxVQUFVLFdBQVcsU0FBUyxTQUFTLE1BQU0sR0FDN0UsZUFBSyxVQUFVLE1BQU0sVUFBVSxXQUFNLFlBRDdCLENBRVg7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFFBQU0sZUFBZSxDQUFDLFdBQVcsU0FBUyxNQUFPLEdBQUcsS0FBSyxNQUFNLE1BQU0sQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFNLFFBQVEsQ0FBQyxDQUFDO0FBQzVHLFFBQU0sYUFBYSxNQUFNO0FBQ3ZCLFVBQU0sT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNoQixRQUFJSyxRQUFPO0FBQ1gsZUFBVyxXQUFXLFNBQVMsVUFBVTtBQUN2QyxZQUFNLFlBQVksUUFBUSxNQUFNLFNBQVMsYUFBYSxRQUFRLE1BQU0sRUFBRSxTQUFTO0FBQy9FLFVBQUlBLFFBQU8sS0FBS0EsUUFBTyxZQUFZLEtBQUssSUFBSSxHQUFHLE9BQU8sU0FBUyxDQUFDLEdBQUc7QUFDakUsYUFBSyxLQUFLLENBQUMsQ0FBQztBQUNaLFFBQUFBLFFBQU87QUFBQSxNQUNUO0FBQ0EsV0FBSyxHQUFHLEVBQUUsRUFBRSxLQUFLLE9BQU87QUFDeEIsTUFBQUEsU0FBUTtBQUFBLElBQ1Y7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQ0UscUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFdBQVcsRUFBRSxHQUNqRDtBQUFBLGNBQVUsS0FDVCxxQkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sY0FBYyxFQUFFLEdBQ2xEO0FBQUEsc0JBQUFMLEtBQUMsaUJBQWMsT0FBTyxTQUFTLFNBQVMsR0FBRyxVQUFVLEtBQU0sT0FBTyxXQUFXLEtBQUssTUFBTSxTQUFTLFdBQVcsT0FBTyxHQUFHLFlBQVksV0FBVyxRQUFRLENBQUMsVUFBVSxXQUFXLE9BQU8sVUFBVSxHQUFHO0FBQUEsTUFDL0wsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLEtBQUssTUFBTSxNQUFNLEdBQUksYUFBRyxTQUFTLFdBQVcsS0FBSyxHQUFHLEdBQUcsS0FBSyxNQUFNLE9BQU8sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFFO0FBQUEsT0FDN0g7QUFBQSxJQUVGLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUFJLGlCQUFNO0FBQUEsSUFDN0MsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxTQUFTLEdBQ25DLHFCQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssYUFDdEIsZ0JBQUFBLEtBQUMsU0FBbUIsT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUMvQyxjQUFJLElBQUksQ0FBQyxZQUNSLHFCQUFDLFNBQXdCLE9BQU8sRUFBRSxlQUFlLE9BQU8sYUFBYSxFQUFFLEdBQ3JFO0FBQUEsc0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxRQUFRLE1BQU0sR0FBRyxvQkFBQztBQUFBLE1BQ3hDLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGNBQUksUUFBUSxLQUFLLEtBQUk7QUFBQSxNQUNyRCxnQkFBQUE7QUFBQSxRQUFDO0FBQUE7QUFBQSxVQUNDLE9BQU8sUUFBUTtBQUFBLFVBQ2YsU0FBUztBQUFBLFVBQ1QsVUFBVTtBQUFBLFVBQ1YsT0FBTztBQUFBLFVBQ1AsV0FBVyxPQUFPO0FBQUEsVUFDbEIsUUFBUTtBQUFBO0FBQUEsTUFDVjtBQUFBLFNBVlEsUUFBUSxLQVdsQixDQUNELEtBZE8sUUFlVixDQUNELEdBQ0g7QUFBQSxLQUNGO0FBRUo7QUFFTyxTQUFTLGNBQWMsRUFBRSxPQUFPLE1BQU0sVUFBVSxTQUFTLFFBQVEsR0FBRztBQUN6RSxZQUFVLE1BQU0sU0FBUyxPQUFPO0FBRWhDLFNBQ0UscUJBQUMsY0FBVyxPQUFjLE1BQUssNENBQzVCO0FBQUEsZ0JBQVksZ0JBQUFBLEtBQUMsbUJBQWdCLFVBQW9CO0FBQUEsSUFDbEQsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFFBQVEsSUFBSSxXQUFXLEVBQUUsR0FDN0QsZUFBSyxXQUFXLElBQ2YsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsOEJBQWdCLElBRS9DLGdCQUFBQSxLQUFDLGFBQVUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLFNBQWtCLFdBQVMsTUFDM0QsZUFBSyxJQUFJLENBQUMsS0FBSyxNQUNkLHFCQUFDLFNBQTZCLE9BQU8sRUFBRSxlQUFlLFVBQVUsV0FBVyxNQUFNLElBQUksSUFBSSxFQUFFLEdBQ3pGO0FBQUEsMkJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsR0FBSSxjQUFJLE1BQUs7QUFBQSxRQUM1QyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLFFBQzVCLElBQUksUUFBUSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxjQUFJLE1BQUs7QUFBQSxTQUN4RDtBQUFBLE1BQ0EsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksY0FBSSxRQUFRLGtCQUFpQjtBQUFBLFNBTnJELEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxFQU8xQixDQUNELEdBQ0gsR0FFSjtBQUFBLEtBQ0Y7QUFFSjtBQUVPLFNBQVMsYUFBYSxFQUFFLFVBQVUsU0FBUyxTQUFTLGdCQUFnQixlQUFlLGVBQWUsVUFBVSxRQUFRLEdBQUc7QUFDNUgsUUFBTSxPQUFPLFNBQVMsUUFBUSxDQUFDLFlBQVksUUFBUSxVQUFVLElBQUksQ0FBQyxVQUFVLFdBQVc7QUFBQSxJQUNyRixHQUFHO0FBQUEsSUFDSCxhQUFhLFFBQVE7QUFBQSxJQUNyQixTQUFTLFFBQVEsVUFBVSxTQUFTO0FBQUEsSUFDcEMsT0FBTyxVQUFVO0FBQUEsSUFDakIsTUFBTSxVQUFVLFFBQVEsVUFBVSxTQUFTO0FBQUEsRUFDN0MsRUFBRSxDQUFDO0FBQ0gsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJQyxjQUFhLEtBQUssQ0FBQyxLQUFLLElBQUk7QUFDMUQsUUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJQSxjQUFhLFVBQVU7QUFDL0MsWUFBVSxNQUFNLFNBQVMsT0FBTztBQUNoQyxXQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFFBQUksTUFBTSxRQUFRLFNBQVMsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxNQUFNLE1BQU07QUFDckQsVUFBSSxRQUFRLEdBQUcsU0FBUyxPQUFRLFNBQVEsQ0FBQyxZQUFZLFlBQVksYUFBYSxhQUFhLFVBQVU7QUFDckcsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxLQUFLLE1BQU0sY0FBYyxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sUUFBUSxHQUFHO0FBQ3pFLG9CQUFjLFFBQVEsQ0FBQztBQUN2QixZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLEtBQUssTUFBTSxjQUFjLE1BQU0sUUFBUSxNQUFNLFFBQVEsT0FBTyxRQUFRLEdBQUc7QUFDekUsZUFBUyxRQUFRLENBQUM7QUFDbEIsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sZ0JBQWdCLENBQUMsUUFBUSxHQUFHLElBQUksT0FBTyxpQkFBTyxjQUFJLElBQUksSUFBSSxXQUFXLElBQUksV0FBVyxJQUFJLE9BQU8sT0FBTztBQUU1RyxTQUNFLGdCQUFBRCxLQUFDLGNBQVcsT0FBTSxrQkFBaUIsTUFBSyxpR0FBc0YsWUFBVSxNQUN0SSwrQkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFdBQVcsR0FBRyxLQUFLLEVBQUUsR0FDdkU7QUFBQSxvQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsUUFBUSxPQUFPLFVBQVUsRUFBRSxHQUMvRCxvQkFDQyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxpQ0FBbUIsSUFDaEQsS0FBSyxXQUFXLElBQ2xCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLG1DQUFxQixJQUVwRCxnQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLFNBQU87QUFBQSxRQUNQLE9BQU87QUFBQSxRQUNQLFNBQVMsV0FBVyxLQUFLLE1BQU07QUFBQSxRQUMvQixhQUFZO0FBQUEsUUFDWixRQUFRLENBQUMsT0FBTyxRQUFRRCxZQUFXLE9BQU8sR0FBRyxJQUFJLFdBQVcsSUFBSSxJQUFJLFVBQVUsRUFBRSxFQUFFLEtBQUs7QUFBQSxRQUN2RixnQkFBZ0I7QUFBQSxRQUNoQixVQUFVO0FBQUEsUUFDVixVQUFVO0FBQUEsUUFDVixXQUFTO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxZQUFZLENBQUMsS0FBSyxFQUFFLFVBQVUsU0FBUyxPQUFPLE1BQzVDLHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNuQztBQUFBLGNBQUksV0FBVyxJQUFJLFNBQVMsZ0JBQUFDLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLEdBQUksb0JBQUssSUFBSSxXQUFXLElBQUc7QUFBQSxVQUNqRixxQkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sSUFBSSxXQUFZLFNBQVMsT0FBTyxJQUFJLFlBQWEsTUFBTSxVQUFVLEVBQUUsR0FDckc7QUFBQSw0QkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsUUFBUSxFQUFFLEdBQ25DLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLFdBQVcsVUFBVSxHQUFHLEdBQUksY0FBSSxVQUFVLEtBQUssY0FBYyxHQUFHLENBQUMsS0FBSyxJQUFJLGFBQVksR0FDcEk7QUFBQSxZQUNBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE1BQU0sR0FBSSxlQUFLLElBQUksVUFBVSxjQUFjLEVBQUUsR0FBRyxJQUFJLFNBQVMsUUFBUSxJQUFJLE9BQU8sRUFBRSxJQUFJLGFBQWEsSUFBRztBQUFBLGFBQ25KO0FBQUEsV0FDRjtBQUFBO0FBQUEsSUFFSixHQUVKO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxnQkFBYTtBQUFBLElBQ2QsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxJQUFJLFVBQVUsVUFBVSxFQUFFLEdBQzNFLGtCQUFRLEdBQUcsU0FBUyxTQUNuQixnQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUVDLFNBQU87QUFBQSxRQUNQLE9BQU8sUUFBUSxFQUFFO0FBQUEsUUFDakIsU0FBUyxXQUFXLEtBQUssTUFBTTtBQUFBLFFBQy9CLGFBQVk7QUFBQSxRQUNaLFFBQVEsQ0FBQyxPQUFPLFlBQVlELFlBQVcsT0FBTyxRQUFRLEtBQUssS0FBSztBQUFBLFFBQ2hFLFVBQVU7QUFBQSxRQUNWLFVBQVU7QUFBQSxRQUNWLFdBQVM7QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLFlBQVksQ0FBQyxTQUFTLEVBQUUsVUFBVSxTQUFTLE9BQU8sTUFDaEQscUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLElBQUksV0FBWSxTQUFTLE9BQU8sSUFBSSxZQUFhLE1BQU0sVUFBVSxFQUFFLEdBQ3JHO0FBQUEsMEJBQUFDLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUNuQywwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFdBQVcsVUFBVSxTQUFTLFVBQVUsV0FBVyxHQUFJLGtCQUFRLE1BQU0sUUFBUSxPQUFPLEdBQUcsR0FBRSxHQUNqSDtBQUFBLFVBQ0EsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxXQUFXLFVBQVUsTUFBTSxHQUFJLGVBQUssUUFBUSxLQUFLLElBQUksUUFBUSxVQUFVLElBQUksU0FBUyxPQUFPLEtBQUssUUFBUSxRQUFRLEVBQUUsQ0FBQyxJQUFHO0FBQUEsV0FDOUk7QUFBQTtBQUFBLE1BaEJHLFFBQVEsRUFBRTtBQUFBLElBa0JqQixJQUVBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLHlCQUFXLEdBRTlDO0FBQUEsS0FDRixHQUNGO0FBRUo7QUFFTyxTQUFTLGFBQWEsRUFBRSxXQUFBTSxZQUFXLFNBQVMsV0FBVyxjQUFjLFFBQVEsR0FBRztBQUNyRixRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlMLGNBQWEsQ0FBQztBQUN4QyxZQUFVLE1BQU0sU0FBUyxPQUFPO0FBRWhDLFFBQU0sV0FBVyxNQUFNSyxXQUFVLEtBQUssSUFBSSxNQUFNLEdBQUdBLFdBQVUsU0FBUyxDQUFDLENBQUMsS0FBSztBQUU3RSxXQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFVBQU0sSUFBSSxTQUFTO0FBQ25CLFFBQUksS0FBSyxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sRUFBRSxXQUFXO0FBQ3ZELG1CQUFhLENBQUM7QUFDZCxZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBRUQsU0FDRSxnQkFBQU4sS0FBQyxjQUFXLE9BQU0sMEJBQXlCLE1BQUssdURBQzlDLDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxXQUFXLEVBQUUsR0FDbEQsMEJBQUFBO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxTQUFPO0FBQUEsTUFDUCxPQUFPTTtBQUFBLE1BQ1AsVUFBVSxNQUFNO0FBQUEsTUFDaEIsVUFBVTtBQUFBLE1BQ1Y7QUFBQSxNQUNBLFlBQVk7QUFBQSxNQUNaLFNBQU87QUFBQSxNQUNQLFVBQVUsQ0FBQyxNQUFNLFVBQVUsQ0FBQztBQUFBLE1BQzVCLFVBQVU7QUFBQSxNQUNWLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUN2QixxQkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSx3QkFBQU4sS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxHQUFJLG1CQUFTLFlBQU8sTUFBSztBQUFBLFFBQ3hELGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLE9BQU8sSUFBSSxNQUFNLEdBQUksWUFBRSxZQUFZLFdBQU0sVUFBSTtBQUFBLFFBQ2pGLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxPQUFPLElBQUksR0FBRyxHQUFJLGNBQUksRUFBRSxLQUFLLE1BQUs7QUFBQSxRQUNqRSxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsUUFBUSxFQUFFLEdBQ25DLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLE1BQU0sR0FDL0MsWUFBRSxZQUFZLFlBQVksRUFBRSxRQUFRLE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLGlCQUNqRSxHQUNGO0FBQUEsU0FDRjtBQUFBO0FBQUEsRUFFSixHQUNGLEdBQ0Y7QUFFSjtBQUVPLFNBQVMsYUFBYSxFQUFFLFNBQVMsU0FBUyxVQUFVLFFBQVEsR0FBRztBQUNwRSxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlDLGNBQWEsQ0FBQztBQUN4QyxRQUFNLENBQUMsTUFBTSxPQUFPLElBQUlBLGNBQWEsQ0FBQztBQUN0QyxZQUFVLE1BQU0sU0FBUyxPQUFPO0FBQ2hDLGNBQVksTUFBTSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFJO0FBQzdDLE9BQUssS0FBSztBQUVWLFFBQU0sV0FBVyxNQUFNLFFBQVEsS0FBSyxJQUFJLE1BQU0sR0FBRyxRQUFRLFNBQVMsQ0FBQyxDQUFDLEtBQUs7QUFFekUsV0FBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxDQUFDLFFBQVM7QUFDZCxVQUFNLElBQUksU0FBUztBQUNuQixRQUFJLEtBQUssTUFBTSxRQUFRLE1BQU0sUUFBUSxLQUFLO0FBQ3hDLGVBQVMsQ0FBQztBQUNWLFlBQU0sZ0JBQWdCO0FBQUEsSUFDeEI7QUFBQSxFQUNGLENBQUM7QUFFRCxRQUFNLFlBQVksQ0FBQyxPQUFPO0FBQ3hCLFVBQU0sT0FBTyxLQUFLLElBQUksR0FBRyxLQUFLLE9BQU8sS0FBSyxLQUFLLElBQUksS0FBSyxHQUFJLENBQUM7QUFDN0QsUUFBSSxPQUFPLEdBQUksUUFBTyxNQUFNLElBQUk7QUFDaEMsVUFBTSxPQUFPLEtBQUssTUFBTSxPQUFPLEVBQUU7QUFDakMsUUFBSSxPQUFPLEdBQUksUUFBTyxNQUFNLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDOUMsV0FBTyxNQUFNLEtBQUssTUFBTSxPQUFPLEVBQUUsQ0FBQyxLQUFLLE9BQU8sRUFBRTtBQUFBLEVBQ2xEO0FBRUEsU0FDRSxnQkFBQUQsS0FBQyxjQUFXLE9BQU0sc0JBQXFCLE1BQUssMERBQzFDLDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxXQUFXLEVBQUUsR0FDakQsa0JBQVEsV0FBVyxJQUNsQixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxnRkFBa0UsSUFFakcsZ0JBQUFBO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxTQUFPO0FBQUEsTUFDUCxPQUFPO0FBQUEsTUFDUCxVQUFVLE1BQU07QUFBQSxNQUNoQixVQUFVO0FBQUEsTUFDVjtBQUFBLE1BQ0EsWUFBWTtBQUFBLE1BQ1osWUFBWTtBQUFBLE1BQ1osS0FBSztBQUFBLE1BQ0wsU0FBTztBQUFBLE1BQ1AsVUFBVSxDQUFDLE1BQU0sU0FBUyxDQUFDO0FBQUEsTUFDM0IsVUFBVTtBQUFBLE1BQ1YsWUFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLE1BQ3ZCLHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNwQztBQUFBLDZCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksbUJBQVMsWUFBTyxNQUFLO0FBQUEsVUFDeEQsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE9BQU8sSUFBSSxHQUFHLEdBQUksb0JBQUssRUFBRSxFQUFFLElBQUc7QUFBQSxVQUM3RCxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLFVBQzdCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLG9CQUFVLEVBQUUsRUFBRSxHQUFFO0FBQUEsVUFDaEQsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksZUFBSyxJQUFJLEtBQUssRUFBRSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsSUFBRztBQUFBLFdBQzdFO0FBQUEsUUFDQSxxQkFBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsUUFBUSxHQUFHLGVBQWUsTUFBTSxHQUN6RDtBQUFBLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGtCQUFPO0FBQUEsVUFDdkMsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsVUFBVSxZQUFZLE9BQU8sUUFBUSxHQUFJLFlBQUUsS0FBSyxRQUFRLE9BQU8sR0FBRyxHQUFFO0FBQUEsV0FDckY7QUFBQSxTQUNGO0FBQUE7QUFBQSxFQUVKLEdBRUosR0FDRjtBQUVKO0FBRUEsU0FBUyxVQUFVLFFBQVE7QUFDekIsUUFBTSxVQUFVO0FBQUEsSUFDZCxXQUFXLEVBQUUsTUFBTSxVQUFLLE9BQU8sT0FBTyxFQUFFO0FBQUEsSUFDeEMsWUFBWSxFQUFFLE1BQU0sVUFBSyxPQUFPLFVBQVU7QUFBQSxJQUMxQyxPQUFPLEVBQUUsTUFBTSxVQUFLLE9BQU8sSUFBSTtBQUFBLElBQy9CLFVBQVUsRUFBRSxNQUFNLFVBQUssT0FBTyxNQUFNO0FBQUEsSUFDcEMsTUFBTSxFQUFFLE1BQU0sVUFBSyxPQUFPLE1BQU07QUFBQSxFQUNsQztBQUNBLFNBQU8sUUFBUSxNQUFNLEtBQUssUUFBUTtBQUNwQztBQUVBLFNBQVMsVUFBVSxFQUFFLE9BQU8sUUFBUSxTQUFTLEdBQUc7QUFDOUMsU0FDRSxxQkFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFNBQVMsR0FDcEM7QUFBQSxvQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsT0FBTyxJQUFJLE1BQU0sR0FBSSxpQkFBTTtBQUFBLElBQ3pEO0FBQUEsSUFDRCxnQkFBQUEsS0FBQyxVQUFLLGVBQUM7QUFBQSxLQUNUO0FBRUo7QUFFQSxTQUFTLGNBQWMsRUFBRSxTQUFTLFFBQVEsUUFBUSxXQUFXLFNBQVMsR0FBRztBQUN2RSxRQUFNLFVBQVUsU0FBUyxnQkFBZ0IsT0FBTyxPQUFPLElBQUk7QUFDM0QsUUFBTSxVQUFVLENBQUMsQ0FBQztBQUNsQixRQUFNLENBQUMsTUFBTSxPQUFPLElBQUlDLGNBQWEsUUFBUSxRQUFRLEVBQUU7QUFDdkQsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJQSxjQUFhLFFBQVEsU0FBUyxRQUFRO0FBQ2hFLFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUEsY0FBYSxTQUFTLFFBQVEsT0FBTztBQUN2RSxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlBLGNBQWEsU0FBUyxTQUFTLFNBQVMsUUFBUSxNQUFNLFFBQVEsV0FBVyxFQUFFO0FBQ3ZHLFFBQU0saUJBQWlCLFNBQVMsU0FBUyxTQUNyQyxPQUFPLFlBQVksT0FBTyxLQUFLLFFBQVEsT0FBTyxFQUFFLElBQUksQ0FBQ00sVUFBUyxDQUFDQSxPQUFNLGVBQWUsQ0FBQyxDQUFDLElBQ3RGLENBQUM7QUFDTCxRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlOLGNBQWEscUJBQXFCLElBQUksY0FBYyxFQUFFLEtBQUssQ0FBQztBQUUxRixRQUFNLEtBQUssU0FBUyxFQUFFLFNBQVMsVUFBVSxjQUFjLE9BQU8sQ0FBQztBQUMvRCxNQUFJLENBQUMsU0FBUztBQUNaLE9BQUcsS0FBSyxNQUFNO0FBQ2QsT0FBRyxLQUFLLE9BQU87QUFBQSxFQUNqQjtBQUNBLEtBQUcsS0FBSyxXQUFXO0FBQ25CLEtBQUcsS0FBSyxRQUFRO0FBQ2hCLE1BQUksVUFBVSxNQUFNLE9BQVEsSUFBRyxLQUFLLFNBQVM7QUFDN0MsS0FBRyxLQUFLLE1BQU07QUFDZCxLQUFHLEtBQUssUUFBUTtBQUVoQixXQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFFBQUksTUFBTSxRQUFRLFVBQVU7QUFDMUIsZUFBUztBQUNULFlBQU0sZ0JBQWdCO0FBQUEsSUFDeEI7QUFBQSxFQUNGLENBQUM7QUFFRCxRQUFNLE9BQU8sVUFBVSxNQUFNO0FBRTdCLFFBQU0sU0FBUyxNQUFNO0FBQ25CLFVBQU0sYUFBYSxLQUFLLEVBQUUsS0FBSztBQUMvQixVQUFNLFFBQVEsT0FBTyxFQUFFLEtBQUs7QUFDNUIsUUFBSSxDQUFDLGNBQWMsS0FBSyxLQUFLLFVBQVUsRUFBRyxRQUFPLFVBQVUsNENBQTRDO0FBQ3ZHLFFBQUksQ0FBQyxNQUFPLFFBQU8sVUFBVSxPQUFPLG9CQUFvQixxQkFBcUI7QUFDN0UsUUFBSSxRQUFRLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRyxRQUFPLFVBQVUseUNBQXlDO0FBQ25HLFFBQUksQ0FBQyxRQUFRLGVBQWUsS0FBSyxLQUFLLEVBQUcsUUFBTyxVQUFVLGtFQUFrRTtBQUM1SCxVQUFNLFFBQVEsUUFBUSxFQUFFLEtBQUs7QUFDN0IsUUFBSSxPQUFPLFFBQVEsUUFBUSxHQUFHLEtBQUssSUFBSSxLQUFLLEtBQUs7QUFDakQsUUFBSTtBQUNGLFlBQU0sU0FBUyxnQkFBZ0IsSUFBSTtBQUNuQyxVQUFJLE9BQU8sU0FBUyxVQUFVLFNBQVMsU0FBUyxRQUFRO0FBQ3RELG1CQUFXLENBQUMsUUFBUSxXQUFXLEtBQUssT0FBTyxRQUFRLE9BQU8sT0FBTyxHQUFHO0FBQ2xFLGNBQUksZ0JBQWdCLG1CQUFtQixRQUFRLFFBQVEsTUFBTSxNQUFNLE9BQVcsUUFBTyxRQUFRLE1BQU0sSUFBSSxRQUFRLFFBQVEsTUFBTTtBQUFBLFFBQy9IO0FBQ0EsZUFBTyxxQkFBcUIsT0FBTyxLQUFLLE9BQU8sT0FBTztBQUFBLE1BQ3hEO0FBQUEsSUFDRixTQUFTLEtBQUs7QUFDWixhQUFPLFVBQVUsSUFBSSxPQUFPO0FBQUEsSUFDOUI7QUFDQSxXQUFPLFlBQVksTUFBTSxNQUFNLENBQUM7QUFBQSxFQUNsQztBQUVBLFNBQ0UscUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFdBQVcsRUFBRSxHQUNqRDtBQUFBLEtBQUMsV0FDQSxnQkFBQUQsS0FBQyxhQUFVLE9BQU0sUUFBTyxRQUFRLEdBQUcsR0FBRyxNQUFNLEdBQzFDLDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLElBQUksVUFBVSxVQUFVLEVBQUUsR0FDdEMsMEJBQUFBLEtBQUMsYUFBVSxTQUFTLFdBQVcsR0FBRyxHQUFHLE1BQU0sR0FBRyxhQUFZLFVBQVMsVUFBVSxTQUFTLEdBQ3hGLEdBQ0Y7QUFBQSxJQUVELENBQUMsV0FDQSxnQkFBQUEsS0FBQyxhQUFVLE9BQU0sU0FBUSxRQUFRLEdBQUcsR0FBRyxPQUFPLEdBQzVDLDBCQUFBQSxLQUFDLFNBQU0sU0FBUyxDQUFDLFVBQVUsU0FBUyxHQUFHLFVBQVUsTUFBTSxHQUFHLFVBQVUsVUFBVSxTQUFTLFdBQVcsR0FBRyxHQUFHLE9BQU8sR0FBRyxHQUNwSDtBQUFBLElBRUYsZ0JBQUFBLEtBQUMsYUFBVSxPQUFNLGFBQVksUUFBUSxHQUFHLEdBQUcsV0FBVyxHQUNwRCwwQkFBQUEsS0FBQyxTQUFNLFNBQVMsQ0FBQyxTQUFTLE1BQU0sR0FBRyxVQUFVLFVBQVUsR0FBRyxVQUFVLGNBQWMsU0FBUyxXQUFXLEdBQUcsR0FBRyxXQUFXLEdBQUcsR0FDNUg7QUFBQSxJQUNBLGdCQUFBQSxLQUFDLGFBQVUsT0FBTyxPQUFPLFFBQVEsV0FBVyxRQUFRLEdBQUcsR0FBRyxRQUFRLEdBQ2hFLDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLElBQUksVUFBVSxVQUFVLEVBQUUsR0FDdEMsMEJBQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDQyxTQUFTLFdBQVcsR0FBRyxHQUFHLFFBQVE7QUFBQSxRQUNsQyxhQUFhLE9BQU8sK0JBQStCO0FBQUEsUUFDbkQsY0FBYyxPQUFPO0FBQUEsUUFDckIsVUFBVTtBQUFBO0FBQUEsSUFDWixHQUNGLEdBQ0Y7QUFBQSxJQUNDLFFBQ0MsZ0JBQUFBLEtBQUMsYUFBVSxPQUFNLHFCQUFvQixRQUFRLEdBQUcsR0FBRyxTQUFTLEdBQzFELDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLElBQUksVUFBVSxVQUFVLEVBQUUsR0FDdEMsMEJBQUFBLEtBQUMsYUFBVSxTQUFTLFdBQVcsR0FBRyxHQUFHLFNBQVMsR0FBRyxhQUFZLDRDQUEyQyxjQUFjLFFBQVEsR0FBRyxVQUFVLFlBQVksR0FDekosR0FDRjtBQUFBLElBRUYscUJBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsc0JBQUFBLEtBQUMsVUFBTyxPQUFPLFVBQVUsU0FBUyxPQUFPLFNBQVMsUUFBUSxTQUFTLFdBQVcsR0FBRyxHQUFHLE1BQU0sR0FBRztBQUFBLE1BQzdGLGdCQUFBQSxLQUFDLFVBQUssZ0JBQUU7QUFBQSxNQUNSLGdCQUFBQSxLQUFDLFVBQU8sT0FBTSxVQUFTLFNBQVMsVUFBVSxTQUFTLFdBQVcsR0FBRyxHQUFHLFFBQVEsR0FBRyxTQUFRLE9BQU07QUFBQSxPQUMvRjtBQUFBLEtBQ0Y7QUFFSjtBQUVPLFNBQVMsU0FBUyxFQUFFLFNBQVMsU0FBUyxVQUFVLGFBQWEsVUFBVSxPQUFPLFFBQVEsV0FBVyxRQUFRLEdBQUc7QUFDakgsUUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJQyxjQUFhLElBQUk7QUFDekMsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJQSxjQUFhLENBQUM7QUFDeEMsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJQSxjQUFhLElBQUk7QUFDL0MsWUFBVSxNQUFNLFdBQVcsQ0FBQyxLQUFLLEdBQUcsTUFBTyxRQUFRLElBQUksV0FBVyxJQUFJLElBQUksUUFBUSxDQUFFO0FBRXBGLFFBQU0sV0FBVyxNQUFNLFFBQVEsS0FBSyxJQUFJLE1BQU0sR0FBRyxRQUFRLFNBQVMsQ0FBQyxDQUFDLEtBQUs7QUFDekUsUUFBTSxTQUFTLE1BQU0sUUFBUSxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsUUFBUSxDQUFDLEtBQUs7QUFFbEUsTUFBSSxRQUFRLEtBQUssT0FBTyxHQUFHO0FBQ3pCLFVBQU0sU0FBUyxPQUFPO0FBQ3RCLFVBQU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxZQUFZLFFBQVEsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEtBQUs7QUFDOUUsV0FDRSxnQkFBQUQ7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLE9BQU8sZ0JBQWdCLE9BQU8sSUFBSSxLQUFLLE9BQU8sTUFBTSxNQUFNLElBQUksT0FBTyxNQUFNLFdBQVcsSUFBSSxTQUFTLE9BQU87QUFBQSxRQUMxRyxNQUFLO0FBQUEsUUFDTCxZQUFVO0FBQUEsUUFFViwwQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFdBQVcsR0FBRyxVQUFVLEVBQUUsR0FDM0UsaUJBQU8sTUFBTSxXQUFXLElBQ3ZCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLHlEQUEyQyxJQUUxRSxnQkFBQUEsS0FBQyxhQUFVLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxTQUFrQixXQUFTLE1BQzNELGlCQUFPLE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFDcEIscUJBQUMsU0FBaUIsT0FBTyxFQUFFLGVBQWUsVUFBVSxXQUFXLE1BQU0sSUFBSSxJQUFJLEVBQUUsR0FDN0U7QUFBQSwwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxHQUFJLFlBQUUsTUFBSztBQUFBLFVBQzFDLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLG1CQUFTLENBQUMsR0FBRTtBQUFBLGFBRnBDLEVBQUUsSUFHWixDQUNELEdBQ0gsR0FFSjtBQUFBO0FBQUEsSUFDRjtBQUFBLEVBRUo7QUFFQSxTQUNFO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxPQUFNO0FBQUEsTUFDTixNQUFNLEtBQUssSUFDUCw0RUFDQTtBQUFBLE1BQ0osWUFBVTtBQUFBLE1BRVY7QUFBQSx3QkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFdBQVcsR0FBRyxVQUFVLEVBQUUsR0FDM0UsZUFBSyxJQUNKLGdCQUFBQTtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0M7QUFBQSxZQUNBLFFBQVEsS0FBSyxNQUFNLFFBQVEsT0FBTyxLQUFLO0FBQUEsWUFDdkMsUUFBUSxDQUFDLE1BQU0sTUFBTSxVQUFVO0FBQzdCLGtCQUFJLEtBQUssTUFBTSxNQUFPLE9BQU0sTUFBTSxNQUFNLEtBQUs7QUFBQSxrQkFDeEMsUUFBTyxNQUFNLElBQUk7QUFDdEIsc0JBQVEsSUFBSTtBQUFBLFlBQ2Q7QUFBQSxZQUNBO0FBQUEsWUFDQSxVQUFVLE1BQU0sUUFBUSxJQUFJO0FBQUE7QUFBQSxRQUM5QixJQUNFLFFBQVEsV0FBVyxJQUNyQixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRywyREFBNkMsSUFFNUUsZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxTQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxVQUFVLE1BQU07QUFBQSxZQUNoQixVQUFVO0FBQUEsWUFDVjtBQUFBLFlBQ0EsWUFBWTtBQUFBLFlBQ1osU0FBTztBQUFBLFlBQ1AsWUFBWTtBQUFBLFlBQ1osVUFBVSxDQUFDLE1BQU0sU0FBUyxFQUFFLElBQUk7QUFBQSxZQUNoQyxVQUFVO0FBQUEsWUFDVixZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFBTTtBQUM3QixvQkFBTSxLQUFLLFVBQVUsRUFBRSxNQUFNO0FBQzdCLHFCQUNFLHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNwQztBQUFBLHFDQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLGtDQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksbUJBQVMsWUFBTyxNQUFLO0FBQUEsa0JBQ3hELGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sR0FBRyxNQUFNLEdBQUksYUFBRyxNQUFLO0FBQUEsa0JBQzNDLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxPQUFPLElBQUksR0FBRyxHQUFJLGNBQUksRUFBRSxLQUFLLE9BQU8sS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBRztBQUFBLGtCQUN0RyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsUUFBUSxFQUFFLEdBQ25DLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLEVBQUUsV0FBVyxVQUFVLE1BQU0sTUFBTSxHQUM1RSxZQUFFLFdBQVcsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLGNBQWMsR0FBRyxFQUFFLFNBQVMsV0FBVyxFQUFFLFFBQzFGLEdBQ0Y7QUFBQSxtQkFDRjtBQUFBLGdCQUNBLHFCQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxRQUFRLEVBQUUsR0FDNUM7QUFBQSxrQ0FBQUEsS0FBQyxVQUFNLG1CQUFRO0FBQUEsa0JBQ2YsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUNuQywwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxVQUFVLFlBQVksT0FBTyxNQUFNLEdBQUksc0JBQVksaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEdBQUUsR0FDakc7QUFBQSxrQkFDQSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxlQUFLLEVBQUUsVUFBVSxZQUFZLFlBQVksUUFBUSxJQUFHO0FBQUEsbUJBQ3RGO0FBQUEsaUJBQ0Y7QUFBQSxZQUVKO0FBQUE7QUFBQSxRQUNGLEdBRUo7QUFBQSxRQUNDLENBQUMsS0FBSyxLQUNMLGdCQUFBQTtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0M7QUFBQSxZQUNBLE9BQU8sQ0FBQyxRQUFRO0FBQ2Qsb0JBQU0sSUFBSSxTQUFTO0FBQ25CLGtCQUFJLFFBQVEsSUFBSyxTQUFRLEtBQUs7QUFBQSx1QkFDckIsS0FBSyxRQUFRLElBQUssU0FBUSxDQUFDO0FBQUEsdUJBQzNCLEtBQUssUUFBUSxJQUFLLGFBQVksRUFBRSxJQUFJO0FBQUEsdUJBQ3BDLEtBQUssUUFBUSxTQUFVLFVBQVMsRUFBRSxJQUFJO0FBQUEsdUJBQ3RDLEtBQUssUUFBUSxJQUFLLFlBQVcsRUFBRSxJQUFJO0FBQUEsWUFDOUM7QUFBQTtBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUEsRUFFSjtBQUVKO0FBRUEsU0FBUyxRQUFRLEVBQUUsU0FBUyxNQUFNLEdBQUc7QUFDbkMsV0FBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxDQUFDLFFBQVM7QUFDZCxRQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsS0FBSztBQUNuQyxZQUFNLFFBQVE7QUFDZCxZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFLFNBQVMsTUFBTSxHQUFHLEdBQUc7QUFDM0QsWUFBTSxNQUFNLEdBQUc7QUFDZixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBQ0QsU0FBTztBQUNUOzs7QUZuckNTLFNBQ0wsT0FBQVEsTUFESyxRQUFBQyxhQUFBO0FBSlQsU0FBUyxXQUFXLEVBQUUsS0FBSyxVQUFVLE9BQU8sSUFBSSxHQUFHO0FBQ2pELFFBQU0sU0FBU0MsV0FBVTtBQUN6QixRQUFNLEtBQUssSUFBSSxJQUFJLE1BQU07QUFDekIsUUFBTSxRQUFRLGVBQWUsSUFBSSxLQUFLLEtBQUssSUFBSSxTQUFTLE9BQU87QUFDL0QsU0FBTyxnQkFBQUQsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFFBQVEsR0FBRyxZQUFZLEdBQUcsSUFBSSxXQUFXLFFBQVEsT0FBVSxHQUNwSDtBQUFBLG9CQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxVQUFVLE9BQU8sTUFBTSxNQUFNLFVBQVUsV0FBVyxHQUFJLGFBQUcsSUFBSSxXQUFXLFNBQVMsV0FBTSxRQUFHLElBQUksSUFBSSxJQUFJLElBQUc7QUFBQSxJQUMxSSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFdBQVcsVUFBVSxTQUFTLFVBQVUsV0FBVyxHQUFJLGNBQUksV0FBVyxTQUFTLElBQUksWUFBWSxZQUFZLElBQUksZ0JBQWdCLGdCQUFnQixRQUFRLElBQUksYUFBYSxDQUFDLEtBQUssUUFBTztBQUFBLEtBQzdNO0FBQ0Y7QUFFTyxTQUFTLGlCQUFpQixFQUFFLFFBQVEsVUFBVSxPQUFBRyxRQUFPLFNBQVMsT0FBTyxTQUFTLEdBQUc7QUFDdEYsUUFBTSxRQUFRQyxVQUFTLEVBQUUsU0FBUyxNQUFNLFFBQVEsTUFBTSxDQUFDO0FBQ3ZELFFBQU0sQ0FBQyxLQUFLLE1BQU0sSUFBSUMsY0FBYSxLQUFLLElBQUksQ0FBQztBQUM3QyxFQUFBQyxhQUFZLE1BQU0sT0FBTyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUs7QUFDM0MsTUFBSSxTQUFVLE9BQU0sTUFBTSxRQUFRO0FBQ2xDLFFBQU0sT0FBT0MsU0FBUTtBQUNyQixTQUFPLGdCQUFBTixNQUFDLFNBQUksT0FBTyxFQUFFLE9BQUFFLFFBQU8sWUFBWSxHQUFHLFFBQVEsUUFBUSxlQUFlLFVBQVUsSUFBSSxTQUFTLEdBQy9GO0FBQUEsb0JBQUFILEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE1BQU0sTUFBTSxVQUFVLEVBQUUsR0FBRyxzQkFBUTtBQUFBLElBQ2pFLFdBQVcsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcscUJBQU87QUFBQSxJQUNqRCxTQUFTLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxVQUFVLFdBQVcsR0FBSSxpQkFBTTtBQUFBLElBQ3RFLGdCQUFBQSxLQUFDUSxZQUFBLEVBQVUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLGFBQWEsT0FBTyxjQUFjLEdBQUcsV0FBVyxDQUFDLFlBQVksU0FBUyxRQUFRLGFBQWEsR0FDM0gsaUJBQU8sSUFBSSxDQUFDLE9BQU8sVUFBVSxnQkFBQVAsTUFBQyxTQUFvQixPQUFPLEVBQUUsZUFBZSxVQUFVLFdBQVcsUUFBUSxJQUFJLElBQUksRUFBRSxHQUNoSDtBQUFBLHNCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxVQUFVLFlBQVksVUFBVSxFQUFFLEdBQUksZ0JBQU0sUUFBUSxPQUFPLE1BQU0sTUFBTSxJQUFJLFdBQVcsT0FBTyxHQUFHLElBQUksTUFBTSxNQUFNLElBQUksTUFBTSxLQUFLLE1BQU0sSUFBSSxNQUFNLEtBQUk7QUFBQSxNQUMvSyxNQUFNLFNBQVMsSUFBSSxDQUFDLFFBQVEsZ0JBQUFBLEtBQUMsY0FBd0IsS0FBVSxVQUFVLElBQUksT0FBTyxVQUFVLE9BQWMsS0FBSyxJQUFJLEtBQXhFLElBQUksRUFBdUUsQ0FBRTtBQUFBLFNBRnJGLE1BQU0sR0FHOUMsQ0FBTSxHQUNSO0FBQUEsS0FDRjtBQUNGOzs7QUtqQ08sU0FBUyxnQkFBZ0IsTUFBTTtBQUNwQyxRQUFNLFNBQVMsb0JBQUksSUFBSTtBQUN2QixhQUFXLE9BQU8sTUFBTTtBQUN0QixRQUFJLENBQUMsSUFBSSxNQUFNLEtBQUssRUFBRztBQUN2QixRQUFJLENBQUMsT0FBTyxJQUFJLElBQUksR0FBRyxFQUFHLFFBQU8sSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ2hELFdBQU8sSUFBSSxJQUFJLEdBQUcsRUFBRSxLQUFLLEdBQUc7QUFBQSxFQUM5QjtBQUNBLFNBQU8sQ0FBQyxHQUFHLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssUUFBUSxPQUFPLEVBQUUsS0FBSyxTQUFTLEVBQUU7QUFDeEc7QUFFTyxTQUFTLG1CQUFtQixNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQUc7QUFDaEUsTUFBSSxLQUFLLEtBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxRQUFRLEVBQUcsUUFBTztBQUNwRCxRQUFNLFFBQVEsS0FBSyxJQUFJLEdBQUcsU0FBUyxVQUFVLENBQUMsUUFBUSxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQzFFLFNBQU8sS0FBSyxLQUFLLElBQUksT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEdBQUcsTUFBTTtBQUN2RDtBQUVPLFNBQVMsa0JBQWtCLE1BQU0sVUFBVSxPQUFPLFFBQVE7QUFDL0QsUUFBTSxRQUFRLEtBQUssSUFBSSxHQUFHLEtBQUssVUFBVSxDQUFDLFFBQVEsSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUN0RSxRQUFNLE9BQU8sS0FBSyxJQUFJLEdBQUcsS0FBSyxNQUFNLFNBQVMsQ0FBQyxDQUFDO0FBQy9DLE1BQUk7QUFDSixNQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsSUFBSyxRQUFPLFFBQVE7QUFBQSxXQUMzQyxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQUssUUFBTyxRQUFRO0FBQUEsV0FDaEQsTUFBTSxRQUFRLE1BQU0sUUFBUSxNQUFNLElBQUssUUFBTztBQUFBLFdBQzlDLE1BQU0sUUFBUSxPQUFPLE1BQU0sUUFBUSxPQUFRLFFBQU8sUUFBUTtBQUFBLFdBQzFELE1BQU0sUUFBUSxPQUFPLE1BQU0sUUFBUSxLQUFNLFFBQU8sUUFBUTtBQUFBLFdBQ3hELE1BQU0sUUFBUSxJQUFLLFFBQU87QUFBQSxXQUMxQixNQUFNLFFBQVEsSUFBSyxRQUFPLEtBQUssU0FBUztBQUFBLE1BQzVDLFFBQU87QUFDWixTQUFPLEtBQUssS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLEtBQUssU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTTtBQUNuRTtBQUVPLFNBQVMsMEJBQTBCLE1BQU0sYUFBYTtBQUMzRCxTQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsMEJBQTBCLENBQUMsRUFBRSxPQUFPLFdBQVMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNuRztBQUVPLFNBQVMsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLFdBQVcsU0FBUyxTQUFBUyxVQUFTLFNBQVMsWUFBWSxTQUFTLFVBQVUsT0FBTyxRQUFRLFVBQVUsR0FBRztBQUMzSixTQUFPLFNBQVMsTUFBTSxnQkFBZ0IsS0FBSyxjQUFjLFVBQVUsWUFBWSxVQUFVLENBQUNBLFlBQVcsVUFBVSxLQUFLLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxXQUFXLEtBQUssY0FBYztBQUN0TTtBQUVPLFNBQVMsZ0JBQWdCLEtBQUs7QUFDbkMsU0FBTyxLQUFLLFdBQVcsU0FBUyxjQUFjLEtBQUssV0FBVyxTQUFTLFdBQVc7QUFDcEY7OztBQ3ZDQSxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLHdCQUF3QjtBQUNqQyxTQUFTLGVBQWUsNkJBQTZCOzs7QUNKOUMsU0FBUyxVQUFVLE1BQU0sU0FBUyxLQUFLLFFBQVE7QUFDcEQsUUFBTSxRQUFRLEtBQUssTUFBTSxHQUFHLE1BQU0sRUFBRSxNQUFNLDhCQUE4QjtBQUN4RSxNQUFJLENBQUMsTUFBTyxRQUFPO0FBQ25CLFFBQU0sUUFBUSxTQUFTLE1BQU0sQ0FBQyxFQUFFLFNBQVM7QUFDekMsUUFBTSxTQUFTLEtBQUssTUFBTSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsRUFBRSxDQUFDO0FBQzVELFNBQU8sRUFBRSxPQUFPLEtBQUssU0FBUyxPQUFPLFFBQVEsT0FBTyxNQUFNLENBQUMsRUFBRTtBQUMvRDtBQUVPLFNBQVMsZUFBZSxNQUFNLE9BQU8sTUFBTTtBQUNoRCxTQUFPO0FBQUEsSUFDTCxNQUFNLEtBQUssTUFBTSxHQUFHLE1BQU0sS0FBSyxJQUFJLE9BQU8sS0FBSyxNQUFNLE1BQU0sR0FBRztBQUFBLElBQzlELFFBQVEsTUFBTSxRQUFRLEtBQUs7QUFBQSxFQUM3QjtBQUNGO0FBRU8sU0FBUyxjQUFjLFNBQVMsTUFBTSxPQUFPLElBQUk7QUFDdEQsUUFBTSxTQUFTLENBQUMsR0FBSSxRQUFRLGFBQWEsQ0FBQyxDQUFFO0FBQzVDLE1BQUksS0FBSyxTQUFTLFlBQVksS0FBSyxDQUFDLE1BQU07QUFDeEMsV0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLE9BQU8sYUFBYSxNQUFNLE9BQU8sQ0FBQztBQUFBLEVBQ2pFO0FBQ0EsU0FBTztBQUNUOzs7QUNyQkEsU0FBUyxnQkFBQUMsZUFBYyxVQUFVLFFBQUFDLE9BQU0sVUFBQUMsU0FBUSxZQUFBQyxpQkFBZ0I7QUFDL0QsU0FBUyxjQUFBQyxhQUFZLGFBQUFDLGtCQUFpQjtBQStCaEMsU0FDRSxPQUFBQyxNQURGLFFBQUFDLGFBQUE7QUE1QkMsU0FBUyxZQUFZLEVBQUUsTUFBTSxRQUFRLE9BQU8sU0FBUyxVQUFVLFNBQVMsR0FBRztBQUNoRixRQUFNLENBQUMsTUFBTSxPQUFPLElBQUlDLGNBQWEsQ0FBQztBQUN0QyxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlBLGNBQWEsQ0FBQyxDQUFDO0FBQzNDLFFBQU0sQ0FBQyxPQUFPLFFBQVEsSUFBSUEsY0FBYSxFQUFFO0FBQ3pDLFFBQU0sQ0FBQyxVQUFVLFdBQVcsSUFBSUEsY0FBYSxDQUFDO0FBQzlDLFFBQU0sUUFBUSxPQUFPLEtBQUssQ0FBQztBQUMzQixRQUFNLFVBQVUsTUFBTSxTQUFTLFdBQVcsTUFBTSxVQUFVLE1BQU0sU0FBUyxTQUFTLFFBQVEsQ0FBQztBQUMzRixRQUFNLFVBQVVDLFdBQVUsU0FBUyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFVBQVVDLFlBQVcsR0FBRyxLQUFLLENBQUM7QUFFOUUsV0FBUyxRQUFRLE9BQU87QUFDdEIsVUFBTSxPQUFPLEVBQUUsR0FBRyxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxNQUFNO0FBQ2hELGNBQVUsSUFBSTtBQUNkLFFBQUksS0FBSyxNQUFNLE9BQU8sU0FBUyxFQUFHLFFBQU8sU0FBUyxJQUFJO0FBQ3RELFlBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsYUFBUyxFQUFFO0FBQ1gsZ0JBQVksQ0FBQztBQUFBLEVBQ2Y7QUFFQSxFQUFBQyxVQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFFBQUksTUFBTSxRQUFRLFVBQVU7QUFDMUIsZUFBUztBQUNULFlBQU0sZ0JBQWdCO0FBQUEsSUFDeEI7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUNFLGdCQUFBSixNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxJQUFJLFVBQVUsVUFBVSxHQUFHLFVBQVUsRUFBRSxHQUM1RTtBQUFBLG9CQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxLQUFLLEVBQUUsR0FDekM7QUFBQSxzQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sR0FBRyxNQUFNLEtBQUssR0FBSSxjQUFJLElBQUksSUFBRztBQUFBLE1BQ3pELE9BQU8sTUFBTSxHQUFHLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLGdCQUFBQSxLQUFDLFVBQXFCLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxpQkFBTyxFQUFFLEtBQUssSUFBSSxLQUF2RCxLQUFLLElBQW9ELENBQU87QUFBQSxNQUNsSCxnQkFBQUEsS0FBQ00sU0FBQSxFQUFPLE9BQU0sVUFBUyxTQUFTLFVBQVU7QUFBQSxPQUM1QztBQUFBLElBQ0EsZ0JBQUFOLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLEdBQUksZ0JBQU0sT0FBTTtBQUFBLElBQ3pDLGdCQUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBRUM7QUFBQSxRQUNBLE9BQU8sTUFBTTtBQUFBLFFBQ2IsZUFBYTtBQUFBLFFBQ2IsZUFBZTtBQUFBLFFBQ2YsV0FBVztBQUFBLFFBQ1gsYUFBYSxNQUFNO0FBQUEsUUFDbkI7QUFBQSxRQUNBLFVBQVUsQ0FBQyxVQUFVO0FBQUUsbUJBQVMsS0FBSztBQUFHLHNCQUFZLENBQUM7QUFBQSxRQUFFO0FBQUEsUUFDdkQsVUFBVSxDQUFDLFVBQVU7QUFDbkIsY0FBSSxNQUFNLFNBQVMsVUFBVTtBQUMzQixnQkFBSSxRQUFRLE9BQVEsU0FBUSxRQUFRLEtBQUssSUFBSSxTQUFTLEdBQUcsUUFBUSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQUEsVUFDL0UsTUFBTyxTQUFRLE1BQU0sU0FBUyxVQUFVLFFBQVEsVUFBVSxDQUFDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLFFBQVEsS0FBSyxJQUFJLFNBQVMsR0FBRyxRQUFRLFNBQVMsQ0FBQyxDQUFDLElBQUksS0FBSztBQUFBLFFBQ3hLO0FBQUEsUUFDQSxXQUFXLENBQUMsVUFBVTtBQUNwQixjQUFJLE1BQU0sUUFBUSxVQUFVLFFBQVEsUUFBUTtBQUMxQyx3QkFBWSxLQUFLLElBQUksU0FBUyxJQUFJLEdBQUcsUUFBUSxTQUFTLENBQUMsQ0FBQztBQUN4RCxtQkFBTztBQUFBLFVBQ1Q7QUFDQSxjQUFJLE1BQU0sUUFBUSxRQUFRLFFBQVEsUUFBUTtBQUN4Qyx3QkFBWSxLQUFLLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLG1CQUFPO0FBQUEsVUFDVDtBQUNBLGNBQUksTUFBTSxRQUFRLFNBQVMsUUFBUSxRQUFRO0FBQ3pDLHFCQUFTLFFBQVEsS0FBSyxJQUFJLFNBQVMsR0FBRyxRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsbUJBQU87QUFBQSxVQUNUO0FBQ0EsaUJBQU87QUFBQSxRQUNUO0FBQUE7QUFBQSxNQTVCSyxNQUFNO0FBQUEsSUE2QmI7QUFBQSxJQUNDLFFBQVEsU0FBUyxLQUFLLGdCQUFBQTtBQUFBLE1BQUNPO0FBQUEsTUFBQTtBQUFBLFFBQ3RCLE9BQU87QUFBQSxRQUNQLFVBQVUsU0FBUztBQUFBLFFBQ25CLFVBQVU7QUFBQSxRQUNWLFVBQVU7QUFBQSxRQUNWLFNBQVM7QUFBQSxRQUNULFlBQVk7QUFBQSxRQUNaLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxNQUFNLGdCQUFBUCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxPQUFPLElBQUksTUFBTSxHQUFJLGFBQUcsU0FBUyxZQUFPLElBQUksR0FBRyxLQUFLLElBQUc7QUFBQTtBQUFBLElBQzNIO0FBQUEsS0FDRjtBQUVKOzs7QUZ6RUEsU0FBUyxXQUFBUSxnQkFBZTs7O0FHUHhCLElBQU0sU0FBUztBQUVSLFNBQVMsZUFBZSxNQUFNO0FBQ25DLFNBQU8sS0FBSyxNQUFNLElBQUksRUFBRSxJQUFJLFNBQVMsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLO0FBQ3pEO0FBRUEsU0FBUyxVQUFVLE1BQU07QUFDdkIsTUFBSSxTQUFTO0FBQ2IsTUFBSSxTQUFTO0FBQ2IsTUFBSSxhQUFhO0FBQ2pCLGFBQVcsU0FBUyxLQUFLLFNBQVMsTUFBTSxHQUFHO0FBQ3pDLFFBQUksU0FBUyxLQUFLLE1BQU0sUUFBUSxNQUFNLEtBQUs7QUFDM0MsUUFBSSxXQUFZLFVBQVMsV0FBVyxNQUFNO0FBQzFDLGNBQVU7QUFDVixVQUFNLFFBQVEsS0FBSyxNQUFNLE1BQU0sUUFBUSxNQUFNLENBQUMsRUFBRSxNQUFNO0FBQ3RELFVBQU0sV0FBVyxNQUFNLENBQUMsRUFBRSxNQUFNLFFBQVEsSUFBSSxDQUFDLEtBQUs7QUFDbEQsYUFBUyxPQUFPLFFBQVE7QUFDeEIsVUFBTSxnQkFBZ0IsQ0FBQyxVQUFVLFNBQVMsS0FBSyxNQUFNO0FBQ3JELGFBQVMsT0FBTyxRQUFRLE1BQU0sRUFBRTtBQUNoQyxRQUFJLENBQUMsTUFBTyxVQUFTLE9BQU8sUUFBUSxTQUFTLEVBQUU7QUFDL0MsUUFBSSxZQUFZLENBQUMsY0FBZSxXQUFVO0FBQzFDLGlCQUFhLGlCQUFpQixRQUFRLFFBQVE7QUFDOUMsUUFBSSxVQUFVLE1BQU8sV0FBVTtBQUMvQixhQUFTLE1BQU0sUUFBUSxNQUFNLENBQUMsRUFBRTtBQUFBLEVBQ2xDO0FBQ0EsUUFBTSxPQUFPLEtBQUssTUFBTSxNQUFNO0FBQzlCLFNBQU8sVUFBVSxhQUFhLFdBQVcsSUFBSSxJQUFJO0FBQ25EO0FBRUEsU0FBUyxXQUFXLE1BQU07QUFDeEIsU0FBTyxLQUFLLFFBQVEsV0FBQywrQkFBeUIsR0FBQyxHQUFFLENBQUMsR0FBRyxPQUFPLFdBQVcsUUFBUSxPQUFPLFlBQVksQ0FBQztBQUNyRzs7O0FDOUJBLFNBQVMsYUFBYTtBQUN0QixTQUFTLGtCQUFrQjtBQUMzQixTQUFTLHFCQUFxQjtBQUV2QixTQUFTLHNCQUFzQjtBQUNwQyxRQUFNLFVBQVUsY0FBYyxJQUFJLElBQUksa0JBQWtCLFlBQVksR0FBRyxDQUFDO0FBQ3hFLFNBQU8sV0FBVyxPQUFPLElBQUksVUFBVSxjQUFjLElBQUksSUFBSSx5Q0FBeUMsWUFBWSxHQUFHLENBQUM7QUFDeEg7QUFFTyxTQUFTLGdCQUFnQixFQUFFLFdBQVcsTUFBTTtBQUFDLEdBQUcsVUFBVSxNQUFNO0FBQUMsR0FBRyxVQUFVLE1BQU07QUFBQyxHQUFHLFdBQVcsUUFBUSxVQUFVLE9BQU8sUUFBUSxNQUFNLFNBQVMsTUFBTSxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxRQUFRLFFBQVEsTUFBTSxFQUFFLENBQUMsR0FBRyxpQkFBaUIsS0FBUSxpQkFBaUIsS0FBTSxJQUFJLENBQUMsR0FBRztBQUM3UixNQUFJLFFBQVE7QUFDWixNQUFJLFNBQVM7QUFDYixNQUFJLFdBQVc7QUFDZixNQUFJLGFBQWE7QUFDakIsTUFBSSxRQUFRO0FBQ1osTUFBSSxXQUFXO0FBQ2YsUUFBTUMsV0FBVSxvQkFBSSxJQUFJO0FBRXhCLFdBQVMsVUFBVSxPQUFPO0FBQ3hCLGFBQVM7QUFDVCxhQUFTLEtBQUs7QUFBQSxFQUNoQjtBQUVBLFdBQVMsTUFBTSxRQUFRLElBQUksTUFBTSxxQkFBcUIsR0FBRztBQUN2RCxVQUFNLFdBQVc7QUFDakIsWUFBUTtBQUNSLFlBQVE7QUFDUixlQUFXLFNBQVNBLFNBQVEsT0FBTyxHQUFHO0FBQ3BDLG1CQUFhLE1BQU0sS0FBSztBQUN4QixZQUFNLE9BQU8sS0FBSztBQUFBLElBQ3BCO0FBQ0EsSUFBQUEsU0FBUSxNQUFNO0FBQ2QsY0FBVSxNQUFNLElBQUk7QUFDcEIsY0FBVSxLQUFLO0FBQ2YsY0FBVSxNQUFNO0FBQUEsRUFDbEI7QUFFQSxXQUFTLFFBQVEsSUFBSSxTQUFTO0FBQzVCLFdBQU8sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3RDLFlBQU0sUUFBUSxXQUFXLE1BQU0sTUFBTSxJQUFJLE1BQU0scUJBQXFCLENBQUMsR0FBRyxPQUFPO0FBQy9FLE1BQUFBLFNBQVEsSUFBSSxJQUFJLEVBQUUsU0FBUyxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQzVDLENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBUyxPQUFPLElBQUksU0FBUztBQUMzQixVQUFNLFFBQVFBLFNBQVEsSUFBSSxFQUFFO0FBQzVCLFFBQUksQ0FBQyxNQUFPO0FBQ1osSUFBQUEsU0FBUSxPQUFPLEVBQUU7QUFDakIsaUJBQWEsTUFBTSxLQUFLO0FBQ3hCLFFBQUksUUFBUSxNQUFPLE9BQU0sT0FBTyxJQUFJLE1BQU0sUUFBUSxLQUFLLENBQUM7QUFBQSxRQUNuRCxPQUFNLFFBQVEsT0FBTztBQUFBLEVBQzVCO0FBRUEsV0FBUyxPQUFPO0FBQ2QsUUFBSSxNQUFPLFFBQU87QUFDbEIsUUFBSSxhQUFhLFlBQVksU0FBUyxRQUFTLE9BQU0sSUFBSSxNQUFNLHlDQUF5QztBQUN4RyxVQUFNLFdBQVcsT0FBTztBQUN4QixZQUFRO0FBQ1IsWUFBUSxRQUFRLFNBQVMsY0FBYztBQUN2QyxRQUFJLFNBQVM7QUFDYixhQUFTLE9BQU8sR0FBRyxRQUFRLENBQUMsVUFBVTtBQUNwQyxVQUFJLFVBQVUsU0FBVTtBQUN4QixnQkFBVSxNQUFNLFNBQVM7QUFDekIsVUFBSSxPQUFPLFNBQVMsT0FBTyxLQUFNLFFBQU8sTUFBTSxJQUFJLE1BQU0saUNBQWlDLENBQUM7QUFDMUYsVUFBSTtBQUNKLGNBQVEsS0FBSyxPQUFPLFFBQVEsSUFBSSxNQUFNLEdBQUc7QUFDdkMsY0FBTSxPQUFPLE9BQU8sTUFBTSxHQUFHLEVBQUU7QUFDL0IsaUJBQVMsT0FBTyxNQUFNLEtBQUssQ0FBQztBQUM1QixZQUFJO0FBQ0osWUFBSTtBQUFFLG9CQUFVLEtBQUssTUFBTSxJQUFJO0FBQUEsUUFBRSxRQUFRO0FBQUU7QUFBQSxRQUFTO0FBQ3BELFlBQUksUUFBUSxXQUFXLFNBQVM7QUFDOUIsY0FBSSxXQUFXLGVBQWUsT0FBTyxTQUFTLFFBQVEsS0FBSyxFQUFHLFNBQVEsS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLEdBQUcsUUFBUSxLQUFLLENBQUMsQ0FBQztBQUFBLFFBQy9HLFdBQVcsUUFBUSxXQUFXLFFBQVMsUUFBTyxTQUFTLE9BQU87QUFBQSxpQkFDckQsUUFBUSxXQUFXLFNBQVM7QUFDbkMsZ0JBQU0sUUFBUSxJQUFJLE1BQU0sUUFBUSxXQUFXLGtCQUFrQjtBQUM3RCxnQkFBTSxTQUFTQSxTQUFRLE9BQU87QUFDOUIsZ0JBQU0sS0FBSztBQUNYLGNBQUksQ0FBQyxPQUFRLFNBQVEsTUFBTSxPQUFPO0FBQUEsUUFDcEMsV0FBVyxRQUFRLE1BQU0sS0FBTSxRQUFPLFFBQVEsSUFBSSxPQUFPO0FBQUEsTUFDM0Q7QUFBQSxJQUNGLENBQUM7QUFDRCxhQUFTLE9BQU8sR0FBRyxRQUFRLE1BQU07QUFBQSxJQUFDLENBQUM7QUFDbkMsVUFBTUMsVUFBUyxDQUFDLFVBQVU7QUFDeEIsVUFBSSxVQUFVLFNBQVU7QUFDeEIsWUFBTSxTQUFTRCxTQUFRLE9BQU87QUFDOUIsWUFBTSxZQUFZLFdBQVc7QUFDN0IsWUFBTSxLQUFLO0FBQ1gsVUFBSSxDQUFDLFVBQVUsVUFBVyxTQUFRLE1BQU0sT0FBTztBQUFBLElBQ2pEO0FBQ0EsYUFBUyxHQUFHLFNBQVMsQ0FBQyxVQUFVQyxRQUFPLElBQUksTUFBTSxpQ0FBaUMsTUFBTSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ25HLGFBQVMsTUFBTSxHQUFHLFNBQVNBLE9BQU07QUFDakMsYUFBUyxHQUFHLFFBQVEsTUFBTUEsUUFBTyxJQUFJLE1BQU0seUJBQXlCLENBQUMsQ0FBQztBQUN0RSxXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsUUFBUSxJQUFJO0FBQ25CLFVBQU0sS0FBSyxFQUFFO0FBQ2IsVUFBTSxTQUFTLFFBQVEsSUFBSSxjQUFjO0FBQ3pDLFFBQUk7QUFBRSxZQUFNLE1BQU0sTUFBTSxHQUFHLEtBQUssVUFBVSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7QUFBQSxDQUFJO0FBQUEsSUFBRSxTQUFTLE9BQU87QUFBRSxZQUFNLEtBQUs7QUFBQSxJQUFFO0FBQzFGLFdBQU87QUFBQSxFQUNUO0FBRUEsaUJBQWUsVUFBVTtBQUN2QixRQUFJLFNBQVU7QUFDZCxRQUFJO0FBQUUsWUFBTSxLQUFLO0FBQUEsSUFBRSxRQUFRO0FBQUEsSUFBQztBQUFBLEVBQzlCO0FBRUEsaUJBQWUsUUFBUTtBQUNyQixRQUFJLFlBQVksV0FBVyxPQUFRO0FBQ25DLFVBQU0sUUFBUSxFQUFFO0FBQ2hCLGNBQVUsU0FBUztBQUNuQixRQUFJO0FBQ0YsWUFBTSxLQUFLO0FBQ1gsVUFBSSxVQUFVLFdBQVk7QUFDMUIsZ0JBQVUsVUFBVTtBQUNwQixZQUFNLFFBQVEsT0FBTztBQUNyQixVQUFJLFVBQVUsV0FBWSxXQUFVLFdBQVc7QUFBQSxJQUNqRCxTQUFTLE9BQU87QUFDZCxVQUFJLFVBQVUsV0FBWTtBQUMxQixZQUFNLEtBQUs7QUFDWCxjQUFRLE1BQU0sT0FBTztBQUFBLElBQ3ZCO0FBQUEsRUFDRjtBQUVBLGlCQUFlLE9BQU87QUFDcEIsUUFBSSxXQUFXLFlBQWEsUUFBTztBQUNuQyxVQUFNLFFBQVE7QUFDZCxjQUFVLGNBQWM7QUFDeEIsUUFBSTtBQUNGLFlBQU0sU0FBUyxNQUFNLFFBQVEsTUFBTTtBQUNuQyxVQUFJLFVBQVUsV0FBWSxRQUFPO0FBQ2pDLGdCQUFVLE1BQU07QUFDaEIsYUFBTyxlQUFlLE9BQU8sUUFBUSxFQUFFO0FBQUEsSUFDekMsU0FBUyxPQUFPO0FBQ2QsVUFBSSxVQUFVLFlBQVk7QUFDeEIsY0FBTSxLQUFLO0FBQ1gsZ0JBQVEsTUFBTSxPQUFPO0FBQUEsTUFDdkI7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSxTQUFTO0FBQ3RCLFVBQU0sUUFBUSxFQUFFO0FBQ2hCLFFBQUksV0FBVyxPQUFRO0FBQ3ZCLFFBQUksV0FBVyxZQUFhLFFBQU8sTUFBTTtBQUN6QyxjQUFVLFlBQVk7QUFDdEIsUUFBSTtBQUNGLFlBQU0sUUFBUSxRQUFRO0FBQ3RCLFVBQUksVUFBVSxXQUFZLFdBQVUsTUFBTTtBQUFBLElBQzVDLFNBQVMsT0FBTztBQUNkLFVBQUksVUFBVSxXQUFZLE9BQU0sS0FBSztBQUFBLElBQ3ZDO0FBQUEsRUFDRjtBQUVBLFdBQVMsVUFBVTtBQUNqQixlQUFXO0FBQ1gsTUFBRTtBQUNGLFVBQU07QUFBQSxFQUNSO0FBRUEsU0FBTyxFQUFFLFNBQVMsT0FBTyxNQUFNLFFBQVEsU0FBUyxJQUFJLFNBQVM7QUFBRSxXQUFPO0FBQUEsRUFBTyxFQUFFO0FBQ2pGOzs7QUNuS0EsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxTQUFTLFdBQVcsVUFBVTtBQUN2QyxTQUFTLGNBQWM7QUFDdkIsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsWUFBWTtBQUVyQixJQUFNLFVBQVUsVUFBVSxRQUFRO0FBQ2xDLElBQU0sY0FBYyxvQkFBSSxJQUFJO0FBQzVCLFFBQVEsS0FBSyxRQUFRLE1BQU07QUFDekIsYUFBVyxPQUFPLFlBQWEsUUFBTyxLQUFLLEVBQUUsV0FBVyxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQzdFLENBQUM7QUFFRCxJQUFNLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZ0JsQixJQUFNLGdCQUFnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVF0QixlQUFzQixtQkFBbUIsRUFBRSxXQUFXLFFBQVEsVUFBVSxNQUFNLFFBQVEsS0FBSyxNQUFNLFFBQVEsSUFBSSxDQUFDLEdBQUc7QUFDL0csTUFBSSxJQUFJLGtCQUFrQixJQUFJLFFBQVMsT0FBTSxJQUFJLE1BQU0sMkNBQTJDO0FBQ2xHLFFBQU0sVUFBVSxFQUFFLFVBQVUsVUFBVSxTQUFTLEtBQU8sV0FBVyxLQUFLLE9BQU8sS0FBSztBQUNsRixNQUFJO0FBQ0osTUFBSTtBQUNGLFFBQUksYUFBYSxVQUFVO0FBQ3pCLFlBQU0sRUFBRSxPQUFPLElBQUksTUFBTSxJQUFJLGFBQWEsQ0FBQyxNQUFNLGNBQWMsTUFBTSxTQUFTLEdBQUcsT0FBTztBQUN4RixhQUFPLE9BQU8sS0FBSyxPQUFPLFNBQVMsRUFBRSxLQUFLLEdBQUcsUUFBUTtBQUFBLElBQ3ZELFdBQVcsYUFBYSxTQUFTO0FBQy9CLFlBQU0sRUFBRSxPQUFPLElBQUksTUFBTSxJQUFJLGtCQUFrQixDQUFDLGNBQWMsbUJBQW1CLFFBQVEsWUFBWSxhQUFhLEdBQUcsT0FBTztBQUM1SCxhQUFPLE9BQU8sS0FBSyxPQUFPLFNBQVMsRUFBRSxLQUFLLEdBQUcsUUFBUTtBQUFBLElBQ3ZELFdBQVcsYUFBYSxTQUFTO0FBQy9CLFlBQU0sVUFBVSxRQUFRLElBQUksZUFBZTtBQUMzQyxZQUFNLFVBQVUsVUFBVSxhQUFhO0FBQ3ZDLFlBQU0sRUFBRSxRQUFRLE1BQU0sSUFBSSxNQUFNLElBQUksU0FBUyxVQUFVLENBQUMsY0FBYyxJQUFJLENBQUMsY0FBYyxhQUFhLE1BQU0sV0FBVyxJQUFJLEdBQUcsT0FBTztBQUNySSxVQUFJLENBQUMsTUFBTSxTQUFTLEVBQUUsTUFBTSxLQUFLLEVBQUUsU0FBUyxXQUFXLEVBQUcsUUFBTztBQUNqRSxZQUFNLEVBQUUsT0FBTyxJQUFJLE1BQU0sSUFBSSxTQUFTLFVBQVUsQ0FBQyxVQUFVLGFBQWEsY0FBYyxJQUFJLENBQUMsY0FBYyxhQUFhLE1BQU0sYUFBYSxJQUFJLEdBQUcsT0FBTztBQUN2SixhQUFPLE9BQU8sS0FBSyxNQUFNO0FBQUEsSUFDM0IsT0FBTztBQUNMLFlBQU0sSUFBSSxNQUFNLG1EQUFtRDtBQUFBLElBQ3JFO0FBQUEsRUFDRixTQUFTLE9BQU87QUFDZCxRQUFJLE1BQU0sU0FBUyxTQUFVLE9BQU0sSUFBSSxNQUFNLDRDQUE0QyxJQUFJLGtCQUFrQixpQkFBaUIsYUFBYSxVQUFVLFVBQVUsNkJBQTZCO0FBQzlMLFVBQU07QUFBQSxFQUNSO0FBQ0EsTUFBSSxDQUFDLEtBQUssT0FBUSxRQUFPO0FBQ3pCLE1BQUksQ0FBQyxLQUFLLFNBQVMsR0FBRyxDQUFDLEVBQUUsT0FBTyxPQUFPLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUcsT0FBTSxJQUFJLE1BQU0sc0NBQXNDO0FBQ3ZJLFFBQU0sTUFBTSxNQUFNLFFBQVEsS0FBSyxPQUFPLEdBQUcsaUJBQWlCLENBQUM7QUFDM0QsY0FBWSxJQUFJLEdBQUc7QUFDbkIsUUFBTSxVQUFVLFlBQVk7QUFDMUIsVUFBTSxHQUFHLEtBQUssRUFBRSxXQUFXLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDOUMsZ0JBQVksT0FBTyxHQUFHO0FBQUEsRUFDeEI7QUFDQSxRQUFNLE9BQU8sS0FBSyxLQUFLLGVBQWU7QUFDdEMsTUFBSTtBQUNGLFVBQU0sVUFBVSxNQUFNLE1BQU0sRUFBRSxNQUFNLElBQU0sQ0FBQztBQUMzQyxXQUFPLEVBQUUsTUFBTSxRQUFRO0FBQUEsRUFDekIsU0FBUyxPQUFPO0FBQ2QsVUFBTSxRQUFRO0FBQ2QsVUFBTTtBQUFBLEVBQ1I7QUFDRjs7O0FDOUVPLFNBQVMscUJBQXFCLEVBQUUsV0FBVyxVQUFVLGFBQWEsVUFBVSxRQUFRLEdBQUc7QUFDNUYsTUFBSUMsV0FBVTtBQUNkLFNBQU8sZUFBZSxhQUFhO0FBQ2pDLFFBQUlBLFNBQVM7QUFDYixJQUFBQSxXQUFVO0FBQ1YsVUFBTSxTQUFTLFNBQVM7QUFDeEIsUUFBSTtBQUNGLFlBQU0sUUFBUSxNQUFNLFVBQVU7QUFDOUIsVUFBSSxDQUFDLE9BQU87QUFDVixnQkFBUSwyQkFBMkI7QUFDbkM7QUFBQSxNQUNGO0FBQ0EsWUFBTSxVQUFVLFNBQVM7QUFDekIsVUFBSSxRQUFRLGFBQWEsT0FBTyxZQUFZLFFBQVEsWUFBWSxPQUFPLFdBQVcsUUFBUSxVQUFVLE9BQU8sU0FBUyxRQUFRLFdBQVcsT0FBTyxRQUFRO0FBQ3BKLGNBQU0sTUFBTSxRQUFRO0FBQ3BCLGdCQUFRLGlEQUFpRDtBQUN6RDtBQUFBLE1BQ0Y7QUFDQSxZQUFNLFFBQVEsTUFBTSxZQUFZLE1BQU0sSUFBSTtBQUMxQyxVQUFJLENBQUMsT0FBTztBQUNWLGNBQU0sTUFBTSxRQUFRO0FBQ3BCLGNBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLE1BQzNDO0FBQ0EsWUFBTSxTQUFTLE9BQU8sTUFBTSxNQUFNLEdBQUcsT0FBTyxNQUFNO0FBQ2xELFlBQU0sUUFBUSxPQUFPLE1BQU0sTUFBTSxPQUFPLE1BQU07QUFDOUMsZUFBUyxTQUFTLFFBQVEsT0FBTyxPQUFPLFNBQVMsTUFBTSxNQUFNO0FBQUEsSUFDL0QsU0FBUyxPQUFPO0FBQ2QsY0FBUSwyQkFBMkIsTUFBTSxPQUFPLEVBQUU7QUFBQSxJQUNwRCxVQUFFO0FBQ0EsTUFBQUEsV0FBVTtBQUFBLElBQ1o7QUFBQSxFQUNGO0FBQ0Y7OztBQ2hDTyxTQUFTLHFCQUFxQixFQUFFLFdBQVcsVUFBVSxTQUFTLEdBQUc7QUFDdEUsTUFBSSxRQUFRO0FBQ1osTUFBSSxhQUFhO0FBRWpCLFdBQVMsTUFBTSxFQUFFLE9BQU8sT0FBTyxHQUFHO0FBQ2hDLFFBQUksVUFBVSxXQUFXLE9BQVE7QUFDakMsWUFBUSxFQUFFLE9BQU8sT0FBTztBQUN4QixNQUFFO0FBQ0YsU0FBSyxVQUFVLE1BQU07QUFBQSxFQUN2QjtBQUVBLGlCQUFlLE9BQU87QUFDcEIsVUFBTSxRQUFRO0FBQ2QsVUFBTSxTQUFTO0FBQ2YsVUFBTSxPQUFPLE1BQU0sVUFBVSxLQUFLO0FBQ2xDLFFBQUksVUFBVSxjQUFjLENBQUMsVUFBVSxRQUFRLFFBQVEsU0FBUyxNQUFNLE9BQU8sTUFBTztBQUNwRixVQUFNLFNBQVMsT0FBTyxNQUFNLE1BQU0sR0FBRyxPQUFPLE1BQU07QUFDbEQsVUFBTSxPQUFPLFFBQVEsVUFBVSxDQUFDLE1BQU0sS0FBSyxNQUFNLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU07QUFDaEYsVUFBTSxRQUFRLE9BQU8sTUFBTSxNQUFNLE9BQU8sTUFBTTtBQUM5QyxVQUFNLFFBQVEsUUFBUSxTQUFTLENBQUMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLGNBQWMsS0FBSyxLQUFLLElBQUksTUFBTTtBQUN2RixhQUFTLFNBQVMsT0FBTyxPQUFPLFFBQVEsS0FBSztBQUM3QyxZQUFRO0FBQUEsRUFDVjtBQUVBLFdBQVMsU0FBUztBQUNoQixNQUFFO0FBQ0YsWUFBUTtBQUNSLFNBQUssVUFBVSxPQUFPO0FBQUEsRUFDeEI7QUFFQSxXQUFTLE9BQU8sT0FBTztBQUNyQixRQUFJLFVBQVUsV0FBVyxPQUFRLFFBQU87QUFDeEMsUUFBSSxNQUFNLFFBQVEsWUFBYSxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQU0sUUFBTztBQUFBLGFBQy9ELE1BQU0sUUFBUSxZQUFZLENBQUMsTUFBTSxTQUFTLENBQUMsTUFBTSxRQUFRLFVBQVUsV0FBVyxZQUFhLE1BQUssS0FBSztBQUM5RyxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sRUFBRSxPQUFPLE1BQU0sUUFBUSxPQUFPO0FBQ3ZDOzs7QUN0Q08sU0FBUyx5QkFBeUIsRUFBRSxlQUFBQyxnQkFBZSxVQUFVLGFBQWEsVUFBVSxTQUFTLFdBQVcsTUFBTTtBQUFDLEVBQUUsR0FBRztBQUN6SCxNQUFJQyxXQUFVO0FBQ2QsU0FBTyxlQUFlLGVBQWU7QUFDbkMsUUFBSUEsU0FBUztBQUNiLElBQUFBLFdBQVU7QUFDVixhQUFTLFdBQVc7QUFDcEIsVUFBTSxTQUFTLFNBQVM7QUFDeEIsUUFBSTtBQUNGLFlBQU0sUUFBUSxNQUFNRCxlQUFjO0FBQ2xDLFVBQUksQ0FBQyxNQUFPO0FBQ1osWUFBTSxVQUFVLFNBQVM7QUFDekIsVUFBSSxRQUFRLGFBQWEsT0FBTyxZQUFZLFFBQVEsWUFBWSxPQUFPLFdBQVcsUUFBUSxVQUFVLE9BQU8sU0FBUyxRQUFRLFdBQVcsT0FBTyxRQUFRO0FBQ3BKLGNBQU0sTUFBTSxRQUFRO0FBQ3BCLGdCQUFRLGdEQUFnRDtBQUN4RDtBQUFBLE1BQ0Y7QUFDQSxZQUFNLFFBQVEsTUFBTSxZQUFZLE1BQU0sSUFBSTtBQUMxQyxVQUFJLENBQUMsT0FBTztBQUNWLGNBQU0sTUFBTSxRQUFRO0FBQ3BCLGNBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLE1BQzNDO0FBQ0EsWUFBTSxTQUFTLE9BQU8sTUFBTSxNQUFNLEdBQUcsT0FBTyxNQUFNO0FBQ2xELFlBQU0sUUFBUSxPQUFPLE1BQU0sTUFBTSxPQUFPLE1BQU07QUFDOUMsZUFBUyxTQUFTLFFBQVEsT0FBTyxPQUFPLFNBQVMsTUFBTSxNQUFNO0FBQUEsSUFDL0QsU0FBUyxPQUFPO0FBQ2QsY0FBUSwwQkFBMEIsTUFBTSxPQUFPLEVBQUU7QUFBQSxJQUNuRCxVQUFFO0FBQ0EsTUFBQUMsV0FBVTtBQUNWLGVBQVMsTUFBTTtBQUFBLElBQ2pCO0FBQUEsRUFDRjtBQUNGOzs7QUMvQkEsU0FBUyxZQUFBQyxpQkFBZ0I7QUFDekIsU0FBUyxXQUFBQyxVQUFTLGNBQWM7QUFDaEMsU0FBUyxjQUFBQyxtQkFBa0I7QUFDM0IsU0FBUyxVQUFBQyxlQUFjO0FBQ3ZCLFNBQVMsUUFBQUMsYUFBWTtBQUVyQixJQUFJLGFBQWE7QUFFakIsZUFBZSxtQkFBbUI7QUFDaEMsaUJBQWUsTUFBTUgsU0FBUUcsTUFBS0QsUUFBTyxHQUFHLGVBQWUsQ0FBQztBQUM1RCxTQUFPO0FBQ1Q7QUFFQSxlQUFzQixnQkFBZ0I7QUFDcEMsTUFBSSxRQUFRLGFBQWEsU0FBVSxPQUFNLElBQUksTUFBTSwyQ0FBMkM7QUFDOUYsUUFBTSxPQUFPQyxNQUFLLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxLQUFLLElBQUksQ0FBQyxNQUFNO0FBQ3ZFLFFBQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQ3JDLElBQUFKLFVBQVMsaUJBQWlCLENBQUMsTUFBTSxNQUFNLElBQUksR0FBRyxDQUFDLFVBQVU7QUFDdkQsVUFBSSxDQUFDLFNBQVMsQ0FBQ0UsWUFBVyxJQUFJLEVBQUcsU0FBUTtBQUFBLFVBQ3BDLFFBQU8sS0FBSztBQUFBLElBQ25CLENBQUM7QUFBQSxFQUNILENBQUM7QUFDRCxNQUFJLENBQUNBLFlBQVcsSUFBSSxFQUFHLFFBQU87QUFDOUIsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sU0FBUyxNQUFNLE9BQU8sSUFBSSxFQUFFLE1BQU0sTUFBTTtBQUFBLElBQUMsQ0FBQztBQUFBLEVBQzVDO0FBQ0Y7OztBQzNCTyxTQUFTLHNCQUFzQjtBQUNwQyxNQUFJLE9BQU87QUFDWCxNQUFJLGFBQWEsQ0FBQztBQUVsQixXQUFTLE9BQU8sT0FBTyxhQUFhO0FBQ2xDLFFBQUksUUFBUTtBQUNaLFdBQU8sUUFBUSxLQUFLLFVBQVUsUUFBUSxNQUFNLFVBQVUsS0FBSyxLQUFLLE1BQU0sTUFBTSxLQUFLLEVBQUc7QUFDcEYsUUFBSSxNQUFNLEtBQUs7QUFDZixRQUFJLFVBQVUsTUFBTTtBQUNwQixXQUFPLE1BQU0sU0FBUyxVQUFVLFNBQVMsS0FBSyxNQUFNLENBQUMsTUFBTSxNQUFNLFVBQVUsQ0FBQyxHQUFHO0FBQzdFO0FBQ0E7QUFBQSxJQUNGO0FBQ0EsVUFBTSxRQUFRLFVBQVU7QUFDeEIsaUJBQWEsV0FBVyxRQUFRLENBQUMsY0FBYztBQUM3QyxVQUFJLFVBQVUsT0FBTyxNQUFPLFFBQU8sQ0FBQyxTQUFTO0FBQzdDLFVBQUksVUFBVSxTQUFTLElBQUssUUFBTyxDQUFDLEVBQUUsR0FBRyxXQUFXLE9BQU8sVUFBVSxRQUFRLE9BQU8sS0FBSyxVQUFVLE1BQU0sTUFBTSxDQUFDO0FBQ2hILGFBQU8sQ0FBQztBQUFBLElBQ1YsQ0FBQztBQUNELFdBQU87QUFDUCxVQUFNLFVBQVUsQ0FBQyxHQUFHLEtBQUssU0FBUyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVE7QUFDN0QsZUFBVyxTQUFTLFNBQVM7QUFDM0IsWUFBTSxhQUFhLFlBQVksSUFBSSxNQUFNLENBQUMsQ0FBQztBQUMzQyxVQUFJLFlBQVksU0FBUyxPQUFRO0FBQ2pDLFlBQU0sT0FBTyxXQUFXO0FBQ3hCLFlBQU0sU0FBUyxLQUFLLFNBQVMsTUFBTSxDQUFDLEVBQUU7QUFDdEMsbUJBQWEsV0FBVyxJQUFJLENBQUMsY0FBYyxVQUFVLFNBQVMsTUFBTSxRQUFRLE1BQU0sQ0FBQyxFQUFFLFNBQ2pGLEVBQUUsR0FBRyxXQUFXLE9BQU8sVUFBVSxRQUFRLFFBQVEsS0FBSyxVQUFVLE1BQU0sT0FBTyxJQUM3RSxTQUFTO0FBQ2IsYUFBTyxLQUFLLE1BQU0sR0FBRyxNQUFNLEtBQUssSUFBSSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsTUFBTSxDQUFDLEVBQUUsTUFBTTtBQUNuRixpQkFBVyxLQUFLLEVBQUUsT0FBTyxNQUFNLE9BQU8sS0FBSyxNQUFNLFFBQVEsS0FBSyxRQUFRLGFBQWEsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUFBLElBQy9GO0FBQ0EsZUFBVyxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUs7QUFDM0MsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLFVBQVU7QUFDakIsUUFBSSxRQUFRO0FBQ1osZUFBVyxhQUFhLENBQUMsR0FBRyxVQUFVLEVBQUUsUUFBUSxHQUFHO0FBQ2pELGNBQVEsTUFBTSxNQUFNLEdBQUcsVUFBVSxLQUFLLElBQUksVUFBVSxjQUFjLE1BQU0sTUFBTSxVQUFVLEdBQUc7QUFBQSxJQUM3RjtBQUNBLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxFQUFFLFFBQVEsUUFBUTtBQUMzQjs7O0FDN0NBLElBQU0sT0FBTztBQUNiLElBQU0sUUFBUTtBQUVQLFNBQVMsWUFBWSxRQUFRLE9BQU87QUFDekMsU0FBTyxDQUFDLEdBQUcsT0FBTyxNQUFNLElBQUksS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLEtBQUssSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3JFO0FBRU8sU0FBUyxtQkFBbUIsUUFBUSxRQUFRO0FBQ2pELE1BQUksV0FBVyxPQUFRLFFBQU87QUFDOUIsTUFBSSxXQUFXLFlBQWEsUUFBTyxJQUFJLE1BQU07QUFDN0MsUUFBTSxVQUFVLENBQUMsR0FBRyxNQUFNLEtBQUssSUFBSSxHQUFHLFFBQVEsT0FBTyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFHLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztBQUM5RixTQUFPLElBQUksUUFBUSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssTUFBTSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3pGOzs7QVhJQSxTQUFTLGdCQUFBRyxnQkFBYyxlQUFBQyxjQUFhLFdBQVcsUUFBQUMsT0FBTSxhQUFhLGFBQUFDLFlBQVcsU0FBUyxXQUFBQyxVQUFTLFlBQUFDLFdBQVUsWUFBQUMsV0FBVSxjQUFjLGVBQWUsY0FBQUMsYUFBWSxZQUFBQyxXQUFVLGFBQUFDLFlBQVcsWUFBQUMsV0FBVSxhQUFBQyxZQUFXLGNBQWMsZ0JBQWdCO0FBQ3BPLFNBQVMsaUJBQWlCO0FBQzFCLFNBQVMsY0FBYyxlQUFlLHlCQUF5QjtBQUMvRCxTQUFTLGFBQWEsbUJBQW1CO0FBQ3pDLFNBQVMsb0JBQW9CLHlCQUF5QjtBQUN0RCxTQUFTLDRCQUE0QjtBQUNyQyxTQUFTLGdCQUFnQixvQkFBb0IsY0FBYyxjQUFjLGlCQUFpQjtBQUMxRixTQUFTLGFBQWEsMkJBQTJCO0FBQ2pELFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMsb0JBQW9CO0FBQzdCLFNBQVMsZUFBZSxjQUFjLGtCQUFBQyx1QkFBc0I7QUFDNUQsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyxjQUFBQyxtQkFBa0I7QUFDM0IsU0FBUyxtQkFBbUIsdUJBQXVCO0FBQ25ELFNBQVMsbUJBQW1CLGdDQUFnQztBQUM1RCxTQUFTLGlCQUFpQjtBQUMxQixTQUFTLHFCQUFxQjtBQUM5QixTQUFTLGlCQUFpQjs7O0FZakMxQixTQUFTLGtCQUFrQjtBQUMzQixTQUFTLGdCQUFBQyxxQkFBb0I7QUFHN0IsSUFBTSxRQUFRO0FBQUEsRUFDWixJQUFJO0FBQUEsRUFBTSxLQUFLO0FBQUEsRUFBTSxLQUFLO0FBQUEsRUFBTSxLQUFLO0FBQUEsRUFBTyxJQUFJO0FBQUEsRUFBTSxLQUFLO0FBQUEsRUFDM0QsTUFBTTtBQUFBLEVBQVEsT0FBTztBQUFBLEVBQVEsSUFBSTtBQUFBLEVBQU0sSUFBSTtBQUFBLEVBQVUsSUFBSTtBQUFBLEVBQVEsSUFBSTtBQUFBLEVBQ3JFLElBQUk7QUFBQSxFQUFRLEdBQUc7QUFBQSxFQUFLLEdBQUc7QUFBQSxFQUFLLEtBQUs7QUFBQSxFQUFPLE1BQU07QUFBQSxFQUFRLEtBQUs7QUFBQSxFQUMzRCxNQUFNO0FBQUEsRUFBUSxLQUFLO0FBQUEsRUFBTyxJQUFJO0FBQUEsRUFBUSxNQUFNO0FBQUEsRUFBUSxLQUFLO0FBQUEsRUFDekQsS0FBSztBQUFBLEVBQVEsTUFBTTtBQUFBLEVBQVEsTUFBTTtBQUFBLEVBQVEsS0FBSztBQUFBLEVBQU8sUUFBUTtBQUMvRDtBQUVPLFNBQVMsWUFBWSxNQUFNO0FBQ2hDLFFBQU0sTUFBTSxPQUFPLElBQUksRUFBRSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsWUFBWTtBQUN0RCxTQUFPLE1BQU0sR0FBRyxLQUFLO0FBQ3ZCO0FBRUEsSUFBTSxRQUFRLG9CQUFJLElBQUk7QUFDdEIsSUFBTSxVQUFVLG9CQUFJLElBQUk7QUFDeEIsSUFBTSxTQUFTLG9CQUFJLElBQUk7QUFDdkIsSUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJQyxjQUFhLENBQUM7QUFFckMsSUFBTSxtQkFBbUI7QUFFekIsU0FBUyxVQUFVLE1BQU0sTUFBTTtBQUNwQyxRQUFNLFdBQVcsUUFBUSxDQUFDLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTztBQUNwRCxRQUFNQyxTQUFRLFdBQVc7QUFDekIsU0FBTyxLQUNKLE1BQU0sSUFBSSxFQUNWLElBQUksQ0FBQyxTQUFTO0FBQ2IsVUFBTSxNQUFNLEdBQUdBLE1BQUs7QUFBQSxFQUFLLFFBQVE7QUFBQSxFQUFLLElBQUk7QUFDMUMsUUFBSSxNQUFNLElBQUksR0FBRyxFQUFHLFFBQU8sTUFBTSxJQUFJLEdBQUc7QUFDeEMsU0FBSyxNQUFNLFVBQVVBLFFBQU8sR0FBRztBQUMvQixXQUFPO0FBQUEsRUFDVCxDQUFDLEVBQ0EsS0FBSyxJQUFJO0FBQ2Q7QUFFQSxTQUFTLEtBQUssTUFBTSxNQUFNQSxRQUFPLEtBQUs7QUFDcEMsTUFBSSxRQUFRLElBQUksR0FBRyxFQUFHO0FBQ3RCLFVBQVEsSUFBSSxHQUFHO0FBQ2YsYUFBVyxNQUFNLE1BQU1BLE1BQUssRUFDekIsS0FBSyxDQUFDLFNBQVMsTUFBTSxJQUFJLEtBQUssS0FBSyxRQUFRLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFDdEQsTUFBTSxNQUFNO0FBQ1gsV0FBTyxJQUFJLElBQUk7QUFDZixVQUFNLElBQUksS0FBSyxJQUFJO0FBQUEsRUFDckIsQ0FBQyxFQUNBLFFBQVEsTUFBTTtBQUNiLFlBQVEsT0FBTyxHQUFHO0FBQ2xCLGVBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQztBQUFBLEVBQ3pCLENBQUM7QUFDTDs7O0FaaEJBLFNBQVMsaUJBQUFDLHNCQUFxQjs7O0FhbkN2QixTQUFTLGFBQWEsTUFBTTtBQUNqQyxRQUFNLFNBQVMsQ0FBQyxRQUFRLElBQUksV0FBVyxhQUFhLElBQUksV0FBVztBQUNuRSxTQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxPQUFPLE9BQU8sQ0FBQyxDQUFDLElBQUksT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFO0FBRU8sU0FBUyxtQkFBbUIsUUFBUSxTQUFTLFNBQVMsR0FBRztBQUM5RCxRQUFNLFNBQVMsUUFBUSxPQUFPLE9BQU8sRUFBRTtBQUN2QyxNQUFJLENBQUMsT0FBUSxRQUFPLFFBQVEsSUFBSSxNQUFNLENBQUM7QUFDdkMsUUFBTSxTQUFTLEtBQUssTUFBTSxTQUFTLEdBQUc7QUFDdEMsUUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDLFdBQVcsU0FBUyxJQUFJLENBQUM7QUFDcEQsUUFBTSxPQUFPLE1BQU0sU0FBUyxJQUFJLFNBQVMsTUFBTSxPQUFPLENBQUMsS0FBSyxNQUFNLE1BQU0sTUFBTSxPQUFPLE9BQU8sT0FBTyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDakgsU0FBTyxNQUFNO0FBQ1gsVUFBTSxhQUFhLE1BQU0sSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLEVBQ3hDLE9BQU8sQ0FBQyxNQUFNLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQ25DLEtBQUssQ0FBQyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQzlDLFVBQU0sT0FBTyxXQUFXLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsS0FBSyxNQUFNO0FBQ3hGLFFBQUksU0FBUyxPQUFXLFFBQU87QUFDL0IsVUFBTSxJQUFJO0FBQUEsRUFDWjtBQUNGO0FBRU8sU0FBUyxpQkFBaUIsU0FBUyxRQUFRLFFBQVEsTUFBTTtBQUM5RCxRQUFNLE1BQU0sS0FBSyxJQUFJLEdBQUcsU0FBUyxJQUFJO0FBQ3JDLFFBQU0sUUFBUSxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksU0FBUyxHQUFHLENBQUM7QUFDaEQsUUFBTSxZQUFZLE9BQU8sSUFBSSxJQUFJO0FBQ2pDLE1BQUksU0FBUyxFQUFHLFFBQU87QUFDdkIsTUFBSSxTQUFTLFFBQVEsVUFBVyxRQUFPLEtBQUssSUFBSSxHQUFHLFNBQVMsU0FBUztBQUNyRSxNQUFJLFVBQVUsUUFBUSxPQUFPLFVBQVcsUUFBTyxLQUFLLElBQUksS0FBSyxTQUFTLE9BQU8sWUFBWSxDQUFDO0FBQzFGLFNBQU87QUFDVDs7O0FDN0JBLFNBQVMsZ0JBQUFDLGVBQWMsTUFBTSxRQUFBQyxPQUFNLHFCQUFxQixVQUFBQyxTQUFRLFVBQVUsYUFBQUMsWUFBVyxTQUFTLGVBQUFDLGNBQWEsWUFBWSxZQUFBQyxXQUFVLGdCQUFnQjs7O0FDQTFJLFNBQVMsc0JBQXNCLE9BQU8sU0FBUyxPQUFPO0FBQzNELFFBQU0sU0FBUyxDQUFDO0FBQ2hCLFdBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxVQUFTO0FBQ2pDLFFBQUksTUFBTSxDQUFDLEVBQUUsU0FBUyxVQUFVLE1BQU0sQ0FBQyxFQUFFLFNBQVMsWUFBWTtBQUM1RCxVQUFJLE1BQU0sSUFBSTtBQUNkLGFBQU8sTUFBTSxNQUFNLFdBQVcsTUFBTSxHQUFHLEVBQUUsU0FBUyxVQUFVLE1BQU0sR0FBRyxFQUFFLFNBQVMsWUFBYTtBQUM3RixZQUFNLE1BQU0sTUFBTSxNQUFNLEdBQUcsR0FBRztBQUM5QixZQUFNLFFBQVEsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLFNBQVMsTUFBTTtBQUN2RCxhQUFPLEtBQUssRUFBRSxNQUFNLGNBQWMsUUFBUSxNQUFNLEdBQUcsRUFBRSxHQUFHLFFBQVEsT0FBTyxLQUFLLE9BQU8sUUFBUSxVQUFVLFFBQVEsTUFBTSxPQUFPLENBQUM7QUFDM0gsVUFBSTtBQUNKO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxDQUFDLEVBQUUsU0FBUyxZQUFZLE1BQU0sQ0FBQyxFQUFFLGlCQUFpQjtBQUMxRCxVQUFJLE1BQU0sSUFBSTtBQUNkLGFBQU8sTUFBTSxNQUFNLFVBQVUsTUFBTSxHQUFHLEVBQUUsU0FBUyxZQUFZLE1BQU0sR0FBRyxFQUFFLGdCQUFpQjtBQUN6RixZQUFNLE1BQU0sTUFBTSxNQUFNLEdBQUcsR0FBRztBQUM5QixhQUFPLEtBQUssSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLHNCQUFzQixTQUFTLElBQUksQ0FBQztBQUNwRixVQUFJO0FBQ0o7QUFBQSxJQUNGO0FBQ0EsV0FBTyxLQUFLLE1BQU0sR0FBRyxDQUFDO0FBQUEsRUFDeEI7QUFDQSxTQUFPO0FBQ1Q7QUFFTyxTQUFTLGlCQUFpQixPQUFPLE1BQU07QUFDNUMsUUFBTSxRQUFRLEtBQUssSUFBSSxHQUFHLE1BQU0sU0FBUyxJQUFJO0FBQzdDLFFBQU0sU0FBUyxNQUFNLE1BQU0sR0FBRyxLQUFLO0FBQ25DLFNBQU87QUFBQSxJQUNMLE9BQU8sTUFBTSxNQUFNLEtBQUs7QUFBQSxJQUN4QixhQUFhLE9BQU87QUFBQSxJQUNwQixhQUFhLE9BQU8sT0FBTyxDQUFDLE9BQU8sU0FBUyxRQUFRLGdCQUFnQixJQUFJLEdBQUcsQ0FBQztBQUFBLEVBQzlFO0FBQ0Y7QUFFQSxTQUFTLGdCQUFnQixNQUFNO0FBQzdCLE1BQUksS0FBSyxTQUFTLGFBQWMsUUFBTyxLQUFLLE1BQU07QUFDbEQsTUFBSSxLQUFLLFNBQVMscUJBQXNCLFFBQU8sS0FBSyxRQUFRO0FBQzVELE1BQUksS0FBSyxTQUFTLGNBQWUsUUFBTyxLQUFLO0FBQzdDLFNBQU87QUFDVDs7O0FEbkNBLFNBQXlCLG9CQUFlO0FBTWxDLGdCQUFBQyxNQXNHRSxRQUFBQyxhQXRHRjtBQUpOLFNBQVMsYUFBYSxFQUFFLE9BQU8sVUFBVSxXQUFXLGVBQWUsT0FBTyxHQUFHO0FBQzNFLFFBQU0sUUFBUSxnQkFBZ0IsY0FBYyxPQUFPLFFBQVEsSUFBSTtBQUMvRCxTQUNFLGdCQUFBRCxLQUFDLFNBQUksT0FBTyxFQUFFLElBQUksUUFBUSxVQUFVLEVBQUUsR0FDcEMsMEJBQUFBLEtBQUMsVUFBTSxpQkFBTSxHQUNmO0FBRUo7QUFFQSxTQUFTLFlBQVksRUFBRSxPQUFPLFVBQVUsV0FBVyxlQUFlLE9BQU8sR0FBRztBQUMxRSxRQUFNLFFBQVEsZ0JBQWdCLGNBQWMsT0FBTyxRQUFRLElBQUk7QUFDL0QsUUFBTSxlQUFlLEtBQUssSUFBSSxHQUFHLEdBQUcsTUFBTSxNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0FBQ3pGLFNBQ0UsZ0JBQUFBLEtBQUMsdUJBQW9CLGNBQTRCLE9BQU8sRUFBRSxJQUFJLFFBQVEsVUFBVSxFQUFFLEdBQ2hGLDBCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNuQyxnQkFBTSxNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxRQUM1QixnQkFBQUEsS0FBQyxVQUFlLE9BQU8sRUFBRSxVQUFVLFNBQVMsR0FBSSxrQkFBUSxPQUE3QyxHQUFpRCxDQUM3RCxHQUNILEdBQ0Y7QUFFSjtBQUVBLFNBQVMsb0JBQW9CLE9BQU87QUFDbEMsUUFBTSxXQUFXLE1BQU0sVUFBVSxZQUFZO0FBQzdDLFFBQU0sWUFBWSxDQUFDLE1BQU0sWUFBWSxRQUFRLE9BQU8sV0FBVyxFQUFFLFNBQVMsUUFBUSxJQUFJLGVBQWU7QUFDckcsU0FBTyxnQkFBQUEsS0FBQyxhQUFXLEdBQUcsT0FBTztBQUMvQjtBQUVBLFNBQVMsWUFBWSxNQUFNLFFBQVE7QUFDakMsTUFBSSxDQUFDLE1BQU0sT0FBTyxPQUFRLFFBQU8sRUFBRSxRQUFRLE9BQU8sUUFBUSxVQUFVLEVBQUUsR0FBRyxPQUFPLE9BQU8sUUFBUSxTQUFTLEVBQUUsRUFBRTtBQUM1RyxRQUFNLFNBQVMsQ0FBQztBQUNoQixRQUFNLFFBQVEsQ0FBQztBQUNmLE9BQUssTUFBTSxRQUFRLENBQUMsTUFBTSxVQUFVO0FBQ2xDLFFBQUksT0FBTztBQUNULGFBQU8sS0FBSyxRQUFHO0FBQ2YsWUFBTSxLQUFLLFFBQUc7QUFBQSxJQUNoQjtBQUNBLGVBQVcsUUFBUSxLQUFLLE9BQU87QUFDN0IsVUFBSSxLQUFLLFNBQVMsTUFBTyxRQUFPLEtBQUssS0FBSyxJQUFJO0FBQzlDLFVBQUksS0FBSyxTQUFTLFNBQVUsT0FBTSxLQUFLLEtBQUssSUFBSTtBQUFBLElBQ2xEO0FBQUEsRUFDRixDQUFDO0FBQ0QsU0FBTyxFQUFFLFFBQVEsT0FBTyxLQUFLLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDOUQ7QUFFQSxTQUFTLGlCQUFpQixNQUFNLFFBQVE7QUFDdEMsTUFBSSxNQUFNLE9BQU8sT0FBUSxRQUFPLEtBQUssTUFBTSxPQUFPLENBQUMsS0FBSyxNQUFNLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNyRixRQUFNLFVBQVUsWUFBWSxNQUFNLE1BQU07QUFDeEMsU0FBTyxLQUFLLElBQUksUUFBUSxNQUFNLE1BQU0sSUFBSSxFQUFFLFFBQVEsUUFBUSxPQUFPLE1BQU0sSUFBSSxFQUFFLFFBQVEsQ0FBQztBQUN4RjtBQUVBLFNBQVMsWUFBWSxJQUFJO0FBQ3ZCLE1BQUksS0FBSyxJQUFPLFFBQU8sSUFBSSxLQUFLLEtBQU0sUUFBUSxDQUFDLENBQUM7QUFDaEQsUUFBTSxPQUFPLEtBQUssTUFBTSxLQUFLLEdBQUk7QUFDakMsU0FBTyxHQUFHLEtBQUssTUFBTSxPQUFPLEVBQUUsQ0FBQyxLQUFLLE9BQU8sRUFBRTtBQUMvQztBQUVBLFNBQVMsV0FBVyxJQUFJO0FBQ3RCLFFBQU0sT0FBTyxLQUFLLE1BQU0sS0FBSyxHQUFJO0FBQ2pDLFNBQU8sT0FBTyxLQUFLLEdBQUcsSUFBSSxNQUFNLEdBQUcsS0FBSyxNQUFNLE9BQU8sRUFBRSxDQUFDLEtBQUssT0FBTyxFQUFFO0FBQ3hFO0FBRUEsU0FBU0UsVUFBUyxNQUFNLElBQUksUUFBUTtBQUNsQyxRQUFNLE1BQU0sQ0FBQyxVQUFVLE9BQU8sV0FBVyxHQUFHLEtBQUssTUFBTSxXQUFXLElBQzlELENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxTQUFTLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUN4RCxDQUFDLEtBQUssS0FBSyxHQUFHO0FBQ2xCLFFBQU0sSUFBSSxJQUFJLElBQUk7QUFDbEIsUUFBTSxJQUFJLElBQUksRUFBRTtBQUNoQixTQUFPLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxNQUFNLEtBQUssTUFBTSxTQUFTLEVBQUUsQ0FBQyxJQUFJLFNBQVMsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLFNBQVMsR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNwSDtBQUVBLElBQU0seUJBQXlCO0FBQy9CLElBQU0sb0JBQW9CO0FBQzFCLElBQU0scUJBQXFCO0FBQzNCLElBQU0sOEJBQThCO0FBQ3BDLElBQU0sd0JBQXdCO0FBRTlCLFNBQVMsY0FBYyxHQUFHO0FBQ3hCLFFBQU0sUUFBUSwrQkFBK0IsOEJBQThCO0FBQzNFLFNBQU8sS0FBSyxRQUFRLEtBQUssSUFBSSxVQUFVLElBQUk7QUFDN0M7QUFFQSxTQUFTLGtCQUFrQixFQUFFLFVBQVUsUUFBUSxHQUFHO0FBQ2hELFFBQU0sU0FBU0MsYUFBWSxVQUFVLElBQUksR0FBR0MsTUFBSyw4QkFBOEIsdUJBQXVCLGFBQWEsQ0FBQztBQUNwSCxNQUFJLENBQUMsUUFBUyxRQUFPLElBQUksQ0FBQztBQUMxQixTQUFPLGdCQUFBSixLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU9FLFVBQVMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsVUFBVSxZQUFZLFVBQVUsR0FBRyxVQUFVLEVBQUUsR0FBSSxVQUFTO0FBQzdIO0FBRUEsU0FBUyxZQUFZLE9BQU87QUFDMUIsTUFBSSxDQUFDLE1BQU8sUUFBTyxDQUFDO0FBQ3BCLFFBQU0sUUFBUSxNQUFNLE1BQU0sSUFBSTtBQUM5QixNQUFJLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBSSxPQUFNLElBQUk7QUFDbkMsU0FBTztBQUNUO0FBRUEsU0FBUyxXQUFXLEVBQUUsT0FBTyxXQUFXLFVBQVUsR0FBRztBQUNuRCxRQUFNLFFBQVEsWUFBWSxLQUFLO0FBQy9CLE1BQUksQ0FBQyxNQUFNLE9BQVEsUUFBTztBQUMxQixRQUFNLFFBQVEsTUFBTSxNQUFNLENBQUMsaUJBQWlCO0FBQzVDLFFBQU0sUUFBUSxjQUFjLFlBQVksWUFBWSxNQUFNLFNBQVMsSUFBSSxNQUFNLFNBQVMsTUFBTSxTQUFTO0FBQ3JHLFFBQU0sT0FBTyxhQUFhLFFBQVEsTUFBTSxTQUFTO0FBQ2pELFFBQU0sY0FBYyxPQUFPLElBQUksRUFBRTtBQUNqQyxTQUNFLGdCQUFBRixLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxJQUFJLFVBQVUsVUFBVSxHQUFHLFdBQVcsRUFBRSxHQUM1RSxnQkFBTSxJQUFJLENBQUMsTUFBTSxNQUNoQixnQkFBQUMsTUFBQyxTQUFvQixPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pEO0FBQUEsb0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksYUFBRyxPQUFPLFFBQVEsQ0FBQyxFQUFFLFNBQVMsV0FBVyxDQUFDLEtBQUk7QUFBQSxJQUM5RSxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsVUFBVSxXQUFXLEdBQUksa0JBQVEsS0FBSTtBQUFBLE9BRjVELFFBQVEsQ0FHbEIsQ0FDRCxHQUNIO0FBRUo7QUFFQSxTQUFTLGdCQUFnQixFQUFFLEtBQUssR0FBRztBQUNqQyxNQUFJLEtBQUssU0FBUyxPQUFRLFFBQU8sZ0JBQUFBLEtBQUMsVUFBTSxnQkFBSztBQUM3QyxNQUFJLEtBQUssV0FBWSxRQUFPLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUkscUJBQUs7QUFDcEUsTUFBSSxLQUFLLFdBQVcsVUFBVyxRQUFPLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLDBCQUFBQSxLQUFDLFdBQVEsT0FBTyxPQUFPLEdBQUcsR0FBRTtBQUM1RixNQUFJLEtBQUssYUFBYSxFQUFHLFFBQU8sZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUkscUJBQUs7QUFDckUsTUFBSSxLQUFLLFlBQVksS0FBTSxRQUFPLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sSUFBSSxHQUFJLG1CQUFLO0FBQ3JFLFNBQU8sZ0JBQUFBLEtBQUMsVUFBTSxnQkFBSztBQUNyQjtBQUVBLFNBQVMsVUFBVSxFQUFFLE1BQU0sUUFBUSxHQUFHO0FBQ3BDLFFBQU0sZUFBZSxLQUFLLE1BQU0sR0FBRyxFQUFFLEdBQUc7QUFDeEMsUUFBTSxPQUFPRyxhQUFZLEdBQUdDLE1BQUssb0JBQW9CQyxPQUFNLENBQUM7QUFDNUQsTUFBSSxpQkFBaUIsS0FBSyxTQUFTO0FBQ2pDLFNBQUssVUFBVTtBQUNmLFFBQUksS0FBSyxRQUFRO0FBQ2YsV0FBSyxLQUFLLENBQUM7QUFDWCxXQUFLLElBQUksQ0FBQztBQUFBLElBQ1o7QUFBQSxFQUNGO0FBRUEsTUFBSSxTQUFTO0FBQ1gsV0FDRSxnQkFBQUwsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFNBQVMsR0FDbEMsZ0JBQUssU0FBUyxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sTUFBTSxNQUFNLFNBQVMsYUFDekQsZ0JBQUFBLEtBQUMsV0FBZ0IsTUFBTSxPQUFPLFNBQU8sUUFBdkIsQ0FBd0IsSUFDdEMsZ0JBQUFBLEtBQUMsWUFBa0IsR0FBRyxPQUFPLFNBQU8sUUFBckIsQ0FBc0IsQ0FBRSxHQUM3QztBQUFBLEVBRUo7QUFFQSxRQUFNLFNBQVMsb0JBQUksSUFBSTtBQUN2QixhQUFXLFFBQVEsS0FBSyxNQUFPLFFBQU8sSUFBSSxLQUFLLE9BQU8sT0FBTyxJQUFJLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQztBQUNyRixRQUFNLFVBQVUsQ0FBQyxHQUFHLE1BQU07QUFDMUIsUUFBTSxVQUFVLEtBQUssTUFBTSxPQUFPLENBQUMsS0FBSyxTQUFTLE9BQU8sS0FBSyxjQUFjLElBQUksQ0FBQztBQUNoRixRQUFNLGFBQWEsS0FBSyxNQUFNLEdBQUcsRUFBRSxHQUFHO0FBQ3RDLFFBQU0sWUFBWSxLQUFLLFNBQVMsS0FBSyxPQUFPLElBQUksQ0FBQyxVQUFVLE1BQU0sU0FBUyxhQUN0RSxFQUFFLEdBQUcsT0FBTyxNQUFNLFlBQVksYUFBYSxNQUFNLEtBQUssUUFBUSxRQUFRLEdBQUcsRUFBRSxLQUFLLEdBQUcsU0FBUyxLQUFLLElBQ2pHLEtBQUssRUFBRSxPQUFPLENBQUMsVUFBVSxNQUFNLFdBQVc7QUFDOUMsUUFBTSxlQUFlLFNBQVMsTUFBTSxDQUFDLHNCQUFzQjtBQUMzRCxRQUFNLHFCQUFxQixTQUFTLFNBQVMsYUFBYTtBQUMxRCxRQUFNLGdCQUFnQixLQUFLLElBQUksR0FBRyxHQUFHLGFBQWEsSUFBSSxDQUFDLFVBQVUsTUFBTSxLQUFLLE1BQU0sQ0FBQztBQUNuRixRQUFNLGNBQWMsS0FBSyxVQUFVLEtBQUssTUFBTSxHQUFHLEVBQUUsR0FBRyxTQUFTLFNBQVMsS0FBSyxNQUFNLEdBQUcsRUFBRSxJQUFJO0FBQzVGLFNBQ0UsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsRUFBRSxHQUNqRDtBQUFBLG9CQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLElBQ1AsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLFlBQVksYUFBYSxHQUMxRDtBQUFBLFdBQUssU0FBUyxnQkFBQUQsS0FBQyxXQUFRLE9BQU8sT0FBTyxHQUFHLElBQUssZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUcsb0JBQUM7QUFBQSxNQUM5RSxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sVUFBVSxRQUFRLFVBQVUsR0FBRyxhQUFhLEVBQUUsR0FDaEY7QUFBQSx3QkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEtBQUssU0FBUyxLQUFLLE1BQU0sR0FBRyxzQkFBUTtBQUFBLFFBQ3pELFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLEdBQUcsTUFDM0IsZ0JBQUFBLEtBQUMsVUFBZ0IsT0FBTyxFQUFFLE9BQU8sS0FBSyxVQUFVLFNBQVMsYUFBYUUsVUFBUyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsS0FBSyxNQUFNLEdBQzdILGFBQUcsSUFBSSxPQUFPLEVBQUUsR0FBRyxJQUFJLEdBQUcsVUFBVSxJQUFJLEtBQUssSUFBSSxLQUFLLFFBQVEsTUFEdEQsSUFFWCxDQUNEO0FBQUEsU0FDSDtBQUFBLE1BQ0MsVUFBVSxLQUFLLGdCQUFBRixLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxZQUFZLEVBQUUsR0FBSSxzQkFBWSxPQUFPLEdBQUU7QUFBQSxPQUN0RjtBQUFBLElBQ0EsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLGFBQWEsRUFBRSxHQUNuRDtBQUFBLDJCQUFxQixLQUNwQixnQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSx3QkFBQUQsS0FBQyxVQUFNLGNBQUksT0FBTyxnQkFBZ0IsQ0FBQyxHQUFFO0FBQUEsUUFDckMsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksZ0JBQU0sa0JBQWtCLFNBQVE7QUFBQSxTQUNsRTtBQUFBLE1BRUQsYUFBYSxJQUFJLENBQUMsTUFBTSxNQUN2QixnQkFBQUMsTUFBQyxTQUF3QyxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ3BFO0FBQUEsYUFBSyxVQUFVLGdCQUFBRCxLQUFDLFVBQU0sZ0JBQUssSUFBVSxnQkFBQUEsS0FBQyxtQkFBZ0IsTUFBWTtBQUFBLFFBQ25FLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxRQUFRLEtBQUssUUFBUSxHQUFJLGFBQUcsS0FBSyxLQUFLLFNBQVMsYUFBYSxDQUFDLE1BQUs7QUFBQSxRQUM5RixLQUFLLFVBQ0YsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUFHLDBCQUFBQSxLQUFDLFlBQVMsTUFBTSxLQUFLLGFBQWEsT0FBTyxFQUFFLE9BQU8sT0FBTyxRQUFRLE1BQU0sVUFBVSxXQUFXLEdBQUcsR0FBRSxJQUN6SSxnQkFBQUEsS0FBQyxxQkFBa0IsU0FBUyxLQUFLLFdBQVcsV0FBWSxlQUFLLGFBQVk7QUFBQSxXQUxyRSxLQUFLLFVBQVUsV0FBVyxDQUFDLEVBTXJDLENBQ0Q7QUFBQSxNQUNBLGFBQWEsU0FBUyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLElBQUksVUFBVSxXQUFXLEdBQUksb0JBQVUsWUFBWSxPQUFPLE1BQU0sR0FBRTtBQUFBLE1BQzlHLGFBQWEsY0FBYyxnQkFBQUEsS0FBQyxjQUFXLE9BQU8sWUFBWSxZQUFZLFdBQVcsWUFBWSxpQkFBaUIsV0FBVyxZQUFZLGlCQUFpQjtBQUFBLE9BQ3pKO0FBQUEsS0FDRjtBQUVKO0FBRUEsU0FBUyxTQUFTLEVBQUUsTUFBTSxPQUFPLFdBQVcsYUFBYSxRQUFRLE1BQU0sUUFBUSxZQUFZLGlCQUFpQixpQkFBaUIsT0FBTyxZQUFZLFNBQVMsV0FBVyxXQUFXLEdBQUc7QUFDaEwsUUFBTSxhQUFhLFNBQVMsU0FBUyxPQUFPLGFBQWEsUUFBUSxVQUFVLE9BQU8sU0FBUyxJQUFJO0FBQy9GLFFBQU0sb0JBQW9CLENBQUM7QUFDM0IsUUFBTSxVQUFVLFlBQVksTUFBTSxNQUFNO0FBQ3hDLFFBQU0sVUFBVSxXQUFXO0FBQzNCLFFBQU0sY0FBYyxXQUFXO0FBQy9CLFFBQU0sV0FBVyxXQUFXO0FBQzVCLFFBQU1NLFVBQVMsV0FBVztBQUMxQixRQUFNLFdBQVcsYUFBYSxXQUFXLE1BQU0sSUFBSSxJQUFJO0FBRXZELFFBQU0sVUFBVSxXQUFXLFlBQVksS0FBSyxJQUFJLElBQUksWUFBWTtBQUNoRSxRQUFNLE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxjQUFjLE9BQU8sWUFBWSxVQUFVLElBQUk7QUFFdkYsUUFBTSxPQUFPLFVBQVcsV0FBVyxNQUFPLFlBQVksV0FBVyxPQUFPLENBQUMsTUFBTSxZQUMzRSxjQUFjLGdCQUNkLFdBQVcsYUFDWEEsVUFBUyxTQUFTLE9BQU8sS0FBSyxJQUFJLEtBQUssRUFBRSxLQUN6QyxhQUFhLG1DQUNiLE9BQU8sSUFBSSxLQUFLLFNBQVMsS0FBSyxLQUFLLFNBQVMsR0FBRyxPQUFPLEtBQUssSUFBSSxLQUFLLEVBQUUsS0FDdEUsV0FBVyxHQUFHLG1CQUFtQixTQUFTLE1BQU0sS0FBSyxtQkFBbUIsU0FBUyxZQUFZLElBQUksU0FBUyxPQUFPLEdBQUcsT0FBTyxLQUFLLElBQUksS0FBSyxFQUFFLEtBQzNJLE9BQU8sT0FBTyxLQUFLLElBQUksS0FBSyxFQUFFO0FBRWxDLFNBQ0UsZ0JBQUFMLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsRUFBRSxHQUNqRDtBQUFBLG9CQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLElBQ1AsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLFFBQVEsR0FBRyxVQUFVLE9BQU8sR0FDN0Q7QUFBQSxnQkFDRyxnQkFBQUQsS0FBQyxXQUFRLE9BQU8sT0FBTyxHQUFHLElBQzFCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sZUFBZU0sVUFBUyxNQUFNLFdBQVcsUUFBUSxPQUFPLEVBQUUsR0FBSSx3QkFBYyxXQUFNQSxVQUFTLFdBQU0sV0FBVyxXQUFNLFVBQUk7QUFBQSxNQUNoSixnQkFBQU4sS0FBQyxVQUFLLGVBQUM7QUFBQSxNQUNQLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxZQUFZLEVBQUUsR0FBSSxhQUFHLEtBQUssT0FBTyxDQUFDLENBQUMsS0FBSTtBQUFBLE1BQ3BFLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxVQUFVLEdBQUcsUUFBUSxFQUFFLEdBQ2hELDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLEdBQUcsR0FBSSx3QkFBYyxlQUFlLE1BQUssR0FDdkY7QUFBQSxNQUNBLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxZQUFZLEdBQUcsVUFBVSxXQUFXLEdBQUksZUFBSyxJQUFJLElBQUc7QUFBQSxPQUNuRjtBQUFBLElBQ0MsZUFBZSxDQUFDLHFCQUNmLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUMzQiwwQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sVUFBVSxXQUFXLEdBQUksdUJBQVksR0FDcEU7QUFBQSxJQUVELFNBQVMsVUFBVSxTQUNsQixnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FDM0IsMEJBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxJQUFJLFVBQVUsV0FBVyxHQUFJLG9CQUFVLE9BQU8sYUFBYSxNQUFNLEdBQUUsR0FDM0Y7QUFBQSxJQUVETSxXQUFVLFNBQ1QsZ0JBQUFOLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLFVBQVUsV0FBVyxHQUFJLGVBQUssS0FBSyxJQUFHO0FBQUEsSUFFcEUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxLQUFLLGNBQWMsS0FBSyxLQUFLLGNBQWMsTUFDdkYsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFFBQVEsaUJBQWlCLE1BQU0sTUFBTSxHQUFHLFdBQVcsR0FBRyxhQUFhLEVBQUUsR0FDMUcsMEJBQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDQyxRQUFRLFFBQVE7QUFBQSxRQUNoQixPQUFPLFFBQVE7QUFBQSxRQUNmLFVBQVUsWUFBWSxPQUFPLElBQUk7QUFBQSxRQUNqQztBQUFBLFFBQ0EsU0FBUztBQUFBLFFBQ1QsT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLFFBQ1QsV0FBVztBQUFBO0FBQUEsSUFDYixHQUNGO0FBQUEsSUFFRCxTQUFTLFVBQVUsY0FBYyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRywwQkFBQUEsS0FBQyxjQUFXLE9BQU8sWUFBWSxXQUFXLGlCQUFpQixXQUFXLGlCQUFpQixHQUFFO0FBQUEsSUFDMUosWUFBWSxXQUFXLFNBQVMsVUFBVSxDQUFDLFdBQzFDLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxJQUFJLFVBQVUsVUFBVSxHQUFHLFdBQVcsRUFBRSxHQUM1RTtBQUFBLGVBQVMsTUFBTSxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxNQUNqQyxnQkFBQUQsS0FBQyxVQUFhLE9BQU8sRUFBRSxPQUFPLFNBQVMsVUFBVSxXQUFXLEdBQUksa0JBQVEsT0FBN0QsQ0FBaUUsQ0FDN0U7QUFBQSxNQUNBLFNBQVMsU0FBUyxPQUFPLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLG9CQUFLLFNBQVMsU0FBUyxHQUFHLGVBQWM7QUFBQSxPQUNwRztBQUFBLEtBRUo7QUFFSjtBQUVBLFNBQVMsaUJBQWlCLEVBQUUsTUFBTSxTQUFTLHFCQUFxQixPQUFPLFNBQVMsT0FBTyxTQUFTLE1BQU0sWUFBWSxVQUFVLE9BQU8sUUFBUSxHQUFHO0FBQzVJLFFBQU0sZUFBZSxLQUFLLFNBQVMsbUJBQW1CLEtBQUssU0FBUztBQUNwRSxRQUFNLFlBQVksS0FBSyxTQUFTO0FBQ2hDLFFBQU0sUUFBUSxZQUFZLGNBQWMsR0FBRyxlQUFlLGtCQUFrQixlQUFlLFdBQVcsS0FBSyxLQUFLO0FBQ2hILFFBQU0sT0FBTyxLQUFLLGNBQWMsR0FBRyxLQUFLLElBQUkscUJBQXFCLEtBQUs7QUFDdEUsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJTyxjQUFhLENBQUM7QUFDMUMsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxjQUFhLElBQUk7QUFDN0MsUUFBTSxVQUFVLFdBQVc7QUFDM0IsV0FBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxjQUFjLFFBQVEsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLE1BQU0sV0FBVyxZQUFZLE1BQU0sV0FBVyxTQUFVLFdBQVU7QUFBQSxFQUNwSCxDQUFDO0FBQ0QsUUFBTSxRQUFRLHFCQUFxQixzQkFBc0IsS0FBSyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxTQUFTLENBQUM7QUFDekgsU0FDRSxnQkFBQVAsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLFNBQVMsSUFBSSxHQUFHLFFBQVEsWUFBWSxJQUFJLFNBQVMsV0FBVyxPQUFVLEdBQy9JLDBCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsT0FBTyxVQUFVLGFBQWEsSUFBSSxPQUFVLEdBQ3RFO0FBQUEsY0FBVSxnQkFBQUQsS0FBQyxTQUFJLE9BQU8sRUFBRSxPQUFPLEdBQUcsWUFBWSxHQUFHLElBQUksYUFBYSxlQUFlLE9BQU8sSUFBSSxNQUFNLEdBQUc7QUFBQSxJQUN0RyxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLElBQUksWUFBWSxZQUFZLGdCQUFnQixTQUFTLFdBQVcsT0FBVSxHQUNuSztBQUFBLHNCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sV0FBVyxhQUFhLGVBQWUsT0FBTyxJQUFJLE9BQU8sTUFBTSxLQUFLLEdBQUksaUJBQU07QUFBQSxNQUNuRyxhQUNDLGdCQUFBQTtBQUFBLFFBQUNRO0FBQUEsUUFBQTtBQUFBLFVBQ0MsT0FBTyxFQUFFLFVBQVUsRUFBRTtBQUFBLFVBQ3JCO0FBQUEsVUFDQSxjQUFjLE9BQU8sSUFBSSxNQUFNLE9BQU87QUFBQSxVQUN0QyxVQUFVLENBQUMsTUFBTSxTQUFTO0FBQUUsc0JBQVUsSUFBSTtBQUFHLHNCQUFVLENBQUMsQ0FBQyxNQUFNLFFBQVE7QUFBQSxVQUFFO0FBQUEsVUFDekUsV0FBUztBQUFBLFVBRVQsMEJBQUFSLEtBQUMsdUJBQW9CLE9BQWMsTUFBWSxTQUFrQjtBQUFBO0FBQUEsTUFDbkUsSUFDRSxnQkFBQUEsS0FBQyx1QkFBb0IsT0FBYyxNQUFZLFNBQWtCO0FBQUEsT0FDdkU7QUFBQSxLQUNGLEdBQ0Y7QUFFSjtBQUVBLFNBQVMsb0JBQW9CLEVBQUUsT0FBTyxNQUFNLFFBQVEsR0FBRztBQUNyRCxTQUFPLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNwQztBQUFBLFVBQU0sSUFBSSxDQUFDLFNBQVMsZ0JBQUFELEtBQUMsV0FBMEIsTUFBTSxNQUFNLFdBQXpCLEtBQUssTUFBc0MsQ0FBRTtBQUFBLElBQy9FLFFBQVEsTUFBTSxTQUFTLEtBQUssZ0JBQUFBLEtBQUMsVUFBSyxlQUFDO0FBQUEsSUFDbkMsUUFDQyxnQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDO0FBQUEsUUFDQTtBQUFBLFFBQ0EsUUFBUTtBQUFBLFFBQ1IsV0FBVztBQUFBLFFBQ1gsa0JBQWtCO0FBQUEsUUFDbEIsaUJBQWlCO0FBQUE7QUFBQSxJQUNuQjtBQUFBLEtBRVY7QUFDRjtBQUVBLFNBQVMsaUJBQWlCLE9BQU87QUFDL0IsUUFBTSxPQUFPLENBQUM7QUFDZCxhQUFXLFFBQVEsT0FBTztBQUN4QixRQUFJLEtBQUssU0FBUyxlQUFlLENBQUMsS0FBSyxlQUFlO0FBQ3BELFdBQUssS0FBSyxDQUFDLElBQUksQ0FBQztBQUNoQjtBQUFBLElBQ0Y7QUFDQSxVQUFNLFdBQVcsS0FBSyxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxrQkFBa0IsS0FBSyxhQUFhO0FBQ2hGLFFBQUksU0FBVSxVQUFTLEtBQUssSUFBSTtBQUFBLFFBQzNCLE1BQUssS0FBSyxDQUFDLElBQUksQ0FBQztBQUFBLEVBQ3ZCO0FBQ0EsU0FBTztBQUNUO0FBRU8sU0FBUyxxQkFBcUIsRUFBRSxPQUFPLFNBQVMsTUFBTSxxQkFBcUIsT0FBTyxnQkFBZ0IsVUFBVSxPQUFPLFFBQVEsR0FBRztBQUNuSSxRQUFNLENBQUMsVUFBVSxXQUFXLElBQUlPLGNBQWEsSUFBSTtBQUNqRCxRQUFNLEtBQUssVUFBUSxHQUFHLEtBQUssSUFBSSxJQUFJLEtBQUssU0FBUyxXQUFXO0FBQzVELFFBQU0sYUFBYSxTQUFTLEtBQU0sTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQztBQUN6RCxRQUFNLFlBQVksVUFBUTtBQUFFLGdCQUFZLEdBQUcsSUFBSSxDQUFDO0FBQUcsY0FBVTtBQUFBLEVBQUU7QUFDL0QsRUFBQUUsVUFBUyxXQUFTO0FBQ2hCLFFBQUksQ0FBQyxXQUFZLE1BQU0sUUFBUSxVQUFVLE1BQU0sUUFBUSxRQUFVO0FBQ2pFLFVBQU0sUUFBUSxNQUFNLFVBQVUsVUFBUSxHQUFHLElBQUksTUFBTSxVQUFVO0FBQzdELFVBQU0sT0FBTyxLQUFLLElBQUksR0FBRyxLQUFLLElBQUksTUFBTSxTQUFTLEdBQUcsU0FBUyxNQUFNLFFBQVEsU0FBUyxLQUFLLEVBQUUsQ0FBQztBQUM1RixRQUFJLE1BQU0sSUFBSSxFQUFHLFdBQVUsTUFBTSxJQUFJLENBQUM7QUFDdEMsVUFBTSxnQkFBZ0I7QUFBQSxFQUN4QixDQUFDO0FBQ0QsUUFBTSxhQUFhLGlCQUFpQixLQUFLLElBQUksR0FBRyxLQUFLLE1BQU0sa0JBQWtCLE1BQU0sS0FBSyxVQUFRLEtBQUssU0FBUyxXQUFXLElBQUksTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQzlJLFFBQU0sWUFBWSxXQUFTLEVBQUUsWUFBWSxLQUFLLFNBQVMsZUFBZSxpQkFBaUIsS0FBSyxJQUFJLEdBQUcsS0FBSyxNQUFNLGlCQUFpQixJQUFJLENBQUMsSUFBSSxZQUFZLFNBQVMsV0FBVyxlQUFlLEdBQUcsSUFBSSxHQUFHLFNBQVMsTUFBTSxVQUFVLElBQUksRUFBRTtBQUNoTyxTQUNFLGdCQUFBVCxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxLQUFLLEdBQUcsV0FBVyxFQUFFLEdBQ3pELDJCQUFpQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssVUFBVTtBQUMzQyxVQUFNLFlBQVksSUFBSSxDQUFDLEdBQUcsU0FBUztBQUNuQyxRQUFJLENBQUMsUUFBUSxVQUFXLFFBQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxnQkFBQUEsS0FBQyxvQkFBbUUsTUFBTSxNQUFNLFNBQWtCLG9CQUF5QyxHQUFHLFVBQVUsSUFBSSxLQUFySSxHQUFHLEtBQUssSUFBSSxJQUFJLEtBQUssU0FBUyxXQUFXLEVBQStGLENBQUU7QUFDbE4sVUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLG1CQUFtQixLQUFLLFNBQVMsVUFBVTtBQUN6RixVQUFNLFFBQVEsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsbUJBQW1CLEtBQUssU0FBUyxVQUFVO0FBQzFGLFdBQ0UsZ0JBQUFDLE1BQUMsU0FBK0UsT0FBTyxFQUFFLGVBQWUsT0FBTyxPQUFPLFFBQVEsVUFBVSxRQUFRLFVBQVUsRUFBRSxHQUMxSjtBQUFBLHNCQUFBRCxLQUFDLFNBQUksT0FBTyxFQUFFLE9BQU8sT0FBTyxVQUFVLEdBQUcsVUFBVSxPQUFPLEdBQUksa0JBQVEsZ0JBQUFBLEtBQUMsb0JBQWlCLE1BQU0sTUFBTSxTQUFrQixvQkFBd0MsUUFBTSxNQUFDLFFBQVEsT0FBUSxHQUFHLFVBQVUsSUFBSSxHQUFHLEdBQUc7QUFBQSxNQUM1TSxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxPQUFPLEdBQUcsWUFBWSxFQUFFLEdBQUc7QUFBQSxNQUN6QyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsT0FBTyxHQUFJLG1CQUFTLGdCQUFBQSxLQUFDLG9CQUFpQixNQUFNLE9BQU8sU0FBa0Isb0JBQXdDLFFBQU0sTUFBQyxRQUFRLE9BQVEsR0FBRyxVQUFVLEtBQUssR0FBRyxHQUFHO0FBQUEsU0FIdE0sSUFBSSxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxLQUFLLEVBSTVFO0FBQUEsRUFFSixDQUFDLEdBQ0g7QUFFSjtBQUVPLFNBQVMsUUFBUSxFQUFFLE1BQU0sU0FBUyxhQUFhLE1BQU0sR0FBRztBQUM3RCxNQUFJLEtBQUssU0FBUyxhQUFjLFFBQU8sZ0JBQUFBLEtBQUMsYUFBVSxNQUFZLFNBQWtCO0FBRWhGLE1BQUksS0FBSyxTQUFTLFVBQVUsS0FBSyxXQUFXLFFBQVE7QUFDbEQsVUFBTVUsU0FBUSxzQkFBc0IsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUs7QUFDNUQsV0FDRSxnQkFBQVQsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxFQUFFLEdBQ2pEO0FBQUEsc0JBQUFELEtBQUMsVUFBSyxlQUFDO0FBQUEsTUFDUCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSwyQkFBWVUsTUFBSyxJQUFHO0FBQUEsT0FDdEQ7QUFBQSxFQUVKO0FBRUEsTUFBSSxLQUFLLFNBQVMsc0JBQXNCO0FBQ3RDLFdBQ0UsZ0JBQUFULE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsRUFBRSxHQUNqRDtBQUFBLHNCQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLE1BQ1AsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLFFBQVEsS0FBSyxHQUFJLG9CQUFLLEtBQUssUUFBUSxNQUFNLG9CQUFtQjtBQUFBLFFBQ3pGLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHO0FBQUEsU0FDL0I7QUFBQSxNQUNDLFdBQ0MsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLElBQUksVUFBVSxVQUFVLEdBQUcsV0FBVyxFQUFFLEdBQzVFLGVBQUssUUFBUSxJQUFJLENBQUMsUUFBUSxNQUN6QixnQkFBQUEsS0FBQyxVQUFhLE9BQU8sRUFBRSxPQUFPLFFBQVEsR0FBSSxpQkFBTyxLQUFLLFFBQVEsK0JBQStCLEVBQUUsS0FBcEYsQ0FBc0YsQ0FDbEcsR0FDSDtBQUFBLE9BRUo7QUFBQSxFQUVKO0FBRUEsTUFBSSxLQUFLLFNBQVMsUUFBUTtBQUN4QixXQUFPLGdCQUFBQSxLQUFDLFlBQVUsR0FBRyxNQUFNLFNBQWtCO0FBQUEsRUFDL0M7QUFFQSxNQUFJLEtBQUssU0FBUyxXQUFXO0FBQzNCLFVBQU0sUUFBUSxLQUFLLEtBQUssTUFBTSxJQUFJO0FBQ2xDLFdBQ0UsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsRUFBRSxHQUNqRDtBQUFBLHNCQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLE1BQ1AsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLFFBQVEsS0FBSyxHQUFJLGVBQUssV0FBVyxZQUFZLDREQUF1RCx3Q0FBa0M7QUFBQSxRQUNuSyxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLFFBQzdCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGFBQUcsTUFBTSxNQUFNLElBQUksTUFBTSxXQUFXLElBQUksU0FBUyxPQUFPLElBQUc7QUFBQSxTQUM3RjtBQUFBLE1BQ0MsV0FDQyxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsSUFBSSxVQUFVLFVBQVUsR0FBRyxXQUFXLEVBQUUsR0FDNUU7QUFBQSxjQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sTUFDOUIsZ0JBQUFELEtBQUMsVUFBYSxPQUFPLEVBQUUsT0FBTyxRQUFRLEdBQUksa0JBQVEsT0FBdkMsQ0FBMkMsQ0FDdkQ7QUFBQSxRQUNBLE1BQU0sU0FBUyxPQUFPLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLG9CQUFLLE1BQU0sU0FBUyxHQUFHLGVBQWM7QUFBQSxTQUM5RjtBQUFBLE9BRUo7QUFBQSxFQUVKO0FBRUEsTUFBSSxLQUFLLFNBQVMsWUFBWTtBQUM1QixXQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEVBQUUsR0FDakQ7QUFBQSxzQkFBQUQsS0FBQyxVQUFLLGVBQUM7QUFBQSxNQUNQLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUN4QiwwQkFBQUEsS0FBQyxZQUFTLE1BQU0sS0FBSyxNQUFNLE9BQU8sRUFBRSxPQUFPLE9BQU8sUUFBUSxLQUFLLEdBQUcsR0FDcEU7QUFBQSxPQUNGO0FBQUEsRUFFSjtBQUVBLE1BQUksS0FBSyxTQUFTLHFCQUFxQjtBQUNyQyxXQUFPLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLDBCQUFBQSxLQUFDLG9CQUFpQixNQUFZLFNBQWtCLEdBQUU7QUFBQSxFQUN6RjtBQUVBLE1BQUksS0FBSyxTQUFTLFVBQVU7QUFDMUIsV0FDRSxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxFQUFFLEdBQ2pEO0FBQUEsc0JBQUFELEtBQUMsVUFBSyxlQUFDO0FBQUEsTUFDUCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sUUFBUSxLQUFLLEdBQUksb0JBQUssS0FBSyxLQUFLLFFBQVEsK0JBQStCLEVBQUUsQ0FBQyxJQUFHO0FBQUEsT0FDNUc7QUFBQSxFQUVKO0FBRUEsTUFBSSxLQUFLLFNBQVMsU0FBUztBQUN6QixXQUNFLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEVBQUUsR0FDakQ7QUFBQSxzQkFBQUQsS0FBQyxVQUFLLGVBQUM7QUFBQSxNQUNQLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxRQUFRLEtBQUssR0FBSSwyQkFBWSxLQUFLLElBQUksSUFBRztBQUFBLE9BQ3hFO0FBQUEsRUFFSjtBQUVBLE1BQUksS0FBSyxTQUFTLGVBQWU7QUFDL0IsV0FDRSxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsVUFBVSxFQUFFLEdBQ3JDLDBCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxRQUFRLEtBQUssR0FBSSwwQkFBTSxLQUFLLEtBQUssU0FBUyxLQUFLLFVBQVUsSUFBSSxnQkFBZ0IsY0FBYyx3QkFBYSxHQUN2STtBQUFBLEVBRUo7QUFFQSxNQUFJLEtBQUssU0FBUyxpQkFBaUI7QUFDakMsVUFBTSxRQUFRLFVBQVUsS0FBSyxNQUFNLE1BQU07QUFDekMsV0FDRSxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxFQUFFLEdBQ2pEO0FBQUEsc0JBQUFELEtBQUMsVUFBSyxlQUFDO0FBQUEsTUFDUCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sTUFBTSxLQUFLLEdBQUkscUJBQVU7QUFBQSxNQUN0RCxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsYUFBYSxFQUFFLEdBQ25ELGdCQUFNLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLE1BQU0sZ0JBQUFBLEtBQUMsVUFBYyxhQUFHLE1BQU0sSUFBSSxPQUFPLElBQUksR0FBRyxRQUFRLEdBQUcsTUFBMUMsQ0FBNkMsQ0FBTyxHQUNyRztBQUFBLE9BQ0Y7QUFBQSxFQUVKO0FBRUEsTUFBSSxLQUFLLFNBQVMsZ0JBQWdCO0FBQ2hDLFdBQ0UsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsRUFBRSxHQUNqRDtBQUFBLHNCQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLE1BQ1AsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLE1BQU0sS0FBSyxHQUFJLG9CQUFTO0FBQUEsTUFDckQsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLGFBQWEsRUFBRSxHQUNuRCxlQUFLLEtBQUssTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sTUFBTSxnQkFBQUEsS0FBQyxVQUFhLE9BQU8sRUFBRSxPQUFPLFFBQVEsR0FBSSxrQkFBUSxPQUF2QyxDQUEyQyxDQUFPLEdBQ3ZHO0FBQUEsT0FDRjtBQUFBLEVBRUo7QUFFQSxNQUFJLEtBQUssU0FBUyxRQUFRO0FBQ3hCLFVBQU0sV0FBVyxLQUFLLGNBQWM7QUFDcEMsVUFBTSxTQUFTLFlBQVksQ0FBQyxLQUFLO0FBQ2pDLFVBQU0sUUFBUSxZQUFZLEtBQUssT0FBTyxRQUFRO0FBQzlDLFVBQU0sU0FBUyxXQUFXLEtBQUssU0FBUyxXQUFXLE1BQU0sS0FBSyxLQUFLLEtBQUssVUFBVSxTQUFTO0FBQzNGLFdBQ0UsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLGFBQWEsRUFBRSxHQUNwRDtBQUFBLHNCQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLE1BQ1AsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLE1BQU0sS0FBSyxHQUFJLGNBQUksS0FBSyxLQUFLLElBQUksWUFBTyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssU0FBUyxhQUFhLEVBQUUsSUFBRztBQUFBLFFBQ25ILGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxPQUFPLEdBQUksa0JBQU87QUFBQSxTQUNoRDtBQUFBLE1BQ0EsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsTUFBTSxHQUFJLGVBQUssTUFBSztBQUFBLE1BQ2xDLEtBQUssU0FBUyxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLElBQUksR0FBSSxlQUFLLE9BQU07QUFBQSxPQUMxRDtBQUFBLEVBRUo7QUFFQSxNQUFJLEtBQUssU0FBUyxRQUFRO0FBQ3hCLFVBQU1VLFNBQVEsY0FBYyxLQUFLLFNBQVMsc0JBQXNCLGFBQWEsU0FBUztBQUN0RixXQUNFLGdCQUFBVCxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsU0FBUyxHQUNwQztBQUFBLHNCQUFBRCxLQUFDLFVBQUssZUFBQztBQUFBLE1BQ1AsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsd0JBQUFELEtBQUMsU0FBSSxPQUFPLEVBQUUsT0FBTyxHQUFHLFlBQVksR0FBRyxJQUFJLEtBQUssZ0JBQWdCLE9BQU8sSUFBSSxTQUFTLEdBQUc7QUFBQSxRQUN2RixnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxJQUFJLEtBQUssZ0JBQWdCLFlBQVksVUFBVSxlQUFlLFVBQVUsVUFBVSxHQUFHLGFBQWEsR0FBRyxjQUFjLEdBQUcsVUFBVSxFQUFFLEdBQzdJO0FBQUEsVUFBQVMsVUFBUyxnQkFBQVYsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEtBQUssZ0JBQWdCLE9BQU8sSUFBSSxPQUFPLE1BQU0sS0FBSyxHQUFJLFVBQUFVLFFBQU07QUFBQSxVQUM1RixnQkFBQVYsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEdBQUcsR0FBSSxlQUFLLE1BQUs7QUFBQSxXQUN6QztBQUFBLFNBQ0Y7QUFBQSxPQUNGO0FBQUEsRUFFSjtBQUVBLFFBQU0sT0FBTyxLQUFLLGNBQWMsR0FBRyxLQUFLLElBQUkscUJBQXFCLEtBQUs7QUFDdEUsUUFBTSxRQUFRLGNBQWMsS0FBSyxTQUFTLHNCQUFzQixhQUFhLGNBQWM7QUFDM0YsU0FDRSxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFNBQVMsR0FDcEM7QUFBQSxvQkFBQUQsS0FBQyxVQUFLLGVBQUM7QUFBQSxJQUNQLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHNCQUFBRCxLQUFDLFNBQUksT0FBTyxFQUFFLE9BQU8sR0FBRyxZQUFZLEdBQUcsSUFBSSxLQUFLLGdCQUFnQixPQUFPLElBQUksT0FBVSxHQUFHO0FBQUEsTUFDeEYsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxhQUFhLEdBQUcsY0FBYyxHQUFHLFVBQVUsYUFBYSxJQUFJLEdBQUcsSUFBSSxLQUFLLGdCQUFnQixZQUFZLE9BQVUsR0FDL0o7QUFBQSxpQkFBUyxnQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEtBQUssZ0JBQWdCLE9BQU8sSUFBSSxPQUFPLE1BQU0sS0FBSyxHQUFJLGlCQUFNO0FBQUEsUUFDNUYsZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQztBQUFBLFlBQ0E7QUFBQSxZQUNBLFFBQVE7QUFBQSxZQUNSLFdBQVc7QUFBQSxZQUNYLGtCQUFrQjtBQUFBLFlBQ2xCLGlCQUFpQjtBQUFBO0FBQUEsUUFDbkI7QUFBQSxTQUNGO0FBQUEsT0FDRjtBQUFBLEtBQ0Y7QUFFSjs7O0FFNWlCQSxTQUFTLGdCQUFBVyxlQUFjLGFBQUFDLFlBQVcsYUFBQUMsa0JBQWlCO0FBR25ELFNBQVMscUJBQXFCLDZCQUE2QjtBQVdsRCxnQkFBQUMsTUEwR0wsUUFBQUMsYUExR0s7QUFUVCxTQUFTLGFBQWEsRUFBRSxPQUFPLEdBQUc7QUFDaEMsUUFBTSxTQUFTQyxXQUFVO0FBQ3pCLFNBQU8sVUFBVSxPQUFPO0FBQ3hCLFNBQU87QUFDVDtBQUVBLFNBQVMsY0FBYyxFQUFFLE1BQU0sU0FBUyxjQUFjLE9BQU8sR0FBRztBQUM5RCxRQUFNLFNBQVNBLFdBQVU7QUFDekIsTUFBSSxhQUFjLFFBQU8sY0FBYyxRQUFRLFlBQVk7QUFDM0QsU0FBTyxnQkFBQUYsS0FBQyxXQUFRLE1BQVksU0FBa0I7QUFDaEQ7QUFFTyxTQUFTLHlCQUF5QixFQUFFLElBQUksU0FBUyxXQUFXLFVBQVUsR0FBRztBQUM5RSxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlHLGNBQWEsS0FBSztBQUM5QyxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLGNBQWEsRUFBRTtBQUN6QyxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLGNBQWEsS0FBSztBQUNwRCxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlBLGNBQWEsQ0FBQztBQUN4QyxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUlBLGNBQWEsS0FBSztBQUN0RCxRQUFNLENBQUMsZUFBZSxnQkFBZ0IsSUFBSUEsY0FBYSxDQUFDO0FBQ3hELFFBQU0sQ0FBQyxNQUFNLElBQUlBLGNBQWEsRUFBRSxTQUFTLEdBQUcsS0FBSyxLQUFLLENBQUM7QUFFdkQsV0FBUyxnQkFBZ0I7QUFDdkIsUUFBSSxDQUFDLE9BQU8sRUFBRztBQUNmLE9BQUcsS0FBSyxxQkFBcUI7QUFDN0IsUUFBSSxXQUFXLEdBQUc7QUFDaEIsb0JBQWMsS0FBSztBQUNuQixTQUFHLE1BQU0scUJBQXFCO0FBQUEsSUFDaEM7QUFBQSxFQUNGO0FBRUEsV0FBUyxPQUFPO0FBQ2QsY0FBVSxJQUFJO0FBQ2QsYUFBUyxFQUFFO0FBQ1gsaUJBQWEsS0FBSztBQUNsQixhQUFTLENBQUM7QUFDVixrQkFBYyxJQUFJO0FBQUEsRUFDcEI7QUFFQSxXQUFTLE1BQU0sRUFBRSxlQUFlLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFDM0MsY0FBVSxLQUFLO0FBQ2YsYUFBUyxFQUFFO0FBQ1gsaUJBQWEsS0FBSztBQUNsQixhQUFTLENBQUM7QUFDVixRQUFJLGdCQUFnQixHQUFHLEdBQUcscUJBQXFCLEVBQUcsSUFBRyxNQUFNLE1BQU07QUFBQSxFQUNuRTtBQUVBLFdBQVMsWUFBWSxPQUFPLFNBQVM7QUFDbkMsUUFBSSxPQUFPLEtBQUssQ0FBQyxHQUFHLEdBQUcscUJBQXFCLEdBQUc7QUFDN0MsWUFBTSxFQUFFLGNBQWMsTUFBTSxDQUFDO0FBQzdCLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxDQUFDLE9BQU8sS0FBSyxDQUFDLFVBQVUsRUFBRyxRQUFPO0FBQ3RDLFVBQU0sUUFBUSxRQUFRO0FBQ3RCLFFBQUksTUFBTSxRQUFRLFNBQVUsT0FBTTtBQUFBLGFBQ3pCLE1BQU0sUUFBUSxPQUFPLENBQUMsTUFBTSxPQUFPO0FBQzFDLFVBQUksT0FBTztBQUNULGtCQUFVLE1BQU0sSUFBSSxLQUFLLEtBQUs7QUFDOUIseUJBQWlCLENBQUMsWUFBWSxVQUFVLENBQUM7QUFBQSxNQUMzQztBQUFBLElBQ0YsV0FBVyxNQUFNLFFBQVEsT0FBUSxNQUFNLFNBQVMsTUFBTSxRQUFRLEtBQU07QUFDbEUsVUFBSSxPQUFPO0FBQ1Qsa0JBQVUsTUFBTSxJQUFJLElBQUksU0FBUyxLQUFLO0FBQ3RDLHlCQUFpQixDQUFDLFlBQVksVUFBVSxDQUFDO0FBQUEsTUFDM0M7QUFBQSxJQUNGLFdBQVcsTUFBTSxRQUFRLE1BQU0sUUFBUSxJQUFLLFFBQU87QUFBQSxRQUM5QyxRQUFPO0FBQ1osVUFBTSxnQkFBZ0I7QUFDdEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLFFBQVEsT0FBTztBQUN0QixVQUFNLFVBQVUsb0JBQW9CLE9BQU8sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUM3RCxVQUFNLFlBQVksS0FBSyxJQUFJLEdBQUcsUUFBUSxTQUFTLENBQUM7QUFDaEQsUUFBSSxNQUFNLElBQUksVUFBVyxVQUFTLFNBQVM7QUFDM0MsV0FBTztBQUFBLE1BQ0w7QUFBQSxNQUNBLE9BQU8sT0FBTyxJQUFJLHNCQUFzQixPQUFPLE1BQU0sR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUk7QUFBQSxJQUNoRjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLGNBQWMsUUFBUSxPQUFPO0FBQ3BDLFVBQU0sU0FBUyxPQUFPO0FBQ3RCLFVBQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxLQUFLLGNBQWMsQ0FBQztBQUNwRSxRQUFJLE9BQU8sUUFBUSxJQUFLO0FBQ3hCLFdBQU8sTUFBTTtBQUNiLGNBQVUsS0FBSztBQUNmLGNBQVUsS0FBSyxJQUFJLEdBQUcsT0FBTyxJQUFJLE9BQU8sVUFBVSxNQUFNLE9BQU8sQ0FBQyxDQUFDO0FBQUEsRUFDbkU7QUFFQSxXQUFTLFlBQVksT0FBTztBQUMxQixhQUFTLEtBQUs7QUFDZCxhQUFTLENBQUM7QUFDVixxQkFBaUIsQ0FBQyxZQUFZLFVBQVUsQ0FBQztBQUFBLEVBQzNDO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLFNBQVMsTUFBTSxHQUFHLEdBQUcscUJBQXFCO0FBQUEsSUFDMUM7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxRQUFRLE9BQU87QUFBQSxJQUNmO0FBQUEsSUFDQSxRQUFRLE1BQU0sYUFBYSxJQUFJO0FBQUEsSUFDL0I7QUFBQSxFQUNGO0FBQ0Y7QUFFTyxTQUFTLHNCQUFzQixFQUFFLFFBQVEsUUFBUSxHQUFHO0FBQ3pELFNBQ0UsZ0JBQUFGLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLFlBQVksR0FBRyxRQUFRLEdBQUcsSUFBSSxVQUFVLFVBQVUsRUFBRSxHQUN0RjtBQUFBLG9CQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksZ0JBQUs7QUFBQSxJQUN2QyxPQUFPLFVBQVUsSUFDZCxnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLElBQUksVUFBVSxFQUFFLEdBQUksaUJBQU8sTUFBTSxHQUFFLElBQ3pELGdCQUFBQTtBQUFBLE1BQUNJO0FBQUEsTUFBQTtBQUFBLFFBQ0MsU0FBUyxPQUFPLFFBQVE7QUFBQSxRQUN4QixPQUFPLE9BQU8sTUFBTTtBQUFBLFFBQ3BCLFVBQVUsT0FBTztBQUFBLFFBQ2pCLFVBQVUsT0FBTztBQUFBLFFBQ2pCLFVBQVUsT0FBTztBQUFBO0FBQUEsSUFDbkI7QUFBQSxJQUNKLGdCQUFBSixLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGtCQUFRLFNBQVMsR0FBRyxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksUUFBUSxNQUFNLEtBQUssT0FBTTtBQUFBLEtBQ3JHO0FBRUo7OztBQ3RJQSxTQUFTLGdCQUFBSyxlQUFjLFVBQUFDLFNBQVEsYUFBQUMsWUFBVyxZQUFBQyxpQkFBZ0I7QUFtSWxELFNBQ0UsT0FBQUMsTUFERixRQUFBQyxhQUFBO0FBaElSLFNBQVMsV0FBVyxVQUFVLFFBQVE7QUFDcEMsTUFBSSxNQUFNLFFBQVEsTUFBTSxFQUFHLFFBQU8sT0FBTyxLQUFLLElBQUk7QUFDbEQsU0FBTyxVQUFVO0FBQ25CO0FBRU8sU0FBUyxhQUFhLEVBQUUsU0FBUyxTQUFTLFVBQVUsU0FBUyxHQUFHO0FBQ3JFLFFBQU0sWUFBWSxRQUFRO0FBQzFCLFFBQU0sWUFBWSxVQUFVLFNBQVM7QUFDckMsUUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJQyxjQUFhLENBQUM7QUFDdEMsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJQSxjQUFhLENBQUMsQ0FBQztBQUM3QyxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlBLGNBQWEsQ0FBQztBQUMxQyxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlBLGNBQWEsS0FBSztBQUM5QyxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlBLGNBQWEsS0FBSztBQUM5QyxRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlBLGNBQWEsUUFBUTtBQUVuRCxRQUFNLFdBQVcsTUFBTSxVQUFVLEtBQUssQ0FBQztBQUN2QyxRQUFNLFVBQVUsTUFBTSxTQUFTLEVBQUUsV0FBVyxDQUFDO0FBQzdDLFFBQU0sT0FBTyxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsR0FBSSxTQUFTLEVBQUUsZUFBZSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxTQUFTLE9BQU8sS0FBSyxDQUFDLENBQUU7QUFDL0csUUFBTSxXQUFXLENBQUMsV0FBVyxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsU0FBUyxLQUFLO0FBQzNFLFFBQU0sY0FBYyxNQUFNO0FBQ3hCLFVBQU0sU0FBUyxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUU7QUFDdEMsVUFBTSxTQUFTLElBQUksSUFBSSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsT0FBTyxLQUFLLENBQUM7QUFDOUQsUUFBSSxNQUFNLFFBQVEsTUFBTSxFQUFHLFFBQU8sT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSztBQUNoRixXQUFPLFVBQVUsQ0FBQyxPQUFPLElBQUksTUFBTSxJQUFJLFNBQVM7QUFBQSxFQUNsRDtBQUVBLFdBQVMsVUFBVSxPQUFPO0FBQ3hCLGVBQVcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUU7QUFBQSxFQUNsRTtBQUVBLFdBQVMsVUFBVTtBQUNqQixjQUFVLEtBQUs7QUFDZixjQUFVLENBQUM7QUFDWCxlQUFXLFFBQVE7QUFDbkIsUUFBSSxLQUFLLElBQUksVUFBVSxTQUFTLEVBQUcsU0FBUSxLQUFLLElBQUksQ0FBQztBQUFBLGFBQzVDLFdBQVc7QUFBRSxnQkFBVSxVQUFVLE1BQU07QUFBRyxnQkFBVSxJQUFJO0FBQUEsSUFBRSxNQUM5RCxRQUFPO0FBQUEsRUFDZDtBQUVBLFdBQVMsU0FBUztBQUNoQixhQUFTLFVBQVUsSUFBSSxDQUFDQyxXQUFVLEVBQUUsSUFBSUEsTUFBSyxJQUFJLFVBQVVBLE1BQUssVUFBVSxRQUFRLFFBQVEsRUFBRUEsTUFBSyxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7QUFBQSxFQUNoSDtBQUVBLFdBQVMsV0FBVyxPQUFPO0FBQ3pCLFVBQU0sU0FBUyxNQUFNLEtBQUs7QUFDMUIsUUFBSSxDQUFDLE9BQVE7QUFDYixjQUFVLE1BQU07QUFDaEIsUUFBSSxVQUFVLFdBQVcsRUFBRyxVQUFTLENBQUMsRUFBRSxJQUFJLEtBQUssSUFBSSxVQUFVLEtBQUssVUFBVSxPQUFPLENBQUMsQ0FBQztBQUFBLFFBQ2xGLFNBQVE7QUFBQSxFQUNmO0FBRUEsV0FBUyxZQUFZLE9BQU87QUFDMUIsVUFBTSxTQUFTLE1BQU0sS0FBSztBQUMxQixVQUFNLFFBQVEsSUFBSSxLQUFLLEtBQUssV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsT0FBTyxLQUFLLENBQUM7QUFDeEUsVUFBTSxVQUFVLEtBQUssU0FBUyxXQUFXLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDMUcsVUFBTSxhQUFhLEtBQUssU0FBUyxVQUFVLENBQUMsR0FBRyxTQUFTLEdBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUUsSUFBSTtBQUN2RixjQUFVLFVBQVU7QUFDcEIsY0FBVSxLQUFLO0FBQ2YsUUFBSSxLQUFLLFNBQVMsWUFBWSxRQUFRO0FBQ3BDLFVBQUksVUFBVSxXQUFXLEVBQUcsVUFBUyxDQUFDLEVBQUUsSUFBSSxLQUFLLElBQUksVUFBVSxLQUFLLFVBQVUsT0FBTyxDQUFDLENBQUM7QUFBQSxVQUNsRixTQUFRO0FBQUEsSUFDZjtBQUFBLEVBQ0Y7QUFFQSxFQUFBQyxVQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLENBQUMsUUFBUztBQUNkLFFBQUksTUFBTSxRQUFRLFVBQVU7QUFDMUIsVUFBSSxPQUFPLEdBQUc7QUFBRSxrQkFBVSxLQUFLO0FBQUcsbUJBQVcsUUFBUTtBQUFBLE1BQUUsV0FDOUMsT0FBTyxFQUFHLFdBQVUsS0FBSztBQUFBLFVBQzdCLFVBQVM7QUFDZCxZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLE9BQU8sR0FBRztBQUNaLFVBQUksTUFBTSxRQUFRLFFBQVEsTUFBTSxRQUFRLElBQUssV0FBVSxLQUFLLElBQUksR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQUEsZUFDdkUsTUFBTSxRQUFRLFVBQVUsTUFBTSxRQUFRLElBQUssV0FBVSxLQUFLLElBQUksVUFBVSxRQUFRLE9BQU8sSUFBSSxDQUFDLENBQUM7QUFBQSxlQUM3RixNQUFNLFFBQVEsVUFBVTtBQUMvQixZQUFJLE9BQU8sTUFBTSxVQUFVLE9BQVEsUUFBTztBQUFBLGFBQ3JDO0FBQUUsa0JBQVEsT0FBTyxDQUFDO0FBQUcsb0JBQVUsQ0FBQztBQUFHLHFCQUFXLFFBQVE7QUFBRyxvQkFBVSxLQUFLO0FBQUEsUUFBRTtBQUFBLE1BQ2pGLE1BQU87QUFDUCxZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLEtBQUssSUFBSSxNQUFNLE1BQU0sUUFBUSxTQUFTLE1BQU0sUUFBUSxjQUFjO0FBQ3BFLGlCQUFXLFFBQVEsTUFBTSxTQUFTLFdBQVcsTUFBTTtBQUNuRCxZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLFFBQVEsTUFBTSxPQUFRO0FBQzFCLFFBQUksT0FBTyxHQUFHO0FBQ1osVUFBSSxNQUFNLFFBQVEsU0FBUyxNQUFNLFFBQVEsYUFBYTtBQUNwRCxrQkFBVSxLQUFLO0FBQ2YsbUJBQVcsUUFBUTtBQUNuQixjQUFNLGdCQUFnQjtBQUFBLE1BQ3hCO0FBQ0E7QUFBQSxJQUNGO0FBQ0EsUUFBSSxTQUFTLEdBQUcsU0FBUyxPQUFRO0FBQ2pDLFFBQUksTUFBTSxRQUFRLFFBQVEsTUFBTSxRQUFRLElBQUssV0FBVSxLQUFLLElBQUksR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQUEsYUFDdkUsTUFBTSxRQUFRLFVBQVUsTUFBTSxRQUFRLElBQUssV0FBVSxLQUFLLElBQUksS0FBSyxFQUFFLFNBQVMsR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQUEsYUFDOUYsTUFBTSxRQUFRLFdBQVcsU0FBUyxFQUFFLFNBQVMsU0FBUztBQUM3RCxZQUFNLE1BQU0sS0FBSyxFQUFFLE9BQU8sQ0FBQztBQUMzQixVQUFJLElBQUksT0FBTztBQUNiLFlBQUksWUFBWSxHQUFHO0FBQ2pCLGdCQUFNLFFBQVEsSUFBSSxJQUFJLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxPQUFPLEtBQUssQ0FBQztBQUM3RCxxQkFBVyxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQzlFLG9CQUFVLEtBQUs7QUFBQSxRQUNqQixNQUFPLFdBQVUsSUFBSTtBQUFBLE1BQ3ZCLE9BQU87QUFDTCxjQUFNLFVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssQ0FBQztBQUM3QyxrQkFBVSxRQUFRLFNBQVMsSUFBSSxLQUFLLElBQUksUUFBUSxPQUFPLENBQUMsVUFBVSxVQUFVLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxTQUFTLElBQUksS0FBSyxDQUFDO0FBQUEsTUFDbEg7QUFBQSxJQUNGLFdBQVcsTUFBTSxRQUFRLFVBQVU7QUFDakMsWUFBTSxNQUFNLEtBQUssRUFBRSxPQUFPLENBQUM7QUFDM0IsVUFBSSxTQUFTLEVBQUUsU0FBUyxRQUFTLFNBQVE7QUFBQSxlQUNoQyxJQUFJLE1BQU8sV0FBVSxJQUFJO0FBQUEsV0FDN0I7QUFDSCxrQkFBVSxJQUFJLEtBQUs7QUFDbkIsWUFBSSxVQUFVLFdBQVcsRUFBRyxVQUFTLENBQUMsRUFBRSxJQUFJLFNBQVMsRUFBRSxJQUFJLFVBQVUsU0FBUyxFQUFFLFVBQVUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDO0FBQUEsWUFDekcsU0FBUTtBQUFBLE1BQ2Y7QUFBQSxJQUNGLE1BQU87QUFDUCxVQUFNLGdCQUFnQjtBQUFBLEVBQ3hCLENBQUM7QUFFRCxNQUFJLE9BQU8sR0FBRztBQUNaLFdBQ0UsZ0JBQUFILE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLElBQUksVUFBVSxVQUFVLEdBQUcsVUFBVSxHQUFHLFdBQVcsRUFBRSxHQUMxRjtBQUFBLHNCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHdCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxHQUFHLE1BQU0sS0FBSyxHQUFHLDRCQUFjO0FBQUEsUUFDNUQsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUc7QUFBQSxRQUM3QixnQkFBQUEsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyw4Q0FBZ0M7QUFBQSxTQUNqRTtBQUFBLE1BQ0MsVUFBVSxJQUFJLENBQUNHLE9BQU0sVUFDcEIsZ0JBQUFGLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLElBQUksT0FBTyxNQUFNLFFBQVEsWUFBWSxRQUFXLFVBQVUsRUFBRSxHQUNqRztBQUFBLHdCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxNQUFNLFFBQVEsT0FBTyxJQUFJLEdBQUcsR0FBSSxVQUFBRyxNQUFLLFVBQVM7QUFBQSxRQUMzRSxnQkFBQUgsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxxQkFBV0csT0FBTSxRQUFRLEVBQUVBLE1BQUssRUFBRSxDQUFDLEdBQUU7QUFBQSxTQUN2RSxDQUNEO0FBQUEsTUFDRCxnQkFBQUgsS0FBQyxVQUFLLE9BQU8sRUFBRSxJQUFJLE9BQU8sTUFBTSxVQUFVLFNBQVMsT0FBTyxJQUFJLFFBQVcsT0FBTyxPQUFPLE1BQU0sVUFBVSxTQUFTLFVBQVUsSUFBSSxNQUFNLEtBQUssR0FBRyw4QkFBZ0I7QUFBQSxPQUM5SjtBQUFBLEVBRUo7QUFFQSxRQUFNLE9BQU8sU0FBUztBQUN0QixRQUFNLFdBQVcsVUFBVSxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxPQUFPLFVBQVUsTUFBTSxLQUFLO0FBQ2pGLFNBQ0UsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLElBQUksVUFBVSxVQUFVLEdBQUcsVUFBVSxHQUFHLFdBQVcsRUFBRSxHQUMxRjtBQUFBLG9CQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNoQztBQUFBLFdBQUssSUFBSSxLQUNSLGdCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUNqQztBQUFBLHdCQUFBRDtBQUFBLFVBQUNLO0FBQUEsVUFBQTtBQUFBLFlBQ0MsT0FBTTtBQUFBLFlBQ04sU0FBUyxXQUFXLFFBQVEsTUFBTTtBQUFBLFlBQ2xDLFNBQVMsTUFBTTtBQUNiLHNCQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLHdCQUFVLENBQUM7QUFDWCx3QkFBVSxLQUFLO0FBQ2YseUJBQVcsUUFBUTtBQUFBLFlBQ3JCO0FBQUE7QUFBQSxRQUNGO0FBQUEsUUFDQSxnQkFBQUwsS0FBQyxVQUFLLGdCQUFFO0FBQUEsU0FDVjtBQUFBLE1BRUYsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEdBQUcsTUFBTSxLQUFLLEdBQUksb0JBQVM7QUFBQSxNQUN4RCxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLE1BQzdCLGdCQUFBQyxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJO0FBQUEsYUFBSyxTQUFTLFVBQVUsbUNBQW1DO0FBQUEsUUFBZ0I7QUFBQSxTQUFhO0FBQUEsT0FDMUg7QUFBQSxJQUNBLGdCQUFBRCxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sSUFBSSxNQUFNLEtBQUssR0FBSSxlQUFLLFVBQVM7QUFBQSxJQUN0RCxLQUFLLGVBQWUsZ0JBQUFBLEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxRQUFRLEdBQUksZUFBSyxhQUFZO0FBQUEsSUFDdkUsS0FBSyxTQUFTLFNBQ2IsZ0JBQUFBLEtBQUMsU0FBSSxPQUFPLEVBQUUsSUFBSSxXQUFXLFVBQVUsR0FBRyxXQUFXLEVBQUUsR0FDckQsMEJBQUFBO0FBQUEsTUFBQ007QUFBQSxNQUFBO0FBQUEsUUFFQyxTQUFTLFdBQVcsUUFBUSxNQUFNO0FBQUEsUUFDbEMsYUFBWTtBQUFBLFFBQ1osY0FBYyxPQUFPLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUFBLFFBQzVFLFVBQVU7QUFBQTtBQUFBLE1BSkwsR0FBRyxLQUFLLEVBQUU7QUFBQSxJQUtqQixHQUNGLElBRUEsZ0JBQUFOLEtBQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFdBQVcsRUFBRSxHQUNqRCxlQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsVUFDbkIsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLElBQUksT0FBTyxNQUFNLFFBQVEsWUFBWSxRQUFXLFVBQVUsRUFBRSxHQUNqRztBQUFBLHNCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxNQUFNLFFBQVEsT0FBTyxJQUFJLEdBQUcsR0FDdEQ7QUFBQSxhQUFLLFNBQVMsVUFDWCxHQUFHLE9BQU8sUUFBUyxZQUFZLElBQUksUUFBUSxRQUFVLFNBQVMsT0FBTyxLQUFLLElBQUksUUFBUSxLQUFNLE1BQzVGLEdBQUcsT0FBTyxNQUFNLFFBQVEsV0FBTSxHQUFHO0FBQUEsUUFBSyxPQUFPO0FBQUEsU0FDbkQ7QUFBQSxNQUNDLE9BQU8sZUFBZSxnQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFFBQVEsR0FBSSxlQUFLLE9BQU8sV0FBVyxJQUFHO0FBQUEsTUFDbEYsT0FBTyxVQUFVLE9BQU8sS0FBSyxZQUFZLE1BQ3hDLGdCQUFBQSxLQUFDLFNBQUksT0FBTyxFQUFFLElBQUksT0FBTyxJQUFJLFdBQVcsUUFBVyxhQUFhLEVBQUUsR0FDaEUsMEJBQUFBO0FBQUEsUUFBQ007QUFBQSxRQUFBO0FBQUEsVUFFQyxTQUFTLFdBQVcsT0FBTztBQUFBLFVBQzNCLGFBQVk7QUFBQSxVQUNaLGNBQWMsWUFBWTtBQUFBLFVBQzFCLFVBQVU7QUFBQTtBQUFBLFFBSkwsR0FBRyxLQUFLLEVBQUU7QUFBQSxNQUtqQixHQUNGO0FBQUEsT0FFSixDQUNELEdBQ0g7QUFBQSxLQUVKO0FBRUo7OztBQ2xOQSxTQUFTLGdCQUFBQyxlQUFjLGVBQUFDLGNBQWEsWUFBQUMsV0FBVSxpQkFBaUI7QUF1RnJELGdCQUFBQyxNQUdBLFFBQUFDLGFBSEE7QUFwRlYsU0FBUyxXQUFXLEVBQUUsT0FBQUMsUUFBTyxRQUFRLFNBQUFDLFNBQVEsR0FBRztBQUM5QyxRQUFNLENBQUMsT0FBTyxRQUFRLElBQUlDLGNBQWEsQ0FBQztBQUN4QyxRQUFNLENBQUMsTUFBTSxPQUFPLElBQUlBLGNBQWEsQ0FBQyxDQUFDO0FBQ3ZDLE1BQUksV0FBVztBQUVmLEVBQUFDLFVBQVMsQ0FBQyxVQUFVO0FBQ2xCLFFBQUksTUFBTSxXQUFXLFVBQVUsTUFBTSxXQUFXLE9BQVE7QUFDeEQsVUFBTSxJQUFJLE1BQU07QUFDaEIsVUFBTSxJQUFJLE1BQU07QUFDaEIsUUFBSSxJQUFJLEtBQUssS0FBS0gsVUFBUyxJQUFJLEtBQUssS0FBSyxPQUFRO0FBQ2pELFVBQU0sS0FBSyxXQUFXLElBQUksU0FBUyxJQUFJO0FBQ3ZDLFVBQU0sS0FBSyxXQUFXLElBQUksU0FBUyxJQUFJO0FBQ3ZDLGVBQVcsRUFBRSxHQUFHLEVBQUU7QUFDbEIsVUFBTSxRQUFRLEtBQUssTUFBTSxLQUFLLEtBQUssRUFBRTtBQUNyQyxRQUFJLFVBQVUsRUFBRztBQUNqQixZQUFRLFlBQVUsQ0FBQyxHQUFHLE9BQU8sTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLE9BQU8sS0FBSyxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7QUFBQSxFQUMvRixDQUFDO0FBRUQsRUFBQUksYUFBWSxNQUFNO0FBQ2hCLGFBQVMsV0FBUyxRQUFRLElBQUk7QUFDOUIsWUFBUSxZQUFVLE9BQU8sSUFBSSxZQUFVLEVBQUUsR0FBRyxPQUFPLEtBQUssTUFBTSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sV0FBUyxNQUFNLE1BQU0sRUFBRSxDQUFDO0FBQUEsRUFDM0csR0FBRyxFQUFFO0FBRUwsUUFBTSxTQUFTO0FBQ2YsUUFBTSxPQUFPLENBQUM7QUFDZCxRQUFNLE9BQU8sT0FBTztBQUNwQixRQUFNLE1BQU0sb0JBQW9CLEtBQUssSUFBSTtBQUN6QyxRQUFNLGNBQWMsTUFDaEIsSUFBSTtBQUFBLElBQ0osS0FBSyxJQUFJLEdBQUcsU0FBUyxJQUFJLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQUEsSUFDakQsS0FBSyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQUEsSUFDbEQsS0FBSyxJQUFJLEtBQUssU0FBUyxJQUFJLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQUEsRUFDckQsRUFBRSxJQUFJLFdBQVMsTUFBTSxTQUFTLEVBQUUsRUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsS0FDMUQ7QUFFSixXQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsS0FBSztBQUMvQixVQUFNLE1BQU0sQ0FBQztBQUNiLGFBQVMsSUFBSSxHQUFHLElBQUlKLFFBQU8sS0FBSztBQUM5QixZQUFNLElBQUksTUFBTTtBQUNoQixZQUFNLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxLQUFLLEtBQUssSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJO0FBQ3hHLFlBQU0sUUFBUSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLEdBQUc7QUFDL0YsWUFBTSxVQUFVLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEdBQUc7QUFDMUUsVUFBSSxvQkFBb0I7QUFDeEIsVUFBSSxtQkFBbUI7QUFDdkIsVUFBSSxjQUFjO0FBQ2xCLGlCQUFXLFNBQVMsS0FBSyxHQUFHO0FBQzFCLGNBQU0sU0FBUyxLQUFLLE1BQU0sTUFBTSxLQUFLLEtBQUssTUFBTSxFQUFFLEtBQUs7QUFDdkQsY0FBTSxLQUFLLE1BQU0sS0FBSyxNQUFNO0FBQzVCLGNBQU0sS0FBSyxNQUFNLEtBQUs7QUFDdEIsY0FBTSxNQUFNLElBQUksTUFBTSxLQUFLO0FBQzNCLGNBQU0sS0FBSyxJQUFJLE1BQU07QUFDckIsY0FBTSxRQUFRLEtBQUssS0FBSyxLQUFLO0FBQzdCLGNBQU0sU0FBUyxDQUFDLEtBQUssS0FBSyxLQUFLO0FBQy9CLGNBQU0sV0FBVyxTQUFTLEtBQUssU0FBUyxNQUFNLE1BQU0sUUFBUTtBQUM1RCxZQUFJLENBQUMsU0FBVTtBQUNmLGNBQU0sTUFBTSxJQUFJLE1BQU0sTUFBTTtBQUM1QixjQUFNLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxNQUFNLE1BQU0sU0FBUyxJQUFJLE1BQU0sUUFBUSxJQUFJLENBQUMsQ0FBQztBQUMzRixjQUFNLFNBQVMsS0FBSyxJQUFJLEVBQUUsU0FBUyxVQUFVLENBQUM7QUFDOUMsY0FBTSxRQUFRLEtBQUssSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDL0QsY0FBTSxRQUFRLE1BQU0sU0FBUyxNQUFNLE1BQU0sUUFBUTtBQUNqRCxjQUFNLGlCQUFpQixLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssRUFBRTtBQUNsRCxjQUFNLGlCQUFpQixLQUFLLElBQUksRUFBRSxpQkFBaUIsbUJBQW1CLEtBQUssTUFBTSxRQUFRLEdBQUc7QUFDNUYsY0FBTSxTQUFTLEtBQUssSUFBSSxpQkFBaUIsT0FBTyxNQUFNLE1BQU0sSUFBSSxJQUFJLGlCQUFpQjtBQUNyRiw2QkFBcUIsUUFBUSxNQUFNLFVBQVUsUUFBUSxNQUFNLFVBQVUsTUFBTSxNQUFNLFFBQVE7QUFDekYsOEJBQXNCLFFBQVEsT0FBTyxTQUFTLFFBQVEsUUFBUSxPQUFPLFNBQVM7QUFDOUUsc0JBQWMsS0FBSyxJQUFJLGFBQWEsS0FBSyxJQUFJLE1BQU0sS0FBSyxNQUFNLE1BQU0sUUFBUSxLQUFLO0FBQUEsTUFDbkY7QUFDQSxZQUFNLFFBQVEsS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQ2pDLFFBQVEscUJBQXFCLFFBQVEsb0JBQW9CLE9BQU8sVUFBVSxNQUFNLE9BQzlFLEdBQUcsQ0FBQztBQUNSLFlBQU0sUUFBUSxLQUFLLElBQUksT0FBTyxTQUFTLEdBQUcsS0FBSyxNQUFNLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDM0UsVUFBSSxLQUFLLEVBQUUsT0FBTyxPQUFPLEtBQUssR0FBRyxPQUFPLGNBQWMsT0FBTyxjQUFjLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztBQUFBLElBQ25HO0FBQ0EsU0FBSyxLQUFLLEdBQUc7QUFBQSxFQUNmO0FBRUEsU0FDRSxnQkFBQUYsS0FBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxFQUFFLEdBQ2hELGVBQUssSUFBSSxDQUFDLEtBQUssTUFBTTtBQUNwQixVQUFNLFFBQVEsTUFBTSxJQUFJLFNBQVMsTUFBTSxJQUFJLElBQUlHLFFBQU8sS0FBSztBQUMzRCxVQUFNLGFBQWEsS0FBSyxLQUFLLEtBQUs7QUFDbEMsVUFBTSxXQUFXO0FBQ2pCLFVBQU0sV0FBVyxJQUFJQSxRQUFPLEdBQUcsU0FBUztBQUN4QyxVQUFNLFFBQVEsQ0FBQyxVQUFVLE1BQU0sSUFBSSxDQUFDLE1BQU0sTUFDeEMsZ0JBQUFILEtBQUMsVUFBYSxPQUFPLEVBQUUsT0FBTyxLQUFLLE9BQU8sS0FBSyxLQUFLLElBQUksR0FBSSxlQUFLLFNBQXRELENBQTRELENBQ3hFO0FBQ0QsV0FDRSxnQkFBQUMsTUFBQyxTQUFZLE9BQU8sRUFBRSxlQUFlLE9BQU8sUUFBUSxHQUFHLFVBQVUsT0FBTyxHQUNyRTtBQUFBLG9CQUFjLE1BQU0sSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQUEsTUFDMUMsY0FDQyxnQkFBQUQsS0FBQyxTQUFJLE9BQU8sRUFBRSxPQUFPLFVBQVUsVUFBVSxFQUFFLEdBQ3hDLG1CQUFTLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE1BQU0sTUFBTSxHQUFHLE9BQU8sTUFBTSxJQUFJLE9BQU8sSUFBSSxNQUFNLEdBQUksaUJBQU0sR0FDdEY7QUFBQSxNQUVELE1BQU0sSUFBSSxNQUFNLGFBQWEsV0FBVyxXQUFXLENBQUMsQ0FBQztBQUFBLFNBUDlDLENBUVY7QUFBQSxFQUVKLENBQUMsR0FDSDtBQUVKO0FBRU8sU0FBUyxXQUFXLEVBQUUsU0FBQUcsVUFBUyxTQUFTLE1BQU0sR0FBRztBQUN0RCxRQUFNLENBQUMsTUFBTSxPQUFPLElBQUlDLGNBQWEsRUFBRSxPQUFPLFFBQVEsT0FBTyxXQUFXLElBQUksUUFBUSxRQUFRLE9BQU8sUUFBUSxHQUFHLENBQUM7QUFDL0csWUFBVSxPQUFPO0FBQ2pCLFFBQU1GLFNBQVEsS0FBSyxJQUFJLEdBQUcsS0FBSyxFQUFFLEtBQUs7QUFDdEMsUUFBTSxTQUFTLEtBQUssSUFBSSxHQUFHLEtBQUssRUFBRSxTQUFTLENBQUM7QUFDNUMsTUFBSSxDQUFDLFFBQVE7QUFDWCxXQUNFLGdCQUFBRCxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxXQUFXLEVBQUUsR0FDbEQ7QUFBQSxzQkFBQUQsS0FBQyxVQUFLLE9BQU8sRUFBRSxNQUFNLE1BQU0sT0FBTyxPQUFPLEVBQUUsR0FBSSxvQkFBUztBQUFBLE1BQ3hELGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGdCQUFNRyxRQUFPLElBQUc7QUFBQSxPQUNsRDtBQUFBLEVBRUo7QUFFQSxTQUNFLGdCQUFBSCxLQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxPQUFBRSxRQUFPLE9BQU8sR0FDbkQsMEJBQUFGLEtBQUMsY0FBVyxPQUFPRSxRQUFPLFFBQWdCLFNBQVNDLFVBQVMsR0FDOUQ7QUFFSjs7O0FDNUhBLFNBQVMsWUFBQUksV0FBVSxhQUFBQyxZQUFXLFlBQUFDLGlCQUFnQjtBQTZGeEMsU0FDRSxPQUFBQyxNQURGLFFBQUFDLGFBQUE7QUExRk4sSUFBTSxZQUFZLENBQUMsYUFBYTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU05QixTQUFTLElBQUksQ0FBQyxNQUFNLFFBQVEsRUFBRSxJQUFJLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQTBFekQsU0FBUyxLQUFLLEVBQUUsVUFBVSxRQUFRLEdBQUc7QUFDMUMsRUFBQUMsVUFBUyxDQUFDLFVBQVU7QUFDbEIsUUFBSSxNQUFNLFFBQVEsVUFBVTtBQUMxQixjQUFRO0FBQ1IsWUFBTSxnQkFBZ0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0YsQ0FBQztBQUVELFNBQ0UsZ0JBQUFELE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFFBQVEsUUFBUSxVQUFVLEdBQUcsVUFBVSxFQUFFLEdBQzlFO0FBQUEsb0JBQUFBLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsc0JBQUFELEtBQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEdBQUcsTUFBTSxLQUFLLEdBQUcsd0JBQVU7QUFBQSxNQUN4RCxnQkFBQUEsS0FBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRztBQUFBLE1BQzdCLGdCQUFBQSxLQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLDJDQUFtQjtBQUFBLE9BQ3BEO0FBQUEsSUFDQSxnQkFBQUEsS0FBQyxVQUFLLGVBQUM7QUFBQSxJQUNQLGdCQUFBQSxLQUFDRyxZQUFBLEVBQVUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLFNBQU8sTUFBQyxXQUFTLE1BQ2xELDBCQUFBSCxLQUFDSSxXQUFBLEVBQVMsTUFBTSxVQUFVLFFBQVEsR0FBRyxRQUFRLE1BQU0sR0FDckQ7QUFBQSxLQUNGO0FBRUo7OztBbkJNUyxTQTZyREMsVUE3ckRELE9BQUFDLE9BZ0RMLFFBQUFDLGFBaERLO0FBOURULElBQU0sV0FBVztBQUFBLEVBQ2YsRUFBRSxNQUFNLFNBQVMsTUFBTSwyQ0FBMkM7QUFBQSxFQUNsRSxFQUFFLE1BQU0sa0JBQWtCLE1BQU0sMENBQTBDO0FBQUEsRUFDMUUsRUFBRSxNQUFNLFdBQVcsTUFBTSxtREFBbUQ7QUFBQSxFQUM1RSxFQUFFLE1BQU0sVUFBVSxNQUFNLDJDQUEyQztBQUFBLEVBQ25FLEVBQUUsTUFBTSxTQUFTLE1BQU0sUUFBUTtBQUFBLEVBQy9CLEVBQUUsTUFBTSxVQUFVLE1BQU0sZ0RBQWdEO0FBQUEsRUFDeEUsRUFBRSxNQUFNLE9BQU8sTUFBTSxzQ0FBc0M7QUFBQSxFQUMzRCxFQUFFLE1BQU0sUUFBUSxNQUFNLG9CQUFvQjtBQUFBLEVBQzFDLEVBQUUsTUFBTSxVQUFVLE1BQU0seURBQXlEO0FBQUEsRUFDakYsRUFBRSxNQUFNLFdBQVcsTUFBTSwyREFBMkQ7QUFBQSxFQUNwRixFQUFFLE1BQU0sT0FBTyxNQUFNLHNEQUFzRDtBQUFBLEVBQzNFLEVBQUUsTUFBTSxVQUFVLE1BQU0saURBQWlEO0FBQUEsRUFDekUsRUFBRSxNQUFNLFlBQVksTUFBTSxtREFBbUQ7QUFBQSxFQUM3RSxFQUFFLE1BQU0sUUFBUSxNQUFNLGtEQUFrRDtBQUFBLEVBQ3hFLEVBQUUsTUFBTSxTQUFTLE1BQU0sOERBQThEO0FBQUEsRUFDckYsRUFBRSxNQUFNLFVBQVUsTUFBTSxpREFBaUQ7QUFBQSxFQUN6RSxFQUFFLE1BQU0sU0FBUyxNQUFNLG9EQUFvRDtBQUFBLEVBQzNFLEVBQUUsTUFBTSxXQUFXLE1BQU0scUNBQXFDO0FBQUEsRUFDOUQsRUFBRSxNQUFNLFVBQVUsTUFBTSxrRUFBa0U7QUFBQSxFQUMxRixFQUFFLE1BQU0sU0FBUyxNQUFNLGtFQUFrRTtBQUFBLEVBQ3pGLEVBQUUsTUFBTSxTQUFTLE1BQU0seURBQXlEO0FBQUEsRUFDaEYsRUFBRSxNQUFNLFVBQVUsTUFBTSxzQ0FBc0M7QUFBQSxFQUM5RCxFQUFFLE1BQU0sT0FBTyxNQUFNLDZDQUE2QztBQUFBLEVBQ2xFLEVBQUUsTUFBTSxZQUFZLE1BQU0sb0RBQW9EO0FBQUEsRUFDOUUsRUFBRSxNQUFNLGNBQWMsTUFBTSxtREFBbUQ7QUFBQSxFQUMvRSxFQUFFLE1BQU0sV0FBVyxNQUFNLHFDQUFxQztBQUFBLEVBQzlELEVBQUUsTUFBTSxVQUFVLE1BQU0sdURBQXVEO0FBQUEsRUFDL0UsRUFBRSxNQUFNLFdBQVcsTUFBTSx3REFBd0Q7QUFBQSxFQUNqRixFQUFFLE1BQU0sU0FBUyxNQUFNLHFEQUFxRDtBQUFBLEVBQzVFLEVBQUUsTUFBTSxRQUFRLE1BQU0sNkNBQTZDO0FBQUEsRUFDbkUsRUFBRSxNQUFNLFdBQVcsTUFBTSwrREFBK0Q7QUFBQSxFQUN4RixFQUFFLE1BQU0sVUFBVSxNQUFNLG1EQUFtRDtBQUFBLEVBQzNFLEVBQUUsTUFBTSxVQUFVLE1BQU0sNkNBQTZDO0FBQUEsRUFDckUsRUFBRSxNQUFNLFFBQVEsTUFBTSxzQ0FBc0M7QUFDOUQ7QUFFQSxJQUFNLGlCQUFpQixDQUFDLFdBQVcsV0FBVyxZQUFZO0FBQzFELElBQU0sZ0JBQWdCLENBQUMsT0FBTyxXQUFXLFFBQVE7QUFHakQsU0FBUyxhQUFhLE9BQU8sTUFBTSxLQUFLLElBQUksR0FBRztBQUM3QyxNQUFJLENBQUMsTUFBTSxVQUFXLFFBQU87QUFDN0IsUUFBTSxVQUFVLEtBQUssSUFBSSxHQUFHLEtBQUssUUFBUSxNQUFNLFdBQVcsT0FBTyxNQUFNLGFBQWEsR0FBSSxDQUFDO0FBQ3pGLFFBQU0sVUFBVSxLQUFLLE1BQU0sVUFBVSxFQUFFO0FBQ3ZDLFFBQU0sUUFBUSxLQUFLLE1BQU0sVUFBVSxFQUFFO0FBQ3JDLE1BQUksTUFBTyxRQUFPLEdBQUcsS0FBSyxLQUFLLFVBQVUsRUFBRTtBQUMzQyxNQUFJLFFBQVMsUUFBTyxHQUFHLE9BQU8sS0FBSyxVQUFVLEVBQUU7QUFDL0MsU0FBTyxHQUFHLE9BQU87QUFDbkI7QUFFQSxTQUFTLFlBQVksT0FBTztBQUMxQixNQUFJLE1BQU0sV0FBVyxVQUFXLFFBQU8sRUFBRSxNQUFNLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxFQUFFO0FBQzlFLE1BQUksTUFBTSxXQUFXLFNBQVUsUUFBTyxFQUFFLE1BQU0sVUFBSyxPQUFPLFVBQVUsT0FBTyxNQUFNO0FBQ2pGLE1BQUksTUFBTSxXQUFXLFlBQWEsUUFBTyxFQUFFLE1BQU0sVUFBSyxPQUFPLElBQUksT0FBTyxNQUFNO0FBQzlFLE1BQUksTUFBTSxXQUFXLFNBQVUsUUFBTyxFQUFFLE1BQU0sUUFBSyxPQUFPLFVBQVUsT0FBTyxJQUFJO0FBQy9FLFNBQU8sRUFBRSxNQUFNLFVBQUssT0FBTyxhQUFhLE9BQU8sTUFBTTtBQUN2RDtBQUVBLFNBQVMsYUFBYSxFQUFFLE1BQU0sU0FBUyxVQUFVLE1BQU0sR0FBRztBQUN4RCxRQUFNLFNBQVNDLFdBQVU7QUFDekIsUUFBTSxLQUFLLEtBQUssV0FBVyxNQUFNO0FBQ2pDLFNBQU8sZ0JBQUFGLE1BQUMsV0FBUSxNQUFZLFNBQWtCLFlBQVUsTUFBQztBQUMzRDtBQUVBLFNBQVMsY0FBYyxFQUFFLE1BQU0sR0FBRztBQUNoQyxFQUFBRyxVQUFTLENBQUMsVUFBVTtBQUNsQixRQUFJLE1BQU0sT0FBTyxLQUFLLEVBQUcsT0FBTSxnQkFBZ0I7QUFBQSxFQUNqRCxDQUFDO0FBQ0QsU0FBTztBQUNUO0FBRUEsU0FBUyxpQkFBaUIsRUFBRSxVQUFVLFNBQVMsR0FBRyxNQUFNLEdBQUc7QUFDekQsUUFBTSxVQUFVQyxZQUFXO0FBQzNCLEVBQUFDLFVBQVMsQ0FBQyxVQUFVO0FBQ2xCLFFBQUksTUFBTSxXQUFXLFdBQVcsTUFBTSxXQUFXLFVBQVUsUUFBUSxNQUFNLEdBQUcsTUFBTSxDQUFDLEVBQUcsU0FBUTtBQUFBLEVBQ2hHLENBQUM7QUFDRCxTQUFPLGdCQUFBTCxNQUFDLFNBQUssR0FBRyxPQUFRLFVBQVM7QUFDbkM7QUFFQSxTQUFTLGVBQWUsRUFBRSxNQUFNLFlBQVksU0FBUyxPQUFPLFNBQVMsUUFBUSxHQUFHO0FBQzlFLFFBQU0sVUFBVUksWUFBVztBQUMzQixRQUFNLENBQUMsU0FBUyxVQUFVLElBQUlFLGVBQWEsS0FBSztBQUNoRCxFQUFBRCxVQUFTLENBQUMsVUFBVTtBQUNsQixVQUFNLFNBQVMsUUFBUSxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLFFBQUksTUFBTSxXQUFXLFVBQVUsV0FBVyxRQUFRLEdBQUc7QUFDbkQsaUJBQVcsTUFBTTtBQUNqQixnQkFBVSxNQUFNO0FBQUEsSUFDbEI7QUFDQSxRQUFJLFVBQVUsTUFBTSxXQUFXLFdBQVcsTUFBTSxXQUFXLFFBQVE7QUFDakUsY0FBUTtBQUNSLFlBQU0sZ0JBQWdCO0FBQUEsSUFDeEI7QUFBQSxFQUNGLENBQUM7QUFDRCxRQUFNLGNBQWMsUUFBUSxLQUFLO0FBQ2pDLFNBQU8sZ0JBQUFMLE1BQUMsVUFBSyxPQUFPLEVBQUUsSUFBSSxjQUFjLE9BQU8sSUFBSSxRQUFXLE9BQU8sY0FBYyxVQUFVLE1BQU0sR0FBSSxjQUFJLGNBQWMsYUFBYSxJQUFJLEtBQUk7QUFDaEo7QUFFQSxTQUFTLGNBQWMsRUFBRSxVQUFVLFNBQVMsVUFBVSxRQUFRLEdBQUc7QUFDL0QsUUFBTSxVQUFVSSxZQUFXO0FBQzNCLFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSUUsZUFBYSxLQUFLO0FBQ2hELEVBQUFELFVBQVMsQ0FBQyxVQUFVO0FBQ2xCLFVBQU0sU0FBUyxRQUFRLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDdkMsUUFBSSxNQUFNLFdBQVcsT0FBUSxZQUFXLE1BQU07QUFDOUMsUUFBSSxVQUFVLE1BQU0sV0FBVyxXQUFXLE1BQU0sV0FBVyxRQUFRO0FBQ2pFLGNBQVE7QUFDUixZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBQ0QsU0FDRSxnQkFBQUosTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sSUFBSSxVQUFVLE9BQU8sSUFBSSxNQUFNLE9BQU8sVUFBVSxVQUFVLFFBQVEsSUFBSSxVQUFVLE1BQU0sR0FDeEg7QUFBQSxvQkFBQUQsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFVBQVUsVUFBVSxXQUFXLE9BQU8sSUFBSSxPQUFPLE1BQU0sU0FBUyxHQUFJLHFCQUFXLFlBQU8sTUFBSztBQUFBLElBQ2hIO0FBQUEsS0FDSDtBQUVKO0FBS0EsSUFBTSxpQkFBaUI7QUFFdkIsU0FBUyxtQkFBbUIsT0FBTztBQUNqQyxRQUFNLFlBQVksQ0FBQztBQUNuQixNQUFJLFNBQVM7QUFDYixRQUFNLFFBQVEsTUFBTTtBQUNsQixRQUFJLENBQUMsT0FBUTtBQUNiLGNBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxPQUFPLE9BQU8sQ0FBQztBQUNyRCxhQUFTO0FBQUEsRUFDWDtBQUNBLGFBQVcsUUFBUSxPQUFPO0FBQ3hCLFFBQUksS0FBSyxTQUFTLFVBQVUsS0FBSyxTQUFTLGdCQUFnQixLQUFLLFNBQVMsWUFBWTtBQUNsRixnQkFBVSxLQUFLLFNBQVMsZUFBZSxLQUFLLE1BQU0sU0FBUztBQUFBLElBQzdELE9BQU87QUFDTCxZQUFNO0FBQ04sZ0JBQVUsS0FBSyxJQUFJO0FBQUEsSUFDckI7QUFBQSxFQUNGO0FBQ0EsUUFBTTtBQUNOLFNBQU87QUFDVDtBQUVPLFNBQVMsSUFBSSxFQUFFLE1BQUFPLE9BQU0sWUFBWSxJQUFJLEdBQUc7QUFDN0MsUUFBTSxFQUFFLEtBQUssTUFBTSxTQUFBQyxVQUFTLFFBQVEsSUFBSSxJQUFJRDtBQUM1QyxRQUFNLFFBQVEsSUFBSTtBQUNsQixRQUFNLENBQUMsZUFBZSxnQkFBZ0IsSUFBSUQsZUFBYSxLQUFLO0FBQzVELFFBQU0sQ0FBQyxlQUFlLGdCQUFnQixJQUFJQSxlQUFhLENBQUMsQ0FBQztBQUN6RCxRQUFNLENBQUMsbUJBQW1CLG9CQUFvQixJQUFJQSxlQUFhLElBQUk7QUFDbkUsUUFBTSxDQUFDLGtCQUFrQixtQkFBbUIsSUFBSUEsZUFBYSxLQUFLO0FBQ2xFLFFBQU0sQ0FBQyxnQkFBZ0IsaUJBQWlCLElBQUlBLGVBQWEsRUFBRTtBQUMzRCxRQUFNLENBQUMsaUJBQWlCLGtCQUFrQixJQUFJQSxlQUFhLEVBQUU7QUFDN0QsUUFBTSxDQUFDLGtCQUFrQixtQkFBbUIsSUFBSUEsZUFBYSxLQUFLO0FBQ2xFLFFBQU0scUJBQXFCLGdCQUFnQixjQUFjLENBQUM7QUFDMUQsUUFBTSxvQkFBb0IsbUJBQW1CLFFBQVEsQ0FBQyxVQUFVLE1BQU0sUUFBUTtBQUM5RSxpQkFBZSxtQkFBbUI7QUFDaEMsUUFBSSxDQUFDQyxNQUFLLGFBQWFBLE1BQUssS0FBSyxvQkFBcUI7QUFDdEQsSUFBQUEsTUFBSyxLQUFLLHNCQUFzQjtBQUNoQyxRQUFJO0FBQ0YsWUFBTSxPQUFPLE1BQU1BLE1BQUssVUFBVSxLQUFLO0FBQ3ZDLFlBQU0sT0FBTyxnQkFBZ0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxVQUFVLE1BQU0sUUFBUTtBQUNwRSxZQUFNLFdBQVcsbUJBQW1CLE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCO0FBQ2hGLDJCQUFxQixRQUFRO0FBQzdCLHVCQUFpQixJQUFJO0FBQ3JCLHdCQUFrQixFQUFFO0FBQ3BCLFVBQUksY0FBYyxFQUFHLE9BQU1BLE1BQUssVUFBVSxRQUFRLFFBQVE7QUFBQSxJQUM1RCxTQUFTLE9BQU87QUFDZCx3QkFBa0Isb0JBQW9CLE1BQU0sT0FBTyxFQUFFO0FBQUEsSUFDdkQsVUFBRTtBQUNBLE1BQUFBLE1BQUssS0FBSyxzQkFBc0I7QUFDaEMsMEJBQW9CLEtBQUs7QUFBQSxJQUMzQjtBQUFBLEVBQ0Y7QUFDQSxFQUFBQSxNQUFLLEtBQUssbUJBQW1CO0FBQzdCLEVBQUFFLGFBQVksTUFBTTtBQUFFLFFBQUksY0FBYyxFQUFHLE1BQUtGLE1BQUssS0FBSyxpQkFBaUI7QUFBQSxFQUFFLEdBQUcsR0FBSTtBQUNsRixNQUFJQSxNQUFLLGFBQWEsQ0FBQ0EsTUFBSyxLQUFLLHFCQUFxQjtBQUNwRCxJQUFBQSxNQUFLLEtBQUssc0JBQXNCO0FBQ2hDLFVBQU0sVUFBVUEsTUFBSyxVQUFVLFlBQVksTUFBTSxLQUFLQSxNQUFLLEtBQUssaUJBQWlCLENBQUM7QUFDbEYsY0FBVSxNQUFNO0FBQUUsZ0JBQVU7QUFBRyxNQUFBQSxNQUFLLEtBQUssc0JBQXNCO0FBQUEsSUFBTSxDQUFDO0FBQUEsRUFDeEU7QUFDQSxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlELGVBQWFDLE1BQUssTUFBTTtBQUNwRCxRQUFNLENBQUMsa0JBQWtCLG1CQUFtQixJQUFJRCxlQUFhLEtBQUs7QUFFbEUsUUFBTSxDQUFDLFNBQVMsVUFBVSxJQUFJQSxlQUFhLE1BQU0sT0FBTztBQUN4RCxRQUFNLENBQUMsZUFBZSxnQkFBZ0IsSUFBSUEsZUFBYSxRQUFRLE9BQU8sV0FBVyxFQUFFO0FBQ25GLFFBQU0sQ0FBQyxnQkFBZ0IsaUJBQWlCLElBQUlBLGVBQWEsUUFBUSxPQUFPLFFBQVEsRUFBRTtBQUNsRixFQUFBSSxXQUFVLENBQUMsRUFBRSxPQUFBQyxRQUFPLE9BQU8sTUFBTTtBQUFFLHFCQUFpQkEsTUFBSztBQUFHLHNCQUFrQixNQUFNO0FBQUEsRUFBRSxDQUFDO0FBQ3ZGLFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSUwsZUFBYSxNQUFNLE9BQU87QUFDeEQsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJQSxlQUFhLE1BQU0sU0FBUztBQUM5RCxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLGVBQWEsTUFBTSxTQUFTO0FBQzlELFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUEsZUFBYSxNQUFNLFNBQVM7QUFDOUQsUUFBTSxDQUFDLE1BQU0sT0FBTyxJQUFJQSxlQUFhLE1BQU0sSUFBSTtBQUMvQyxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUlBLGVBQWEsTUFBTSxVQUFVO0FBQ2pFLFFBQU0sQ0FBQyxlQUFlLGdCQUFnQixJQUFJQSxlQUFhLE1BQU0sYUFBYTtBQUMxRSxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLGVBQWEsTUFBTSxTQUFTO0FBQzlELFFBQU0sQ0FBQyxPQUFPLGFBQWEsSUFBSUEsZUFBYSxFQUFFO0FBQzlDLFFBQU0sZ0JBQWdCQyxNQUFLLEtBQUssa0JBQWtCLG9CQUFvQjtBQUN0RSxRQUFNLENBQUMsYUFBYSxjQUFjLElBQUlELGVBQWEsQ0FBQztBQUNwRCxRQUFNLENBQUMsYUFBYSxjQUFjLElBQUlBLGVBQWEsSUFBSTtBQUN2RCxRQUFNLFdBQVcsQ0FBQyxNQUFNLFdBQVc7QUFDakMsSUFBQUMsTUFBSyxLQUFLLGlCQUFpQkEsTUFBSyxLQUFLLGlCQUFpQixLQUFLO0FBQzNELFVBQU0sUUFBUSxjQUFjLE9BQU8sTUFBTSxNQUFNLFdBQVc7QUFDMUQsa0JBQWMsS0FBSztBQUNuQixtQkFBZSxVQUFVLE1BQU0sTUFBTTtBQUFBLEVBQ3ZDO0FBQ0EsUUFBTSxDQUFDLGlCQUFpQixrQkFBa0IsSUFBSUQsZUFBYSxNQUFNO0FBQ2pFLFFBQU0sQ0FBQyxpQkFBaUIsa0JBQWtCLElBQUlBLGVBQWEsQ0FBQyxDQUFDO0FBQzdELFFBQU0sQ0FBQyxlQUFlLGdCQUFnQixJQUFJQSxlQUFhLE1BQU07QUFDN0QsUUFBTSxDQUFDLHFCQUFxQixzQkFBc0IsSUFBSUEsZUFBYSxFQUFFO0FBQ3JFLFFBQU0sQ0FBQyxPQUFPLFFBQVEsSUFBSUEsZUFBYSxNQUFNLEtBQUs7QUFDbEQsUUFBTSxDQUFDTSxlQUFjLGVBQWUsSUFBSU4sZUFBYSxNQUFNLFlBQVk7QUFDdkUsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxlQUFhLE1BQU0sTUFBTTtBQUNyRCxRQUFNLENBQUMsZUFBZSxnQkFBZ0IsSUFBSUEsZUFBYSxNQUFNLGFBQWE7QUFDMUUsUUFBTSxDQUFDLE9BQU8sUUFBUSxJQUFJQSxlQUFhLE1BQU0sS0FBSztBQUNsRCxRQUFNLENBQUMsZUFBZSxnQkFBZ0IsSUFBSUEsZUFBYSxFQUFFLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDakYsUUFBTSxDQUFDLGdCQUFnQixpQkFBaUIsSUFBSUEsZUFBYSxLQUFLO0FBQzlELFFBQU0sQ0FBQyxpQkFBaUIsa0JBQWtCLElBQUlBLGVBQWEsS0FBSztBQUNoRSxRQUFNLENBQUMsZ0JBQWdCLGlCQUFpQixJQUFJQSxlQUFhLEtBQUs7QUFDOUQsUUFBTSxDQUFDLGlCQUFpQixrQkFBa0IsSUFBSUEsZUFBYSxLQUFLO0FBQ2hFLFFBQU0sQ0FBQyxtQkFBbUIsb0JBQW9CLElBQUlBLGVBQWEsS0FBSztBQUNwRSxRQUFNLENBQUMsUUFBUSxTQUFTLElBQUlBLGVBQWFDLE1BQUssTUFBTTtBQUNwRCxRQUFNLENBQUMsb0JBQW9CLHFCQUFxQixJQUFJRCxlQUFhQyxNQUFLLGtCQUFrQjtBQUN4RixRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlELGVBQWFDLE1BQUssU0FBUztBQUM3RCxRQUFNLENBQUMsYUFBYSxjQUFjLElBQUlELGVBQWFDLE1BQUssV0FBVztBQUNuRSxRQUFNLENBQUMsb0JBQW9CLHFCQUFxQixJQUFJRCxlQUFhQyxNQUFLLGtCQUFrQjtBQUN4RixRQUFNLENBQUMsaUJBQWlCLGtCQUFrQixJQUFJRCxlQUFhLE1BQU0sUUFBUTtBQUN6RSxRQUFNLENBQUMsaUJBQWlCLGtCQUFrQixJQUFJQSxlQUFhLEtBQUs7QUFDaEUsUUFBTSxDQUFDLFVBQVUsV0FBVyxJQUFJQSxlQUFhLENBQUM7QUFDOUMsUUFBTSxDQUFDLFlBQVksYUFBYSxJQUFJQSxlQUFhLENBQUMsQ0FBQztBQUNuRCxRQUFNLENBQUMsV0FBVyxZQUFZLElBQUlBLGVBQWFDLE1BQUssYUFBYSxNQUFNO0FBQ3ZFLFFBQU0sQ0FBQyxRQUFRLFNBQVMsSUFBSUQsZUFBYSxNQUFNLE1BQU07QUFDckQsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJQSxlQUFhLE1BQU0sU0FBUztBQUM5RCxRQUFNLENBQUMsTUFBTSxPQUFPLElBQUlBLGVBQWEsTUFBTSxJQUFJO0FBQy9DLFFBQU0sQ0FBQyxTQUFTLFVBQVUsSUFBSUEsZUFBYSxFQUFFO0FBQzdDLFFBQU0sQ0FBQyxVQUFVLFdBQVcsSUFBSUEsZUFBYSxDQUFDO0FBQzlDLFFBQU0sQ0FBQyxVQUFVLFdBQVcsSUFBSUEsZUFBYSxJQUFJO0FBQ2pELFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUEsZUFBYSxDQUFDO0FBQ2hELFFBQU0sQ0FBQyxVQUFVLFdBQVcsSUFBSUEsZUFBYSxDQUFDLENBQUM7QUFDL0MsUUFBTSxDQUFDLGdCQUFnQixpQkFBaUIsSUFBSUEsZUFBYSxLQUFLO0FBQzlELFFBQU0sQ0FBQyxNQUFNLGFBQWEsSUFBSUEsZUFBYSxNQUFNO0FBQ2pELFFBQU0sQ0FBQyxPQUFPLElBQUlBLGVBQWEsS0FBSztBQUNwQyxRQUFNLENBQUMsZ0JBQWdCLGlCQUFpQixJQUFJQSxlQUFhLEtBQUs7QUFDOUQsUUFBTSxDQUFDLHdCQUF3Qix5QkFBeUIsSUFBSUEsZUFBYSxLQUFLO0FBQzlFLFFBQU0sQ0FBQyxxQkFBcUIsc0JBQXNCLElBQUlBLGVBQWEsSUFBSTtBQUN2RSxRQUFNLENBQUMsNEJBQTRCLDZCQUE2QixJQUFJQSxlQUFhLEtBQUs7QUFDdEYsUUFBTSxDQUFDLHFCQUFxQixzQkFBc0IsSUFBSUEsZUFBYSxLQUFLO0FBQ3hFLFFBQU0sQ0FBQyx3QkFBd0IseUJBQXlCLElBQUlBLGVBQWEsSUFBSTtBQUM3RSxRQUFNLENBQUMsaUJBQWlCLGtCQUFrQixJQUFJQSxlQUFhLElBQUk7QUFDL0QsUUFBTSxDQUFDLHFCQUFxQixzQkFBc0IsSUFBSUEsZUFBYSxJQUFJO0FBQ3ZFLFFBQU0sQ0FBQyxlQUFlLGdCQUFnQixJQUFJQSxlQUFhLE1BQU0sZUFBZTtBQUM1RSxRQUFNLENBQUMsZUFBZSxnQkFBZ0IsSUFBSUEsZUFBYSxJQUFJO0FBQzNELFFBQU0sQ0FBQyxtQkFBbUIsb0JBQW9CLElBQUlBLGVBQWEsQ0FBQztBQUNoRSxRQUFNLENBQUMsa0JBQWtCLG1CQUFtQixJQUFJQSxlQUFhLEtBQUs7QUFDbEUsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJQSxlQUFhLENBQUM7QUFDaEQsUUFBTSxDQUFDLGFBQWEsY0FBYyxJQUFJQSxlQUFhLENBQUMsQ0FBQztBQUNyRCxRQUFNLENBQUMsaUJBQWlCLGtCQUFrQixJQUFJQSxlQUFhLEtBQUs7QUFDaEUsUUFBTSxDQUFDLGNBQWMsZUFBZSxJQUFJQSxlQUFhLENBQUMsY0FBYyxZQUFZLENBQUM7QUFDakYsUUFBTSxDQUFDLGFBQWEsY0FBYyxJQUFJQSxlQUFhLENBQUM7QUFDcEQsUUFBTSxDQUFDLGdCQUFnQixpQkFBaUIsSUFBSUEsZUFBYSxDQUFDLENBQUM7QUFDM0QsUUFBTSxDQUFDLGVBQWUsZ0JBQWdCLElBQUlBLGVBQWEsS0FBSztBQUM1RCxRQUFNLENBQUMsY0FBYyxlQUFlLElBQUlBLGVBQWEsS0FBSztBQUMxRCxRQUFNLENBQUMsa0JBQWtCLG1CQUFtQixJQUFJQSxlQUFhLEtBQUs7QUFDbEUsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJQSxlQUFhLElBQUk7QUFDbkQsUUFBTSxDQUFDLGVBQWUsZ0JBQWdCLElBQUlBLGVBQWEsSUFBSTtBQUMzRCxRQUFNLENBQUMsbUJBQW1CLG9CQUFvQixJQUFJQSxlQUFhLENBQUM7QUFDaEUsUUFBTSxDQUFDLGtCQUFrQixtQkFBbUIsSUFBSUEsZUFBYSxLQUFLO0FBQ2xFLFFBQU0sQ0FBQyxrQkFBa0IsbUJBQW1CLElBQUlBLGVBQWEsS0FBSztBQUNsRSxRQUFNLENBQUMsZUFBZSxnQkFBZ0IsSUFBSUEsZUFBYSxDQUFDLENBQUM7QUFDekQsUUFBTSxDQUFDLGVBQWUsZ0JBQWdCLElBQUlBLGVBQWEsQ0FBQztBQUN4RCxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUlBLGVBQWEsQ0FBQztBQUNsRCxRQUFNLENBQUMsVUFBVSxXQUFXLElBQUlBLGVBQWEsQ0FBQyxDQUFDO0FBQy9DLFFBQU0sQ0FBQyxpQkFBaUIsa0JBQWtCLElBQUlBLGVBQWEsS0FBSztBQUNoRSxRQUFNLENBQUMsWUFBWSxhQUFhLElBQUlBLGVBQWEsSUFBSSxLQUFLLENBQUM7QUFDM0QsUUFBTSxDQUFDLFlBQVksYUFBYSxJQUFJQSxlQUFhLEtBQUs7QUFDdEQsUUFBTSxDQUFDLFdBQVcsWUFBWSxJQUFJQSxlQUFhLENBQUM7QUFDaEQsUUFBTSxDQUFDLFlBQVksYUFBYSxJQUFJQSxlQUFhLElBQUk7QUFDckQsUUFBTSxDQUFDLGNBQWMsZUFBZSxJQUFJQSxlQUFhLElBQUk7QUFDekQsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxlQUFhLENBQUM7QUFDMUMsUUFBTSxDQUFDLFFBQVEsU0FBUyxJQUFJQSxlQUFhLElBQUk7QUFDN0MsUUFBTSxDQUFDLFlBQVksYUFBYSxJQUFJQSxlQUFhLGNBQWM7QUFDL0QsUUFBTSxDQUFDLG1CQUFtQixvQkFBb0IsSUFBSUEsZUFBYSxJQUFJO0FBQ25FLFFBQU0sQ0FBQyxPQUFPLFFBQVEsSUFBSUEsZUFBYSxJQUFJO0FBQzNDLFFBQU0sQ0FBQyxXQUFXLFlBQVksSUFBSUEsZUFBYSxFQUFFO0FBRWpELFFBQU0sT0FBT0MsTUFBSztBQUNsQixPQUFLLFdBQVc7QUFDaEIsT0FBSyxlQUFlO0FBRXBCLFdBQVMsUUFBUSxNQUFNO0FBQ3JCLGtCQUFjLElBQUk7QUFDbEIsUUFBSSxLQUFLLFNBQVMsTUFBTTtBQUFBLEVBQzFCO0FBSUEsUUFBTSxTQUFTLENBQUMsS0FBSyxLQUFLLFVBQVU7QUFDbEMsUUFBSSxJQUFJLE1BQU0sTUFBTyxLQUFJLEtBQUs7QUFBQSxFQUNoQztBQUNBLFFBQU0sQ0FBQyxZQUFZLGFBQWEsSUFBSUQsZUFBYSxFQUFFO0FBRW5ELFdBQVMscUJBQXFCO0FBQzVCLGtCQUFjLE1BQU0sWUFBWSxzQkFBc0IsTUFBTSxTQUFTLEtBQUssTUFBTSxjQUFjLE1BQU0saUJBQWlCLDBCQUEwQixFQUFFO0FBQ2pKLFdBQU8sU0FBUyxZQUFZLE1BQU0sT0FBTztBQUN6QyxXQUFPLFNBQVMsWUFBWSxNQUFNLE9BQU87QUFDekMsV0FBTyxXQUFXLGNBQWMsTUFBTSxTQUFTO0FBQy9DLFdBQU8sV0FBVyxjQUFjLE1BQU0sU0FBUztBQUMvQyxXQUFPLFdBQVcsY0FBYyxNQUFNLFNBQVM7QUFDL0MsV0FBTyxNQUFNLFNBQVMsTUFBTSxJQUFJO0FBQ2hDLFdBQU8sWUFBWSxlQUFlLE1BQU0sVUFBVTtBQUNsRCxXQUFPLGVBQWUsa0JBQWtCLE1BQU0sYUFBYTtBQUMzRCxXQUFPLFdBQVcsY0FBYyxNQUFNLFNBQVM7QUFDL0MsV0FBTyxPQUFPLFVBQVUsTUFBTSxLQUFLO0FBQ25DLFdBQU9NLGVBQWMsaUJBQWlCLE1BQU0sWUFBWTtBQUN4RCxXQUFPLE9BQU8sVUFBVSxNQUFNLEtBQUs7QUFDbkMsUUFBSSxLQUFLLFVBQVUsY0FBYyxDQUFDLE1BQU0sS0FBSyxVQUFVLE1BQU0sYUFBYSxFQUFHLGtCQUFpQixFQUFFLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDeEgsV0FBTyxRQUFRLFdBQVcsTUFBTSxNQUFNO0FBQ3RDLFdBQU8sZUFBZSxrQkFBa0IsTUFBTSxhQUFhO0FBQzNELFdBQU8saUJBQWlCLG9CQUFvQixNQUFNLFFBQVE7QUFDMUQsV0FBTyxRQUFRLFdBQVcsTUFBTSxNQUFNO0FBQ3RDLFdBQU8sV0FBVyxjQUFjLE1BQU0sU0FBUztBQUMvQyxXQUFPLE1BQU0sU0FBUyxNQUFNLElBQUk7QUFDaEMsV0FBTyxlQUFlLGtCQUFrQixNQUFNLGVBQWU7QUFBQSxFQUMvRDtBQUtBLE9BQUssS0FBSztBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sT0FBTyxDQUFDLFlBQVksTUFBTSxPQUFPO0FBQUEsSUFDakMsU0FBUyxDQUFDLFNBQVM7QUFDakIsZ0JBQVUsS0FBSyxLQUFLO0FBQ3BCLE1BQUFMLE1BQUssV0FBVyxFQUFFLFFBQVEsS0FBSyxTQUFTLGdCQUFnQixPQUFPLE1BQU0sQ0FBQztBQUFBLElBQ3hFO0FBQUEsSUFDQSxVQUFVLE1BQU07QUFDZCxXQUFLLGdCQUFnQixPQUFPO0FBQzVCLFNBQUcsTUFBTSxVQUFVO0FBQUEsSUFDckI7QUFBQSxJQUNBLE1BQU0sTUFBTTtBQUNWLGdCQUFVLElBQUk7QUFDZCxvQkFBYyxjQUFjO0FBQUEsSUFDOUI7QUFBQSxJQUNBLE9BQU8sQ0FBQyxTQUFTO0FBQ2YsV0FBSyxnQkFBZ0IsT0FBTztBQUM1QixlQUFTLElBQUk7QUFBQSxJQUNmO0FBQUEsSUFDQSxTQUFTLE1BQU07QUFDYixxQkFBZSxJQUFJO0FBQ25CLFdBQUssbUJBQW1CO0FBQ3hCLFdBQUssZ0JBQWdCLE9BQU87QUFDNUIsdUJBQWlCLElBQUk7QUFDckIsdUJBQWlCLElBQUk7QUFDckIsb0JBQWMsY0FBYztBQUM1QixnQkFBVSxJQUFJO0FBQ2QsU0FBRyxNQUFNLE9BQU87QUFBQSxJQUNsQjtBQUFBLElBQ0EsU0FBUyxDQUFDLFNBQVMsTUFBTSxZQUFZLEtBQUssS0FBSyxJQUFJLEtBQUssVUFBVSxJQUFJLFNBQVMsT0FBTyxLQUFLLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUFBLElBQzdHLFNBQVMsQ0FBQyxTQUFTO0FBQ2pCLFdBQUssZ0JBQWdCLE9BQU87QUFDNUIsY0FBUSxPQUFPLE1BQU0sZ0JBQWdCLEtBQUssS0FBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTTtBQUNyRSxvQkFBYyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQzdCLGtCQUFZLENBQUMsQ0FBQztBQUFBLElBQ2hCO0FBQUEsSUFDQSxLQUFLLENBQUMsWUFBWSxjQUFjLE9BQU87QUFBQSxJQUN2QyxRQUFRLE1BQU0saUJBQWlCLENBQUMsTUFBTSxJQUFJLENBQUM7QUFBQSxJQUMzQyxLQUFLLE1BQU0sY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDO0FBQUEsRUFDdkM7QUFDQSxNQUFJLENBQUMsS0FBSyxZQUFZO0FBQ3BCLFNBQUssYUFBYTtBQUNsQixRQUFJLEdBQUcsVUFBVSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDckMsZUFBVyxRQUFRLENBQUMsU0FBUyxXQUFXLFlBQVksUUFBUSxTQUFTLFdBQVcsV0FBVyxXQUFXLE9BQU8sVUFBVSxLQUFLLEdBQUc7QUFDN0gsVUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEtBQUssR0FBRyxJQUFJLEVBQUUsT0FBTyxDQUFDO0FBQUEsSUFDbEQ7QUFBQSxFQUNGO0FBQ0EscUJBQW1CO0FBRW5CLFFBQU0sZ0JBQWdCLE9BQU8sS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0sSUFBSSxPQUFPLEtBQUssRUFBRTtBQUMzSCxRQUFNLGVBQWVBLE1BQUssU0FBUyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxJQUFJLFNBQVMsS0FBSyxFQUFFO0FBQ3JJLFFBQU0sU0FBUyxvQkFBSSxJQUFJO0FBQ3ZCLFFBQU0sV0FBVyxDQUFDO0FBQ2xCLGFBQVcsS0FBSyxDQUFDLEdBQUcsVUFBVSxHQUFHLGVBQWUsR0FBRyxZQUFZLEdBQUc7QUFDaEUsUUFBSSxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUcsVUFBUyxLQUFLLEdBQUcsRUFBRSxRQUFRLFVBQVUsU0FBUyxLQUFLLEVBQUUsSUFBSSxHQUFHO0FBQUEsUUFDL0UsUUFBTyxJQUFJLEVBQUUsTUFBTSxDQUFDO0FBQUEsRUFDM0I7QUFDQSxRQUFNLGNBQWMsQ0FBQyxHQUFHLE9BQU8sT0FBTyxDQUFDO0FBQ3ZDLE1BQUksU0FBUyxVQUFVLENBQUMsS0FBSyxnQkFBZ0I7QUFDM0MsU0FBSyxpQkFBaUI7QUFDdEIsZUFBVyxNQUFNLE1BQU0sK0NBQStDLFNBQVMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUM7QUFBQSxFQUNqRztBQUVBLFFBQU0sUUFBUSxTQUFTO0FBQUEsSUFDckIsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsUUFBUSxDQUFDLFlBQVksZ0JBQUFQLE1BQUMsVUFBSyxPQUFPLEVBQUUsSUFBSSxPQUFPLEdBQUcsT0FBTyxTQUFTLE1BQU0sS0FBSyxHQUFJLGNBQUksT0FBTyxLQUFJO0FBQUEsRUFDbEcsQ0FBQztBQUVELFFBQU0sY0FBYyxTQUFTO0FBQUEsSUFDM0IsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsUUFBUSxDQUFDLFlBQ1AsZ0JBQUFBLE1BQUMsU0FBSSxPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQUUsR0FDekIsMEJBQUFBLE1BQUMsV0FBUSxPQUFNLFNBQVEsV0FBVyxXQUFXLFVBQVUsTUFBTyxjQUFJLE9BQU8sS0FBSSxHQUMvRTtBQUFBLEVBRUosQ0FBQztBQUVELFdBQVMsTUFBTSxLQUFLO0FBQ2xCLFVBQU0sR0FBRztBQUFBLEVBQ1g7QUFFQSxpQkFBZSxnQkFBZ0I7QUFDN0IsUUFBSSxpQkFBaUIsRUFBRztBQUN4Qix3QkFBb0IsSUFBSTtBQUN4QixVQUFNLG1CQUFtQjtBQUN6QixVQUFNLFVBQVUsWUFBWSxJQUFJO0FBQ2hDLFFBQUk7QUFDRixZQUFNLFlBQVksTUFBTU8sTUFBSyxjQUFjO0FBQzNDLE1BQUFBLE1BQUssU0FBUztBQUNkLGdCQUFVLFNBQVM7QUFDbkIsWUFBTU0sV0FBVSxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksT0FBTztBQUN0RCxZQUFNLHFCQUFxQixVQUFVLE1BQU0sWUFBWUEsUUFBTyxJQUFJO0FBQUEsSUFDcEUsU0FBUyxLQUFLO0FBQ1osWUFBTSx5QkFBeUIsT0FBTyxJQUFJLFdBQVcsR0FBRyxFQUFFLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRTtBQUFBLElBQzNFLFVBQUU7QUFDQSwwQkFBb0IsS0FBSztBQUFBLElBQzNCO0FBQUEsRUFDRjtBQUVBLE9BQUssZUFBZSxxQkFBcUI7QUFBQSxJQUN2QyxXQUFXO0FBQUEsSUFDWCxVQUFVLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxRQUFRLFlBQVksR0FBRyxTQUFTLE1BQU0sU0FBUyxVQUFVLEtBQUssY0FBYztBQUFBLElBQy9HLGFBQWEsSUFBSTtBQUFBLElBQ2pCO0FBQUEsSUFDQSxTQUFTLENBQUMsWUFBWSxLQUFLLEdBQUcsTUFBTSxPQUFPO0FBQUEsRUFDN0MsQ0FBQztBQUNELE9BQUssaUJBQWlCLHlCQUF5QjtBQUFBLElBQzdDO0FBQUEsSUFDQSxVQUFVLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxRQUFRLFlBQVksR0FBRyxTQUFTLE1BQU0sU0FBUyxVQUFVLEtBQUssY0FBYztBQUFBLElBQy9HLGFBQWEsSUFBSTtBQUFBLElBQ2pCO0FBQUEsSUFDQSxTQUFTLENBQUMsWUFBWSxLQUFLLEdBQUcsTUFBTSxPQUFPO0FBQUEsSUFDM0MsVUFBVTtBQUFBLEVBQ1osQ0FBQztBQUVELE1BQUksQ0FBQyxLQUFLLFdBQVc7QUFDbkIsU0FBSyxZQUFZLGdCQUFnQjtBQUFBLE1BQy9CLFVBQVUsQ0FBQyxXQUFXO0FBQ3BCLDJCQUFtQixNQUFNO0FBQ3pCLFlBQUksV0FBVyxZQUFhLG9CQUFtQixDQUFDLENBQUM7QUFBQSxNQUNuRDtBQUFBLE1BQ0EsU0FBUyxDQUFDLFVBQVUsbUJBQW1CLFlBQVksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQUEsTUFDNUUsU0FBUyxDQUFDLFlBQVksS0FBSyxHQUFHLE1BQU0scUJBQXFCLE9BQU8sRUFBRTtBQUFBLElBQ3BFLENBQUM7QUFDRCxTQUFLLGlCQUFpQixxQkFBcUIsRUFBRSxXQUFXLEtBQUssV0FBVyxVQUFVLE9BQU8sU0FBUyxDQUFDO0FBQ25HLFVBQU0sVUFBVSxhQUFhLE1BQU0sS0FBSyxVQUFVLFFBQVEsQ0FBQztBQUMzRCxZQUFRLE1BQU07QUFDZCxZQUFRLEtBQUssUUFBUSxNQUFNO0FBQ3pCLHFCQUFlLE9BQU87QUFDdEIsV0FBSyxVQUFVLFFBQVE7QUFBQSxJQUN6QixDQUFDO0FBQ0QsZUFBVyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUc7QUFDaEUsY0FBUSxLQUFLLFFBQVEsTUFBTTtBQUN6QixhQUFLLFVBQVUsUUFBUTtBQUN2QixnQkFBUSxLQUFLLElBQUk7QUFBQSxNQUNuQixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLENBQUMsS0FBSyxlQUFlO0FBQ3ZCLFNBQUssZ0JBQWdCO0FBQ3JCLG1CQUFlTCxRQUFPLEVBQUUsS0FBSyxDQUFDLFVBQVU7QUFDdEMsVUFBSSxDQUFDLE1BQU87QUFDWixrQkFBWSxTQUFTLE1BQU0sT0FBTyxxQkFBcUI7QUFDdkQsWUFBTSxhQUFhO0FBQUEsSUFDckIsQ0FBQyxFQUFFLE1BQU0sTUFBTTtBQUFBLElBQUMsQ0FBQztBQUFBLEVBQ25CO0FBRUEsUUFBTSxvQkFBb0IsSUFBSTtBQUU5QixXQUFTLGlCQUFpQixNQUFNO0FBQzlCLFFBQUksU0FBUyxRQUFTLFFBQU8sYUFBYSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUc7QUFDMUQsUUFBSSxTQUFTLFFBQVMsUUFBTyxPQUFPLEtBQUtNLGVBQWM7QUFDdkQsUUFBSSxTQUFTLFFBQVMsUUFBTyxDQUFDLEdBQUcsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU07QUFDeEUsUUFBSSxTQUFTLFNBQVUsUUFBTyxDQUFDLFdBQVcsT0FBTyxVQUFVLFFBQVEsS0FBSztBQUN4RSxRQUFJLFNBQVMsUUFBUyxRQUFPLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSTtBQUM1RixVQUFNLE1BQU0sWUFBWSxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSTtBQUNuRCxRQUFJLEtBQUssU0FBUyxLQUFLLFFBQVMsUUFBTyxTQUFTO0FBQ2hELFdBQU87QUFBQSxFQUNUO0FBRUEsV0FBUyxvQkFBb0I7QUFDM0Isa0JBQWMsS0FBSztBQUNuQixpQkFBYSxDQUFDO0FBQUEsRUFDaEI7QUFFQSxXQUFTLGlCQUFpQixPQUFPLEtBQUssV0FBVztBQUMvQyxhQUFTLGdCQUFnQixPQUFPLEtBQUssU0FBUyxDQUFDO0FBQy9DLHNCQUFrQjtBQUFBLEVBQ3BCO0FBRUEsV0FBUyxLQUFLLE1BQU07QUFDbEIsUUFBSSxjQUFjLEtBQUssY0FBYyxFQUFHO0FBQ3hDLFVBQU0sUUFBUSxLQUFLLEtBQUs7QUFDeEIsUUFBSSxDQUFDLE1BQU87QUFDWixzQkFBa0I7QUFDbEIsUUFBSSxNQUFNLFdBQVcsR0FBRyxHQUFHO0FBQ3pCLFlBQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxJQUFJLE1BQU0sTUFBTSxDQUFDLEVBQUUsTUFBTSxLQUFLO0FBQ2xELFlBQU0sUUFBUSxZQUFZLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxLQUFLLFlBQVksQ0FBQztBQUNuRSxVQUFJLE9BQU87QUFDVCxZQUFJLE1BQU0sUUFBUyxRQUFPLGNBQWMsT0FBTyxFQUFFLE9BQU8sS0FBSyxRQUFRLEdBQUcsR0FBRyxLQUFLLEtBQUssT0FBTyxHQUFHLEtBQUssS0FBSyxHQUFHLENBQUM7QUFDN0csaUJBQVMsRUFBRTtBQUNYLG1CQUFXLE9BQU8sS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUNoQztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsZUFBVyxFQUFFO0FBQ2Isa0JBQWMsT0FBTyxNQUFNLE1BQU0sV0FBVztBQUM1QyxRQUFJLEtBQUssY0FBYyxRQUFRLEVBQUUsS0FBSyxDQUFDO0FBQ3ZDLGFBQVMsRUFBRTtBQUFBLEVBQ2I7QUFFQSxXQUFTLFlBQVk7QUFDbkIsUUFBSSxDQUFDLEtBQUssRUFBRztBQUNiLFFBQUksTUFBTSxTQUFVLE1BQUssNkJBQTZCO0FBQ3RELFFBQUksVUFBVTtBQUFBLEVBQ2hCO0FBRUEsUUFBTSxZQUFZLENBQUMsTUFBTyxLQUFLLE1BQU8sSUFBSSxJQUFJLEtBQU0sUUFBUSxDQUFDLENBQUMsTUFBTSxPQUFPLENBQUM7QUFFNUUsaUJBQWUsa0JBQWtCO0FBQy9CLGtCQUFjLE1BQU1QLE1BQUssT0FBTyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDeEQ7QUFFQSxpQkFBZSxxQkFBcUIsR0FBRztBQUNyQyxRQUFJO0FBQ0YsWUFBTUEsTUFBSyxPQUFPLFlBQVksR0FBRyxDQUFDLEVBQUUsUUFBUTtBQUM1QyxZQUFNLGdCQUFnQjtBQUN0QixZQUFNLEdBQUcsRUFBRSxXQUFXLFlBQVksWUFBWSxJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxHQUFHO0FBQUEsSUFDekUsU0FBUyxLQUFLO0FBQ1osWUFBTSx5QkFBeUIsT0FBTyxJQUFJLFdBQVcsR0FBRyxFQUFFLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRTtBQUFBLElBQzNFO0FBQUEsRUFDRjtBQUVBLGlCQUFlLGFBQWEsR0FBRztBQUM3QixVQUFNLFFBQVEsS0FBSztBQUNuQixRQUFJLENBQUMsU0FBUyxNQUFNLFNBQVMsRUFBRSxRQUFRLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxLQUFNO0FBQ25FLFdBQUssWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDaEQsYUFBTyxNQUFNLDJCQUEyQixFQUFFLElBQUksR0FBRztBQUFBLElBQ25EO0FBQ0EsU0FBSyxZQUFZO0FBQ2pCLFFBQUk7QUFDRixZQUFNQSxNQUFLLE9BQU8sT0FBTyxDQUFDO0FBQzFCLFlBQU0sZ0JBQWdCO0FBQ3RCLFlBQU0sVUFBVSxFQUFFLElBQUksS0FBSyxFQUFFLEtBQUssR0FBRztBQUFBLElBQ3ZDLFNBQVMsS0FBSztBQUNaLFlBQU0sa0JBQWtCLE9BQU8sSUFBSSxXQUFXLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFBQSxJQUNuRTtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSxtQkFBbUI7QUFDaEMsVUFBTSxNQUFNLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFDO0FBQ25DLFVBQU0sWUFBWSxNQUFNLElBQUksaUJBQWlCO0FBQzdDLFVBQU0sT0FBTyxVQUFVLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUksTUFBTSxNQUFNLElBQUksTUFBTSxNQUFNLElBQUksSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNwRyxRQUFJLFVBQVUsVUFBVTtBQUN0QixXQUFLLEtBQUs7QUFBQSxRQUNSLE1BQU07QUFBQSxRQUNOLE1BQU07QUFBQSxRQUNOLE1BQU0sR0FBRyxVQUFVLFNBQVMsZUFBZSxDQUFDO0FBQUEsTUFDOUMsQ0FBQztBQUFBLElBQ0g7QUFDQSxpQkFBYTtBQUFBLE1BQ1gsT0FBTyxZQUFZLFVBQVUsS0FBSztBQUFBLE1BQ2xDO0FBQUEsTUFDQSxVQUFVLFVBQVUsU0FBUyxTQUFTLEVBQUUsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsT0FBTyxVQUFVLFNBQVMsTUFBTSxFQUFFLFFBQVEsSUFBSTtBQUFBLElBQ3BKLENBQUM7QUFBQSxFQUNIO0FBRUEsUUFBTSxhQUFhLE1BQU07QUFBQSxJQUN2QixHQUFHLFlBQVk7QUFBQSxJQUNmLEVBQUUsS0FBSyxRQUFRLE1BQU0sa0NBQWtDQSxNQUFLLGlCQUFpQixNQUFNLElBQUk7QUFBQSxFQUN6RjtBQUVBLFdBQVMsV0FBVyxNQUFNO0FBQ3hCLFdBQU8sU0FBUyxTQUFTQSxNQUFLLGlCQUFpQixTQUFTO0FBQUEsRUFDMUQ7QUFFQSxXQUFTLGVBQWUsTUFBTTtBQUM1QixlQUFXLFdBQVcsSUFBSSxDQUFDO0FBQzNCLElBQUFBLE1BQUssV0FBVyxFQUFFLFFBQVEsT0FBTyxHQUFHLE9BQU8sTUFBTSxDQUFDO0FBQUEsRUFDcEQ7QUFFQSxXQUFTLGVBQWUsTUFBTTtBQUM1QixpQkFBYSxJQUFJO0FBQ2pCLG1CQUFlLElBQUk7QUFDbkIsZ0JBQVksRUFBRSxPQUFPLFNBQVMsU0FBUyxTQUFZLEtBQUssQ0FBQyxFQUFFLE1BQU0sTUFBTTtBQUFBLElBQUMsQ0FBQztBQUN6RSxVQUFNLFNBQVMsU0FBUyx3Q0FBd0MsV0FBVyxNQUFNLENBQUMsTUFBTSxVQUFVLElBQUksRUFBRTtBQUFBLEVBQzFHO0FBRUEsUUFBTSxDQUFDLGNBQWMsZUFBZSxJQUFJRCxlQUFhLElBQUk7QUFDekQsTUFBSSxzQkFBc0I7QUFDMUIsV0FBUyxlQUFlO0FBQ3RCLFVBQU0sVUFBVSxNQUFNLEdBQUc7QUFDekIsUUFBSSxDQUFDLFNBQVMsT0FBUSxRQUFPLFFBQVE7QUFDckMsUUFBSSxLQUFLLHdCQUF3QixTQUFTO0FBQ3hDLFdBQUssc0JBQXNCO0FBQzNCLFlBQU0sVUFBVSxFQUFFO0FBQ2xCLGNBQVEsUUFBUSxJQUFJLGFBQWEsT0FBTyxDQUFDLEVBQUUsS0FBSyxVQUFRO0FBQ3RELFlBQUksWUFBWSxvQkFBcUIsaUJBQWdCLElBQUk7QUFBQSxNQUMzRCxDQUFDLEVBQUUsTUFBTSxXQUFTLE1BQU0sTUFBTSxPQUFPLENBQUM7QUFBQSxJQUN4QztBQUNBLFdBQU8sYUFBYSxLQUFLLFFBQVE7QUFBQSxFQUNuQztBQUNBLGlCQUFlLGtCQUFrQjtBQUMvQixRQUFJLElBQUksZ0JBQWdCLE1BQU0sUUFBUSxvQkFBb0IsS0FBSyxFQUFHLE9BQU0sSUFBSSxZQUFZLFFBQVE7QUFBQSxFQUNsRztBQUNBLGlCQUFlLG1CQUFtQjtBQUNoQyxRQUFJLENBQUMsSUFBSSxlQUFlLEtBQUssa0JBQWtCLEVBQUUsTUFBTSxRQUFRLG1CQUFtQixHQUFJO0FBQ3RGLFNBQUssaUJBQWlCO0FBQ3RCLFFBQUk7QUFBRSxZQUFNLElBQUksWUFBWSxNQUFNLFFBQVEsV0FBVyxTQUFTLGNBQWM7QUFBQSxJQUFFLFNBQ3ZFLE9BQU87QUFBRSxZQUFNLE1BQU0sT0FBTztBQUFBLElBQUUsVUFDckM7QUFBVSxXQUFLLGlCQUFpQjtBQUFBLElBQU07QUFBQSxFQUN4QztBQUVBLFdBQVMsWUFBWTtBQUNuQixXQUFPLG9CQUFvQixhQUFhLEVBQUUsVUFBVTtBQUFBLEVBQ3REO0FBRUEsaUJBQWUsYUFBYTtBQUMxQixRQUFJLEtBQUssS0FBSyxXQUFXLEVBQUcsUUFBTyxNQUFNLDRDQUE0QztBQUNyRixVQUFNLGdCQUFnQjtBQUN0QixvQkFBZ0IsSUFBSTtBQUNwQixTQUFLLHNCQUFzQjtBQUMzQixVQUFNLE9BQU8sVUFBVTtBQUN2QixVQUFNLFdBQVcsS0FBSyxJQUFJLEdBQUcsS0FBSyxTQUFTLENBQUM7QUFDNUMsYUFBUyxFQUFFLFVBQVUsU0FBUyxPQUFPLFFBQVEsT0FBTyxNQUFNLFFBQVEsU0FBUyxDQUFDLEVBQUUsQ0FBQztBQUMvRSxRQUFJLEtBQUssUUFBUSxFQUFHLGdCQUFlLE1BQU0sS0FBSyxRQUFRLEVBQUUsU0FBUztBQUNqRSxrQkFBYyxRQUFRO0FBQ3RCLGNBQVUsSUFBSTtBQUNkLE9BQUcsTUFBTSxPQUFPO0FBQUEsRUFDbEI7QUFFQSxXQUFTLFdBQVcsVUFBVSxPQUFPO0FBQ25DLGFBQVMsSUFBSTtBQUNiLGlCQUFhLEVBQUU7QUFDZixrQkFBYyxjQUFjO0FBQzVCLE9BQUcsTUFBTSxPQUFPO0FBQ2hCLFFBQUksUUFBUyxPQUFNLDZDQUE2QztBQUFBLEVBQ2xFO0FBRUEsV0FBUyxhQUFhO0FBQ3BCLFVBQU0sUUFBUSxNQUFNO0FBQ3BCLFFBQUksQ0FBQyxPQUFPLFFBQVEsT0FBUSxRQUFPLFdBQVc7QUFDOUMsUUFBSSxXQUFXLE1BQU0sT0FBTztBQUM1QixlQUFXLElBQUk7QUFBQSxFQUNqQjtBQUVBLFdBQVMsaUJBQWlCO0FBQ3hCLFVBQU0sUUFBUSxNQUFNO0FBQ3BCLFVBQU0sTUFBTSxVQUFVLEVBQUUsTUFBTSxRQUFRO0FBQ3RDLFFBQUksQ0FBQyxJQUFLLFFBQU8sY0FBYztBQUMvQixRQUFJLElBQUksT0FBUSxRQUFPLE1BQU0sc0RBQXNEO0FBQ25GLGlCQUFhLElBQUksSUFBSTtBQUNyQixhQUFTLEVBQUUsR0FBRyxPQUFPLFNBQVMsTUFBTSxRQUFRLE9BQU8sTUFBTSxJQUFJLEtBQUssQ0FBQztBQUFBLEVBQ3JFO0FBRUEsV0FBUyxnQkFBZ0I7QUFDdkIsVUFBTSxRQUFRLE1BQU07QUFDcEIsVUFBTSxPQUFPLFVBQVU7QUFDdkIsVUFBTSxXQUFXLEtBQUssTUFBTSxRQUFRO0FBQ3BDLFVBQU0sZUFBZSxVQUFVO0FBQy9CLFVBQU0sT0FBTyxpQkFBaUIsU0FBUyxjQUFjLFlBQVksQ0FBQztBQUNsRSxpQkFBYSxFQUFFO0FBQ2YsYUFBUyxFQUFFLEdBQUcsT0FBTyxTQUFTLE1BQU0sUUFBUSxNQUFNLEtBQUssQ0FBQztBQUFBLEVBQzFEO0FBRUEsV0FBUyxlQUFlLE1BQU07QUFDNUIsVUFBTSxRQUFRLEtBQUssS0FBSztBQUN4QixVQUFNLFFBQVEsTUFBTTtBQUNwQixRQUFJLENBQUMsTUFBTyxRQUFPLE1BQU0seUJBQXlCO0FBQ2xELFVBQU0sT0FBTyxVQUFVO0FBQ3ZCLFVBQU0sU0FBUyxLQUFLLE1BQU0sUUFBUTtBQUNsQyxVQUFNLFNBQVMsTUFBTSxTQUNqQixFQUFFLElBQUksVUFBVSxJQUFJLFVBQVUsU0FBUyxFQUFFLElBQUksT0FBTyxRQUFRLGFBQWEsTUFBTSxTQUFTLEVBQUUsTUFBTSxNQUFNLE1BQU0sU0FBUyxNQUFNLEVBQUUsSUFDN0gsRUFBRSxJQUFJLFdBQVcsUUFBUSxPQUFPLFdBQVcsU0FBUyxFQUFFLE1BQU0sTUFBTSxNQUFNLFNBQVMsTUFBTSxFQUFFO0FBQzdGLGFBQVMsRUFBRSxHQUFHLE9BQU8sU0FBUyxPQUFPLFFBQVEsT0FBTyxTQUFTLENBQUMsR0FBRyxNQUFNLFNBQVMsTUFBTSxFQUFFLENBQUM7QUFDekYsaUJBQWEsRUFBRTtBQUFBLEVBQ2pCO0FBRUEsV0FBUyxtQkFBbUI7QUFDMUIsVUFBTSxRQUFRLE1BQU07QUFDcEIsVUFBTSxPQUFPLFVBQVU7QUFDdkIsVUFBTSxTQUFTLEtBQUssTUFBTSxRQUFRO0FBQ2xDLFFBQUksQ0FBQyxPQUFRO0FBQ2IsUUFBSSxPQUFPLE9BQVEsUUFBTyxNQUFNLHNEQUFzRDtBQUN0RixVQUFNLFVBQVUsQ0FBQyxHQUFHLE1BQU0sU0FBUyxFQUFFLElBQUksVUFBVSxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzdFLFVBQU0sWUFBWSxLQUFLLE9BQU8sQ0FBQyxRQUFRLElBQUksY0FBYyxPQUFPLFNBQVM7QUFDekUsVUFBTSxXQUFXLEtBQUssSUFBSSxNQUFNLFVBQVUsS0FBSyxJQUFJLEdBQUcsVUFBVSxTQUFTLENBQUMsQ0FBQztBQUMzRSxhQUFTLEVBQUUsR0FBRyxPQUFPLFVBQVUsUUFBUSxDQUFDO0FBQ3hDLFFBQUksVUFBVSxRQUFRLEVBQUcsZ0JBQWUsTUFBTSxVQUFVLFFBQVEsRUFBRSxTQUFTO0FBQUEsRUFDN0U7QUFFQSxpQkFBZSxjQUFjLFNBQVMsUUFBUSxVQUFVLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxPQUFPLElBQUk7QUFDMUYsUUFBSSxDQUFDLE1BQU87QUFDWixVQUFNLFFBQVEsTUFBTTtBQUNwQixVQUFNLFFBQVEsQ0FBQztBQUNmLFNBQUssbUJBQW1CO0FBQ3hCLGdCQUFZLElBQUk7QUFDaEIsUUFBSTtBQUNGLFlBQU0sV0FBV0MsTUFBSyxTQUFTLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsUUFBUSxJQUFJO0FBQy9FLFlBQU0sRUFBRSxLQUFLLElBQUksaUJBQWlCLE1BQU0sU0FBUyxTQUFTLE1BQU0sT0FBTyxDQUFDO0FBQ3hFLFVBQUksS0FBSyxxQkFBcUIsU0FBUyxNQUFNLE1BQU0sTUFBTztBQUMxRCxZQUFNLE9BQU8sRUFBRSxNQUFNLFFBQVEsTUFBTSxNQUFNLEtBQUssS0FBSyxHQUFHLE9BQU8sT0FBTyxNQUFNLE1BQU07QUFDaEYsWUFBTSxTQUFTLGNBQWMsRUFBRSxXQUFXLHNCQUFzQixJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUk7QUFDbkYsVUFBSSxPQUFPLFFBQVE7QUFDakIsdUJBQWUsRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLFlBQUksT0FBTyxLQUFLLENBQUMsVUFBVSxNQUFNLFNBQVMsTUFBTSxHQUFHO0FBQ2pELG9CQUFVLEdBQUcsRUFBRSxLQUFLLFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVSxNQUFNLE1BQU0sT0FBTyxDQUFDO0FBQUEsUUFDeEU7QUFBQSxNQUNGLE1BQU8sZUFBYyxNQUFNLENBQUMsQ0FBQztBQUFBLElBQy9CLFNBQVMsT0FBTztBQUNkLFlBQU0sbUJBQW1CLFFBQVEsSUFBSSxLQUFLLE1BQU0sT0FBTyxFQUFFO0FBQUEsSUFDM0Q7QUFBQSxFQUNGO0FBRUEsV0FBUyxjQUFjLE1BQU0sUUFBUTtBQUNuQyxRQUFJLEtBQUsscUJBQXFCLEtBQUssU0FBUyxNQUFNLE1BQU0sS0FBSyxNQUFPO0FBQ3BFLFFBQUk7QUFDRixZQUFNLE9BQU8sY0FBYyxLQUFLLE1BQU0sT0FBTyxPQUFPLEtBQUssS0FBSyxNQUFNLE1BQU07QUFDMUUsWUFBTSxPQUFPLGVBQWUsS0FBSyxPQUFPLEtBQUssT0FBTyxJQUFJO0FBQ3hELGVBQVMsS0FBSyxNQUFNLEtBQUssTUFBTTtBQUMvQixxQkFBZSxJQUFJO0FBQ25CLFdBQUssbUJBQW1CO0FBQ3hCLFNBQUcsTUFBTSxPQUFPO0FBQUEsSUFDbEIsU0FBUyxPQUFPO0FBQ2QsWUFBTSxNQUFNLE9BQU87QUFBQSxJQUNyQjtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSxXQUFXLEdBQUcsT0FBTyxJQUFJO0FBQ3RDLFFBQUksT0FBTyxTQUFTLFNBQVUsUUFBTztBQUNyQyxRQUFJLEVBQUUsUUFBUyxRQUFPLGNBQWMsQ0FBQztBQUNyQyxhQUFTLEVBQUU7QUFDWCxnQkFBWSxJQUFJO0FBQ2hCLFFBQUksRUFBRSxTQUFTLE9BQVEsUUFBTyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUM7QUFDbEQsUUFBSSxFQUFFLFNBQVMsU0FBVSxRQUFPLElBQUksT0FBTyxJQUFJO0FBQy9DLFFBQUksRUFBRSxTQUFTLFFBQVMsUUFBTyxJQUFJLFNBQVMsSUFBSTtBQUNoRCxRQUFJLEVBQUUsU0FBUyxVQUFVO0FBQ3ZCLHlCQUFtQixJQUFJO0FBQ3ZCO0FBQUEsSUFDRjtBQUNBLFFBQUksRUFBRSxTQUFTLFNBQVM7QUFDdEIsVUFBSSxDQUFDLEtBQU0sUUFBTyxrQkFBa0IsSUFBSTtBQUN4QyxZQUFNLFNBQVMsS0FBSyxZQUFZO0FBQ2hDLFlBQU0sUUFBUSxDQUFDLEdBQUcsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU07QUFDekQsVUFBSSxDQUFDLE1BQU0sU0FBUyxNQUFNLEVBQUcsUUFBTyxNQUFNLFVBQVUsWUFBWSxDQUFDLGFBQWEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHO0FBQ2hHLHFCQUFlLE1BQU07QUFDckI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxFQUFFLE1BQU8sUUFBTyxJQUFJLFVBQVUsRUFBRSxJQUFJO0FBQ3hDLFFBQUksRUFBRSxTQUFTLFVBQVcsUUFBTyxpQkFBaUI7QUFDbEQsUUFBSSxFQUFFLFNBQVMsT0FBUSxRQUFPLElBQUksU0FBUyxJQUFJO0FBQy9DLFFBQUksRUFBRSxTQUFTLFlBQVk7QUFDekIsWUFBTSxPQUFPLEtBQUssS0FBSztBQUN2QixVQUFJLE1BQU0sSUFBSSxhQUFhLElBQUksRUFBRztBQUNsQyx5QkFBbUIsRUFBRSxLQUFLLENBQUM7QUFDM0IsZ0NBQTBCLElBQUk7QUFDOUI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxFQUFFLFNBQVMsY0FBYztBQUMzQixZQUFNLFdBQVcsS0FBSyxLQUFLO0FBQzNCLFVBQUksTUFBTSxJQUFJLGVBQWUsUUFBUSxFQUFHO0FBQ3hDLDZCQUF1QixFQUFFLFNBQVMsQ0FBQztBQUNuQyxvQ0FBOEIsSUFBSTtBQUNsQyxnQ0FBMEIsSUFBSTtBQUM5QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLEVBQUUsU0FBUyxTQUFTO0FBQ3RCLFVBQUksQ0FBQyxLQUFNLFFBQU8sa0JBQWtCLElBQUk7QUFDeEMsYUFBTyxJQUFJLGtCQUFrQixJQUFJO0FBQUEsSUFDbkM7QUFDQSxRQUFJLEVBQUUsU0FBUyxpQkFBa0IsUUFBTyxjQUFjO0FBQ3RELFFBQUksRUFBRSxTQUFTLFNBQVM7QUFDdEIsVUFBSSxDQUFDLGFBQWEsRUFBRyxRQUFPLE1BQU0sR0FBRyxNQUFNLEVBQUUsSUFBSSxpQ0FBaUM7QUFDbEYsVUFBSSxDQUFDLEtBQU0sUUFBTyxrQkFBa0IsSUFBSTtBQUN4QyxhQUFPLElBQUksYUFBYSxLQUFLLFlBQVksQ0FBQztBQUFBLElBQzVDO0FBQ0EsUUFBSSxFQUFFLFNBQVMsVUFBVTtBQUN2QixVQUFJLENBQUMsY0FBYyxFQUFHLFFBQU8sTUFBTSxHQUFHLE1BQU0sRUFBRSxJQUFJLGtDQUFrQztBQUNwRixVQUFJLENBQUMsS0FBTSxRQUFPLG1CQUFtQixJQUFJO0FBQ3pDLGFBQU8sSUFBSSxnQkFBZ0IsS0FBSyxZQUFZLENBQUM7QUFBQSxJQUMvQztBQUNBLFFBQUksRUFBRSxTQUFTLFVBQVU7QUFDdkIsVUFBSSxhQUFhLFlBQVksR0FBRyxFQUFHLFFBQU8sTUFBTSwyREFBMkQ7QUFDM0csWUFBTSxTQUFTLE1BQU0sbUJBQW1CLEVBQUUsTUFBTSxNQUFNLElBQUk7QUFDMUQsVUFBSSxVQUFVLENBQUMsYUFBYUMsVUFBUyxNQUFNLEVBQUcsUUFBTyxNQUFNLFNBQVNBLFFBQU8sd0JBQXdCO0FBQ25HLFlBQU0sV0FBVyxTQUFTLFFBQVEsTUFBTSxLQUFLLEVBQUUsS0FBSztBQUNwRCxZQUFNLFNBQVMsTUFBTSxVQUFVO0FBQy9CLFVBQUksT0FBTyxHQUFJLFFBQU8sTUFBTSxVQUFVLFNBQVMsUUFBUSxNQUFNLEtBQUssRUFBRSwwQkFBMEI7QUFDOUYsYUFBTyxNQUFNLGtCQUFrQixPQUFPLE9BQU8sTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFO0FBQUEsSUFDOUQ7QUFDQSxRQUFJLEVBQUUsU0FBUyxRQUFTLFFBQU8sV0FBVztBQUMxQyxRQUFJLEVBQUUsU0FBUyxVQUFXLFFBQU8saUJBQWlCO0FBQ2xELFFBQUksRUFBRSxTQUFTLFVBQVcsUUFBTyxrQkFBa0I7QUFDbkQsUUFBSSxFQUFFLFNBQVMsT0FBUSxRQUFPLFFBQVEsTUFBTTtBQUM1QyxRQUFJLEVBQUUsU0FBUyxNQUFPLFFBQU8sZ0JBQWdCLElBQUk7QUFDakQsUUFBSSxFQUFFLFNBQVMsVUFBVyxRQUFPLG9CQUFvQixJQUFJO0FBQ3pELFFBQUksRUFBRSxTQUFTLFVBQVU7QUFDdkIsWUFBTSxnQkFBZ0I7QUFDdEIsYUFBTyxtQkFBbUIsSUFBSTtBQUFBLElBQ2hDO0FBQ0EsUUFBSSxFQUFFLFNBQVMsVUFBVTtBQUN2QixVQUFJLEtBQUssRUFBRyxRQUFPLE1BQU0sZ0VBQWdFO0FBQ3pGLHNCQUFnQjtBQUNoQjtBQUFBLElBQ0Y7QUFDQSxRQUFJLEVBQUUsU0FBUyxVQUFXLFFBQU8saUJBQWlCO0FBQ2xELFFBQUksRUFBRSxTQUFTLE9BQU87QUFDcEIsWUFBTSxXQUFXRCxNQUFLLFNBQVNBLE1BQUssTUFBTSxrQkFBa0IsWUFBWUEsTUFBSyxJQUFJLENBQUMsS0FBSztBQUN2RixhQUFPLE1BQU0sR0FBR0EsTUFBSyxVQUFVLEdBQUcsUUFBUSxFQUFFO0FBQUEsSUFDOUM7QUFDQSxRQUFJLEVBQUUsU0FBUyxVQUFVO0FBQ3ZCLGFBQU8sYUFBYTtBQUFBLFFBQ2xCLE9BQU87QUFBQSxRQUNQLE1BQU0sT0FBTyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLEVBQUUsYUFBYSxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQUEsTUFDeEYsQ0FBQztBQUFBLElBQ0g7QUFDQSxRQUFJLEVBQUUsU0FBUyxZQUFZO0FBQ3pCLGFBQU8sYUFBYTtBQUFBLFFBQ2xCLE9BQU87QUFBQSxRQUNQLE1BQU07QUFBQSxVQUNKLEdBQUcsU0FBUyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksTUFBTSxNQUFNLFVBQVUsRUFBRTtBQUFBLFVBQ3BGLEdBQUdBLE1BQUssU0FBUyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLGFBQWEsTUFBTSxJQUFJLE9BQU8sRUFBRTtBQUFBLFFBQzFHO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUNBLFFBQUksRUFBRSxTQUFTLFNBQVM7QUFDdEIsWUFBTSxFQUFFLE1BQU0sU0FBUyxJQUFJLE1BQU0sSUFBSSxjQUFjO0FBQ25ELG1CQUFhLEVBQUUsT0FBTyxRQUFRLFdBQVcsVUFBVSxRQUFRLG9CQUFvQixFQUFFLElBQUksS0FBSyxDQUFDO0FBQzNGO0FBQUEsSUFDRjtBQUNBLFFBQUksRUFBRSxTQUFTLE1BQU8sUUFBTyxJQUFJLFdBQVcsSUFBSTtBQUNoRCxRQUFJLEVBQUUsU0FBUyxVQUFVO0FBQ3ZCLFVBQUksS0FBSyxFQUFHLFFBQU8sTUFBTSw0Q0FBNEM7QUFDckUsVUFBSSxDQUFDLE1BQU0sUUFBUyxRQUFPLE1BQU0sOEJBQThCO0FBQy9ELDJCQUFxQixJQUFJO0FBQ3pCO0FBQUEsSUFDRjtBQUNBLFFBQUksRUFBRSxTQUFTLFVBQVU7QUFDdkIsWUFBTSxnQkFBZ0I7QUFDdEIsVUFBSSxLQUFLLEVBQUcsUUFBTyxNQUFNLDRDQUE0QztBQUNyRSxVQUFJLFlBQVksUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFHLFFBQU8sTUFBTSx1QkFBdUI7QUFDN0Usb0JBQWMsTUFBTTtBQUNwQjtBQUFBLElBQ0Y7QUFDQSxRQUFJLEVBQUUsU0FBUyxRQUFTLFFBQU8sSUFBSSxNQUFNO0FBQ3pDLFFBQUksRUFBRSxTQUFTLFVBQVcsUUFBTyxrQkFBa0IsSUFBSTtBQUN2RCxRQUFJLEVBQUUsU0FBUyxRQUFRO0FBQ3JCLFlBQU0sT0FBTyxJQUFJLFlBQVk7QUFDN0IsVUFBSSxDQUFDLEtBQU0sUUFBTyxNQUFNLGNBQWM7QUFDdEMsWUFBTSxPQUFPLElBQUksS0FBSyxNQUFNLFFBQVEsQ0FBQyxDQUFDLFdBQVcsS0FBSyxhQUFhLGVBQWUsQ0FBQyxRQUFRLEtBQUssaUJBQWlCLGVBQWUsQ0FBQztBQUNqSSxZQUFNLEtBQUssUUFBUSxLQUFLLFNBQVMsT0FBVSxHQUFHLElBQUksMkJBQTJCLEtBQUssT0FBTyxRQUFRLENBQUMsQ0FBQyxLQUFLLElBQUk7QUFDNUc7QUFBQSxJQUNGO0FBQ0EsUUFBSSxFQUFFLFNBQVMsVUFBVTtBQUN2QixZQUFNLE9BQU8sTUFBTSxJQUFJLGVBQWU7QUFDdEMsWUFBTSxlQUFlLElBQUksRUFBRTtBQUMzQjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsaUJBQWUsdUJBQXVCO0FBQ3BDLFVBQU0sU0FBUyxNQUFNLGFBQWEsRUFBRSxNQUFNLE9BQU8sRUFBRSxXQUFXLE9BQU8sT0FBTyxLQUFLLEVBQUU7QUFDbkYscUJBQWlCO0FBQUEsTUFDZixFQUFFLElBQUksVUFBVSxPQUFPLGdDQUFnQyxXQUFXLE9BQU8sV0FBVyxPQUFPLE9BQU8sTUFBTTtBQUFBLElBQzFHLENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBUyxtQkFBbUI7QUFDMUIsd0JBQW9CLElBQUk7QUFDeEIseUJBQXFCO0FBQUEsRUFDdkI7QUFFQSxXQUFTLGdCQUFnQixVQUFVO0FBQ2pDLFFBQUksU0FBUyxPQUFPLFNBQVU7QUFDOUIsd0JBQW9CLEtBQUs7QUFDekIsVUFBTSw2Q0FBNkM7QUFDbkQsUUFBSSxnQkFBZ0IsRUFDakIsS0FBSyxDQUFDLEVBQUUsT0FBTyxNQUFNLE1BQU0sTUFBTSxnQkFBZ0IsU0FBUyxzQkFBc0IsS0FBSyxLQUFLLGtDQUFrQyxDQUFDLEVBQzdILE1BQU0sQ0FBQyxRQUFRLE1BQU0sbUJBQW1CLE9BQU8sSUFBSSxXQUFXLEdBQUcsRUFBRSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUFBLEVBQ3hGO0FBRUEsaUJBQWUsbUJBQW1CLFVBQVU7QUFDMUMsUUFBSSxTQUFTLE9BQU8sU0FBVTtBQUM5QixVQUFNLFFBQVEsS0FBSztBQUNuQixRQUFJLENBQUMsU0FBUyxNQUFNLE9BQU8sU0FBUyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxLQUFNO0FBQ3RFLFdBQUssZ0JBQWdCLEVBQUUsSUFBSSxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUN2RCxhQUFPLE1BQU0sOEJBQThCLFNBQVMsS0FBSyxtQ0FBbUM7QUFBQSxJQUM5RjtBQUNBLFNBQUssZ0JBQWdCO0FBQ3JCLFVBQU0sSUFBSSxtQkFBbUI7QUFDN0IseUJBQXFCO0FBQ3JCLFVBQU0sMkJBQTJCO0FBQUEsRUFDbkM7QUFFQSxXQUFTLGtCQUFrQjtBQUN6QixVQUFNLFVBQVUsRUFBRSxLQUFLO0FBQ3ZCLFVBQU0sU0FBUyxDQUFDLGNBQWMsWUFBWTtBQUMxQyxvQkFBZ0IsTUFBTTtBQUN0QixtQkFBZSxDQUFDO0FBQ2hCLHVCQUFtQixJQUFJO0FBQ3ZCLG9CQUFnQixHQUFHLE1BQU07QUFDekIsa0JBQWMsVUFBVUEsTUFBSyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsVUFBVTtBQUNsRCxVQUFJLE1BQU0sU0FBUyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssWUFBWSxLQUFLLFdBQVk7QUFDM0Usc0JBQWdCLENBQUMsY0FBYyxZQUFZLFlBQVksQ0FBQztBQUFBLElBQzFELENBQUM7QUFBQSxFQUNIO0FBRUEsV0FBUyxnQkFBZ0IsWUFBWSxTQUFTLGFBQWEsR0FBRztBQUM1RCxxQkFBaUIsSUFBSTtBQUNyQixRQUFJLG1CQUFtQixPQUFPLFVBQVUsQ0FBQyxFQUN0QyxLQUFLLGlCQUFpQixFQUN0QixRQUFRLE1BQU0saUJBQWlCLEtBQUssQ0FBQztBQUFBLEVBQzFDO0FBRUEsV0FBUyxZQUFZLE1BQU07QUFDekIsVUFBTSxPQUFPUSxTQUFRO0FBQ3JCLFdBQU8sS0FBSyxXQUFXLElBQUksSUFBSSxLQUFLLFFBQVEsTUFBTSxHQUFHLElBQUk7QUFBQSxFQUMzRDtBQUVBLFdBQVMsbUJBQW1CO0FBQzFCLFFBQUksS0FBSyxFQUFHLFFBQU8sTUFBTSxnRUFBZ0U7QUFDekYsd0JBQW9CLElBQUk7QUFDeEIsb0JBQWdCO0FBQUEsRUFDbEI7QUFFQSxpQkFBZSxrQkFBa0I7QUFDL0IsdUJBQW1CLElBQUk7QUFDdkIsUUFBSTtBQUNGLFlBQU0sT0FBTyxNQUFNLElBQUksYUFBYTtBQUNwQyxrQkFBWSxLQUFLLElBQUksQ0FBQyxhQUFhO0FBQUEsUUFDakMsR0FBRztBQUFBLFFBQ0gsTUFBTSxZQUFZLFFBQVEsSUFBSTtBQUFBLFFBQzlCLFdBQVcsUUFBUSxVQUFVLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxVQUFVLE1BQU0sWUFBWSxTQUFTLElBQUksRUFBRSxFQUFFO0FBQUEsTUFDcEcsRUFBRSxDQUFDO0FBQUEsSUFDTCxVQUFFO0FBQ0EseUJBQW1CLEtBQUs7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSxtQkFBbUIsVUFBVTtBQUMxQyxRQUFJO0FBQ0YsWUFBTSxPQUFPLE1BQU0sSUFBSSxZQUFZLFNBQVMsS0FBSztBQUNqRCxZQUFNLElBQUksaUJBQWlCLEVBQUUsTUFBTSxLQUFLLEtBQUssQ0FBQztBQUM5QywwQkFBb0IsS0FBSztBQUFBLElBQzNCLFNBQVMsS0FBSztBQUNaLFlBQU0sb0JBQW9CLE9BQU8sSUFBSSxXQUFXLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFBQSxJQUNyRTtBQUFBLEVBQ0Y7QUFFQSxpQkFBZSxzQkFBc0IsVUFBVTtBQUM3QyxRQUFJLFNBQVMsVUFBVTtBQUNyQixVQUFJLFNBQVMsUUFBUyxRQUFPLE1BQU0sdURBQXVEO0FBQzFGLFlBQU1DLFNBQVEsS0FBSztBQUNuQixVQUFJLENBQUNBLFVBQVNBLE9BQU0sU0FBUyxTQUFTLFFBQVEsS0FBSyxJQUFJLElBQUlBLE9BQU0sS0FBSyxLQUFNO0FBQzFFLGFBQUssbUJBQW1CLEVBQUUsTUFBTSxTQUFTLE1BQU0sSUFBSSxLQUFLLElBQUksRUFBRTtBQUM5RCxlQUFPLE1BQU0sMkJBQTJCLFNBQVMsVUFBVSxTQUFTLElBQUksYUFBYSxTQUFTLEtBQUssSUFBSSxTQUFTLFVBQVUsSUFBSSxZQUFZLFVBQVUsRUFBRTtBQUFBLE1BQ3hKO0FBQ0EsV0FBSyxtQkFBbUI7QUFDeEIsVUFBSTtBQUNGLGNBQU0sSUFBSSxlQUFlLFFBQVE7QUFDakMsY0FBTSxnQkFBZ0I7QUFDdEIsY0FBTSxXQUFXLFNBQVMsVUFBVSxTQUFTLElBQUksRUFBRTtBQUFBLE1BQ3JELFNBQVMsS0FBSztBQUNaLGNBQU0sa0JBQWtCLE9BQU8sSUFBSSxXQUFXLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFBQSxNQUNuRTtBQUNBO0FBQUEsSUFDRjtBQUNBLFFBQUksU0FBUyxRQUFTLFFBQU8sTUFBTSxzREFBc0Q7QUFDekYsVUFBTSxRQUFRLEtBQUs7QUFDbkIsUUFBSSxDQUFDLFNBQVMsTUFBTSxTQUFTLFNBQVMsUUFBUSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssS0FBTTtBQUMxRSxXQUFLLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxNQUFNLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDOUQsYUFBTyxNQUFNLDJCQUEyQixTQUFTLElBQUksYUFBYSxTQUFTLEtBQUssSUFBSSxTQUFTLFVBQVUsSUFBSSxZQUFZLFVBQVUsRUFBRTtBQUFBLElBQ3JJO0FBQ0EsU0FBSyxtQkFBbUI7QUFDeEIsUUFBSTtBQUNGLFlBQU0sa0JBQWtCLFNBQVMsSUFBSTtBQUNyQyxZQUFNLGdCQUFnQjtBQUN0QixZQUFNLFdBQVcsU0FBUyxJQUFJLEtBQUssU0FBUyxLQUFLLElBQUksU0FBUyxVQUFVLElBQUksWUFBWSxVQUFVLFVBQVU7QUFBQSxJQUM5RyxTQUFTLEtBQUs7QUFDWixZQUFNLGtCQUFrQixPQUFPLElBQUksV0FBVyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQUEsSUFDbkU7QUFBQSxFQUNGO0FBRUEsaUJBQWUsa0JBQWtCLE1BQU07QUFDckMsVUFBTSxVQUFVLE1BQU0sU0FBUyxPQUFPLEtBQUssT0FBTztBQUNsRCxRQUFJLFdBQVcsS0FBSyxFQUFHLFFBQU8sTUFBTSw0Q0FBNEM7QUFDaEYsVUFBTSxRQUFRLEtBQUs7QUFDbkIsUUFBSSxDQUFDLFNBQVMsTUFBTSxTQUFTLEtBQUssUUFBUSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssS0FBTTtBQUN0RSxXQUFLLFlBQVksRUFBRSxNQUFNLEtBQUssTUFBTSxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ25ELGFBQU8sTUFBTSwyQkFBMkIsS0FBSyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRztBQUFBLElBQ3BFO0FBQ0EsU0FBSyxZQUFZO0FBQ2pCLFFBQUksU0FBUztBQUNYLFVBQUksTUFBTSw0QkFBNEIsRUFBRyxpQkFBZ0IsWUFBWSxDQUFDO0FBQ3RFO0FBQUEsSUFDRjtBQUNBLFFBQUk7QUFDRixZQUFNLGNBQWMsS0FBSyxJQUFJO0FBQzdCLHNCQUFnQixZQUFZLENBQUM7QUFDN0IsWUFBTSxpQkFBaUI7QUFBQSxJQUN6QixTQUFTLEtBQUs7QUFDWixZQUFNLGtCQUFrQixPQUFPLElBQUksV0FBVyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQUEsSUFDbkU7QUFBQSxFQUNGO0FBRUEsaUJBQWUsY0FBYyxNQUFNO0FBQ2pDLFFBQUksS0FBSyxFQUFHLFFBQU8sTUFBTSxnRUFBZ0U7QUFDekYsdUJBQW1CLEtBQUs7QUFDeEIsd0JBQW9CLEtBQUs7QUFDekIsVUFBTSxJQUFJLE9BQU8sSUFBSTtBQUFBLEVBQ3ZCO0FBRUEsV0FBUyxvQkFBb0I7QUFDM0IsVUFBTSxVQUFVLEtBQUs7QUFDckIsbUJBQWUsY0FBYyxPQUFPLENBQUM7QUFDckMsd0JBQW9CLElBQUk7QUFDeEIsaUJBQWEsQ0FBQztBQUFBLEVBQ2hCO0FBRUEsV0FBUyxjQUFjLE1BQU07QUFDM0IsVUFBTSxPQUFPLG9CQUFJLElBQUk7QUFDckIsVUFBTSxNQUFNLENBQUM7QUFDYixlQUFXLFNBQVMsQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRztBQUN6RCxVQUFJLEtBQUssSUFBSSxNQUFNLElBQUksRUFBRztBQUMxQixXQUFLLElBQUksTUFBTSxJQUFJO0FBQ25CLFVBQUksS0FBSyxLQUFLO0FBQUEsSUFDaEI7QUFDQSxXQUFPO0FBQUEsRUFDVDtBQUVBLGlCQUFlLGdCQUFnQixNQUFNO0FBQ25DLGlCQUFhLElBQUk7QUFDakIsUUFBSSxTQUFTLEVBQUcsUUFBTyxlQUFlLGNBQWMsS0FBSyxDQUFDLENBQUM7QUFDM0QsVUFBTSxVQUFVLE1BQU0sbUJBQW1CLElBQUk7QUFDN0MsUUFBSSxTQUFTLEVBQUcsUUFBTyxlQUFlLGNBQWMsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzVFLFVBQU0sU0FBUyxNQUFNLGtCQUFrQjtBQUN2QyxtQkFBZSxjQUFjLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFBQSxFQUNsRTtBQUVBLGlCQUFlLGdCQUFnQixRQUFRLEtBQUs7QUFDMUMsVUFBTSxJQUFJLE9BQU8sUUFBUSxJQUFJLEdBQUc7QUFDaEMsa0JBQWMsSUFBSTtBQUNsQixvQkFBZ0IsSUFBSTtBQUFBLEVBQ3RCO0FBRUEsV0FBUyxjQUFjLEtBQUs7QUFDMUIsV0FBTyxnQkFBZ0IsYUFBYSxHQUFHLEdBQUc7QUFBQSxFQUM1QztBQUVBLFFBQU0sYUFBYSxJQUFJO0FBRXZCLGlCQUFlLDhCQUE4QjtBQUMzQyxVQUFNLFVBQVUsTUFBTSxJQUFJLHFCQUFxQjtBQUMvQyx5QkFBcUIsS0FBSztBQUMxQixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sV0FBVyxNQUNmLGVBQWUsS0FBSyx1QkFBdUIsS0FBSyxlQUFlLEtBQUssZ0JBQWdCLEtBQUssZUFBZSxLQUFLLGdCQUFnQixLQUFLLGtCQUFrQixLQUFLLGdCQUFnQixLQUFLLGlCQUFpQixLQUFLLGdCQUFnQixLQUFLLGFBQWEsS0FDdE8saUJBQWlCLEtBQUssaUJBQWlCLEtBQUssaUJBQWlCLEtBQzdELFlBQVksTUFBTSxRQUFRLFVBQVUsTUFBTSxRQUFRLFdBQVcsTUFBTTtBQUtyRSxRQUFNLGVBQWUsTUFBTSxTQUFTLEtBQUssQ0FBQyxlQUFlO0FBRXpELFdBQVMsWUFBWSxPQUFPO0FBQzFCLFFBQUksWUFBWSxNQUFNLEVBQUU7QUFBQSxFQUMxQjtBQUVBLGlCQUFlLGFBQWEsT0FBTztBQUNqQyxRQUFJLENBQUMsTUFBTSxJQUFJLGFBQWEsTUFBTSxFQUFFLEVBQUc7QUFDdkMsUUFBSSxjQUFjLE1BQU0sTUFBTSxHQUFJLGtCQUFpQixJQUFJO0FBQUEsRUFDekQ7QUFFQSxXQUFTLDBCQUEwQixNQUFNO0FBQ3ZDLFFBQUksS0FBSyxXQUFXLFdBQVc7QUFDN0IsZ0JBQVU7QUFDVjtBQUFBLElBQ0Y7QUFDQSxRQUFJLG9CQUFvQixLQUFLLGNBQWM7QUFDM0MsUUFBSSxjQUFjLE1BQU0sS0FBSyxHQUFJLGtCQUFpQixJQUFJO0FBQUEsRUFDeEQ7QUFFQSxXQUFTLGFBQWEsT0FBTztBQUMzQixJQUFBVCxNQUFLLE9BQU8sUUFBUSxNQUFNLEVBQUU7QUFDNUIsUUFBSSxjQUFjLE1BQU0sTUFBTSxHQUFJLGtCQUFpQixJQUFJO0FBQUEsRUFDekQ7QUFFQSxXQUFTLFVBQVUsT0FBTztBQUN4QixRQUFJLE1BQU0sV0FBVyxVQUFXLFFBQU8sTUFBTSxTQUFTLE1BQU0sRUFBRSxpQkFBaUI7QUFDL0UsVUFBTSxRQUFRLEtBQUs7QUFDbkIsUUFBSSxDQUFDLFNBQVMsTUFBTSxPQUFPLE1BQU0sTUFBTSxLQUFLLElBQUksSUFBSSxNQUFNLEtBQUssS0FBTTtBQUNuRSxXQUFLLGVBQWUsRUFBRSxJQUFJLE1BQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ25ELGFBQU8sTUFBTSx5QkFBeUIsTUFBTSxlQUFlLFNBQVMsTUFBTSxFQUFFLEVBQUUsR0FBRztBQUFBLElBQ25GO0FBQ0EsU0FBSyxlQUFlO0FBQ3BCLElBQUFBLE1BQUssT0FBTyxLQUFLLE1BQU0sSUFBSSxNQUFNO0FBQUEsRUFDbkM7QUFFQSxRQUFNLGVBQWUsSUFBSTtBQUN6QixRQUFNLGdCQUFnQixJQUFJO0FBQzFCLFFBQU0sbUJBQW1CLElBQUk7QUFFN0IsUUFBTSxLQUFLVSxVQUFTLEVBQUUsU0FBUyxRQUFRLENBQUM7QUFDeEMsUUFBTSxpQkFBaUJBLFVBQVMsRUFBRSxTQUFTLE1BQU0sT0FBTyxRQUFRLFFBQVEsTUFBTSxDQUFDO0FBQy9FLEtBQUcsS0FBSyxNQUFNO0FBQ2QsTUFBSSxNQUFNLEdBQUc7QUFDWCxPQUFHLEtBQUssT0FBTztBQUNmLFFBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxFQUFHLElBQUcsTUFBTSxPQUFPO0FBQUEsRUFDdkM7QUFDQSxRQUFNLHFCQUFxQix5QkFBeUIsRUFBRSxJQUFJLFNBQVMsV0FBVyxVQUFVLENBQUM7QUFDekYscUJBQW1CLGNBQWM7QUFDakMsTUFBSSw0QkFBNEIsQ0FBQztBQUNqQyxnQkFBYztBQUNkLFFBQU0sWUFBWSxhQUFhLElBQUksU0FBUyxDQUFDO0FBQzdDLGdCQUFjO0FBQ2QsUUFBTSxZQUFZLGFBQWEsSUFBSSxVQUFVLENBQUM7QUFDOUMsUUFBTSxzQkFBc0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxjQUFjLEtBQUssQ0FBQyxjQUFjLEtBQUssQ0FBQyxTQUFTLEtBQUssUUFBUSxhQUFhO0FBQ3BILFFBQU0saUJBQWtCLFVBQVUsU0FBUyxLQUFLLFVBQVUsU0FBUyxLQUFNLENBQUMsc0JBQXNCLElBQUk7QUFDcEcsUUFBTSxDQUFDLGdCQUFnQixjQUFjLElBQUksbUJBQW1CLGVBQWUsR0FBRyxDQUFDLFVBQVUsUUFBUSxVQUFVLE1BQU0sR0FBRyxjQUFjO0FBQ2xJLE1BQUksZ0JBQWdCLEdBQUc7QUFDckIsT0FBRyxLQUFLLFVBQVU7QUFDbEIsUUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLEVBQUcsSUFBRyxNQUFNLFVBQVU7QUFBQSxFQUM3QyxPQUFPO0FBQ0wsUUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLGNBQWMsRUFBRyxJQUFHLEtBQUssT0FBTztBQUN6RCxRQUFJLFVBQVUsU0FBUyxLQUFLLFVBQVUsU0FBUyxHQUFHO0FBQ2hELFNBQUcsTUFBTSxrQkFBa0IsRUFBRSxPQUFPLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxJQUFJLENBQUMsTUFBTSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxVQUFVLElBQUksQ0FBQyxNQUFNLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFVBQVUsUUFBUSxNQUFNLEtBQUssQ0FBQztBQUFBLElBQzNLLE9BQU87QUFDTCxVQUFJLFVBQVUsU0FBUyxFQUFHLElBQUcsTUFBTSxlQUFlLEVBQUUsT0FBTyxDQUFDLGNBQWMsR0FBRyxVQUFVLElBQUksQ0FBQyxNQUFNLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFVBQVUsUUFBUSxNQUFNLEtBQUssQ0FBQztBQUNuSixVQUFJLFVBQVUsU0FBUyxFQUFHLElBQUcsTUFBTSxlQUFlLEVBQUUsT0FBTyxDQUFDLGNBQWMsR0FBRyxVQUFVLElBQUksQ0FBQyxNQUFNLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLFVBQVUsUUFBUSxNQUFNLEtBQUssQ0FBQztBQUFBLElBQ3JKO0FBQ0EsUUFBSSxLQUFLLDhCQUE4QixDQUFDLGNBQWMsS0FBSyxDQUFDLGNBQWMsR0FBRztBQUMzRSxXQUFLLDZCQUE2QjtBQUNsQyxTQUFHLE1BQU0sT0FBTztBQUFBLElBQ2xCO0FBQUEsRUFDRjtBQUNBLE1BQUksY0FBYyxHQUFHO0FBQUUsT0FBRyxLQUFLLFdBQVc7QUFBRyxPQUFHLE1BQU0sV0FBVztBQUFBLEVBQUUsV0FDMUQsS0FBSyw2QkFBNkI7QUFDekMsU0FBSyw4QkFBOEI7QUFDbkMsT0FBRyxNQUFNLGdCQUFnQixJQUFJLGFBQWEsT0FBTztBQUFBLEVBQ25EO0FBQ0EsZUFBYSxjQUFjLEtBQUssU0FBUyxLQUFLLEtBQUssTUFBTSxNQUFNO0FBQy9ELGVBQWE7QUFBQSxJQUNYLFFBQVEsQ0FBQyxTQUFTLE1BQU0sVUFBVSxLQUFLLE1BQU0sSUFBSSxLQUFLLFdBQVcsSUFBSSxjQUFjLFlBQVksRUFBRTtBQUFBLEVBQ25HLENBQUM7QUFFRCxXQUFTLHNCQUFzQixPQUFPO0FBQ3BDLFVBQU1DLFNBQVEsQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLElBQUksQ0FBQyxVQUFVLFNBQVMsTUFBTSxFQUFFLEVBQUUsR0FBRyxHQUFHLFVBQVUsSUFBSSxDQUFDLFVBQVUsU0FBUyxNQUFNLEVBQUUsRUFBRSxDQUFDO0FBQ2xJLFVBQU0sVUFBVUEsT0FBTSxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzFDLFVBQU0sV0FBVyxHQUFHLFFBQVEsRUFBRSxXQUFXLFFBQVEsSUFBSSxpQkFBaUI7QUFDdEUsUUFBSSxPQUFPO0FBQ1gsUUFBSSxDQUFDLE1BQU0sUUFBUSxNQUFNLFFBQVEsSUFBSyxRQUFPO0FBQUEsYUFDcEMsQ0FBQyxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQUssUUFBT0EsT0FBTSxTQUFTO0FBQUEsYUFDeEQsTUFBTSxRQUFRLE1BQU0sUUFBUSxJQUFLLFFBQU8sS0FBSyxJQUFJQSxPQUFNLFNBQVMsR0FBRyxVQUFVLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQUEsYUFDbEgsTUFBTSxRQUFRLE1BQU0sUUFBUSxJQUFLLFFBQU8sS0FBSyxJQUFJLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxLQUFLLE1BQU0sV0FBVyxDQUFDLENBQUMsQ0FBQztBQUFBLGFBQ25HLE1BQU0sUUFBUSxPQUFPLE1BQU0sUUFBUSxPQUFRLFNBQVEsVUFBVSxJQUFJQSxPQUFNLFVBQVVBLE9BQU07QUFBQSxhQUN2RixNQUFNLFFBQVEsT0FBTyxNQUFNLFFBQVEsS0FBTSxTQUFRLFVBQVUsSUFBSUEsT0FBTSxVQUFVQSxPQUFNO0FBQUEsUUFDekYsUUFBTztBQUNaLFVBQU0sU0FBU0EsT0FBTSxJQUFJO0FBQ3pCLE9BQUcsTUFBTSxNQUFNO0FBQ2YscUJBQWlCLE9BQU8sV0FBVyxRQUFRLElBQUksT0FBTyxNQUFNLFNBQVMsTUFBTSxJQUFJLElBQUk7QUFDbkYscUJBQWlCLE9BQU8sV0FBVyxRQUFRLElBQUksT0FBTyxNQUFNLFNBQVMsTUFBTSxJQUFJLElBQUk7QUFDbkYsY0FBVSxJQUFJO0FBQ2Qsa0JBQWMsY0FBYztBQUM1QixVQUFNLGdCQUFnQjtBQUN0QixXQUFPO0FBQUEsRUFDVDtBQUVBLFdBQVMsY0FBYyxPQUFPLFFBQVEsTUFBTSxFQUFFLE9BQU8sT0FBTyxlQUFlLE9BQU8sZUFBZSxNQUFNLElBQUksQ0FBQyxHQUFHO0FBQzdHLFVBQU1BLFNBQVEsQ0FBQyxHQUFJLE9BQU8sQ0FBQyxHQUFHLE1BQU0sT0FBTyxJQUFJLENBQUMsR0FBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUMvRixVQUFNLFVBQVVBLE9BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUMxQyxRQUFJLE9BQU87QUFDWCxRQUFJLENBQUMsTUFBTSxRQUFRLE1BQU0sUUFBUSxJQUFLLFFBQU87QUFBQSxhQUNwQyxDQUFDLE1BQU0sUUFBUSxNQUFNLFFBQVEsSUFBSyxRQUFPQSxPQUFNLFNBQVM7QUFBQSxhQUN4RCxNQUFNLFFBQVEsTUFBTSxRQUFRLElBQUssUUFBTyxLQUFLLElBQUlBLE9BQU0sU0FBUyxHQUFHLFVBQVUsS0FBSyxJQUFJLEdBQUcsS0FBSyxPQUFPLFdBQVcsVUFBVSxpQkFBaUIsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0FBQUEsYUFDaEssTUFBTSxRQUFRLE1BQU0sUUFBUSxJQUFLLFFBQU8sS0FBSyxJQUFJLEdBQUcsVUFBVSxLQUFLLElBQUksR0FBRyxLQUFLLE9BQU8sV0FBVyxVQUFVLGlCQUFpQixrQkFBa0IsQ0FBQyxDQUFDLENBQUM7QUFBQSxhQUNqSixNQUFNLFFBQVEsT0FBTyxNQUFNLFFBQVEsT0FBUSxTQUFRLFVBQVUsSUFBSUEsT0FBTSxVQUFVQSxPQUFNO0FBQUEsYUFDdkYsTUFBTSxRQUFRLE9BQU8sTUFBTSxRQUFRLEtBQU0sU0FBUSxVQUFVLElBQUlBLE9BQU0sVUFBVUEsT0FBTTtBQUFBLFFBQ3pGLFFBQU87QUFDWixVQUFNLFNBQVNBLE9BQU0sSUFBSTtBQUN6QixPQUFHLE1BQU0sTUFBTTtBQUNmLFFBQUksY0FBYztBQUNoQix1QkFBaUIsV0FBVyxlQUFlLE9BQU8sT0FBTyxNQUFNLFNBQVMsTUFBTSxDQUFDO0FBQy9FLGdCQUFVLElBQUk7QUFDZCxvQkFBYyxjQUFjO0FBQUEsSUFDOUI7QUFDQSxRQUFJLGNBQWM7QUFDaEIsdUJBQWlCLFdBQVcsZUFBZSxPQUFPLE9BQU8sTUFBTSxTQUFTLE1BQU0sQ0FBQztBQUMvRSxnQkFBVSxJQUFJO0FBQUEsSUFDaEI7QUFDQSxVQUFNLGdCQUFnQjtBQUN0QixXQUFPO0FBQUEsRUFDVDtBQUVBLEVBQUFmLFVBQVMsT0FBTyxVQUFVO0FBQ3hCLFFBQUksY0FBYyxHQUFHO0FBQ25CLFlBQU0sZ0JBQWdCO0FBQ3RCLFVBQUksTUFBTSxRQUFRLFVBQVU7QUFDMUIsNEJBQW9CLElBQUk7QUFDeEIsWUFBSTtBQUNGLGdCQUFNSSxNQUFLLFVBQVUsY0FBYztBQUNuQyxlQUFLLDhCQUE4QjtBQUNuQywyQkFBaUIsS0FBSztBQUFBLFFBQ3hCLFNBQVMsT0FBTztBQUNkLDRCQUFrQixrQkFBa0IsTUFBTSxPQUFPLEVBQUU7QUFBQSxRQUNyRCxVQUFFO0FBQVUsOEJBQW9CLEtBQUs7QUFBQSxRQUFFO0FBQ3ZDO0FBQUEsTUFDRjtBQUNBLFVBQUksaUJBQWlCLEVBQUc7QUFDeEIsWUFBTSxPQUFPLGtCQUFrQixtQkFBbUIsa0JBQWtCLEdBQUcsT0FBTyxnQkFBZ0IsQ0FBQztBQUMvRixVQUFJLFNBQVMsUUFBVztBQUN0Qiw2QkFBcUIsSUFBSTtBQUN6QixhQUFLQSxNQUFLLFVBQVUsUUFBUSxJQUFJLEVBQUUsTUFBTSxXQUFTLGtCQUFrQixtQkFBbUIsTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUN0RztBQUFBLE1BQ0Y7QUFDQSxZQUFNLE1BQU0sa0JBQWtCLEtBQUssQ0FBQ1ksU0FBUUEsS0FBSSxPQUFPLGtCQUFrQixDQUFDO0FBQzFFLFVBQUksQ0FBQyxJQUFLO0FBQ1YsWUFBTSxTQUFTLENBQUMsTUFBTSxRQUFRLENBQUMsTUFBTSxRQUFRLENBQUMsTUFBTSxRQUFRLE1BQU0sUUFBUSxXQUFXLE1BQU0sUUFBUTtBQUNuRyxZQUFNLFNBQVMsTUFBTSxRQUFRLE1BQU0sUUFBUSxNQUFNLGdCQUFnQixHQUFHLElBQUk7QUFDeEUsVUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFRO0FBQ3hCLDBCQUFvQixJQUFJO0FBQ3hCLFVBQUk7QUFDRixZQUFJLFFBQVE7QUFDVixnQkFBTVosTUFBSyxVQUFVLE9BQU8sSUFBSSxFQUFFO0FBQ2xDLG1CQUFTLEVBQUU7QUFDWCxxQkFBVyxFQUFFO0FBQ2Isb0JBQVUsQ0FBQztBQUNYLCtCQUFxQixJQUFJO0FBQ3pCLHNCQUFZLElBQUk7QUFDaEIsNEJBQWtCO0FBQ2xCLDRCQUFrQixLQUFLO0FBQ3ZCLDZCQUFtQixNQUFNO0FBQ3pCLGVBQUssR0FBRyxRQUFRO0FBQ2hCLGVBQUssR0FBRyxLQUFLO0FBQ2IsZUFBSyxHQUFHLFFBQVEsTUFBTSxPQUFPO0FBQzdCLGVBQUssOEJBQThCO0FBQ25DLDJCQUFpQixLQUFLO0FBQUEsUUFDeEIsT0FBTztBQUNMLGdCQUFNQSxNQUFLLFVBQVUsTUFBTSxFQUFFLElBQUksRUFBRTtBQUNuQyxnQkFBTSxpQkFBaUI7QUFBQSxRQUN6QjtBQUFBLE1BQ0YsU0FBUyxPQUFPO0FBQ2QsMEJBQWtCLEdBQUcsU0FBUyxXQUFXLE1BQU0sWUFBWSxNQUFNLE9BQU8sRUFBRTtBQUFBLE1BQzVFLFVBQUU7QUFBVSw0QkFBb0IsS0FBSztBQUFBLE1BQUU7QUFDdkM7QUFBQSxJQUNGO0FBQ0EsUUFBSSxLQUFLLGVBQWUsT0FBTyxLQUFLLEdBQUc7QUFDckMsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxNQUFNLEtBQUssR0FBRyxHQUFHLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTO0FBQ2pELFlBQU0sUUFBUSxNQUFNO0FBQ3BCLFlBQU0sT0FBTyxVQUFVO0FBQ3ZCLFVBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxJQUFLLFlBQVc7QUFBQSxlQUN2QyxNQUFNLFFBQVEsU0FBVSxZQUFXO0FBQUEsZUFDbkMsTUFBTSxRQUFRLFNBQVUsZ0JBQWU7QUFBQSxlQUN2QyxNQUFNLFFBQVEsSUFBSyxlQUFjO0FBQUEsZUFDakMsTUFBTSxRQUFRLE9BQU8sTUFBTSxRQUFRLElBQUssa0JBQWlCO0FBQUEsZUFDekQsTUFBTSxRQUFRLFFBQVEsTUFBTSxRQUFRLEtBQUs7QUFDaEQsY0FBTSxXQUFXLEtBQUssSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDO0FBQy9DLHVCQUFlLE1BQU0sS0FBSyxRQUFRLEdBQUcsU0FBUztBQUM5QyxpQkFBUyxFQUFFLEdBQUcsT0FBTyxTQUFTLENBQUM7QUFBQSxNQUNqQyxXQUFXLE1BQU0sUUFBUSxVQUFVLE1BQU0sUUFBUSxLQUFLO0FBQ3BELGNBQU0sV0FBVyxLQUFLLElBQUksS0FBSyxJQUFJLEdBQUcsS0FBSyxTQUFTLENBQUMsR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUMxRSx1QkFBZSxNQUFNLEtBQUssUUFBUSxHQUFHLFNBQVM7QUFDOUMsaUJBQVMsRUFBRSxHQUFHLE9BQU8sU0FBUyxDQUFDO0FBQUEsTUFDakMsV0FBVyxNQUFNLFFBQVEsVUFBVSxNQUFNLFFBQVEsS0FBSztBQUNwRCx1QkFBZSxNQUFNLEtBQUssQ0FBQyxHQUFHLFNBQVM7QUFDdkMsaUJBQVMsRUFBRSxHQUFHLE9BQU8sVUFBVSxFQUFFLENBQUM7QUFBQSxNQUNwQyxXQUFXLE1BQU0sUUFBUSxTQUFTLE1BQU0sUUFBUSxLQUFLO0FBQ25ELGNBQU0sV0FBVyxLQUFLLElBQUksR0FBRyxLQUFLLFNBQVMsQ0FBQztBQUM1Qyx1QkFBZSxNQUFNLEtBQUssUUFBUSxHQUFHLFNBQVM7QUFDOUMsaUJBQVMsRUFBRSxHQUFHLE9BQU8sU0FBUyxDQUFDO0FBQUEsTUFDakMsTUFDSztBQUNMLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksbUJBQW1CLFlBQVksT0FBTyx5QkFBeUIsRUFBRztBQUN0RSxRQUFJLEdBQUcsR0FBRyxnQkFBZ0IsS0FBSyxzQkFBc0IsS0FBSyxFQUFHO0FBQzdELFFBQUksR0FBRyxHQUFHLGdCQUFnQixLQUFLLE1BQU0sUUFBUSxVQUFVO0FBQ3JELFlBQU0sU0FBUyxHQUFHLFFBQVE7QUFDMUIsdUJBQWlCLE9BQU8sV0FBVyxRQUFRLElBQUksT0FBTyxNQUFNLFNBQVMsTUFBTSxJQUFJLElBQUk7QUFDbkYsdUJBQWlCLE9BQU8sV0FBVyxRQUFRLElBQUksT0FBTyxNQUFNLFNBQVMsTUFBTSxJQUFJLElBQUk7QUFDbkYsZ0JBQVUsSUFBSTtBQUNkLG9CQUFjLGNBQWM7QUFDNUIsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxHQUFHLEdBQUcsZ0JBQWdCLEtBQUssTUFBTSxRQUFRLE1BQU0sUUFBUSxLQUFLO0FBQzlELFlBQU0sU0FBUyxHQUFHLFFBQVE7QUFDMUIsWUFBTSxRQUFRLE9BQU8sV0FBVyxRQUFRLElBQUksVUFBVSxLQUFLLENBQUMsTUFBTSxTQUFTLEVBQUUsRUFBRSxPQUFPLE1BQU0sSUFBSTtBQUNoRyxZQUFNLE9BQU8sT0FBTyxXQUFXLFFBQVEsSUFBSSxVQUFVLEtBQUssQ0FBQyxRQUFRLFNBQVMsSUFBSSxFQUFFLE9BQU8sTUFBTSxJQUFJO0FBQ25HLFlBQU0sUUFBUSxNQUFNLFNBQVMsaUJBQWlCLE9BQU87QUFDckQsVUFBSSxNQUFPLE9BQU0sV0FBVyxZQUFZLFVBQVUsS0FBSyxJQUFJLGFBQWEsS0FBSztBQUM3RSxVQUFJLE1BQU0sU0FBUyxlQUFnQiwyQkFBMEIsSUFBSTtBQUFBLGVBQ3hELE1BQU8sRUFBQyxVQUFVLFNBQVMsRUFBRSxTQUFTLE1BQU0sTUFBTSxJQUFJLFlBQVksS0FBSyxJQUFJLGFBQWEsS0FBSztBQUN0RyxZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLEdBQUcsR0FBRyxhQUFhLEtBQUssY0FBYyxPQUFPLFNBQVMsV0FBVyxFQUFFLE1BQU0sTUFBTSxjQUFjLEtBQUssQ0FBQyxFQUFHO0FBQzFHLFFBQUksR0FBRyxHQUFHLGFBQWEsS0FBSyxjQUFjLE9BQU8sU0FBUyxXQUFXLEVBQUUsTUFBTSxNQUFNLGNBQWMsS0FBSyxDQUFDLEVBQUc7QUFDMUcsUUFBSSxHQUFHLEdBQUcsYUFBYSxLQUFLLE1BQU0sUUFBUSxVQUFVO0FBQ2xELFlBQU0sU0FBUyxHQUFHLFFBQVE7QUFDMUIsdUJBQWlCLFdBQVcsZUFBZSxPQUFPLE9BQU8sTUFBTSxTQUFTLE1BQU0sQ0FBQztBQUMvRSxnQkFBVSxJQUFJO0FBQ2QsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxHQUFHLEdBQUcsYUFBYSxLQUFLLE1BQU0sUUFBUSxNQUFNLFFBQVEsS0FBSztBQUMzRCxZQUFNLFFBQVEsR0FBRyxRQUFRLE1BQU0sZUFBZSxPQUFPLFVBQVUsS0FBSyxDQUFDLE1BQU0sU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUMzRyxVQUFJLE9BQU87QUFDVCxZQUFJLE1BQU0sV0FBVyxVQUFXLFdBQVUsS0FBSztBQUFBLFlBQzFDLGNBQWEsS0FBSztBQUFBLE1BQ3pCO0FBQ0EsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxHQUFHLEdBQUcsYUFBYSxLQUFLLE1BQU0sUUFBUSxVQUFVO0FBQ2xELFlBQU0sU0FBUyxHQUFHLFFBQVE7QUFDMUIsdUJBQWlCLFdBQVcsZUFBZSxPQUFPLE9BQU8sTUFBTSxTQUFTLE1BQU0sQ0FBQztBQUMvRSxnQkFBVSxJQUFJO0FBQ2Qsb0JBQWMsY0FBYztBQUM1QixZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLEdBQUcsR0FBRyxhQUFhLEtBQUssTUFBTSxRQUFRLE1BQU0sUUFBUSxLQUFLO0FBQzNELFlBQU0sU0FBUyxHQUFHLFFBQVE7QUFDMUIsWUFBTSxPQUFPLFdBQVcsZUFBZSxPQUFPLFVBQVUsS0FBSyxDQUFDLFFBQVEsU0FBUyxJQUFJLEVBQUUsT0FBTyxNQUFNO0FBQ2xHLFVBQUksTUFBTSxTQUFTLGVBQWdCLDJCQUEwQixJQUFJO0FBQUEsZUFDeEQsTUFBTTtBQUNiLFlBQUksQ0FBQyxVQUFVLFNBQVMsRUFBRSxTQUFTLEtBQUssTUFBTSxFQUFHLGFBQVksSUFBSTtBQUFBLFlBQzVELGNBQWEsSUFBSTtBQUFBLE1BQ3hCO0FBQ0EsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxNQUFNLFFBQVEsWUFBWSxLQUFLLEtBQUssQ0FBQyxTQUFTLEdBQUc7QUFDbkQsZ0JBQVU7QUFDVixZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsS0FBSztBQUNuQyxZQUFNLE1BQU0sS0FBSyxJQUFJO0FBQ3JCLFVBQUksTUFBTSxLQUFLLFNBQVMsTUFBTTtBQUM1QixjQUFNLElBQUksU0FBUztBQUNuQixnQkFBUSxLQUFLLENBQUM7QUFBQSxNQUNoQixPQUFPO0FBQ0wsYUFBSyxTQUFTO0FBQ2QsY0FBTSxVQUFVQSxNQUFLLE9BQU8sUUFBUTtBQUNwQyxjQUFNLFVBQVUsR0FBRyxPQUFPLElBQUksWUFBWSxJQUFJLFVBQVUsUUFBUSwyQ0FBMkMsWUFBWSxJQUFJLE9BQU8sTUFBTSxLQUFLLHNCQUFzQjtBQUFBLE1BQ3JLO0FBQ0EsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxHQUFHLEdBQUcsTUFBTSxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQ3RDLFlBQU0sZ0JBQWdCO0FBQ3RCLHlCQUFtQixLQUFLO0FBQ3hCLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxPQUFPLEtBQUssTUFBTSxVQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3ZFLFlBQU0sZ0JBQWdCO0FBQ3RCLFVBQUksS0FBSyxFQUFHLE9BQU0sNENBQTRDO0FBQUEsZUFDckQsWUFBWSxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUcsT0FBTSx1QkFBdUI7QUFBQSxVQUN0RSxlQUFjLE1BQU07QUFDekIsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sS0FBSyxNQUFNLFVBQVUsQ0FBQyxTQUFTLEdBQUc7QUFDdkUsVUFBSSxLQUFLLEVBQUcsT0FBTSxnRUFBZ0U7QUFBQSxVQUM3RSxpQkFBZ0I7QUFDckIsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sS0FBSyxNQUFNLFVBQVUsQ0FBQyxTQUFTLEdBQUc7QUFDdkUsd0JBQWtCLElBQUk7QUFDdEIsWUFBTSxnQkFBZ0I7QUFDdEI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxNQUFNLFFBQVEsTUFBTSxRQUFRLE9BQU8sS0FBSyxNQUFNLFVBQVUsQ0FBQyxTQUFTLEdBQUc7QUFDdkUsdUJBQWlCO0FBQ2pCLFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxPQUFPLEtBQUssTUFBTSxVQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3ZFLFVBQUksQ0FBQyxjQUFjLEVBQUcsT0FBTSxHQUFHLE1BQU0sRUFBRSxJQUFJLGtDQUFrQztBQUFBLFdBQ3hFO0FBQ0gsY0FBTSxRQUFRLENBQUMsTUFBTSxPQUFPLFVBQVUsUUFBUSxLQUFLO0FBQ25ELGNBQU0sT0FBTyxPQUFPLE1BQU0sUUFBUSxPQUFPLEtBQUssSUFBSSxJQUFJLEtBQUssTUFBTSxNQUFNO0FBQ3ZFLHlCQUFpQixJQUFJO0FBQUEsTUFDdkI7QUFDQSxZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsT0FBTyxpQkFBaUIsR0FBRztBQUN6RCx1QkFBaUIsVUFBVSxJQUFJLEtBQUssZUFBZSxNQUFNO0FBQ3pELFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxPQUFPLGdCQUFnQixHQUFHO0FBQ3hELGtCQUFZLENBQUMsT0FBTyxJQUFJLEtBQUssY0FBYyxNQUFNO0FBQ2pELFlBQU0sZ0JBQWdCO0FBQ3RCO0FBQUEsSUFDRjtBQUNBLFFBQUksTUFBTSxRQUFRLE1BQU0sUUFBUSxPQUFPLGdCQUFnQixHQUFHO0FBQ3hELFlBQU0sUUFBUSxZQUFZLElBQUksS0FBSyxhQUFhLEVBQUU7QUFDbEQscUJBQWUsSUFBSTtBQUNuQixzQkFBZ0IsSUFBSTtBQUNwQixZQUFNLGdCQUFnQjtBQUN0QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLE1BQU0sUUFBUSxNQUFNLFFBQVEsT0FBTyxNQUFNLGNBQWMsQ0FBQyxLQUFLLEtBQUssS0FBSyxNQUFNLFFBQVE7QUFDdkYsaUJBQVc7QUFDWCxZQUFNLGdCQUFnQjtBQUFBLElBQ3hCO0FBQUEsRUFDRixDQUFDO0FBRUQsUUFBTSxhQUFhLENBQUMsTUFBTyxJQUFJLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDOUUsUUFBTSxVQUFVLFdBQVcsS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLEtBQUssT0FBTyxLQUFLLElBQUksSUFBSSxVQUFVLEtBQUssR0FBSSxDQUFDLElBQUksQ0FBQztBQUVsRyxRQUFNLGFBQWEsVUFBVSxNQUFNLEdBQUcsWUFBWSxDQUFDO0FBQ25ELFFBQU0sYUFBYSxZQUFZLFNBQVM7QUFDeEMsUUFBTSxlQUFlLGVBQWUsUUFBUSxDQUFDLFNBQVM7QUFDdEQsUUFBTSxrQkFBa0IsQ0FBQyxlQUNyQixDQUFDLElBQ0QsU0FBUyxJQUNQLFNBQVMsRUFBRSxVQUNYLFlBQVksT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFZLFdBQVcsVUFBVSxLQUFLLFdBQVcsUUFBUSxNQUFNLEVBQUUsV0FBWSxFQUFFLEtBQUssWUFBWSxFQUFFLFdBQVcsV0FBVyxZQUFZLENBQUMsQ0FBQztBQUV6SyxRQUFNLFVBQVUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCO0FBQ3BELFFBQU0sWUFBWSxZQUFZLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEtBQUssQ0FBQyxTQUFTO0FBQ3RGLE1BQUksV0FBVztBQUNiLGNBQVUsR0FBRyxFQUFFLEtBQUssQ0FBQyxVQUFVO0FBQzdCLFVBQUksVUFBVSxTQUFTLEVBQUcsYUFBWSxLQUFLO0FBQUEsSUFDN0MsQ0FBQztBQUFBLEVBQ0g7QUFDQSxRQUFNLGVBQWUsWUFDakIsU0FBUyxFQUNOLElBQUksQ0FBQyxNQUFNLENBQUNhLFlBQVcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUN6QyxPQUFPLENBQUMsQ0FBQyxLQUFLLE1BQU0sU0FBUyxDQUFDLEVBQzlCLEtBQUssQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFDMUIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUNuQixDQUFDO0FBRUwsaUJBQWUsU0FBUyxHQUFHO0FBQ3pCLFVBQU0sSUFBSSxNQUFNO0FBQ2hCLFVBQU0sS0FBSyxFQUFFLFlBQVksR0FBRztBQUM1QixVQUFNLGNBQWMsTUFBTSxJQUFJLGtCQUFrQixDQUFDO0FBQ2pELFFBQUksYUFBYTtBQUNmLGVBQVMsRUFBRSxNQUFNLEdBQUcsRUFBRSxJQUFJLGNBQWMsR0FBRztBQUFBLElBQzdDLE9BQU87QUFDTCxlQUFTLEVBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksR0FBRztBQUFBLElBQ3ZDO0FBQ0EsaUJBQWEsQ0FBQztBQUFBLEVBQ2hCO0FBRUEsUUFBTSxVQUFVLFdBQVcsSUFBSSxrQkFBa0IsRUFBRSxPQUFPLE1BQU0sR0FBRyxTQUFTLGlCQUFpQixDQUFDLElBQUk7QUFDbEcsUUFBTSxpQkFBaUIsQ0FBQyxDQUFDLFdBQVcsUUFBUSxRQUFRLFNBQVMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxTQUFTO0FBRTNHLFFBQU0sZ0JBQWdCLE1BQU0sWUFBWSxRQUFRLENBQUM7QUFDakQsUUFBTSxpQkFBaUIsTUFBTTtBQUMzQixVQUFNLFNBQVMsYUFBYTtBQUM1QixRQUFJLENBQUMsT0FBUSxRQUFPLENBQUM7QUFDckIsVUFBTSxFQUFFLE1BQU0sTUFBTSxJQUFJLFlBQVksUUFBUSxHQUFHLE9BQU8sS0FBSztBQUMzRCxVQUFNLElBQUksTUFBTTtBQUNoQixVQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksTUFBTSxJQUFJLFNBQVMsT0FBTztBQUNyRCxVQUFNLE9BQU8sQ0FBQztBQUNkLFFBQUksSUFBSSxFQUFHLE1BQUssS0FBSyxFQUFFLEtBQUssUUFBUSxPQUFPLGlDQUFpQyxNQUFNLGlDQUFpQyxVQUFVLFlBQVksQ0FBQztBQUMxSSxTQUFLLEtBQUs7QUFBQSxNQUNSLEtBQUs7QUFBQSxNQUNMLE9BQU8sSUFBSSxJQUFJLDhCQUE4QjtBQUFBLE1BQzdDLE1BQU0sSUFBSSxJQUFJLG9EQUFvRCx1Q0FBdUMsSUFBSTtBQUFBLElBQy9HLENBQUM7QUFDRCxRQUFJLElBQUksRUFBRyxNQUFLLEtBQUssRUFBRSxLQUFLLFFBQVEsT0FBTyxxQkFBcUIsTUFBTSxzQkFBc0IsVUFBVSxZQUFZLENBQUM7QUFDbkgsU0FBSyxLQUFLLEVBQUUsS0FBSyxXQUFXLE9BQU8sNkJBQTZCLE1BQU0sZ0RBQWdELENBQUM7QUFDdkgsV0FBTztBQUFBLEVBQ1QsR0FBRztBQUVILFFBQU0sUUFBUSxVQUFVLEtBQUssUUFBUSxFQUFFO0FBQ3ZDLFFBQU0saUJBQWlCLE1BQU0sRUFBRSxVQUFVLEtBQUssUUFBUSxFQUFFLG1CQUFtQixLQUFLLFFBQVEsRUFBRSxvQkFBb0IsTUFBTSxFQUFFLE9BQ2xILEtBQUssSUFBSSxLQUFLLEtBQUssTUFBTyxRQUFRLEVBQUUsbUJBQW1CLE1BQU0sRUFBRSxVQUFXLEdBQUcsQ0FBQyxJQUM5RTtBQUNKLFFBQU0sZ0JBQWdCO0FBQ3RCLFFBQU0sY0FBYyxjQUFjLElBQUksY0FBYyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sY0FBYyxDQUFDLElBQUk7QUFDNUYsUUFBTSxtQkFBbUIsY0FBYyxTQUFTLEtBQUssVUFBVSxTQUFTO0FBQ3hFLFFBQU0sa0JBQWtCLEdBQUcsR0FBRyxhQUFhLEtBQU0sR0FBRyxHQUFHLGdCQUFnQixLQUFLLEdBQUcsUUFBUSxFQUFFLFdBQVcsUUFBUSxJQUFLLEdBQUcsUUFBUSxJQUFJO0FBQ2hJLFFBQU0saUJBQWlCLG1CQUFtQixvQkFBb0IsZUFBZSxnQkFBZ0IsTUFBTSxTQUFTLE1BQU0sSUFBSTtBQUN0SCxRQUFNLGVBQWUsaUJBQWlCLGNBQWMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLGNBQWMsSUFBSTtBQUMzRixRQUFNLGNBQWMsZ0JBQWdCO0FBQ3BDLFFBQU0sa0JBQWtCLGNBQWMsVUFBVSxZQUFZLFdBQVcsWUFBWSxTQUFTLFNBQVMsS0FBSztBQUMxRyxRQUFNLG9CQUFvQixvQkFBb0IsZUFBZSxJQUFJLGNBQWMsVUFBVSxDQUFDLE1BQU0sRUFBRSxRQUFRLGtCQUFrQixjQUFjLEVBQUU7QUFDNUksUUFBTSxtQkFBbUIsaUJBQWlCLGtCQUFrQixHQUFHLG1CQUFtQixjQUFjLFFBQVEsY0FBYztBQUN0SCxNQUFJLHFCQUFxQixrQkFBa0IsRUFBRyxzQkFBcUIsZ0JBQWdCO0FBQ25GLFFBQU0sY0FBYyxjQUFjLE1BQU0sa0JBQWtCLG1CQUFtQixjQUFjO0FBQzNGLGdCQUFjO0FBQ2QsUUFBTSxnQkFBZ0I7QUFDdEIsUUFBTSxjQUFjLGNBQWMsSUFBSSxVQUFVLEtBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxjQUFjLENBQUMsSUFBSTtBQUM1RixRQUFNLGtCQUFrQixHQUFHLEdBQUcsYUFBYSxLQUFNLEdBQUcsR0FBRyxnQkFBZ0IsS0FBSyxHQUFHLFFBQVEsRUFBRSxXQUFXLFFBQVEsSUFBSyxHQUFHLFFBQVEsSUFBSTtBQUNoSSxRQUFNLGlCQUFpQixtQkFBbUIsb0JBQW9CLGVBQWUsZ0JBQWdCLE1BQU0sU0FBUyxNQUFNLElBQUk7QUFDdEgsUUFBTSxlQUFlLGlCQUFpQixVQUFVLEtBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxjQUFjLElBQUk7QUFDM0YsUUFBTSxjQUFjLGdCQUFnQjtBQUNwQyxRQUFNLGtCQUFrQixjQUNwQixVQUFVLENBQUMsVUFBVSxTQUFTLEVBQUUsU0FBUyxZQUFZLE1BQU0sSUFBSSxXQUFXLFNBQVMsS0FDbkY7QUFDSixRQUFNLG9CQUFvQixvQkFBb0IsZUFDMUMsSUFDQSxjQUFjLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxrQkFBa0IsY0FBYyxFQUFFO0FBQy9FLFFBQU0sbUJBQW1CLGlCQUFpQixrQkFBa0IsR0FBRyxtQkFBbUIsY0FBYyxRQUFRLGNBQWM7QUFDdEgsTUFBSSxxQkFBcUIsa0JBQWtCLEVBQUcsc0JBQXFCLGdCQUFnQjtBQUNuRixRQUFNLGNBQWMsY0FBYyxNQUFNLGtCQUFrQixtQkFBbUIsY0FBYztBQUMzRixRQUFNLGlCQUFpQmIsTUFBSyxRQUFRLFFBQVE7QUFDNUMsYUFBVztBQUNYLFFBQU0sVUFBVSxVQUFVLElBQUlBLE1BQUssSUFBSSxPQUFPLElBQUk7QUFFbEQsTUFBSSxLQUFLLE1BQU0sUUFBUTtBQUNyQixXQUFPLGdCQUFBUCxNQUFDLFFBQUssVUFBVSxVQUFVLFNBQVMsTUFBTSxRQUFRLE1BQU0sR0FBRztBQUFBLEVBQ25FO0FBRUEsbUJBQWlCO0FBRWpCLFFBQU0saUJBQWlCLE1BQU0sSUFBSSxhQUFhLEVBQUUsYUFBYSxRQUFRLEVBQUU7QUFDdkUsUUFBTSx5QkFBeUIsVUFBVSxFQUFFLE1BQU0sR0FBRyxRQUFRLEdBQUc7QUFDL0QsUUFBTSxzQkFBc0IsTUFBTSxJQUFJLGVBQWUsSUFBSSxDQUFDLFVBQVU7QUFBQSxJQUNsRSxHQUFHO0FBQUEsSUFDSCxlQUFlLEtBQUssY0FBYztBQUFBLEVBQ3BDLEVBQUUsSUFBSTtBQUNOLFFBQU0sY0FBYyxrQkFBa0IsZUFBZSxrQkFBa0IsT0FBTztBQUM5RSxRQUFNLGNBQWMsa0JBQWtCLGVBQWUsa0JBQWtCLE9BQU87QUFDOUUsTUFBSSxjQUFjO0FBQ2xCLE1BQUksYUFBYTtBQUNmLFFBQUk7QUFBRSxvQkFBY08sTUFBSyxPQUFPLE9BQU8sWUFBWSxJQUFJLEVBQUUsTUFBTSxJQUFLLENBQUM7QUFBQSxJQUFFLFFBQVE7QUFBQSxJQUFDO0FBQUEsRUFDbEY7QUFDQSxRQUFNLGtCQUFrQixjQUFjO0FBQUEsSUFDcEMsRUFBRSxNQUFNLGlCQUFpQixNQUFNLFlBQVksUUFBUTtBQUFBLElBQ25ELEVBQUUsTUFBTSxnQkFBZ0IsTUFBTSxhQUFhLFVBQVUsZ0JBQWdCO0FBQUEsRUFDdkUsSUFBSTtBQUNKLFFBQU0sbUJBQW1CLGNBQWMsU0FBUyxZQUFZLEVBQUUsS0FBSyxjQUFjLFNBQVMsWUFBWSxFQUFFLEtBQUs7QUFDN0csUUFBTSxjQUFjLElBQUksSUFBSSxRQUFRLEVBQUUsT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQztBQUMxRyxRQUFNLGNBQWMsb0JBQW9CLE9BQU8sVUFBUSxLQUFLLFNBQVMsVUFBVSxLQUFLLGNBQWMsY0FBYyxDQUFDLEtBQUssSUFBSTtBQUMxSCxRQUFNLGdCQUFnQixJQUFJLElBQUksWUFBWSxJQUFJLFVBQVEsS0FBSyxTQUFTLENBQUM7QUFDckUsUUFBTSxhQUFhLG9CQUFvQixjQUFjLGdCQUFnQixXQUFXLElBQUksb0JBQW9CLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxVQUFXLENBQUMsWUFBWSxJQUFJLEtBQUssU0FBUyxLQUFLLENBQUMsY0FBYyxJQUFJLEtBQUssU0FBUyxDQUFFO0FBQ3pOLFFBQU0sbUJBQW1CLGFBQWEsU0FBUztBQUMvQyxRQUFNLHFCQUFxQixlQUFlO0FBQzFDLFFBQU0sYUFBYSxDQUFDLFFBQVEsU0FBUyxVQUFVLE1BQU0sSUFDakQsbUJBQW1CLE1BQU0sSUFDekIsbUJBQW1CLElBQ2pCLHNCQUFzQixRQUFRLE1BQU0sSUFDcEM7QUFDTixRQUFNLGtCQUFrQixXQUFXLFlBQVksYUFBYSxXQUFXLFNBQVM7QUFDaEYsUUFBTSxXQUFXLG1CQUFtQixFQUFFLE9BQU8saUJBQWlCLGFBQWEsR0FBRyxhQUFhLEVBQUUsSUFBSSxpQkFBaUIsaUJBQWlCLFdBQVcsQ0FBQztBQUMvSSxRQUFNLGNBQWMsU0FBUyxlQUFlLENBQUMsZUFBZSxDQUFDLGNBQWMsUUFBUSxFQUFFLG9CQUFvQixJQUFJO0FBQzdHLFFBQU0sZUFBZSxxQkFBcUIsU0FBUyxRQUFRLENBQUMsR0FBRyxTQUFTLE9BQU8sR0FBRyxXQUFXLFFBQVEsR0FBRyxVQUFVLE1BQU0sT0FBTyxHQUFHLEdBQUksVUFBVSxJQUFJLENBQUMsRUFBRSxNQUFNLGFBQWEsTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFJLENBQUMsSUFBSSxDQUFDLEdBQUksR0FBRyxXQUFXO0FBQzFOLFFBQU0sdUJBQXVCLG1CQUFtQixRQUFRLFlBQVk7QUFDcEUsOEJBQTRCLHFCQUFxQjtBQUNqRCxRQUFNLFFBQVEscUJBQXFCO0FBRW5DLFFBQU0saUJBQWlCLEtBQUssSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLEtBQUssTUFBTSxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakYsUUFBTSxhQUFhLFlBQVksS0FBSyxjQUFjLEtBQUssY0FBYyxJQUFJLGlCQUFpQixLQUFLO0FBRS9GLE1BQUksZ0JBQWdCLEdBQUc7QUFDckIsV0FDRSxnQkFBQVA7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLFVBQVUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNLGNBQWMsU0FBUyxDQUFDLE1BQU0sU0FBUyxFQUFFLFVBQVUsY0FBYyxTQUFTLENBQUMsQ0FBQztBQUFBLFFBQ2pILFFBQVE7QUFBQSxRQUNSLFlBQVksU0FBUztBQUFBLFFBQ3JCLFNBQU87QUFBQSxRQUNQLGtCQUFrQjtBQUFBLFFBQ2xCLFVBQVU7QUFBQSxRQUNWLFNBQVMsTUFBTSxtQkFBbUIsS0FBSztBQUFBO0FBQUEsSUFDekM7QUFBQSxFQUVKO0FBRUEsTUFBSSxhQUFhLEdBQUc7QUFDbEIsV0FDRSxnQkFBQUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLFNBQVMsV0FBVztBQUFBLFFBQ3BCLFNBQU87QUFBQSxRQUNQLFVBQVUsQ0FBQyxTQUFTLElBQUksT0FBTyxJQUFJO0FBQUEsUUFDbkMsYUFBYSxDQUFDLFNBQVMsSUFBSSxVQUFVLElBQUk7QUFBQSxRQUN6QyxVQUFVLENBQUMsU0FBUztBQUNsQixnQkFBTSxRQUFRLEtBQUs7QUFDbkIsY0FBSSxDQUFDLFNBQVMsTUFBTSxTQUFTLFFBQVEsS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLEtBQU07QUFDakUsaUJBQUssZUFBZSxFQUFFLE1BQU0sSUFBSSxLQUFLLElBQUksRUFBRTtBQUMzQyxtQkFBTyxNQUFNLDJCQUEyQixJQUFJLGtCQUFrQjtBQUFBLFVBQ2hFO0FBQ0EsZUFBSyxlQUFlO0FBQ3BCLGNBQUksT0FBTyxJQUFJO0FBQ2YsZ0JBQU0sc0JBQXNCLElBQUksRUFBRTtBQUFBLFFBQ3BDO0FBQUEsUUFDQSxPQUFPLENBQUMsTUFBTSxTQUFTLFVBQVU7QUFDL0IsY0FBSSxJQUFJLE1BQU0sU0FBUyxLQUFLO0FBQzVCLGdCQUFNLFNBQVMsSUFBSSxLQUFLLEtBQUssR0FBRztBQUFBLFFBQ2xDO0FBQUEsUUFDQSxRQUFRLENBQUMsTUFBTSxZQUFZO0FBQ3pCLGNBQUksT0FBTyxNQUFNLE9BQU87QUFDeEIsZ0JBQU0sV0FBVyxJQUFJLEVBQUU7QUFBQSxRQUN6QjtBQUFBLFFBQ0EsV0FBVztBQUFBLFFBQ1gsU0FBUyxNQUFNLGdCQUFnQixLQUFLO0FBQUE7QUFBQSxJQUN0QztBQUFBLEVBRUo7QUFFQSxNQUFJLGdCQUFnQixHQUFHO0FBQ3JCLFdBQ0UsZ0JBQUFBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDQyxVQUFVLGVBQWU7QUFBQSxRQUN6QixRQUFRLGFBQWE7QUFBQSxRQUNyQixZQUFZLFlBQVk7QUFBQSxRQUN4QixTQUFTLGNBQWM7QUFBQSxRQUN2QixTQUFPO0FBQUEsUUFDUCxXQUFXLE1BQU0sU0FBUztBQUFBLFFBQzFCLFFBQVEsQ0FBQyxTQUFTO0FBQ2hCLGNBQUksS0FBSyxPQUFPLE9BQU8sTUFBTSxTQUFTLEdBQUksUUFBTyxtQkFBbUIsS0FBSztBQUN6RSx3QkFBYyxJQUFJO0FBQUEsUUFDcEI7QUFBQSxRQUNBLFVBQVU7QUFBQSxRQUNWLFNBQVMsTUFBTSxtQkFBbUIsS0FBSztBQUFBO0FBQUEsSUFDekM7QUFBQSxFQUVKO0FBRUEsTUFBSSxpQkFBaUIsR0FBRztBQUN0QixXQUNFLGdCQUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsVUFBVSxTQUFTO0FBQUEsUUFDbkIsU0FBUyxnQkFBZ0I7QUFBQSxRQUN6QixTQUFPO0FBQUEsUUFDUCxnQkFBZ0IsQ0FBQyxhQUFhLFNBQVMsU0FBUyxjQUFjLFNBQVMsTUFBTSxJQUFJLElBQUksaUJBQWlCLFFBQVEsRUFBRSxLQUFLLE1BQU0sb0JBQW9CLEtBQUssQ0FBQztBQUFBLFFBQ3JKLGVBQWU7QUFBQSxRQUNmLGVBQWU7QUFBQSxRQUNmLFVBQVU7QUFBQSxRQUNWLFNBQVMsTUFBTSxvQkFBb0IsS0FBSztBQUFBO0FBQUEsSUFDMUM7QUFBQSxFQUVKO0FBRUEsTUFBSSxnQkFBZ0IsR0FBRztBQUNyQixXQUNFLGdCQUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsUUFBUSxFQUFFLFFBQVEsT0FBTyxHQUFHLGNBQWMsbUJBQW1CLEdBQUcsV0FBVyxVQUFVLEdBQUcsYUFBYSxZQUFZLEdBQUcsZUFBZU8sTUFBSyxlQUFlLFlBQVlBLE1BQUssWUFBWSxtQkFBbUJBLE1BQUssbUJBQW1CLG1CQUFtQkEsTUFBSyxtQkFBbUIsbUJBQW1CQSxNQUFLLG1CQUFtQixvQkFBb0IsbUJBQW1CLEVBQUU7QUFBQSxRQUM5VixTQUFPO0FBQUEsUUFDUCxrQkFBa0IsTUFBTTtBQUN0QixpQ0FBdUIsSUFBSTtBQUMzQixpQ0FBdUIsUUFBUTtBQUMvQiw2QkFBbUIsS0FBSztBQUN4QixvQ0FBMEIsSUFBSTtBQUFBLFFBQ2hDO0FBQUEsUUFDQSxxQkFBcUIsTUFBTTtBQUN6QixpQ0FBdUIsS0FBSztBQUM1Qix3Q0FBOEIsS0FBSztBQUNuQyxpQ0FBdUIsUUFBUTtBQUMvQiw2QkFBbUIsS0FBSztBQUN4QixvQ0FBMEIsSUFBSTtBQUFBLFFBQ2hDO0FBQUEsUUFDQSx3QkFBd0IsQ0FBQyxXQUFXO0FBQ2xDLG9DQUEwQixNQUFNO0FBQ2hDLGlDQUF1QixRQUFRO0FBQy9CLDZCQUFtQixLQUFLO0FBQ3hCLG9DQUEwQixJQUFJO0FBQUEsUUFDaEM7QUFBQSxRQUNBLHlCQUF5QixNQUFNO0FBQzdCLHdDQUE4QixJQUFJO0FBQ2xDLGlDQUF1QixRQUFRO0FBQy9CLDZCQUFtQixLQUFLO0FBQ3hCLG9DQUEwQixJQUFJO0FBQUEsUUFDaEM7QUFBQSxRQUNBLFVBQVUsQ0FBQyxNQUFNLFVBQVU7QUFDekIsY0FBSSxTQUFTLFVBQVU7QUFDckIsc0JBQVUsS0FBSztBQUNmLHdCQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsTUFBTSxFQUFFLENBQUM7QUFBQSxVQUM5QyxXQUFXLFNBQVMsYUFBYTtBQUMvQix5QkFBYSxLQUFLO0FBQ2xCLFlBQUFBLE1BQUssWUFBWTtBQUNqQixnQkFBSSxZQUFZLEVBQUUsV0FBVyxNQUFNLENBQUM7QUFDcEMsWUFBQUEsTUFBSyxJQUFJLFdBQVcsS0FBSztBQUN6Qix3QkFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLE1BQU0sRUFBRSxDQUFDO0FBQUEsVUFDL0MsV0FBVyxTQUFTLGVBQWU7QUFDakMsMkJBQWUsS0FBSztBQUNwQixZQUFBQSxNQUFLLGNBQWM7QUFDbkIsZ0JBQUksWUFBWSxFQUFFLGFBQWEsTUFBTSxDQUFDO0FBQ3RDLHdCQUFZLEVBQUUsU0FBUyxFQUFFLGFBQWEsTUFBTSxFQUFFLENBQUM7QUFBQSxVQUNqRCxXQUFXLFNBQVMsc0JBQXNCO0FBQ3hDLGtDQUFzQixLQUFLO0FBQzNCLFlBQUFBLE1BQUsscUJBQXFCO0FBQzFCLGdCQUFJLFlBQVksRUFBRSxvQkFBb0IsTUFBTSxDQUFDO0FBQzdDLHdCQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksTUFBTSxFQUFFLENBQUM7QUFBQSxVQUNqRCxPQUFPO0FBQ0wsa0NBQXNCLEtBQUs7QUFDM0Isd0JBQVksRUFBRSxTQUFTLEVBQUUsb0JBQW9CLE1BQU0sRUFBRSxDQUFDO0FBQUEsVUFDeEQ7QUFBQSxRQUNGO0FBQUEsUUFDQSxTQUFTLE1BQU0sbUJBQW1CLEtBQUs7QUFBQTtBQUFBLElBQ3pDO0FBQUEsRUFFSjtBQUVBLFNBQ0UsZ0JBQUFOLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLFFBQVEsT0FBTyxHQUNoRDtBQUFBLGtCQUFjLEtBQUssZ0JBQUFELE1BQUMsb0JBQWlCLFFBQVEsb0JBQW9CLFVBQVUsa0JBQWtCLEdBQUcsT0FBTyxnQkFBZ0IsU0FBUyxpQkFBaUIsR0FBRyxPQUFPLGVBQWUsR0FBRyxVQUFVLENBQUMsV0FBVztBQUFFLFVBQUksZ0JBQWdCLE1BQU0sT0FBUSxvQkFBbUIsTUFBTTtBQUFBLElBQUUsR0FBRztBQUFBLElBQ3RRLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsYUFBYSxRQUFRLFVBQVUsVUFBVSxHQUFHLFdBQVcsR0FBRyxRQUFRLE9BQU8sR0FDdEc7QUFBQSxzQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxFQUFFLEdBQ25EO0FBQUEsd0JBQUFBLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxPQUFPLFVBQVUsR0FBRyxLQUFLLEdBQUcsSUFBSSxTQUFTLEdBQ3BFO0FBQUEsMEJBQUFELE1BQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxHQUFHLFFBQVEsRUFBRSxHQUNsQyxlQUFLLElBRUYsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsNEJBQUFELE1BQUMsU0FBSSxPQUFPLEVBQUUsSUFBSSxPQUFPLEdBQUcsVUFBVSxFQUFFLEdBQ3RDLDBCQUFBQSxNQUFDLFdBQVEsT0FBTSxTQUFRLFdBQVcsVUFBVSxVQUFVLE1BQU0sU0FBTyxNQUNoRSxxQkFBVyxJQUNSLGNBQWMsR0FBRyxVQUFVLFlBQVksdUJBQXVCLGNBQWMsRUFBRSxPQUFPLE9BQU8sMEJBQzVGLFVBQVUsTUFBTSxhQUFhLGFBQWEsVUFBVSxNQUFNLFVBQVUsWUFBWSxjQUN0RixHQUNGO0FBQUEsWUFDQSxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sVUFBVSxXQUFXLEdBQUksZUFBSyxPQUFPLHNCQUFxQjtBQUFBLGFBQ3pGLElBRUEsZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLFVBQVUsV0FBVyxHQUFJLFVBQUFPLE1BQUssWUFBVyxHQUM1RTtBQUFBLFVBQ0MsU0FBUyxVQUFVLGdCQUFBUCxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxVQUFVLFdBQVcsR0FBSSxrQkFBUSxRQUFPO0FBQUEsVUFDeEYsU0FBUyxRQUFRLEtBQUssZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksY0FBSSxRQUFRLEtBQUssSUFBRztBQUFBLFVBQzFFLFNBQVMsVUFBVSxLQUFLLGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sSUFBSSxHQUFJLGNBQUksUUFBUSxPQUFPLElBQUc7QUFBQSxXQUMvRTtBQUFBLFFBQ0MsV0FBVyxXQUFXLElBQ3JCLGdCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxLQUFLLGFBQWEsRUFBRSxHQUM3QywwQkFBQUEsTUFBQyxjQUFXLFNBQVNRLFVBQVMsUUFBUSxPQUFPLEdBQUcsR0FDbEQsSUFDRSxnQkFBQVAsTUFBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsZUFBZSxTQUFTLEdBQ3BEO0FBQUEsOEJBQW9CLE1BQU0sT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxNQUMzRSxnQkFBQUQsTUFBQyxTQUE4RCxPQUFPLEVBQUUsZUFBZSxVQUFVLGFBQWEsR0FBRyxjQUFjLEdBQUcsZUFBZSxHQUFHLFlBQVksRUFBRSxHQUNoSywwQkFBQUEsTUFBQyxXQUFRLE1BQVksU0FBUyxRQUFRLEdBQUcsS0FEakMsR0FBRyxnQkFBZ0IsV0FBVyxLQUFLLGFBQWEsQ0FBQyxFQUUzRCxDQUNEO0FBQUEsVUFDRCxnQkFBQUM7QUFBQSxZQUFDb0I7QUFBQSxZQUFBO0FBQUEsY0FDQyxPQUFPLEVBQUUsVUFBVSxHQUFHLEtBQUssYUFBYSxFQUFFO0FBQUEsY0FDMUMsU0FBUyxDQUFDLHFCQUFxQixHQUFHLEdBQUcsTUFBTSxLQUFLLEdBQUcsR0FBRyxxQkFBcUI7QUFBQSxjQUMzRSxhQUFhLE1BQU0sSUFBSSxpQkFBaUI7QUFBQSxjQUN4QyxjQUFjO0FBQUEsY0FDZCxjQUFjLE9BQU8sSUFBSSxNQUFNLE9BQU87QUFBQSxjQUN0QyxXQUFXLENBQUMsWUFBWTtBQUN0QixzQkFBTSxXQUFXLGtCQUFrQjtBQUNuQyxvQkFBSSxVQUFVLGtCQUFrQixRQUFRLGlCQUFpQixVQUFVLGtCQUFrQixRQUFRLGNBQWU7QUFDNUcscUNBQXFCLE9BQU87QUFDNUIsb0JBQUksY0FBYyxLQUFLLFFBQVEsZ0JBQWdCLEtBQUssUUFBUSxpQkFBaUIsUUFBUSxlQUFlO0FBQ2xHLHNCQUFJLFNBQVMsZ0JBQWdCLEVBQUcsTUFBSyxpQkFBaUI7QUFDdEQsZ0NBQWMsQ0FBQyxTQUFTLE9BQU8sY0FBYztBQUFBLGdCQUMvQztBQUFBLGNBQ0Y7QUFBQSxjQUNBLFVBQVUsQ0FBQyxNQUFNLFNBQVM7QUFDMUIsMEJBQVUsQ0FBQyxDQUFDLE1BQU0sUUFBUTtBQUcxQixvQkFBSSxNQUFNLFlBQVksV0FBVyxJQUFJLGVBQWdCLGVBQWMsY0FBYztBQUNqRixvQkFBSSxTQUFTLEtBQUssY0FBYyxHQUFHO0FBR2pDLHNCQUFJLFNBQVMsZ0JBQWdCLEVBQUcsTUFBSyxpQkFBaUI7QUFDdEQsd0JBQU0sUUFBUSxLQUFLLElBQUksZ0JBQWdCLFNBQVMsZUFBZSxjQUFjO0FBQzdFLHdCQUFNLFVBQVUsS0FBSyxJQUFJLEdBQUcsS0FBSyxPQUFPLE1BQU0sYUFBYSxLQUFLLEtBQUssSUFBSSxHQUFHLE1BQU0sTUFBTSxDQUFDLENBQUM7QUFDMUYsZ0NBQWMsQ0FBQyxNQUFNLElBQUksY0FBYztBQUN2Qyw0QkFBVSxRQUFRLE9BQU87QUFDekI7QUFBQSxnQkFDRjtBQUNBLDBCQUFVLElBQUk7QUFBQSxjQUNoQjtBQUFBLGNBQ0EsV0FBUztBQUFBLGNBRVQ7QUFBQSxnQ0FBQXJCLE1BQUMsZ0JBQXlCLFFBQVEsbUJBQW1CLFFBQVE7QUFBQSxnQkFDNUQsY0FBYyxLQUNiLGdCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUN4QiwwQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sUUFBUSxLQUFLLEdBQUksb0JBQUssWUFBWSxlQUFlLENBQUMsVUFBVSxnQkFBZ0IsSUFBSSxZQUFZLFVBQVUsMkJBQTBCLEdBQy9KO0FBQUEsZ0JBRUQsbUJBQ0MsZ0JBQUFDLE1BQUEsWUFDRTtBQUFBLGtDQUFBRCxNQUFDLHdCQUFxQixPQUFPLE1BQU0sT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLG1CQUFtQixHQUFHLFNBQVMsUUFBUSxHQUFHLE1BQU0sY0FBYyxLQUFLLEtBQUssb0JBQW9CLG1CQUFtQixHQUFHLGdCQUFnQixrQkFBa0IsR0FBRyxlQUFlLFNBQVMsR0FBRyxHQUFHLE1BQU0sR0FBRyxTQUFTLE1BQU0sR0FBRyxNQUFNLE1BQU0sR0FBRztBQUFBLGtCQUNoUyxNQUFNLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxVQUFVLEtBQUssU0FBUyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsTUFBTSxNQUM1RixnQkFBQUEsTUFBQyxXQUErRSxNQUFZLFNBQVMsUUFBUSxLQUEvRixHQUFHLGdCQUFnQixTQUFTLEtBQUssYUFBYSxLQUFLLFVBQVUsQ0FBQyxFQUFvQyxDQUNqSDtBQUFBLG1CQUNILElBQ0UsTUFBTSxJQUFJLENBQUMsTUFBTSxNQUFNLE1BQU0sS0FBSyxLQUFLLFlBQ3pDLGdCQUFBQTtBQUFBLGtCQUFDO0FBQUE7QUFBQSxvQkFFQztBQUFBLG9CQUNBLFNBQVMsUUFBUTtBQUFBLG9CQUNqQixVQUFVLEtBQUssY0FBYztBQUFBLG9CQUM3QixPQUFPO0FBQUE7QUFBQSxrQkFKRixHQUFHLGdCQUFnQixJQUFJLEtBQUssYUFBYSxLQUFLLFVBQVUsY0FBYyxDQUFDO0FBQUEsZ0JBSzlFLElBRUEsZ0JBQUFBO0FBQUEsa0JBQUM7QUFBQTtBQUFBLG9CQUVDO0FBQUEsb0JBQ0EsU0FBUyxRQUFRO0FBQUEsb0JBQ2pCLGNBQWMsMEJBQTBCLG1CQUFtQixNQUFNLENBQUMsR0FBRyxjQUFjLElBQUksMEJBQTBCLG1CQUFtQixNQUFNLENBQUMsSUFBSTtBQUFBLG9CQUMvSSxRQUFRO0FBQUE7QUFBQSxrQkFKSCxHQUFHLGdCQUFnQixJQUFJLEtBQUssYUFBYSxLQUFLLFVBQVUsY0FBYyxDQUFDO0FBQUEsZ0JBSzlFLENBQ0Q7QUFBQTtBQUFBO0FBQUEsVUFDRDtBQUFBLFVBQ0MsbUJBQW1CLE9BQU8sSUFDekIsZ0JBQUFBLE1BQUMseUJBQXNCLFFBQVEsb0JBQW9CLFNBQVMsMkJBQTJCLElBQ3JGLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTLEtBQzdCLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsWUFBWSxLQUFLLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxlQUFlLE9BQU8sSUFBSSxPQUFPLEdBQUcsVUFBVSxFQUFFLEdBQzdHO0FBQUEsNEJBQUFELE1BQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUc7QUFBQSxZQUM3QixnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFFBQVEsR0FBSSw2RUFBd0Q7QUFBQSxhQUM1RjtBQUFBLFdBRUo7QUFBQSxTQUVFLFVBQVUsRUFBRSxTQUFTLEtBQUssT0FBTyxFQUFFLFNBQVMsTUFDNUMsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxVQUFVLFVBQVUsR0FBRyxXQUFXLEVBQUUsR0FDOUQ7QUFBQSxvQkFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLE1BQ3pCLGdCQUFBQSxNQUFDLFNBQTJCLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDeEQ7QUFBQSw0QkFBQUQsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sR0FBRyxNQUFNLEtBQUssR0FBSSxxQkFBSztBQUFBLFlBQ3BELGdCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsR0FDbkMsMEJBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsVUFBVSxZQUFZLE9BQU8sT0FBTyxFQUFFLEdBQUksa0JBQVEsUUFBUSxPQUFPLEdBQUcsR0FBRSxHQUN2RjtBQUFBLFlBQ0MsTUFBTSxLQUFLLGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksK0NBQStCO0FBQUEsZUFMdEUsYUFBYSxDQUFDLEVBTXhCLENBQ0Q7QUFBQSxVQUNBLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxNQUN0QixnQkFBQUMsTUFBQyxTQUF5QixPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ3REO0FBQUEsNEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUkscUJBQUs7QUFBQSxZQUNyQyxnQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxVQUFVLEdBQUcsUUFBUSxFQUFFLEdBQ25DLDBCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLE1BQU0sR0FBSSxrQkFBUSxRQUFRLE9BQU8sR0FBRyxHQUFFLEdBQ3BGO0FBQUEsWUFDQyxNQUFNLEtBQUssVUFBVSxFQUFFLFdBQVcsS0FBSyxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxpRUFBNEM7QUFBQSxlQUw1RyxXQUFXLENBQUMsRUFNdEIsQ0FDRDtBQUFBLFdBQ0g7QUFBQSxRQUdELFlBQVksS0FBSyxnQkFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNqQixNQUFNLFlBQVksRUFBRTtBQUFBLFlBQ3BCLFFBQVEsWUFBWSxFQUFFO0FBQUEsWUFDdEIsT0FBTyxTQUFTO0FBQUEsWUFDaEIsU0FBTztBQUFBLFlBQ1AsVUFBVSxDQUFDLFdBQVcsY0FBYyxZQUFZLEdBQUcsTUFBTTtBQUFBLFlBQ3pELFVBQVUsTUFBTTtBQUFFLDZCQUFlLElBQUk7QUFBRyxtQkFBSyxtQkFBbUI7QUFBTSxpQkFBRyxNQUFNLE9BQU87QUFBQSxZQUFFO0FBQUE7QUFBQSxRQUMxRjtBQUFBLFFBRUMsZ0JBQWdCLEtBQ2YsZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxTQUFTLGdCQUFnQjtBQUFBLFlBQ3pCLFNBQVMsQ0FBQyxjQUFjLEtBQUssR0FBRyxHQUFHLFVBQVUsS0FBSyxDQUFDLFNBQVM7QUFBQSxZQUM1RCxVQUFVLENBQUMsWUFBWTtBQUNyQixtQkFBSyw2QkFBNkI7QUFDbEMsa0JBQUksZUFBZSxPQUFPO0FBQUEsWUFDNUI7QUFBQSxZQUNBLFVBQVUsTUFBTTtBQUNkLG1CQUFLLDZCQUE2QjtBQUNsQyxrQkFBSSxlQUFlO0FBQUEsWUFDckI7QUFBQTtBQUFBLFFBQ0Y7QUFBQSxRQUdELE1BQU0sS0FDTCxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsSUFBSSxVQUFVLFVBQVUsR0FBRyxVQUFVLEdBQUcsV0FBVyxFQUFFLEdBQzFGO0FBQUEsMEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEdBQUcsTUFBTSxLQUFLLEdBQUksZ0JBQU0sRUFBRSxVQUFVLEdBQUcsTUFBTSxFQUFFLFNBQVMsUUFBUSxNQUFNLElBQUksTUFBTSxFQUFFLElBQUksS0FBSyxVQUFVLE1BQU0sRUFBRSxRQUFRLE1BQU0sV0FBVTtBQUFBLFVBQ2pLLE1BQU0sRUFBRSxVQUNQLGdCQUFBQTtBQUFBLFlBQUNzQjtBQUFBLFlBQUE7QUFBQSxjQUNDLFNBQVMsR0FBRyxHQUFHLE9BQU87QUFBQSxjQUN0QixPQUFPLFVBQVU7QUFBQSxjQUNqQixVQUFVO0FBQUEsY0FDVixVQUFVO0FBQUEsY0FDVixVQUFVLE1BQU07QUFDZCw2QkFBYSxFQUFFO0FBQ2YseUJBQVMsRUFBRSxHQUFHLE1BQU0sR0FBRyxTQUFTLE9BQU8sUUFBUSxNQUFNLENBQUM7QUFBQSxjQUN4RDtBQUFBLGNBQ0EsV0FBVyxDQUFDLFVBQVU7QUFDcEIsb0JBQUksTUFBTSxRQUFRLE9BQU87QUFDdkIsd0JBQU0sS0FBSyxZQUFZLFFBQVEsTUFBTSxFQUFFLElBQUk7QUFDM0MsMkJBQVMsRUFBRSxHQUFHLE1BQU0sR0FBRyxNQUFNLGFBQWEsS0FBSyxLQUFLLFlBQVksTUFBTSxFQUFFLENBQUM7QUFDekUseUJBQU87QUFBQSxnQkFDVDtBQUNBLHVCQUFPO0FBQUEsY0FDVDtBQUFBLGNBQ0EsZUFBYTtBQUFBLGNBQ2IseUJBQXVCO0FBQUEsY0FDdkIsZUFBYTtBQUFBLGNBQ2IsV0FBVztBQUFBLGNBQ1gsUUFBUSxFQUFFLE9BQU8sTUFBTSxJQUFJLE9BQU8sR0FBRyxPQUFPLFFBQVE7QUFBQTtBQUFBLFVBQ3RELElBRUEsZ0JBQUF0QixNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGlHQUE0RTtBQUFBLFdBRWhIO0FBQUEsUUFHRCxXQUFXLEtBQUssZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUkscUJBQVcsR0FBRTtBQUFBLFFBQzdELENBQUMsTUFBTSxLQUFLLENBQUMsZUFBZSxDQUFDLGVBQWUsZ0JBQUFDLE1BQUMsb0JBQWlCLFNBQVMsTUFBTTtBQUFFLGNBQUksQ0FBQyxjQUFjLEVBQUcsSUFBRyxNQUFNLE9BQU87QUFBQSxRQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksVUFBVSxlQUFlLE9BQU8sVUFBVSxHQUFHLFVBQVUsR0FBRyxXQUFXLFdBQVcsV0FBVyxLQUFLLE9BQU8sSUFBSSxJQUFJLEdBQUcsS0FBSyxhQUFhLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEdBQ25TO0FBQUEsMEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLEdBQUcsT0FBTyxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsZ0JBQWdCLElBQUksT0FBTyxJQUFJLE9BQU8sTUFBTSxLQUFLLEdBQUksb0JBQUk7QUFBQSxVQUNqSCxnQkFBQUEsTUFBQyxVQUFLLGVBQUM7QUFBQSxXQUNMLE1BQU0sU0FBUyxPQUFPLGNBQWMsUUFBUSxFQUFFLFVBQzlDLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsWUFBWSxLQUFLLEdBQUcsT0FBTyxHQUFHLGVBQWUsTUFBTSxHQUN4RTtBQUFBLGtCQUFNLFNBQVMsT0FBTyxjQUFjLGdCQUFBRCxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGtCQUFRLEVBQUUsUUFBUSxZQUFPLFVBQUk7QUFBQSxZQUNqRyxRQUFRLEVBQUUsU0FBUyxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxJQUFJLEdBQUcsR0FBRyxPQUFPLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLFNBQVMsTUFBTSxLQUFLLEdBQUksY0FBSSxRQUFRLEVBQUUsS0FBSyxLQUFJO0FBQUEsYUFDdks7QUFBQSxVQUVGLGdCQUFBQTtBQUFBLFlBQUNzQjtBQUFBLFlBQUE7QUFBQSxjQUNDLE9BQU87QUFBQSxjQUNQLGFBQVc7QUFBQSxjQUNYLFdBQVM7QUFBQSxjQUNULFNBQVMsQ0FBQyxjQUFjLEtBQUssR0FBRyxHQUFHLE9BQU8sS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLGdCQUFnQjtBQUFBLGNBQy9FLE9BQU8sTUFBTTtBQUFBLGNBQ2IsY0FBYyxZQUFZO0FBQUEsY0FDMUIsZ0JBQWdCLENBQUMsV0FBVztBQUMxQiwrQkFBZSxNQUFNO0FBQ3JCLDRCQUFZLElBQUk7QUFDaEIsNEJBQVksQ0FBQztBQUFBLGNBQ2Y7QUFBQSxjQUNBLFVBQVUsQ0FBQyxNQUFNO0FBQ2Ysc0JBQU0sWUFBWSx5QkFBeUIsR0FBRztBQUFBLGtCQUM1QyxhQUFhLE1BQU07QUFBQSxrQkFDbkIsUUFBUSxNQUFNLEVBQUUsTUFBTTtBQUFBLGdCQUN4QixDQUFDO0FBQ0QseUJBQVMsVUFBVSxNQUFNLFVBQVUsU0FBUyxJQUFJLFlBQVksSUFBSSxNQUFTO0FBQ3pFLDRCQUFZLENBQUM7QUFDYiw0QkFBWSxJQUFJO0FBQ2hCLDZCQUFhLENBQUM7QUFDZCwyQkFBVyxFQUFFO0FBQ2Isa0NBQWtCLEtBQUs7QUFBQSxjQUN6QjtBQUFBLGNBQ0EsVUFBVSxNQUFNO0FBQ2Qsb0JBQUksS0FBSyxFQUFHLFdBQVU7QUFBQSxxQkFDakI7QUFDSCx3QkFBTSxTQUFTLHFCQUFxQixRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ3RELHNCQUFJLE9BQVEsaUJBQWdCLFFBQVEsRUFBRSxLQUFLLE9BQU8sQ0FBQztBQUFBLHVCQUM5QztBQUNILGdDQUFZLElBQUk7QUFDaEIsa0NBQWMsS0FBSztBQUNuQixzQ0FBa0IsSUFBSTtBQUFBLGtCQUN4QjtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLGNBQ0EsVUFBVTtBQUFBLGNBQ1YsV0FBVyxDQUFDLE1BQU07QUFDaEIsb0JBQUksRUFBRSxRQUFRLFVBQVUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU9mLE1BQUssYUFBYSxHQUFHLEdBQUcsT0FBTyxLQUFLLEtBQUssTUFBTSxVQUFVLENBQUMsU0FBUyxLQUFLLHVCQUF1QjtBQUFBLGtCQUNySixNQUFNLEVBQUU7QUFBQSxrQkFBTyxhQUFhLDBCQUEwQixFQUFFLE9BQU8sTUFBTSxXQUFXO0FBQUEsa0JBQUcsV0FBVyxnQkFBZ0I7QUFBQSxrQkFBRyxTQUFTLGNBQWM7QUFBQSxrQkFBRyxTQUFTLEtBQUssb0JBQW9CLEtBQUs7QUFBQSxrQkFDbEwsU0FBUyxRQUFRO0FBQUEsa0JBQUcsWUFBWSxXQUFXO0FBQUEsa0JBQUcsU0FBUyxZQUFZO0FBQUEsa0JBQUcsVUFBVSxnQkFBZ0I7QUFBQSxrQkFBRyxPQUFPLE1BQU07QUFBQSxrQkFBRyxRQUFRLE9BQU8sRUFBRTtBQUFBLGtCQUFRLFdBQVcsVUFBVSxFQUFFO0FBQUEsZ0JBQ3JLLENBQUMsR0FBRztBQUNGLHVDQUFxQkEsTUFBSyxVQUFVLFVBQVUsQ0FBQztBQUMvQyxtQ0FBaUIsSUFBSTtBQUNyQixzQ0FBb0IsSUFBSTtBQUN4QixxQkFBRyxNQUFNLFdBQVc7QUFDcEIsdUJBQUssaUJBQWlCO0FBQ3RCLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFDQSxvQkFBSSxLQUFLLGVBQWUsT0FBTyxDQUFDLEVBQUcsUUFBTztBQUMxQyxvQkFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEtBQUs7QUFDM0IsdUJBQUssd0JBQXdCO0FBQzdCLHVCQUFLLEtBQUssV0FBVyxFQUFFLFFBQVEsTUFBTTtBQUFFLHlCQUFLLHdCQUF3QjtBQUFBLGtCQUFNLENBQUM7QUFDM0UseUJBQU87QUFBQSxnQkFDVDtBQUNBLG9CQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsS0FBSztBQUMzQix1QkFBSyxlQUFlLE1BQU0sQ0FBQztBQUMzQix5QkFBTztBQUFBLGdCQUNUO0FBQ0Esb0JBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxLQUFLO0FBQzNCLHVCQUFLLEtBQUssYUFBYTtBQUN2Qix5QkFBTztBQUFBLGdCQUNUO0FBQ0Esb0JBQUksRUFBRSxRQUFRLFNBQVMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLFFBQVEsYUFBYSxhQUFhLFNBQVMsR0FBRztBQUNqRiwyQkFBUyxhQUFhLEtBQUssSUFBSSxVQUFVLEdBQUcsYUFBYSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFDQSxvQkFBSSxFQUFFLFFBQVEsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsUUFBUSxnQkFBZ0IsZ0JBQWdCLFNBQVMsR0FBRztBQUN2Rix3QkFBTSxRQUFRLFNBQVM7QUFDdkIsc0JBQUksQ0FBQyxPQUFPO0FBQ1YsMEJBQU0sUUFBUSxLQUFLLElBQUksU0FBUyxHQUFHLGdCQUFnQixTQUFTLENBQUM7QUFDN0QsZ0NBQVksRUFBRSxTQUFTLGdCQUFnQixDQUFDO0FBQ3hDLGdDQUFZLEtBQUs7QUFDakIsMEJBQU0sT0FBTyxlQUFlLE1BQU0sR0FBRyxZQUFZLE1BQU0sZ0JBQWdCLEtBQUssRUFBRSxJQUFJO0FBQ2xGLDZCQUFTLEtBQUssTUFBTSxLQUFLLE1BQU07QUFBQSxrQkFDakMsT0FBTztBQUNMLDBCQUFNLFFBQVEsU0FBUyxJQUFJLEtBQUssTUFBTSxRQUFRO0FBQzlDLGdDQUFZLElBQUk7QUFDaEIsMEJBQU0sY0FBYyxlQUFlLE1BQU0sR0FBRyxZQUFZLE1BQU0sTUFBTSxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ3RGLDZCQUFTLFlBQVksTUFBTSxZQUFZLE1BQU07QUFBQSxrQkFDL0M7QUFDQSx5QkFBTztBQUFBLGdCQUNUO0FBQ0Esb0JBQUksRUFBRSxRQUFRLFdBQVcsRUFBRSxNQUFNO0FBQy9CLHdCQUFNLFFBQVEsa0JBQWtCLEVBQUUsSUFBSTtBQUN0QyxzQkFBSSxNQUFNLFNBQVMsR0FBRztBQUNwQiwwQkFBTSxRQUFRLEVBQUU7QUFDaEIsMEJBQU0sS0FBSyxFQUFFLFVBQVUsTUFBTTtBQUM3QiwwQkFBTSxZQUFZLElBQUk7QUFDdEIsNEJBQVEsSUFBSSxNQUFNLElBQUksVUFBUSxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLGtCQUFnQjtBQUN6RSwwQkFBSSxJQUFJLE9BQU8sYUFBYSxNQUFNLE1BQU0sTUFBTztBQUMvQywrQkFBUyxNQUFNLE1BQU0sR0FBRyxFQUFFLElBQUksYUFBYSxLQUFLLEdBQUcsSUFBSSxNQUFNLE1BQU0sRUFBRSxDQUFDO0FBQUEsb0JBQ3hFLENBQUMsRUFBRSxNQUFNLFdBQVMsTUFBTSxNQUFNLE9BQU8sQ0FBQztBQUN0QywyQkFBTztBQUFBLGtCQUNUO0FBQ0EseUJBQU87QUFBQSxnQkFDVDtBQUNBLG9CQUFJLEVBQUUsUUFBUSxlQUFlLEVBQUUsU0FBUyxHQUFHO0FBQ3pDLHdCQUFNLFFBQVEsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQjtBQUNoRSxzQkFBSSxPQUFPO0FBQ1Qsd0JBQUksWUFBWSxNQUFNLENBQUMsQ0FBQztBQUN4Qiw2QkFBUyxFQUFFLE1BQU0sTUFBTSxHQUFHLEVBQUUsU0FBUyxNQUFNLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRSxNQUFNLE1BQU0sRUFBRSxNQUFNLENBQUM7QUFDL0UsMkJBQU87QUFBQSxrQkFDVDtBQUFBLGdCQUNGO0FBQ0Esb0JBQUksRUFBRSxRQUFRLFNBQVMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE1BQU07QUFDekMsd0JBQU0sTUFBTSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsT0FBTyxTQUFTLGlCQUFpQixDQUFDO0FBQzNFLHNCQUFJLENBQUMsSUFBSyxRQUFPO0FBQ2pCLHNCQUFJLENBQUMsV0FBVyxHQUFHO0FBQ2pCLGtDQUFjLElBQUk7QUFDbEIsaUNBQWEsQ0FBQztBQUNkLDhCQUFVLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVTtBQUM3QiwwQkFBSSxVQUFVLFNBQVMsRUFBRyxhQUFZLEtBQUs7QUFBQSxvQkFDN0MsQ0FBQztBQUFBLGtCQUNILFdBQVcsSUFBSSxRQUFRLFNBQVMsR0FBRztBQUNqQyxxQ0FBaUIsRUFBRSxPQUFPLEtBQUssSUFBSSxRQUFRLEtBQUssSUFBSSxVQUFVLEdBQUcsSUFBSSxRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFBQSxrQkFDM0Y7QUFDQSx5QkFBTztBQUFBLGdCQUNUO0FBQ0Esb0JBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxnQkFBZ0IsVUFBVyxRQUFPO0FBQzFELG9CQUFJLEVBQUUsUUFBUSxRQUFRLEVBQUUsVUFBVSxPQUFPLFVBQVUsRUFBRSxTQUFTLEtBQUssT0FBTyxFQUFFLFNBQVMsSUFBSTtBQUN2RixzQkFBSSxjQUFjLEVBQUUsS0FBSyxRQUFRLEVBQUUsTUFBTSxXQUFTLE1BQU0sTUFBTSxPQUFPLENBQUM7QUFDdEUseUJBQU87QUFBQSxnQkFDVDtBQUNBLG9CQUFJLEVBQUUsUUFBUSxXQUFXLEVBQUUsVUFBVSxNQUFNLE9BQU8sRUFBRSxTQUFTLEtBQUssS0FBSyxLQUFLLENBQUMsV0FBVyxHQUFHO0FBQ3pGLHNCQUFJLGVBQWU7QUFDbkIseUJBQU87QUFBQSxnQkFDVDtBQUNBLHNCQUFNLFdBQVcsUUFBUSxLQUFLO0FBQzlCLG9CQUFJLEVBQUUsUUFBUSxTQUFTLFlBQVksRUFBRSxVQUFVLE9BQU8sUUFBUSxJQUFJLEtBQUssRUFBRSxTQUFTLEdBQUc7QUFDbkYsd0JBQU0sSUFBSSxRQUFRLElBQUk7QUFDdEIsNkJBQVcsQ0FBQztBQUNaLDJCQUFTLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsRUFBRSxJQUFJO0FBQzNDLHlCQUFPO0FBQUEsZ0JBQ1Q7QUFDQSxvQkFBSSxFQUFFLFFBQVEsVUFBVSxVQUFVO0FBQ2hDLHdCQUFNLElBQUksUUFBUSxJQUFJO0FBQ3RCLDZCQUFXLENBQUM7QUFDWiwyQkFBUyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsSUFBSSxDQUFDLEVBQUUsSUFBSTtBQUN4RCx5QkFBTztBQUFBLGdCQUNUO0FBQ0EsdUJBQU87QUFBQSxjQUNUO0FBQUEsY0FDQSxlQUFhO0FBQUEsY0FDYix5QkFBdUI7QUFBQSxjQUN2QixlQUFlO0FBQUEsY0FDZixXQUFXO0FBQUEsY0FDWCxRQUFRLEVBQUUsT0FBTyxNQUFNLElBQUksT0FBTyxHQUFHLE9BQU8sUUFBUTtBQUFBO0FBQUEsVUFDdEQ7QUFBQSxXQUNGO0FBQUEsUUFFQyx1QkFDQyxnQkFBQU4sTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sUUFBUSxHQUFHLFlBQVksRUFBRSxHQUMzRDtBQUFBLDBCQUFBRDtBQUFBLFlBQUM7QUFBQTtBQUFBLGNBQ0MsTUFBSztBQUFBLGNBQ0wsWUFBVztBQUFBLGNBQ1gsUUFBUSxnQkFBZ0IsTUFBTTtBQUFBLGNBQzlCLFNBQVMsQ0FBQyxZQUFZO0FBQ3BCLG9CQUFJLFFBQVMsd0JBQXVCLHdCQUF3QjtBQUFBLHlCQUNuRCxvQkFBb0IsTUFBTSx5QkFBMEIsd0JBQXVCLEVBQUU7QUFBQSxjQUN4RjtBQUFBLGNBQ0EsU0FBUyxNQUFNLGdCQUFnQixNQUFNLGNBQ2pDLEtBQUssS0FBSyxlQUFlLEtBQUssSUFDOUIsS0FBSyxlQUFlLE1BQU0sRUFBRSxPQUFPLE1BQU0sR0FBRyxRQUFRLFlBQVksRUFBRSxDQUFDO0FBQUE7QUFBQSxVQUN6RTtBQUFBLFVBQ0EsZ0JBQUFBO0FBQUEsWUFBQztBQUFBO0FBQUEsY0FDQyxNQUFLO0FBQUEsY0FDTCxZQUFXO0FBQUEsY0FDWCxRQUFRLGNBQWMsTUFBTTtBQUFBLGNBQzVCLFNBQVMsQ0FBQyxZQUFZO0FBQ3BCLG9CQUFJLFFBQVMsd0JBQXVCLHdCQUF3QjtBQUFBLHlCQUNuRCxvQkFBb0IsTUFBTSx5QkFBMEIsd0JBQXVCLEVBQUU7QUFBQSxjQUN4RjtBQUFBLGNBQ0EsU0FBUyxNQUFNLEtBQUssS0FBSyxhQUFhO0FBQUE7QUFBQSxVQUN4QztBQUFBLFVBQ0MsZ0JBQWdCLE1BQU0sVUFBVSxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sR0FBRyxVQUFVLFdBQVcsR0FBSSw2QkFBbUIsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsR0FBRTtBQUFBLFVBQ25KLGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLDBCQUFnQixNQUFNLGNBQWMsOEJBQThCLGNBQWMsTUFBTSxjQUFjLGdCQUFnQixvQkFBb0IsSUFBSSxJQUFJLG9CQUFvQixDQUFDLEtBQUssSUFBRztBQUFBLFdBQy9NO0FBQUEsUUFHRCxnQkFDQyxnQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsUUFBUSxHQUFHLFdBQVcsR0FBRyxVQUFVLEdBQUcsV0FBVyxFQUFFLEdBQ3ZGLDBCQUFnQixXQUFXLElBQzFCLGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFHLGtDQUFvQixJQUVuRCxnQkFBQUE7QUFBQSxVQUFDdUI7QUFBQSxVQUFBO0FBQUEsWUFDQyxTQUFPO0FBQUEsWUFDUCxPQUFPO0FBQUEsWUFDUCxVQUFVLFNBQVM7QUFBQSxZQUNuQixVQUFVO0FBQUEsWUFDVixVQUFVLENBQUMsTUFBTSxXQUFXLENBQUM7QUFBQSxZQUM3QixTQUFTLGdCQUFnQixnQkFBZ0IsTUFBTTtBQUFBLFlBQy9DLFlBQVk7QUFBQSxZQUNaLFdBQVc7QUFBQSxZQUNYLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUN2QixnQkFBQXRCLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsOEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsR0FBSSxtQkFBUyxZQUFPLE1BQUs7QUFBQSxjQUN4RCxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsT0FBTyxJQUFJLE1BQU0sR0FBSSxjQUFJLEVBQUUsSUFBSSxHQUFHLE9BQU8sZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLE1BQU0sS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFFO0FBQUEsY0FDOUksZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLEtBQUssTUFBTSxHQUFJLFlBQUUsTUFBSztBQUFBLGVBQ3ZEO0FBQUE7QUFBQSxRQUVKLEdBRUo7QUFBQSxRQUdELGFBQWEsYUFBYSxTQUFTLEtBQ2xDLGdCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxRQUFRLEdBQUcsV0FBVyxHQUFHLFVBQVUsR0FBRyxXQUFXLEVBQUUsR0FDeEYsMEJBQUFBO0FBQUEsVUFBQ3VCO0FBQUEsVUFBQTtBQUFBLFlBQ0MsU0FBTztBQUFBLFlBQ1AsT0FBTztBQUFBLFlBQ1AsVUFBVSxVQUFVO0FBQUEsWUFDcEIsVUFBVTtBQUFBLFlBQ1YsVUFBVTtBQUFBLFlBQ1YsVUFBVSxNQUFNLGtCQUFrQixJQUFJO0FBQUEsWUFDdEMsU0FBUyxhQUFhLGdCQUFnQixNQUFNO0FBQUEsWUFDNUMsWUFBWTtBQUFBLFlBQ1osV0FBVztBQUFBLFlBQ1gsWUFBWSxDQUFDLEdBQUcsRUFBRSxPQUFPLE1BQ3ZCLGdCQUFBdEIsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSw4QkFBQUQsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE9BQU8sRUFBRSxHQUFJLG1CQUFTLFlBQU8sTUFBSztBQUFBLGNBQ3hELGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxPQUFPLElBQUksUUFBUSxHQUFJLGFBQUU7QUFBQSxlQUMxRDtBQUFBO0FBQUEsUUFFSixHQUNGO0FBQUEsUUFHRCxrQkFDQyxnQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsUUFBUSxHQUFHLFdBQVcsR0FBRyxVQUFVLEdBQUcsV0FBVyxFQUFFLEdBQ3hGLDBCQUFBQTtBQUFBLFVBQUN1QjtBQUFBLFVBQUE7QUFBQSxZQUNDLFNBQU87QUFBQSxZQUNQLE9BQU8sUUFBUTtBQUFBLFlBQ2YsVUFBVSxVQUFVO0FBQUEsWUFDcEIsVUFBVTtBQUFBLFlBQ1YsVUFBVSxDQUFDLGNBQWMsaUJBQWlCLE1BQU0sR0FBRyxTQUFTLFNBQVM7QUFBQSxZQUNyRSxVQUFVO0FBQUEsWUFDVixTQUFTLGtCQUFrQixnQkFBZ0IsTUFBTTtBQUFBLFlBQ2pELFlBQVk7QUFBQSxZQUNaLFdBQVc7QUFBQSxZQUNYLFlBQVksQ0FBQyxXQUFXLEVBQUUsT0FBTyxNQUMvQixnQkFBQXRCLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsOEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsR0FBSSxtQkFBUyxZQUFPLE1BQUs7QUFBQSxjQUN4RCxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsT0FBTyxJQUFJLFFBQVEsR0FBSSxxQkFBVTtBQUFBLGVBQ2xFO0FBQUE7QUFBQSxRQUVKLEdBQ0Y7QUFBQSxTQUVGO0FBQUEsTUFFQSxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsT0FBTyxhQUFhLEtBQUssUUFBVyxRQUFRLGFBQWEsU0FBUyxPQUFVLEdBQ2xIO0FBQUEsdUJBQWUsS0FDZCxnQkFBQUQ7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNDLFFBQVEsT0FBTztBQUFBLFlBQ2YsU0FBUyxNQUFNLEVBQUU7QUFBQSxZQUNqQixhQUFhWSxjQUFhLEVBQUU7QUFBQSxZQUM1QixTQUFTLGVBQWU7QUFBQSxZQUN4QixRQUFRLE9BQU8sTUFBTTtBQUNuQixrQkFBSSxNQUFNLElBQUksWUFBWSxDQUFDLEVBQUcsbUJBQWtCLEtBQUs7QUFBQSxZQUN2RDtBQUFBLFlBQ0EsZUFBZSxPQUFPLE1BQU07QUFDMUIsa0JBQUksTUFBTSxJQUFJLFlBQVksR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDLEVBQUcsbUJBQWtCLEtBQUs7QUFBQSxZQUM1RTtBQUFBLFlBQ0EsU0FBUyxNQUFNLGtCQUFrQixLQUFLO0FBQUE7QUFBQSxRQUN4QztBQUFBLFFBR0QsdUJBQXVCLEtBQ3RCLGdCQUFBWjtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0MsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxjQUFjLEtBQUs7QUFBQSxZQUNwRCxTQUFTLHVCQUF1QixJQUFJTyxNQUFLLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxJQUFJLG9CQUFvQixJQUFJQSxNQUFLLGFBQWEsMkJBQTJCLElBQUlBLE1BQUssb0JBQW9CQSxNQUFLO0FBQUEsWUFDdEwsYUFBYTtBQUFBLFlBQ2IsT0FBTyx1QkFBdUIsSUFBSSxzQkFBc0IsdUJBQXVCLE1BQU0saUJBQWlCLE1BQU0sR0FBRyxXQUFXLG9CQUFvQixJQUFJLHVCQUF1QiwyQkFBMkIsSUFBSSwyQkFBMkI7QUFBQSxZQUNuTyxNQUFLO0FBQUEsWUFDTCxTQUFTLHVCQUF1QjtBQUFBLFlBQ2hDLFFBQVEsQ0FBQyxNQUFNO0FBQ2Isa0JBQUksdUJBQXVCLEdBQUc7QUFDNUIsc0JBQU0sU0FBUyx1QkFBdUIsTUFBTSxpQkFBaUIseUJBQXlCO0FBQ3RGLG9CQUFJLE1BQU0sRUFBRSxFQUFFLElBQUk7QUFBQSxjQUNwQixXQUFXLG9CQUFvQixHQUFHO0FBQ2hDLG9CQUFJLGNBQWMsRUFBRSxJQUFJO0FBQ3hCLHNCQUFNLFVBQVUsRUFBRSxJQUFJLEVBQUU7QUFBQSxjQUMxQixXQUFXLDJCQUEyQixHQUFHO0FBQ3ZDLGdCQUFBQSxNQUFLLG9CQUFvQixFQUFFO0FBQzNCLG9CQUFJLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxLQUFLLENBQUM7QUFDN0MsNEJBQVksRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxNQUFNO0FBQUEsZ0JBQUMsQ0FBQztBQUNoRSxzQkFBTSxpQkFBaUIsRUFBRSxJQUFJLEVBQUU7QUFBQSxjQUNqQyxPQUFPO0FBQ0wsZ0JBQUFBLE1BQUssZ0JBQWdCLEVBQUU7QUFDdkIsb0JBQUksWUFBWSxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUM7QUFDekMsNEJBQVksRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLE1BQU07QUFBQSxnQkFBQyxDQUFDO0FBQ2xFLHNCQUFNLHFCQUFxQixFQUFFLElBQUksRUFBRTtBQUFBLGNBQ3JDO0FBQ0Esd0NBQTBCLElBQUk7QUFDOUIscUNBQXVCLEtBQUs7QUFDNUIsNENBQThCLEtBQUs7QUFDbkMsd0NBQTBCLEtBQUs7QUFDL0Isb0JBQU1pQixXQUFVLGdCQUFnQjtBQUNoQyxvQkFBTSxrQkFBa0Isb0JBQW9CO0FBQzVDLG9CQUFNLFdBQVcsb0JBQW9CO0FBQ3JDLGlDQUFtQixJQUFJO0FBQ3ZCLHFDQUF1QixJQUFJO0FBQzNCLHFDQUF1QixJQUFJO0FBQzNCLGtCQUFJQSxTQUFTLFlBQVcsRUFBRSxNQUFNLFdBQVcsR0FBR0EsU0FBUSxJQUFJO0FBQUEsdUJBQ2pELGdCQUFpQixZQUFXLEVBQUUsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLFFBQVE7QUFBQSx1QkFDNUUsYUFBYSxTQUFVLG9CQUFtQixJQUFJO0FBQUEsWUFDekQ7QUFBQSxZQUNBLGVBQWUsTUFBTTtBQUFBLFlBQUM7QUFBQSxZQUN0QixTQUFTLE1BQU07QUFDYix3Q0FBMEIsS0FBSztBQUMvQix3Q0FBMEIsSUFBSTtBQUM5QixxQ0FBdUIsS0FBSztBQUM1Qiw0Q0FBOEIsS0FBSztBQUNuQyxpQ0FBbUIsSUFBSTtBQUN2QixxQ0FBdUIsSUFBSTtBQUMzQixrQkFBSSxvQkFBb0IsTUFBTSxTQUFVLG9CQUFtQixJQUFJO0FBQy9ELHFDQUF1QixJQUFJO0FBQUEsWUFDN0I7QUFBQTtBQUFBLFFBQ0Y7QUFBQSxRQUdELGVBQWUsS0FDZCxnQkFBQXhCO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxRQUFRO0FBQUEsWUFDUixTQUFTLE1BQU07QUFBQSxZQUNmLGNBQWMsY0FBYyxFQUFFLE1BQU0sRUFBRSxJQUFJLEtBQUs7QUFBQSxZQUMvQyxTQUFTLGVBQWU7QUFBQSxZQUN4QixRQUFRLENBQUMsTUFBTTtBQUNiLGtCQUFJLFdBQVcsRUFBRSxHQUFHO0FBQ3BCLGdDQUFrQixLQUFLO0FBQUEsWUFDekI7QUFBQSxZQUNBLGVBQWUsQ0FBQyxNQUFNO0FBQ3BCLGtCQUFJLFdBQVcsRUFBRSxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDekMsZ0NBQWtCLEtBQUs7QUFBQSxZQUN6QjtBQUFBLFlBQ0EsU0FBUyxNQUFNLGtCQUFrQixLQUFLO0FBQUE7QUFBQSxRQUN4QztBQUFBLFFBR0QsZ0JBQWdCLEtBQ2YsZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxRQUFRO0FBQUEsWUFDUixTQUFTLE9BQU8sS0FBSztBQUFBLFlBQ3JCLGNBQWMsY0FBYyxLQUFLO0FBQUEsWUFDakMsU0FBUyxnQkFBZ0I7QUFBQSxZQUN6QixRQUFRLENBQUMsTUFBTTtBQUNiLCtCQUFpQixFQUFFLEdBQUc7QUFDdEIsaUNBQW1CLEtBQUs7QUFBQSxZQUMxQjtBQUFBLFlBQ0EsZUFBZSxDQUFDLE1BQU07QUFDcEIsK0JBQWlCLEVBQUUsS0FBSyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQzNDLGlDQUFtQixLQUFLO0FBQUEsWUFDMUI7QUFBQSxZQUNBLFNBQVMsTUFBTSxtQkFBbUIsS0FBSztBQUFBO0FBQUEsUUFDekM7QUFBQSxRQUdELGVBQWUsS0FDZCxnQkFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNDLFFBQVEsV0FBVztBQUFBLFlBQ25CLE1BQU0sVUFBVTtBQUFBLFlBQ2hCLFNBQVMsZUFBZTtBQUFBLFlBQ3hCLFFBQVEsQ0FBQyxNQUFNO0FBQ2IsZ0NBQWtCLEtBQUs7QUFDdkIsNkJBQWUsRUFBRSxHQUFHO0FBQUEsWUFDdEI7QUFBQSxZQUNBLFdBQVcsQ0FBQyxNQUFNLGVBQWUsRUFBRSxHQUFHO0FBQUEsWUFDdEMsU0FBUyxNQUFNO0FBQ2IsZ0NBQWtCLEtBQUs7QUFDdkIsNkJBQWUsVUFBVSxDQUFDO0FBQUEsWUFDNUI7QUFBQTtBQUFBLFFBQ0Y7QUFBQSxRQUdELGtCQUFrQixLQUNqQixnQkFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNDLE9BQU07QUFBQSxZQUNOLFNBQVE7QUFBQSxZQUNSLGNBQWE7QUFBQSxZQUNiLFNBQVMsa0JBQWtCO0FBQUEsWUFDM0IsV0FBVztBQUFBLFlBQ1gsU0FBUyxNQUFNLHFCQUFxQixLQUFLO0FBQUE7QUFBQSxRQUMzQztBQUFBLFFBR0QsaUJBQWlCLEtBQ2hCLGdCQUFBQTtBQUFBLFVBQUM7QUFBQTtBQUFBLFlBQ0MsU0FBUyxZQUFZO0FBQUEsWUFDckIsUUFBUTtBQUFBLFlBQ1IsWUFBWSxVQUFVO0FBQUEsWUFDdEIsU0FBUyxpQkFBaUI7QUFBQSxZQUMxQixRQUFRLENBQUMsU0FBUztBQUFFLHVCQUFTLElBQUk7QUFBRyxrQ0FBb0IsS0FBSztBQUFBLFlBQUU7QUFBQSxZQUMvRCxTQUFTLE1BQU0sb0JBQW9CLEtBQUs7QUFBQTtBQUFBLFFBQzFDO0FBQUEsUUFHRCxVQUFVLEtBQ1QsZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxPQUFPLFVBQVUsRUFBRTtBQUFBLFlBQ25CLE1BQU0sVUFBVSxFQUFFO0FBQUEsWUFDbEIsVUFBVSxVQUFVLEVBQUU7QUFBQSxZQUN0QixTQUFTLFVBQVUsTUFBTTtBQUFBLFlBQ3pCLFNBQVMsTUFBTSxhQUFhLElBQUk7QUFBQTtBQUFBLFFBQ2xDO0FBQUEsUUFHRCxpQkFBaUIsS0FDaEIsZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxXQUFXLGNBQWM7QUFBQSxZQUN6QixTQUFTLGlCQUFpQjtBQUFBLFlBQzFCLFdBQVc7QUFBQSxZQUNYLGNBQWM7QUFBQSxZQUNkLFNBQVMsTUFBTSxvQkFBb0IsS0FBSztBQUFBO0FBQUEsUUFDMUM7QUFBQSxRQUdELGlCQUFpQixLQUNoQixnQkFBQUE7QUFBQSxVQUFDO0FBQUE7QUFBQSxZQUNDLFVBQVUsY0FBYyxHQUFHTyxNQUFLLFFBQVEsS0FBSztBQUFBLFlBQzdDLFNBQVMsaUJBQWlCO0FBQUEsWUFDMUIsVUFBVSxDQUFDLE1BQU07QUFDZixvQkFBTSxRQUFRLEtBQUs7QUFDbkIsa0JBQUksQ0FBQyxTQUFTLE1BQU0sT0FBTyxFQUFFLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLEtBQU07QUFDL0QscUJBQUssa0JBQWtCLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUNsRCx1QkFBTyxNQUFNLDJCQUEyQixFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRztBQUFBLGNBQ3hGO0FBQ0EsbUJBQUssa0JBQWtCO0FBQ3ZCLGtCQUFJLGFBQWEsQ0FBQztBQUFBLFlBQ3BCO0FBQUEsWUFDQSxTQUFTLE1BQU0sb0JBQW9CLEtBQUs7QUFBQTtBQUFBLFFBQzFDO0FBQUEsUUFHRCxXQUFXLE1BQU0sVUFDaEIsZ0JBQUFQO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxTQUFTLENBQUMsR0FBRyxjQUFjLENBQUMsRUFBRSxRQUFRO0FBQUEsWUFDdEMsT0FBTyxDQUFDLFVBQVUsWUFBWSxRQUFRLEdBQUcsS0FBSztBQUFBLFlBQzlDLFNBQVMsV0FBVyxNQUFNO0FBQUEsWUFDMUIsUUFBUSxDQUFDLFVBQVU7QUFBRSw4QkFBZ0IsS0FBSztBQUFHLDRCQUFjLFFBQVE7QUFBQSxZQUFFO0FBQUEsWUFDckUsU0FBUyxNQUFNLGNBQWMsSUFBSTtBQUFBO0FBQUEsUUFDbkM7QUFBQSxRQUdELFdBQVcsTUFBTSxZQUFZLGFBQWEsS0FDekMsZ0JBQUFBO0FBQUEsVUFBQztBQUFBO0FBQUEsWUFDQyxRQUFRLGFBQWE7QUFBQSxZQUNyQixTQUFTO0FBQUEsWUFDVCxTQUFTLFdBQVcsTUFBTTtBQUFBLFlBQzFCLFVBQVU7QUFBQSxZQUNWLFFBQVEsTUFBTSxjQUFjLE1BQU07QUFBQTtBQUFBLFFBQ3BDO0FBQUEsUUFHRCxvQkFDQyxnQkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFdBQVcsRUFBRSxHQUMvRCwwQkFBQUMsTUFBQyxpQkFBYyxVQUFVLENBQUMsZUFBZSxDQUFDLGFBQWEsU0FBUyxHQUFHLFFBQVEsTUFBTSxpQkFBaUIsU0FBUyxNQUFNO0FBQUUsYUFBRyxNQUFNLGVBQWU7QUFBRywyQkFBaUIsSUFBSTtBQUFHLDJCQUFpQixJQUFJO0FBQUcsb0JBQVUsSUFBSTtBQUFHLHdCQUFjLGNBQWM7QUFBQSxRQUFFLEdBQzNPO0FBQUEsMEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLFFBQVEsTUFBTSxrQkFBa0IsVUFBVSxPQUFPLEVBQUUsR0FBSSxxQkFBSztBQUFBLFVBQ3JGLGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sR0FBRyxRQUFRLE1BQU0sa0JBQWtCLFVBQVUsQ0FBQyxlQUFlLENBQUMsY0FBYyxLQUFLLE1BQU0sR0FBSSxrQkFBTztBQUFBLFdBQzFILEdBQ0Y7QUFBQSxRQUdELGNBQWMsU0FBUyxLQUN0QixnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFdBQVcsb0JBQW9CLHNCQUFzQixJQUFJLEVBQUUsR0FDN0c7QUFBQSwwQkFBQUQsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sZ0JBQWdCLFdBQVcsR0FDN0QsMEJBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksYUFBRyxrQkFBa0IsR0FBRyxlQUFlLE9BQU8sRUFBRSxZQUFXLEdBQzdGO0FBQUEsVUFDQyxDQUFDLG9CQUNBLGdCQUFBQyxNQUFDLGlCQUFjLFVBQVUsQ0FBQyxhQUFhLFNBQVMsR0FBRyxRQUFRLE1BQU0sY0FBYyxTQUFTLE1BQU07QUFBRSxlQUFHLE1BQU0sWUFBWTtBQUFHLDZCQUFpQixJQUFJO0FBQUcsNkJBQWlCLElBQUk7QUFBRyxzQkFBVSxJQUFJO0FBQUEsVUFBRSxHQUN0TDtBQUFBLDRCQUFBRCxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sR0FBRyxRQUFRLE1BQU0sZUFBZSxVQUFVLE9BQU8sRUFBRSxHQUFJLHFCQUFLO0FBQUEsWUFDbEYsZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxHQUFHLFFBQVEsTUFBTSxlQUFlLFVBQVUsQ0FBQyxjQUFjLEtBQUssTUFBTSxHQUFJLGtCQUFPO0FBQUEsYUFDdkc7QUFBQSxVQUVELFlBQVksSUFBSSxDQUFDLE1BQU07QUFDdEIsa0JBQU0sVUFBVSxHQUFHLFFBQVEsTUFBTSxTQUFTLEVBQUUsRUFBRTtBQUM5QyxrQkFBTSxXQUFXLGNBQWMsTUFBTSxFQUFFO0FBQ3ZDLGtCQUFNYSxXQUFVLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVyxTQUFTLEVBQUUsUUFBUSxDQUFDO0FBQzNFLG1CQUNFLGdCQUFBWixNQUFDLGlCQUFvQyxVQUFvQixTQUFrQixTQUFTLE1BQU07QUFBRSxpQkFBRyxNQUFNLFNBQVMsRUFBRSxFQUFFLEVBQUU7QUFBRywrQkFBaUIsRUFBRSxFQUFFO0FBQUcsK0JBQWlCLElBQUk7QUFBRyx3QkFBVSxJQUFJO0FBQUEsWUFBRSxHQUNwTDtBQUFBLGdCQUFFLFdBQVcsWUFBWSxnQkFBQUQsTUFBQ3lCLFVBQUEsRUFBUSxPQUFPLFVBQVUsVUFBVSxPQUFPLEdBQUcsU0FBUSxRQUFPLElBQUssZ0JBQUF6QixNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sVUFBVSxVQUFVLEVBQUUsYUFBYSxJQUFJLFFBQVEsSUFBSSxHQUFJLFlBQUUsYUFBYSxJQUFJLFdBQU0sUUFBSTtBQUFBLGNBQ3RNLGdCQUFBQSxNQUFDLFVBQU0sZUFBSTtBQUFBLGNBQ1gsZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxVQUFVLFVBQVUsV0FBVyxLQUFLLE1BQU0sR0FBSSxvQkFBVSxFQUFFLEVBQUUsT0FBTTtBQUFBLGNBQ3hGLGdCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsR0FDbkMsMEJBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsVUFBVSxZQUFZLE9BQU8sVUFBVSxVQUFVLE1BQU0sR0FBSSxZQUFFLGVBQWUsRUFBRSxRQUFRLFFBQVEsT0FBTyxHQUFHLEdBQUUsR0FDM0g7QUFBQSxjQUNBLGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sVUFBVSxVQUFVLE1BQU0sR0FBSSxlQUFLLEVBQUUsV0FBVyxZQUFZLEtBQUssUUFBUSxFQUFFLFFBQVEsSUFBSSxHQUFHYSxRQUFPLElBQUc7QUFBQSxpQkFQeEcsU0FBUyxFQUFFLEVBQUUsRUFRakM7QUFBQSxVQUVKLENBQUM7QUFBQSxVQUNBLGNBQWMsU0FBUyxrQkFDdEIsZ0JBQUFiLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksZUFBSyxtQkFBbUIsSUFBSSxVQUFLLGdCQUFnQixLQUFLLEVBQUUsR0FBRyxtQkFBbUIsS0FBSyxtQkFBbUIsWUFBWSxTQUFTLGNBQWMsU0FBUyxPQUFPLEVBQUUsR0FBRyxtQkFBbUIsWUFBWSxTQUFTLGNBQWMsU0FBUyxVQUFLLGNBQWMsU0FBUyxtQkFBbUIsWUFBWSxNQUFNLEtBQUssRUFBRSxTQUFRO0FBQUEsV0FFalY7QUFBQSxRQUdELGNBQWMsU0FBUyxLQUN0QixnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsVUFBVSxHQUFHLFdBQVcsb0JBQW9CLHNCQUFzQixJQUFJLEVBQUUsR0FDN0c7QUFBQSwwQkFBQUQsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sZ0JBQWdCLFdBQVcsR0FDN0QsMEJBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksYUFBRyxrQkFBa0IsR0FBRyxlQUFlLE9BQU8sRUFBRSxZQUFXLEdBQzdGO0FBQUEsVUFDQyxDQUFDLG9CQUNBLGdCQUFBQyxNQUFDLGlCQUFjLFVBQVUsQ0FBQyxhQUFhLFNBQVMsR0FBRyxRQUFRLE1BQU0sY0FBYyxTQUFTLE1BQU07QUFBRSxlQUFHLE1BQU0sWUFBWTtBQUFHLDZCQUFpQixJQUFJO0FBQUcsNkJBQWlCLElBQUk7QUFBRyxzQkFBVSxJQUFJO0FBQUcsMEJBQWMsY0FBYztBQUFBLFVBQUUsR0FDck47QUFBQSw0QkFBQUQsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLEdBQUcsUUFBUSxNQUFNLGVBQWUsVUFBVSxPQUFPLEVBQUUsR0FBSSxxQkFBSztBQUFBLFlBQ2xGLGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sR0FBRyxRQUFRLE1BQU0sZUFBZSxVQUFVLENBQUMsY0FBYyxLQUFLLE1BQU0sR0FBSSxrQkFBTztBQUFBLGFBQ3ZHO0FBQUEsVUFFRCxZQUFZLElBQUksQ0FBQyxNQUFNO0FBQ3RCLGtCQUFNLFNBQVMsWUFBWSxDQUFDO0FBQzVCLGtCQUFNLFVBQVUsR0FBRyxRQUFRLE1BQU0sU0FBUyxFQUFFLEVBQUU7QUFDOUMsbUJBQ0UsZ0JBQUFDLE1BQUMsaUJBQW9DLFVBQVUsY0FBYyxNQUFNLEVBQUUsSUFBSSxTQUFrQixTQUFTLE1BQU07QUFBRSxpQkFBRyxNQUFNLFNBQVMsRUFBRSxFQUFFLEVBQUU7QUFBRywrQkFBaUIsSUFBSTtBQUFHLCtCQUFpQixFQUFFLEVBQUU7QUFBRyx3QkFBVSxJQUFJO0FBQUcsNEJBQWMsY0FBYztBQUFBLFlBQUUsR0FDbk87QUFBQSxnQkFBRSxXQUFXLFlBQVksZ0JBQUFELE1BQUN5QixVQUFBLEVBQVEsT0FBTyxVQUFVLFVBQVUsT0FBTyxHQUFHLFNBQVEsUUFBTyxJQUFLLGdCQUFBekIsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFVBQVUsVUFBVSxPQUFPLE1BQU0sR0FBSSxpQkFBTyxNQUFLO0FBQUEsY0FDbkssZ0JBQUFBLE1BQUMsVUFBTSxlQUFJO0FBQUEsY0FDWCxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFVBQVUsVUFBVSxjQUFjLE1BQU0sRUFBRSxLQUFLLEtBQUssTUFBTSxHQUFJLGFBQUcsRUFBRSxRQUFRLE9BQU8sS0FBSyxFQUFFLEVBQUUsT0FBTTtBQUFBLGNBQ3ZILGdCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsR0FDbkMsMEJBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsVUFBVSxZQUFZLE9BQU8sVUFBVSxVQUFVLE1BQU0sR0FBSSxZQUFFLGFBQVksR0FDMUY7QUFBQSxjQUNDLE9BQU8sU0FBUyxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFVBQVUsVUFBVSxPQUFPLE1BQU0sR0FBSSxlQUFLLE9BQU8sS0FBSyxJQUFHO0FBQUEsY0FDaEcsZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxVQUFVLFVBQVUsTUFBTSxHQUFJLGFBQUcsT0FBTyxRQUFRLE9BQU8sSUFBSSxJQUFJLGFBQWEsQ0FBQyxDQUFDLGFBQU87QUFBQSxjQUMzRyxnQkFBQUEsTUFBQyxpQkFBYyxPQUFPLEVBQUUsT0FBTyxlQUFlLEVBQUUsT0FBTyxnQkFBZ0IsR0FBRyxPQUFPLFVBQVUsVUFBVSxPQUFPLFdBQVcsVUFBVSxVQUFVLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHMEIsZUFBYyxDQUFDLENBQUMsV0FBVztBQUFBLGlCQVRoTCxTQUFTLEVBQUUsRUFBRSxFQVVqQztBQUFBLFVBRUosQ0FBQztBQUFBLFVBQ0EsY0FBYyxTQUFTLGtCQUN0QixnQkFBQTFCLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksZUFBSyxtQkFBbUIsSUFBSSxVQUFLLGdCQUFnQixLQUFLLEVBQUUsR0FBRyxtQkFBbUIsS0FBSyxtQkFBbUIsWUFBWSxTQUFTLGNBQWMsU0FBUyxPQUFPLEVBQUUsR0FBRyxtQkFBbUIsWUFBWSxTQUFTLGNBQWMsU0FBUyxVQUFLLGNBQWMsU0FBUyxtQkFBbUIsWUFBWSxNQUFNLEtBQUssRUFBRSxTQUFRO0FBQUEsV0FFalY7QUFBQSxRQUdELGNBQWMsZ0JBQUFBLE1BQUMsU0FBSSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUc7QUFBQSxRQUUzQyxhQUNDLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxVQUFVLEdBQUcsWUFBWSxFQUFFLEdBQy9EO0FBQUEsZUFBSyxLQUNKLGdCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsVUFBVSxjQUFjLEVBQUUsR0FDckQ7QUFBQSw0QkFBQUEsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSw4QkFBQUQsTUFBQyxXQUFRLE9BQU8sT0FBTyxHQUFHLFdBQVcsV0FBVyxVQUFVLE1BQU0sU0FBTyxNQUNwRSxxQkFBVyxJQUNSLGNBQWMsR0FBRyxVQUFVLFlBQVksdUJBQXVCLGNBQWMsRUFBRSxPQUFPLE9BQU8sMEJBQzVGLFVBQVUsTUFBTSxhQUFhLGFBQWEsVUFBVSxNQUFNLFVBQVUsWUFBWSxjQUN0RjtBQUFBLGNBQ0EsZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksZUFBSyxPQUFPLHNCQUFxQjtBQUFBLGVBQ25FO0FBQUEsWUFDQyxjQUFjLEdBQUcsVUFBVSxhQUFhLGdCQUFBQSxNQUFDLGVBQVksU0FBUSxRQUFPLE9BQU8sY0FBYyxFQUFFLFVBQVUsR0FBRyxPQUFPLElBQUksWUFBWSxPQUFPLE9BQU8sT0FBTyxHQUFHO0FBQUEsYUFDMUo7QUFBQSxVQUVELFNBQVMsVUFDUixnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLFVBQVUsY0FBYyxFQUFFLEdBQ3JEO0FBQUEsNEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE1BQU0sS0FBSyxHQUFJLHdCQUFhO0FBQUEsWUFDM0QsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQ2pDO0FBQUEsOEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksc0JBQVc7QUFBQSxjQUMzQyxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFNBQVMsVUFBVSxXQUFXLEdBQUksa0JBQVEsUUFBTztBQUFBLGVBQ3pFO0FBQUEsWUFDQSxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FDakM7QUFBQSw4QkFBQUQsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxzQkFBVztBQUFBLGNBQzFDLFFBQVEsUUFBUSxLQUFLLGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGFBQUcsUUFBUSxLQUFLLFVBQVM7QUFBQSxjQUM5RSxRQUFRLFFBQVEsS0FBSyxRQUFRLFVBQVUsS0FBSyxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxnQkFBSztBQUFBLGNBQ2pGLFFBQVEsVUFBVSxLQUFLLGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sSUFBSSxHQUFJLGFBQUcsUUFBUSxPQUFPLFlBQVc7QUFBQSxjQUNsRixRQUFRLFVBQVUsS0FBSyxRQUFRLFlBQVksS0FBSyxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxtQkFBUTtBQUFBLGVBQzNGO0FBQUEsYUFDRjtBQUFBLFVBRUYsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxTQUFTLEdBQ3BDO0FBQUEsNEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxTQUFTLE1BQU0sS0FBSyxHQUFJLHFCQUFVO0FBQUEsWUFDeEQsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQUc7QUFBQSw4QkFBQUQsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSw2QkFBa0I7QUFBQSxjQUFPLGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sU0FBUyxVQUFVLFdBQVcsR0FBSSxVQUFBTyxNQUFLLFlBQVc7QUFBQSxlQUFPO0FBQUEsWUFDOUssZ0JBQUFOLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxNQUFNLEdBQUc7QUFBQSw4QkFBQUQsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSw2QkFBa0I7QUFBQSxjQUFPLGdCQUFBQSxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sT0FBTyxFQUFFLEdBQUksZ0JBQU0sRUFBRSxNQUFLO0FBQUEsY0FBUSxhQUFhLEtBQUssTUFBTSxNQUFNLFVBQVUsZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxPQUFPLEVBQUUsR0FBSSxtQkFBUTtBQUFBLGVBQVE7QUFBQSxZQUNqUCxjQUFjLEtBQUssT0FBTyxLQUFLLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUFHO0FBQUEsOEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksNkJBQWtCO0FBQUEsY0FBTyxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFFBQVEsR0FBSSxpQkFBTyxHQUFFO0FBQUEsZUFBTztBQUFBLFlBQ2pMLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUFHO0FBQUEsOEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksNkJBQWtCO0FBQUEsY0FBTyxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFFBQVEsR0FBSSxlQUFLLE1BQU0sTUFBTSxZQUFZLEVBQUUsZUFBZSxHQUFFO0FBQUEsZUFBTztBQUFBLFlBQ3hMLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUFHO0FBQUEsOEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksNkJBQWtCO0FBQUEsY0FBTyxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLFFBQVEsR0FBSSxlQUFLLE1BQU0sTUFBTSxnQkFBZ0IsRUFBRSxlQUFlLEdBQUU7QUFBQSxlQUFPO0FBQUEsWUFDM0wsTUFBTSxnQkFBZ0IsS0FBSyxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FBRztBQUFBLDhCQUFBRCxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLDZCQUFrQjtBQUFBLGNBQU8sZ0JBQUFBLE1BQUMsaUJBQWMsT0FBTyxNQUFNLGVBQWUsT0FBTyxTQUFTLFdBQVcsT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLEVBQUUsZUFBZSxHQUFHO0FBQUEsZUFBRTtBQUFBLFlBQzNQLGlCQUFpQixLQUFLLGdCQUFBQyxNQUFDLFNBQUksT0FBTyxFQUFFLGVBQWUsTUFBTSxHQUFHO0FBQUEsOEJBQUFELE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksNkJBQWtCO0FBQUEsY0FBTyxnQkFBQUEsTUFBQyxpQkFBYyxPQUFPLGdCQUFnQixPQUFPLGtCQUFrQixLQUFLLE1BQU0sU0FBUyxXQUFXLE9BQU8sR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUMsS0FBSztBQUFBLGVBQUU7QUFBQSxZQUNuUSxpQkFBaUIsS0FBSyxnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE1BQU0sR0FBRztBQUFBLDhCQUFBRCxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLDZCQUFrQjtBQUFBLGNBQU8sZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxRQUFRLEdBQUksMEJBQWU7QUFBQSxlQUFPO0FBQUEsYUFDaEw7QUFBQSxXQUNGLElBRUEsZ0JBQUFDLE1BQUMsU0FBSSxPQUFPLEVBQUUsZUFBZSxTQUFTLEdBQ3BDO0FBQUEsMEJBQUFELE1BQUMsU0FBSSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFBQSxVQUMzQixnQkFBQUMsTUFBQyxTQUFJLE9BQU8sRUFBRSxlQUFlLE9BQU8sVUFBVSxHQUFHLEtBQUssRUFBRSxHQUN0RDtBQUFBLDRCQUFBRCxNQUFDLFVBQUssT0FBTyxFQUFFLE9BQU8sTUFBTSxHQUFJLGdCQUFNLEVBQUUsTUFBSztBQUFBLFlBQzVDLGFBQWEsS0FBSyxNQUFNLE1BQU0sVUFBVSxnQkFBQUEsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBRyxrQkFBSTtBQUFBLFlBQzNFLGNBQWMsS0FBSyxPQUFPLEtBQUssZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksaUJBQU8sR0FBRTtBQUFBLFlBQ3pFLGdCQUFBQSxNQUFDLFNBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHO0FBQUEsWUFDNUIsaUJBQWlCLEtBQUssZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksb0JBQUssY0FBYyxJQUFHO0FBQUEsWUFDN0UsZ0JBQUFBLE1BQUMsVUFBSyxPQUFPLEVBQUUsT0FBTyxNQUFNLEdBQUksYUFBRzBCLGVBQWMsTUFBTSxZQUFZLENBQUMsV0FBSztBQUFBLFlBQ3pFLGdCQUFBMUIsTUFBQyxVQUFLLE9BQU8sRUFBRSxPQUFPLE1BQU0sR0FBSSxhQUFHMEIsZUFBYyxNQUFNLGdCQUFnQixDQUFDLFdBQUs7QUFBQSxZQUM1RSxNQUFNLGdCQUFnQixLQUFLLGdCQUFBMUIsTUFBQyxpQkFBYyxPQUFPLE1BQU0sZUFBZSxPQUFPLE9BQU8sV0FBVyxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRzBCLGVBQWMsQ0FBQyxDQUFDLFdBQU07QUFBQSxZQUNqSixpQkFBaUIsS0FBSyxnQkFBQTFCLE1BQUMsaUJBQWMsT0FBTyxnQkFBZ0IsT0FBTyxrQkFBa0IsS0FBSyxNQUFNLE9BQU8sV0FBVyxPQUFPLEdBQUcsWUFBWSxVQUFVLFFBQVEsWUFBWTtBQUFBLGFBQ3pLO0FBQUEsV0FDRjtBQUFBLFNBRUY7QUFBQSxNQUNDLENBQUMsY0FBYyxLQUFLLGdCQUFBQSxNQUFDLGlCQUFjLE9BQU8sS0FBSyxnQkFBZ0I7QUFBQSxPQUNoRTtBQUFBLEtBQ0Y7QUFFSjs7O0FSeDVFd0IsZ0JBQUEyQixhQUFBO0FBdkZ4QixJQUFNLE1BQU0sS0FBSyxNQUFNLGFBQWEsSUFBSSxJQUFJLG1CQUFtQixZQUFZLEdBQUcsR0FBRyxPQUFPLENBQUM7QUFFekYsSUFBSTtBQUNKLElBQUk7QUFDRixRQUFNLFVBQVUsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLFNBQVMsS0FBSztBQUNaLFVBQVEsTUFBTSxTQUFTLElBQUksT0FBTyxFQUFFO0FBQ3BDLFVBQVEsTUFBTSxLQUFLO0FBQ25CLFVBQVEsS0FBSyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLFNBQVMsUUFBUTtBQUN2QixVQUFRLElBQUksS0FBSztBQUNqQixVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUNBLElBQUksSUFBSSxTQUFTLFdBQVc7QUFDMUIsVUFBUSxJQUFJLElBQUksT0FBTztBQUN2QixVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUNBLElBQUksSUFBSSxTQUFTLFVBQVU7QUFDekIsUUFBTSxFQUFFLGNBQUFDLGVBQWMsV0FBQUMsWUFBVyxvQkFBQUMscUJBQW9CLGNBQUFDLGNBQWEsSUFBSSxNQUFNLE9BQU8seUJBQXlCO0FBQzVHLE1BQUlILGNBQWEsWUFBWSxHQUFHLEdBQUc7QUFDakMsWUFBUSxNQUFNLG9FQUFvRTtBQUNsRixZQUFRLEtBQUssQ0FBQztBQUFBLEVBQ2hCO0FBQ0EsUUFBTSxTQUFTLE1BQU1FLG9CQUFtQixFQUFFLE1BQU0sTUFBTSxJQUFJO0FBQzFELE1BQUksVUFBVSxDQUFDQyxjQUFhLElBQUksU0FBUyxNQUFNLEdBQUc7QUFDaEQsWUFBUSxJQUFJLFNBQVMsSUFBSSxPQUFPLHdCQUF3QjtBQUN4RCxZQUFRLEtBQUssQ0FBQztBQUFBLEVBQ2hCO0FBQ0EsVUFBUSxNQUFNLHFCQUFxQixTQUFTLE9BQU8sTUFBTSxNQUFNLEVBQUUsWUFBWTtBQUM3RSxRQUFNLFNBQVMsTUFBTUYsV0FBVTtBQUMvQixNQUFJLE9BQU8sSUFBSTtBQUNiLFlBQVEsSUFBSSxVQUFVLFNBQVMsUUFBUSxNQUFNLEtBQUssRUFBRSxFQUFFO0FBQ3RELFlBQVEsS0FBSyxDQUFDO0FBQUEsRUFDaEI7QUFDQSxVQUFRLE1BQU07QUFBQSxFQUFtQixPQUFPLE1BQU0sRUFBRTtBQUNoRCxVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUNBLElBQUksSUFBSSxTQUFTLFdBQVc7QUFDMUIsUUFBTSxFQUFFLGNBQWMsSUFBSSxNQUFNLE9BQU8sOEJBQThCO0FBQ3JFLE1BQUk7QUFDRixZQUFRLE1BQU0sNkNBQTZDO0FBQzNELFVBQU0sRUFBRSxNQUFNLElBQUksTUFBTSxjQUFjLEVBQUUsT0FBTyxDQUFDLFFBQVEsUUFBUSxNQUFNO0FBQUEsRUFBd0MsR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN0SCxZQUFRLElBQUksZ0JBQWdCLFNBQVMsc0JBQXNCLEVBQUU7QUFDN0QsWUFBUSxLQUFLLENBQUM7QUFBQSxFQUNoQixTQUFTLEtBQUs7QUFDWixZQUFRLE1BQU0sbUJBQW1CLElBQUksT0FBTyxFQUFFO0FBQzlDLFlBQVEsS0FBSyxDQUFDO0FBQUEsRUFDaEI7QUFDRjtBQUNBLElBQUksSUFBSSxTQUFTLFlBQVk7QUFDM0IsUUFBTSxFQUFFLGFBQUFHLGFBQVksSUFBSSxNQUFNO0FBQzlCLFVBQVEsS0FBSyxNQUFNQSxhQUFZLEdBQUcsQ0FBQztBQUNyQztBQUNBLElBQUksSUFBSSxTQUFTLFNBQVM7QUFDeEIsUUFBTSxFQUFFLFVBQUFDLFVBQVMsSUFBSSxNQUFNO0FBQzNCLFVBQVEsS0FBSyxNQUFNQSxVQUFTLEdBQUcsQ0FBQztBQUNsQztBQUVBLElBQU0sRUFBRSxVQUFVLElBQUksTUFBTSxpQkFBaUI7QUFFN0MsSUFBSSxVQUFVLFdBQVcsR0FBRztBQUMxQixVQUFRLE1BQU0sNkJBQTZCO0FBQzNDLFVBQVEsTUFBTSxnR0FBZ0c7QUFDOUcsVUFBUSxNQUFNLGdEQUFnRDtBQUM5RCxVQUFRLEtBQUssQ0FBQztBQUNoQjtBQUVBLElBQU0sU0FBUyxNQUFNQyxZQUFXO0FBRWhDLElBQU0sZ0JBQWdCLE1BQU0sb0JBQW9CO0FBQ2hELElBQU0sZ0JBQWdCLFlBQVksRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsT0FBTyxLQUFLLElBQUksT0FBTyxRQUFRO0FBQ3pGLFdBQVcsaUJBQWlCLGFBQWE7QUFDekMsSUFBTSxRQUFRLEVBQUUsUUFBUSxnQkFBZ0IsT0FBTyxNQUFNO0FBRXJELElBQU0sYUFBYSxNQUFNLGFBQWEsRUFBRSxPQUFPQyxlQUFjLElBQUksSUFBSSxlQUFlLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUN2RyxJQUFNLGFBQWEsTUFBTSx1QkFBdUIsWUFBWTtBQUFBLEVBQzFELFNBQVMsRUFBRSxLQUFLLFFBQVEsSUFBSSxHQUFHLFNBQVMsSUFBSSxTQUFTLE9BQU8sZUFBZSxXQUFXLGlCQUFpQixPQUFPO0FBQUEsRUFDOUcsV0FBVyxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQ3hCLENBQUM7QUFDRCxJQUFNLE9BQU8sV0FBVztBQUN4QixJQUFJLElBQUksTUFBTyxPQUFNLFdBQVcsYUFBYSxJQUFJLEtBQUs7QUFDdEQsV0FBVyxVQUFVLENBQUMsVUFBVSxXQUFXLFFBQVEsRUFBRyxTQUFRLEdBQUcsUUFBUSxNQUFNO0FBQzdFLGFBQVcsTUFBTTtBQUNqQixVQUFRLEtBQUssQ0FBQztBQUNoQixDQUFDO0FBQ0QsUUFBUSxHQUFHLFFBQVEsTUFBTSxXQUFXLE1BQU0sQ0FBQztBQUMzQyxJQUFNLE1BQU0sTUFBTSxNQUFNLGdCQUFBUixNQUFDLE9BQUksTUFBWSxZQUF3QixHQUFJLEVBQUUsT0FBTyxTQUFTLEtBQUssS0FBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDNUgsS0FBSyxXQUFXLElBQUk7IiwKICAibmFtZXMiOiBbInByb3ZpZGVycyIsICJqb2luIiwgIm1ha2VFdmVudCIsICJwcm92aWRlcnMiLCAiY29uZmlnIiwgImJvb3QiLCAicnVuVHVybiIsICJyZWFkQ29uZmlnIiwgImNvbmZpZyIsICJmaWxlVVJMVG9QYXRoIiwgInJlYWRDb25maWciLCAiU2Nyb2xsQm94IiwgInVzZUZvY3VzIiwgInVzZUxheW91dCIsICJ1c2VJbnRlcnZhbCIsICJjcmVhdGVTaWduYWwiLCAiaG9tZWRpciIsICJjcmVhdGVTaWduYWwiLCAiZWFzZSIsICJ1c2VBbmltYXRlZCIsICJoaWdobGlnaHQiLCAid2lkdGgiLCAiZnV6enlTY29yZSIsICJqc3giLCAiY3JlYXRlU2lnbmFsIiwgInVzZUFuaW1hdGVkIiwgImVhc2UiLCAid2lkdGgiLCAidXNlZCIsICJwcm92aWRlcnMiLCAibmFtZSIsICJqc3giLCAianN4cyIsICJ1c2VMYXlvdXQiLCAid2lkdGgiLCAidXNlRm9jdXMiLCAiY3JlYXRlU2lnbmFsIiwgInVzZUludGVydmFsIiwgImhvbWVkaXIiLCAiU2Nyb2xsQm94IiwgInBlbmRpbmciLCAiY3JlYXRlU2lnbmFsIiwgIk1lbnUiLCAiQnV0dG9uIiwgInVzZUlucHV0IiwgImZ1enp5U2NvcmUiLCAicmFua0Z1enp5IiwgImpzeCIsICJqc3hzIiwgImNyZWF0ZVNpZ25hbCIsICJyYW5rRnV6enkiLCAiZnV6enlTY29yZSIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAiTWVudSIsICJob21lZGlyIiwgInBlbmRpbmciLCAiZmFpbGVkIiwgInBlbmRpbmciLCAiY2FwdHVyZVJlZ2lvbiIsICJwZW5kaW5nIiwgImV4ZWNGaWxlIiwgIm1rZHRlbXAiLCAiZXhpc3RzU3luYyIsICJ0bXBkaXIiLCAiam9pbiIsICJjcmVhdGVTaWduYWwiLCAidXNlSW50ZXJ2YWwiLCAiTWVudSIsICJTY3JvbGxCb3giLCAiU3Bpbm5lciIsICJUZXh0QXJlYSIsICJ1c2VGb2N1cyIsICJ1c2VIaXRUZXN0IiwgInVzZUlucHV0IiwgInVzZUxheW91dCIsICJ1c2VNb3VzZSIsICJ1c2VSZXNpemUiLCAiU0VTU0lPTl9DT0xPUlMiLCAiZnV6enlTY29yZSIsICJjcmVhdGVTaWduYWwiLCAiY3JlYXRlU2lnbmFsIiwgInRoZW1lIiwgImNvbXBhY3ROdW1iZXIiLCAiY3JlYXRlU2lnbmFsIiwgImVhc2UiLCAibGluZWFyIiwgIlNjcm9sbEJveCIsICJ1c2VBbmltYXRlZCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJtaXhDb2xvciIsICJ1c2VBbmltYXRlZCIsICJlYXNlIiwgImxpbmVhciIsICJmYWlsZWQiLCAiY3JlYXRlU2lnbmFsIiwgIlNjcm9sbEJveCIsICJ1c2VJbnB1dCIsICJsYWJlbCIsICJjcmVhdGVTaWduYWwiLCAiVGV4dElucHV0IiwgInVzZUxheW91dCIsICJqc3giLCAianN4cyIsICJ1c2VMYXlvdXQiLCAiY3JlYXRlU2lnbmFsIiwgIlRleHRJbnB1dCIsICJjcmVhdGVTaWduYWwiLCAiQnV0dG9uIiwgIlRleHRJbnB1dCIsICJ1c2VJbnB1dCIsICJqc3giLCAianN4cyIsICJjcmVhdGVTaWduYWwiLCAiaXRlbSIsICJ1c2VJbnB1dCIsICJCdXR0b24iLCAiVGV4dElucHV0IiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VJbnRlcnZhbCIsICJ1c2VNb3VzZSIsICJqc3giLCAianN4cyIsICJ3aWR0aCIsICJ2ZXJzaW9uIiwgImNyZWF0ZVNpZ25hbCIsICJ1c2VNb3VzZSIsICJ1c2VJbnRlcnZhbCIsICJNYXJrZG93biIsICJTY3JvbGxCb3giLCAidXNlSW5wdXQiLCAianN4IiwgImpzeHMiLCAidXNlSW5wdXQiLCAiU2Nyb2xsQm94IiwgIk1hcmtkb3duIiwgImpzeCIsICJqc3hzIiwgInVzZUxheW91dCIsICJ1c2VJbnB1dCIsICJ1c2VIaXRUZXN0IiwgInVzZU1vdXNlIiwgImNyZWF0ZVNpZ25hbCIsICJib290IiwgInZlcnNpb24iLCAidXNlSW50ZXJ2YWwiLCAidXNlUmVzaXplIiwgIndpZHRoIiwgImRlZmF1bHRNb2RlbCIsICJlbGFwc2VkIiwgIlNFU1NJT05fQ09MT1JTIiwgImhvbWVkaXIiLCAiYXJtZWQiLCAidXNlRm9jdXMiLCAiaXRlbXMiLCAicm93IiwgImZ1enp5U2NvcmUiLCAiU2Nyb2xsQm94IiwgIlRleHRBcmVhIiwgIk1lbnUiLCAicGVuZGluZyIsICJTcGlubmVyIiwgImNvbXBhY3ROdW1iZXIiLCAianN4IiwgImlzRGV2SW5zdGFsbCIsICJydW5VcGRhdGUiLCAiZmV0Y2hMYXRlc3RWZXJzaW9uIiwgIm5ld2VyVmVyc2lvbiIsICJydW5IZWFkbGVzcyIsICJydW5TaGVsbCIsICJyZWFkQ29uZmlnIiwgImZpbGVVUkxUb1BhdGgiXQp9Cg==
|