@fest-lib/style-lib 0.1.2 → 0.1.3

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.
Files changed (3) hide show
  1. package/README.md +7 -1
  2. package/dist/style-lib.js +1201 -859
  3. package/package.json +1 -1
package/dist/style-lib.js CHANGED
@@ -1,7 +1,204 @@
1
- import { $avoidTrigger as kt, $getValue as W, $set as Se, camelToKebab as te, deref as R, getOrInsertComputed as Mt, handleListeners as Le, hasValue as Ce, isNotEqual as $e, isVal as Et, isValueUnit as Tt, toRef as O, tryStringAsNumber as Xe } from "@fest-lib/core";
2
- import { DoubleWeakMap as Ge, addToCallChain as At, affected as Rt } from "@fest-lib/object";
3
- import { handleAttribute as Lt, handleProperty as $t, observeAttribute as Pt } from "@fest-lib/dom";
4
- var ee = (e) => {
1
+ import { $avoidTrigger as Yt, $getValue as ee, $set as Re, camelToKebab as se, deref as $, getOrInsertComputed as Zt, handleListeners as Ke, hasValue as Ve, isNotEqual as Ye, isVal as Gt, isValueUnit as Xt, toRef as N, tryStringAsNumber as mt } from "@fest-lib/core";
2
+ import { DoubleWeakMap as St, addToCallChain as Qt, affected as Jt } from "@fest-lib/object";
3
+ import { handleAttribute as er, handleProperty as tr, observeAttribute as rr } from "@fest-lib/dom";
4
+ var x = (e, t) => globalThis[Symbol.for(e)] ??= t(), j = x("dom.ts@blobURLMap", () => /* @__PURE__ */ new WeakMap()), B = x("dom.ts@cacheMap", () => /* @__PURE__ */ new Map()), q = x("dom.ts@cacheContentMap", () => /* @__PURE__ */ new Map()), ce = x("dom.ts@cacheBlobContentMap", () => /* @__PURE__ */ new WeakMap()), Ze = x("dom.ts@adoptedSelectorMap", () => /* @__PURE__ */ new Map()), Ge = x("dom.ts@adoptedShadowSelectorMap", () => /* @__PURE__ */ new WeakMap()), Xe = x("dom.ts@adoptedLayerMap", () => /* @__PURE__ */ new Map()), ue = x("dom.ts@adoptedShadowLayerMap", () => /* @__PURE__ */ new WeakMap()), A = x("dom.ts@adoptedMap", () => /* @__PURE__ */ new Map()), V = x("dom.ts@adoptedBlobMap", () => /* @__PURE__ */ new WeakMap()), F = x("dom.ts@adoptedAppliedText", () => /* @__PURE__ */ new WeakMap()), vt = x("dom.ts@adoptedFilled", () => /* @__PURE__ */ new WeakSet()), Fn = x("dom.ts@layerCounter", () => 0), gt = x("dom.ts@styleTreeHooks", () => /* @__PURE__ */ new Set()), ye = x("dom.ts@styleTreeObserved", () => /* @__PURE__ */ new WeakSet()), nr = x("dom.ts@styleTreeRoots", () => /* @__PURE__ */ new Set()), R = x("style-lib@bakedStyle", () => /* @__PURE__ */ new WeakMap()), I = x("style-lib@bakedLive", () => /* @__PURE__ */ new Set()), L = x("style-lib@bakedCache", () => /* @__PURE__ */ new Map()), Ae = x("style-lib@rebakeBatch", () => /* @__PURE__ */ new Set()), Le = x("lur.e@adoptedStyleSheetsCache", () => /* @__PURE__ */ new WeakMap()), or = x("lur.e@styleCache", () => /* @__PURE__ */ new Map()), ir = x("lur.e@styleElementCache", () => /* @__PURE__ */ new WeakMap()), me = x("style-lib@styleFlushPending", () => /* @__PURE__ */ new WeakSet()), Qe = x("style-lib@registeredProperties", () => /* @__PURE__ */ new Set()), sr = [
5
+ "%",
6
+ "px",
7
+ "cm",
8
+ "mm",
9
+ "q",
10
+ "in",
11
+ "pc",
12
+ "pt",
13
+ "em",
14
+ "ex",
15
+ "ch",
16
+ "cap",
17
+ "ic",
18
+ "lh",
19
+ "rem",
20
+ "rex",
21
+ "rch",
22
+ "rcap",
23
+ "ric",
24
+ "rlh",
25
+ "vw",
26
+ "vh",
27
+ "vi",
28
+ "vb",
29
+ "vmin",
30
+ "vmax",
31
+ "svw",
32
+ "svh",
33
+ "svi",
34
+ "svb",
35
+ "svmin",
36
+ "svmax",
37
+ "lvw",
38
+ "lvh",
39
+ "lvi",
40
+ "lvb",
41
+ "lvmin",
42
+ "lvmax",
43
+ "dvw",
44
+ "dvh",
45
+ "dvi",
46
+ "dvb",
47
+ "dvmin",
48
+ "dvmax",
49
+ "cqw",
50
+ "cqh",
51
+ "cqi",
52
+ "cqb",
53
+ "cqmin",
54
+ "cqmax",
55
+ "deg",
56
+ "grad",
57
+ "rad",
58
+ "turn",
59
+ "s",
60
+ "ms",
61
+ "hz",
62
+ "khz",
63
+ "dpi",
64
+ "dpcm",
65
+ "dppx",
66
+ "x",
67
+ "fr"
68
+ ], ar = new Set(sr), lr = {
69
+ "%": "percent",
70
+ q: "Q",
71
+ hz: "Hz",
72
+ khz: "kHz",
73
+ fr: "flex"
74
+ }, wt = /^(%|[a-zA-Z]+)/, cr = [
75
+ "color",
76
+ "background-color",
77
+ "border-color",
78
+ "border-top-color",
79
+ "border-right-color",
80
+ "border-bottom-color",
81
+ "border-left-color",
82
+ "outline-color",
83
+ "accent-color",
84
+ "caret-color",
85
+ "text-decoration-color",
86
+ "column-rule-color",
87
+ "fill",
88
+ "stroke",
89
+ "flood-color",
90
+ "lighting-color",
91
+ "stop-color"
92
+ ], ur = [
93
+ "font-family",
94
+ "font-size",
95
+ "font-weight",
96
+ "font-style",
97
+ "font-stretch",
98
+ "line-height",
99
+ "letter-spacing",
100
+ "word-spacing"
101
+ ], fr = [
102
+ "transition-duration",
103
+ "transition-timing-function",
104
+ "animation-duration",
105
+ "animation-timing-function"
106
+ ], bt = [
107
+ "data-theme",
108
+ "data-explorer-color-scheme",
109
+ "data-color-scheme",
110
+ "theme",
111
+ "color-scheme"
112
+ ], dr = [
113
+ ...bt,
114
+ "style",
115
+ "class"
116
+ ], Dn = [
117
+ "tokens",
118
+ "colors",
119
+ "typography",
120
+ "motion"
121
+ ], pr = [
122
+ "tokens",
123
+ "base",
124
+ "layout",
125
+ "components",
126
+ "utilities",
127
+ "theme",
128
+ "overrides",
129
+ "print"
130
+ ], hr = ["ux-preload", "ux-layer"], yr = [
131
+ "rs-md-base",
132
+ "rs-md-system",
133
+ "rs-md-modules",
134
+ "rs-md-user",
135
+ "rs-md-print",
136
+ "rs-md-user-print"
137
+ ], zn = yr, mr = /^[a-zA-Z0-9_.-]+$/, Sr = /^@layer\s+([a-zA-Z0-9_.-]+)\s*\{/, Wn = "DOM", Je = "data-glit-host-css", xt = "ux-baked", vr = ["tokens", "colors"], _e = 3e4, Ct = /* @__PURE__ */ Symbol.for("fest.animatable"), pe = typeof CSSStyleValue < "u" && typeof CSSUnitValue < "u", gr = (e) => lr[e.toLowerCase()] ?? e.toLowerCase(), wr = (e) => e.toLowerCase() === "%" ? "percent" : e.toLowerCase(), jn = (e) => mr.test(e), br = (e) => `@layer ${e} {}`, xr = (e) => {
138
+ let t = String(e || "").trim();
139
+ t = t.replace(/^(@charset\s+[^;]+;\s*)+/i, "");
140
+ for (let r = 0; r < 8; r++) {
141
+ const n = t.replace(/^\/\*[\s\S]*?\*\/\s*/, "");
142
+ if (n === t) break;
143
+ t = n.trim();
144
+ }
145
+ return t;
146
+ }, et = (e) => typeof CSSLayerBlockRule < "u" && e instanceof CSSLayerBlockRule, W = () => typeof globalThis < "u" && typeof globalThis.CSSStyleSheet == "function", tt = (e) => typeof e == "string" && /@import\b/i.test(e), kt = (e, t) => typeof e?.then == "function" ? e?.then?.(t) : t(e), Z = (e) => typeof ShadowRoot < "u" && e instanceof ShadowRoot, rt = (e) => typeof Document < "u" && e instanceof Document, Cr = (e) => typeof Element < "u" && e instanceof Element, nt = (e) => typeof CSS < "u" && typeof CSS.escape == "function" ? CSS.escape(e) : Array.from(e).map((t) => `\\${t.codePointAt(0).toString(16)} `).join(""), kr = 0, Er = () => typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : `ux-${Date.now().toString(36)}-${(++kr).toString(36)}`, Mr = (e) => {
147
+ try {
148
+ return typeof URL < "u" && typeof URL.canParse == "function" && URL.canParse(e);
149
+ } catch {
150
+ return !1;
151
+ }
152
+ }, qn = async (e) => {
153
+ const t = await crypto?.subtle?.digest("SHA-256", typeof e == "string" ? new TextEncoder().encode(e) : e instanceof ArrayBuffer ? e : await e?.arrayBuffer?.());
154
+ return "sha256-" + btoa(String.fromCharCode.apply(null, new Uint8Array(t)));
155
+ }, ot = (e, t) => e.endsWith("%") ? parseFloat(e) / 100 * t() : parseFloat(e), Tr = (e, t) => {
156
+ const r = e.split(" ");
157
+ return new DOMPoint(ot(r[0], () => t.clientWidth), ot(r[1], () => t.clientHeight));
158
+ }, te = (e, t = 0) => {
159
+ if (typeof e == "number") return e;
160
+ if (!e) return t;
161
+ const r = String(e).trim();
162
+ return r.endsWith("ms") ? parseFloat(r) : r.endsWith("s") ? parseFloat(r) * 1e3 : parseFloat(r) || t;
163
+ }, Rr = (e) => e === void 0 ? 1 : e === -1 || e === 1 / 0 ? 1 / 0 : Math.max(1, Math.floor(e)), Ar = (e) => e === -1 || e === 1 / 0 ? 1 / 0 : Math.max(1, e ?? 1), Se = (e) => e != null && typeof e == "object" && e.kind === "scroll", it = (e) => e != null && typeof e == "object" && e.kind === "view", re = (e) => !e || e.nodeType !== 1 ? !1 : !!(String(e.localName || "").includes("-") || e.shadowRoot || e.styles != null), Et = (e) => {
164
+ try {
165
+ return e.cssRules.length;
166
+ } catch {
167
+ return null;
168
+ }
169
+ }, Hn = (e) => {
170
+ if (!e) return !0;
171
+ const t = Et(e);
172
+ return t === null ? !1 : t === 0;
173
+ }, Lr = (e) => e === "--base-color" || e.startsWith("--color-") || e.endsWith("-color") || e.endsWith("-fg") || e.endsWith("-bg"), Pr = (e) => {
174
+ if (!e.isConnected) return !1;
175
+ if (typeof e.getClientRects != "function") return !0;
176
+ try {
177
+ return e.getClientRects().length > 0;
178
+ } catch {
179
+ return !0;
180
+ }
181
+ }, Or = (e) => Array.isArray(e) && typeof e[0] == "function", Mt = (e) => {
182
+ const t = typeof e == "string" ? e.trim() : "";
183
+ if (!t) return !0;
184
+ for (const r of t.split(";")) {
185
+ const n = r.trim();
186
+ if (!n) continue;
187
+ const o = n.indexOf(":");
188
+ if (o < 0 || n.slice(o + 1).trim().length > 0) return !1;
189
+ }
190
+ return !0;
191
+ }, $r = (e) => {
192
+ if (e == null) return;
193
+ const t = e.getAttribute("style");
194
+ t != null && Mt(t) && (e.style.cssText = "", e.removeAttribute("style"));
195
+ }, Ur = (e, t) => {
196
+ if (Mt(t)) {
197
+ e.style.cssText = "", e.removeAttribute("style");
198
+ return;
199
+ }
200
+ e.style.cssText = t;
201
+ }, P = (e) => {
5
202
  if (e == null || typeof e != "object") return !1;
6
203
  try {
7
204
  const t = globalThis.CSSStyleValue;
@@ -10,35 +207,73 @@ var ee = (e) => {
10
207
  } catch {
11
208
  }
12
209
  return !1;
13
- }, Je = (e) => {
14
- if (e == null || typeof e != "object" || ee(e)) return !1;
210
+ }, ae = (e) => {
211
+ if (e == null || typeof e != "object" || P(e)) return !1;
15
212
  try {
16
213
  return "value" in e;
17
214
  } catch {
18
215
  return !1;
19
216
  }
20
- }, et = (e, t) => e?.[t] ?? globalThis?.[t], Ut = (e) => {
21
- switch (e.toLowerCase()) {
22
- case "%":
23
- return "percent";
24
- case "q":
25
- return "Q";
26
- case "hz":
27
- return "Hz";
28
- case "khz":
29
- return "kHz";
30
- case "fr":
31
- return "flex";
32
- default:
33
- return e.toLowerCase();
34
- }
35
- }, Ot = (e) => e.toLowerCase() === "%" ? "percent" : e.toLowerCase(), Vt = (e, t, r) => {
36
- const n = e?.CSS, o = Ut(t), s = n?.[o];
217
+ }, st = (e) => e == null || typeof e != "object" && typeof e != "function", ne = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), at = (e, t) => new RegExp(`var\\(\\s*${ne(t)}\\s*\\)`).test(e), Ir = (e) => {
218
+ const t = wt.exec(e);
219
+ if (!t) return null;
220
+ const r = t[0], n = r.toLowerCase();
221
+ return ar.has(n) ? {
222
+ authored: r,
223
+ normalized: n,
224
+ length: r.length
225
+ } : null;
226
+ }, D = (e, t) => e?.[t] ?? globalThis?.[t], M = (e, t, r) => {
227
+ const n = e?.CSS, o = gr(t), s = n?.[o];
37
228
  if (typeof s == "function") return s.call(n, r);
38
- const i = et(e, "CSSUnitValue");
229
+ const i = D(e, "CSSUnitValue");
39
230
  if (typeof i != "function") throw new TypeError(`Typed OM does not support CSS unit "${t}"`);
40
- return new i(r, Ot(t));
41
- }, It = (e) => {
231
+ return new i(r, wr(t));
232
+ }, Kn = (e) => pe && e instanceof CSSStyleValue, fe = (e) => pe && e instanceof CSSUnitValue, Ne = (...e) => {
233
+ const t = /* @__PURE__ */ new Set(), r = [];
234
+ for (const n of e) {
235
+ if (n == null) continue;
236
+ const o = typeof n == "string" ? [n] : n;
237
+ for (const s of o) {
238
+ const i = String(s || "").trim();
239
+ !i || t.has(i) || (t.add(i), r.push(i));
240
+ }
241
+ }
242
+ return r.length ? `@layer ${r.join(", ")};` : "";
243
+ }, Yn = () => Ne(pr), Zn = (e) => Ne(hr, e), Fe = (e, t) => {
244
+ const r = (t || "").trim();
245
+ return !e || !r ? "" : `@layer ${e} {
246
+ ${r}
247
+ }`;
248
+ }, ve = (e, t) => t ? `@layer ${t} { ${e} }` : e, Gn = (e, t) => {
249
+ const r = (t || "").trim();
250
+ return r ? /^@layer\b/.test(r) ? r : Fe(e, r) : "";
251
+ }, Br = (e, t) => {
252
+ const r = e.match(Sr);
253
+ if (!r || t && r[1] !== t) return null;
254
+ const n = r[0].lastIndexOf("{");
255
+ let o = 0;
256
+ for (let s = n; s < e.length; s++) {
257
+ const i = e[s];
258
+ if (i === "{") o++;
259
+ else if (i === "}" && (o--, o === 0))
260
+ return e.slice(s + 1).trim() ? null : e.slice(n + 1, s).trim();
261
+ }
262
+ return null;
263
+ }, Xn = (e, t) => {
264
+ const r = xr(e);
265
+ return Br(r, t) ?? r;
266
+ }, Vr = (e, t = "") => `@import url("${e}") ${t && typeof t == "string" ? `layer(${t})` : ""};`, Qn = Fe("ux-preload", ":host { box-sizing: border-box; }"), Tt = (e, t) => {
267
+ if (!e || !t) return;
268
+ const r = Array.from(e.cssRules || []), n = r.find((o) => et(o) && o.name === t);
269
+ if (n) return n;
270
+ try {
271
+ const o = e.insertRule(br(t), r.length), s = e.cssRules?.[o];
272
+ return et(s) ? s : void 0;
273
+ } catch {
274
+ return;
275
+ }
276
+ }, _r = (e) => {
42
277
  const t = [];
43
278
  let r = 0;
44
279
  for (; r < e.length; ) {
@@ -50,11 +285,11 @@ var ee = (e) => {
50
285
  const s = /^(?:\d*\.\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?/.exec(n);
51
286
  if (s) {
52
287
  r += s[0].length;
53
- const l = /^(%|[a-zA-Z]+)/.exec(e.slice(r)), f = l?.[0] ?? null;
288
+ const l = wt.exec(e.slice(r)), c = l?.[0] ?? null;
54
289
  l && (r += l[0].length), t.push({
55
290
  kind: "number",
56
291
  value: Number(s[0]),
57
- unit: f == null ? null : f.toLowerCase()
292
+ unit: c == null ? null : c.toLowerCase()
58
293
  });
59
294
  continue;
60
295
  }
@@ -85,7 +320,7 @@ var ee = (e) => {
85
320
  throw new SyntaxError(`Unsupported token near "${n}"`);
86
321
  }
87
322
  return t;
88
- }, Bt = class {
323
+ }, Nr = class {
89
324
  tokens;
90
325
  win;
91
326
  index = 0;
@@ -114,7 +349,7 @@ var ee = (e) => {
114
349
  return t?.kind === "symbol" && t.value === e;
115
350
  }
116
351
  createMath(e, ...t) {
117
- const r = et(this.win, e);
352
+ const r = D(this.win, e);
118
353
  if (typeof r != "function") throw new TypeError(`${e} is not supported`);
119
354
  return new r(...t);
120
355
  }
@@ -141,7 +376,7 @@ var ee = (e) => {
141
376
  }
142
377
  parsePrimary() {
143
378
  const e = this.consume();
144
- if (e.kind === "number") return Vt(this.win, e.unit ?? "number", e.value);
379
+ if (e.kind === "number") return M(this.win, e.unit ?? "number", e.value);
145
380
  if (e.kind === "symbol" && e.value === "(") {
146
381
  const t = this.parseSum();
147
382
  return this.consumeSymbol(")"), t;
@@ -172,14 +407,14 @@ var ee = (e) => {
172
407
  }
173
408
  throw new SyntaxError(`Unsupported function "${e}"`);
174
409
  }
175
- }, Nt = (e, t) => {
410
+ }, Fr = (e, t) => {
176
411
  try {
177
- const r = It(e);
178
- return new Bt(r, t).parse();
412
+ const r = _r(e);
413
+ return new Nr(r, t).parse();
179
414
  } catch {
180
415
  return null;
181
416
  }
182
- }, ke = typeof CSSStyleValue < "u" && typeof CSSUnitValue < "u", X = (e) => ke && e instanceof CSSUnitValue, L = (e, t, r, n = "") => {
417
+ }, U = (e, t, r, n = "") => {
183
418
  if (!(!e || !t)) {
184
419
  if (r == null) {
185
420
  e.getPropertyValue(t) !== "" && e.removeProperty(t);
@@ -187,97 +422,84 @@ var ee = (e) => {
187
422
  }
188
423
  e.getPropertyValue(t) !== r && e.setProperty(t, r, n);
189
424
  }
190
- }, Ft = (e, t, r, n = "") => {
425
+ }, Dr = (e, t, r, n = "") => {
191
426
  if (!e || !t) return e;
192
- const o = te(t), s = e.style, i = e.attributeStyleMap ?? e.styleMap;
193
- if (!ke || !i) return tt(e, t, r, n);
427
+ const o = se(t), s = e.style, i = e.attributeStyleMap ?? e.styleMap;
428
+ if (!pe || !i) return Rt(e, t, r, n);
194
429
  const a = e.ownerDocument?.defaultView ?? globalThis;
195
- let l = Ce(r) && Je(r) ? r.value : r;
430
+ let l = Ve(r) && ae(r) ? r.value : r;
196
431
  if (l == null)
197
- return i.delete?.(o), s && L(s, o, null, n), e;
198
- if (ee(l)) {
199
- const f = i.get(o);
200
- if (X(l) && X(f)) {
201
- if (f.value === l.value && f.unit === l.unit) return e;
202
- } else if (f === l) return e;
432
+ return i.delete?.(o), s && U(s, o, null, n), e;
433
+ if (P(l)) {
434
+ const c = i.get(o);
435
+ if (fe(l) && fe(c)) {
436
+ if (c.value === l.value && c.unit === l.unit) return e;
437
+ } else if (c === l) return e;
203
438
  return i.set(o, l), e;
204
439
  }
205
440
  if (typeof l == "number")
206
441
  if (CSS?.number && !o.startsWith("--")) {
207
- const f = CSS.number(l), u = i.get(o);
208
- return X(u) && u.value === f.value && u.unit === f.unit || i.set(o, f), e;
442
+ const c = CSS.number(l), u = i.get(o);
443
+ return fe(u) && u.value === c.value && u.unit === c.unit || i.set(o, c), e;
209
444
  } else
210
- return L(s, o, String(l), n), e;
445
+ return U(s, o, String(l), n), e;
211
446
  if (typeof l == "string") {
212
447
  if (/\b(calc|min|max|clamp)\s*\(/.test(l)) {
213
- const u = Nt(l, a);
448
+ const u = Fr(l, a);
214
449
  if (u) try {
215
450
  return i.set(o, u), e;
216
451
  } catch {
217
452
  }
218
453
  }
219
- const f = Xe(l);
220
- if (typeof f == "number" && CSS?.number && !o.startsWith("--")) {
221
- const u = CSS.number(f), d = i.get(o);
222
- return X(d) && d.value === u.value && d.unit === u.unit || i.set(o, u), e;
454
+ const c = mt(l);
455
+ if (typeof c == "number" && CSS?.number && !o.startsWith("--")) {
456
+ const u = CSS.number(c), d = i.get(o);
457
+ return fe(d) && d.value === u.value && d.unit === u.unit || i.set(o, u), e;
223
458
  }
224
- return L(s, o, l, n), e;
459
+ return U(s, o, l, n), e;
225
460
  }
226
- return L(s, o, String(l), n), e;
227
- }, tt = (e, t, r, n = "") => {
461
+ return U(s, o, String(l), n), e;
462
+ }, Rt = (e, t, r, n = "") => {
228
463
  if (!e || !t) return e;
229
- const o = te(t), s = e.style;
464
+ const o = se(t), s = e.style;
230
465
  if (!s) return e;
231
- let i = Ce(r) && Je(r) ? r.value : r;
232
- return typeof i == "string" && !ee(i) && (i = Xe(i) ?? i), i == null ? (L(s, o, null, n), e) : (ee(i) || typeof i == "number", L(s, o, String(i), n), e);
233
- }, re = (e, t, r, n = "") => ke ? Ft(e, t, r, n) : tt(e, t, r, n), sn = (e, t, r) => re(Me(e), t, r), zt = (e, t) => {
234
- const r = Me(e);
235
- return Object.entries(t).forEach(([n, o]) => re(r, n, o)), r;
236
- }, an = async (e) => {
237
- const t = await crypto?.subtle?.digest("SHA-256", typeof e == "string" ? new TextEncoder().encode(e) : e instanceof ArrayBuffer ? e : await e?.arrayBuffer?.());
238
- return "sha256-" + btoa(String.fromCharCode.apply(null, new Uint8Array(t)));
239
- }, rt = (e, t, r = "", n) => {
240
- const o = fr(e), s = typeof e == "string" && URL.canParse(e) ? e : o;
241
- return t?.[0] && (t[0].fetchPriority = "high"), t && s && typeof s == "string" && Ve(t, s, r), t?.[0] && (!URL.canParse(e) || n) && t?.[0] instanceof HTMLLinkElement, ct(o, (i) => {
242
- t?.[0] && i && (Ve(t, i, r), t?.[0].setAttribute("loaded", ""));
466
+ let i = Ve(r) && ae(r) ? r.value : r;
467
+ return typeof i == "string" && !P(i) && (i = mt(i) ?? i), i == null ? (U(s, o, null, n), e) : (P(i) || typeof i == "number", U(s, o, String(i), n), e);
468
+ }, he = (e, t, r, n = "") => pe ? Dr(e, t, r, n) : Rt(e, t, r, n), Jn = (e, t, r) => he(De(e), t, r), zr = (e, t) => {
469
+ const r = De(e);
470
+ return Object.entries(t).forEach(([n, o]) => he(r, n, o)), r;
471
+ }, At = (e, t, r = "", n) => {
472
+ const o = Xr(e), s = typeof e == "string" && URL.canParse(e) ? e : o;
473
+ return t?.[0] && (t[0].fetchPriority = "high"), t && s && typeof s == "string" && lt(t, s, r), t?.[0] && (!URL.canParse(e) || n) && t?.[0] instanceof HTMLLinkElement, kt(o, (i) => {
474
+ t?.[0] && i && (lt(t, i, r), t?.[0].setAttribute("loaded", ""));
243
475
  })?.catch?.((i) => {
244
476
  console.warn("Failed to load style sheet:", i);
245
477
  });
246
- }, Dt = (e) => {
478
+ }, Wr = (e) => {
247
479
  const t = typeof document < "u" ? document.createElement("link") : null;
248
480
  return t && (t.fetchPriority = "high"), t ? (Object.assign(t, {
249
481
  rel: "stylesheet",
250
482
  type: "text/css",
251
483
  crossOrigin: "same-origin"
252
- }), t.dataset.owner = "DOM", rt(e, [t, "href"]), typeof document < "u" && document.head.append(t), t) : null;
253
- }, A = (e, t = typeof document < "u" ? document?.head : null, r = "") => {
484
+ }), t.dataset.owner = "DOM", At(e, [t, "href"]), typeof document < "u" && document.head.append(t), t) : null;
485
+ }, O = (e, t = typeof document < "u" ? document?.head : null, r = "") => {
254
486
  const n = t?.querySelector?.("head") ?? t;
255
- if (typeof HTMLHeadElement < "u" && n instanceof HTMLHeadElement) return Dt(e);
487
+ if (typeof HTMLHeadElement < "u" && n instanceof HTMLHeadElement) return Wr(e);
256
488
  const o = typeof document < "u" ? document.createElement("style") : null;
257
- return o ? (o.dataset.owner = "DOM", rt(e, [o, "innerHTML"], r), n?.prepend?.(o), o) : null;
258
- }, ln = (e, t, r, n = "") => re(e, t, r, n), un = (e) => it(e, ""), jt = /* @__PURE__ */ Symbol.for("dom.ts@adoptedMap"), T = globalThis[jt] ??= /* @__PURE__ */ new Map(), qt = /* @__PURE__ */ Symbol.for("dom.ts@adoptedBlobMap"), P = globalThis[qt] ??= /* @__PURE__ */ new WeakMap(), Wt = /* @__PURE__ */ Symbol.for("dom.ts@adoptedAppliedText"), V = globalThis[Wt] ??= /* @__PURE__ */ new WeakMap(), Ht = /* @__PURE__ */ Symbol.for("dom.ts@adoptedFilled"), nt = globalThis[Ht] ??= /* @__PURE__ */ new WeakSet(), ne = (e, t) => t ? `@layer ${t} { ${e} }` : e, ot = (e) => {
259
- try {
260
- return e.cssRules.length;
261
- } catch {
262
- return null;
263
- }
264
- }, me = (e, t) => {
265
- V.set(e, t), nt.add(e);
266
- }, U = (e) => {
489
+ return o ? (o.dataset.owner = "DOM", At(e, [o, "innerHTML"], r), n?.prepend?.(o), o) : null;
490
+ }, eo = (e, t, r, n = "") => he(e, t, r, n), to = (e) => Lt(e, ""), Pe = (e, t) => {
491
+ F.set(e, t), vt.add(e);
492
+ }, _ = (e) => {
267
493
  if (!e) return null;
268
- const t = V.get(e);
494
+ const t = F.get(e);
269
495
  if (t) return t;
270
- for (const [r, n] of T) if (n === e && typeof r == "string") return r;
496
+ for (const [r, n] of A) if (n === e && typeof r == "string") return r;
271
497
  return null;
272
- }, cn = (e) => {
273
- if (!e) return !0;
274
- const t = ot(e);
275
- return t === null ? !1 : t === 0;
276
- }, H = (e, t) => {
498
+ }, oe = (e, t) => {
277
499
  if (!e) return !1;
278
- const r = t || U(e), n = ot(e);
279
- return n === null ? !1 : n > 0 ? (nt.add(e), r && !V.has(e) && V.set(e, r), !0) : r && ve(e, r) ? (me(e, r), !0) : !1;
280
- }, _t = /* @__PURE__ */ Symbol.for("dom.ts@layerCounter"), fn = globalThis[_t] ??= 0, ve = (e, t) => {
500
+ const r = t || _(e), n = Et(e);
501
+ return n === null ? !1 : n > 0 ? (vt.add(e), r && !F.has(e) && F.set(e, r), !0) : r && Oe(e, r) ? (Pe(e, r), !0) : !1;
502
+ }, Oe = (e, t) => {
281
503
  if (!e || !t) return !1;
282
504
  try {
283
505
  return e.replaceSync(t), !0;
@@ -285,116 +507,101 @@ var ee = (e) => {
285
507
  const n = String(r?.message || "").toLowerCase();
286
508
  return n.includes("@import rules are not allowed") || n.includes("@import") && n.includes("not allowed") || console.warn("[DOM] Failed to apply adopted stylesheet:", r), !1;
287
509
  }
288
- }, Zt = (e) => {
289
- try {
290
- return typeof URL < "u" && typeof URL.canParse == "function" && URL.canParse(e);
291
- } catch {
292
- return !1;
293
- }
294
- }, Kt = (e) => {
295
- let t = P.get(e);
296
- return t || (t = new CSSStyleSheet(), P.set(e, t)), t;
297
- }, it = (e, t = null) => {
510
+ }, jr = (e) => {
511
+ let t = V.get(e);
512
+ return t || (t = new CSSStyleSheet(), V.set(e, t)), t;
513
+ }, Lt = (e, t = null) => {
298
514
  try {
299
- return Yt(e, t);
515
+ return qr(e, t);
300
516
  } catch (r) {
301
- return console.warn("[DOM] loadAsAdopted failed", r), typeof e == "string" && A(e, void 0, t || ""), null;
517
+ return console.warn("[DOM] loadAsAdopted failed", r), typeof e == "string" && O(e, void 0, t || ""), null;
302
518
  }
303
- }, Yt = (e, t = null) => {
304
- if (!lt())
305
- return typeof e == "string" && A(e, void 0, t || ""), null;
306
- if (typeof e == "string" && Ue(e))
307
- return A(e, void 0, t || ""), null;
308
- if (typeof e == "string" && T?.has?.(e)) {
309
- const n = T.get(e), o = V.get(n) || ne(e, t);
310
- return H(n, o), typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(n) && document.adoptedStyleSheets.push(n), n;
519
+ }, qr = (e, t = null) => {
520
+ if (!W())
521
+ return typeof e == "string" && O(e, void 0, t || ""), null;
522
+ if (typeof e == "string" && tt(e))
523
+ return O(e, void 0, t || ""), null;
524
+ if (typeof e == "string" && A?.has?.(e)) {
525
+ const n = A.get(e), o = F.get(n) || ve(e, t);
526
+ return oe(n, o), typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(n) && document.adoptedStyleSheets.push(n), n;
311
527
  }
312
- if ((e instanceof Blob || e instanceof File) && P?.has?.(e)) {
313
- const n = P.get(e);
314
- return H(n), typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(n) && document.adoptedStyleSheets.push(n), n;
528
+ if ((e instanceof Blob || e instanceof File) && V?.has?.(e)) {
529
+ const n = V.get(e);
530
+ return oe(n), typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(n) && document.adoptedStyleSheets.push(n), n;
315
531
  }
316
532
  if (!e) return null;
317
- const r = typeof e == "string" ? Mt(T, e, () => new CSSStyleSheet()) : Kt(e);
318
- if (typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(r) && document.adoptedStyleSheets.push(r), typeof e == "string" && !Zt(e)) {
319
- const n = ne(e, t);
320
- return T.set(e, r), ve(r, n) ? me(r, n) : (ie(r), T.delete(e), A(e)), r;
321
- } else ct(dr(e), (n) => {
322
- if (T.set(n, r), n) {
323
- if (Ue(n))
324
- return ie(r), T.delete(n), P.delete(e), A(n, void 0, t || ""), r;
325
- const o = ne(n, t);
326
- return ve(r, o) ? me(r, o) : (ie(r), T.delete(n), P.delete(e), A(n, void 0, t || "")), r;
533
+ const r = typeof e == "string" ? Zt(A, e, () => new CSSStyleSheet()) : jr(e);
534
+ if (typeof document < "u" && document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(r) && document.adoptedStyleSheets.push(r), typeof e == "string" && !Mr(e)) {
535
+ const n = ve(e, t);
536
+ return A.set(e, r), Oe(r, n) ? Pe(r, n) : (ge(r), A.delete(e), O(e)), r;
537
+ } else kt(Qr(e), (n) => {
538
+ if (A.set(n, r), n) {
539
+ if (tt(n))
540
+ return ge(r), A.delete(n), V.delete(e), O(n, void 0, t || ""), r;
541
+ const o = ve(n, t);
542
+ return Oe(r, o) ? Pe(r, o) : (ge(r), A.delete(n), V.delete(e), O(n, void 0, t || "")), r;
327
543
  }
328
544
  });
329
545
  return r;
330
- }, Qt = /* @__PURE__ */ Symbol.for("dom.ts@styleTreeHooks"), st = globalThis[Qt] ??= /* @__PURE__ */ new Set(), oe = /* @__PURE__ */ new WeakSet(), Xt = /* @__PURE__ */ new Set(), Gt = [
331
- "data-theme",
332
- "data-explorer-color-scheme",
333
- "data-color-scheme",
334
- "theme",
335
- "color-scheme"
336
- ], _ = (e) => !e || e.nodeType !== 1 ? !1 : !!(String(e.localName || "").includes("-") || e.shadowRoot || e.styles != null), at = (e, t) => {
546
+ }, Pt = (e, t) => {
337
547
  if (!(!e || e.nodeType === 3)) {
338
548
  if (e.nodeType === 11) {
339
- for (const r of e.childNodes || []) at(r, t);
549
+ for (const r of e.childNodes || []) Pt(r, t);
340
550
  return;
341
551
  }
342
- if (_(e) && t.add(e), typeof e.querySelectorAll == "function")
552
+ if (re(e) && t.add(e), typeof e.querySelectorAll == "function")
343
553
  try {
344
- for (const r of e.querySelectorAll("*")) _(r) && t.add(r);
554
+ for (const r of e.querySelectorAll("*")) re(r) && t.add(r);
345
555
  } catch {
346
556
  }
347
557
  }
348
- }, Jt = (e, t = "tree") => {
558
+ }, Hr = (e, t = "tree") => {
349
559
  for (const r of e)
350
- if (_(r))
351
- for (const n of st) n(r, t);
352
- }, er = (e) => {
353
- typeof e == "function" && st.add(e);
354
- }, dn = (e) => {
355
- if (!e || typeof MutationObserver > "u" || oe.has(e)) return e;
356
- oe.add(e), Xt.add(e);
560
+ if (re(r))
561
+ for (const n of gt) n(r, t);
562
+ }, Ot = (e) => {
563
+ typeof e == "function" && gt.add(e);
564
+ }, ro = (e) => {
565
+ if (!e || typeof MutationObserver > "u" || ye.has(e)) return e;
566
+ ye.add(e), nr.add(e);
357
567
  const t = new MutationObserver((r) => {
358
568
  const n = /* @__PURE__ */ new Set();
359
569
  for (const o of r) if (o.type === "childList") {
360
- for (const i of o.addedNodes) at(i, n);
570
+ for (const i of o.addedNodes) Pt(i, n);
361
571
  const s = o.target?.getRootNode?.();
362
- if (s instanceof ShadowRoot && _(s.host)) {
572
+ if (s instanceof ShadowRoot && re(s.host)) {
363
573
  const i = s.adoptedStyleSheets;
364
574
  (!i || i.length === 0) && n.add(s.host);
365
575
  }
366
- } else o.type === "attributes" && o.target && _(o.target) && n.add(o.target);
367
- Jt(n, "mutation");
576
+ } else o.type === "attributes" && o.target && re(o.target) && n.add(o.target);
577
+ Hr(n, "mutation");
368
578
  });
369
579
  try {
370
580
  t.observe(e, {
371
581
  childList: !0,
372
582
  subtree: !0,
373
583
  attributes: !0,
374
- attributeFilter: [...Gt]
584
+ attributeFilter: [...bt]
375
585
  });
376
586
  } catch {
377
- return oe.delete(e), e;
587
+ return ye.delete(e), e;
378
588
  }
379
589
  return e;
380
- }, pn = () => {
590
+ }, no = () => {
381
591
  if (typeof document > "u") return;
382
592
  const e = typeof URL < "u" && typeof URL.canParse == "function";
383
- for (const [t, r] of T) {
593
+ for (const [t, r] of A) {
384
594
  if (!r || typeof t != "string" || e && URL.canParse(t)) continue;
385
- const n = V.get(r) || t;
386
- H(r, n), document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(r) && document.adoptedStyleSheets.push(r);
595
+ const n = F.get(r) || t;
596
+ oe(r, n), document.adoptedStyleSheets && !document.adoptedStyleSheets.includes(r) && document.adoptedStyleSheets.push(r);
387
597
  }
388
- }, ie = (e) => {
598
+ }, ge = (e) => {
389
599
  if (!e) return !1;
390
- const t = typeof e == "string" ? T.get(e) : e;
600
+ const t = typeof e == "string" ? A.get(e) : e;
391
601
  if (!t || typeof document > "u") return !1;
392
602
  const r = document.adoptedStyleSheets, n = r.indexOf(t);
393
603
  return n !== -1 ? (r.splice(n, 1), !0) : !1;
394
- }, tr = (e, t) => {
395
- const r = e.split(" ");
396
- return new DOMPoint(Pe(r[0], () => t.clientWidth), Pe(r[1], () => t.clientHeight));
397
- }, Pe = (e, t) => e.endsWith("%") ? parseFloat(e) / 100 * t() : parseFloat(e), hn = (e) => {
604
+ }, oo = (e) => {
398
605
  if (e?.computedStyleMap) {
399
606
  const t = e.computedStyleMap().get("transform")?.toMatrix?.();
400
607
  if (t) return t;
@@ -403,10 +610,10 @@ var ee = (e) => {
403
610
  return new DOMMatrix(t?.getPropertyValue?.("transform"));
404
611
  }
405
612
  return new DOMMatrix();
406
- }, yn = (e) => {
613
+ }, io = (e) => {
407
614
  const t = getComputedStyle(e)?.getPropertyValue?.("transform-origin") || "50% 50%";
408
- return tr(t, e);
409
- }, z = (e, t) => {
615
+ return Tr(t, e);
616
+ }, K = (e, t) => {
410
617
  if ("computedStyleMap" in e) {
411
618
  const r = e?.computedStyleMap?.()?.get(t);
412
619
  return r instanceof CSSUnitValue ? r?.value || 0 : r?.toString?.();
@@ -416,7 +623,7 @@ var ee = (e) => {
416
623
  return parseFloat(r?.getPropertyValue?.(t)?.replace?.("px", "")) || 0;
417
624
  }
418
625
  return parseFloat((e?.style ?? e).getPropertyValue?.(t)?.replace?.("px", "")) || 0;
419
- }, Sn = (e) => {
626
+ }, so = (e) => {
420
627
  let t = 1, r = e;
421
628
  for (; r; ) {
422
629
  if ("currentCSSZoom" in r) {
@@ -429,52 +636,42 @@ var ee = (e) => {
429
636
  r = r?.offsetParent ?? r?.parentElement;
430
637
  }
431
638
  return t;
432
- }, mn = (e, t) => z?.(e, t), vn = (e, t) => t == "inline" ? z(e, "padding-inline-start") + z(e, "padding-inline-end") : z(e, "padding-block-start") + z(e, "padding-block-end"), bn = "DOM", D = typeof document < "u" ? document.createElement("style") : null;
433
- D && (document.querySelector("head")?.appendChild?.(D), D.dataset.owner = "DOM");
434
- var lt = () => typeof globalThis < "u" && typeof globalThis.CSSStyleSheet == "function", Ue = (e) => typeof e == "string" && /@import\b/i.test(e), Oe = (e) => typeof CSSLayerBlockRule < "u" && e instanceof CSSLayerBlockRule, ut = (e, t) => {
435
- if (!e || !t) return;
436
- const r = Array.from(e.cssRules || []), n = r.find((o) => Oe(o) && o.name === t);
437
- if (n) return n;
438
- try {
439
- const o = e.insertRule(`@layer ${t} {}`, r.length), s = e.cssRules?.[o];
440
- return Oe(s) ? s : void 0;
441
- } catch {
442
- return;
443
- }
444
- }, Ve = (e, t, r = "") => {
445
- e[0][e[1]] = e[1] == "innerHTML" ? `@import url("${t}") ${r && typeof r == "string" ? `layer(${r})` : ""};` : t;
446
- }, wn = (e) => e?.map?.((t) => zt(...t)), rr = (e, t) => (t ||= D?.sheet, ut(t, e)), nr = 0, se = (e) => typeof ShadowRoot < "u" && e instanceof ShadowRoot, Ie = (e) => typeof Document < "u" && e instanceof Document, or = (e) => typeof Element < "u" && e instanceof Element, Be = (e) => typeof CSS < "u" && typeof CSS.escape == "function" ? CSS.escape(e) : Array.from(e).map((t) => `\\${t.codePointAt(0).toString(16)} `).join(""), ir = () => typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : `ux-${Date.now().toString(36)}-${(++nr).toString(36)}`, sr = (e, t) => (t = t.trim(), e ? t ? t.startsWith("::") ? `${e}${t}` : `${e} ${t}` : e : t), ar = (e, t, r, n) => {
639
+ }, ao = (e, t) => K?.(e, t), lo = (e, t) => t == "inline" ? K(e, "padding-inline-start") + K(e, "padding-inline-end") : K(e, "padding-block-start") + K(e, "padding-block-end"), G = typeof document < "u" ? document.createElement("style") : null;
640
+ G && (document.querySelector("head")?.appendChild?.(G), G.dataset.owner = "DOM");
641
+ var lt = (e, t, r = "") => {
642
+ e[0][e[1]] = e[1] == "innerHTML" ? Vr(t, r) : t;
643
+ }, co = (e) => e?.map?.((t) => zr(...t)), Kr = (e, t) => (t ||= G?.sheet, Tt(t, e)), $t = (e) => {
644
+ if (e.id) return `#${nt(e.id)}`;
645
+ let t = e.getAttribute("data-style-id");
646
+ return t || (t = Er(), e.setAttribute("data-style-id", t)), `[data-style-id="${nt(t)}"]`;
647
+ }, Yr = (e, t) => (t = t.trim(), e ? t ? t.startsWith("::") ? `${e}${t}` : `${e} ${t}` : e : t), Zr = (e, t, r, n) => {
447
648
  const o = Array.from(e?.cssRules || []), s = t.trim(), i = n.trim();
448
649
  return o.findIndex((a) => {
449
650
  if (!(a instanceof CSSStyleRule)) return !1;
450
651
  const l = a.selectorText?.trim?.() ?? "";
451
652
  return l === s ? !0 : i && l.endsWith(i) ? l.slice(0, l.length - i.length).trim() === r : !1;
452
653
  });
453
- }, Me = (e, t, r = "ux-query", n = null) => {
454
- const o = se(n) || Ie(n) ? n : n?.getRootNode?.() ?? (typeof document < "u" ? document : null), s = or(n) ? n : null;
654
+ }, De = (e, t, r = "ux-query", n = null) => {
655
+ const o = Z(n) || rt(n) ? n : n?.getRootNode?.() ?? (typeof document < "u" ? document : null), s = Cr(n) ? n : null;
455
656
  let i = "";
456
- if (s?.id) i = `#${Be(s.id)}`;
457
- else if (s) {
458
- let u = s.getAttribute("data-style-id");
459
- u || (u = ir(), s.setAttribute("data-style-id", u)), i = `[data-style-id="${Be(u)}"]`;
460
- } else se(o) ? i = ":host" : Ie(o) && (i = ":root");
657
+ s ? i = $t(s) : Z(o) ? i = ":host" : rt(o) && (i = ":root");
461
658
  let a = null;
462
- if (se(o) ? (a = o.querySelector("style[data-ux-query]"), !a && typeof document < "u" && (a = document.createElement("style"), a.setAttribute("data-ux-query", ""), o.appendChild(a))) : a = lr(), t ||= a?.sheet, !t) return;
463
- if (r) return Me(e, rr(r, t), null, n);
464
- const l = sr(i, e);
465
- let f = ar(t, l, i, e);
466
- return f === -1 && (f = t.insertRule(`${l} {}`)), t.cssRules?.[f];
659
+ if (Z(o) ? (a = o.querySelector("style[data-ux-query]"), !a && typeof document < "u" && (a = document.createElement("style"), a.setAttribute("data-ux-query", ""), o.appendChild(a))) : a = Gr(), t ||= a?.sheet, !t) return;
660
+ if (r) return De(e, Kr(r, t), null, n);
661
+ const l = Yr(i, e);
662
+ let c = Zr(t, l, i, e);
663
+ return c === -1 && (c = t.insertRule(`${l} {}`)), t.cssRules?.[c];
467
664
  };
468
- function lr() {
469
- return D ?? null;
665
+ function Gr() {
666
+ return G ?? null;
470
667
  }
471
- var ct = (e, t) => typeof e?.then == "function" ? e?.then?.(t) : t(e), ur = /* @__PURE__ */ Symbol.for("dom.ts@blobURLMap"), B = globalThis[ur] ??= /* @__PURE__ */ new WeakMap(), cr = /* @__PURE__ */ Symbol.for("dom.ts@cacheMap"), $ = globalThis[cr] ??= /* @__PURE__ */ new Map(), fr = (e) => {
668
+ var Xr = (e) => {
472
669
  if (!e) return null;
473
- if ($.has(e)) return $.get(e);
670
+ if (B.has(e)) return B.get(e);
474
671
  if (e instanceof Blob || e instanceof File) {
475
- if (B.has(e)) return B.get(e);
672
+ if (j.has(e)) return j.get(e);
476
673
  const t = URL.createObjectURL(e);
477
- return B.set(e, t), $.set(t, t), t;
674
+ return j.set(e, t), B.set(t, t), t;
478
675
  }
479
676
  if (URL.canParse(e) || e?.trim?.()?.startsWith?.("./")) {
480
677
  const t = fetch(e?.replace?.("?url", "?raw"), {
@@ -483,22 +680,22 @@ var ct = (e, t) => typeof e?.then == "function" ? e?.then?.(t) : t(e), ur = /* @
483
680
  priority: "high"
484
681
  })?.then?.(async (r) => {
485
682
  const n = await r.blob(), o = URL.createObjectURL(n);
486
- return B.set(n, o), $.set(e, o), $.set(o, o), o;
683
+ return j.set(n, o), B.set(e, o), B.set(o, o), o;
487
684
  });
488
- return $.set(e, t), t;
685
+ return B.set(e, t), t;
489
686
  }
490
687
  if (typeof e == "string") {
491
688
  const t = new Blob([e], { type: "text/css" }), r = URL.createObjectURL(t);
492
- return B.set(t, r), $.set(r, r), r;
689
+ return j.set(t, r), B.set(r, r), r;
493
690
  }
494
691
  return e;
495
- }, N = /* @__PURE__ */ new Map(), G = /* @__PURE__ */ new WeakMap(), dr = (e) => {
692
+ }, Qr = (e) => {
496
693
  if (!e) return "";
497
- if (N.has(e)) return N.get(e) ?? "";
694
+ if (q.has(e)) return q.get(e) ?? "";
498
695
  if (e instanceof Blob || e instanceof File) {
499
- if (G.has(e)) return G.get(e) ?? "";
500
- const t = e?.text?.()?.then?.((r) => (G.set(e, r), r));
501
- return G.set(e, t), t;
696
+ if (ce.has(e)) return ce.get(e) ?? "";
697
+ const t = e?.text?.()?.then?.((r) => (ce.set(e, r), r));
698
+ return ce.set(e, t), t;
502
699
  }
503
700
  if (URL.canParse(e) || e?.trim?.()?.startsWith?.("./")) {
504
701
  const t = fetch(e?.replace?.("?url", "?raw"), {
@@ -507,35 +704,35 @@ var ct = (e, t) => typeof e?.then == "function" ? e?.then?.(t) : t(e), ur = /* @
507
704
  priority: "high"
508
705
  })?.then?.(async (r) => {
509
706
  const n = await r.text();
510
- return N.set(e, n), n;
707
+ return q.set(e, n), n;
511
708
  });
512
- return N.set(e, t), t;
709
+ return q.set(e, t), t;
513
710
  }
514
- return typeof e == "string" && N.set(e, e), e;
515
- }, pr = /* @__PURE__ */ Symbol.for("dom.ts@adoptedSelectorMap"), Ne = globalThis[pr] ??= /* @__PURE__ */ new Map(), hr = /* @__PURE__ */ Symbol.for("dom.ts@adoptedShadowSelectorMap"), Fe = globalThis[hr] ??= /* @__PURE__ */ new WeakMap(), yr = /* @__PURE__ */ Symbol.for("dom.ts@adoptedLayerMap"), ze = globalThis[yr] ??= /* @__PURE__ */ new Map(), Sr = /* @__PURE__ */ Symbol.for("dom.ts@adoptedShadowLayerMap"), J = globalThis[Sr] ??= /* @__PURE__ */ new WeakMap(), gn = (e, t = "ux-query", r = null) => {
516
- if (!e || !lt()) return null;
517
- const n = r instanceof ShadowRoot ? r : r?.getRootNode ? r.getRootNode({ composed: !0 }) : null, o = n instanceof ShadowRoot, s = o ? n.adoptedStyleSheets : typeof document < "u" ? document.adoptedStyleSheets : null;
711
+ return typeof e == "string" && q.set(e, e), e;
712
+ }, uo = (e, t = "ux-query", r = null) => {
713
+ if (!e || !W()) return null;
714
+ const n = Z(r) ? r : r?.getRootNode ? r.getRootNode({ composed: !0 }) : null, o = Z(n), s = o ? n.adoptedStyleSheets : typeof document < "u" ? document.adoptedStyleSheets : null;
518
715
  if (!s) return null;
519
716
  const i = `${t || ""}:${e}`;
520
717
  let a;
521
718
  if (o) {
522
- let u = Fe.get(n);
523
- u || (u = /* @__PURE__ */ new Map(), Fe.set(n, u)), a = u.get(i), a || (a = new CSSStyleSheet(), u.set(i, a), s.includes(a) || s.push(a));
719
+ let u = Ge.get(n);
720
+ u || (u = /* @__PURE__ */ new Map(), Ge.set(n, u)), a = u.get(i), a || (a = new CSSStyleSheet(), u.set(i, a), s.includes(a) || s.push(a));
524
721
  } else
525
- a = Ne.get(i), a || (a = new CSSStyleSheet(), Ne.set(i, a), s.includes(a) || s.push(a));
722
+ a = Ze.get(i), a || (a = new CSSStyleSheet(), Ze.set(i, a), s.includes(a) || s.push(a));
526
723
  if (t) {
527
724
  let u;
528
725
  if (o) {
529
- let d = J.get(n);
530
- d || (d = /* @__PURE__ */ new Map(), J.set(n, d)), u = d.get(t);
531
- } else u = ze.get(t);
532
- if (!u && (u = ut(a, t), u))
726
+ let d = ue.get(n);
727
+ d || (d = /* @__PURE__ */ new Map(), ue.set(n, d)), u = d.get(t);
728
+ } else u = Xe.get(t);
729
+ if (!u && (u = Tt(a, t), u))
533
730
  if (o) {
534
- let d = J.get(n);
535
- d || (d = /* @__PURE__ */ new Map(), J.set(n, d)), d.set(t, u);
536
- } else ze.set(t, u);
731
+ let d = ue.get(n);
732
+ d || (d = /* @__PURE__ */ new Map(), ue.set(n, d)), d.set(t, u);
733
+ } else Xe.set(t, u);
537
734
  if (u) {
538
- let d = Array.from(u.cssRules || []).findIndex((S) => S instanceof CSSStyleRule && S.selectorText?.trim?.() === e?.trim?.());
735
+ let d = Array.from(u.cssRules || []).findIndex((m) => m instanceof CSSStyleRule && m.selectorText?.trim?.() === e?.trim?.());
539
736
  if (d === -1) try {
540
737
  d = u.insertRule(`${e} {}`, u.cssRules.length);
541
738
  } catch {
@@ -550,36 +747,236 @@ var ct = (e, t) => typeof e?.then == "function" ? e?.then?.(t) : t(e), ur = /* @
550
747
  } catch {
551
748
  return null;
552
749
  }
553
- const f = a.cssRules[l];
554
- return f instanceof CSSStyleRule ? f : null;
555
- }, ft = /* @__PURE__ */ Symbol.for("lur.e@adoptedStyleSheetsCache");
556
- globalThis[ft] ??= /* @__PURE__ */ new WeakMap();
557
- var be = globalThis[ft], dt = /* @__PURE__ */ Symbol.for("lur.e@styleCache");
558
- globalThis[dt] ??= /* @__PURE__ */ new Map();
559
- var mr = globalThis[dt], pt = /* @__PURE__ */ Symbol.for("lur.e@styleElementCache");
560
- globalThis[pt] ??= /* @__PURE__ */ new WeakMap();
561
- var vr = globalThis[pt], De = "data-glit-host-css", Ee = (e) => {
750
+ const c = a.cssRules[l];
751
+ return c instanceof CSSStyleRule ? c : null;
752
+ }, ct = !1, X = "", $e = !1, Jr = (e) => {
753
+ const t = [...e?.length ? e : vr];
754
+ return [...new Set(t.filter(Boolean))];
755
+ }, ut = (e, t) => `${e}\0${[...t].sort().join(",")}`, ie = (e = typeof document < "u" ? document.documentElement : null, t) => {
756
+ if (!e || typeof getComputedStyle != "function") return "";
757
+ const r = getComputedStyle(e), n = [
758
+ e.getAttribute?.("data-theme") || e.getAttribute?.("theme") || "",
759
+ e.getAttribute?.("data-color-scheme") || e.getAttribute?.("color-scheme") || r.colorScheme || "",
760
+ r.getPropertyValue("--base-color").trim(),
761
+ r.getPropertyValue("--color-primary").trim()
762
+ ];
763
+ if (t && t !== e) {
764
+ const o = getComputedStyle(t);
765
+ n.push(t.getAttribute?.("data-theme") || "", o.getPropertyValue("--base-color").trim());
766
+ }
767
+ return n.join("|");
768
+ }, de = (e, t, r) => {
769
+ const n = t.getPropertyValue(r)?.trim();
770
+ n && e.set(r, n);
771
+ }, en = (e, t) => {
772
+ const r = /* @__PURE__ */ new Map(), n = new Set(t);
773
+ if (n.has("tokens") || n.has("colors")) for (let o = 0; o < e.length; o++) {
774
+ const s = e.item(o);
775
+ s.startsWith("--") && (n.has("tokens") || Lr(s)) && de(r, e, s);
776
+ }
777
+ if (n.has("colors")) for (const o of cr) de(r, e, o);
778
+ if (n.has("typography")) for (const o of ur) de(r, e, o);
779
+ if (n.has("motion")) for (const o of fr) de(r, e, o);
780
+ return r;
781
+ }, tn = (e, t, r = xt) => {
782
+ const n = [];
783
+ for (const [o, s] of t)
784
+ !o || !s || n.push(`${o}: ${s};`);
785
+ return n.length ? [Ne(r), Fe(r, `${e} {
786
+ ${n.join(`
787
+ `)}
788
+ }`)].filter(Boolean).join("") : "";
789
+ }, Ut = (e) => {
790
+ const t = e.getRootNode?.();
791
+ return typeof ShadowRoot < "u" && t instanceof ShadowRoot ? t.adoptedStyleSheets ?? null : typeof document < "u" ? document.adoptedStyleSheets ?? null : null;
792
+ }, It = (e, t) => {
793
+ const r = e.getRootNode?.();
794
+ try {
795
+ if (typeof ShadowRoot < "u" && r instanceof ShadowRoot) {
796
+ r.adoptedStyleSheets = t;
797
+ return;
798
+ }
799
+ typeof document < "u" && (document.adoptedStyleSheets = t);
800
+ } catch {
801
+ }
802
+ }, Bt = (e, t) => {
803
+ if (t.sheet && W()) {
804
+ const r = Ut(e);
805
+ if (!r) return;
806
+ if (r.includes(t.sheet)) {
807
+ t.adopted = !0;
808
+ return;
809
+ }
810
+ try {
811
+ r.push(t.sheet), t.adopted = !0;
812
+ return;
813
+ } catch {
814
+ It(e, [...r, t.sheet]), t.adopted = !0;
815
+ return;
816
+ }
817
+ }
818
+ t.styleEl && typeof document < "u" && (t.styleEl.isConnected || document.head?.append(t.styleEl), t.adopted = !0);
819
+ }, z = (e, t) => {
820
+ if (t.sheet && W()) {
821
+ const r = Ut(e);
822
+ if (r) {
823
+ const n = r.indexOf(t.sheet);
824
+ if (n !== -1) try {
825
+ r.splice(n, 1);
826
+ } catch {
827
+ It(e, r.filter((o) => o !== t.sheet));
828
+ }
829
+ }
830
+ }
831
+ t.styleEl?.remove(), t.adopted = !1;
832
+ }, Vt = (e, t) => {
833
+ if (e.cssText = t, !t) return !1;
834
+ if (e.sheet && W()) try {
835
+ return e.sheet.replaceSync(t), !0;
836
+ } catch (r) {
837
+ return console.warn("[style-lib] bake replaceSync failed", r), !1;
838
+ }
839
+ return e.styleEl ? (e.styleEl.textContent = t, !0) : !1;
840
+ }, ze = (e, t) => {
841
+ const r = L.get(e.cacheKey);
842
+ r?.timer && clearTimeout(r.timer);
843
+ const n = {
844
+ cssText: e.cssText,
845
+ fingerprint: e.fingerprint,
846
+ categories: e.categories,
847
+ selector: e.selector,
848
+ expires: Date.now() + t
849
+ };
850
+ t > 0 && typeof setTimeout == "function" && (n.timer = setTimeout(() => {
851
+ L.get(e.cacheKey) === n && L.delete(e.cacheKey);
852
+ }, t)), L.set(e.cacheKey, n);
853
+ }, _t = (e) => {
854
+ const t = L.get(e);
855
+ t?.timer && clearTimeout(t.timer), L.delete(e);
856
+ }, rn = () => {
857
+ for (const e of L.values()) e.timer && clearTimeout(e.timer);
858
+ L.clear();
859
+ }, nn = (e, t = _e) => {
860
+ const r = R.get(e);
861
+ r && (r.adopted && z(e, r), I.delete(e), r.cssText && ze(r, t));
862
+ }, on = (e, t = _e) => {
863
+ const r = R.get(e);
864
+ if (!r || !e.isConnected) return;
865
+ const n = ie(void 0, e), o = L.get(r.cacheKey);
866
+ if (!r.cssText && o && o.fingerprint === n && (Vt(r, o.cssText), r.fingerprint = o.fingerprint), !r.cssText || r.fingerprint !== n) {
867
+ We(e, {
868
+ categories: r.categories,
869
+ cacheMs: t,
870
+ layer: xt
871
+ });
872
+ return;
873
+ }
874
+ Bt(e, r), I.add(e);
875
+ }, Y = null, sn = () => (Y || typeof IntersectionObserver > "u" || (Y = new IntersectionObserver((e) => {
876
+ for (const t of e) {
877
+ const r = t.target;
878
+ R.has(r) && (t.isIntersecting && r.isConnected ? on(r) : nn(r));
879
+ }
880
+ }, { threshold: 0 })), Y), an = (e, t, r) => {
881
+ let n = R.get(e);
882
+ if (n)
883
+ return n.selector = t, n.categories = r, n.cacheKey = ut(t, r), n;
884
+ const o = W();
885
+ return n = {
886
+ sheet: o ? new CSSStyleSheet() : null,
887
+ styleEl: o || typeof document > "u" ? null : document.createElement("style"),
888
+ selector: t,
889
+ categories: r,
890
+ cssText: "",
891
+ fingerprint: "",
892
+ adopted: !1,
893
+ cacheKey: ut(t, r)
894
+ }, n.styleEl && (n.styleEl.dataset.uxBaked = "", n.styleEl.dataset.owner = "style-lib"), R.set(e, n), sn()?.observe(e), n;
895
+ }, ln = () => {
896
+ $e = !1;
897
+ const e = [...Ae];
898
+ Ae.clear();
899
+ for (const t of e)
900
+ !t.isConnected || !R.has(t) || We(t);
901
+ }, Nt = (e) => {
902
+ Ae.add(e), !$e && ($e = !0, queueMicrotask(ln));
903
+ }, we = (e = "theme") => {
904
+ const t = ie();
905
+ if (!(e !== "force" && t === X && X)) {
906
+ X = t, rn();
907
+ for (const r of [...I]) {
908
+ const n = R.get(r);
909
+ if (!n) {
910
+ I.delete(r);
911
+ continue;
912
+ }
913
+ z(r, n), n.cssText = "", n.fingerprint = "", Nt(r);
914
+ }
915
+ }
916
+ }, cn = () => {
917
+ if (!(ct || typeof document > "u")) {
918
+ ct = !0, X = ie(), Ot((e) => {
919
+ if (ie() !== X) {
920
+ we("style-tree");
921
+ return;
922
+ }
923
+ e instanceof HTMLElement && R.has(e) && Nt(e);
924
+ });
925
+ try {
926
+ new MutationObserver(() => we("theme-attr")).observe(document.documentElement, {
927
+ attributes: !0,
928
+ attributeFilter: [...dr]
929
+ });
930
+ } catch {
931
+ }
932
+ try {
933
+ matchMedia?.("(prefers-color-scheme: dark)")?.addEventListener?.("change", () => we("color-scheme"));
934
+ } catch {
935
+ }
936
+ }
937
+ }, We = (e, t = {}) => {
938
+ if (!e || e.nodeType !== 1 || typeof getComputedStyle != "function") return null;
939
+ cn();
940
+ const r = Jr(t.categories), n = t.layer || "ux-baked", o = t.cacheMs ?? 3e4, s = $t(e), i = ie(void 0, e), a = an(e, s, r);
941
+ a.fingerprint = i;
942
+ const l = L.get(a.cacheKey);
943
+ let c = "";
944
+ if (l && l.fingerprint === i && l.cssText) c = l.cssText;
945
+ else {
946
+ const u = getComputedStyle(e);
947
+ c = tn(s, en(u, r), n);
948
+ }
949
+ return c ? (Vt(a, c), ze(a, o), Pr(e) ? (Bt(e, a), I.add(e)) : (z(e, a), I.delete(e)), a) : (z(e, a), I.delete(e), a);
950
+ }, fo = (e, t = !0) => {
951
+ if (!e) return;
952
+ const r = R.get(e);
953
+ r && (z(e, r), I.delete(e), Y?.unobserve(e), t && r.cssText ? ze(r, _e) : _t(r.cacheKey), R.delete(e));
954
+ }, po = (e, t) => {
955
+ if (!e) return null;
956
+ const r = R.get(e);
957
+ return r && (z(e, r), r.cssText = "", _t(r.cacheKey)), We(e, t ?? (r ? { categories: r.categories } : {}));
958
+ }, ho = (e) => e ? R.get(e) : void 0, je = (e) => {
562
959
  const t = e?.shadowRoot;
563
960
  if (!t) return;
564
- const r = be.get(e) || [];
565
- for (const n of r) H(n);
961
+ const r = Le.get(e) || [];
962
+ for (const n of r) oe(n);
566
963
  try {
567
964
  const n = t.adoptedStyleSheets || [];
568
965
  t.adoptedStyleSheets = [...r.filter((o) => !n.includes(o)), .../* @__PURE__ */ new Set([...n])];
569
966
  } catch {
570
967
  }
571
- }, ae = (e, t) => {
572
- let r = be.get(e);
573
- r || be.set(e, r = []), t && r.indexOf(t) < 0 && r.push(t), H(t), Ee(e);
574
- }, j = (e, t) => {
968
+ }, be = (e, t) => {
969
+ let r = Le.get(e);
970
+ r || Le.set(e, r = []), t && r.indexOf(t) < 0 && r.push(t), oe(t), je(e);
971
+ }, Q = (e, t) => {
575
972
  const r = e?.shadowRoot;
576
973
  if (!r || !t) return null;
577
- let n = r.querySelector?.(`style[${De}]`);
578
- return n ? n.textContent !== t && (n.textContent = t) : (n = A(t, r, ""), n && n.setAttribute(De, "")), n;
579
- }, xn = (e = typeof document < "u" ? document : null) => {
974
+ let n = r.querySelector?.(`style[${Je}]`);
975
+ return n ? n.textContent !== t && (n.textContent = t) : (n = O(t, r, ""), n && n.setAttribute(Je, "")), n;
976
+ }, yo = (e = typeof document < "u" ? document : null) => {
580
977
  if (!e) return;
581
978
  const t = (n) => {
582
- n?.shadowRoot && (j(n, ht(n)), Ee(n));
979
+ n?.shadowRoot && (Q(n, Ft(n)), je(n));
583
980
  };
584
981
  e.nodeType === 1 && t(e);
585
982
  const r = (n) => {
@@ -595,29 +992,29 @@ var vr = globalThis[pt], De = "data-glit-host-css", Ee = (e) => {
595
992
  }
596
993
  };
597
994
  r(e);
598
- }, ht = (e) => {
995
+ }, Ft = (e) => {
599
996
  const t = e?.styles;
600
997
  if (typeof t == "string") return t;
601
998
  if (typeof t == "function") try {
602
999
  const r = t.call(e);
603
- return typeof r == "string" ? r : U(r);
1000
+ return typeof r == "string" ? r : _(r);
604
1001
  } catch {
605
1002
  return null;
606
1003
  }
607
- return U(t);
608
- }, br = (e) => {
609
- e && (e.styles != null && yt(e, e.styles), Ee(e), j(e, ht(e)));
610
- }, le = /* @__PURE__ */ new WeakSet(), ue = [], ce = !1, wr = (e) => {
611
- !e || !(e instanceof Element) || le.has(e) || (le.add(e), ue.push(e), !ce && (ce = !0, queueMicrotask(() => {
612
- ce = !1;
613
- const t = ue;
614
- ue = [];
1004
+ return _(t);
1005
+ }, un = (e) => {
1006
+ e && (e.styles != null && Dt(e, e.styles), je(e), Q(e, Ft(e)));
1007
+ }, xe = [], Ce = !1, fn = (e) => {
1008
+ !e || !(e instanceof Element) || me.has(e) || (me.add(e), xe.push(e), !Ce && (Ce = !0, queueMicrotask(() => {
1009
+ Ce = !1;
1010
+ const t = xe;
1011
+ xe = [];
615
1012
  for (const r of t)
616
- le.delete(r), r.isConnected && br(r);
1013
+ me.delete(r), r.isConnected && un(r);
617
1014
  })));
618
1015
  };
619
- er((e) => wr(e));
620
- var yt = (e, t) => {
1016
+ Ot((e) => fn(e));
1017
+ var Dt = (e, t) => {
621
1018
  if (!t) return null;
622
1019
  let r = t;
623
1020
  if (typeof t == "function") try {
@@ -627,31 +1024,31 @@ var yt = (e, t) => {
627
1024
  return console.warn("Error calling styles function:", a), null;
628
1025
  }
629
1026
  if (r && typeof CSSStyleSheet < "u" && r instanceof CSSStyleSheet)
630
- return ae(e, r), j(e, U(r));
1027
+ return be(e, r), Q(e, _(r));
631
1028
  if (r instanceof Promise)
632
1029
  return r.then((a) => {
633
- a instanceof CSSStyleSheet ? ae(e, a) : a != null && yt(e, a);
1030
+ a instanceof CSSStyleSheet ? be(e, a) : a != null && Dt(e, a);
634
1031
  }).catch((a) => {
635
1032
  console.warn("Error loading adopted stylesheet:", a);
636
1033
  }), null;
637
1034
  if (typeof r == "string" || r instanceof Blob || r instanceof File) {
638
- const a = it(r, "");
1035
+ const a = Lt(r, "");
639
1036
  if (a) {
640
- const l = (f) => {
641
- ae(e, f);
1037
+ const l = (c) => {
1038
+ be(e, c);
642
1039
  };
643
- return a instanceof Promise ? (a.then((f) => {
644
- l(f), j(e, typeof r == "string" ? r : U(f));
645
- }).catch((f) => {
646
- console.warn("Error loading adopted stylesheet:", f);
647
- }), null) : (l(a), j(e, typeof r == "string" ? r : U(a)));
1040
+ return a instanceof Promise ? (a.then((c) => {
1041
+ l(c), Q(e, typeof r == "string" ? r : _(c));
1042
+ }).catch((c) => {
1043
+ console.warn("Error loading adopted stylesheet:", c);
1044
+ }), null) : (l(a), Q(e, typeof r == "string" ? r : _(a)));
648
1045
  }
649
1046
  }
650
- const n = typeof t == "function" || typeof t == "object" ? vr : mr, o = n.get(t);
1047
+ const n = typeof t == "function" || typeof t == "object" ? ir : or, o = n.get(t);
651
1048
  let s = o?.styleElement, i = o?.vars;
652
1049
  if (!o) {
653
1050
  let a = "", l = [];
654
- typeof r == "string" ? a = r || "" : typeof r == "object" && r != null && (r instanceof HTMLStyleElement ? s = r : (a = typeof r.css == "string" ? r.css : typeof r == "string" ? r : String(r), l = r?.props ?? l, i = r?.vars ?? i)), !s && a && (s = A(a, e, "ux-layer")), n.set(t, {
1051
+ typeof r == "string" ? a = r || "" : typeof r == "object" && r != null && (r instanceof HTMLStyleElement ? s = r : (a = typeof r.css == "string" ? r.css : typeof r == "string" ? r : String(r), l = r?.props ?? l, i = r?.vars ?? i)), !s && a && (s = O(a, e, "ux-layer")), n.set(t, {
655
1052
  css: a,
656
1053
  props: l,
657
1054
  vars: i,
@@ -659,209 +1056,74 @@ var yt = (e, t) => {
659
1056
  });
660
1057
  }
661
1058
  return s;
662
- }, gr = /* @__PURE__ */ Symbol.for("lur.e@bank"), Cn = globalThis[gr] ??= new Ge(), xr = /* @__PURE__ */ Symbol.for("lur.e@elMap"), St = globalThis[xr] ??= new Ge(), Cr = /* @__PURE__ */ Symbol.for("lur.e@alives"), kr = globalThis[Cr] ??= new FinalizationRegistry((e) => e?.()), je = /* @__PURE__ */ Symbol.for("@behavior"), mt = (e) => !!e && typeof e == "object" && "ref" in e && typeof e?.unbind == "function", Mr = (e, t, r = "value") => {
663
- const n = O(e), o = O(t), s = (a) => {
664
- Se(o, "value", R(n)?.[r ?? "value"] ?? W(R(o)));
1059
+ }, dn = /* @__PURE__ */ Symbol.for("lur.e@bank"), mo = globalThis[dn] ??= new St(), pn = /* @__PURE__ */ Symbol.for("lur.e@elMap"), zt = globalThis[pn] ??= new St(), hn = /* @__PURE__ */ Symbol.for("lur.e@alives"), yn = globalThis[hn] ??= new FinalizationRegistry((e) => e?.()), ft = /* @__PURE__ */ Symbol.for("@behavior"), Wt = (e) => !!e && typeof e == "object" && "ref" in e && typeof e?.unbind == "function", mn = (e, t, r = "value") => {
1060
+ const n = N(e), o = N(t), s = (a) => {
1061
+ Re(o, "value", $(n)?.[r ?? "value"] ?? ee($(o)));
665
1062
  }, i = {
666
1063
  click: s,
667
1064
  input: s,
668
1065
  change: s
669
1066
  };
670
- return s?.({ target: e }), Le?.(e, "addEventListener", i), Se(o, "value", e?.[r ?? "value"] ?? W(R(t))), () => Le?.(e, "removeEventListener", i);
671
- }, Er = (e, t, r = "") => {
672
- O(e);
673
- const n = O(t), o = te(r);
674
- return Pt(e, o, (i) => {
1067
+ return s?.({ target: e }), Ke?.(e, "addEventListener", i), Re(o, "value", e?.[r ?? "value"] ?? ee($(t))), () => Ke?.(e, "removeEventListener", i);
1068
+ }, Sn = (e, t, r = "") => {
1069
+ N(e);
1070
+ const n = N(t), o = se(r);
1071
+ return rr(e, o, (i) => {
675
1072
  if (i.type == "attributes" && i.attributeName == o) {
676
- const a = i?.target?.getAttribute?.(i.attributeName), l = R(n), f = W(l);
677
- $e(i.oldValue, a) && l != null && (typeof l == "object" || typeof l == "function") && ($e(f, a) || f == null) && Se(l, "value", a);
1073
+ const a = i?.target?.getAttribute?.(i.attributeName), l = $(n), c = ee(l);
1074
+ Ye(i.oldValue, a) && l != null && (typeof l == "object" || typeof l == "function") && (Ye(c, a) || c == null) && Re(l, "value", a);
678
1075
  }
679
1076
  });
680
- }, Tr = (e, t, r) => {
681
- const n = St.get([e, t]);
1077
+ }, vn = (e, t, r) => {
1078
+ const n = zt.get([e, t]);
682
1079
  if (n) {
683
1080
  const o = n[r]?.[1];
684
1081
  delete n[r], o?.();
685
1082
  }
686
- }, Ar = (e, t, r, n) => {
687
- const o = St.getOrInsertComputed([e, t], () => ({}));
1083
+ }, gn = (e, t, r, n) => {
1084
+ const o = zt.getOrInsertComputed([e, t], () => ({}));
688
1085
  return o?.[r]?.[1]?.(), o[r] = n, !0;
689
- }, Rr = (e, t, r, n, o, s) => {
690
- const i = mt(t) ? t : null;
1086
+ }, wn = (e, t, r, n, o, s) => {
1087
+ const i = Wt(t) ? t : null;
691
1088
  i && (i.bind?.(), t = i.ref);
692
- const a = O(e);
693
- if (e = R(a), !e || !(e instanceof Node || e?.element instanceof Node)) return;
1089
+ const a = N(e);
1090
+ if (e = $(a), !e || !(e instanceof Node || e?.element instanceof Node)) return;
694
1091
  let l;
695
1092
  l && l?.abort?.(), l = new AbortController();
696
- const f = O(t);
1093
+ const c = N(t);
697
1094
  n?.(e, r, t);
698
- const u = Rt?.([t, "value"], (x, w, p) => {
699
- const y = R(f), v = R(o), C = R(a), h = W(y) ?? W(x);
700
- (!v || v?.[r] == y) && (typeof y?.[je] == "function" ? y?.[je]?.((c = x) => n(C, r, h), [
701
- x,
1095
+ const u = Jt?.([t, "value"], (C, w, p) => {
1096
+ const y = $(c), v = $(o), k = $(a), h = ee(y) ?? ee(C);
1097
+ (!v || v?.[r] == y) && (typeof y?.[ft] == "function" ? y?.[ft]?.((f = C) => n(k, r, h), [
1098
+ C,
702
1099
  r,
703
1100
  p
704
1101
  ], [
705
1102
  l?.signal,
706
1103
  r,
707
1104
  a
708
- ]) : n(C, r, h));
1105
+ ]) : n(k, r, h));
709
1106
  });
710
1107
  let d = null;
711
- typeof s == "boolean" && s && (n == Lt && (d = Er(e, t, r)), n == $t && (d = Mr(e, t, r))), typeof s == "function" && (d = s(e, r, t));
712
- const S = () => {
713
- d?.disconnect?.(), d != null && typeof d == "function" && d?.(), i?.unbind?.(), u?.(), l?.abort?.(), Tr?.(e, n, r);
1108
+ typeof s == "boolean" && s && (n == er && (d = Sn(e, t, r)), n == tr && (d = mn(e, t, r))), typeof s == "function" && (d = s(e, r, t));
1109
+ const m = () => {
1110
+ d?.disconnect?.(), d != null && typeof d == "function" && d?.(), i?.unbind?.(), u?.(), l?.abort?.(), vn?.(e, n, r);
714
1111
  };
715
- if (At(t, Symbol.dispose, S), kr.register(e, S), !Ar(e, n, r, [t, S])) return S;
716
- }, we = (e, t, r, n, o, s) => (n(e, t, mt(r) ? r.ref : r), Rr(e, r, t, n, o, s)), Lr = (e, t) => e.style.removeProperty(te(t)), qe = (e, t, r) => {
1112
+ if (Qt(t, Symbol.dispose, m), yn.register(e, m), !gn(e, n, r, [t, m])) return m;
1113
+ }, Ue = (e, t, r, n, o, s) => (n(e, t, Wt(r) ? r.ref : r), wn(e, r, t, n, o, s)), bn = (e, t) => e.style.removeProperty(se(t)), dt = (e, t, r) => {
717
1114
  const n = e?.style;
718
- return !t || typeof t != "string" || !e || !n || kt(r, () => {
719
- Et(r) || Ce(r) || Tt(r) ? re(e, t, r) : r == null && Lr(e, t);
1115
+ return !t || typeof t != "string" || !e || !n || Yt(r, () => {
1116
+ Gt(r) || Ve(r) || Xt(r) ? he(e, t, r) : r == null && bn(e, t);
720
1117
  }), e;
721
- }, Z = (e, t = 0) => {
722
- if (typeof e == "number") return e;
723
- if (!e) return t;
724
- const r = String(e).trim();
725
- return r.endsWith("ms") ? parseFloat(r) : r.endsWith("s") ? parseFloat(r) * 1e3 : parseFloat(r) || t;
726
- }, $r = (e) => e === void 0 ? 1 : e === -1 || e === 1 / 0 ? 1 / 0 : Math.max(1, Math.floor(e)), Pr = (e) => e.replace(/[A-Z]/g, (t) => `-${t.toLowerCase()}`), Te = (e) => {
727
- const t = [];
728
- if (typeof e.properties == "string") {
729
- const r = e.properties?.trim?.()?.split?.(";");
730
- t.push(...Array.from(r || [])?.map?.((n) => {
731
- if (n?.includes?.(":")) {
732
- const o = (n?.split?.(":") ?? [])?.slice?.(1, -1)?.join?.(":");
733
- return { [n?.[0]?.trim?.()]: o?.trim?.() };
734
- }
735
- return null;
736
- })?.filter?.((n) => n != null) || []);
737
- }
738
- return Array.from(Array.isArray(e.properties) ? e.properties : t);
739
- }, Ur = (e, t) => {
740
- const r = /* @__PURE__ */ new Map();
741
- let n = "";
742
- for (let s = 0; s < e.length; s++)
743
- n += e[s], s < t.length && (n += `__SLOT_${s}__`);
744
- const o = n.split(";").map((s) => s.trim()).filter(Boolean);
745
- for (const s of o) {
746
- const i = s.indexOf(":");
747
- if (i === -1) continue;
748
- const a = s.slice(0, i).trim(), l = s.slice(i + 1).trim(), f = /__SLOT_(\d+)__/.exec(l);
749
- if (!f) continue;
750
- const u = t[parseInt(f[1], 10)];
751
- if (!Array.isArray(u)) throw new TypeError(`A\`${a}\` expects an array of values, got ${typeof u}`);
752
- r.set(a, {
753
- property: a,
754
- values: u
755
- });
756
- }
757
- return { properties: r };
758
- }, Ae = (e) => {
759
- const t = [], r = [];
760
- let n = !1;
761
- for (let o = 0; o < e.length; o++) {
762
- const s = e[o];
763
- Re(s) ? (n = !0, r.push(o), t.push(s.value)) : (I(s), t.push(s));
764
- }
765
- return {
766
- resolved: t,
767
- hasReactive: n,
768
- reactiveIndices: r
769
- };
770
- }, ge = (e) => {
771
- const t = e?.offsets, r = Te(e);
772
- if (r.length === 0) throw new Error("No animatable properties found in A template");
773
- const n = Math.max(...r.map((i) => i.values.length)), o = (t?.length > 1 ? t : null) || Array.from({ length: n }, (i, a) => a / (n - 1)), s = [];
774
- for (let i = 0; i < n; i++) {
775
- const a = { offset: o[i] ?? i / (n - 1) };
776
- for (const l of r) {
777
- const { resolved: f } = Ae(l.values), u = Pr(l.property);
778
- let d = f[Math.min(i, f.length - 1)];
779
- I(d) && (d = String(d)), a[u] = d;
780
- }
781
- s.push(a);
782
- }
783
- return s;
784
- }, vt = (e) => {
785
- const t = Z(e.duration ?? 300), r = Z(e.delay ?? 0), n = $r(e.iterationCount);
786
- return {
787
- duration: t,
788
- delay: r,
789
- composite: e.composite || "replace",
790
- iterations: n === "Infinity" ? 1 / 0 : n,
791
- fill: e.fillMode ?? "none",
792
- direction: e.direction ?? "normal",
793
- easing: typeof e.easing == "string" ? e.easing : "linear",
794
- timeline: e.timeline
795
- };
796
- }, Or = (e, t) => {
797
- const r = Te(t), n = [], o = ge(t), s = vt(t), i = e.animate(o, s);
798
- for (const l of r) {
799
- const { hasReactive: f, reactiveIndices: u } = Ae(l.values);
800
- if (f)
801
- for (const d of u) {
802
- const S = l.values[d], x = we(e, `--anim-${l.property}-${d}`, S, () => {
803
- const w = ge(t), p = i.currentTime;
804
- i.effect = new KeyframeEffect(e, w, s), p !== null && (i.currentTime = p);
805
- });
806
- n.push(x);
807
- }
808
- }
809
- return {
810
- animation: i,
811
- cleanup: () => {
812
- i.cancel(), n.forEach((l) => l());
813
- }
814
- };
815
- }, kn = (e, ...t) => Ur(e, t), Q = (e, t, r) => {
816
- if (Te(t).some((a) => {
817
- const { hasReactive: l } = Ae(a.values);
818
- return l;
819
- })) return Or(e, t);
820
- const n = ge(t), o = vt(t), s = e.animate(n, o);
821
- return {
822
- animation: s,
823
- cleanup: () => {
824
- s.cancel();
825
- }
826
- };
827
- }, Mn = (e, t) => {
828
- const r = /* @__PURE__ */ new Map();
829
- for (const [n, o] of Object.entries(t.properties)) {
830
- if (!Array.isArray(o)) throw new TypeError(`animate() expects arrays of values, got ${typeof o} for ${n}`);
831
- r.set(n, {
832
- property: n,
833
- values: o
834
- });
835
- }
836
- return Q(e, { ...t }, r);
837
- }, En = (e) => (t) => Q(t, e), Tn = async (e, t) => {
838
- for (const r of t) {
839
- const { animation: n } = Q(e, r);
840
- await n.finished;
841
- }
842
- }, An = (e, t) => {
843
- const r = t.map((o) => Q(e, o)), n = () => {
844
- r.forEach((o) => o.cleanup());
845
- };
846
- return {
847
- animations: r.map((o) => o.animation),
848
- cleanup: n
849
- };
850
- }, Rn = (e, t, r = 100) => e.map((n, o) => {
851
- const s = Z(t?.delay ?? 0) + o * r;
852
- return Q(n, {
853
- ...t,
854
- delay: s
855
- });
856
- }), bt = /* @__PURE__ */ Symbol.for("fest.animatable"), Vr = (e) => e === -1 || e === 1 / 0 ? 1 / 0 : Math.max(1, e ?? 1), Ir = 0, Ln = (e = {}) => ({
1118
+ }, xn = 0, So = (e = {}) => ({
857
1119
  kind: "scroll",
858
1120
  ...e
859
- }), $n = (e = {}) => ({
1121
+ }), vo = (e = {}) => ({
860
1122
  kind: "view",
861
1123
  ...e
862
- }), fe = (e) => e != null && typeof e == "object" && e.kind === "scroll", We = (e) => e != null && typeof e == "object" && e.kind === "view", Br = class {
863
- [bt] = !0;
864
- id = Ir++;
1124
+ }), Cn = class {
1125
+ [Ct] = !0;
1126
+ id = xn++;
865
1127
  #n;
866
1128
  #e;
867
1129
  #r;
@@ -879,7 +1141,7 @@ var yt = (e, t) => {
879
1141
  }
880
1142
  #f(e, t) {
881
1143
  const r = e.ownerDocument.defaultView ?? globalThis;
882
- if (fe(t)) {
1144
+ if (Se(t)) {
883
1145
  const o = r.ScrollTimeline;
884
1146
  return typeof o != "function" ? null : new o({
885
1147
  source: t.source === "nearest" || t.source == null ? this.#a(e) : this.#s(t.source, e),
@@ -896,7 +1158,7 @@ var yt = (e, t) => {
896
1158
  #d(e, t, r, n) {
897
1159
  const o = this.#f(e, n);
898
1160
  if (!o) return this.#p(e, t, r, n);
899
- const s = this.#c(), i = e.animate(this.#u(r), {
1161
+ const s = this.#u(), i = e.animate(this.#c(r), {
900
1162
  ...s,
901
1163
  duration: "auto",
902
1164
  delay: 0,
@@ -912,33 +1174,33 @@ var yt = (e, t) => {
912
1174
  this.#n = e, this.#e = t, this.#r = this.#l(e[0]);
913
1175
  }
914
1176
  #p(e, t, r, n) {
915
- const s = e.animate(this.#u(r), {
916
- ...this.#c(),
1177
+ const s = e.animate(this.#c(r), {
1178
+ ...this.#u(),
917
1179
  duration: 1e4,
918
1180
  delay: 0,
919
1181
  iterations: 1,
920
1182
  fill: "both"
921
1183
  });
922
1184
  s.pause(), t.animation = s;
923
- const i = fe(n) ? n.source === "nearest" || n.source == null ? this.#a(e) : this.#s(n.source, e) : this.#a(e);
1185
+ const i = Se(n) ? n.source === "nearest" || n.source == null ? this.#a(e) : this.#s(n.source, e) : this.#a(e);
924
1186
  let a = 0;
925
1187
  const l = () => {
926
- if (We(n)) {
927
- const x = i === document.scrollingElement ? {
1188
+ if (it(n)) {
1189
+ const C = i === document.scrollingElement ? {
928
1190
  top: 0,
929
1191
  height: innerHeight
930
- } : i.getBoundingClientRect(), w = e.getBoundingClientRect(), p = x.height + w.height;
931
- return Math.min(1, Math.max(0, (x.top + x.height - w.top) / p));
1192
+ } : i.getBoundingClientRect(), w = e.getBoundingClientRect(), p = C.height + w.height;
1193
+ return Math.min(1, Math.max(0, (C.top + C.height - w.top) / p));
932
1194
  }
933
- const d = i, S = d.scrollHeight - d.clientHeight;
934
- return S > 0 ? d.scrollTop / S : 0;
935
- }, f = () => {
1195
+ const d = i, m = d.scrollHeight - d.clientHeight;
1196
+ return m > 0 ? d.scrollTop / m : 0;
1197
+ }, c = () => {
936
1198
  cancelAnimationFrame(a), a = requestAnimationFrame(() => {
937
1199
  s.currentTime = l() * 1e4;
938
1200
  });
939
1201
  }, u = i === document.scrollingElement ? window : i;
940
- return u.addEventListener("scroll", f, { passive: !0 }), f(), () => {
941
- cancelAnimationFrame(a), u.removeEventListener("scroll", f), s.cancel();
1202
+ return u.addEventListener("scroll", c, { passive: !0 }), c(), () => {
1203
+ cancelAnimationFrame(a), u.removeEventListener("scroll", c), s.cancel();
942
1204
  };
943
1205
  }
944
1206
  get value() {
@@ -974,7 +1236,7 @@ var yt = (e, t) => {
974
1236
  #l(e) {
975
1237
  return e != null && typeof e == "object" && "value" in e ? e.value : e;
976
1238
  }
977
- #u(e) {
1239
+ #c(e) {
978
1240
  const t = this.#n.map((s) => this.#l(s)), r = t.length, n = this.#e.offsets, o = this.#e.easing;
979
1241
  return t.map((s, i) => {
980
1242
  const a = { offset: n?.[i] ?? (r > 1 ? i / (r - 1) : 0) };
@@ -983,13 +1245,13 @@ var yt = (e, t) => {
983
1245
  return e.mode === "property" && e.unit != null && typeof s == "number" && (l = `${s}${e.unit}`), e.mode === "custom-property" && typeof s != "string" && (l = String(s)), a[e.target] = l, a;
984
1246
  });
985
1247
  }
986
- #c() {
1248
+ #u() {
987
1249
  const e = this.#e;
988
1250
  return {
989
- duration: Z(e.duration, 300),
990
- delay: Z(e.delay, 0),
1251
+ duration: te(e.duration, 300),
1252
+ delay: te(e.delay, 0),
991
1253
  endDelay: e.endDelay ?? 0,
992
- iterations: Vr(e.iterations),
1254
+ iterations: Ar(e.iterations),
993
1255
  direction: e.direction ?? "normal",
994
1256
  fill: e.fill ?? "both",
995
1257
  composite: e.composite,
@@ -1004,11 +1266,11 @@ var yt = (e, t) => {
1004
1266
  }
1005
1267
  }, n = this.#e.trigger ?? "mount";
1006
1268
  let o;
1007
- if (fe(n) || We(n)) o = this.#d(e, r, t, n);
1269
+ if (Se(n) || it(n)) o = this.#d(e, r, t, n);
1008
1270
  else {
1009
1271
  const s = () => {
1010
1272
  r.animation?.cancel();
1011
- const i = e.animate(this.#u(t), this.#c());
1273
+ const i = e.animate(this.#c(t), this.#u());
1012
1274
  return r.animation = i, this.#h(i, t), i;
1013
1275
  };
1014
1276
  o = this.#y(e, r, s);
@@ -1036,11 +1298,11 @@ var yt = (e, t) => {
1036
1298
  if (n === "manual") return () => {
1037
1299
  };
1038
1300
  if (n === "hover" || n === "focus") {
1039
- const a = n === "hover" ? "pointerenter" : "focusin", l = n === "hover" ? "pointerleave" : "focusout", f = () => s(), u = () => {
1301
+ const a = n === "hover" ? "pointerenter" : "focusin", l = n === "hover" ? "pointerleave" : "focusout", c = () => s(), u = () => {
1040
1302
  o && i();
1041
1303
  };
1042
- return e.addEventListener(a, f), e.addEventListener(l, u), () => {
1043
- e.removeEventListener(a, f), e.removeEventListener(l, u);
1304
+ return e.addEventListener(a, c), e.addEventListener(l, u), () => {
1305
+ e.removeEventListener(a, c), e.removeEventListener(l, u);
1044
1306
  };
1045
1307
  }
1046
1308
  if (n === "click") {
@@ -1055,12 +1317,12 @@ var yt = (e, t) => {
1055
1317
  return r(), () => {
1056
1318
  };
1057
1319
  const a = new IntersectionObserver((l) => {
1058
- for (const f of l) f.isIntersecting ? s() : o && t.animation && i();
1320
+ for (const c of l) c.isIntersecting ? s() : o && t.animation && i();
1059
1321
  }, this.#e.intersection);
1060
1322
  return a.observe(e), () => a.disconnect();
1061
1323
  }
1062
1324
  if (n != null && typeof n == "object" && "value" in n) {
1063
- const a = (f) => f ? s() : i();
1325
+ const a = (c) => c ? s() : i();
1064
1326
  a(n.value);
1065
1327
  const l = typeof n.subscribe == "function" ? n.subscribe(a) : null;
1066
1328
  return () => l?.();
@@ -1098,158 +1360,28 @@ var yt = (e, t) => {
1098
1360
  }))), Promise.all(e).then(() => {
1099
1361
  });
1100
1362
  }
1101
- }, Pn = (e, t) => new Br(e, t), Nr = (e) => e != null && typeof e == "object" && e[bt] === !0, Fr = (e) => Array.isArray(e) && typeof e[0] == "function", zr = 0, Dr = /* @__PURE__ */ new Set([
1102
- "%",
1103
- "px",
1104
- "cm",
1105
- "mm",
1106
- "q",
1107
- "in",
1108
- "pc",
1109
- "pt",
1110
- "em",
1111
- "ex",
1112
- "ch",
1113
- "cap",
1114
- "ic",
1115
- "lh",
1116
- "rem",
1117
- "rex",
1118
- "rch",
1119
- "rcap",
1120
- "ric",
1121
- "rlh",
1122
- "vw",
1123
- "vh",
1124
- "vi",
1125
- "vb",
1126
- "vmin",
1127
- "vmax",
1128
- "svw",
1129
- "svh",
1130
- "svi",
1131
- "svb",
1132
- "svmin",
1133
- "svmax",
1134
- "lvw",
1135
- "lvh",
1136
- "lvi",
1137
- "lvb",
1138
- "lvmin",
1139
- "lvmax",
1140
- "dvw",
1141
- "dvh",
1142
- "dvi",
1143
- "dvb",
1144
- "dvmin",
1145
- "dvmax",
1146
- "cqw",
1147
- "cqh",
1148
- "cqi",
1149
- "cqb",
1150
- "cqmin",
1151
- "cqmax",
1152
- "deg",
1153
- "grad",
1154
- "rad",
1155
- "turn",
1156
- "s",
1157
- "ms",
1158
- "hz",
1159
- "khz",
1160
- "dpi",
1161
- "dpcm",
1162
- "dppx",
1163
- "x",
1164
- "fr"
1165
- ]), wt = (e) => {
1166
- const t = typeof e == "string" ? e.trim() : "";
1167
- if (!t) return !0;
1168
- for (const r of t.split(";")) {
1169
- const n = r.trim();
1170
- if (!n) continue;
1171
- const o = n.indexOf(":");
1172
- if (o < 0 || n.slice(o + 1).trim().length > 0) return !1;
1173
- }
1174
- return !0;
1175
- }, jr = (e) => {
1176
- if (e == null) return;
1177
- const t = e.getAttribute("style");
1178
- t != null && wt(t) && (e.style.cssText = "", e.removeAttribute("style"));
1179
- }, qr = (e, t) => {
1180
- if (wt(t)) {
1181
- e.style.cssText = "", e.removeAttribute("style");
1182
- return;
1183
- }
1184
- e.style.cssText = t;
1185
- }, I = (e) => {
1186
- if (e == null || typeof e != "object") return !1;
1187
- try {
1188
- const t = globalThis.CSSStyleValue;
1189
- if (typeof t == "function" && e instanceof t) return !0;
1190
- for (let r = e; r; r = Object.getPrototypeOf(r)) if (r?.constructor?.name === "CSSStyleValue") return !0;
1191
- } catch {
1192
- }
1193
- return !1;
1194
- }, Re = (e) => {
1195
- if (e == null || typeof e != "object" || I(e)) return !1;
1196
- try {
1197
- return "value" in e;
1198
- } catch {
1199
- return !1;
1200
- }
1201
- }, He = (e) => e == null || typeof e != "object" && typeof e != "function", K = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), _e = (e, t) => new RegExp(`var\\(\\s*${K(t)}\\s*\\)`).test(e), Wr = (e) => {
1202
- const t = /^(%|[a-zA-Z]+)/.exec(e);
1203
- if (!t) return null;
1204
- const r = t[0], n = r.toLowerCase();
1205
- return Dr.has(n) ? {
1206
- authored: r,
1207
- normalized: n,
1208
- length: r.length
1209
- } : null;
1210
- }, Hr = (e) => {
1211
- switch (e.toLowerCase()) {
1212
- case "%":
1213
- return "percent";
1214
- case "q":
1215
- return "Q";
1216
- case "hz":
1217
- return "Hz";
1218
- case "khz":
1219
- return "kHz";
1220
- case "fr":
1221
- return "flex";
1222
- default:
1223
- return e.toLowerCase();
1224
- }
1225
- }, _r = (e) => e.toLowerCase() === "%" ? "percent" : e.toLowerCase(), Y = (e, t) => e?.[t] ?? globalThis?.[t], M = (e, t, r) => {
1226
- const n = e?.CSS, o = Hr(t), s = n?.[o];
1227
- if (typeof s == "function") return s.call(n, r);
1228
- const i = Y(e, "CSSUnitValue");
1229
- if (typeof i != "function") throw new TypeError(`Typed OM does not support CSS unit "${t}"`);
1230
- return new i(r, _r(t));
1231
- }, q = (e) => {
1363
+ }, go = (e, t) => new Cn(e, t), kn = (e) => e != null && typeof e == "object" && e[Ct] === !0, En = 0, J = (e) => {
1232
1364
  const t = e.value?.value, r = typeof t == "number" ? t : Number(t);
1233
1365
  if (!Number.isFinite(r)) throw new TypeError(`Reactive CSS value "${String(t)}" is not finite`);
1234
1366
  return r;
1235
- }, Zr = (e) => {
1367
+ }, Mn = (e) => {
1236
1368
  const t = Number(e?.value);
1237
1369
  return Number.isFinite(t) ? t : 0;
1238
- }, Ze = (e, t) => {
1370
+ }, pt = (e, t) => {
1239
1371
  let r = e;
1240
- for (const n of t) r = r.replace(new RegExp(`var\\(\\s*${K(n.marker)}\\s*\\)`, "g"), String(n.value));
1372
+ for (const n of t) r = r.replace(new RegExp(`var\\(\\s*${ne(n.marker)}\\s*\\)`, "g"), String(n.value));
1241
1373
  return r;
1242
- }, de = (e, t) => {
1243
- const r = K(t);
1374
+ }, ke = (e, t) => {
1375
+ const r = ne(t);
1244
1376
  return new RegExp(`^var\\(\\s*${r}\\s*\\)$`).test(e.trim());
1245
- }, Ke = (e, t) => {
1377
+ }, ht = (e, t) => {
1246
1378
  let r = e;
1247
1379
  return r != null && typeof r == "object" && "value" in r && !(r instanceof Element) && (r = r.value), r == null || r === "" ? t ? `0${t}` : "0" : t != null && typeof r == "number" ? `${r}${t}` : String(r);
1248
- }, pe = (e, t, r) => {
1380
+ }, Ee = (e, t, r) => {
1249
1381
  if (!r) return !1;
1250
- const n = K(t), o = K(r);
1382
+ const n = ne(t), o = ne(r);
1251
1383
  return new RegExp(`^calc\\(\\s*var\\(\\s*${n}\\s*\\)\\s*\\*\\s*1${o}\\s*\\)$`, "i").test(e.trim());
1252
- }, Kr = (e, t, r, n) => {
1384
+ }, Tn = (e, t, r, n) => {
1253
1385
  if (typeof t?.parseAll == "function") {
1254
1386
  const o = t.parseAll(r, n);
1255
1387
  e.set(r, ...o);
@@ -1260,7 +1392,7 @@ var yt = (e, t) => {
1260
1392
  return;
1261
1393
  }
1262
1394
  e.set(r, n);
1263
- }, gt = (e) => {
1395
+ }, jt = (e) => {
1264
1396
  const t = [];
1265
1397
  let r = 0;
1266
1398
  for (; r < e.length; ) {
@@ -1280,8 +1412,8 @@ var yt = (e, t) => {
1280
1412
  const i = /^(?:\d*\.\d+|\d+\.?\d*)(?:[eE][+-]?\d+)?/.exec(n);
1281
1413
  if (i) {
1282
1414
  r += i[0].length;
1283
- const f = /^(%|[a-zA-Z]+)/.exec(e.slice(r)), u = f?.[0] ?? null;
1284
- f && (r += f[0].length), t.push({
1415
+ const c = /^(%|[a-zA-Z]+)/.exec(e.slice(r)), u = c?.[0] ?? null;
1416
+ c && (r += c[0].length), t.push({
1285
1417
  kind: "number",
1286
1418
  value: Number(i[0]),
1287
1419
  unit: u == null ? null : u.toLowerCase()
@@ -1307,7 +1439,7 @@ var yt = (e, t) => {
1307
1439
  throw new SyntaxError(`Unsupported Typed OM numeric token near "${n}"`);
1308
1440
  }
1309
1441
  return t;
1310
- }, xt = class {
1442
+ }, qt = class {
1311
1443
  tokens;
1312
1444
  win;
1313
1445
  reactiveByMarker;
@@ -1342,7 +1474,7 @@ var yt = (e, t) => {
1342
1474
  return t?.kind === "symbol" && t.value === e;
1343
1475
  }
1344
1476
  createMath(e, ...t) {
1345
- const r = Y(this.win, e);
1477
+ const r = D(this.win, e);
1346
1478
  if (typeof r != "function") throw new TypeError(`${e} is not supported`);
1347
1479
  return new r(...t);
1348
1480
  }
@@ -1379,7 +1511,7 @@ var yt = (e, t) => {
1379
1511
  const s = this.current();
1380
1512
  if (s?.kind === "number" && s.value === 1 && typeof s.unit == "string" && (!t.multipliedByUnit || t.multipliedByUnit === s.unit.toLowerCase())) {
1381
1513
  this.consume();
1382
- const i = M(this.win, s.unit.toLowerCase(), q(t));
1514
+ const i = M(this.win, s.unit.toLowerCase(), J(t));
1383
1515
  return this.leaves.push({
1384
1516
  slot: t,
1385
1517
  value: i
@@ -1387,7 +1519,7 @@ var yt = (e, t) => {
1387
1519
  }
1388
1520
  this.index = o;
1389
1521
  }
1390
- const n = M(this.win, "number", q(t));
1522
+ const n = M(this.win, "number", J(t));
1391
1523
  return this.leaves.push({
1392
1524
  slot: t,
1393
1525
  value: n
@@ -1427,312 +1559,312 @@ var yt = (e, t) => {
1427
1559
  }
1428
1560
  throw new SyntaxError(`Unsupported Typed OM function "${e}"`);
1429
1561
  }
1430
- }, Yr = (e, t, r, n) => {
1562
+ }, Rn = (e, t, r, n) => {
1431
1563
  const o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map();
1432
1564
  for (const i of r) o.set(i.marker, i);
1433
1565
  for (const i of n) s.set(i.marker, i);
1434
- return new xt(gt(e), t, o, s).parse();
1435
- }, Qr = (e) => e.trim().toLowerCase() === "transform", Xr = (e, t, r, n) => {
1436
- const o = gt(e), s = [], i = [], a = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map();
1566
+ return new qt(jt(e), t, o, s).parse();
1567
+ }, An = (e) => e.trim().toLowerCase() === "transform", Ln = (e, t, r, n) => {
1568
+ const o = jt(e), s = [], i = [], a = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map();
1437
1569
  for (const h of r) a.set(h.marker, h);
1438
1570
  for (const h of n) l.set(h.marker, h);
1439
- const f = () => M(t, "px", 0), u = () => M(t, "number", 1);
1571
+ const c = () => M(t, "px", 0), u = () => M(t, "number", 1);
1440
1572
  let d = 0;
1441
- const S = () => o[d], x = () => {
1573
+ const m = () => o[d], C = () => {
1442
1574
  const h = o[d];
1443
1575
  if (!h) throw new SyntaxError("Unexpected end of transform expression");
1444
1576
  return d++, h;
1445
1577
  }, w = (h) => {
1446
- const c = x();
1447
- if (c.kind !== "symbol" || c.value !== h) throw new SyntaxError(`Expected "${h}"`);
1578
+ const f = C();
1579
+ if (f.kind !== "symbol" || f.value !== h) throw new SyntaxError(`Expected "${h}"`);
1448
1580
  }, p = () => {
1449
1581
  const h = d;
1450
- let c = 0;
1582
+ let f = 0;
1451
1583
  for (; d < o.length; ) {
1452
- const E = o[d];
1453
- if (E.kind === "symbol" && E.value === "(") {
1454
- c++, d++;
1584
+ const T = o[d];
1585
+ if (T.kind === "symbol" && T.value === "(") {
1586
+ f++, d++;
1455
1587
  continue;
1456
1588
  }
1457
- if (E.kind === "symbol" && E.value === ")") {
1458
- if (c === 0) break;
1459
- c--, d++;
1589
+ if (T.kind === "symbol" && T.value === ")") {
1590
+ if (f === 0) break;
1591
+ f--, d++;
1460
1592
  continue;
1461
1593
  }
1462
- if (E.kind === "symbol" && E.value === "," && c === 0) break;
1594
+ if (T.kind === "symbol" && T.value === "," && f === 0) break;
1463
1595
  d++;
1464
1596
  }
1465
- const b = o.slice(h, d);
1466
- if (b.length === 0) throw new SyntaxError("Empty transform function argument");
1467
- const m = new xt(b, t, a, l).parse();
1468
- return s.push(...m.leaves), m.root;
1597
+ const g = o.slice(h, d);
1598
+ if (g.length === 0) throw new SyntaxError("Empty transform function argument");
1599
+ const S = new qt(g, t, a, l).parse();
1600
+ return s.push(...S.leaves), S.root;
1469
1601
  }, y = () => {
1470
1602
  const h = [];
1471
- if (w("("), !(S()?.kind === "symbol" && S()?.value === ")"))
1472
- for (h.push(p()); S()?.kind === "symbol" && S()?.value === ","; )
1473
- x(), h.push(p());
1603
+ if (w("("), !(m()?.kind === "symbol" && m()?.value === ")"))
1604
+ for (h.push(p()); m()?.kind === "symbol" && m()?.value === ","; )
1605
+ C(), h.push(p());
1474
1606
  return w(")"), h;
1475
- }, v = (h, c) => {
1476
- const b = (m) => {
1477
- const E = Y(t, m);
1478
- if (typeof E != "function") throw new TypeError(`${m} is not supported`);
1479
- return E;
1607
+ }, v = (h, f) => {
1608
+ const g = (S) => {
1609
+ const T = D(t, S);
1610
+ if (typeof T != "function") throw new TypeError(`${S} is not supported`);
1611
+ return T;
1480
1612
  };
1481
1613
  switch (h) {
1482
1614
  case "translate": {
1483
- const m = b("CSSTranslate");
1484
- if (c.length === 1) return new m(c[0], f());
1485
- if (c.length === 2) return new m(c[0], c[1]);
1486
- if (c.length === 3) return new m(c[0], c[1], c[2]);
1615
+ const S = g("CSSTranslate");
1616
+ if (f.length === 1) return new S(f[0], c());
1617
+ if (f.length === 2) return new S(f[0], f[1]);
1618
+ if (f.length === 3) return new S(f[0], f[1], f[2]);
1487
1619
  throw new SyntaxError("translate() expects 1..3 args");
1488
1620
  }
1489
1621
  case "translatex":
1490
- return new (b("CSSTranslate"))(c[0], f());
1622
+ return new (g("CSSTranslate"))(f[0], c());
1491
1623
  case "translatey":
1492
- return new (b("CSSTranslate"))(f(), c[0]);
1624
+ return new (g("CSSTranslate"))(c(), f[0]);
1493
1625
  case "translatez":
1494
- return new (b("CSSTranslate"))(f(), f(), c[0]);
1626
+ return new (g("CSSTranslate"))(c(), c(), f[0]);
1495
1627
  case "translate3d":
1496
- if (c.length !== 3) throw new SyntaxError("translate3d() expects 3 args");
1497
- return new (b("CSSTranslate"))(c[0], c[1], c[2]);
1628
+ if (f.length !== 3) throw new SyntaxError("translate3d() expects 3 args");
1629
+ return new (g("CSSTranslate"))(f[0], f[1], f[2]);
1498
1630
  case "scale": {
1499
- const m = b("CSSScale");
1500
- if (c.length === 1) return new m(c[0], c[0]);
1501
- if (c.length === 2) return new m(c[0], c[1]);
1502
- if (c.length === 3) return new m(c[0], c[1], c[2]);
1631
+ const S = g("CSSScale");
1632
+ if (f.length === 1) return new S(f[0], f[0]);
1633
+ if (f.length === 2) return new S(f[0], f[1]);
1634
+ if (f.length === 3) return new S(f[0], f[1], f[2]);
1503
1635
  throw new SyntaxError("scale() expects 1..3 args");
1504
1636
  }
1505
1637
  case "scalex":
1506
- return new (b("CSSScale"))(c[0], u());
1638
+ return new (g("CSSScale"))(f[0], u());
1507
1639
  case "scaley":
1508
- return new (b("CSSScale"))(u(), c[0]);
1640
+ return new (g("CSSScale"))(u(), f[0]);
1509
1641
  case "scalez":
1510
- return new (b("CSSScale"))(u(), u(), c[0]);
1642
+ return new (g("CSSScale"))(u(), u(), f[0]);
1511
1643
  case "scale3d":
1512
- if (c.length !== 3) throw new SyntaxError("scale3d() expects 3 args");
1513
- return new (b("CSSScale"))(c[0], c[1], c[2]);
1644
+ if (f.length !== 3) throw new SyntaxError("scale3d() expects 3 args");
1645
+ return new (g("CSSScale"))(f[0], f[1], f[2]);
1514
1646
  case "rotate": {
1515
- const m = b("CSSRotate");
1516
- if (c.length === 1) return new m(c[0]);
1517
- if (c.length === 4) return new m(c[0], c[1], c[2], c[3]);
1647
+ const S = g("CSSRotate");
1648
+ if (f.length === 1) return new S(f[0]);
1649
+ if (f.length === 4) return new S(f[0], f[1], f[2], f[3]);
1518
1650
  throw new SyntaxError("rotate() expects 1 or 4 args");
1519
1651
  }
1520
1652
  case "rotatex":
1521
- return new (b("CSSRotate"))(u(), M(t, "number", 0), M(t, "number", 0), c[0]);
1653
+ return new (g("CSSRotate"))(u(), M(t, "number", 0), M(t, "number", 0), f[0]);
1522
1654
  case "rotatey":
1523
- return new (b("CSSRotate"))(M(t, "number", 0), u(), M(t, "number", 0), c[0]);
1655
+ return new (g("CSSRotate"))(M(t, "number", 0), u(), M(t, "number", 0), f[0]);
1524
1656
  case "rotatez":
1525
- return new (b("CSSRotate"))(M(t, "number", 0), M(t, "number", 0), u(), c[0]);
1657
+ return new (g("CSSRotate"))(M(t, "number", 0), M(t, "number", 0), u(), f[0]);
1526
1658
  case "rotate3d":
1527
- if (c.length !== 4) throw new SyntaxError("rotate3d() expects 4 args");
1528
- return new (b("CSSRotate"))(c[0], c[1], c[2], c[3]);
1659
+ if (f.length !== 4) throw new SyntaxError("rotate3d() expects 4 args");
1660
+ return new (g("CSSRotate"))(f[0], f[1], f[2], f[3]);
1529
1661
  case "skew": {
1530
- const m = b("CSSSkew");
1531
- if (c.length === 1) return new m(c[0], M(t, "deg", 0));
1532
- if (c.length === 2) return new m(c[0], c[1]);
1662
+ const S = g("CSSSkew");
1663
+ if (f.length === 1) return new S(f[0], M(t, "deg", 0));
1664
+ if (f.length === 2) return new S(f[0], f[1]);
1533
1665
  throw new SyntaxError("skew() expects 1..2 args");
1534
1666
  }
1535
1667
  case "skewx":
1536
- return new (b("CSSSkewX"))(c[0]);
1668
+ return new (g("CSSSkewX"))(f[0]);
1537
1669
  case "skewy":
1538
- return new (b("CSSSkewY"))(c[0]);
1670
+ return new (g("CSSSkewY"))(f[0]);
1539
1671
  case "perspective":
1540
- return new (b("CSSPerspective"))(c[0]);
1672
+ return new (g("CSSPerspective"))(f[0]);
1541
1673
  default:
1542
1674
  throw new SyntaxError(`Unsupported transform function "${h}"`);
1543
1675
  }
1544
1676
  };
1545
1677
  for (; d < o.length; ) {
1546
- const h = x();
1678
+ const h = C();
1547
1679
  if (h.kind !== "identifier") throw new SyntaxError("Expected a transform function name");
1548
- const c = y();
1549
- i.push(v(h.value, c));
1680
+ const f = y();
1681
+ i.push(v(h.value, f));
1550
1682
  }
1551
1683
  if (i.length === 0) throw new SyntaxError("Empty transform list");
1552
- const C = Y(t, "CSSTransformValue");
1553
- if (typeof C != "function") throw new TypeError("CSSTransformValue is not supported");
1684
+ const k = D(t, "CSSTransformValue");
1685
+ if (typeof k != "function") throw new TypeError("CSSTransformValue is not supported");
1554
1686
  return {
1555
- root: new C(i),
1687
+ root: new k(i),
1556
1688
  leaves: s
1557
1689
  };
1558
- }, Ye = (e, t, r, n, o) => Qr(e) ? Xr(t, r, n, o) : Yr(t, r, n, o), he = (e, t) => {
1690
+ }, yt = (e, t, r, n, o) => An(e) ? Ln(t, r, n, o) : Rn(t, r, n, o), Me = (e, t) => {
1559
1691
  for (const r of t) {
1560
1692
  const n = e.get(r.slot.marker);
1561
1693
  n ? n.push(r) : e.set(r.slot.marker, [r]);
1562
1694
  }
1563
- }, ye = (e, t, r) => e.map((n) => ({
1695
+ }, Te = (e, t, r) => e.map((n) => ({
1564
1696
  slot: n.slot,
1565
1697
  value: n.value,
1566
1698
  property: t,
1567
1699
  root: r
1568
- })), Gr = (e, t, r, n, o, s) => {
1700
+ })), Pn = (e, t, r, n, o, s) => {
1569
1701
  const i = e.ownerDocument.createElement("span");
1570
- i.style.cssText = t, qr(e, "");
1571
- const a = e, l = a.attributeStyleMap ?? a.styleMap, f = e.ownerDocument.defaultView ?? globalThis, u = f?.CSSStyleValue ?? globalThis.CSSStyleValue, d = /* @__PURE__ */ new Map(), S = /* @__PURE__ */ new Set(), x = [], w = /* @__PURE__ */ new Set();
1702
+ i.style.cssText = t, Ur(e, "");
1703
+ const a = e, l = a.attributeStyleMap ?? a.styleMap, c = e.ownerDocument.defaultView ?? globalThis, u = c?.CSSStyleValue ?? globalThis.CSSStyleValue, d = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Set(), C = [], w = /* @__PURE__ */ new Set();
1572
1704
  for (const p of s) {
1573
1705
  let y = null;
1574
1706
  for (let v = 0; v < i.style.length; v++) {
1575
- const C = i.style.item(v), h = i.style.getPropertyValue(C);
1576
- if (de(h, p.marker)) {
1707
+ const k = i.style.item(v), h = i.style.getPropertyValue(k);
1708
+ if (ke(h, p.marker)) {
1577
1709
  y = {
1578
1710
  mode: "property",
1579
- target: C
1580
- }, e.style.setProperty(C, Ke(p.value.value)), w.add(C);
1711
+ target: k
1712
+ }, e.style.setProperty(k, ht(p.value.value)), w.add(k);
1581
1713
  break;
1582
1714
  }
1583
- if (pe(h, p.marker, p.multipliedByUnit)) {
1715
+ if (Ee(h, p.marker, p.multipliedByUnit)) {
1584
1716
  y = {
1585
1717
  mode: "property",
1586
- target: C,
1718
+ target: k,
1587
1719
  unit: p.multipliedByUnit
1588
- }, e.style.setProperty(C, Ke(p.value.value, p.multipliedByUnit)), w.add(C);
1720
+ }, e.style.setProperty(k, ht(p.value.value, p.multipliedByUnit)), w.add(k);
1589
1721
  break;
1590
1722
  }
1591
1723
  }
1592
1724
  if (!y) {
1593
1725
  const v = Number(p.value.value) || 0;
1594
- tn(f, p.marker, v), e.style.setProperty(p.marker, String(v)), y = {
1726
+ Un(c, p.marker, v), e.style.setProperty(p.marker, String(v)), y = {
1595
1727
  mode: "custom-property",
1596
1728
  target: p.marker
1597
1729
  };
1598
1730
  }
1599
- x.push(p.value.attach(e, y));
1731
+ C.push(p.value.attach(e, y));
1600
1732
  }
1601
1733
  for (let p = 0; p < i.style.length; p++) {
1602
1734
  const y = i.style.item(p);
1603
1735
  if (w.has(y)) continue;
1604
- const v = i.style.getPropertyValue(y), C = i.style.getPropertyPriority(y), h = r.filter((g) => _e(v, g.marker)), c = n.filter((g) => _e(v, g.marker));
1605
- if (h.length === 0 && c.length === 0) {
1606
- e.style.setProperty(y, v, C);
1736
+ const v = i.style.getPropertyValue(y), k = i.style.getPropertyPriority(y), h = r.filter((b) => at(v, b.marker)), f = n.filter((b) => at(v, b.marker));
1737
+ if (h.length === 0 && f.length === 0) {
1738
+ e.style.setProperty(y, v, k);
1607
1739
  continue;
1608
1740
  }
1609
- const b = l?.set && !C && !y.startsWith("--");
1610
- let m = !1;
1611
- if (b && c.length > 0) try {
1612
- const g = c.length === 1 && h.length === 0 ? c[0] : null;
1613
- if (g && pe(v, g.marker, g.multipliedByUnit)) {
1614
- const k = M(f, g.multipliedByUnit, q(g));
1615
- l.set(y, k), he(d, ye([{
1616
- slot: g,
1617
- value: k
1618
- }], y, k)), m = !0;
1619
- } else if (g && de(v, g.marker)) {
1620
- const k = M(f, "number", q(g));
1621
- l.set(y, k), he(d, ye([{
1622
- slot: g,
1623
- value: k
1624
- }], y, k)), m = !0;
1741
+ const g = l?.set && !k && !y.startsWith("--");
1742
+ let S = !1;
1743
+ if (g && f.length > 0) try {
1744
+ const b = f.length === 1 && h.length === 0 ? f[0] : null;
1745
+ if (b && Ee(v, b.marker, b.multipliedByUnit)) {
1746
+ const E = M(c, b.multipliedByUnit, J(b));
1747
+ l.set(y, E), Me(d, Te([{
1748
+ slot: b,
1749
+ value: E
1750
+ }], y, E)), S = !0;
1751
+ } else if (b && ke(v, b.marker)) {
1752
+ const E = M(c, "number", J(b));
1753
+ l.set(y, E), Me(d, Te([{
1754
+ slot: b,
1755
+ value: E
1756
+ }], y, E)), S = !0;
1625
1757
  } else {
1626
- const k = Ye(y, v, f, c, h);
1627
- l.set(y, k.root), he(d, ye(k.leaves, y, k.root)), m = !0;
1758
+ const E = yt(y, v, c, f, h);
1759
+ l.set(y, E.root), Me(d, Te(E.leaves, y, E.root)), S = !0;
1628
1760
  }
1629
1761
  } catch {
1630
1762
  }
1631
- if (m) continue;
1632
- if (b && c.length === 0 && h.length > 0) try {
1633
- const g = h.length === 1 ? h[0] : null;
1634
- if (g && de(v, g.marker))
1635
- l.set(y, g.value), m = !0;
1636
- else if (g && pe(v, g.marker, g.multipliedByUnit)) {
1637
- const k = Y(f, "CSSMathProduct");
1638
- if (typeof k != "function") throw new TypeError("CSSMathProduct is not supported");
1639
- const Ct = new k(g.value, M(f, g.multipliedByUnit, 1));
1640
- l.set(y, Ct), m = !0;
1763
+ if (S) continue;
1764
+ if (g && f.length === 0 && h.length > 0) try {
1765
+ const b = h.length === 1 ? h[0] : null;
1766
+ if (b && ke(v, b.marker))
1767
+ l.set(y, b.value), S = !0;
1768
+ else if (b && Ee(v, b.marker, b.multipliedByUnit)) {
1769
+ const E = D(c, "CSSMathProduct");
1770
+ if (typeof E != "function") throw new TypeError("CSSMathProduct is not supported");
1771
+ const Kt = new E(b.value, M(c, b.multipliedByUnit, 1));
1772
+ l.set(y, Kt), S = !0;
1641
1773
  } else {
1642
1774
  try {
1643
- const k = Ye(y, v, f, [], h);
1644
- l.set(y, k.root);
1775
+ const E = yt(y, v, c, [], h);
1776
+ l.set(y, E.root);
1645
1777
  } catch {
1646
- const k = Ze(v, h);
1647
- Kr(l, u, y, k);
1778
+ const E = pt(v, h);
1779
+ Tn(l, u, y, E);
1648
1780
  }
1649
- m = !0;
1781
+ S = !0;
1650
1782
  }
1651
1783
  } catch {
1652
1784
  }
1653
- if (m) continue;
1654
- const E = Ze(v, h);
1655
- e.style.setProperty(y, E, C);
1656
- for (const g of c) S.add(g.marker);
1785
+ if (S) continue;
1786
+ const T = pt(v, h);
1787
+ e.style.setProperty(y, T, k);
1788
+ for (const b of f) m.add(b.marker);
1657
1789
  }
1658
1790
  for (const p of n) {
1659
- const y = d.get(p.marker) ?? [], v = S.has(p.marker);
1791
+ const y = d.get(p.marker) ?? [], v = m.has(p.marker);
1660
1792
  if (y.length === 0 && !v) continue;
1661
- const C = we(e, p.marker, p.value, function(...h) {
1793
+ const k = Ue(e, p.marker, p.value, function(...h) {
1662
1794
  if (y.length > 0) try {
1663
- const c = q(p), b = /* @__PURE__ */ new Map();
1664
- for (const m of y)
1665
- m.value.value = c, b.set(m.property, m.root);
1666
- if (l?.set) for (const [m, E] of b) l.set(m, E);
1795
+ const f = J(p), g = /* @__PURE__ */ new Map();
1796
+ for (const S of y)
1797
+ S.value.value = f, g.set(S.property, S.root);
1798
+ if (l?.set) for (const [S, T] of g) l.set(S, T);
1667
1799
  } catch {
1668
1800
  }
1669
- v && qe.apply(this, h);
1801
+ v && dt.apply(this, h);
1670
1802
  });
1671
- x.push(C);
1803
+ C.push(k);
1672
1804
  }
1673
- for (const p of S) {
1805
+ for (const p of m) {
1674
1806
  if (n.some((v) => v.marker === p)) continue;
1675
1807
  const y = o.get(p);
1676
- y != null && x.push(we(e, p, y, qe));
1808
+ y != null && C.push(Ue(e, p, y, dt));
1677
1809
  }
1678
- return jr(e), () => {
1679
- for (const p of x) p?.();
1810
+ return $r(e), () => {
1811
+ for (const p of C) p?.();
1680
1812
  };
1681
- }, F = (e) => {
1813
+ }, H = (e) => {
1682
1814
  const [t, r, n] = e, o = document.createElement("div");
1683
1815
  return t(o), o.style.cssText;
1684
- }, xe = (e, ...t) => {
1685
- const r = zr++, n = [], o = /* @__PURE__ */ new Map(), s = [], i = [], a = [], l = [], f = new Array(e.length).fill(0);
1816
+ }, Ie = (e, ...t) => {
1817
+ const r = En++, n = [], o = /* @__PURE__ */ new Map(), s = [], i = [], a = [], l = [], c = new Array(e.length).fill(0);
1686
1818
  for (let d = 0; d < e.length; d++) {
1687
- if (a.push(e[d].slice(f[d])), d >= t.length) continue;
1688
- const S = t[d], x = e[d + 1] ?? "", w = Wr(x);
1689
- if (I(S)) {
1819
+ if (a.push(e[d].slice(c[d])), d >= t.length) continue;
1820
+ const m = t[d], C = e[d + 1] ?? "", w = Ir(C);
1821
+ if (P(m)) {
1690
1822
  const p = `--fest-typed-${r}-${s.length}`;
1691
1823
  s.push({
1692
1824
  marker: p,
1693
- value: S,
1825
+ value: m,
1694
1826
  multipliedByUnit: w?.normalized
1695
- }), w ? (a.push(`calc(var(${p}) * 1${w.authored})`), f[d + 1] += w.length) : a.push(`var(${p})`);
1827
+ }), w ? (a.push(`calc(var(${p}) * 1${w.authored})`), c[d + 1] += w.length) : a.push(`var(${p})`);
1696
1828
  continue;
1697
1829
  }
1698
- if (Nr(S)) {
1830
+ if (kn(m)) {
1699
1831
  const p = `--fest-anim-${r}-${l.length}`;
1700
- w ? (a.push(`calc(var(${p}) * 1${w.authored})`), f[d + 1] += w.length) : a.push(`var(${p})`), n.push(`@property ${p} { syntax: "<number>"; initial-value: ${Number(S.value) || 0}; inherits: false; };`), l.push({
1832
+ w ? (a.push(`calc(var(${p}) * 1${w.authored})`), c[d + 1] += w.length) : a.push(`var(${p})`), n.push(`@property ${p} { syntax: "<number>"; initial-value: ${Number(m.value) || 0}; inherits: false; };`), l.push({
1701
1833
  marker: p,
1702
- value: S,
1834
+ value: m,
1703
1835
  multipliedByUnit: w?.normalized
1704
1836
  });
1705
1837
  continue;
1706
1838
  }
1707
- if (Re(S)) {
1839
+ if (ae(m)) {
1708
1840
  const p = `--fest-ref-${r}-${i.length}`;
1709
1841
  i.push({
1710
1842
  marker: p,
1711
- value: S,
1843
+ value: m,
1712
1844
  multipliedByUnit: w?.normalized
1713
- }), w ? (a.push(`calc(var(${p}) * 1${w.authored})`), f[d + 1] += w.length) : a.push(`var(${p})`);
1714
- const y = Zr(S);
1715
- n.push(`@property ${p} { syntax: "<number>"; initial-value: ${y}; inherits: true; };`), o.set(p, S);
1845
+ }), w ? (a.push(`calc(var(${p}) * 1${w.authored})`), c[d + 1] += w.length) : a.push(`var(${p})`);
1846
+ const y = Mn(m);
1847
+ n.push(`@property ${p} { syntax: "<number>"; initial-value: ${y}; inherits: true; };`), o.set(p, m);
1716
1848
  continue;
1717
1849
  }
1718
- typeof S != "object" && typeof S != "function" && S != null && String(S).trim() !== "" && a.push(String(S));
1850
+ typeof m != "object" && typeof m != "function" && m != null && String(m).trim() !== "" && a.push(String(m));
1719
1851
  }
1720
1852
  const u = [
1721
- (d) => Gr(d, a.join(""), s, i, o, l),
1853
+ (d) => Pn(d, a.join(""), s, i, o, l),
1722
1854
  n,
1723
1855
  o
1724
1856
  ];
1725
- return u[Symbol.toStringTag] = () => F(u), u[Symbol.toPrimitive] = (d) => d === "string" ? F(u) : u[0], u.toString = () => F(u), u.valueOf = () => F(u), Object.defineProperty(u, "cssText", {
1726
- get: () => F(u),
1857
+ return u[Symbol.toStringTag] = () => H(u), u[Symbol.toPrimitive] = (d) => d === "string" ? H(u) : u[0], u.toString = () => H(u), u.valueOf = () => H(u), Object.defineProperty(u, "cssText", {
1858
+ get: () => H(u),
1727
1859
  set: (d) => {
1728
1860
  console.log("set cssText", d);
1729
- const [S, x, w] = u, p = document.createElement("div");
1730
- S(p), p.style.cssText = d;
1861
+ const [m, C, w] = u, p = document.createElement("div");
1862
+ m(p), p.style.cssText = d;
1731
1863
  },
1732
1864
  configurable: !0,
1733
1865
  enumerable: !0
1734
1866
  }), u;
1735
- }, Un = (e, ...t) => xe(e, ...t), Jr = (e, t) => {
1867
+ }, wo = (e, ...t) => Ie(e, ...t), On = (e, t) => {
1736
1868
  const r = [], n = [], o = /#\{(\d+)\}/g;
1737
1869
  let s = 0, i;
1738
1870
  for (; (i = o.exec(e)) != null; ) {
@@ -1743,34 +1875,34 @@ var yt = (e, t) => {
1743
1875
  strings: r,
1744
1876
  values: n
1745
1877
  });
1746
- }, en = (e, t) => {
1878
+ }, $n = (e, t) => {
1747
1879
  let r = e[0] ?? "";
1748
1880
  for (let n = 0; n < t.length; n++) {
1749
1881
  const o = t[n];
1750
1882
  o != null && (r += String(o)), r += e[n + 1] ?? "";
1751
1883
  }
1752
1884
  return r;
1753
- }, On = (e, t) => {
1754
- const r = Jr(e, t);
1885
+ }, bo = (e, t) => {
1886
+ const r = On(e, t);
1755
1887
  if (!r) return null;
1756
1888
  const { strings: n, values: o } = r;
1757
- return o.length === 1 && (n[0] ?? "").trim() === "" && (n[1] ?? "").trim() === "" && !He(o[0]) && !I(o[0]) ? Fr(o[0]) ? {
1889
+ return o.length === 1 && (n[0] ?? "").trim() === "" && (n[1] ?? "").trim() === "" && !st(o[0]) && !P(o[0]) ? Or(o[0]) ? {
1758
1890
  kind: "template",
1759
1891
  binding: o[0]
1760
1892
  } : {
1761
1893
  kind: "direct",
1762
1894
  value: o[0]
1763
- } : o.some((s) => Re(s) || I(s)) ? {
1895
+ } : o.some((s) => ae(s) || P(s)) ? {
1764
1896
  kind: "template",
1765
- binding: xe(n, ...o)
1766
- } : o.every(He) ? {
1897
+ binding: Ie(n, ...o)
1898
+ } : o.every(st) ? {
1767
1899
  kind: "static",
1768
- cssText: en(n, o)
1900
+ cssText: $n(n, o)
1769
1901
  } : {
1770
1902
  kind: "template",
1771
- binding: xe(n, ...o)
1903
+ binding: Ie(n, ...o)
1772
1904
  };
1773
- }, Vn = (e, t) => {
1905
+ }, xo = (e, t) => {
1774
1906
  const r = Array.isArray(t) ? t[0] : t;
1775
1907
  if (typeof r != "function") return () => {
1776
1908
  };
@@ -1782,7 +1914,7 @@ var yt = (e, t) => {
1782
1914
  }
1783
1915
  n?.unbind?.();
1784
1916
  };
1785
- }, Qe = /* @__PURE__ */ new Set(), tn = (e, t, r) => {
1917
+ }, Un = (e, t, r) => {
1786
1918
  if (!Qe.has(t)) {
1787
1919
  Qe.add(t);
1788
1920
  try {
@@ -1795,88 +1927,298 @@ var yt = (e, t) => {
1795
1927
  } catch {
1796
1928
  }
1797
1929
  }
1798
- };
1930
+ }, qe = (e) => {
1931
+ const t = [];
1932
+ if (typeof e.properties == "string") {
1933
+ const r = e.properties?.trim?.()?.split?.(";");
1934
+ t.push(...Array.from(r || [])?.map?.((n) => {
1935
+ if (n?.includes?.(":")) {
1936
+ const o = (n?.split?.(":") ?? [])?.slice?.(1, -1)?.join?.(":");
1937
+ return { [n?.[0]?.trim?.()]: o?.trim?.() };
1938
+ }
1939
+ return null;
1940
+ })?.filter?.((n) => n != null) || []);
1941
+ }
1942
+ return Array.from(Array.isArray(e.properties) ? e.properties : t);
1943
+ }, In = (e, t) => {
1944
+ const r = /* @__PURE__ */ new Map();
1945
+ let n = "";
1946
+ for (let s = 0; s < e.length; s++)
1947
+ n += e[s], s < t.length && (n += `__SLOT_${s}__`);
1948
+ const o = n.split(";").map((s) => s.trim()).filter(Boolean);
1949
+ for (const s of o) {
1950
+ const i = s.indexOf(":");
1951
+ if (i === -1) continue;
1952
+ const a = s.slice(0, i).trim(), l = s.slice(i + 1).trim(), c = /__SLOT_(\d+)__/.exec(l);
1953
+ if (!c) continue;
1954
+ const u = t[parseInt(c[1], 10)];
1955
+ if (!Array.isArray(u)) throw new TypeError(`A\`${a}\` expects an array of values, got ${typeof u}`);
1956
+ r.set(a, {
1957
+ property: a,
1958
+ values: u
1959
+ });
1960
+ }
1961
+ return { properties: r };
1962
+ }, He = (e) => {
1963
+ const t = [], r = [];
1964
+ let n = !1;
1965
+ for (let o = 0; o < e.length; o++) {
1966
+ const s = e[o];
1967
+ ae(s) ? (n = !0, r.push(o), t.push(s.value)) : (P(s), t.push(s));
1968
+ }
1969
+ return {
1970
+ resolved: t,
1971
+ hasReactive: n,
1972
+ reactiveIndices: r
1973
+ };
1974
+ }, Be = (e) => {
1975
+ const t = e?.offsets, r = qe(e);
1976
+ if (r.length === 0) throw new Error("No animatable properties found in A template");
1977
+ const n = Math.max(...r.map((i) => i.values.length)), o = (t?.length > 1 ? t : null) || Array.from({ length: n }, (i, a) => a / (n - 1)), s = [];
1978
+ for (let i = 0; i < n; i++) {
1979
+ const a = { offset: o[i] ?? i / (n - 1) };
1980
+ for (const l of r) {
1981
+ const { resolved: c } = He(l.values), u = se(l.property);
1982
+ let d = c[Math.min(i, c.length - 1)];
1983
+ P(d) && (d = String(d)), a[u] = d;
1984
+ }
1985
+ s.push(a);
1986
+ }
1987
+ return s;
1988
+ }, Ht = (e) => {
1989
+ const t = te(e.duration ?? 300), r = te(e.delay ?? 0), n = Rr(e.iterationCount);
1990
+ return {
1991
+ duration: t,
1992
+ delay: r,
1993
+ composite: e.composite || "replace",
1994
+ iterations: n === "Infinity" ? 1 / 0 : n,
1995
+ fill: e.fillMode ?? "none",
1996
+ direction: e.direction ?? "normal",
1997
+ easing: typeof e.easing == "string" ? e.easing : "linear",
1998
+ timeline: e.timeline
1999
+ };
2000
+ }, Bn = (e, t) => {
2001
+ const r = qe(t), n = [], o = Be(t), s = Ht(t), i = e.animate(o, s);
2002
+ for (const l of r) {
2003
+ const { hasReactive: c, reactiveIndices: u } = He(l.values);
2004
+ if (c)
2005
+ for (const d of u) {
2006
+ const m = l.values[d], C = Ue(e, `--anim-${l.property}-${d}`, m, () => {
2007
+ const w = Be(t), p = i.currentTime;
2008
+ i.effect = new KeyframeEffect(e, w, s), p !== null && (i.currentTime = p);
2009
+ });
2010
+ n.push(C);
2011
+ }
2012
+ }
2013
+ return {
2014
+ animation: i,
2015
+ cleanup: () => {
2016
+ i.cancel(), n.forEach((l) => l());
2017
+ }
2018
+ };
2019
+ }, Co = (e, ...t) => In(e, t), le = (e, t, r) => {
2020
+ if (qe(t).some((a) => {
2021
+ const { hasReactive: l } = He(a.values);
2022
+ return l;
2023
+ })) return Bn(e, t);
2024
+ const n = Be(t), o = Ht(t), s = e.animate(n, o);
2025
+ return {
2026
+ animation: s,
2027
+ cleanup: () => {
2028
+ s.cancel();
2029
+ }
2030
+ };
2031
+ }, ko = (e, t) => {
2032
+ const r = /* @__PURE__ */ new Map();
2033
+ for (const [n, o] of Object.entries(t.properties)) {
2034
+ if (!Array.isArray(o)) throw new TypeError(`animate() expects arrays of values, got ${typeof o} for ${n}`);
2035
+ r.set(n, {
2036
+ property: n,
2037
+ values: o
2038
+ });
2039
+ }
2040
+ return le(e, { ...t }, r);
2041
+ }, Eo = (e) => (t) => le(t, e), Mo = async (e, t) => {
2042
+ for (const r of t) {
2043
+ const { animation: n } = le(e, r);
2044
+ await n.finished;
2045
+ }
2046
+ }, To = (e, t) => {
2047
+ const r = t.map((o) => le(e, o)), n = () => {
2048
+ r.forEach((o) => o.cleanup());
2049
+ };
2050
+ return {
2051
+ animations: r.map((o) => o.animation),
2052
+ cleanup: n
2053
+ };
2054
+ }, Ro = (e, t, r = 100) => e.map((n, o) => {
2055
+ const s = te(t?.delay ?? 0) + o * r;
2056
+ return le(n, {
2057
+ ...t,
2058
+ delay: s
2059
+ });
2060
+ });
1799
2061
  export {
1800
- kn as A,
1801
- bt as ANIMATABLE_BRAND,
1802
- Br as AnimatableValue,
1803
- bn as OWNER,
1804
- xe as S,
1805
- ae as addAdoptedSheetToElement,
1806
- P as adoptedBlobMap,
1807
- ze as adoptedLayerMap,
1808
- T as adoptedMap,
1809
- Ne as adoptedSelectorMap,
1810
- J as adoptedShadowLayerMap,
1811
- Fe as adoptedShadowSelectorMap,
1812
- be as adoptedStyleSheetsCache,
1813
- Pn as animatable,
1814
- Mn as animate,
1815
- qr as applyNormalizedInlineStyle,
1816
- Vn as bindStyle,
1817
- B as blobURLMap,
1818
- $ as cacheMap,
1819
- On as compileInlineStyleAttribute,
1820
- Un as css,
1821
- U as cssTextForAdoptedSheet,
1822
- Ue as cssTextRequiresInlineStyleElement,
1823
- En as defineAnimation,
1824
- Q as doAnimation,
1825
- H as ensureAdoptedSheetContent,
1826
- br as ensureHostStyles,
1827
- fr as fetchAndCache,
1828
- dr as fetchAsInline,
1829
- gn as getAdoptedStyleRule,
1830
- Sn as getElementZoom,
1831
- vn as getPadding,
1832
- z as getPropertyValue,
1833
- mn as getPxValue,
1834
- rr as getStyleLayer,
1835
- Me as getStyleRule,
1836
- hn as getTransform,
1837
- yn as getTransformOrigin,
1838
- an as hash,
1839
- cn as isAdoptedSheetEmpty,
1840
- Nr as isAnimatableValue,
1841
- wt as isEffectivelyEmptyStyleText,
1842
- I as isNativeCSSStyleValue,
1843
- Re as isReactiveStyleValue,
1844
- Fr as isStyleBinding,
1845
- _ as isStyleHost,
1846
- fn as layerCounter,
1847
- it as loadAsAdopted,
1848
- Dt as loadBlobStyle,
1849
- yt as loadCachedStyles,
1850
- A as loadInlineStyle,
1851
- rt as loadStyleSheet,
1852
- Jt as notifyStyleTreeHosts,
1853
- dn as observeStyleTree,
1854
- Ln as onScroll,
1855
- $n as onView,
1856
- An as parallelAnimations,
1857
- Pe as parseLength,
1858
- tr as parseOrigin,
1859
- Z as parseTime,
1860
- un as preloadStyle,
1861
- ct as promiseOrDirect,
1862
- jr as pruneEmptyStyleAttribute,
1863
- er as registerStyleTreeHook,
1864
- xn as rehydrateAdoptedStyleSheets,
1865
- pn as rehydrateConstructableSheets,
1866
- ie as removeAdopted,
1867
- wr as scheduleEnsureHostStyles,
1868
- Tn as sequenceAnimations,
1869
- ln as setProperty,
1870
- sn as setStyleInRule,
1871
- re as setStyleProperty,
1872
- tt as setStylePropertyFallback,
1873
- Ft as setStylePropertyTyped,
1874
- zt as setStyleRule,
1875
- wn as setStyleRules,
1876
- Ve as setStyleURL,
1877
- Rn as staggerAnimation,
1878
- mr as styleCache,
1879
- vr as styleElementCache,
1880
- lt as supportsConstructableStylesheet
2062
+ Co as A,
2063
+ Ct as ANIMATABLE_BRAND,
2064
+ Cn as AnimatableValue,
2065
+ Dn as BAKE_CATEGORIES,
2066
+ xt as BAKE_LAYER,
2067
+ cr as CSS_COLOR_PROPERTIES,
2068
+ ar as CSS_DIMENSION_UNITS,
2069
+ sr as CSS_DIMENSION_UNITS_LIST,
2070
+ fr as CSS_MOTION_PROPERTIES,
2071
+ ur as CSS_TYPOGRAPHY_PROPERTIES,
2072
+ lr as CSS_UNIT_FACTORY_ALIASES,
2073
+ wt as CSS_UNIT_TOKEN_RE,
2074
+ _e as DEFAULT_CACHE_MS,
2075
+ vr as DEFAULT_CATEGORIES,
2076
+ Je as HOST_CSS_FALLBACK,
2077
+ mr as LAYER_NAME,
2078
+ Sr as LAYER_OPEN,
2079
+ Wn as OWNER,
2080
+ Ie as S,
2081
+ bt as STYLE_THEME_ATTRS,
2082
+ dr as STYLE_THEME_OBSERVE_ATTRS,
2083
+ hr as UX_HOST_LAYERS,
2084
+ Qn as UX_PRELOAD_HOST_CSS,
2085
+ pr as VEELA_CASCADE_LAYERS,
2086
+ zn as VIEWER_CSS_LAYER_ORDER,
2087
+ yr as VIEWER_RUNTIME_LAYERS,
2088
+ be as addAdoptedSheetToElement,
2089
+ F as adoptedAppliedText,
2090
+ V as adoptedBlobMap,
2091
+ vt as adoptedFilled,
2092
+ Xe as adoptedLayerMap,
2093
+ A as adoptedMap,
2094
+ Ze as adoptedSelectorMap,
2095
+ ue as adoptedShadowLayerMap,
2096
+ Ge as adoptedShadowSelectorMap,
2097
+ Le as adoptedStyleSheetsCache,
2098
+ go as animatable,
2099
+ ko as animate,
2100
+ Ur as applyNormalizedInlineStyle,
2101
+ We as bakeComputedStyle,
2102
+ ie as bakeThemeFingerprint,
2103
+ L as bakedCache,
2104
+ I as bakedLive,
2105
+ R as bakedStyles,
2106
+ xo as bindStyle,
2107
+ j as blobURLMap,
2108
+ tn as buildBakedCssText,
2109
+ ce as cacheBlobContentMap,
2110
+ q as cacheContentMap,
2111
+ B as cacheMap,
2112
+ en as collectBakedDeclarations,
2113
+ bo as compileInlineStyleAttribute,
2114
+ at as containsMarker,
2115
+ Er as createStyleId,
2116
+ M as createTypedUnitValue,
2117
+ wo as css,
2118
+ br as cssEmptyLayerRule,
2119
+ Vr as cssImportWithLayer,
2120
+ Fe as cssLayerBlock,
2121
+ Ne as cssLayerOrder,
2122
+ _ as cssTextForAdoptedSheet,
2123
+ tt as cssTextRequiresInlineStyleElement,
2124
+ wr as cssUnitConstructorName,
2125
+ gr as cssUnitFactoryName,
2126
+ Eo as defineAnimation,
2127
+ le as doAnimation,
2128
+ oe as ensureAdoptedSheetContent,
2129
+ un as ensureHostStyles,
2130
+ $t as ensureStyleScopeSelector,
2131
+ nt as escapeCSSIdentifier,
2132
+ ne as escapeRegExp,
2133
+ Xr as fetchAndCache,
2134
+ Qr as fetchAsInline,
2135
+ uo as getAdoptedStyleRule,
2136
+ ho as getBakedStyle,
2137
+ so as getElementZoom,
2138
+ Tt as getOrCreateLayerRule,
2139
+ lo as getPadding,
2140
+ K as getPropertyValue,
2141
+ ao as getPxValue,
2142
+ Kr as getStyleLayer,
2143
+ De as getStyleRule,
2144
+ oo as getTransform,
2145
+ io as getTransformOrigin,
2146
+ D as getWindowConstructor,
2147
+ pe as hasTypedOM,
2148
+ qn as hash,
2149
+ we as invalidateBakedStyles,
2150
+ Hn as isAdoptedSheetEmpty,
2151
+ kn as isAnimatableValue,
2152
+ Lr as isColorToken,
2153
+ Cr as isCssElement,
2154
+ jn as isCssLayerName,
2155
+ rt as isDocument,
2156
+ Mt as isEffectivelyEmptyStyleText,
2157
+ Pr as isElementVisible,
2158
+ et as isLayerBlockRule,
2159
+ P as isNativeCSSStyleValue,
2160
+ ae as isReactiveStyleValue,
2161
+ Se as isScrollDriven,
2162
+ Z as isShadowRoot,
2163
+ st as isStaticStyleInterpolation,
2164
+ Or as isStyleBinding,
2165
+ re as isStyleHost,
2166
+ Kn as isStyleValue,
2167
+ fe as isUnitValue,
2168
+ it as isViewDriven,
2169
+ Fn as layerCounter,
2170
+ Lt as loadAsAdopted,
2171
+ Wr as loadBlobStyle,
2172
+ Dt as loadCachedStyles,
2173
+ O as loadInlineStyle,
2174
+ At as loadStyleSheet,
2175
+ Zn as makeHostLayerOrder,
2176
+ Gn as normalizeCssForLayer,
2177
+ Rr as normalizeIterationCount,
2178
+ Ar as normalizeIterations,
2179
+ Hr as notifyStyleTreeHosts,
2180
+ ro as observeStyleTree,
2181
+ So as onScroll,
2182
+ vo as onView,
2183
+ To as parallelAnimations,
2184
+ ot as parseLength,
2185
+ Tr as parseOrigin,
2186
+ te as parseTime,
2187
+ to as preloadStyle,
2188
+ kt as promiseOrDirect,
2189
+ $r as pruneEmptyStyleAttribute,
2190
+ Ir as readAttachedCSSUnit,
2191
+ Et as readSheetRuleCount,
2192
+ Ae as rebakeBatch,
2193
+ po as rebakeComputedStyle,
2194
+ Ot as registerStyleTreeHook,
2195
+ Qe as registeredProperties,
2196
+ yo as rehydrateAdoptedStyleSheets,
2197
+ no as rehydrateConstructableSheets,
2198
+ ge as removeAdopted,
2199
+ fn as scheduleEnsureHostStyles,
2200
+ Mo as sequenceAnimations,
2201
+ eo as setProperty,
2202
+ Jn as setStyleInRule,
2203
+ he as setStyleProperty,
2204
+ Rt as setStylePropertyFallback,
2205
+ Dr as setStylePropertyTyped,
2206
+ zr as setStyleRule,
2207
+ co as setStyleRules,
2208
+ lt as setStyleURL,
2209
+ Ro as staggerAnimation,
2210
+ xr as stripCssPreamble,
2211
+ or as styleCache,
2212
+ ir as styleElementCache,
2213
+ me as styleFlushPending,
2214
+ gt as styleTreeHooks,
2215
+ ye as styleTreeObserved,
2216
+ nr as styleTreeRoots,
2217
+ W as supportsConstructableStylesheet,
2218
+ fo as unbakeComputedStyle,
2219
+ Xn as unwrapCssLayer,
2220
+ Mr as urlCanParse,
2221
+ Yn as veelaCascadeOrder,
2222
+ ve as wrapCssLayer
1881
2223
  };
1882
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3R5bGUtbGliLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyAkYXZvaWRUcmlnZ2VyLCAkZ2V0VmFsdWUsICRzZXQsIGNhbWVsVG9LZWJhYiwgZGVyZWYsIGdldE9ySW5zZXJ0Q29tcHV0ZWQsIGhhbmRsZUxpc3RlbmVycywgaGFzVmFsdWUsIGlzTm90RXF1YWwsIGlzVmFsLCBpc1ZhbHVlVW5pdCwgdG9SZWYsIHRyeVN0cmluZ0FzTnVtYmVyIH0gZnJvbSBcIkBmZXN0LWxpYi9jb3JlXCI7XG5pbXBvcnQgeyBEb3VibGVXZWFrTWFwLCBhZGRUb0NhbGxDaGFpbiwgYWZmZWN0ZWQgfSBmcm9tIFwiQGZlc3QtbGliL29iamVjdFwiO1xuaW1wb3J0IHsgaGFuZGxlQXR0cmlidXRlLCBoYW5kbGVQcm9wZXJ0eSwgb2JzZXJ2ZUF0dHJpYnV0ZSB9IGZyb20gXCJAZmVzdC1saWIvZG9tXCI7XG5cbi8vI3JlZ2lvbiBzcmMvcHJvcGVydHkudHNcbnZhciBpc05hdGl2ZUNTU1N0eWxlVmFsdWUkMSA9ICh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRjb25zdCBDU1NTdHlsZVZhbHVlQ3RvciA9IGdsb2JhbFRoaXMuQ1NTU3R5bGVWYWx1ZTtcblx0XHRpZiAodHlwZW9mIENTU1N0eWxlVmFsdWVDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBDU1NTdHlsZVZhbHVlQ3RvcikgcmV0dXJuIHRydWU7XG5cdFx0Zm9yIChsZXQgcHJvdG90eXBlID0gdmFsdWU7IHByb3RvdHlwZTsgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkpIGlmIChwcm90b3R5cGU/LmNvbnN0cnVjdG9yPy5uYW1lID09PSBcIkNTU1N0eWxlVmFsdWVcIikgcmV0dXJuIHRydWU7XG5cdH0gY2F0Y2gge31cblx0cmV0dXJuIGZhbHNlO1xufTtcbnZhciBpc1JlYWN0aXZlU3R5bGVWYWx1ZSQxID0gKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBpc05hdGl2ZUNTU1N0eWxlVmFsdWUkMSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRyZXR1cm4gXCJ2YWx1ZVwiIGluIHZhbHVlO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgZ2V0V2luZG93Q29uc3RydWN0b3IkMSA9ICh3aW4sIG5hbWUpID0+IHtcblx0cmV0dXJuIHdpbj8uW25hbWVdID8/IGdsb2JhbFRoaXM/LltuYW1lXTtcbn07XG52YXIgZ2V0Q1NTVW5pdEZhY3RvcnlOYW1lJDEgPSAodW5pdCkgPT4ge1xuXHRzd2l0Y2ggKHVuaXQudG9Mb3dlckNhc2UoKSkge1xuXHRcdGNhc2UgXCIlXCI6IHJldHVybiBcInBlcmNlbnRcIjtcblx0XHRjYXNlIFwicVwiOiByZXR1cm4gXCJRXCI7XG5cdFx0Y2FzZSBcImh6XCI6IHJldHVybiBcIkh6XCI7XG5cdFx0Y2FzZSBcImtoelwiOiByZXR1cm4gXCJrSHpcIjtcblx0XHRjYXNlIFwiZnJcIjogcmV0dXJuIFwiZmxleFwiO1xuXHRcdGRlZmF1bHQ6IHJldHVybiB1bml0LnRvTG93ZXJDYXNlKCk7XG5cdH1cbn07XG52YXIgZ2V0Q1NTVW5pdENvbnN0cnVjdG9yTmFtZSQxID0gKHVuaXQpID0+IHtcblx0cmV0dXJuIHVuaXQudG9Mb3dlckNhc2UoKSA9PT0gXCIlXCIgPyBcInBlcmNlbnRcIiA6IHVuaXQudG9Mb3dlckNhc2UoKTtcbn07XG52YXIgY3JlYXRlVHlwZWRVbml0VmFsdWUkMSA9ICh3aW4sIHVuaXQsIHZhbHVlKSA9PiB7XG5cdGNvbnN0IENTU05hbWVzcGFjZSA9IHdpbj8uQ1NTO1xuXHRjb25zdCBmYWN0b3J5TmFtZSA9IGdldENTU1VuaXRGYWN0b3J5TmFtZSQxKHVuaXQpO1xuXHRjb25zdCBmYWN0b3J5ID0gQ1NTTmFtZXNwYWNlPy5bZmFjdG9yeU5hbWVdO1xuXHRpZiAodHlwZW9mIGZhY3RvcnkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhY3RvcnkuY2FsbChDU1NOYW1lc3BhY2UsIHZhbHVlKTtcblx0Y29uc3QgQ1NTVW5pdFZhbHVlQ3RvciA9IGdldFdpbmRvd0NvbnN0cnVjdG9yJDEod2luLCBcIkNTU1VuaXRWYWx1ZVwiKTtcblx0aWYgKHR5cGVvZiBDU1NVbml0VmFsdWVDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoYFR5cGVkIE9NIGRvZXMgbm90IHN1cHBvcnQgQ1NTIHVuaXQgXCIke3VuaXR9XCJgKTtcblx0cmV0dXJuIG5ldyBDU1NVbml0VmFsdWVDdG9yKHZhbHVlLCBnZXRDU1NVbml0Q29uc3RydWN0b3JOYW1lJDEodW5pdCkpO1xufTtcbnZhciB0b2tlbml6ZU51bWVyaWNDU1MkMSA9IChzb3VyY2UpID0+IHtcblx0Y29uc3QgdG9rZW5zID0gW107XG5cdGxldCBjdXJzb3IgPSAwO1xuXHR3aGlsZSAoY3Vyc29yIDwgc291cmNlLmxlbmd0aCkge1xuXHRcdGNvbnN0IHJlc3QgPSBzb3VyY2Uuc2xpY2UoY3Vyc29yKTtcblx0XHRjb25zdCB3aGl0ZXNwYWNlID0gL15cXHMrLy5leGVjKHJlc3QpO1xuXHRcdGlmICh3aGl0ZXNwYWNlKSB7XG5cdFx0XHRjdXJzb3IgKz0gd2hpdGVzcGFjZVswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgbnVtYmVyID0gL14oPzpcXGQqXFwuXFxkK3xcXGQrXFwuP1xcZCopKD86W2VFXVsrLV0/XFxkKyk/Ly5leGVjKHJlc3QpO1xuXHRcdGlmIChudW1iZXIpIHtcblx0XHRcdGN1cnNvciArPSBudW1iZXJbMF0ubGVuZ3RoO1xuXHRcdFx0Y29uc3QgdW5pdE1hdGNoID0gL14oJXxbYS16QS1aXSspLy5leGVjKHNvdXJjZS5zbGljZShjdXJzb3IpKTtcblx0XHRcdGNvbnN0IHVuaXQgPSB1bml0TWF0Y2g/LlswXSA/PyBudWxsO1xuXHRcdFx0aWYgKHVuaXRNYXRjaCkgY3Vyc29yICs9IHVuaXRNYXRjaFswXS5sZW5ndGg7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwibnVtYmVyXCIsXG5cdFx0XHRcdHZhbHVlOiBOdW1iZXIobnVtYmVyWzBdKSxcblx0XHRcdFx0dW5pdDogdW5pdCA9PSBudWxsID8gbnVsbCA6IHVuaXQudG9Mb3dlckNhc2UoKVxuXHRcdFx0fSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgaWRlbnRpZmllciA9IC9eW2EtekEtWl9dW2EtekEtWjAtOV8tXSovLmV4ZWMocmVzdCk7XG5cdFx0aWYgKGlkZW50aWZpZXIpIHtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJpZGVudGlmaWVyXCIsXG5cdFx0XHRcdHZhbHVlOiBpZGVudGlmaWVyWzBdLnRvTG93ZXJDYXNlKClcblx0XHRcdH0pO1xuXHRcdFx0Y3Vyc29yICs9IGlkZW50aWZpZXJbMF0ubGVuZ3RoO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IHN5bWJvbCA9IHJlc3RbMF07XG5cdFx0aWYgKFtcblx0XHRcdFwiK1wiLFxuXHRcdFx0XCItXCIsXG5cdFx0XHRcIipcIixcblx0XHRcdFwiL1wiLFxuXHRcdFx0XCIoXCIsXG5cdFx0XHRcIilcIixcblx0XHRcdFwiLFwiXG5cdFx0XS5pbmNsdWRlcyhzeW1ib2wpKSB7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwic3ltYm9sXCIsXG5cdFx0XHRcdHZhbHVlOiBzeW1ib2xcblx0XHRcdH0pO1xuXHRcdFx0Y3Vyc29yKys7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbnN1cHBvcnRlZCB0b2tlbiBuZWFyIFwiJHtyZXN0fVwiYCk7XG5cdH1cblx0cmV0dXJuIHRva2Vucztcbn07XG52YXIgTnVtZXJpY1R5cGVkT01QYXJzZXIkMSA9IGNsYXNzIHtcblx0dG9rZW5zO1xuXHR3aW47XG5cdGluZGV4ID0gMDtcblx0Y29uc3RydWN0b3IodG9rZW5zLCB3aW4pIHtcblx0XHR0aGlzLnRva2VucyA9IHRva2Vucztcblx0XHR0aGlzLndpbiA9IHdpbjtcblx0fVxuXHRwYXJzZSgpIHtcblx0XHRjb25zdCByb290ID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdGlmICh0aGlzLmluZGV4ICE9PSB0aGlzLnRva2Vucy5sZW5ndGgpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVuZXhwZWN0ZWQgdHJhaWxpbmcgZXhwcmVzc2lvblwiKTtcblx0XHRyZXR1cm4gcm9vdDtcblx0fVxuXHRjdXJyZW50KCkge1xuXHRcdHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblx0fVxuXHRjb25zdW1lKCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cdFx0aWYgKCF0b2tlbikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvblwiKTtcblx0XHR0aGlzLmluZGV4Kys7XG5cdFx0cmV0dXJuIHRva2VuO1xuXHR9XG5cdGNvbnN1bWVTeW1ib2woc3ltYm9sKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRpZiAodG9rZW4ua2luZCAhPT0gXCJzeW1ib2xcIiB8fCB0b2tlbi52YWx1ZSAhPT0gc3ltYm9sKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYEV4cGVjdGVkIFwiJHtzeW1ib2x9XCJgKTtcblx0fVxuXHRtYXRjaGVzU3ltYm9sKHN5bWJvbCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50KCk7XG5cdFx0cmV0dXJuIHRva2VuPy5raW5kID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBzeW1ib2w7XG5cdH1cblx0Y3JlYXRlTWF0aChuYW1lLCAuLi52YWx1ZXMpIHtcblx0XHRjb25zdCBDb25zdHJ1Y3RvciA9IGdldFdpbmRvd0NvbnN0cnVjdG9yJDEodGhpcy53aW4sIG5hbWUpO1xuXHRcdGlmICh0eXBlb2YgQ29uc3RydWN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG5cdFx0cmV0dXJuIG5ldyBDb25zdHJ1Y3RvciguLi52YWx1ZXMpO1xuXHR9XG5cdHBhcnNlU3VtKCkge1xuXHRcdGxldCB2YWx1ZSA9IHRoaXMucGFyc2VQcm9kdWN0KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIitcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiLVwiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVByb2R1Y3QoKTtcblx0XHRcdGlmIChvcGVyYXRvci5raW5kICE9PSBcInN5bWJvbFwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBzdW0gb3BlcmF0b3JcIik7XG5cdFx0XHRpZiAob3BlcmF0b3IudmFsdWUgPT09IFwiK1wiKSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhTdW1cIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoU3VtXCIsIHZhbHVlLCB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHJpZ2h0KSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRwYXJzZVByb2R1Y3QoKSB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIipcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiL1wiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0XHRpZiAob3BlcmF0b3Iua2luZCAhPT0gXCJzeW1ib2xcIikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgcHJvZHVjdCBvcGVyYXRvclwiKTtcblx0XHRcdGlmIChvcGVyYXRvci52YWx1ZSA9PT0gXCIqXCIpIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFByb2R1Y3RcIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoUHJvZHVjdFwiLCB2YWx1ZSwgdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aEludmVydFwiLCByaWdodCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0cGFyc2VVbmFyeSgpIHtcblx0XHRpZiAodGhpcy5tYXRjaGVzU3ltYm9sKFwiK1wiKSkge1xuXHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCItXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHRoaXMucGFyc2VVbmFyeSgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyc2VQcmltYXJ5KCk7XG5cdH1cblx0cGFyc2VQcmltYXJ5KCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwibnVtYmVyXCIpIHJldHVybiBjcmVhdGVUeXBlZFVuaXRWYWx1ZSQxKHRoaXMud2luLCB0b2tlbi51bml0ID8/IFwibnVtYmVyXCIsIHRva2VuLnZhbHVlKTtcblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gXCIoXCIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwiaWRlbnRpZmllclwiKSByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKHRva2VuLnZhbHVlKTtcblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBhIG51bWVyaWMgdmFsdWVcIik7XG5cdH1cblx0cGFyc2VGdW5jdGlvbihuYW1lKSB7XG5cdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKFwiKTtcblx0XHRpZiAobmFtZSA9PT0gXCJjYWxjXCIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWVzID0gW107XG5cdFx0aWYgKCF0aGlzLm1hdGNoZXNTeW1ib2woXCIpXCIpKSB7XG5cdFx0XHR2YWx1ZXMucHVzaCh0aGlzLnBhcnNlU3VtKCkpO1xuXHRcdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIixcIikpIHtcblx0XHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRcdHZhbHVlcy5wdXNoKHRoaXMucGFyc2VTdW0oKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0aWYgKG5hbWUgPT09IFwibWluXCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJtaW4oKSByZXF1aXJlcyBhIHZhbHVlXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhNaW5cIiwgLi4udmFsdWVzKTtcblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwibWF4XCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJtYXgoKSByZXF1aXJlcyBhIHZhbHVlXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhNYXhcIiwgLi4udmFsdWVzKTtcblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09IFwiY2xhbXBcIikge1xuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggIT09IDMpIHRocm93IG5ldyBTeW50YXhFcnJvcihcImNsYW1wKCkgcmVxdWlyZXMgdGhyZWUgdmFsdWVzXCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhDbGFtcFwiLCB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdKTtcblx0XHR9XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKGBVbnN1cHBvcnRlZCBmdW5jdGlvbiBcIiR7bmFtZX1cImApO1xuXHR9XG59O1xudmFyIHBhcnNlVG9UeXBlZE9NID0gKGNzc1ZhbHVlLCB3aW4pID0+IHtcblx0dHJ5IHtcblx0XHRjb25zdCB0b2tlbnMgPSB0b2tlbml6ZU51bWVyaWNDU1MkMShjc3NWYWx1ZSk7XG5cdFx0cmV0dXJuIG5ldyBOdW1lcmljVHlwZWRPTVBhcnNlciQxKHRva2Vucywgd2luKS5wYXJzZSgpO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufTtcbnZhciBoYXNUeXBlZE9NID0gdHlwZW9mIENTU1N0eWxlVmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIENTU1VuaXRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBpc1VuaXRWYWx1ZSA9ICh2YWwpID0+IGhhc1R5cGVkT00gJiYgdmFsIGluc3RhbmNlb2YgQ1NTVW5pdFZhbHVlO1xudmFyIHNldFByb3BlcnR5SWZOb3RFcXVhbCA9IChzdHlsZVJlZiwga2ViYWIsIHZhbHVlLCBpbXBvcnRhbmNlID0gXCJcIikgPT4ge1xuXHRpZiAoIXN0eWxlUmVmIHx8ICFrZWJhYikgcmV0dXJuO1xuXHRpZiAodmFsdWUgPT0gbnVsbCkge1xuXHRcdGlmIChzdHlsZVJlZi5nZXRQcm9wZXJ0eVZhbHVlKGtlYmFiKSAhPT0gXCJcIikgc3R5bGVSZWYucmVtb3ZlUHJvcGVydHkoa2ViYWIpO1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3R5bGVSZWYuZ2V0UHJvcGVydHlWYWx1ZShrZWJhYikgIT09IHZhbHVlKSBzdHlsZVJlZi5zZXRQcm9wZXJ0eShrZWJhYiwgdmFsdWUsIGltcG9ydGFuY2UpO1xufTtcbnZhciBzZXRTdHlsZVByb3BlcnR5VHlwZWQgPSAoZWxlbWVudCwgbmFtZSwgdmFsdWUsIGltcG9ydGFuY2UgPSBcIlwiKSA9PiB7XG5cdGlmICghZWxlbWVudCB8fCAhbmFtZSkgcmV0dXJuIGVsZW1lbnQ7XG5cdGNvbnN0IGtlYmFiID0gY2FtZWxUb0tlYmFiKG5hbWUpO1xuXHRjb25zdCBzdHlsZVJlZiA9IGVsZW1lbnQuc3R5bGU7XG5cdGNvbnN0IHN0eWxlTWFwUmVmID0gZWxlbWVudC5hdHRyaWJ1dGVTdHlsZU1hcCA/PyBlbGVtZW50LnN0eWxlTWFwO1xuXHRpZiAoIWhhc1R5cGVkT00gfHwgIXN0eWxlTWFwUmVmKSByZXR1cm4gc2V0U3R5bGVQcm9wZXJ0eUZhbGxiYWNrKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlKTtcblx0Y29uc3Qgd2luID0gZWxlbWVudC5vd25lckRvY3VtZW50Py5kZWZhdWx0VmlldyA/PyBnbG9iYWxUaGlzO1xuXHRsZXQgdmFsID0gaGFzVmFsdWUodmFsdWUpICYmIGlzUmVhY3RpdmVTdHlsZVZhbHVlJDEodmFsdWUpID8gdmFsdWUudmFsdWUgOiB2YWx1ZTtcblx0aWYgKHZhbCA9PSBudWxsKSB7XG5cdFx0c3R5bGVNYXBSZWYuZGVsZXRlPy4oa2ViYWIpO1xuXHRcdGlmIChzdHlsZVJlZikgc2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgbnVsbCwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSQxKHZhbCkpIHtcblx0XHRjb25zdCBvbGQgPSBzdHlsZU1hcFJlZi5nZXQoa2ViYWIpO1xuXHRcdGlmIChpc1VuaXRWYWx1ZSh2YWwpICYmIGlzVW5pdFZhbHVlKG9sZCkpIHtcblx0XHRcdGlmIChvbGQudmFsdWUgPT09IHZhbC52YWx1ZSAmJiBvbGQudW5pdCA9PT0gdmFsLnVuaXQpIHJldHVybiBlbGVtZW50O1xuXHRcdH0gZWxzZSBpZiAob2xkID09PSB2YWwpIHJldHVybiBlbGVtZW50O1xuXHRcdHN0eWxlTWFwUmVmLnNldChrZWJhYiwgdmFsKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXHRpZiAodHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIikge1xuXHRcdGlmIChDU1M/Lm51bWJlciAmJiAha2ViYWIuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG5cdFx0XHRjb25zdCBuZXdWYWwgPSBDU1MubnVtYmVyKHZhbCk7XG5cdFx0XHRjb25zdCBvbGQgPSBzdHlsZU1hcFJlZi5nZXQoa2ViYWIpO1xuXHRcdFx0aWYgKGlzVW5pdFZhbHVlKG9sZCkgJiYgb2xkLnZhbHVlID09PSBuZXdWYWwudmFsdWUgJiYgb2xkLnVuaXQgPT09IG5ld1ZhbC51bml0KSByZXR1cm4gZWxlbWVudDtcblx0XHRcdHN0eWxlTWFwUmVmLnNldChrZWJhYiwgbmV3VmFsKTtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBTdHJpbmcodmFsKSwgaW1wb3J0YW5jZSk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdH1cblx0aWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoL1xcYihjYWxjfG1pbnxtYXh8Y2xhbXApXFxzKlxcKC8udGVzdCh2YWwpKSB7XG5cdFx0XHRjb25zdCBwYXJzZWQgPSBwYXJzZVRvVHlwZWRPTSh2YWwsIHdpbik7XG5cdFx0XHRpZiAocGFyc2VkKSB0cnkge1xuXHRcdFx0XHRzdHlsZU1hcFJlZi5zZXQoa2ViYWIsIHBhcnNlZCk7XG5cdFx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdH1cblx0XHRjb25zdCBtYXliZU51bSA9IHRyeVN0cmluZ0FzTnVtYmVyKHZhbCk7XG5cdFx0aWYgKHR5cGVvZiBtYXliZU51bSA9PT0gXCJudW1iZXJcIiAmJiBDU1M/Lm51bWJlciAmJiAha2ViYWIuc3RhcnRzV2l0aChcIi0tXCIpKSB7XG5cdFx0XHRjb25zdCBuZXdWYWwgPSBDU1MubnVtYmVyKG1heWJlTnVtKTtcblx0XHRcdGNvbnN0IG9sZCA9IHN0eWxlTWFwUmVmLmdldChrZWJhYik7XG5cdFx0XHRpZiAoaXNVbml0VmFsdWUob2xkKSAmJiBvbGQudmFsdWUgPT09IG5ld1ZhbC52YWx1ZSAmJiBvbGQudW5pdCA9PT0gbmV3VmFsLnVuaXQpIHJldHVybiBlbGVtZW50O1xuXHRcdFx0c3R5bGVNYXBSZWYuc2V0KGtlYmFiLCBuZXdWYWwpO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHRcdHNldFByb3BlcnR5SWZOb3RFcXVhbChzdHlsZVJlZiwga2ViYWIsIHZhbCwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRyZXR1cm4gZWxlbWVudDtcbn07XG52YXIgc2V0U3R5bGVQcm9wZXJ0eUZhbGxiYWNrID0gKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlID0gXCJcIikgPT4ge1xuXHRpZiAoIWVsZW1lbnQgfHwgIW5hbWUpIHJldHVybiBlbGVtZW50O1xuXHRjb25zdCBrZWJhYiA9IGNhbWVsVG9LZWJhYihuYW1lKTtcblx0Y29uc3Qgc3R5bGVSZWYgPSBlbGVtZW50LnN0eWxlO1xuXHRpZiAoIXN0eWxlUmVmKSByZXR1cm4gZWxlbWVudDtcblx0bGV0IHZhbCA9IGhhc1ZhbHVlKHZhbHVlKSAmJiBpc1JlYWN0aXZlU3R5bGVWYWx1ZSQxKHZhbHVlKSA/IHZhbHVlLnZhbHVlIDogdmFsdWU7XG5cdGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiICYmICFpc05hdGl2ZUNTU1N0eWxlVmFsdWUkMSh2YWwpKSB2YWwgPSB0cnlTdHJpbmdBc051bWJlcih2YWwpID8/IHZhbDtcblx0aWYgKHZhbCA9PSBudWxsKSB7XG5cdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgbnVsbCwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSQxKHZhbCkpIHtcblx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBTdHJpbmcodmFsKSwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIpIHtcblx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCBTdHJpbmcodmFsKSwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRyZXR1cm4gZWxlbWVudDtcbn07XG52YXIgc2V0U3R5bGVQcm9wZXJ0eSA9IChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0cmV0dXJuIGhhc1R5cGVkT00gPyBzZXRTdHlsZVByb3BlcnR5VHlwZWQoZWxlbWVudCwgbmFtZSwgdmFsdWUsIGltcG9ydGFuY2UpIDogc2V0U3R5bGVQcm9wZXJ0eUZhbGxiYWNrKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlKTtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9zaGVldHMudHNcbnZhciBzZXRTdHlsZUluUnVsZSA9IChzZWxlY3RvciwgbmFtZSwgdmFsdWUpID0+IHtcblx0cmV0dXJuIHNldFN0eWxlUHJvcGVydHkoZ2V0U3R5bGVSdWxlKHNlbGVjdG9yKSwgbmFtZSwgdmFsdWUpO1xufTtcbnZhciBzZXRTdHlsZVJ1bGUgPSAoc2VsZWN0b3IsIHNoZWV0KSA9PiB7XG5cdGNvbnN0IHJ1bGUgPSBnZXRTdHlsZVJ1bGUoc2VsZWN0b3IpO1xuXHRPYmplY3QuZW50cmllcyhzaGVldCkuZm9yRWFjaCgoW3Byb3BOYW1lLCBwcm9wVmFsdWVdKSA9PiBzZXRTdHlsZVByb3BlcnR5KHJ1bGUsIHByb3BOYW1lLCBwcm9wVmFsdWUpKTtcblx0cmV0dXJuIHJ1bGU7XG59O1xudmFyIGhhc2ggPSBhc3luYyAoc3RyaW5nKSA9PiB7XG5cdGNvbnN0IGhhc2hCdWZmZXIgPSBhd2FpdCBjcnlwdG8/LnN1YnRsZT8uZGlnZXN0KFwiU0hBLTI1NlwiLCB0eXBlb2Ygc3RyaW5nID09IFwic3RyaW5nXCIgPyBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyaW5nKSA6IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gc3RyaW5nIDogYXdhaXQgc3RyaW5nPy5hcnJheUJ1ZmZlcj8uKCkpO1xuXHRyZXR1cm4gXCJzaGEyNTYtXCIgKyBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoaGFzaEJ1ZmZlcikpKTtcbn07XG52YXIgbG9hZFN0eWxlU2hlZXQgPSAoaW5saW5lLCBiYXNlLCBsYXllciA9IFwiXCIsIGludGVncml0eSkgPT4ge1xuXHRjb25zdCBsb2FkID0gZmV0Y2hBbmRDYWNoZShpbmxpbmUpO1xuXHRjb25zdCB1cmwgPSB0eXBlb2YgaW5saW5lID09IFwic3RyaW5nXCIgPyBVUkwuY2FuUGFyc2UoaW5saW5lKSA/IGlubGluZSA6IGxvYWQgOiBsb2FkO1xuXHRpZiAoYmFzZT8uWzBdKSBiYXNlWzBdLmZldGNoUHJpb3JpdHkgPSBcImhpZ2hcIjtcblx0aWYgKGJhc2UgJiYgdXJsICYmIHR5cGVvZiB1cmwgPT0gXCJzdHJpbmdcIikgc2V0U3R5bGVVUkwoYmFzZSwgdXJsLCBsYXllcik7XG5cdGlmIChiYXNlPy5bMF0gJiYgKCFVUkwuY2FuUGFyc2UoaW5saW5lKSB8fCBpbnRlZ3JpdHkpICYmIGJhc2U/LlswXSBpbnN0YW5jZW9mIEhUTUxMaW5rRWxlbWVudCkge31cblx0cmV0dXJuIHByb21pc2VPckRpcmVjdChsb2FkLCAocmVzKSA9PiB7XG5cdFx0aWYgKGJhc2U/LlswXSAmJiByZXMpIHtcblx0XHRcdHNldFN0eWxlVVJMKGJhc2UsIHJlcywgbGF5ZXIpO1xuXHRcdFx0YmFzZT8uWzBdLnNldEF0dHJpYnV0ZShcImxvYWRlZFwiLCBcIlwiKTtcblx0XHR9XG5cdH0pPy5jYXRjaD8uKChlcnJvcikgPT4ge1xuXHRcdGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBsb2FkIHN0eWxlIHNoZWV0OlwiLCBlcnJvcik7XG5cdH0pO1xufTtcbnZhciBsb2FkQmxvYlN0eWxlID0gKGlubGluZSkgPT4ge1xuXHRjb25zdCBzdHlsZSA9IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIikgOiBudWxsO1xuXHRpZiAoc3R5bGUpIHN0eWxlLmZldGNoUHJpb3JpdHkgPSBcImhpZ2hcIjtcblx0aWYgKHN0eWxlKSB7XG5cdFx0T2JqZWN0LmFzc2lnbihzdHlsZSwge1xuXHRcdFx0cmVsOiBcInN0eWxlc2hlZXRcIixcblx0XHRcdHR5cGU6IFwidGV4dC9jc3NcIixcblx0XHRcdGNyb3NzT3JpZ2luOiBcInNhbWUtb3JpZ2luXCJcblx0XHR9KTtcblx0XHRzdHlsZS5kYXRhc2V0Lm93bmVyID0gXCJET01cIjtcblx0XHRsb2FkU3R5bGVTaGVldChpbmxpbmUsIFtzdHlsZSwgXCJocmVmXCJdKTtcblx0XHR0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5oZWFkLmFwcGVuZChzdHlsZSk7XG5cdFx0cmV0dXJuIHN0eWxlO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbnZhciBsb2FkSW5saW5lU3R5bGUgPSAoaW5saW5lLCByb290RWxlbWVudCA9IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQ/LmhlYWQgOiBudWxsLCBsYXllciA9IFwiXCIpID0+IHtcblx0Y29uc3QgUExBQ0UgPSByb290RWxlbWVudD8ucXVlcnlTZWxlY3Rvcj8uKFwiaGVhZFwiKSA/PyByb290RWxlbWVudDtcblx0aWYgKHR5cGVvZiBIVE1MSGVhZEVsZW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBQTEFDRSBpbnN0YW5jZW9mIEhUTUxIZWFkRWxlbWVudCkgcmV0dXJuIGxvYWRCbG9iU3R5bGUoaW5saW5lKTtcblx0Y29uc3Qgc3R5bGUgPSB0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSA6IG51bGw7XG5cdGlmIChzdHlsZSkge1xuXHRcdHN0eWxlLmRhdGFzZXQub3duZXIgPSBcIkRPTVwiO1xuXHRcdGxvYWRTdHlsZVNoZWV0KGlubGluZSwgW3N0eWxlLCBcImlubmVySFRNTFwiXSwgbGF5ZXIpO1xuXHRcdFBMQUNFPy5wcmVwZW5kPy4oc3R5bGUpO1xuXHRcdHJldHVybiBzdHlsZTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG52YXIgc2V0UHJvcGVydHkgPSAodGFyZ2V0LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0cmV0dXJuIHNldFN0eWxlUHJvcGVydHkodGFyZ2V0LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSk7XG59O1xudmFyIHByZWxvYWRTdHlsZSA9IChzdHlsZXMpID0+IHtcblx0cmV0dXJuIGxvYWRBc0Fkb3B0ZWQoc3R5bGVzLCBcIlwiKTtcbn07XG52YXIgYWRvcHRlZE1hcFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJkb20udHNAYWRvcHRlZE1hcFwiKTtcbnZhciBhZG9wdGVkTWFwID0gZ2xvYmFsVGhpc1thZG9wdGVkTWFwU3ltYm9sXSA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbnZhciBhZG9wdGVkQmxvYk1hcFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJkb20udHNAYWRvcHRlZEJsb2JNYXBcIik7XG52YXIgYWRvcHRlZEJsb2JNYXAgPSBnbG9iYWxUaGlzW2Fkb3B0ZWRCbG9iTWFwU3ltYm9sXSA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgYWRvcHRlZEFwcGxpZWRUZXh0U3ltYm9sID0gU3ltYm9sLmZvcihcImRvbS50c0BhZG9wdGVkQXBwbGllZFRleHRcIik7XG52YXIgYWRvcHRlZEFwcGxpZWRUZXh0ID0gZ2xvYmFsVGhpc1thZG9wdGVkQXBwbGllZFRleHRTeW1ib2xdID8/PSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBhZG9wdGVkRmlsbGVkU3ltYm9sID0gU3ltYm9sLmZvcihcImRvbS50c0BhZG9wdGVkRmlsbGVkXCIpO1xudmFyIGFkb3B0ZWRGaWxsZWQgPSBnbG9iYWxUaGlzW2Fkb3B0ZWRGaWxsZWRTeW1ib2xdID8/PSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKTtcbnZhciB3cmFwQWRvcHRlZExheWVyID0gKGNzc1RleHQsIGxheWVyTmFtZSkgPT4gbGF5ZXJOYW1lID8gYEBsYXllciAke2xheWVyTmFtZX0geyAke2Nzc1RleHR9IH1gIDogY3NzVGV4dDtcbnZhciByZWFkU2hlZXRSdWxlQ291bnQgPSAoc2hlZXQpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gc2hlZXQuY3NzUnVsZXMubGVuZ3RoO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufTtcbnZhciByZW1lbWJlckFkb3B0ZWRUZXh0ID0gKHNoZWV0LCBjc3NUZXh0KSA9PiB7XG5cdGFkb3B0ZWRBcHBsaWVkVGV4dC5zZXQoc2hlZXQsIGNzc1RleHQpO1xuXHRhZG9wdGVkRmlsbGVkLmFkZChzaGVldCk7XG59O1xudmFyIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQgPSAoc2hlZXQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHN0b3JlZCA9IGFkb3B0ZWRBcHBsaWVkVGV4dC5nZXQoc2hlZXQpO1xuXHRpZiAoc3RvcmVkKSByZXR1cm4gc3RvcmVkO1xuXHRmb3IgKGNvbnN0IFtrZXksIG1hcHBlZF0gb2YgYWRvcHRlZE1hcCkgaWYgKG1hcHBlZCA9PT0gc2hlZXQgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGtleTtcblx0cmV0dXJuIG51bGw7XG59O1xudmFyIGlzQWRvcHRlZFNoZWV0RW1wdHkgPSAoc2hlZXQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIHRydWU7XG5cdGNvbnN0IGNvdW50ID0gcmVhZFNoZWV0UnVsZUNvdW50KHNoZWV0KTtcblx0aWYgKGNvdW50ID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiBjb3VudCA9PT0gMDtcbn07XG52YXIgZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudCA9IChzaGVldCwgY3NzVGV4dCkgPT4ge1xuXHRpZiAoIXNoZWV0KSByZXR1cm4gZmFsc2U7XG5cdGNvbnN0IHRleHQgPSBjc3NUZXh0IHx8IGNzc1RleHRGb3JBZG9wdGVkU2hlZXQoc2hlZXQpO1xuXHRjb25zdCBjb3VudCA9IHJlYWRTaGVldFJ1bGVDb3VudChzaGVldCk7XG5cdGlmIChjb3VudCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoY291bnQgPiAwKSB7XG5cdFx0YWRvcHRlZEZpbGxlZC5hZGQoc2hlZXQpO1xuXHRcdGlmICh0ZXh0ICYmICFhZG9wdGVkQXBwbGllZFRleHQuaGFzKHNoZWV0KSkgYWRvcHRlZEFwcGxpZWRUZXh0LnNldChzaGVldCwgdGV4dCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCF0ZXh0KSByZXR1cm4gZmFsc2U7XG5cdGlmIChhcHBseUFkb3B0ZWRTdHlsZVRleHQoc2hlZXQsIHRleHQpKSB7XG5cdFx0cmVtZW1iZXJBZG9wdGVkVGV4dChzaGVldCwgdGV4dCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbnZhciBsYXllckNvdW50ZXJTeW1ib2wgPSBTeW1ib2wuZm9yKFwiZG9tLnRzQGxheWVyQ291bnRlclwiKTtcbnZhciBsYXllckNvdW50ZXIgPSBnbG9iYWxUaGlzW2xheWVyQ291bnRlclN5bWJvbF0gPz89IDA7XG52YXIgYXBwbHlBZG9wdGVkU3R5bGVUZXh0ID0gKHNoZWV0LCBjc3NUZXh0KSA9PiB7XG5cdGlmICghc2hlZXQgfHwgIWNzc1RleHQpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRzaGVldC5yZXBsYWNlU3luYyhjc3NUZXh0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zdCBtZXNzYWdlID0gU3RyaW5nKGVycm9yPy5tZXNzYWdlIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKCEobWVzc2FnZS5pbmNsdWRlcyhcIkBpbXBvcnQgcnVsZXMgYXJlIG5vdCBhbGxvd2VkXCIpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoXCJAaW1wb3J0XCIpICYmIG1lc3NhZ2UuaW5jbHVkZXMoXCJub3QgYWxsb3dlZFwiKSkpIGNvbnNvbGUud2FybihcIltET01dIEZhaWxlZCB0byBhcHBseSBhZG9wdGVkIHN0eWxlc2hlZXQ6XCIsIGVycm9yKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdXJsQ2FuUGFyc2UgPSAodmFsdWUpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gdHlwZW9mIFVSTCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgVVJMLmNhblBhcnNlID09PSBcImZ1bmN0aW9uXCIgJiYgVVJMLmNhblBhcnNlKHZhbHVlKTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIHNoZWV0Rm9yQmxvYiA9IChibG9iKSA9PiB7XG5cdGxldCBzaGVldCA9IGFkb3B0ZWRCbG9iTWFwLmdldChibG9iKTtcblx0aWYgKCFzaGVldCkge1xuXHRcdHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRhZG9wdGVkQmxvYk1hcC5zZXQoYmxvYiwgc2hlZXQpO1xuXHR9XG5cdHJldHVybiBzaGVldDtcbn07XG52YXIgbG9hZEFzQWRvcHRlZCA9IChzdHlsZXMsIGxheWVyTmFtZSA9IG51bGwpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbG9hZEFzQWRvcHRlZFVuc2FmZShzdHlsZXMsIGxheWVyTmFtZSk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Y29uc29sZS53YXJuKFwiW0RPTV0gbG9hZEFzQWRvcHRlZCBmYWlsZWRcIiwgZXJyb3IpO1xuXHRcdGlmICh0eXBlb2Ygc3R5bGVzID09PSBcInN0cmluZ1wiKSBsb2FkSW5saW5lU3R5bGUoc3R5bGVzLCB2b2lkIDAsIGxheWVyTmFtZSB8fCBcIlwiKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufTtcbnZhciBsb2FkQXNBZG9wdGVkVW5zYWZlID0gKHN0eWxlcywgbGF5ZXJOYW1lID0gbnVsbCkgPT4ge1xuXHRpZiAoIXN1cHBvcnRzQ29uc3RydWN0YWJsZVN0eWxlc2hlZXQoKSkge1xuXHRcdGlmICh0eXBlb2Ygc3R5bGVzID09PSBcInN0cmluZ1wiKSBsb2FkSW5saW5lU3R5bGUoc3R5bGVzLCB2b2lkIDAsIGxheWVyTmFtZSB8fCBcIlwiKTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAodHlwZW9mIHN0eWxlcyA9PT0gXCJzdHJpbmdcIiAmJiBjc3NUZXh0UmVxdWlyZXNJbmxpbmVTdHlsZUVsZW1lbnQoc3R5bGVzKSkge1xuXHRcdGxvYWRJbmxpbmVTdHlsZShzdHlsZXMsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlb2Ygc3R5bGVzID09IFwic3RyaW5nXCIgJiYgYWRvcHRlZE1hcD8uaGFzPy4oc3R5bGVzKSkge1xuXHRcdGNvbnN0IGNhY2hlZCA9IGFkb3B0ZWRNYXAuZ2V0KHN0eWxlcyk7XG5cdFx0Y29uc3QgYXBwbGllZCA9IGFkb3B0ZWRBcHBsaWVkVGV4dC5nZXQoY2FjaGVkKSB8fCB3cmFwQWRvcHRlZExheWVyKHN0eWxlcywgbGF5ZXJOYW1lKTtcblx0XHRlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50KGNhY2hlZCwgYXBwbGllZCk7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgJiYgIWRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5pbmNsdWRlcyhjYWNoZWQpKSBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChjYWNoZWQpO1xuXHRcdHJldHVybiBjYWNoZWQ7XG5cdH1cblx0aWYgKChzdHlsZXMgaW5zdGFuY2VvZiBCbG9iIHx8IHN0eWxlcyBpbnN0YW5jZW9mIEZpbGUpICYmIGFkb3B0ZWRCbG9iTWFwPy5oYXM/LihzdHlsZXMpKSB7XG5cdFx0Y29uc3QgY2FjaGVkID0gYWRvcHRlZEJsb2JNYXAuZ2V0KHN0eWxlcyk7XG5cdFx0ZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudChjYWNoZWQpO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzICYmICFkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMuaW5jbHVkZXMoY2FjaGVkKSkgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goY2FjaGVkKTtcblx0XHRyZXR1cm4gY2FjaGVkO1xuXHR9XG5cdGlmICghc3R5bGVzKSByZXR1cm4gbnVsbDtcblx0Y29uc3Qgc2hlZXQgPSB0eXBlb2Ygc3R5bGVzID09IFwic3RyaW5nXCIgPyBnZXRPckluc2VydENvbXB1dGVkKGFkb3B0ZWRNYXAsIHN0eWxlcywgKCkgPT4gbmV3IENTU1N0eWxlU2hlZXQoKSkgOiBzaGVldEZvckJsb2Ioc3R5bGVzKTtcblx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cyAmJiAhZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLmluY2x1ZGVzKHNoZWV0KSkgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRpZiAodHlwZW9mIHN0eWxlcyA9PSBcInN0cmluZ1wiICYmICF1cmxDYW5QYXJzZShzdHlsZXMpKSB7XG5cdFx0Y29uc3QgbGF5ZXJXcmFwcGVkID0gd3JhcEFkb3B0ZWRMYXllcihzdHlsZXMsIGxheWVyTmFtZSk7XG5cdFx0YWRvcHRlZE1hcC5zZXQoc3R5bGVzLCBzaGVldCk7XG5cdFx0aWYgKCFhcHBseUFkb3B0ZWRTdHlsZVRleHQoc2hlZXQsIGxheWVyV3JhcHBlZCkpIHtcblx0XHRcdHJlbW92ZUFkb3B0ZWQoc2hlZXQpO1xuXHRcdFx0YWRvcHRlZE1hcC5kZWxldGUoc3R5bGVzKTtcblx0XHRcdGxvYWRJbmxpbmVTdHlsZShzdHlsZXMpO1xuXHRcdH0gZWxzZSByZW1lbWJlckFkb3B0ZWRUZXh0KHNoZWV0LCBsYXllcldyYXBwZWQpO1xuXHRcdHJldHVybiBzaGVldDtcblx0fSBlbHNlIHByb21pc2VPckRpcmVjdChmZXRjaEFzSW5saW5lKHN0eWxlcyksIChjYWNoZWQpID0+IHtcblx0XHRhZG9wdGVkTWFwLnNldChjYWNoZWQsIHNoZWV0KTtcblx0XHRpZiAoY2FjaGVkKSB7XG5cdFx0XHRpZiAoY3NzVGV4dFJlcXVpcmVzSW5saW5lU3R5bGVFbGVtZW50KGNhY2hlZCkpIHtcblx0XHRcdFx0cmVtb3ZlQWRvcHRlZChzaGVldCk7XG5cdFx0XHRcdGFkb3B0ZWRNYXAuZGVsZXRlKGNhY2hlZCk7XG5cdFx0XHRcdGFkb3B0ZWRCbG9iTWFwLmRlbGV0ZShzdHlsZXMpO1xuXHRcdFx0XHRsb2FkSW5saW5lU3R5bGUoY2FjaGVkLCB2b2lkIDAsIGxheWVyTmFtZSB8fCBcIlwiKTtcblx0XHRcdFx0cmV0dXJuIHNoZWV0O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbGF5ZXJXcmFwcGVkID0gd3JhcEFkb3B0ZWRMYXllcihjYWNoZWQsIGxheWVyTmFtZSk7XG5cdFx0XHRpZiAoIWFwcGx5QWRvcHRlZFN0eWxlVGV4dChzaGVldCwgbGF5ZXJXcmFwcGVkKSkge1xuXHRcdFx0XHRyZW1vdmVBZG9wdGVkKHNoZWV0KTtcblx0XHRcdFx0YWRvcHRlZE1hcC5kZWxldGUoY2FjaGVkKTtcblx0XHRcdFx0YWRvcHRlZEJsb2JNYXAuZGVsZXRlKHN0eWxlcyk7XG5cdFx0XHRcdGxvYWRJbmxpbmVTdHlsZShjYWNoZWQsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdFx0fSBlbHNlIHJlbWVtYmVyQWRvcHRlZFRleHQoc2hlZXQsIGxheWVyV3JhcHBlZCk7XG5cdFx0XHRyZXR1cm4gc2hlZXQ7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHNoZWV0O1xufTtcbnZhciBzdHlsZVRyZWVIb29rU3ltYm9sID0gU3ltYm9sLmZvcihcImRvbS50c0BzdHlsZVRyZWVIb29rc1wiKTtcbnZhciBzdHlsZVRyZWVIb29rcyA9IGdsb2JhbFRoaXNbc3R5bGVUcmVlSG9va1N5bWJvbF0gPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG52YXIgc3R5bGVUcmVlT2JzZXJ2ZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKTtcbnZhciBzdHlsZVRyZWVSb290cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG52YXIgU1RZTEVfVFJFRV9BVFRSUyA9IFtcblx0XCJkYXRhLXRoZW1lXCIsXG5cdFwiZGF0YS1leHBsb3Jlci1jb2xvci1zY2hlbWVcIixcblx0XCJkYXRhLWNvbG9yLXNjaGVtZVwiLFxuXHRcInRoZW1lXCIsXG5cdFwiY29sb3Itc2NoZW1lXCJcbl07XG52YXIgaXNTdHlsZUhvc3QgPSAobm9kZSkgPT4ge1xuXHRpZiAoIW5vZGUgfHwgbm9kZS5ub2RlVHlwZSAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoU3RyaW5nKG5vZGUubG9jYWxOYW1lIHx8IFwiXCIpLmluY2x1ZGVzKFwiLVwiKSkgcmV0dXJuIHRydWU7XG5cdGlmIChub2RlLnNoYWRvd1Jvb3QpIHJldHVybiB0cnVlO1xuXHRpZiAobm9kZS5zdHlsZXMgIT0gbnVsbCkgcmV0dXJuIHRydWU7XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgY29sbGVjdFN0eWxlSG9zdHMgPSAobm9kZSwgaW50bykgPT4ge1xuXHRpZiAoIW5vZGUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gMykgcmV0dXJuO1xuXHRpZiAobm9kZS5ub2RlVHlwZSA9PT0gMTEpIHtcblx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGROb2RlcyB8fCBbXSkgY29sbGVjdFN0eWxlSG9zdHMoY2hpbGQsIGludG8pO1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoaXNTdHlsZUhvc3Qobm9kZSkpIGludG8uYWRkKG5vZGUpO1xuXHRpZiAodHlwZW9mIG5vZGUucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm47XG5cdHRyeSB7XG5cdFx0Zm9yIChjb25zdCBlbCBvZiBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpKSBpZiAoaXNTdHlsZUhvc3QoZWwpKSBpbnRvLmFkZChlbCk7XG5cdH0gY2F0Y2gge31cbn07XG52YXIgbm90aWZ5U3R5bGVUcmVlSG9zdHMgPSAoaG9zdHMsIHJlYXNvbiA9IFwidHJlZVwiKSA9PiB7XG5cdGZvciAoY29uc3QgZWwgb2YgaG9zdHMpIHtcblx0XHRpZiAoIWlzU3R5bGVIb3N0KGVsKSkgY29udGludWU7XG5cdFx0Zm9yIChjb25zdCBmbiBvZiBzdHlsZVRyZWVIb29rcykgZm4oZWwsIHJlYXNvbik7XG5cdH1cbn07XG52YXIgcmVnaXN0ZXJTdHlsZVRyZWVIb29rID0gKGZuKSA9PiB7XG5cdGlmICh0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuO1xuXHRzdHlsZVRyZWVIb29rcy5hZGQoZm4pO1xufTtcbnZhciBvYnNlcnZlU3R5bGVUcmVlID0gKHJvb3QpID0+IHtcblx0aWYgKCFyb290IHx8IHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcm9vdDtcblx0aWYgKHN0eWxlVHJlZU9ic2VydmVkLmhhcyhyb290KSkgcmV0dXJuIHJvb3Q7XG5cdHN0eWxlVHJlZU9ic2VydmVkLmFkZChyb290KTtcblx0c3R5bGVUcmVlUm9vdHMuYWRkKHJvb3QpO1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChyZWNvcmRzKSA9PiB7XG5cdFx0Y29uc3QgaG9zdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRcdGZvciAoY29uc3QgcmVjIG9mIHJlY29yZHMpIGlmIChyZWMudHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIHJlYy5hZGRlZE5vZGVzKSBjb2xsZWN0U3R5bGVIb3N0cyhub2RlLCBob3N0cyk7XG5cdFx0XHRjb25zdCBzY29wZSA9IHJlYy50YXJnZXQ/LmdldFJvb3ROb2RlPy4oKTtcblx0XHRcdGlmIChzY29wZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgJiYgaXNTdHlsZUhvc3Qoc2NvcGUuaG9zdCkpIHtcblx0XHRcdFx0Y29uc3Qgc2hlZXRzID0gc2NvcGUuYWRvcHRlZFN0eWxlU2hlZXRzO1xuXHRcdFx0XHRpZiAoIXNoZWV0cyB8fCBzaGVldHMubGVuZ3RoID09PSAwKSBob3N0cy5hZGQoc2NvcGUuaG9zdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChyZWMudHlwZSA9PT0gXCJhdHRyaWJ1dGVzXCIgJiYgcmVjLnRhcmdldCkge1xuXHRcdFx0aWYgKGlzU3R5bGVIb3N0KHJlYy50YXJnZXQpKSBob3N0cy5hZGQocmVjLnRhcmdldCk7XG5cdFx0fVxuXHRcdG5vdGlmeVN0eWxlVHJlZUhvc3RzKGhvc3RzLCBcIm11dGF0aW9uXCIpO1xuXHR9KTtcblx0dHJ5IHtcblx0XHRvYnNlcnZlci5vYnNlcnZlKHJvb3QsIHtcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbLi4uU1RZTEVfVFJFRV9BVFRSU11cblx0XHR9KTtcblx0fSBjYXRjaCB7XG5cdFx0c3R5bGVUcmVlT2JzZXJ2ZWQuZGVsZXRlKHJvb3QpO1xuXHRcdHJldHVybiByb290O1xuXHR9XG5cdHJldHVybiByb290O1xufTtcbnZhciByZWh5ZHJhdGVDb25zdHJ1Y3RhYmxlU2hlZXRzID0gKCkgPT4ge1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG5cdGNvbnN0IGNhblBhcnNlID0gdHlwZW9mIFVSTCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgVVJMLmNhblBhcnNlID09PSBcImZ1bmN0aW9uXCI7XG5cdGZvciAoY29uc3QgW2tleSwgc2hlZXRdIG9mIGFkb3B0ZWRNYXApIHtcblx0XHRpZiAoIXNoZWV0IHx8IHR5cGVvZiBrZXkgIT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xuXHRcdGlmIChjYW5QYXJzZSAmJiBVUkwuY2FuUGFyc2Uoa2V5KSkgY29udGludWU7XG5cdFx0Y29uc3QgdGV4dCA9IGFkb3B0ZWRBcHBsaWVkVGV4dC5nZXQoc2hlZXQpIHx8IGtleTtcblx0XHRlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50KHNoZWV0LCB0ZXh0KTtcblx0XHRpZiAoZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzICYmICFkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMuaW5jbHVkZXMoc2hlZXQpKSBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChzaGVldCk7XG5cdH1cbn07XG52YXIgcmVtb3ZlQWRvcHRlZCA9IChzaGVldCkgPT4ge1xuXHRpZiAoIXNoZWV0KSByZXR1cm4gZmFsc2U7XG5cdGNvbnN0IHRhcmdldCA9IHR5cGVvZiBzaGVldCA9PT0gXCJzdHJpbmdcIiA/IGFkb3B0ZWRNYXAuZ2V0KHNoZWV0KSA6IHNoZWV0O1xuXHRpZiAoIXRhcmdldCB8fCB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcblx0Y29uc3Qgc2hlZXRzID0gZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzO1xuXHRjb25zdCBpZHggPSBzaGVldHMuaW5kZXhPZih0YXJnZXQpO1xuXHRpZiAoaWR4ICE9PSAtMSkge1xuXHRcdHNoZWV0cy5zcGxpY2UoaWR4LCAxKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xudmFyIHBhcnNlT3JpZ2luID0gKG9yaWdpbiwgZWxlbWVudCkgPT4ge1xuXHRjb25zdCB2YWx1ZXMgPSBvcmlnaW4uc3BsaXQoXCIgXCIpO1xuXHRyZXR1cm4gbmV3IERPTVBvaW50KHBhcnNlTGVuZ3RoKHZhbHVlc1swXSwgKCkgPT4gZWxlbWVudC5jbGllbnRXaWR0aCksIHBhcnNlTGVuZ3RoKHZhbHVlc1sxXSwgKCkgPT4gZWxlbWVudC5jbGllbnRIZWlnaHQpKTtcbn07XG52YXIgcGFyc2VMZW5ndGggPSAodmFsdWUsIHNpemUpID0+IHtcblx0aWYgKHZhbHVlLmVuZHNXaXRoKFwiJVwiKSkgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpIC8gMTAwICogc2l6ZSgpO1xuXHRyZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG59O1xudmFyIGdldFRyYW5zZm9ybSA9IChlbCkgPT4ge1xuXHRpZiAoZWw/LmNvbXB1dGVkU3R5bGVNYXApIHtcblx0XHRjb25zdCBtYXRyaXggPSBlbC5jb21wdXRlZFN0eWxlTWFwKCkuZ2V0KFwidHJhbnNmb3JtXCIpPy50b01hdHJpeD8uKCk7XG5cdFx0aWYgKG1hdHJpeCkgcmV0dXJuIG1hdHJpeDtcblx0fSBlbHNlIGlmIChlbCkge1xuXHRcdGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0cmV0dXJuIG5ldyBET01NYXRyaXgoc3R5bGU/LmdldFByb3BlcnR5VmFsdWU/LihcInRyYW5zZm9ybVwiKSk7XG5cdH1cblx0cmV0dXJuIG5ldyBET01NYXRyaXgoKTtcbn07XG52YXIgZ2V0VHJhbnNmb3JtT3JpZ2luID0gKGVsKSA9PiB7XG5cdGNvbnN0IGNzc09yaWdpbiA9IGdldENvbXB1dGVkU3R5bGUoZWwpPy5nZXRQcm9wZXJ0eVZhbHVlPy4oXCJ0cmFuc2Zvcm0tb3JpZ2luXCIpIHx8IGA1MCUgNTAlYDtcblx0cmV0dXJuIHBhcnNlT3JpZ2luKGNzc09yaWdpbiwgZWwpO1xufTtcbnZhciBnZXRQcm9wZXJ0eVZhbHVlID0gKHNyYywgbmFtZSkgPT4ge1xuXHRpZiAoXCJjb21wdXRlZFN0eWxlTWFwXCIgaW4gc3JjKSB7XG5cdFx0Y29uc3QgdmFsID0gc3JjPy5jb21wdXRlZFN0eWxlTWFwPy4oKT8uZ2V0KG5hbWUpO1xuXHRcdHJldHVybiB2YWwgaW5zdGFuY2VvZiBDU1NVbml0VmFsdWUgPyB2YWw/LnZhbHVlIHx8IDAgOiB2YWw/LnRvU3RyaW5nPy4oKTtcblx0fVxuXHRpZiAoc3JjIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRjb25zdCBjcyA9IGdldENvbXB1dGVkU3R5bGU/LihzcmMsIFwiXCIpO1xuXHRcdHJldHVybiBwYXJzZUZsb2F0KGNzPy5nZXRQcm9wZXJ0eVZhbHVlPy4obmFtZSk/LnJlcGxhY2U/LihcInB4XCIsIFwiXCIpKSB8fCAwO1xuXHR9XG5cdHJldHVybiBwYXJzZUZsb2F0KChzcmM/LnN0eWxlID8/IHNyYykuZ2V0UHJvcGVydHlWYWx1ZT8uKG5hbWUpPy5yZXBsYWNlPy4oXCJweFwiLCBcIlwiKSkgfHwgMDtcbn07XG52YXIgZ2V0RWxlbWVudFpvb20gPSAoZWxlbWVudCkgPT4ge1xuXHRsZXQgem9vbSA9IDEsIGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcblx0d2hpbGUgKGN1cnJlbnRFbGVtZW50KSB7XG5cdFx0aWYgKFwiY3VycmVudENTU1pvb21cIiBpbiBjdXJyZW50RWxlbWVudCkge1xuXHRcdFx0Y29uc3QgY3VycmVudENTU1pvb20gPSBjdXJyZW50RWxlbWVudC5jdXJyZW50Q1NTWm9vbTtcblx0XHRcdGlmICh0eXBlb2YgY3VycmVudENTU1pvb20gPT09IFwibnVtYmVyXCIpIHJldHVybiB6b29tICo9IGN1cnJlbnRDU1Nab29tO1xuXHRcdH1cblx0XHRjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudEVsZW1lbnQpO1xuXHRcdGlmIChzdHlsZS56b29tICYmIHN0eWxlLnpvb20gIT09IFwibm9ybWFsXCIpIHJldHVybiB6b29tICo9IHBhcnNlRmxvYXQoc3R5bGUuem9vbSk7XG5cdFx0aWYgKHN0eWxlLnpvb20gJiYgc3R5bGUuem9vbSAhPT0gXCJub3JtYWxcIiB8fCBcImN1cnJlbnRDU1Nab29tXCIgaW4gY3VycmVudEVsZW1lbnQpIHJldHVybiB6b29tO1xuXHRcdGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQ/Lm9mZnNldFBhcmVudCA/PyBjdXJyZW50RWxlbWVudD8ucGFyZW50RWxlbWVudDtcblx0fVxuXHRyZXR1cm4gem9vbTtcbn07XG52YXIgZ2V0UHhWYWx1ZSA9IChlbGVtZW50LCBuYW1lKSA9PiB7XG5cdHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPy4oZWxlbWVudCwgbmFtZSk7XG59O1xudmFyIGdldFBhZGRpbmcgPSAoc3JjLCBheGlzKSA9PiB7XG5cdGlmIChheGlzID09IFwiaW5saW5lXCIpIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlKHNyYywgXCJwYWRkaW5nLWlubGluZS1zdGFydFwiKSArIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctaW5saW5lLWVuZFwiKTtcblx0cmV0dXJuIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctYmxvY2stc3RhcnRcIikgKyBnZXRQcm9wZXJ0eVZhbHVlKHNyYywgXCJwYWRkaW5nLWJsb2NrLWVuZFwiKTtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9jc3NvbS50c1xudmFyIE9XTkVSID0gXCJET01cIjtcbnZhciBzdHlsZUVsZW1lbnQgPSB0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSA6IG51bGw7XG5pZiAoc3R5bGVFbGVtZW50KSB7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJoZWFkXCIpPy5hcHBlbmRDaGlsZD8uKHN0eWxlRWxlbWVudCk7XG5cdHN0eWxlRWxlbWVudC5kYXRhc2V0Lm93bmVyID0gXCJET01cIjtcbn1cbnZhciBzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0ID0gKCkgPT4gdHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGdsb2JhbFRoaXMuQ1NTU3R5bGVTaGVldCA9PT0gXCJmdW5jdGlvblwiO1xudmFyIGNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudCA9IChjc3MpID0+IHR5cGVvZiBjc3MgPT09IFwic3RyaW5nXCIgJiYgL0BpbXBvcnRcXGIvaS50ZXN0KGNzcyk7XG52YXIgaXNMYXllckJsb2NrUnVsZSA9IChydWxlKSA9PiB0eXBlb2YgQ1NTTGF5ZXJCbG9ja1J1bGUgIT09IFwidW5kZWZpbmVkXCIgJiYgcnVsZSBpbnN0YW5jZW9mIENTU0xheWVyQmxvY2tSdWxlO1xudmFyIGdldE9yQ3JlYXRlTGF5ZXJSdWxlID0gKHNoZWV0LCBsYXllck5hbWUpID0+IHtcblx0aWYgKCFzaGVldCB8fCAhbGF5ZXJOYW1lKSByZXR1cm4gdm9pZCAwO1xuXHRjb25zdCBydWxlcyA9IEFycmF5LmZyb20oc2hlZXQuY3NzUnVsZXMgfHwgW10pO1xuXHRjb25zdCBleGlzdGluZyA9IHJ1bGVzLmZpbmQoKHJ1bGUpID0+IGlzTGF5ZXJCbG9ja1J1bGUocnVsZSkgJiYgcnVsZS5uYW1lID09PSBsYXllck5hbWUpO1xuXHRpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblx0dHJ5IHtcblx0XHRjb25zdCBydWxlSW5kZXggPSBzaGVldC5pbnNlcnRSdWxlKGBAbGF5ZXIgJHtsYXllck5hbWV9IHt9YCwgcnVsZXMubGVuZ3RoKTtcblx0XHRjb25zdCBjcmVhdGVkID0gc2hlZXQuY3NzUnVsZXM/LltydWxlSW5kZXhdO1xuXHRcdHJldHVybiBpc0xheWVyQmxvY2tSdWxlKGNyZWF0ZWQpID8gY3JlYXRlZCA6IHZvaWQgMDtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuO1xuXHR9XG59O1xudmFyIHNldFN0eWxlVVJMID0gKGJhc2UsIHVybCwgbGF5ZXIgPSBcIlwiKSA9PiB7XG5cdGJhc2VbMF1bYmFzZVsxXV0gPSBiYXNlWzFdID09IFwiaW5uZXJIVE1MXCIgPyBgQGltcG9ydCB1cmwoXCIke3VybH1cIikgJHtsYXllciAmJiB0eXBlb2YgbGF5ZXIgPT0gXCJzdHJpbmdcIiA/IGBsYXllcigke2xheWVyfSlgIDogXCJcIn07YCA6IHVybDtcbn07XG52YXIgc2V0U3R5bGVSdWxlcyA9IChjbGFzc2VzKSA9PiB7XG5cdHJldHVybiBjbGFzc2VzPy5tYXA/LigoYXJncykgPT4gc2V0U3R5bGVSdWxlKC4uLmFyZ3MpKTtcbn07XG52YXIgZ2V0U3R5bGVMYXllciA9IChsYXllck5hbWUsIHNoZWV0KSA9PiB7XG5cdHNoZWV0IHx8PSBzdHlsZUVsZW1lbnQ/LnNoZWV0O1xuXHRyZXR1cm4gZ2V0T3JDcmVhdGVMYXllclJ1bGUoc2hlZXQsIGxheWVyTmFtZSk7XG59O1xudmFyIHN0eWxlSWRDb3VudGVyID0gMDtcbnZhciBpc1NoYWRvd1Jvb3QgPSAodmFsdWUpID0+IHR5cGVvZiBTaGFkb3dSb290ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbnZhciBpc0RvY3VtZW50ID0gKHZhbHVlKSA9PiB0eXBlb2YgRG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEb2N1bWVudDtcbnZhciBpc0VsZW1lbnQgPSAodmFsdWUpID0+IHR5cGVvZiBFbGVtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudDtcbnZhciBlc2NhcGVDU1NJZGVudGlmaWVyID0gKHZhbHVlKSA9PiB7XG5cdGlmICh0eXBlb2YgQ1NTICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBDU1MuZXNjYXBlID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBDU1MuZXNjYXBlKHZhbHVlKTtcblx0cmV0dXJuIEFycmF5LmZyb20odmFsdWUpLm1hcCgoY2hhcikgPT4gYFxcXFwke2NoYXIuY29kZVBvaW50QXQoMCkudG9TdHJpbmcoMTYpfSBgKS5qb2luKFwiXCIpO1xufTtcbnZhciBjcmVhdGVTdHlsZUlkID0gKCkgPT4ge1xuXHRpZiAodHlwZW9mIGNyeXB0byAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgY3J5cHRvLnJhbmRvbVVVSUQgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XG5cdHJldHVybiBgdXgtJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0tJHsoKytzdHlsZUlkQ291bnRlcikudG9TdHJpbmcoMzYpfWA7XG59O1xudmFyIGpvaW5TY29wZWRTZWxlY3RvciA9IChzY29wZSwgc2VsZWN0b3IpID0+IHtcblx0c2VsZWN0b3IgPSBzZWxlY3Rvci50cmltKCk7XG5cdGlmICghc2NvcGUpIHJldHVybiBzZWxlY3Rvcjtcblx0aWYgKCFzZWxlY3RvcikgcmV0dXJuIHNjb3BlO1xuXHRpZiAoc2VsZWN0b3Iuc3RhcnRzV2l0aChcIjo6XCIpKSByZXR1cm4gYCR7c2NvcGV9JHtzZWxlY3Rvcn1gO1xuXHRyZXR1cm4gYCR7c2NvcGV9ICR7c2VsZWN0b3J9YDtcbn07XG52YXIgZmluZFN0eWxlUnVsZSA9IChzaGVldCwgZnVsbFNlbGVjdG9yLCBzY29wZSwgc2VsZWN0b3IpID0+IHtcblx0Y29uc3QgcnVsZXMgPSBBcnJheS5mcm9tKHNoZWV0Py5jc3NSdWxlcyB8fCBbXSk7XG5cdGNvbnN0IGV4cGVjdGVkID0gZnVsbFNlbGVjdG9yLnRyaW0oKTtcblx0Y29uc3QgcmVxdWVzdGVkID0gc2VsZWN0b3IudHJpbSgpO1xuXHRyZXR1cm4gcnVsZXMuZmluZEluZGV4KChydWxlKSA9PiB7XG5cdFx0aWYgKCEocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSkpIHJldHVybiBmYWxzZTtcblx0XHRjb25zdCBhY3R1YWwgPSBydWxlLnNlbGVjdG9yVGV4dD8udHJpbT8uKCkgPz8gXCJcIjtcblx0XHRpZiAoYWN0dWFsID09PSBleHBlY3RlZCkgcmV0dXJuIHRydWU7XG5cdFx0aWYgKHJlcXVlc3RlZCAmJiBhY3R1YWwuZW5kc1dpdGgocmVxdWVzdGVkKSkgcmV0dXJuIGFjdHVhbC5zbGljZSgwLCBhY3R1YWwubGVuZ3RoIC0gcmVxdWVzdGVkLmxlbmd0aCkudHJpbSgpID09PSBzY29wZTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufTtcbnZhciBnZXRTdHlsZVJ1bGUgPSAoc2VsZWN0b3IsIHNoZWV0LCBsYXllck5hbWUgPSBcInV4LXF1ZXJ5XCIsIGJhc2lzID0gbnVsbCkgPT4ge1xuXHRjb25zdCByb290ID0gaXNTaGFkb3dSb290KGJhc2lzKSB8fCBpc0RvY3VtZW50KGJhc2lzKSA/IGJhc2lzIDogYmFzaXM/LmdldFJvb3ROb2RlPy4oKSA/PyAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQgOiBudWxsKTtcblx0Y29uc3QgYmFzaXNFbGVtZW50ID0gaXNFbGVtZW50KGJhc2lzKSA/IGJhc2lzIDogbnVsbDtcblx0bGV0IHNjb3BlID0gXCJcIjtcblx0aWYgKGJhc2lzRWxlbWVudD8uaWQpIHNjb3BlID0gYCMke2VzY2FwZUNTU0lkZW50aWZpZXIoYmFzaXNFbGVtZW50LmlkKX1gO1xuXHRlbHNlIGlmIChiYXNpc0VsZW1lbnQpIHtcblx0XHRsZXQgc3R5bGVJZCA9IGJhc2lzRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlLWlkXCIpO1xuXHRcdGlmICghc3R5bGVJZCkge1xuXHRcdFx0c3R5bGVJZCA9IGNyZWF0ZVN0eWxlSWQoKTtcblx0XHRcdGJhc2lzRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlLWlkXCIsIHN0eWxlSWQpO1xuXHRcdH1cblx0XHRzY29wZSA9IGBbZGF0YS1zdHlsZS1pZD1cIiR7ZXNjYXBlQ1NTSWRlbnRpZmllcihzdHlsZUlkKX1cIl1gO1xuXHR9IGVsc2UgaWYgKGlzU2hhZG93Um9vdChyb290KSkgc2NvcGUgPSBcIjpob3N0XCI7XG5cdGVsc2UgaWYgKGlzRG9jdW1lbnQocm9vdCkpIHNjb3BlID0gXCI6cm9vdFwiO1xuXHRsZXQgc3R5bGVFbGVtZW50ID0gbnVsbDtcblx0aWYgKGlzU2hhZG93Um9vdChyb290KSkge1xuXHRcdHN0eWxlRWxlbWVudCA9IHJvb3QucXVlcnlTZWxlY3RvcihcInN0eWxlW2RhdGEtdXgtcXVlcnldXCIpO1xuXHRcdGlmICghc3R5bGVFbGVtZW50ICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0c3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuXHRcdFx0c3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtdXgtcXVlcnlcIiwgXCJcIik7XG5cdFx0XHRyb290LmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7XG5cdFx0fVxuXHR9IGVsc2Ugc3R5bGVFbGVtZW50ID0gc3R5bGVFbGVtZW50R2xvYmFsKCk7XG5cdHNoZWV0IHx8PSBzdHlsZUVsZW1lbnQ/LnNoZWV0O1xuXHRpZiAoIXNoZWV0KSByZXR1cm47XG5cdGlmIChsYXllck5hbWUpIHJldHVybiBnZXRTdHlsZVJ1bGUoc2VsZWN0b3IsIGdldFN0eWxlTGF5ZXIobGF5ZXJOYW1lLCBzaGVldCksIG51bGwsIGJhc2lzKTtcblx0Y29uc3QgZnVsbFNlbGVjdG9yID0gam9pblNjb3BlZFNlbGVjdG9yKHNjb3BlLCBzZWxlY3Rvcik7XG5cdGxldCBydWxlSWQgPSBmaW5kU3R5bGVSdWxlKHNoZWV0LCBmdWxsU2VsZWN0b3IsIHNjb3BlLCBzZWxlY3Rvcik7XG5cdGlmIChydWxlSWQgPT09IC0xKSBydWxlSWQgPSBzaGVldC5pbnNlcnRSdWxlKGAke2Z1bGxTZWxlY3Rvcn0ge31gKTtcblx0cmV0dXJuIHNoZWV0LmNzc1J1bGVzPy5bcnVsZUlkXTtcbn07XG5mdW5jdGlvbiBzdHlsZUVsZW1lbnRHbG9iYWwoKSB7XG5cdHJldHVybiBzdHlsZUVsZW1lbnQgPz8gbnVsbDtcbn1cbnZhciBwcm9taXNlT3JEaXJlY3QgPSAocHJvbWlzZSwgY2IpID0+IHtcblx0aWYgKHR5cGVvZiBwcm9taXNlPy50aGVuID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHByb21pc2U/LnRoZW4/LihjYik7XG5cdHJldHVybiBjYihwcm9taXNlKTtcbn07XG52YXIgYmxvYlVSTE1hcFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJkb20udHNAYmxvYlVSTE1hcFwiKTtcbnZhciBibG9iVVJMTWFwID0gZ2xvYmFsVGhpc1tibG9iVVJMTWFwU3ltYm9sXSA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgY2FjaGVNYXBTeW1ib2wgPSBTeW1ib2wuZm9yKFwiZG9tLnRzQGNhY2hlTWFwXCIpO1xudmFyIGNhY2hlTWFwID0gZ2xvYmFsVGhpc1tjYWNoZU1hcFN5bWJvbF0gPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgZmV0Y2hBbmRDYWNoZSA9ICh1cmwpID0+IHtcblx0aWYgKCF1cmwpIHJldHVybiBudWxsO1xuXHRpZiAoY2FjaGVNYXAuaGFzKHVybCkpIHJldHVybiBjYWNoZU1hcC5nZXQodXJsKTtcblx0aWYgKHVybCBpbnN0YW5jZW9mIEJsb2IgfHwgdXJsIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGlmIChibG9iVVJMTWFwLmhhcyh1cmwpKSByZXR1cm4gYmxvYlVSTE1hcC5nZXQodXJsKTtcblx0XHRjb25zdCBidXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTCh1cmwpO1xuXHRcdGJsb2JVUkxNYXAuc2V0KHVybCwgYnVybCk7XG5cdFx0Y2FjaGVNYXAuc2V0KGJ1cmwsIGJ1cmwpO1xuXHRcdHJldHVybiBidXJsO1xuXHR9XG5cdGlmIChVUkwuY2FuUGFyc2UodXJsKSB8fCB1cmw/LnRyaW0/LigpPy5zdGFydHNXaXRoPy4oXCIuL1wiKSkge1xuXHRcdGNvbnN0IHByb21pc2VkID0gZmV0Y2godXJsPy5yZXBsYWNlPy4oXCI/dXJsXCIsIFwiP3Jhd1wiKSwge1xuXHRcdFx0Y2FjaGU6IFwiZm9yY2UtY2FjaGVcIixcblx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHByaW9yaXR5OiBcImhpZ2hcIlxuXHRcdH0pPy50aGVuPy4oYXN5bmMgKHJlcykgPT4ge1xuXHRcdFx0Y29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG5cdFx0XHRjb25zdCBidXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRcdGJsb2JVUkxNYXAuc2V0KGJsb2IsIGJ1cmwpO1xuXHRcdFx0Y2FjaGVNYXAuc2V0KHVybCwgYnVybCk7XG5cdFx0XHRjYWNoZU1hcC5zZXQoYnVybCwgYnVybCk7XG5cdFx0XHRyZXR1cm4gYnVybDtcblx0XHR9KTtcblx0XHRjYWNoZU1hcC5zZXQodXJsLCBwcm9taXNlZCk7XG5cdFx0cmV0dXJuIHByb21pc2VkO1xuXHR9XG5cdGlmICh0eXBlb2YgdXJsID09IFwic3RyaW5nXCIpIHtcblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW3VybF0sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXHRcdGNvbnN0IGJ1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdGJsb2JVUkxNYXAuc2V0KGJsb2IsIGJ1cmwpO1xuXHRcdGNhY2hlTWFwLnNldChidXJsLCBidXJsKTtcblx0XHRyZXR1cm4gYnVybDtcblx0fVxuXHRyZXR1cm4gdXJsO1xufTtcbnZhciBjYWNoZUNvbnRlbnRNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIGNhY2hlQmxvYkNvbnRlbnRNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBmZXRjaEFzSW5saW5lID0gKHVybCkgPT4ge1xuXHRpZiAoIXVybCkgcmV0dXJuIFwiXCI7XG5cdGlmIChjYWNoZUNvbnRlbnRNYXAuaGFzKHVybCkpIHJldHVybiBjYWNoZUNvbnRlbnRNYXAuZ2V0KHVybCkgPz8gXCJcIjtcblx0aWYgKHVybCBpbnN0YW5jZW9mIEJsb2IgfHwgdXJsIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGlmIChjYWNoZUJsb2JDb250ZW50TWFwLmhhcyh1cmwpKSByZXR1cm4gY2FjaGVCbG9iQ29udGVudE1hcC5nZXQodXJsKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHByb21pc2VkID0gdXJsPy50ZXh0Py4oKT8udGhlbj8uKCh0ZXh0KSA9PiB7XG5cdFx0XHRjYWNoZUJsb2JDb250ZW50TWFwLnNldCh1cmwsIHRleHQpO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fSk7XG5cdFx0Y2FjaGVCbG9iQ29udGVudE1hcC5zZXQodXJsLCBwcm9taXNlZCk7XG5cdFx0cmV0dXJuIHByb21pc2VkO1xuXHR9XG5cdGlmIChVUkwuY2FuUGFyc2UodXJsKSB8fCB1cmw/LnRyaW0/LigpPy5zdGFydHNXaXRoPy4oXCIuL1wiKSkge1xuXHRcdGNvbnN0IHByb21pc2VkID0gZmV0Y2godXJsPy5yZXBsYWNlPy4oXCI/dXJsXCIsIFwiP3Jhd1wiKSwge1xuXHRcdFx0Y2FjaGU6IFwiZm9yY2UtY2FjaGVcIixcblx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHByaW9yaXR5OiBcImhpZ2hcIlxuXHRcdH0pPy50aGVuPy4oYXN5bmMgKHJlcykgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG5cdFx0XHRjYWNoZUNvbnRlbnRNYXAuc2V0KHVybCwgdGV4dCk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9KTtcblx0XHRjYWNoZUNvbnRlbnRNYXAuc2V0KHVybCwgcHJvbWlzZWQpO1xuXHRcdHJldHVybiBwcm9taXNlZDtcblx0fVxuXHRpZiAodHlwZW9mIHVybCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0Y2FjaGVDb250ZW50TWFwLnNldCh1cmwsIHVybCk7XG5cdFx0cmV0dXJuIHVybDtcblx0fVxuXHRyZXR1cm4gdXJsO1xufTtcbnZhciBhZG9wdGVkU2VsZWN0b3JNYXBTeW1ib2wgPSBTeW1ib2wuZm9yKFwiZG9tLnRzQGFkb3B0ZWRTZWxlY3Rvck1hcFwiKTtcbnZhciBhZG9wdGVkU2VsZWN0b3JNYXAgPSBnbG9iYWxUaGlzW2Fkb3B0ZWRTZWxlY3Rvck1hcFN5bWJvbF0gPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwU3ltYm9sID0gU3ltYm9sLmZvcihcImRvbS50c0BhZG9wdGVkU2hhZG93U2VsZWN0b3JNYXBcIik7XG52YXIgYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwID0gZ2xvYmFsVGhpc1thZG9wdGVkU2hhZG93U2VsZWN0b3JNYXBTeW1ib2xdID8/PSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBhZG9wdGVkTGF5ZXJNYXBTeW1ib2wgPSBTeW1ib2wuZm9yKFwiZG9tLnRzQGFkb3B0ZWRMYXllck1hcFwiKTtcbnZhciBhZG9wdGVkTGF5ZXJNYXAgPSBnbG9iYWxUaGlzW2Fkb3B0ZWRMYXllck1hcFN5bWJvbF0gPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG52YXIgYWRvcHRlZFNoYWRvd0xheWVyTWFwU3ltYm9sID0gU3ltYm9sLmZvcihcImRvbS50c0BhZG9wdGVkU2hhZG93TGF5ZXJNYXBcIik7XG52YXIgYWRvcHRlZFNoYWRvd0xheWVyTWFwID0gZ2xvYmFsVGhpc1thZG9wdGVkU2hhZG93TGF5ZXJNYXBTeW1ib2xdID8/PSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBnZXRBZG9wdGVkU3R5bGVSdWxlID0gKHNlbGVjdG9yLCBsYXllck5hbWUgPSBcInV4LXF1ZXJ5XCIsIGJhc2lzID0gbnVsbCkgPT4ge1xuXHRpZiAoIXNlbGVjdG9yKSByZXR1cm4gbnVsbDtcblx0aWYgKCFzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0KCkpIHJldHVybiBudWxsO1xuXHRjb25zdCByb290ID0gYmFzaXMgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gYmFzaXMgOiBiYXNpcz8uZ2V0Um9vdE5vZGUgPyBiYXNpcy5nZXRSb290Tm9kZSh7IGNvbXBvc2VkOiB0cnVlIH0pIDogbnVsbDtcblx0Y29uc3QgaXNTaGFkb3dSb290ID0gcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG5cdGNvbnN0IHRhcmdldEFkb3B0ZWRTaGVldHMgPSBpc1NoYWRvd1Jvb3QgPyByb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA6IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzIDogbnVsbDtcblx0aWYgKCF0YXJnZXRBZG9wdGVkU2hlZXRzKSByZXR1cm4gbnVsbDtcblx0Y29uc3Qgc2VsZWN0b3JLZXkgPSBgJHtsYXllck5hbWUgfHwgXCJcIn06JHtzZWxlY3Rvcn1gO1xuXHRsZXQgc2hlZXQ7XG5cdGlmIChpc1NoYWRvd1Jvb3QpIHtcblx0XHRsZXQgc2hhZG93TWFwID0gYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwLmdldChyb290KTtcblx0XHRpZiAoIXNoYWRvd01hcCkge1xuXHRcdFx0c2hhZG93TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0XHRcdGFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcC5zZXQocm9vdCwgc2hhZG93TWFwKTtcblx0XHR9XG5cdFx0c2hlZXQgPSBzaGFkb3dNYXAuZ2V0KHNlbGVjdG9yS2V5KTtcblx0XHRpZiAoIXNoZWV0KSB7XG5cdFx0XHRzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdFx0XHRzaGFkb3dNYXAuc2V0KHNlbGVjdG9yS2V5LCBzaGVldCk7XG5cdFx0XHRpZiAoIXRhcmdldEFkb3B0ZWRTaGVldHMuaW5jbHVkZXMoc2hlZXQpKSB0YXJnZXRBZG9wdGVkU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRzaGVldCA9IGFkb3B0ZWRTZWxlY3Rvck1hcC5nZXQoc2VsZWN0b3JLZXkpO1xuXHRcdGlmICghc2hlZXQpIHtcblx0XHRcdHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRcdGFkb3B0ZWRTZWxlY3Rvck1hcC5zZXQoc2VsZWN0b3JLZXksIHNoZWV0KTtcblx0XHRcdGlmICghdGFyZ2V0QWRvcHRlZFNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIHRhcmdldEFkb3B0ZWRTaGVldHMucHVzaChzaGVldCk7XG5cdFx0fVxuXHR9XG5cdGlmIChsYXllck5hbWUpIHtcblx0XHRsZXQgbGF5ZXJSdWxlO1xuXHRcdGlmIChpc1NoYWRvd1Jvb3QpIHtcblx0XHRcdGxldCBzaGFkb3dMYXllck1hcCA9IGFkb3B0ZWRTaGFkb3dMYXllck1hcC5nZXQocm9vdCk7XG5cdFx0XHRpZiAoIXNoYWRvd0xheWVyTWFwKSB7XG5cdFx0XHRcdHNoYWRvd0xheWVyTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0XHRcdFx0YWRvcHRlZFNoYWRvd0xheWVyTWFwLnNldChyb290LCBzaGFkb3dMYXllck1hcCk7XG5cdFx0XHR9XG5cdFx0XHRsYXllclJ1bGUgPSBzaGFkb3dMYXllck1hcC5nZXQobGF5ZXJOYW1lKTtcblx0XHR9IGVsc2UgbGF5ZXJSdWxlID0gYWRvcHRlZExheWVyTWFwLmdldChsYXllck5hbWUpO1xuXHRcdGlmICghbGF5ZXJSdWxlKSB7XG5cdFx0XHRsYXllclJ1bGUgPSBnZXRPckNyZWF0ZUxheWVyUnVsZShzaGVldCwgbGF5ZXJOYW1lKTtcblx0XHRcdGlmIChsYXllclJ1bGUpIHtcblx0XHRcdFx0aWYgKGlzU2hhZG93Um9vdCkge1xuXHRcdFx0XHRcdGxldCBzaGFkb3dMYXllck1hcCA9IGFkb3B0ZWRTaGFkb3dMYXllck1hcC5nZXQocm9vdCk7XG5cdFx0XHRcdFx0aWYgKCFzaGFkb3dMYXllck1hcCkge1xuXHRcdFx0XHRcdFx0c2hhZG93TGF5ZXJNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0XHRcdFx0YWRvcHRlZFNoYWRvd0xheWVyTWFwLnNldChyb290LCBzaGFkb3dMYXllck1hcCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNoYWRvd0xheWVyTWFwLnNldChsYXllck5hbWUsIGxheWVyUnVsZSk7XG5cdFx0XHRcdH0gZWxzZSBhZG9wdGVkTGF5ZXJNYXAuc2V0KGxheWVyTmFtZSwgbGF5ZXJSdWxlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGxheWVyUnVsZSkge1xuXHRcdFx0bGV0IGxheWVyUnVsZUluZGV4ID0gQXJyYXkuZnJvbShsYXllclJ1bGUuY3NzUnVsZXMgfHwgW10pLmZpbmRJbmRleCgocikgPT4gciBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSAmJiByLnNlbGVjdG9yVGV4dD8udHJpbT8uKCkgPT09IHNlbGVjdG9yPy50cmltPy4oKSk7XG5cdFx0XHRpZiAobGF5ZXJSdWxlSW5kZXggPT09IC0xKSB0cnkge1xuXHRcdFx0XHRsYXllclJ1bGVJbmRleCA9IGxheWVyUnVsZS5pbnNlcnRSdWxlKGAke3NlbGVjdG9yfSB7fWAsIGxheWVyUnVsZS5jc3NSdWxlcy5sZW5ndGgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBsYXllclJ1bGUuY3NzUnVsZXNbbGF5ZXJSdWxlSW5kZXhdO1xuXHRcdH1cblx0fVxuXHRsZXQgcnVsZUluZGV4ID0gQXJyYXkuZnJvbShzaGVldC5jc3NSdWxlcyB8fCBbXSkuZmluZEluZGV4KChydWxlKSA9PiBydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlICYmIHJ1bGUuc2VsZWN0b3JUZXh0Py50cmltPy4oKSA9PT0gc2VsZWN0b3I/LnRyaW0/LigpKTtcblx0aWYgKHJ1bGVJbmRleCA9PT0gLTEpIHRyeSB7XG5cdFx0cnVsZUluZGV4ID0gc2hlZXQuaW5zZXJ0UnVsZShgJHtzZWxlY3Rvcn0ge31gLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgcnVsZSA9IHNoZWV0LmNzc1J1bGVzW3J1bGVJbmRleF07XG5cdGlmIChydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKSByZXR1cm4gcnVsZTtcblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvY29tcG9uZW50LnRzXG52YXIgYWRvcHRlZFNoZWV0c1N5bWJvbCA9IFN5bWJvbC5mb3IoXCJsdXIuZUBhZG9wdGVkU3R5bGVTaGVldHNDYWNoZVwiKTtcbmdsb2JhbFRoaXNbYWRvcHRlZFNoZWV0c1N5bWJvbF0gPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIGFkb3B0ZWRTdHlsZVNoZWV0c0NhY2hlID0gZ2xvYmFsVGhpc1thZG9wdGVkU2hlZXRzU3ltYm9sXTtcbnZhciBzdHlsZUNhY2hlU3ltYm9sID0gU3ltYm9sLmZvcihcImx1ci5lQHN0eWxlQ2FjaGVcIik7XG5nbG9iYWxUaGlzW3N0eWxlQ2FjaGVTeW1ib2xdID8/PSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xudmFyIHN0eWxlQ2FjaGUgPSBnbG9iYWxUaGlzW3N0eWxlQ2FjaGVTeW1ib2xdO1xudmFyIHN0eWxlRWxlbWVudENhY2hlU3ltYm9sID0gU3ltYm9sLmZvcihcImx1ci5lQHN0eWxlRWxlbWVudENhY2hlXCIpO1xuZ2xvYmFsVGhpc1tzdHlsZUVsZW1lbnRDYWNoZVN5bWJvbF0gPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIHN0eWxlRWxlbWVudENhY2hlID0gZ2xvYmFsVGhpc1tzdHlsZUVsZW1lbnRDYWNoZVN5bWJvbF07XG52YXIgSE9TVF9DU1NfRkFMTEJBQ0sgPSBcImRhdGEtZ2xpdC1ob3N0LWNzc1wiO1xudmFyIHN5bmNBZG9wdGVkU2hlZXRzVG9TaGFkb3cgPSAoYlRvKSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBiVG8/LnNoYWRvd1Jvb3Q7XG5cdGlmICghcm9vdCkgcmV0dXJuO1xuXHRjb25zdCBhZG9wdGVkU2hlZXRzID0gYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuZ2V0KGJUbykgfHwgW107XG5cdGZvciAoY29uc3Qgc2hlZXQgb2YgYWRvcHRlZFNoZWV0cykgZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudChzaGVldCk7XG5cdHRyeSB7XG5cdFx0Y29uc3QgbGl2ZSA9IHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzIHx8IFtdO1xuXHRcdHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gWy4uLmFkb3B0ZWRTaGVldHMuZmlsdGVyKChzKSA9PiAhbGl2ZS5pbmNsdWRlcyhzKSksIC4uLi8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi5saXZlXSldO1xuXHR9IGNhdGNoIHt9XG59O1xudmFyIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCA9IChiVG8sIHNoZWV0KSA9PiB7XG5cdGxldCBhZG9wdGVkU2hlZXRzID0gYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuZ2V0KGJUbyk7XG5cdGlmICghYWRvcHRlZFNoZWV0cykgYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuc2V0KGJUbywgYWRvcHRlZFNoZWV0cyA9IFtdKTtcblx0aWYgKHNoZWV0ICYmIGFkb3B0ZWRTaGVldHMuaW5kZXhPZihzaGVldCkgPCAwKSBhZG9wdGVkU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50KHNoZWV0KTtcblx0c3luY0Fkb3B0ZWRTaGVldHNUb1NoYWRvdyhiVG8pO1xufTtcbnZhciBlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayA9IChiVG8sIGNzc1RleHQpID0+IHtcblx0Y29uc3Qgcm9vdCA9IGJUbz8uc2hhZG93Um9vdDtcblx0aWYgKCFyb290IHx8ICFjc3NUZXh0KSByZXR1cm4gbnVsbDtcblx0bGV0IHN0eWxlID0gcm9vdC5xdWVyeVNlbGVjdG9yPy4oYHN0eWxlWyR7SE9TVF9DU1NfRkFMTEJBQ0t9XWApO1xuXHRpZiAoIXN0eWxlKSB7XG5cdFx0c3R5bGUgPSBsb2FkSW5saW5lU3R5bGUoY3NzVGV4dCwgcm9vdCwgXCJcIik7XG5cdFx0aWYgKHN0eWxlKSBzdHlsZS5zZXRBdHRyaWJ1dGUoSE9TVF9DU1NfRkFMTEJBQ0ssIFwiXCIpO1xuXHR9IGVsc2UgaWYgKHN0eWxlLnRleHRDb250ZW50ICE9PSBjc3NUZXh0KSBzdHlsZS50ZXh0Q29udGVudCA9IGNzc1RleHQ7XG5cdHJldHVybiBzdHlsZTtcbn07XG52YXIgcmVoeWRyYXRlQWRvcHRlZFN0eWxlU2hlZXRzID0gKHJvb3QgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudCA6IG51bGwpID0+IHtcblx0aWYgKCFyb290KSByZXR1cm47XG5cdGNvbnN0IHJlc3RvcmUgPSAoaG9zdCkgPT4ge1xuXHRcdGlmICghaG9zdD8uc2hhZG93Um9vdCkgcmV0dXJuO1xuXHRcdGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGhvc3QsIGhvc3RDc3NUZXh0KGhvc3QpKTtcblx0XHRzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93KGhvc3QpO1xuXHR9O1xuXHRpZiAocm9vdC5ub2RlVHlwZSA9PT0gMSkgcmVzdG9yZShyb290KTtcblx0Y29uc3QgdmlzaXQgPSAobm9kZSkgPT4ge1xuXHRcdGxldCBjaGlsZHJlbiA9IFtdO1xuXHRcdHRyeSB7XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUucXVlcnlTZWxlY3RvckFsbChcIipcIik7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGhvc3QgPSBjaGlsZHJlbltpXTtcblx0XHRcdGlmIChob3N0LnNoYWRvd1Jvb3QpIHtcblx0XHRcdFx0cmVzdG9yZShob3N0KTtcblx0XHRcdFx0dmlzaXQoaG9zdC5zaGFkb3dSb290KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHZpc2l0KHJvb3QpO1xufTtcbnZhciBob3N0Q3NzVGV4dCA9IChiVG8pID0+IHtcblx0Y29uc3Qgc3JjID0gYlRvPy5zdHlsZXM7XG5cdGlmICh0eXBlb2Ygc3JjID09PSBcInN0cmluZ1wiKSByZXR1cm4gc3JjO1xuXHRpZiAodHlwZW9mIHNyYyA9PT0gXCJmdW5jdGlvblwiKSB0cnkge1xuXHRcdGNvbnN0IG91dCA9IHNyYy5jYWxsKGJUbyk7XG5cdFx0aWYgKHR5cGVvZiBvdXQgPT09IFwic3RyaW5nXCIpIHJldHVybiBvdXQ7XG5cdFx0cmV0dXJuIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQob3V0KTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0cmV0dXJuIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQoc3JjKTtcbn07XG52YXIgZW5zdXJlSG9zdFN0eWxlcyA9IChiVG8pID0+IHtcblx0aWYgKCFiVG8pIHJldHVybjtcblx0aWYgKGJUby5zdHlsZXMgIT0gbnVsbCkgbG9hZENhY2hlZFN0eWxlcyhiVG8sIGJUby5zdHlsZXMpO1xuXHRzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93KGJUbyk7XG5cdGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGJUbywgaG9zdENzc1RleHQoYlRvKSk7XG59O1xudmFyIHN0eWxlRmx1c2hQZW5kaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCk7XG52YXIgc3R5bGVGbHVzaEJhdGNoID0gW107XG52YXIgc3R5bGVGbHVzaFNjaGVkdWxlZCA9IGZhbHNlO1xudmFyIHNjaGVkdWxlRW5zdXJlSG9zdFN0eWxlcyA9IChiVG8pID0+IHtcblx0aWYgKCFiVG8gfHwgIShiVG8gaW5zdGFuY2VvZiBFbGVtZW50KSB8fCBzdHlsZUZsdXNoUGVuZGluZy5oYXMoYlRvKSkgcmV0dXJuO1xuXHRzdHlsZUZsdXNoUGVuZGluZy5hZGQoYlRvKTtcblx0c3R5bGVGbHVzaEJhdGNoLnB1c2goYlRvKTtcblx0aWYgKHN0eWxlRmx1c2hTY2hlZHVsZWQpIHJldHVybjtcblx0c3R5bGVGbHVzaFNjaGVkdWxlZCA9IHRydWU7XG5cdHF1ZXVlTWljcm90YXNrKCgpID0+IHtcblx0XHRzdHlsZUZsdXNoU2NoZWR1bGVkID0gZmFsc2U7XG5cdFx0Y29uc3QgYmF0Y2ggPSBzdHlsZUZsdXNoQmF0Y2g7XG5cdFx0c3R5bGVGbHVzaEJhdGNoID0gW107XG5cdFx0Zm9yIChjb25zdCBob3N0IG9mIGJhdGNoKSB7XG5cdFx0XHRzdHlsZUZsdXNoUGVuZGluZy5kZWxldGUoaG9zdCk7XG5cdFx0XHRpZiAoaG9zdC5pc0Nvbm5lY3RlZCkgZW5zdXJlSG9zdFN0eWxlcyhob3N0KTtcblx0XHR9XG5cdH0pO1xufTtcbnJlZ2lzdGVyU3R5bGVUcmVlSG9vaygoZWwpID0+IHNjaGVkdWxlRW5zdXJlSG9zdFN0eWxlcyhlbCkpO1xudmFyIGxvYWRDYWNoZWRTdHlsZXMgPSAoYlRvLCBzcmMpID0+IHtcblx0aWYgKCFzcmMpIHJldHVybiBudWxsO1xuXHRsZXQgcmVzb2x2ZWRTcmMgPSBzcmM7XG5cdGlmICh0eXBlb2Ygc3JjID09IFwiZnVuY3Rpb25cIikgdHJ5IHtcblx0XHRjb25zdCB3ZWFrID0gbmV3IFdlYWtSZWYoYlRvKTtcblx0XHRyZXNvbHZlZFNyYyA9IHNyYy5jYWxsKGJUbywgd2Vhayk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRjb25zb2xlLndhcm4oXCJFcnJvciBjYWxsaW5nIHN0eWxlcyBmdW5jdGlvbjpcIiwgZSk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKHJlc29sdmVkU3JjICYmIHR5cGVvZiBDU1NTdHlsZVNoZWV0ICE9IFwidW5kZWZpbmVkXCIgJiYgcmVzb2x2ZWRTcmMgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0KSB7XG5cdFx0YWRkQWRvcHRlZFNoZWV0VG9FbGVtZW50KGJUbywgcmVzb2x2ZWRTcmMpO1xuXHRcdHJldHVybiBlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayhiVG8sIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQocmVzb2x2ZWRTcmMpKTtcblx0fVxuXHRpZiAocmVzb2x2ZWRTcmMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG5cdFx0cmVzb2x2ZWRTcmMudGhlbigocmVzdWx0KSA9PiB7XG5cdFx0XHRpZiAocmVzdWx0IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCkgYWRkQWRvcHRlZFNoZWV0VG9FbGVtZW50KGJUbywgcmVzdWx0KTtcblx0XHRcdGVsc2UgaWYgKHJlc3VsdCAhPSBudWxsKSBsb2FkQ2FjaGVkU3R5bGVzKGJUbywgcmVzdWx0KTtcblx0XHR9KS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0Y29uc29sZS53YXJuKFwiRXJyb3IgbG9hZGluZyBhZG9wdGVkIHN0eWxlc2hlZXQ6XCIsIGUpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJzdHJpbmdcIiB8fCByZXNvbHZlZFNyYyBpbnN0YW5jZW9mIEJsb2IgfHwgcmVzb2x2ZWRTcmMgaW5zdGFuY2VvZiBGaWxlKSB7XG5cdFx0Y29uc3QgYWRvcHRlZCA9IGxvYWRBc0Fkb3B0ZWQocmVzb2x2ZWRTcmMsIFwiXCIpO1xuXHRcdGlmIChhZG9wdGVkKSB7XG5cdFx0XHRjb25zdCBhZGRBZG9wdGVkU2hlZXQgPSAoc2hlZXQpID0+IHtcblx0XHRcdFx0YWRkQWRvcHRlZFNoZWV0VG9FbGVtZW50KGJUbywgc2hlZXQpO1xuXHRcdFx0fTtcblx0XHRcdGlmIChhZG9wdGVkIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0XHRhZG9wdGVkLnRoZW4oKHNoZWV0KSA9PiB7XG5cdFx0XHRcdFx0YWRkQWRvcHRlZFNoZWV0KHNoZWV0KTtcblx0XHRcdFx0XHRlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayhiVG8sIHR5cGVvZiByZXNvbHZlZFNyYyA9PSBcInN0cmluZ1wiID8gcmVzb2x2ZWRTcmMgOiBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KHNoZWV0KSk7XG5cdFx0XHRcdH0pLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKFwiRXJyb3IgbG9hZGluZyBhZG9wdGVkIHN0eWxlc2hlZXQ6XCIsIGUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRBZG9wdGVkU2hlZXQoYWRvcHRlZCk7XG5cdFx0XHRcdHJldHVybiBlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayhiVG8sIHR5cGVvZiByZXNvbHZlZFNyYyA9PSBcInN0cmluZ1wiID8gcmVzb2x2ZWRTcmMgOiBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KGFkb3B0ZWQpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3Qgc291cmNlID0gdHlwZW9mIHNyYyA9PSBcImZ1bmN0aW9uXCIgfHwgdHlwZW9mIHNyYyA9PSBcIm9iamVjdFwiID8gc3R5bGVFbGVtZW50Q2FjaGUgOiBzdHlsZUNhY2hlO1xuXHRjb25zdCBjYWNoZWQgPSBzb3VyY2UuZ2V0KHNyYyk7XG5cdGxldCBzdHlsZUVsZW1lbnQgPSBjYWNoZWQ/LnN0eWxlRWxlbWVudDtcblx0bGV0IHZhcnMgPSBjYWNoZWQ/LnZhcnM7XG5cdGlmICghY2FjaGVkKSB7XG5cdFx0bGV0IHN0eWxlcyA9IGBgO1xuXHRcdGxldCBwcm9wcyA9IFtdO1xuXHRcdGlmICh0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJzdHJpbmdcIikgc3R5bGVzID0gcmVzb2x2ZWRTcmMgfHwgXCJcIjtcblx0XHRlbHNlIGlmICh0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJvYmplY3RcIiAmJiByZXNvbHZlZFNyYyAhPSBudWxsKSB7XG5cdFx0XHRpZiAocmVzb2x2ZWRTcmMgaW5zdGFuY2VvZiBIVE1MU3R5bGVFbGVtZW50KSBzdHlsZUVsZW1lbnQgPSByZXNvbHZlZFNyYztcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRzdHlsZXMgPSB0eXBlb2YgcmVzb2x2ZWRTcmMuY3NzID09IFwic3RyaW5nXCIgPyByZXNvbHZlZFNyYy5jc3MgOiB0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJzdHJpbmdcIiA/IHJlc29sdmVkU3JjIDogU3RyaW5nKHJlc29sdmVkU3JjKTtcblx0XHRcdFx0cHJvcHMgPSByZXNvbHZlZFNyYz8ucHJvcHMgPz8gcHJvcHM7XG5cdFx0XHRcdHZhcnMgPSByZXNvbHZlZFNyYz8udmFycyA/PyB2YXJzO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIXN0eWxlRWxlbWVudCAmJiBzdHlsZXMpIHN0eWxlRWxlbWVudCA9IGxvYWRJbmxpbmVTdHlsZShzdHlsZXMsIGJUbywgXCJ1eC1sYXllclwiKTtcblx0XHRzb3VyY2Uuc2V0KHNyYywge1xuXHRcdFx0Y3NzOiBzdHlsZXMsXG5cdFx0XHRwcm9wcyxcblx0XHRcdHZhcnMsXG5cdFx0XHRzdHlsZUVsZW1lbnRcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc3R5bGVFbGVtZW50O1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vbHVyLmUvc3JjL2x1cmUvY29yZS9CaW5kaW5nLnRzXG52YXIgYmFua1N5bWJvbCA9IFN5bWJvbC5mb3IoXCJsdXIuZUBiYW5rXCIpO1xudmFyIGJhbmsgPSBnbG9iYWxUaGlzW2JhbmtTeW1ib2xdID8/PSBuZXcgRG91YmxlV2Vha01hcCgpO1xudmFyIGVsTWFwU3ltYm9sID0gU3ltYm9sLmZvcihcImx1ci5lQGVsTWFwXCIpO1xudmFyIGVsTWFwID0gZ2xvYmFsVGhpc1tlbE1hcFN5bWJvbF0gPz89IG5ldyBEb3VibGVXZWFrTWFwKCk7XG52YXIgYWxpdmVzU3ltYm9sID0gU3ltYm9sLmZvcihcImx1ci5lQGFsaXZlc1wiKTtcbnZhciBhbGl2ZXMgPSBnbG9iYWxUaGlzW2FsaXZlc1N5bWJvbF0gPz89IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgodW5zdWIpID0+IHVuc3ViPy4oKSk7XG52YXIgJGJlaGF2aW9yID0gU3ltYm9sLmZvcihcIkBiZWhhdmlvclwiKTtcbnZhciBpc0xpbmtlckxpa2UgPSAodmFsdWUpID0+IHtcblx0cmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgXCJyZWZcIiBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWU/LnVuYmluZCA9PSBcImZ1bmN0aW9uXCI7XG59O1xudmFyICRvYnNlcnZlSW5wdXQgPSAoZWxlbWVudCwgcmVmLCBwcm9wID0gXCJ2YWx1ZVwiKSA9PiB7XG5cdGNvbnN0IHdlbCA9IHRvUmVmKGVsZW1lbnQpO1xuXHRjb25zdCByZiA9IHRvUmVmKHJlZik7XG5cdGNvbnN0IGN0cmxDYiA9IChfZXYpID0+IHtcblx0XHQkc2V0KHJmLCBcInZhbHVlXCIsIGRlcmVmKHdlbCk/Lltwcm9wID8/IFwidmFsdWVcIl0gPz8gJGdldFZhbHVlKGRlcmVmKHJmKSkpO1xuXHR9O1xuXHRjb25zdCBoZGwgPSB7XG5cdFx0Y2xpY2s6IGN0cmxDYixcblx0XHRpbnB1dDogY3RybENiLFxuXHRcdGNoYW5nZTogY3RybENiXG5cdH07XG5cdGN0cmxDYj8uKHsgdGFyZ2V0OiBlbGVtZW50IH0pO1xuXHRoYW5kbGVMaXN0ZW5lcnM/LihlbGVtZW50LCBcImFkZEV2ZW50TGlzdGVuZXJcIiwgaGRsKTtcblx0JHNldChyZiwgXCJ2YWx1ZVwiLCBlbGVtZW50Py5bcHJvcCA/PyBcInZhbHVlXCJdID8/ICRnZXRWYWx1ZShkZXJlZihyZWYpKSk7XG5cdHJldHVybiAoKSA9PiBoYW5kbGVMaXN0ZW5lcnM/LihlbGVtZW50LCBcInJlbW92ZUV2ZW50TGlzdGVuZXJcIiwgaGRsKTtcbn07XG52YXIgJG9ic2VydmVBdHRyaWJ1dGUgPSAoZWwsIHJlZiwgcHJvcCA9IFwiXCIpID0+IHtcblx0dG9SZWYoZWwpO1xuXHRjb25zdCB3diA9IHRvUmVmKHJlZik7XG5cdGNvbnN0IGF0dHJOYW1lID0gY2FtZWxUb0tlYmFiKHByb3ApO1xuXHRjb25zdCBjYiA9IChtdXRhdGlvbikgPT4ge1xuXHRcdGlmIChtdXRhdGlvbi50eXBlID09IFwiYXR0cmlidXRlc1wiICYmIG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT0gYXR0ck5hbWUpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gbXV0YXRpb24/LnRhcmdldD8uZ2V0QXR0cmlidXRlPy4obXV0YXRpb24uYXR0cmlidXRlTmFtZSk7XG5cdFx0XHRjb25zdCB2YWxSZWYgPSBkZXJlZih3diksIHJlVmFsID0gJGdldFZhbHVlKHZhbFJlZik7XG5cdFx0XHRpZiAoaXNOb3RFcXVhbChtdXRhdGlvbi5vbGRWYWx1ZSwgdmFsdWUpICYmIHZhbFJlZiAhPSBudWxsICYmICh0eXBlb2YgdmFsUmVmID09IFwib2JqZWN0XCIgfHwgdHlwZW9mIHZhbFJlZiA9PSBcImZ1bmN0aW9uXCIpKSB7XG5cdFx0XHRcdGlmIChpc05vdEVxdWFsKHJlVmFsLCB2YWx1ZSkgfHwgcmVWYWwgPT0gbnVsbCkgJHNldCh2YWxSZWYsIFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIG9ic2VydmVBdHRyaWJ1dGUoZWwsIGF0dHJOYW1lLCBjYik7XG59O1xudmFyIHJlbW92ZUZyb21CYW5rID0gKGVsLCBoYW5kbGVyLCBwcm9wKSA9PiB7XG5cdGNvbnN0IGJhbmsgPSBlbE1hcC5nZXQoW2VsLCBoYW5kbGVyXSk7XG5cdGlmIChiYW5rKSB7XG5cdFx0Y29uc3Qgb2xkID0gYmFua1twcm9wXT8uWzFdO1xuXHRcdGRlbGV0ZSBiYW5rW3Byb3BdO1xuXHRcdG9sZD8uKCk7XG5cdH1cbn07XG52YXIgYWRkVG9CYW5rID0gKGVsLCBoYW5kbGVyLCBwcm9wLCBmb3JMaW5rKSA9PiB7XG5cdGNvbnN0IGJhbmsgPSBlbE1hcC5nZXRPckluc2VydENvbXB1dGVkKFtlbCwgaGFuZGxlcl0sICgpID0+ICh7fSkpO1xuXHRiYW5rPy5bcHJvcF0/LlsxXT8uKCk7XG5cdGJhbmtbcHJvcF0gPSBmb3JMaW5rO1xuXHRyZXR1cm4gdHJ1ZTtcbn07XG52YXIgYmluZEhhbmRsZXIgPSAoZWxlbWVudCwgdmFsdWUsIHByb3AsIGhhbmRsZXIsIHNldCwgd2l0aE9ic2VydmVyKSA9PiB7XG5cdGNvbnN0IGxpbmtlciA9IGlzTGlua2VyTGlrZSh2YWx1ZSkgPyB2YWx1ZSA6IG51bGw7XG5cdGlmIChsaW5rZXIpIHtcblx0XHRsaW5rZXIuYmluZD8uKCk7XG5cdFx0dmFsdWUgPSBsaW5rZXIucmVmO1xuXHR9XG5cdGNvbnN0IHdlbCA9IHRvUmVmKGVsZW1lbnQpO1xuXHRlbGVtZW50ID0gZGVyZWYod2VsKTtcblx0aWYgKCFlbGVtZW50IHx8ICEoZWxlbWVudCBpbnN0YW5jZW9mIE5vZGUgfHwgZWxlbWVudD8uZWxlbWVudCBpbnN0YW5jZW9mIE5vZGUpKSByZXR1cm47XG5cdGxldCBjb250cm9sbGVyID0gdm9pZCAwO1xuXHRpZiAoY29udHJvbGxlcikgY29udHJvbGxlcj8uYWJvcnQ/LigpO1xuXHRjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXHRjb25zdCB3diA9IHRvUmVmKHZhbHVlKTtcblx0aGFuZGxlcj8uKGVsZW1lbnQsIHByb3AsIHZhbHVlKTtcblx0Y29uc3QgdW4gPSBhZmZlY3RlZD8uKFt2YWx1ZSwgXCJ2YWx1ZVwiXSwgKGN1cnIsIF9wLCBvbGQpID0+IHtcblx0XHRjb25zdCB2YWx1ZVJlZiA9IGRlcmVmKHd2KTtcblx0XHRjb25zdCBzZXRSZWYgPSBkZXJlZihzZXQpO1xuXHRcdGNvbnN0IGVsZW1lbnRSZWYgPSBkZXJlZih3ZWwpO1xuXHRcdGNvbnN0IHYgPSAkZ2V0VmFsdWUodmFsdWVSZWYpID8/ICRnZXRWYWx1ZShjdXJyKTtcblx0XHRpZiAoIXNldFJlZiB8fCBzZXRSZWY/Lltwcm9wXSA9PSB2YWx1ZVJlZikge1xuXHRcdFx0aWYgKHR5cGVvZiB2YWx1ZVJlZj8uWyRiZWhhdmlvcl0gPT0gXCJmdW5jdGlvblwiKSB2YWx1ZVJlZj8uWyRiZWhhdmlvcl0/LigoX3ZhbCA9IGN1cnIpID0+IGhhbmRsZXIoZWxlbWVudFJlZiwgcHJvcCwgdiksIFtcblx0XHRcdFx0Y3Vycixcblx0XHRcdFx0cHJvcCxcblx0XHRcdFx0b2xkXG5cdFx0XHRdLCBbXG5cdFx0XHRcdGNvbnRyb2xsZXI/LnNpZ25hbCxcblx0XHRcdFx0cHJvcCxcblx0XHRcdFx0d2VsXG5cdFx0XHRdKTtcblx0XHRcdGVsc2UgaGFuZGxlcihlbGVtZW50UmVmLCBwcm9wLCB2KTtcblx0XHR9XG5cdH0pO1xuXHRsZXQgb2JzID0gbnVsbDtcblx0aWYgKHR5cGVvZiB3aXRoT2JzZXJ2ZXIgPT0gXCJib29sZWFuXCIgJiYgd2l0aE9ic2VydmVyKSB7XG5cdFx0aWYgKGhhbmRsZXIgPT0gaGFuZGxlQXR0cmlidXRlKSBvYnMgPSAkb2JzZXJ2ZUF0dHJpYnV0ZShlbGVtZW50LCB2YWx1ZSwgcHJvcCk7XG5cdFx0aWYgKGhhbmRsZXIgPT0gaGFuZGxlUHJvcGVydHkpIG9icyA9ICRvYnNlcnZlSW5wdXQoZWxlbWVudCwgdmFsdWUsIHByb3ApO1xuXHR9XG5cdGlmICh0eXBlb2Ygd2l0aE9ic2VydmVyID09IFwiZnVuY3Rpb25cIikgb2JzID0gd2l0aE9ic2VydmVyKGVsZW1lbnQsIHByb3AsIHZhbHVlKTtcblx0Y29uc3QgdW5zdWIgPSAoKSA9PiB7XG5cdFx0b2JzPy5kaXNjb25uZWN0Py4oKTtcblx0XHRvYnMgIT0gbnVsbCAmJiB0eXBlb2Ygb2JzID09IFwiZnVuY3Rpb25cIiAmJiBvYnM/LigpO1xuXHRcdGxpbmtlcj8udW5iaW5kPy4oKTtcblx0XHR1bj8uKCk7XG5cdFx0Y29udHJvbGxlcj8uYWJvcnQ/LigpO1xuXHRcdHJlbW92ZUZyb21CYW5rPy4oZWxlbWVudCwgaGFuZGxlciwgcHJvcCk7XG5cdH07XG5cdGFkZFRvQ2FsbENoYWluKHZhbHVlLCBTeW1ib2wuZGlzcG9zZSwgdW5zdWIpO1xuXHRhbGl2ZXMucmVnaXN0ZXIoZWxlbWVudCwgdW5zdWIpO1xuXHRpZiAoIWFkZFRvQmFuayhlbGVtZW50LCBoYW5kbGVyLCBwcm9wLCBbdmFsdWUsIHVuc3ViXSkpIHJldHVybiB1bnN1Yjtcbn07XG52YXIgYmluZFdpdGggPSAoZWwsIHByb3AsIHZhbHVlLCBoYW5kbGVyLCBzZXQsIHdpdGhPYnNlcnZlcikgPT4ge1xuXHRoYW5kbGVyKGVsLCBwcm9wLCBpc0xpbmtlckxpa2UodmFsdWUpID8gdmFsdWUucmVmIDogdmFsdWUpO1xuXHRyZXR1cm4gYmluZEhhbmRsZXIoZWwsIHZhbHVlLCBwcm9wLCBoYW5kbGVyLCBzZXQsIHdpdGhPYnNlcnZlcik7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiAuLi9kb20udHMvc3JjL21peGluL0hhbmRsZXIudHNcbnZhciBkZWxldGVTdHlsZVByb3BlcnR5ID0gKGVsLCBuYW1lKSA9PiBlbC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjYW1lbFRvS2ViYWIobmFtZSkpO1xudmFyIGhhbmRsZVN0eWxlQ2hhbmdlID0gKGVsLCBwcm9wLCB2YWwpID0+IHtcblx0Y29uc3Qgc3R5bGVSZWYgPSBlbD8uc3R5bGU7XG5cdGlmICghcHJvcCB8fCB0eXBlb2YgcHJvcCAhPSBcInN0cmluZ1wiIHx8ICFlbCB8fCAhc3R5bGVSZWYpIHJldHVybiBlbDtcblx0JGF2b2lkVHJpZ2dlcih2YWwsICgpID0+IHtcblx0XHRpZiAoaXNWYWwodmFsKSB8fCBoYXNWYWx1ZSh2YWwpIHx8IGlzVmFsdWVVbml0KHZhbCkpIHNldFN0eWxlUHJvcGVydHkoZWwsIHByb3AsIHZhbCk7XG5cdFx0ZWxzZSBpZiAodmFsID09IG51bGwpIGRlbGV0ZVN0eWxlUHJvcGVydHkoZWwsIHByb3ApO1xuXHR9KTtcblx0cmV0dXJuIGVsO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL0FuaW1hdGUudHNcbnZhciBwYXJzZVRpbWUgPSAodiwgZmFsbGJhY2sgPSAwKSA9PiB7XG5cdGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHY7XG5cdGlmICghdikgcmV0dXJuIGZhbGxiYWNrO1xuXHRjb25zdCB0ID0gU3RyaW5nKHYpLnRyaW0oKTtcblx0aWYgKHQuZW5kc1dpdGgoXCJtc1wiKSkgcmV0dXJuIHBhcnNlRmxvYXQodCk7XG5cdGlmICh0LmVuZHNXaXRoKFwic1wiKSkgcmV0dXJuIHBhcnNlRmxvYXQodCkgKiAxZTM7XG5cdHJldHVybiBwYXJzZUZsb2F0KHQpIHx8IGZhbGxiYWNrO1xufTtcbnZhciBub3JtYWxpemVJdGVyYXRpb25Db3VudCA9IChjb3VudCkgPT4ge1xuXHRpZiAoY291bnQgPT09IHZvaWQgMCkgcmV0dXJuIDE7XG5cdGlmIChjb3VudCA9PT0gLTEgfHwgY291bnQgPT09IEluZmluaXR5KSByZXR1cm4gSW5maW5pdHk7XG5cdHJldHVybiBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGNvdW50KSk7XG59O1xudmFyIGNhbWVsVG9LZWJhYiQxID0gKHN0cikgPT4ge1xuXHRyZXR1cm4gc3RyLnJlcGxhY2UoL1tBLVpdL2csIChsZXR0ZXIpID0+IGAtJHtsZXR0ZXIudG9Mb3dlckNhc2UoKX1gKTtcbn07XG52YXIgcGFyc2VQcm9wZXJ0eUxpc3QgPSAob3B0aW9ucykgPT4ge1xuXHRjb25zdCBmcm9tU3RyaW5nID0gW107XG5cdGlmICh0eXBlb2Ygb3B0aW9ucy5wcm9wZXJ0aWVzID09IFwic3RyaW5nXCIpIHtcblx0XHRjb25zdCBwcm9wcyA9IG9wdGlvbnMucHJvcGVydGllcz8udHJpbT8uKCk/LnNwbGl0Py4oXCI7XCIpO1xuXHRcdGZyb21TdHJpbmcucHVzaCguLi5BcnJheS5mcm9tKHByb3BzIHx8IFtdKT8ubWFwPy4oKCRwYWlyKSA9PiB7XG5cdFx0XHRpZiAoJHBhaXI/LmluY2x1ZGVzPy4oXCI6XCIpKSB7XG5cdFx0XHRcdGNvbnN0IHZhbHVlID0gKCRwYWlyPy5zcGxpdD8uKFwiOlwiKSA/PyBbXSk/LnNsaWNlPy4oMSwgLTEpPy5qb2luPy4oXCI6XCIpO1xuXHRcdFx0XHRyZXR1cm4geyBbKCRwYWlyPy5bMF0pPy50cmltPy4oKV06IHZhbHVlPy50cmltPy4oKSB9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSk/LmZpbHRlcj8uKChhKSA9PiBhICE9IG51bGwpIHx8IFtdKTtcblx0fVxuXHRyZXR1cm4gQXJyYXkuZnJvbShBcnJheS5pc0FycmF5KG9wdGlvbnMucHJvcGVydGllcykgPyBvcHRpb25zLnByb3BlcnRpZXMgOiBmcm9tU3RyaW5nKTtcbn07XG52YXIgcGFyc2VBbmltYXRpb25UZW1wbGF0ZSA9IChzdHJpbmdzLCB2YWx1ZXMpID0+IHtcblx0Y29uc3QgcHJvcGVydGllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGxldCBmdWxsVGV4dCA9IFwiXCI7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkrKykge1xuXHRcdGZ1bGxUZXh0ICs9IHN0cmluZ3NbaV07XG5cdFx0aWYgKGkgPCB2YWx1ZXMubGVuZ3RoKSBmdWxsVGV4dCArPSBgX19TTE9UXyR7aX1fX2A7XG5cdH1cblx0Y29uc3QgZGVjbGFyYXRpb25zID0gZnVsbFRleHQuc3BsaXQoXCI7XCIpLm1hcCgocykgPT4gcy50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcblx0Zm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBkZWNsYXJhdGlvbnMpIHtcblx0XHRjb25zdCBjb2xvbkluZGV4ID0gZGVjbGFyYXRpb24uaW5kZXhPZihcIjpcIik7XG5cdFx0aWYgKGNvbG9uSW5kZXggPT09IC0xKSBjb250aW51ZTtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IGRlY2xhcmF0aW9uLnNsaWNlKDAsIGNvbG9uSW5kZXgpLnRyaW0oKTtcblx0XHRjb25zdCB2YWx1ZVRleHQgPSBkZWNsYXJhdGlvbi5zbGljZShjb2xvbkluZGV4ICsgMSkudHJpbSgpO1xuXHRcdGNvbnN0IHNsb3RNYXRjaCA9IC9fX1NMT1RfKFxcZCspX18vLmV4ZWModmFsdWVUZXh0KTtcblx0XHRpZiAoIXNsb3RNYXRjaCkgY29udGludWU7XG5cdFx0Y29uc3Qgc2xvdFZhbHVlID0gdmFsdWVzW3BhcnNlSW50KHNsb3RNYXRjaFsxXSwgMTApXTtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc2xvdFZhbHVlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgQVxcYCR7cHJvcGVydHl9XFxgIGV4cGVjdHMgYW4gYXJyYXkgb2YgdmFsdWVzLCBnb3QgJHt0eXBlb2Ygc2xvdFZhbHVlfWApO1xuXHRcdHByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB7XG5cdFx0XHRwcm9wZXJ0eSxcblx0XHRcdHZhbHVlczogc2xvdFZhbHVlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHsgcHJvcGVydGllcyB9O1xufTtcbnZhciBwcm9jZXNzQW5pbWF0aW9uVmFsdWVzID0gKHZhbHVlcykgPT4ge1xuXHRjb25zdCByZXNvbHZlZCA9IFtdO1xuXHRjb25zdCByZWFjdGl2ZUluZGljZXMgPSBbXTtcblx0bGV0IGhhc1JlYWN0aXZlID0gZmFsc2U7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG5cdFx0aWYgKGlzUmVhY3RpdmVTdHlsZVZhbHVlKHZhbHVlKSkge1xuXHRcdFx0aGFzUmVhY3RpdmUgPSB0cnVlO1xuXHRcdFx0cmVhY3RpdmVJbmRpY2VzLnB1c2goaSk7XG5cdFx0XHRyZXNvbHZlZC5wdXNoKHZhbHVlLnZhbHVlKTtcblx0XHR9IGVsc2UgaWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWx1ZSkpIHJlc29sdmVkLnB1c2godmFsdWUpO1xuXHRcdGVsc2UgcmVzb2x2ZWQucHVzaCh2YWx1ZSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRyZXNvbHZlZCxcblx0XHRoYXNSZWFjdGl2ZSxcblx0XHRyZWFjdGl2ZUluZGljZXNcblx0fTtcbn07XG52YXIgYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMgPSAob3B0aW9ucykgPT4ge1xuXHRjb25zdCBnbG9iYWxPZmZzZXRzID0gb3B0aW9ucz8ub2Zmc2V0cztcblx0Y29uc3QgcHJvcGVydHlMaXN0ID0gcGFyc2VQcm9wZXJ0eUxpc3Qob3B0aW9ucyk7XG5cdGlmIChwcm9wZXJ0eUxpc3QubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBhbmltYXRhYmxlIHByb3BlcnRpZXMgZm91bmQgaW4gQSB0ZW1wbGF0ZVwiKTtcblx0Y29uc3QgbWF4TGVuZ3RoID0gTWF0aC5tYXgoLi4ucHJvcGVydHlMaXN0Lm1hcCgocCkgPT4gcC52YWx1ZXMubGVuZ3RoKSk7XG5cdGNvbnN0IG9mZnNldHMgPSAoZ2xvYmFsT2Zmc2V0cz8ubGVuZ3RoID4gMSA/IGdsb2JhbE9mZnNldHMgOiBudWxsKSB8fCBBcnJheS5mcm9tKHsgbGVuZ3RoOiBtYXhMZW5ndGggfSwgKF8sIGkpID0+IGkgLyAobWF4TGVuZ3RoIC0gMSkpO1xuXHRjb25zdCBmcmFtZXMgPSBbXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGZyYW1lID0geyBvZmZzZXQ6IG9mZnNldHNbaV0gPz8gaSAvIChtYXhMZW5ndGggLSAxKSB9O1xuXHRcdGZvciAoY29uc3QgcHJvcCBvZiBwcm9wZXJ0eUxpc3QpIHtcblx0XHRcdGNvbnN0IHsgcmVzb2x2ZWQgfSA9IHByb2Nlc3NBbmltYXRpb25WYWx1ZXMocHJvcC52YWx1ZXMpO1xuXHRcdFx0Y29uc3Qga2ViYWJQcm9wID0gY2FtZWxUb0tlYmFiJDEocHJvcC5wcm9wZXJ0eSk7XG5cdFx0XHRsZXQgdmFsdWUgPSByZXNvbHZlZFtNYXRoLm1pbihpLCByZXNvbHZlZC5sZW5ndGggLSAxKV07XG5cdFx0XHRpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdFx0ZnJhbWVba2ViYWJQcm9wXSA9IHZhbHVlO1xuXHRcdH1cblx0XHRmcmFtZXMucHVzaChmcmFtZSk7XG5cdH1cblx0cmV0dXJuIGZyYW1lcztcbn07XG52YXIgYnVpbGRBbmltYXRpb25UaW1pbmcgPSAob3B0aW9ucykgPT4ge1xuXHRjb25zdCBkdXJhdGlvbiA9IHBhcnNlVGltZShvcHRpb25zLmR1cmF0aW9uID8/IDMwMCk7XG5cdGNvbnN0IGRlbGF5ID0gcGFyc2VUaW1lKG9wdGlvbnMuZGVsYXkgPz8gMCk7XG5cdGNvbnN0IGl0ZXJhdGlvbnMgPSBub3JtYWxpemVJdGVyYXRpb25Db3VudChvcHRpb25zLml0ZXJhdGlvbkNvdW50KTtcblx0cmV0dXJuIHtcblx0XHRkdXJhdGlvbixcblx0XHRkZWxheSxcblx0XHRjb21wb3NpdGU6IG9wdGlvbnMuY29tcG9zaXRlIHx8IFwicmVwbGFjZVwiLFxuXHRcdGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbnMgPT09IFwiSW5maW5pdHlcIiA/IEluZmluaXR5IDogaXRlcmF0aW9ucyxcblx0XHRmaWxsOiBvcHRpb25zLmZpbGxNb2RlID8/IFwibm9uZVwiLFxuXHRcdGRpcmVjdGlvbjogb3B0aW9ucy5kaXJlY3Rpb24gPz8gXCJub3JtYWxcIixcblx0XHRlYXNpbmc6IHR5cGVvZiBvcHRpb25zLmVhc2luZyA9PT0gXCJzdHJpbmdcIiA/IG9wdGlvbnMuZWFzaW5nIDogXCJsaW5lYXJcIixcblx0XHR0aW1lbGluZTogb3B0aW9ucy50aW1lbGluZVxuXHR9O1xufTtcbnZhciBjcmVhdGVSZWFjdGl2ZUFuaW1hdGlvbiA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHByb3BlcnR5TGlzdCA9IHBhcnNlUHJvcGVydHlMaXN0KG9wdGlvbnMpO1xuXHRjb25zdCBzdWJzY3JpcHRpb25zID0gW107XG5cdGNvbnN0IGZyYW1lcyA9IGJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzKG9wdGlvbnMpO1xuXHRjb25zdCB0aW1pbmcgPSBidWlsZEFuaW1hdGlvblRpbWluZyhvcHRpb25zKTtcblx0Y29uc3QgYW5pbWF0aW9uID0gZWxlbWVudC5hbmltYXRlKGZyYW1lcywgdGltaW5nKTtcblx0Zm9yIChjb25zdCBwcm9wIG9mIHByb3BlcnR5TGlzdCkge1xuXHRcdGNvbnN0IHsgaGFzUmVhY3RpdmUsIHJlYWN0aXZlSW5kaWNlcyB9ID0gcHJvY2Vzc0FuaW1hdGlvblZhbHVlcyhwcm9wLnZhbHVlcyk7XG5cdFx0aWYgKCFoYXNSZWFjdGl2ZSkgY29udGludWU7XG5cdFx0Zm9yIChjb25zdCBpbmRleCBvZiByZWFjdGl2ZUluZGljZXMpIHtcblx0XHRcdGNvbnN0IHJlYWN0aXZlVmFsdWUgPSBwcm9wLnZhbHVlc1tpbmRleF07XG5cdFx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSBiaW5kV2l0aChlbGVtZW50LCBgLS1hbmltLSR7cHJvcC5wcm9wZXJ0eX0tJHtpbmRleH1gLCByZWFjdGl2ZVZhbHVlLCAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5ld0ZyYW1lcyA9IGJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzKG9wdGlvbnMpO1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGltZSA9IGFuaW1hdGlvbi5jdXJyZW50VGltZTtcblx0XHRcdFx0YW5pbWF0aW9uLmVmZmVjdCA9IG5ldyBLZXlmcmFtZUVmZmVjdChlbGVtZW50LCBuZXdGcmFtZXMsIHRpbWluZyk7XG5cdFx0XHRcdGlmIChjdXJyZW50VGltZSAhPT0gbnVsbCkgYW5pbWF0aW9uLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG5cdFx0XHR9KTtcblx0XHRcdHN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuXHRcdH1cblx0fVxuXHRjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuXHRcdGFuaW1hdGlvbi5jYW5jZWwoKTtcblx0XHRzdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViKCkpO1xuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGFuaW1hdGlvbixcblx0XHRjbGVhbnVwXG5cdH07XG59O1xudmFyIEEgPSAoc3RyaW5ncywgLi4udmFsdWVzKSA9PiB7XG5cdHJldHVybiBwYXJzZUFuaW1hdGlvblRlbXBsYXRlKHN0cmluZ3MsIHZhbHVlcyk7XG59O1xudmFyIGRvQW5pbWF0aW9uID0gKGVsZW1lbnQsIGNvbmZpZywga2V5ZnJhbWVzKSA9PiB7XG5cdGlmIChwYXJzZVByb3BlcnR5TGlzdChjb25maWcpLnNvbWUoKHByb3ApID0+IHtcblx0XHRjb25zdCB7IGhhc1JlYWN0aXZlIH0gPSBwcm9jZXNzQW5pbWF0aW9uVmFsdWVzKHByb3AudmFsdWVzKTtcblx0XHRyZXR1cm4gaGFzUmVhY3RpdmU7XG5cdH0pKSByZXR1cm4gY3JlYXRlUmVhY3RpdmVBbmltYXRpb24oZWxlbWVudCwgY29uZmlnKTtcblx0Y29uc3QgZnJhbWVzID0gYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMoY29uZmlnKTtcblx0Y29uc3QgdGltaW5nID0gYnVpbGRBbmltYXRpb25UaW1pbmcoY29uZmlnKTtcblx0Y29uc3QgYW5pbWF0aW9uID0gZWxlbWVudC5hbmltYXRlKGZyYW1lcywgdGltaW5nKTtcblx0Y29uc3QgY2xlYW51cCA9ICgpID0+IHtcblx0XHRhbmltYXRpb24uY2FuY2VsKCk7XG5cdH07XG5cdHJldHVybiB7XG5cdFx0YW5pbWF0aW9uLFxuXHRcdGNsZWFudXBcblx0fTtcbn07XG52YXIgYW5pbWF0ZSA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zLnByb3BlcnRpZXMpKSB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHRocm93IG5ldyBUeXBlRXJyb3IoYGFuaW1hdGUoKSBleHBlY3RzIGFycmF5cyBvZiB2YWx1ZXMsIGdvdCAke3R5cGVvZiB2YWx1ZXN9IGZvciAke3Byb3BlcnR5fWApO1xuXHRcdHByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB7XG5cdFx0XHRwcm9wZXJ0eSxcblx0XHRcdHZhbHVlc1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBkb0FuaW1hdGlvbihlbGVtZW50LCB7IC4uLm9wdGlvbnMgfSwgcHJvcGVydGllcyk7XG59O1xudmFyIGRlZmluZUFuaW1hdGlvbiA9IChvcHRpb25zKSA9PiB7XG5cdHJldHVybiAoZWxlbWVudCkgPT4ge1xuXHRcdHJldHVybiBkb0FuaW1hdGlvbihlbGVtZW50LCBvcHRpb25zKTtcblx0fTtcbn07XG52YXIgc2VxdWVuY2VBbmltYXRpb25zID0gYXN5bmMgKGVsZW1lbnQsIHNlcXVlbmNlKSA9PiB7XG5cdGZvciAoY29uc3QgY29uZmlnIG9mIHNlcXVlbmNlKSB7XG5cdFx0Y29uc3QgeyBhbmltYXRpb24gfSA9IGRvQW5pbWF0aW9uKGVsZW1lbnQsIGNvbmZpZyk7XG5cdFx0YXdhaXQgYW5pbWF0aW9uLmZpbmlzaGVkO1xuXHR9XG59O1xudmFyIHBhcmFsbGVsQW5pbWF0aW9ucyA9IChlbGVtZW50LCBhbmltYXRpb25zKSA9PiB7XG5cdGNvbnN0IHJlc3VsdHMgPSBhbmltYXRpb25zLm1hcCgoY29uZmlnKSA9PiBkb0FuaW1hdGlvbihlbGVtZW50LCBjb25maWcpKTtcblx0Y29uc3QgY2xlYW51cCA9ICgpID0+IHtcblx0XHRyZXN1bHRzLmZvckVhY2goKHIpID0+IHIuY2xlYW51cCgpKTtcblx0fTtcblx0cmV0dXJuIHtcblx0XHRhbmltYXRpb25zOiByZXN1bHRzLm1hcCgocikgPT4gci5hbmltYXRpb24pLFxuXHRcdGNsZWFudXBcblx0fTtcbn07XG52YXIgc3RhZ2dlckFuaW1hdGlvbiA9IChlbGVtZW50cywgb3B0aW9ucywgc3RhZ2dlckRlbGF5ID0gMTAwKSA9PiB7XG5cdHJldHVybiBlbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG5cdFx0Y29uc3QgZGVsYXkgPSBwYXJzZVRpbWUob3B0aW9ucz8uZGVsYXkgPz8gMCkgKyBpbmRleCAqIHN0YWdnZXJEZWxheTtcblx0XHRyZXR1cm4gZG9BbmltYXRpb24oZWxlbWVudCwge1xuXHRcdFx0Li4ub3B0aW9ucyxcblx0XHRcdGRlbGF5XG5cdFx0fSk7XG5cdH0pO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL0FuaW1hdGFibGUudHNcbnZhciBBTklNQVRBQkxFX0JSQU5EID0gU3ltYm9sLmZvcihcImZlc3QuYW5pbWF0YWJsZVwiKTtcbnZhciBub3JtYWxpemVJdGVyYXRpb25zID0gKG4pID0+IG4gPT09IC0xIHx8IG4gPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBNYXRoLm1heCgxLCBuID8/IDEpO1xudmFyIGFuaW1hdGFibGVJZCA9IDA7XG52YXIgb25TY3JvbGwgPSAobyA9IHt9KSA9PiAoe1xuXHRraW5kOiBcInNjcm9sbFwiLFxuXHQuLi5vXG59KTtcbnZhciBvblZpZXcgPSAobyA9IHt9KSA9PiAoe1xuXHRraW5kOiBcInZpZXdcIixcblx0Li4ub1xufSk7XG52YXIgaXNTY3JvbGxEcml2ZW4gPSAodCkgPT4gdCAhPSBudWxsICYmIHR5cGVvZiB0ID09PSBcIm9iamVjdFwiICYmIHQua2luZCA9PT0gXCJzY3JvbGxcIjtcbnZhciBpc1ZpZXdEcml2ZW4gPSAodCkgPT4gdCAhPSBudWxsICYmIHR5cGVvZiB0ID09PSBcIm9iamVjdFwiICYmIHQua2luZCA9PT0gXCJ2aWV3XCI7XG52YXIgQW5pbWF0YWJsZVZhbHVlID0gY2xhc3Mge1xuXHRbQU5JTUFUQUJMRV9CUkFORF0gPSB0cnVlO1xuXHRpZCA9IGFuaW1hdGFibGVJZCsrO1xuXHQjc3RlcHM7XG5cdCNvcHRpb25zO1xuXHQjY3VycmVudDtcblx0I3N1YnNjcmliZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0I2F0dGFjaG1lbnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0I3Jlc29sdmVFbGVtZW50UmVmKHYsIHNlbGYpIHtcblx0XHRpZiAodiA9PSBudWxsIHx8IHYgPT09IFwic2VsZlwiKSByZXR1cm4gc2VsZjtcblx0XHRpZiAodiA9PT0gXCJyb290XCIpIHJldHVybiBzZWxmLm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCA/PyBzZWxmLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRcdGlmICh0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiBcInZhbHVlXCIgaW4gdiAmJiAhKHYgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHYudmFsdWUgPz8gc2VsZjtcblx0XHRyZXR1cm4gdjtcblx0fVxuXHQjZmluZE5lYXJlc3RTY3JvbGxlcihlbCkge1xuXHRcdGZvciAobGV0IG5vZGUgPSBlbC5wYXJlbnRFbGVtZW50OyBub2RlOyBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50KSB7XG5cdFx0XHRjb25zdCBzID0gZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcblx0XHRcdGlmICgvKGF1dG98c2Nyb2xsfG92ZXJsYXkpLy50ZXN0KHMub3ZlcmZsb3cgKyBzLm92ZXJmbG93WCArIHMub3ZlcmZsb3dZKSkgcmV0dXJuIG5vZGU7XG5cdFx0fVxuXHRcdHJldHVybiBlbC5vd25lckRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgPz8gZWwub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdH1cblx0I2NyZWF0ZVRpbWVsaW5lKGVsZW1lbnQsIHRyaWdnZXIpIHtcblx0XHRjb25zdCB3aW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgPz8gZ2xvYmFsVGhpcztcblx0XHRpZiAoaXNTY3JvbGxEcml2ZW4odHJpZ2dlcikpIHtcblx0XHRcdGNvbnN0IFNjcm9sbFRpbWVsaW5lQ3RvciA9IHdpbi5TY3JvbGxUaW1lbGluZTtcblx0XHRcdGlmICh0eXBlb2YgU2Nyb2xsVGltZWxpbmVDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuXHRcdFx0cmV0dXJuIG5ldyBTY3JvbGxUaW1lbGluZUN0b3Ioe1xuXHRcdFx0XHRzb3VyY2U6IHRyaWdnZXIuc291cmNlID09PSBcIm5lYXJlc3RcIiB8fCB0cmlnZ2VyLnNvdXJjZSA9PSBudWxsID8gdGhpcy4jZmluZE5lYXJlc3RTY3JvbGxlcihlbGVtZW50KSA6IHRoaXMuI3Jlc29sdmVFbGVtZW50UmVmKHRyaWdnZXIuc291cmNlLCBlbGVtZW50KSxcblx0XHRcdFx0YXhpczogdHJpZ2dlci5heGlzID8/IFwiYmxvY2tcIlxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGNvbnN0IFZpZXdUaW1lbGluZUN0b3IgPSB3aW4uVmlld1RpbWVsaW5lO1xuXHRcdGlmICh0eXBlb2YgVmlld1RpbWVsaW5lQ3RvciAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDtcblx0XHRyZXR1cm4gbmV3IFZpZXdUaW1lbGluZUN0b3Ioe1xuXHRcdFx0c3ViamVjdDogdHJpZ2dlci5zdWJqZWN0ID8gdGhpcy4jcmVzb2x2ZUVsZW1lbnRSZWYodHJpZ2dlci5zdWJqZWN0LCBlbGVtZW50KSA6IGVsZW1lbnQsXG5cdFx0XHRheGlzOiB0cmlnZ2VyLmF4aXMgPz8gXCJibG9ja1wiLFxuXHRcdFx0aW5zZXQ6IHRyaWdnZXIuaW5zZXRcblx0XHR9KTtcblx0fVxuXHQjc3RhcnRUaW1lbGluZURyaXZlbihlbGVtZW50LCBhdHRhY2htZW50LCBwbGFuLCB0cmlnZ2VyKSB7XG5cdFx0Y29uc3QgdGltZWxpbmUgPSB0aGlzLiNjcmVhdGVUaW1lbGluZShlbGVtZW50LCB0cmlnZ2VyKTtcblx0XHRpZiAoIXRpbWVsaW5lKSByZXR1cm4gdGhpcy4jc3RhcnRUaW1lbGluZUZhbGxiYWNrKGVsZW1lbnQsIGF0dGFjaG1lbnQsIHBsYW4sIHRyaWdnZXIpO1xuXHRcdGNvbnN0IHRpbWluZyA9IHRoaXMuI2J1aWxkVGltaW5nKCk7XG5cdFx0Y29uc3QgYW5pbWF0aW9uID0gZWxlbWVudC5hbmltYXRlKHRoaXMuI2J1aWxkS2V5ZnJhbWVzKHBsYW4pLCB7XG5cdFx0XHQuLi50aW1pbmcsXG5cdFx0XHRkdXJhdGlvbjogXCJhdXRvXCIsXG5cdFx0XHRkZWxheTogMCxcblx0XHRcdGVuZERlbGF5OiAwLFxuXHRcdFx0aXRlcmF0aW9uczogMSxcblx0XHRcdGZpbGw6IHRoaXMuI29wdGlvbnMuZmlsbCA/PyBcImJvdGhcIixcblx0XHRcdHRpbWVsaW5lXG5cdFx0fSk7XG5cdFx0aWYgKHRyaWdnZXIucmFuZ2VTdGFydCkgYW5pbWF0aW9uLnJhbmdlU3RhcnQgPSB0cmlnZ2VyLnJhbmdlU3RhcnQ7XG5cdFx0aWYgKHRyaWdnZXIucmFuZ2VFbmQpIGFuaW1hdGlvbi5yYW5nZUVuZCA9IHRyaWdnZXIucmFuZ2VFbmQ7XG5cdFx0YXR0YWNobWVudC5hbmltYXRpb24gPSBhbmltYXRpb247XG5cdFx0cmV0dXJuICgpID0+IGFuaW1hdGlvbi5jYW5jZWwoKTtcblx0fVxuXHRjb25zdHJ1Y3RvcihzdGVwcywgb3B0aW9ucyA9IHt9KSB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHN0ZXBzKSB8fCBzdGVwcy5sZW5ndGggPCAyKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYW5pbWF0YWJsZSgpIGV4cGVjdHMgYXQgbGVhc3QgMiBzdGVwc1wiKTtcblx0XHR0aGlzLiNzdGVwcyA9IHN0ZXBzO1xuXHRcdHRoaXMuI29wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuI2N1cnJlbnQgPSB0aGlzLiNyZXNvbHZlU3RlcChzdGVwc1swXSk7XG5cdH1cblx0I3N0YXJ0VGltZWxpbmVGYWxsYmFjayhlbGVtZW50LCBhdHRhY2htZW50LCBwbGFuLCB0cmlnZ2VyKSB7XG5cdFx0Y29uc3QgRFVSQVRJT04gPSAxZTQ7XG5cdFx0Y29uc3QgYW5pbWF0aW9uID0gZWxlbWVudC5hbmltYXRlKHRoaXMuI2J1aWxkS2V5ZnJhbWVzKHBsYW4pLCB7XG5cdFx0XHQuLi50aGlzLiNidWlsZFRpbWluZygpLFxuXHRcdFx0ZHVyYXRpb246IERVUkFUSU9OLFxuXHRcdFx0ZGVsYXk6IDAsXG5cdFx0XHRpdGVyYXRpb25zOiAxLFxuXHRcdFx0ZmlsbDogXCJib3RoXCJcblx0XHR9KTtcblx0XHRhbmltYXRpb24ucGF1c2UoKTtcblx0XHRhdHRhY2htZW50LmFuaW1hdGlvbiA9IGFuaW1hdGlvbjtcblx0XHRjb25zdCBzY3JvbGxlciA9IGlzU2Nyb2xsRHJpdmVuKHRyaWdnZXIpID8gdHJpZ2dlci5zb3VyY2UgPT09IFwibmVhcmVzdFwiIHx8IHRyaWdnZXIuc291cmNlID09IG51bGwgPyB0aGlzLiNmaW5kTmVhcmVzdFNjcm9sbGVyKGVsZW1lbnQpIDogdGhpcy4jcmVzb2x2ZUVsZW1lbnRSZWYodHJpZ2dlci5zb3VyY2UsIGVsZW1lbnQpIDogdGhpcy4jZmluZE5lYXJlc3RTY3JvbGxlcihlbGVtZW50KTtcblx0XHRsZXQgcmFmSWQgPSAwO1xuXHRcdGNvbnN0IGNvbXB1dGVQcm9ncmVzcyA9ICgpID0+IHtcblx0XHRcdGlmIChpc1ZpZXdEcml2ZW4odHJpZ2dlcikpIHtcblx0XHRcdFx0Y29uc3QgdnAgPSBzY3JvbGxlciA9PT0gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCA/IHtcblx0XHRcdFx0XHR0b3A6IDAsXG5cdFx0XHRcdFx0aGVpZ2h0OiBpbm5lckhlaWdodFxuXHRcdFx0XHR9IDogc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0XHRjb25zdCB0b3RhbCA9IHZwLmhlaWdodCArIHJlY3QuaGVpZ2h0O1xuXHRcdFx0XHRyZXR1cm4gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgKHZwLnRvcCArIHZwLmhlaWdodCAtIHJlY3QudG9wKSAvIHRvdGFsKSk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBlbCA9IHNjcm9sbGVyO1xuXHRcdFx0Y29uc3QgbWF4ID0gZWwuc2Nyb2xsSGVpZ2h0IC0gZWwuY2xpZW50SGVpZ2h0O1xuXHRcdFx0cmV0dXJuIG1heCA+IDAgPyBlbC5zY3JvbGxUb3AgLyBtYXggOiAwO1xuXHRcdH07XG5cdFx0Y29uc3Qgb25TY3JvbGwgPSAoKSA9PiB7XG5cdFx0XHRjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG5cdFx0XHRyYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdGFuaW1hdGlvbi5jdXJyZW50VGltZSA9IGNvbXB1dGVQcm9ncmVzcygpICogRFVSQVRJT047XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdGNvbnN0IGxpc3RlblRhcmdldCA9IHNjcm9sbGVyID09PSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50ID8gd2luZG93IDogc2Nyb2xsZXI7XG5cdFx0bGlzdGVuVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25TY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblx0XHRvblNjcm9sbCgpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZCk7XG5cdFx0XHRsaXN0ZW5UYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBvblNjcm9sbCk7XG5cdFx0XHRhbmltYXRpb24uY2FuY2VsKCk7XG5cdFx0fTtcblx0fVxuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2N1cnJlbnQ7XG5cdH1cblx0c2V0IHZhbHVlKG5leHQpIHtcblx0XHR0aGlzLiNjdXJyZW50ID0gbmV4dDtcblx0XHRmb3IgKGNvbnN0IGNiIG9mIHRoaXMuI3N1YnNjcmliZXJzKSBjYihuZXh0KTtcblx0fVxuXHR2YWx1ZU9mKCkge1xuXHRcdHJldHVybiB0aGlzLiNjdXJyZW50O1xuXHR9XG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHYgPSB0aGlzLiNjdXJyZW50O1xuXHRcdHJldHVybiB2ID09IG51bGwgPyBcIlwiIDogU3RyaW5nKHYpO1xuXHR9XG5cdFtTeW1ib2wudG9QcmltaXRpdmVdKGhpbnQpIHtcblx0XHRpZiAoaGludCA9PT0gXCJudW1iZXJcIikge1xuXHRcdFx0Y29uc3QgbiA9IE51bWJlcih0aGlzLiNjdXJyZW50KTtcblx0XHRcdHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogMDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudG9TdHJpbmcoKTtcblx0fVxuXHRzdWJzY3JpYmUoY2IpIHtcblx0XHR0aGlzLiNzdWJzY3JpYmVycy5hZGQoY2IpO1xuXHRcdHJldHVybiAoKSA9PiB0aGlzLiNzdWJzY3JpYmVycy5kZWxldGUoY2IpO1xuXHR9XG5cdGdldCBvcHRpb25zKCkge1xuXHRcdHJldHVybiB0aGlzLiNvcHRpb25zO1xuXHR9XG5cdGdldCBzdGVwcygpIHtcblx0XHRyZXR1cm4gdGhpcy4jc3RlcHM7XG5cdH1cblx0I3Jlc29sdmVTdGVwKHN0ZXApIHtcblx0XHRpZiAoc3RlcCAhPSBudWxsICYmIHR5cGVvZiBzdGVwID09PSBcIm9iamVjdFwiICYmIFwidmFsdWVcIiBpbiBzdGVwKSByZXR1cm4gc3RlcC52YWx1ZTtcblx0XHRyZXR1cm4gc3RlcDtcblx0fVxuXHQjYnVpbGRLZXlmcmFtZXMocGxhbikge1xuXHRcdGNvbnN0IHN0ZXBzID0gdGhpcy4jc3RlcHMubWFwKChzKSA9PiB0aGlzLiNyZXNvbHZlU3RlcChzKSk7XG5cdFx0Y29uc3QgY291bnQgPSBzdGVwcy5sZW5ndGg7XG5cdFx0Y29uc3Qgb2Zmc2V0cyA9IHRoaXMuI29wdGlvbnMub2Zmc2V0cztcblx0XHRjb25zdCBlYXNpbmcgPSB0aGlzLiNvcHRpb25zLmVhc2luZztcblx0XHRyZXR1cm4gc3RlcHMubWFwKChyYXcsIGkpID0+IHtcblx0XHRcdGNvbnN0IGZyYW1lID0geyBvZmZzZXQ6IG9mZnNldHM/LltpXSA/PyAoY291bnQgPiAxID8gaSAvIChjb3VudCAtIDEpIDogMCkgfTtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGVhc2luZykpIHtcblx0XHRcdFx0aWYgKGVhc2luZ1tpXSkgZnJhbWUuZWFzaW5nID0gZWFzaW5nW2ldO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHZhbHVlID0gcmF3O1xuXHRcdFx0aWYgKHBsYW4ubW9kZSA9PT0gXCJwcm9wZXJ0eVwiICYmIHBsYW4udW5pdCAhPSBudWxsICYmIHR5cGVvZiByYXcgPT09IFwibnVtYmVyXCIpIHZhbHVlID0gYCR7cmF3fSR7cGxhbi51bml0fWA7XG5cdFx0XHRpZiAocGxhbi5tb2RlID09PSBcImN1c3RvbS1wcm9wZXJ0eVwiICYmIHR5cGVvZiByYXcgIT09IFwic3RyaW5nXCIpIHZhbHVlID0gU3RyaW5nKHJhdyk7XG5cdFx0XHRmcmFtZVtwbGFuLnRhcmdldF0gPSB2YWx1ZTtcblx0XHRcdHJldHVybiBmcmFtZTtcblx0XHR9KTtcblx0fVxuXHQjYnVpbGRUaW1pbmcoKSB7XG5cdFx0Y29uc3QgbyA9IHRoaXMuI29wdGlvbnM7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGR1cmF0aW9uOiBwYXJzZVRpbWUoby5kdXJhdGlvbiwgMzAwKSxcblx0XHRcdGRlbGF5OiBwYXJzZVRpbWUoby5kZWxheSwgMCksXG5cdFx0XHRlbmREZWxheTogby5lbmREZWxheSA/PyAwLFxuXHRcdFx0aXRlcmF0aW9uczogbm9ybWFsaXplSXRlcmF0aW9ucyhvLml0ZXJhdGlvbnMpLFxuXHRcdFx0ZGlyZWN0aW9uOiBvLmRpcmVjdGlvbiA/PyBcIm5vcm1hbFwiLFxuXHRcdFx0ZmlsbDogby5maWxsID8/IFwiYm90aFwiLFxuXHRcdFx0Y29tcG9zaXRlOiBvLmNvbXBvc2l0ZSxcblx0XHRcdGVhc2luZzogQXJyYXkuaXNBcnJheShvLmVhc2luZykgPyBcImxpbmVhclwiIDogby5lYXNpbmcgPz8gXCJsaW5lYXJcIlxuXHRcdH07XG5cdH1cblx0YXR0YWNoKGVsZW1lbnQsIHBsYW4pIHtcblx0XHRjb25zdCBhdHRhY2htZW50ID0ge1xuXHRcdFx0ZWxlbWVudCxcblx0XHRcdGFuaW1hdGlvbjogbnVsbCxcblx0XHRcdGNsZWFudXA6ICgpID0+IHt9XG5cdFx0fTtcblx0XHRjb25zdCB0cmlnZ2VyID0gdGhpcy4jb3B0aW9ucy50cmlnZ2VyID8/IFwibW91bnRcIjtcblx0XHRsZXQgaW5uZXI7XG5cdFx0aWYgKGlzU2Nyb2xsRHJpdmVuKHRyaWdnZXIpIHx8IGlzVmlld0RyaXZlbih0cmlnZ2VyKSkgaW5uZXIgPSB0aGlzLiNzdGFydFRpbWVsaW5lRHJpdmVuKGVsZW1lbnQsIGF0dGFjaG1lbnQsIHBsYW4sIHRyaWdnZXIpO1xuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3Qgc3RhcnQgPSAoKSA9PiB7XG5cdFx0XHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uPy5jYW5jZWwoKTtcblx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uID0gZWxlbWVudC5hbmltYXRlKHRoaXMuI2J1aWxkS2V5ZnJhbWVzKHBsYW4pLCB0aGlzLiNidWlsZFRpbWluZygpKTtcblx0XHRcdFx0YXR0YWNobWVudC5hbmltYXRpb24gPSBhbmltYXRpb247XG5cdFx0XHRcdHRoaXMuI3RyYWNrUHJvZ3Jlc3MoYW5pbWF0aW9uLCBwbGFuKTtcblx0XHRcdFx0cmV0dXJuIGFuaW1hdGlvbjtcblx0XHRcdH07XG5cdFx0XHRpbm5lciA9IHRoaXMuI3dpcmVUcmlnZ2VyKGVsZW1lbnQsIGF0dGFjaG1lbnQsIHN0YXJ0KTtcblx0XHR9XG5cdFx0dGhpcy4jYXR0YWNobWVudHMuYWRkKGF0dGFjaG1lbnQpO1xuXHRcdGF0dGFjaG1lbnQuY2xlYW51cCA9ICgpID0+IHtcblx0XHRcdGlubmVyKCk7XG5cdFx0XHR0aGlzLiNhdHRhY2htZW50cy5kZWxldGUoYXR0YWNobWVudCk7XG5cdFx0fTtcblx0XHRyZXR1cm4gYXR0YWNobWVudC5jbGVhbnVwO1xuXHR9XG5cdCN0cmFja1Byb2dyZXNzKGFuaW1hdGlvbiwgcGxhbikge1xuXHRcdGFuaW1hdGlvbi5maW5pc2hlZC50aGVuKCgpID0+IHtcblx0XHRcdGNvbnN0IGxhc3QgPSB0aGlzLiNyZXNvbHZlU3RlcCh0aGlzLiNzdGVwc1t0aGlzLiNzdGVwcy5sZW5ndGggLSAxXSk7XG5cdFx0XHR0aGlzLnZhbHVlID0gbGFzdDtcblx0XHR9KS5jYXRjaCgoKSA9PiB7fSk7XG5cdH1cblx0I3dpcmVUcmlnZ2VyKGVsZW1lbnQsIGF0dGFjaG1lbnQsIHN0YXJ0KSB7XG5cdFx0Y29uc3QgdHJpZ2dlciA9IHRoaXMuI29wdGlvbnMudHJpZ2dlciA/PyBcIm1vdW50XCI7XG5cdFx0Y29uc3QgcmV2ZXJzZU9uRXhpdCA9IHRoaXMuI29wdGlvbnMucmV2ZXJzZU9uRXhpdCA/PyB0cnVlO1xuXHRcdGNvbnN0IHBsYXlGb3J3YXJkID0gKCkgPT4ge1xuXHRcdFx0aWYgKCFhdHRhY2htZW50LmFuaW1hdGlvbiB8fCBhdHRhY2htZW50LmFuaW1hdGlvbi5wbGF5U3RhdGUgPT09IFwiaWRsZVwiKSBzdGFydCgpO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uLnBsYXliYWNrUmF0ZSA9IE1hdGguYWJzKGF0dGFjaG1lbnQuYW5pbWF0aW9uLnBsYXliYWNrUmF0ZSB8fCAxKTtcblx0XHRcdFx0YXR0YWNobWVudC5hbmltYXRpb24ucGxheSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgcGxheUJhY2t3YXJkID0gKCkgPT4ge1xuXHRcdFx0aWYgKCFhdHRhY2htZW50LmFuaW1hdGlvbikgcmV0dXJuO1xuXHRcdFx0YXR0YWNobWVudC5hbmltYXRpb24ucmV2ZXJzZSgpO1xuXHRcdH07XG5cdFx0aWYgKHRyaWdnZXIgPT09IFwibW91bnRcIikge1xuXHRcdFx0c3RhcnQoKTtcblx0XHRcdHJldHVybiAoKSA9PiB7fTtcblx0XHR9XG5cdFx0aWYgKHRyaWdnZXIgPT09IFwibWFudWFsXCIpIHJldHVybiAoKSA9PiB7fTtcblx0XHRpZiAodHJpZ2dlciA9PT0gXCJob3ZlclwiIHx8IHRyaWdnZXIgPT09IFwiZm9jdXNcIikge1xuXHRcdFx0Y29uc3QgZW50ZXIgPSB0cmlnZ2VyID09PSBcImhvdmVyXCIgPyBcInBvaW50ZXJlbnRlclwiIDogXCJmb2N1c2luXCI7XG5cdFx0XHRjb25zdCBsZWF2ZSA9IHRyaWdnZXIgPT09IFwiaG92ZXJcIiA/IFwicG9pbnRlcmxlYXZlXCIgOiBcImZvY3Vzb3V0XCI7XG5cdFx0XHRjb25zdCBvbkVudGVyID0gKCkgPT4gcGxheUZvcndhcmQoKTtcblx0XHRcdGNvbnN0IG9uTGVhdmUgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChyZXZlcnNlT25FeGl0KSBwbGF5QmFja3dhcmQoKTtcblx0XHRcdH07XG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZW50ZXIsIG9uRW50ZXIpO1xuXHRcdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGxlYXZlLCBvbkxlYXZlKTtcblx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbnRlciwgb25FbnRlcik7XG5cdFx0XHRcdGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihsZWF2ZSwgb25MZWF2ZSk7XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAodHJpZ2dlciA9PT0gXCJjbGlja1wiKSB7XG5cdFx0XHRsZXQgZm9yd2FyZCA9IHRydWU7XG5cdFx0XHRjb25zdCBvbkNsaWNrID0gKCkgPT4ge1xuXHRcdFx0XHRmb3J3YXJkID8gcGxheUZvcndhcmQoKSA6IHBsYXlCYWNrd2FyZCgpO1xuXHRcdFx0XHRmb3J3YXJkID0gIWZvcndhcmQ7XG5cdFx0XHR9O1xuXHRcdFx0ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljayk7XG5cdFx0XHRyZXR1cm4gKCkgPT4gZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljayk7XG5cdFx0fVxuXHRcdGlmICh0cmlnZ2VyID09PSBcInZpc2libGVcIikge1xuXHRcdFx0aWYgKHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHN0YXJ0KCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiB7fTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSBwbGF5Rm9yd2FyZCgpO1xuXHRcdFx0XHRlbHNlIGlmIChyZXZlcnNlT25FeGl0ICYmIGF0dGFjaG1lbnQuYW5pbWF0aW9uKSBwbGF5QmFja3dhcmQoKTtcblx0XHRcdH0sIHRoaXMuI29wdGlvbnMuaW50ZXJzZWN0aW9uKTtcblx0XHRcdG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCk7XG5cdFx0XHRyZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdH1cblx0XHRpZiAodHJpZ2dlciAhPSBudWxsICYmIHR5cGVvZiB0cmlnZ2VyID09PSBcIm9iamVjdFwiICYmIFwidmFsdWVcIiBpbiB0cmlnZ2VyKSB7XG5cdFx0XHRjb25zdCBhcHBseSA9ICh2KSA9PiB2ID8gcGxheUZvcndhcmQoKSA6IHBsYXlCYWNrd2FyZCgpO1xuXHRcdFx0YXBwbHkodHJpZ2dlci52YWx1ZSk7XG5cdFx0XHRjb25zdCB1bnN1YnNjcmliZSA9IHR5cGVvZiB0cmlnZ2VyLnN1YnNjcmliZSA9PT0gXCJmdW5jdGlvblwiID8gdHJpZ2dlci5zdWJzY3JpYmUoYXBwbHkpIDogbnVsbDtcblx0XHRcdHJldHVybiAoKSA9PiB1bnN1YnNjcmliZT8uKCk7XG5cdFx0fVxuXHRcdHJldHVybiAoKSA9PiB7fTtcblx0fVxuXHQjZWFjaChmbikge1xuXHRcdGZvciAoY29uc3QgYXQgb2YgdGhpcy4jYXR0YWNobWVudHMpIGlmIChhdC5hbmltYXRpb24pIGZuKGF0LmFuaW1hdGlvbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0cGxheSgpIHtcblx0XHRyZXR1cm4gdGhpcy4jZWFjaCgoYSkgPT4gYS5wbGF5KCkpO1xuXHR9XG5cdHBhdXNlKCkge1xuXHRcdHJldHVybiB0aGlzLiNlYWNoKChhKSA9PiBhLnBhdXNlKCkpO1xuXHR9XG5cdHJldmVyc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2VhY2goKGEpID0+IGEucmV2ZXJzZSgpKTtcblx0fVxuXHRjYW5jZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2VhY2goKGEpID0+IGEuY2FuY2VsKCkpO1xuXHR9XG5cdGZpbmlzaCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jZWFjaCgoYSkgPT4gYS5maW5pc2goKSk7XG5cdH1cblx0c2V0IHBsYXliYWNrUmF0ZShyYXRlKSB7XG5cdFx0dGhpcy4jZWFjaCgoYSkgPT4ge1xuXHRcdFx0YS5wbGF5YmFja1JhdGUgPSByYXRlO1xuXHRcdH0pO1xuXHR9XG5cdGdldCBmaW5pc2hlZCgpIHtcblx0XHRjb25zdCBsaXN0ID0gW107XG5cdFx0dGhpcy4jZWFjaCgoYSkgPT4gbGlzdC5wdXNoKGEuZmluaXNoZWQuY2F0Y2goKCkgPT4ge30pKSk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGxpc3QpLnRoZW4oKCkgPT4ge30pO1xuXHR9XG59O1xudmFyIGFuaW1hdGFibGUgPSAoc3RlcHMsIG9wdGlvbnMpID0+IG5ldyBBbmltYXRhYmxlVmFsdWUoc3RlcHMsIG9wdGlvbnMpO1xudmFyIGlzQW5pbWF0YWJsZVZhbHVlID0gKHZhbHVlKSA9PiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZVtBTklNQVRBQkxFX0JSQU5EXSA9PT0gdHJ1ZTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL1N0eWxlcy50c1xudmFyIGlzU3R5bGVCaW5kaW5nID0gKHN0eWxlcykgPT4ge1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheShzdHlsZXMpICYmIHR5cGVvZiBzdHlsZXNbMF0gPT09IFwiZnVuY3Rpb25cIjtcbn07XG52YXIgc3R5bGVUZW1wbGF0ZUlkID0gMDtcbnZhciBDU1NfRElNRU5TSU9OX1VOSVRTID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW1xuXHRcIiVcIixcblx0XCJweFwiLFxuXHRcImNtXCIsXG5cdFwibW1cIixcblx0XCJxXCIsXG5cdFwiaW5cIixcblx0XCJwY1wiLFxuXHRcInB0XCIsXG5cdFwiZW1cIixcblx0XCJleFwiLFxuXHRcImNoXCIsXG5cdFwiY2FwXCIsXG5cdFwiaWNcIixcblx0XCJsaFwiLFxuXHRcInJlbVwiLFxuXHRcInJleFwiLFxuXHRcInJjaFwiLFxuXHRcInJjYXBcIixcblx0XCJyaWNcIixcblx0XCJybGhcIixcblx0XCJ2d1wiLFxuXHRcInZoXCIsXG5cdFwidmlcIixcblx0XCJ2YlwiLFxuXHRcInZtaW5cIixcblx0XCJ2bWF4XCIsXG5cdFwic3Z3XCIsXG5cdFwic3ZoXCIsXG5cdFwic3ZpXCIsXG5cdFwic3ZiXCIsXG5cdFwic3ZtaW5cIixcblx0XCJzdm1heFwiLFxuXHRcImx2d1wiLFxuXHRcImx2aFwiLFxuXHRcImx2aVwiLFxuXHRcImx2YlwiLFxuXHRcImx2bWluXCIsXG5cdFwibHZtYXhcIixcblx0XCJkdndcIixcblx0XCJkdmhcIixcblx0XCJkdmlcIixcblx0XCJkdmJcIixcblx0XCJkdm1pblwiLFxuXHRcImR2bWF4XCIsXG5cdFwiY3F3XCIsXG5cdFwiY3FoXCIsXG5cdFwiY3FpXCIsXG5cdFwiY3FiXCIsXG5cdFwiY3FtaW5cIixcblx0XCJjcW1heFwiLFxuXHRcImRlZ1wiLFxuXHRcImdyYWRcIixcblx0XCJyYWRcIixcblx0XCJ0dXJuXCIsXG5cdFwic1wiLFxuXHRcIm1zXCIsXG5cdFwiaHpcIixcblx0XCJraHpcIixcblx0XCJkcGlcIixcblx0XCJkcGNtXCIsXG5cdFwiZHBweFwiLFxuXHRcInhcIixcblx0XCJmclwiXG5dKTtcbnZhciBpc0VmZmVjdGl2ZWx5RW1wdHlTdHlsZVRleHQgPSAoY3NzVGV4dCkgPT4ge1xuXHRjb25zdCBzb3VyY2UgPSB0eXBlb2YgY3NzVGV4dCA9PT0gXCJzdHJpbmdcIiA/IGNzc1RleHQudHJpbSgpIDogXCJcIjtcblx0aWYgKCFzb3VyY2UpIHJldHVybiB0cnVlO1xuXHRmb3IgKGNvbnN0IGNodW5rIG9mIHNvdXJjZS5zcGxpdChcIjtcIikpIHtcblx0XHRjb25zdCBkZWNsYXJhdGlvbiA9IGNodW5rLnRyaW0oKTtcblx0XHRpZiAoIWRlY2xhcmF0aW9uKSBjb250aW51ZTtcblx0XHRjb25zdCBjb2xvbkluZGV4ID0gZGVjbGFyYXRpb24uaW5kZXhPZihcIjpcIik7XG5cdFx0aWYgKGNvbG9uSW5kZXggPCAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKGRlY2xhcmF0aW9uLnNsaWNlKGNvbG9uSW5kZXggKyAxKS50cmltKCkubGVuZ3RoID4gMCkgcmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcbnZhciBwcnVuZUVtcHR5U3R5bGVBdHRyaWJ1dGUgPSAoZWxlbWVudCkgPT4ge1xuXHRpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm47XG5cdGNvbnN0IHJhdyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwic3R5bGVcIik7XG5cdGlmIChyYXcgPT0gbnVsbCkgcmV0dXJuO1xuXHRpZiAoaXNFZmZlY3RpdmVseUVtcHR5U3R5bGVUZXh0KHJhdykpIHtcblx0XHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBcIlwiO1xuXHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG5cdH1cbn07XG52YXIgYXBwbHlOb3JtYWxpemVkSW5saW5lU3R5bGUgPSAoZWxlbWVudCwgY3NzVGV4dCkgPT4ge1xuXHRpZiAoaXNFZmZlY3RpdmVseUVtcHR5U3R5bGVUZXh0KGNzc1RleHQpKSB7XG5cdFx0ZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJcIjtcblx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXHRlbGVtZW50LnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xufTtcbnZhciBpc05hdGl2ZUNTU1N0eWxlVmFsdWUgPSAodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG5cdHRyeSB7XG5cdFx0Y29uc3QgQ1NTU3R5bGVWYWx1ZUN0b3IgPSBnbG9iYWxUaGlzLkNTU1N0eWxlVmFsdWU7XG5cdFx0aWYgKHR5cGVvZiBDU1NTdHlsZVZhbHVlQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlIGluc3RhbmNlb2YgQ1NTU3R5bGVWYWx1ZUN0b3IpIHJldHVybiB0cnVlO1xuXHRcdGZvciAobGV0IHByb3RvdHlwZSA9IHZhbHVlOyBwcm90b3R5cGU7IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpKSBpZiAocHJvdG90eXBlPy5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gXCJDU1NTdHlsZVZhbHVlXCIpIHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIHt9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgaXNSZWFjdGl2ZVN0eWxlVmFsdWUgPSAodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRyZXR1cm4gXCJ2YWx1ZVwiIGluIHZhbHVlO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgaXNTdGF0aWNTdHlsZUludGVycG9sYXRpb24gPSAodmFsdWUpID0+IHtcblx0cmV0dXJuIHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiO1xufTtcbnZhciBlc2NhcGVSZWdFeHAgPSAodmFsdWUpID0+IHtcblx0cmV0dXJuIHZhbHVlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKTtcbn07XG52YXIgY29udGFpbnNNYXJrZXIgPSAoY3NzVmFsdWUsIG1hcmtlcikgPT4ge1xuXHRyZXR1cm4gbmV3IFJlZ0V4cChgdmFyXFxcXChcXFxccyoke2VzY2FwZVJlZ0V4cChtYXJrZXIpfVxcXFxzKlxcXFwpYCkudGVzdChjc3NWYWx1ZSk7XG59O1xudmFyIHJlYWRBdHRhY2hlZENTU1VuaXQgPSAodGV4dCkgPT4ge1xuXHRjb25zdCBtYXRjaCA9IC9eKCV8W2EtekEtWl0rKS8uZXhlYyh0ZXh0KTtcblx0aWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IGF1dGhvcmVkID0gbWF0Y2hbMF07XG5cdGNvbnN0IG5vcm1hbGl6ZWQgPSBhdXRob3JlZC50b0xvd2VyQ2FzZSgpO1xuXHRpZiAoIUNTU19ESU1FTlNJT05fVU5JVFMuaGFzKG5vcm1hbGl6ZWQpKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIHtcblx0XHRhdXRob3JlZCxcblx0XHRub3JtYWxpemVkLFxuXHRcdGxlbmd0aDogYXV0aG9yZWQubGVuZ3RoXG5cdH07XG59O1xudmFyIGdldENTU1VuaXRGYWN0b3J5TmFtZSA9ICh1bml0KSA9PiB7XG5cdHN3aXRjaCAodW5pdC50b0xvd2VyQ2FzZSgpKSB7XG5cdFx0Y2FzZSBcIiVcIjogcmV0dXJuIFwicGVyY2VudFwiO1xuXHRcdGNhc2UgXCJxXCI6IHJldHVybiBcIlFcIjtcblx0XHRjYXNlIFwiaHpcIjogcmV0dXJuIFwiSHpcIjtcblx0XHRjYXNlIFwia2h6XCI6IHJldHVybiBcImtIelwiO1xuXHRcdGNhc2UgXCJmclwiOiByZXR1cm4gXCJmbGV4XCI7XG5cdFx0ZGVmYXVsdDogcmV0dXJuIHVuaXQudG9Mb3dlckNhc2UoKTtcblx0fVxufTtcbnZhciBnZXRDU1NVbml0Q29uc3RydWN0b3JOYW1lID0gKHVuaXQpID0+IHtcblx0c3dpdGNoICh1bml0LnRvTG93ZXJDYXNlKCkpIHtcblx0XHRjYXNlIFwiJVwiOiByZXR1cm4gXCJwZXJjZW50XCI7XG5cdFx0ZGVmYXVsdDogcmV0dXJuIHVuaXQudG9Mb3dlckNhc2UoKTtcblx0fVxufTtcbnZhciBnZXRXaW5kb3dDb25zdHJ1Y3RvciA9ICh3aW4sIG5hbWUpID0+IHtcblx0cmV0dXJuIHdpbj8uW25hbWVdID8/IGdsb2JhbFRoaXM/LltuYW1lXTtcbn07XG52YXIgY3JlYXRlVHlwZWRVbml0VmFsdWUgPSAod2luLCB1bml0LCB2YWx1ZSkgPT4ge1xuXHRjb25zdCBDU1NOYW1lc3BhY2UgPSB3aW4/LkNTUztcblx0Y29uc3QgZmFjdG9yeU5hbWUgPSBnZXRDU1NVbml0RmFjdG9yeU5hbWUodW5pdCk7XG5cdGNvbnN0IGZhY3RvcnkgPSBDU1NOYW1lc3BhY2U/LltmYWN0b3J5TmFtZV07XG5cdGlmICh0eXBlb2YgZmFjdG9yeSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZmFjdG9yeS5jYWxsKENTU05hbWVzcGFjZSwgdmFsdWUpO1xuXHRjb25zdCBDU1NVbml0VmFsdWVDdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3Iod2luLCBcIkNTU1VuaXRWYWx1ZVwiKTtcblx0aWYgKHR5cGVvZiBDU1NVbml0VmFsdWVDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoYFR5cGVkIE9NIGRvZXMgbm90IHN1cHBvcnQgQ1NTIHVuaXQgXCIke3VuaXR9XCJgKTtcblx0cmV0dXJuIG5ldyBDU1NVbml0VmFsdWVDdG9yKHZhbHVlLCBnZXRDU1NVbml0Q29uc3RydWN0b3JOYW1lKHVuaXQpKTtcbn07XG52YXIgcmVhZFJlYWN0aXZlTnVtYmVyID0gKHNsb3QpID0+IHtcblx0Y29uc3QgY3VycmVudCA9IHNsb3QudmFsdWU/LnZhbHVlO1xuXHRjb25zdCBudW1iZXIgPSB0eXBlb2YgY3VycmVudCA9PT0gXCJudW1iZXJcIiA/IGN1cnJlbnQgOiBOdW1iZXIoY3VycmVudCk7XG5cdGlmICghTnVtYmVyLmlzRmluaXRlKG51bWJlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoYFJlYWN0aXZlIENTUyB2YWx1ZSBcIiR7U3RyaW5nKGN1cnJlbnQpfVwiIGlzIG5vdCBmaW5pdGVgKTtcblx0cmV0dXJuIG51bWJlcjtcbn07XG52YXIgZ2V0UmVhY3RpdmVJbml0aWFsTnVtYmVyID0gKHZhbHVlKSA9PiB7XG5cdGNvbnN0IG51bWJlciA9IE51bWJlcih2YWx1ZT8udmFsdWUpO1xuXHRyZXR1cm4gTnVtYmVyLmlzRmluaXRlKG51bWJlcikgPyBudW1iZXIgOiAwO1xufTtcbnZhciByZXBsYWNlVHlwZWRNYXJrZXJzID0gKGNzc1ZhbHVlLCBzbG90cykgPT4ge1xuXHRsZXQgcmVzdWx0ID0gY3NzVmFsdWU7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiBzbG90cykgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UobmV3IFJlZ0V4cChgdmFyXFxcXChcXFxccyoke2VzY2FwZVJlZ0V4cChzbG90Lm1hcmtlcil9XFxcXHMqXFxcXClgLCBcImdcIiksIFN0cmluZyhzbG90LnZhbHVlKSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xudmFyIGlzRGlyZWN0U2xvdFZhbHVlID0gKGNzc1ZhbHVlLCBtYXJrZXIpID0+IHtcblx0Y29uc3QgZXNjYXBlZE1hcmtlciA9IGVzY2FwZVJlZ0V4cChtYXJrZXIpO1xuXHRyZXR1cm4gbmV3IFJlZ0V4cChgXnZhclxcXFwoXFxcXHMqJHtlc2NhcGVkTWFya2VyfVxcXFxzKlxcXFwpJGApLnRlc3QoY3NzVmFsdWUudHJpbSgpKTtcbn07XG52YXIgc2VyaWFsaXplQW5pbWF0YWJsZUNzc1ZhbHVlID0gKHJhdywgdW5pdCkgPT4ge1xuXHRsZXQgdmFsdWUgPSByYXc7XG5cdGlmICh2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBcInZhbHVlXCIgaW4gdmFsdWUgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSB2YWx1ZSA9IHZhbHVlLnZhbHVlO1xuXHRpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikgcmV0dXJuIHVuaXQgPyBgMCR7dW5pdH1gIDogXCIwXCI7XG5cdGlmICh1bml0ICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSByZXR1cm4gYCR7dmFsdWV9JHt1bml0fWA7XG5cdHJldHVybiBTdHJpbmcodmFsdWUpO1xufTtcbnZhciBpc0RpcmVjdFNsb3RVbml0UHJvZHVjdCA9IChjc3NWYWx1ZSwgbWFya2VyLCB1bml0KSA9PiB7XG5cdGlmICghdW5pdCkgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCBlc2NhcGVkTWFya2VyID0gZXNjYXBlUmVnRXhwKG1hcmtlcik7XG5cdGNvbnN0IGVzY2FwZWRVbml0ID0gZXNjYXBlUmVnRXhwKHVuaXQpO1xuXHRyZXR1cm4gbmV3IFJlZ0V4cChgXmNhbGNcXFxcKFxcXFxzKnZhclxcXFwoXFxcXHMqJHtlc2NhcGVkTWFya2VyfVxcXFxzKlxcXFwpXFxcXHMqXFxcXCpcXFxccyoxJHtlc2NhcGVkVW5pdH1cXFxccypcXFxcKSRgLCBcImlcIikudGVzdChjc3NWYWx1ZS50cmltKCkpO1xufTtcbnZhciBzZXRQYXJzZWRUeXBlZFZhbHVlID0gKHN0eWxlTWFwLCBDU1NTdHlsZVZhbHVlQ3RvciwgcHJvcGVydHksIGNzc1ZhbHVlKSA9PiB7XG5cdGlmICh0eXBlb2YgQ1NTU3R5bGVWYWx1ZUN0b3I/LnBhcnNlQWxsID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRjb25zdCB2YWx1ZXMgPSBDU1NTdHlsZVZhbHVlQ3Rvci5wYXJzZUFsbChwcm9wZXJ0eSwgY3NzVmFsdWUpO1xuXHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgLi4udmFsdWVzKTtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKHR5cGVvZiBDU1NTdHlsZVZhbHVlQ3Rvcj8ucGFyc2UgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgQ1NTU3R5bGVWYWx1ZUN0b3IucGFyc2UocHJvcGVydHksIGNzc1ZhbHVlKSk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHN0eWxlTWFwLnNldChwcm9wZXJ0eSwgY3NzVmFsdWUpO1xufTtcbnZhciB0b2tlbml6ZU51bWVyaWNDU1MgPSAoc291cmNlKSA9PiB7XG5cdGNvbnN0IHRva2VucyA9IFtdO1xuXHRsZXQgY3Vyc29yID0gMDtcblx0d2hpbGUgKGN1cnNvciA8IHNvdXJjZS5sZW5ndGgpIHtcblx0XHRjb25zdCByZXN0ID0gc291cmNlLnNsaWNlKGN1cnNvcik7XG5cdFx0Y29uc3Qgd2hpdGVzcGFjZSA9IC9eXFxzKy8uZXhlYyhyZXN0KTtcblx0XHRpZiAod2hpdGVzcGFjZSkge1xuXHRcdFx0Y3Vyc29yICs9IHdoaXRlc3BhY2VbMF0ubGVuZ3RoO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IHZhcmlhYmxlID0gL152YXJcXChcXHMqKC0tW2EtekEtWjAtOV8tXSspXFxzKlxcKS8uZXhlYyhyZXN0KTtcblx0XHRpZiAodmFyaWFibGUpIHtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJ2YXJpYWJsZVwiLFxuXHRcdFx0XHRtYXJrZXI6IHZhcmlhYmxlWzFdXG5cdFx0XHR9KTtcblx0XHRcdGN1cnNvciArPSB2YXJpYWJsZVswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgbnVtYmVyID0gL14oPzpcXGQqXFwuXFxkK3xcXGQrXFwuP1xcZCopKD86W2VFXVsrLV0/XFxkKyk/Ly5leGVjKHJlc3QpO1xuXHRcdGlmIChudW1iZXIpIHtcblx0XHRcdGN1cnNvciArPSBudW1iZXJbMF0ubGVuZ3RoO1xuXHRcdFx0Y29uc3QgdW5pdE1hdGNoID0gL14oJXxbYS16QS1aXSspLy5leGVjKHNvdXJjZS5zbGljZShjdXJzb3IpKTtcblx0XHRcdGNvbnN0IHVuaXQgPSB1bml0TWF0Y2g/LlswXSA/PyBudWxsO1xuXHRcdFx0aWYgKHVuaXRNYXRjaCkgY3Vyc29yICs9IHVuaXRNYXRjaFswXS5sZW5ndGg7XG5cdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdGtpbmQ6IFwibnVtYmVyXCIsXG5cdFx0XHRcdHZhbHVlOiBOdW1iZXIobnVtYmVyWzBdKSxcblx0XHRcdFx0dW5pdDogdW5pdCA9PSBudWxsID8gbnVsbCA6IHVuaXQudG9Mb3dlckNhc2UoKVxuXHRcdFx0fSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgaWRlbnRpZmllciA9IC9eW2EtekEtWl9dW2EtekEtWjAtOV8tXSovLmV4ZWMocmVzdCk7XG5cdFx0aWYgKGlkZW50aWZpZXIpIHtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJpZGVudGlmaWVyXCIsXG5cdFx0XHRcdHZhbHVlOiBpZGVudGlmaWVyWzBdLnRvTG93ZXJDYXNlKClcblx0XHRcdH0pO1xuXHRcdFx0Y3Vyc29yICs9IGlkZW50aWZpZXJbMF0ubGVuZ3RoO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IHN5bWJvbCA9IHJlc3RbMF07XG5cdFx0aWYgKHN5bWJvbCA9PT0gXCIrXCIgfHwgc3ltYm9sID09PSBcIi1cIiB8fCBzeW1ib2wgPT09IFwiKlwiIHx8IHN5bWJvbCA9PT0gXCIvXCIgfHwgc3ltYm9sID09PSBcIihcIiB8fCBzeW1ib2wgPT09IFwiKVwiIHx8IHN5bWJvbCA9PT0gXCIsXCIpIHtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJzeW1ib2xcIixcblx0XHRcdFx0dmFsdWU6IHN5bWJvbFxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IrKztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVuc3VwcG9ydGVkIFR5cGVkIE9NIG51bWVyaWMgdG9rZW4gbmVhciBcIiR7cmVzdH1cImApO1xuXHR9XG5cdHJldHVybiB0b2tlbnM7XG59O1xudmFyIE51bWVyaWNUeXBlZE9NUGFyc2VyID0gY2xhc3Mge1xuXHR0b2tlbnM7XG5cdHdpbjtcblx0cmVhY3RpdmVCeU1hcmtlcjtcblx0dHlwZWRCeU1hcmtlcjtcblx0aW5kZXggPSAwO1xuXHRsZWF2ZXMgPSBbXTtcblx0Y29uc3RydWN0b3IodG9rZW5zLCB3aW4sIHJlYWN0aXZlQnlNYXJrZXIsIHR5cGVkQnlNYXJrZXIpIHtcblx0XHR0aGlzLnRva2VucyA9IHRva2Vucztcblx0XHR0aGlzLndpbiA9IHdpbjtcblx0XHR0aGlzLnJlYWN0aXZlQnlNYXJrZXIgPSByZWFjdGl2ZUJ5TWFya2VyO1xuXHRcdHRoaXMudHlwZWRCeU1hcmtlciA9IHR5cGVkQnlNYXJrZXI7XG5cdH1cblx0cGFyc2UoKSB7XG5cdFx0Y29uc3Qgcm9vdCA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRpZiAodGhpcy5pbmRleCAhPT0gdGhpcy50b2tlbnMubGVuZ3RoKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmV4cGVjdGVkIHRyYWlsaW5nIFR5cGVkIE9NIGV4cHJlc3Npb25cIik7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHJvb3QsXG5cdFx0XHRsZWF2ZXM6IHRoaXMubGVhdmVzXG5cdFx0fTtcblx0fVxuXHRjdXJyZW50KCkge1xuXHRcdHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblx0fVxuXHRjb25zdW1lKCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy50b2tlbnNbdGhpcy5pbmRleF07XG5cdFx0aWYgKCF0b2tlbikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW5leHBlY3RlZCBlbmQgb2YgVHlwZWQgT00gZXhwcmVzc2lvblwiKTtcblx0XHR0aGlzLmluZGV4Kys7XG5cdFx0cmV0dXJuIHRva2VuO1xuXHR9XG5cdGNvbnN1bWVTeW1ib2woc3ltYm9sKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRpZiAodG9rZW4ua2luZCAhPT0gXCJzeW1ib2xcIiB8fCB0b2tlbi52YWx1ZSAhPT0gc3ltYm9sKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYEV4cGVjdGVkIFwiJHtzeW1ib2x9XCJgKTtcblx0fVxuXHRtYXRjaGVzU3ltYm9sKHN5bWJvbCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50KCk7XG5cdFx0cmV0dXJuIHRva2VuPy5raW5kID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBzeW1ib2w7XG5cdH1cblx0Y3JlYXRlTWF0aChuYW1lLCAuLi52YWx1ZXMpIHtcblx0XHRjb25zdCBDb25zdHJ1Y3RvciA9IGdldFdpbmRvd0NvbnN0cnVjdG9yKHRoaXMud2luLCBuYW1lKTtcblx0XHRpZiAodHlwZW9mIENvbnN0cnVjdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7bmFtZX0gaXMgbm90IHN1cHBvcnRlZGApO1xuXHRcdHJldHVybiBuZXcgQ29uc3RydWN0b3IoLi4udmFsdWVzKTtcblx0fVxuXHRwYXJzZVN1bSgpIHtcblx0XHRsZXQgdmFsdWUgPSB0aGlzLnBhcnNlUHJvZHVjdCgpO1xuXHRcdHdoaWxlICh0aGlzLm1hdGNoZXNTeW1ib2woXCIrXCIpIHx8IHRoaXMubWF0Y2hlc1N5bWJvbChcIi1cIikpIHtcblx0XHRcdGNvbnN0IG9wZXJhdG9yID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0XHRjb25zdCByaWdodCA9IHRoaXMucGFyc2VQcm9kdWN0KCk7XG5cdFx0XHRpZiAob3BlcmF0b3Iua2luZCAhPT0gXCJzeW1ib2xcIikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgYSBzdW0gb3BlcmF0b3JcIik7XG5cdFx0XHRpZiAob3BlcmF0b3IudmFsdWUgPT09IFwiK1wiKSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhTdW1cIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoU3VtXCIsIHZhbHVlLCB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHJpZ2h0KSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRwYXJzZVByb2R1Y3QoKSB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIipcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiL1wiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0XHRpZiAob3BlcmF0b3Iua2luZCAhPT0gXCJzeW1ib2xcIikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgYSBwcm9kdWN0IG9wZXJhdG9yXCIpO1xuXHRcdFx0aWYgKG9wZXJhdG9yLnZhbHVlID09PSBcIipcIikgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoUHJvZHVjdFwiLCB2YWx1ZSwgcmlnaHQpO1xuXHRcdFx0ZWxzZSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhQcm9kdWN0XCIsIHZhbHVlLCB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoSW52ZXJ0XCIsIHJpZ2h0KSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRwYXJzZVVuYXJ5KCkge1xuXHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCIrXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdHJldHVybiB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMubWF0Y2hlc1N5bWJvbChcIi1cIikpIHtcblx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhOZWdhdGVcIiwgdGhpcy5wYXJzZVVuYXJ5KCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5wYXJzZVByaW1hcnkoKTtcblx0fVxuXHRwYXJzZVByaW1hcnkoKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHRoaXMud2luLCB0b2tlbi51bml0ID8/IFwibnVtYmVyXCIsIHRva2VuLnZhbHVlKTtcblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJ2YXJpYWJsZVwiKSB7XG5cdFx0XHRjb25zdCByZWFjdGl2ZSA9IHRoaXMucmVhY3RpdmVCeU1hcmtlci5nZXQodG9rZW4ubWFya2VyKTtcblx0XHRcdGlmIChyZWFjdGl2ZSkge1xuXHRcdFx0XHRpZiAodGhpcy5tYXRjaGVzU3ltYm9sKFwiKlwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNoZWNrcG9pbnQgPSB0aGlzLmluZGV4O1xuXHRcdFx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0XHRcdGNvbnN0IHJocyA9IHRoaXMuY3VycmVudCgpO1xuXHRcdFx0XHRcdGlmIChyaHM/LmtpbmQgPT09IFwibnVtYmVyXCIgJiYgcmhzLnZhbHVlID09PSAxICYmIHR5cGVvZiByaHMudW5pdCA9PT0gXCJzdHJpbmdcIiAmJiAoIXJlYWN0aXZlLm11bHRpcGxpZWRCeVVuaXQgfHwgcmVhY3RpdmUubXVsdGlwbGllZEJ5VW5pdCA9PT0gcmhzLnVuaXQudG9Mb3dlckNhc2UoKSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgbGVhZiA9IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHRoaXMud2luLCByaHMudW5pdC50b0xvd2VyQ2FzZSgpLCByZWFkUmVhY3RpdmVOdW1iZXIocmVhY3RpdmUpKTtcblx0XHRcdFx0XHRcdHRoaXMubGVhdmVzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRzbG90OiByZWFjdGl2ZSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IGxlYWZcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGxlYWY7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuaW5kZXggPSBjaGVja3BvaW50O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGxlYWYgPSBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh0aGlzLndpbiwgXCJudW1iZXJcIiwgcmVhZFJlYWN0aXZlTnVtYmVyKHJlYWN0aXZlKSk7XG5cdFx0XHRcdHRoaXMubGVhdmVzLnB1c2goe1xuXHRcdFx0XHRcdHNsb3Q6IHJlYWN0aXZlLFxuXHRcdFx0XHRcdHZhbHVlOiBsZWFmXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gbGVhZjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHR5cGVkID0gdGhpcy50eXBlZEJ5TWFya2VyLmdldCh0b2tlbi5tYXJrZXIpO1xuXHRcdFx0aWYgKHR5cGVkKSByZXR1cm4gdHlwZWQudmFsdWU7XG5cdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVua25vd24gc3R5bGUgc2xvdCBcIiR7dG9rZW4ubWFya2VyfVwiYCk7XG5cdFx0fVxuXHRcdGlmICh0b2tlbi5raW5kID09PSBcInN5bWJvbFwiICYmIHRva2VuLnZhbHVlID09PSBcIihcIikge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnBhcnNlU3VtKCk7XG5cdFx0XHR0aGlzLmNvbnN1bWVTeW1ib2woXCIpXCIpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJpZGVudGlmaWVyXCIpIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24odG9rZW4udmFsdWUpO1xuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcIkV4cGVjdGVkIGEgVHlwZWQgT00gbnVtZXJpYyB2YWx1ZVwiKTtcblx0fVxuXHRwYXJzZUZ1bmN0aW9uKG5hbWUpIHtcblx0XHR0aGlzLmNvbnN1bWVTeW1ib2woXCIoXCIpO1xuXHRcdGlmIChuYW1lID09PSBcImNhbGNcIikge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnBhcnNlU3VtKCk7XG5cdFx0XHR0aGlzLmNvbnN1bWVTeW1ib2woXCIpXCIpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0XHRjb25zdCB2YWx1ZXMgPSBbXTtcblx0XHRpZiAoIXRoaXMubWF0Y2hlc1N5bWJvbChcIilcIikpIHtcblx0XHRcdHZhbHVlcy5wdXNoKHRoaXMucGFyc2VTdW0oKSk7XG5cdFx0XHR3aGlsZSAodGhpcy5tYXRjaGVzU3ltYm9sKFwiLFwiKSkge1xuXHRcdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdFx0dmFsdWVzLnB1c2godGhpcy5wYXJzZVN1bSgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5jb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRpZiAobmFtZSA9PT0gXCJtaW5cIikge1xuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHRocm93IG5ldyBTeW50YXhFcnJvcihcIm1pbigpIHJlcXVpcmVzIGEgdmFsdWVcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aE1pblwiLCAuLi52YWx1ZXMpO1xuXHRcdH1cblx0XHRpZiAobmFtZSA9PT0gXCJtYXhcIikge1xuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHRocm93IG5ldyBTeW50YXhFcnJvcihcIm1heCgpIHJlcXVpcmVzIGEgdmFsdWVcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aE1heFwiLCAuLi52YWx1ZXMpO1xuXHRcdH1cblx0XHRpZiAobmFtZSA9PT0gXCJjbGFtcFwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCAhPT0gMykgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiY2xhbXAoKSByZXF1aXJlcyB0aHJlZSB2YWx1ZXNcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aENsYW1wXCIsIHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0pO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVuc3VwcG9ydGVkIFR5cGVkIE9NIGZ1bmN0aW9uIFwiJHtuYW1lfVwiYCk7XG5cdH1cbn07XG52YXIgYnVpbGROdW1lcmljVHlwZWRPTVRyZWUgPSAoY3NzVmFsdWUsIHdpbiwgcmVhY3RpdmVTbG90cywgdHlwZWRTbG90cykgPT4ge1xuXHRjb25zdCByZWFjdGl2ZUJ5TWFya2VyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3QgdHlwZWRCeU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiByZWFjdGl2ZVNsb3RzKSByZWFjdGl2ZUJ5TWFya2VyLnNldChzbG90Lm1hcmtlciwgc2xvdCk7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiB0eXBlZFNsb3RzKSB0eXBlZEJ5TWFya2VyLnNldChzbG90Lm1hcmtlciwgc2xvdCk7XG5cdHJldHVybiBuZXcgTnVtZXJpY1R5cGVkT01QYXJzZXIodG9rZW5pemVOdW1lcmljQ1NTKGNzc1ZhbHVlKSwgd2luLCByZWFjdGl2ZUJ5TWFya2VyLCB0eXBlZEJ5TWFya2VyKS5wYXJzZSgpO1xufTtcbnZhciBpc1RyYW5zZm9ybVN0eWxlUHJvcGVydHkgPSAocHJvcGVydHkpID0+IHtcblx0cmV0dXJuIHByb3BlcnR5LnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBcInRyYW5zZm9ybVwiO1xufTtcbnZhciBidWlsZFRyYW5zZm9ybVR5cGVkT01UcmVlID0gKGNzc1ZhbHVlLCB3aW4sIHJlYWN0aXZlU2xvdHMsIHR5cGVkU2xvdHMpID0+IHtcblx0Y29uc3QgdG9rZW5zID0gdG9rZW5pemVOdW1lcmljQ1NTKGNzc1ZhbHVlKTtcblx0Y29uc3QgbGVhdmVzID0gW107XG5cdGNvbnN0IGNvbXBvbmVudHMgPSBbXTtcblx0Y29uc3QgcmVhY3RpdmVCeU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHR5cGVkQnlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgcmVhY3RpdmVTbG90cykgcmVhY3RpdmVCeU1hcmtlci5zZXQoc2xvdC5tYXJrZXIsIHNsb3QpO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgdHlwZWRTbG90cykgdHlwZWRCeU1hcmtlci5zZXQoc2xvdC5tYXJrZXIsIHNsb3QpO1xuXHRjb25zdCB6ZXJvUHggPSAoKSA9PiBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwicHhcIiwgMCk7XG5cdGNvbnN0IG9uZU51bWJlciA9ICgpID0+IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMSk7XG5cdGxldCBpbmRleCA9IDA7XG5cdGNvbnN0IGN1cnJlbnQgPSAoKSA9PiB0b2tlbnNbaW5kZXhdO1xuXHRjb25zdCBjb25zdW1lID0gKCkgPT4ge1xuXHRcdGNvbnN0IHRva2VuID0gdG9rZW5zW2luZGV4XTtcblx0XHRpZiAoIXRva2VuKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiB0cmFuc2Zvcm0gZXhwcmVzc2lvblwiKTtcblx0XHRpbmRleCsrO1xuXHRcdHJldHVybiB0b2tlbjtcblx0fTtcblx0Y29uc3QgY29uc3VtZVN5bWJvbCA9IChzeW1ib2wpID0+IHtcblx0XHRjb25zdCB0b2tlbiA9IGNvbnN1bWUoKTtcblx0XHRpZiAodG9rZW4ua2luZCAhPT0gXCJzeW1ib2xcIiB8fCB0b2tlbi52YWx1ZSAhPT0gc3ltYm9sKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYEV4cGVjdGVkIFwiJHtzeW1ib2x9XCJgKTtcblx0fTtcblx0Y29uc3QgcGFyc2VBcmd1bWVudCA9ICgpID0+IHtcblx0XHRjb25zdCBzdGFydCA9IGluZGV4O1xuXHRcdGxldCBkZXB0aCA9IDA7XG5cdFx0d2hpbGUgKGluZGV4IDwgdG9rZW5zLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdO1xuXHRcdFx0aWYgKHRva2VuLmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiKFwiKSB7XG5cdFx0XHRcdGRlcHRoKys7XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRva2VuLmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiKVwiKSB7XG5cdFx0XHRcdGlmIChkZXB0aCA9PT0gMCkgYnJlYWs7XG5cdFx0XHRcdGRlcHRoLS07XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRva2VuLmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiLFwiICYmIGRlcHRoID09PSAwKSBicmVhaztcblx0XHRcdGluZGV4Kys7XG5cdFx0fVxuXHRcdGNvbnN0IHNsaWNlID0gdG9rZW5zLnNsaWNlKHN0YXJ0LCBpbmRleCk7XG5cdFx0aWYgKHNsaWNlLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRW1wdHkgdHJhbnNmb3JtIGZ1bmN0aW9uIGFyZ3VtZW50XCIpO1xuXHRcdGNvbnN0IHRyZWUgPSBuZXcgTnVtZXJpY1R5cGVkT01QYXJzZXIoc2xpY2UsIHdpbiwgcmVhY3RpdmVCeU1hcmtlciwgdHlwZWRCeU1hcmtlcikucGFyc2UoKTtcblx0XHRsZWF2ZXMucHVzaCguLi50cmVlLmxlYXZlcyk7XG5cdFx0cmV0dXJuIHRyZWUucm9vdDtcblx0fTtcblx0Y29uc3QgcGFyc2VBcmd1bWVudExpc3QgPSAoKSA9PiB7XG5cdFx0Y29uc3QgYXJncyA9IFtdO1xuXHRcdGNvbnN1bWVTeW1ib2woXCIoXCIpO1xuXHRcdGlmICghKGN1cnJlbnQoKT8ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiBjdXJyZW50KCk/LnZhbHVlID09PSBcIilcIikpIHtcblx0XHRcdGFyZ3MucHVzaChwYXJzZUFyZ3VtZW50KCkpO1xuXHRcdFx0d2hpbGUgKGN1cnJlbnQoKT8ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiBjdXJyZW50KCk/LnZhbHVlID09PSBcIixcIikge1xuXHRcdFx0XHRjb25zdW1lKCk7XG5cdFx0XHRcdGFyZ3MucHVzaChwYXJzZUFyZ3VtZW50KCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdW1lU3ltYm9sKFwiKVwiKTtcblx0XHRyZXR1cm4gYXJncztcblx0fTtcblx0Y29uc3QgY3JlYXRlQ29tcG9uZW50ID0gKG5hbWUsIGFyZ3MpID0+IHtcblx0XHRjb25zdCBjdG9yID0gKGNsYXNzTmFtZSkgPT4ge1xuXHRcdFx0Y29uc3QgQ3RvciA9IGdldFdpbmRvd0NvbnN0cnVjdG9yKHdpbiwgY2xhc3NOYW1lKTtcblx0XHRcdGlmICh0eXBlb2YgQ3RvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2NsYXNzTmFtZX0gaXMgbm90IHN1cHBvcnRlZGApO1xuXHRcdFx0cmV0dXJuIEN0b3I7XG5cdFx0fTtcblx0XHRzd2l0Y2ggKG5hbWUpIHtcblx0XHRcdGNhc2UgXCJ0cmFuc2xhdGVcIjoge1xuXHRcdFx0XHRjb25zdCBUcmFuc2xhdGUgPSBjdG9yKFwiQ1NTVHJhbnNsYXRlXCIpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDEpIHJldHVybiBuZXcgVHJhbnNsYXRlKGFyZ3NbMF0sIHplcm9QeCgpKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAyKSByZXR1cm4gbmV3IFRyYW5zbGF0ZShhcmdzWzBdLCBhcmdzWzFdKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAzKSByZXR1cm4gbmV3IFRyYW5zbGF0ZShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwidHJhbnNsYXRlKCkgZXhwZWN0cyAxLi4zIGFyZ3NcIik7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwidHJhbnNsYXRleFwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTVHJhbnNsYXRlXCIpKShhcmdzWzBdLCB6ZXJvUHgoKSk7XG5cdFx0XHRjYXNlIFwidHJhbnNsYXRleVwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTVHJhbnNsYXRlXCIpKSh6ZXJvUHgoKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwidHJhbnNsYXRlelwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTVHJhbnNsYXRlXCIpKSh6ZXJvUHgoKSwgemVyb1B4KCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInRyYW5zbGF0ZTNkXCI6XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCAhPT0gMykgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwidHJhbnNsYXRlM2QoKSBleHBlY3RzIDMgYXJnc1wiKTtcblx0XHRcdFx0cmV0dXJuIG5ldyAoY3RvcihcIkNTU1RyYW5zbGF0ZVwiKSkoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG5cdFx0XHRjYXNlIFwic2NhbGVcIjoge1xuXHRcdFx0XHRjb25zdCBTY2FsZSA9IGN0b3IoXCJDU1NTY2FsZVwiKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAxKSByZXR1cm4gbmV3IFNjYWxlKGFyZ3NbMF0sIGFyZ3NbMF0pO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDIpIHJldHVybiBuZXcgU2NhbGUoYXJnc1swXSwgYXJnc1sxXSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMykgcmV0dXJuIG5ldyBTY2FsZShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblx0XHRcdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwic2NhbGUoKSBleHBlY3RzIDEuLjMgYXJnc1wiKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJzY2FsZXhcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1NjYWxlXCIpKShhcmdzWzBdLCBvbmVOdW1iZXIoKSk7XG5cdFx0XHRjYXNlIFwic2NhbGV5XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NTY2FsZVwiKSkob25lTnVtYmVyKCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInNjYWxlelwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2NhbGVcIikpKG9uZU51bWJlcigpLCBvbmVOdW1iZXIoKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwic2NhbGUzZFwiOlxuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggIT09IDMpIHRocm93IG5ldyBTeW50YXhFcnJvcihcInNjYWxlM2QoKSBleHBlY3RzIDMgYXJnc1wiKTtcblx0XHRcdFx0cmV0dXJuIG5ldyAoY3RvcihcIkNTU1NjYWxlXCIpKShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblx0XHRcdGNhc2UgXCJyb3RhdGVcIjoge1xuXHRcdFx0XHRjb25zdCBSb3RhdGUgPSBjdG9yKFwiQ1NTUm90YXRlXCIpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDEpIHJldHVybiBuZXcgUm90YXRlKGFyZ3NbMF0pO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDQpIHJldHVybiBuZXcgUm90YXRlKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuXHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJyb3RhdGUoKSBleHBlY3RzIDEgb3IgNCBhcmdzXCIpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInJvdGF0ZXhcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1JvdGF0ZVwiKSkob25lTnVtYmVyKCksIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInJvdGF0ZXlcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1JvdGF0ZVwiKSkoY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgb25lTnVtYmVyKCksIGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgMCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInJvdGF0ZXpcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1JvdGF0ZVwiKSkoY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgb25lTnVtYmVyKCksIGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInJvdGF0ZTNkXCI6XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCAhPT0gNCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwicm90YXRlM2QoKSBleHBlY3RzIDQgYXJnc1wiKTtcblx0XHRcdFx0cmV0dXJuIG5ldyAoY3RvcihcIkNTU1JvdGF0ZVwiKSkoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG5cdFx0XHRjYXNlIFwic2tld1wiOiB7XG5cdFx0XHRcdGNvbnN0IFNrZXcgPSBjdG9yKFwiQ1NTU2tld1wiKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAxKSByZXR1cm4gbmV3IFNrZXcoYXJnc1swXSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcImRlZ1wiLCAwKSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMikgcmV0dXJuIG5ldyBTa2V3KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuXHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJza2V3KCkgZXhwZWN0cyAxLi4yIGFyZ3NcIik7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwic2tld3hcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1NrZXdYXCIpKShhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJza2V3eVwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2tld1lcIikpKGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInBlcnNwZWN0aXZlXCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NQZXJzcGVjdGl2ZVwiKSkoYXJnc1swXSk7XG5cdFx0XHRkZWZhdWx0OiB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVuc3VwcG9ydGVkIHRyYW5zZm9ybSBmdW5jdGlvbiBcIiR7bmFtZX1cImApO1xuXHRcdH1cblx0fTtcblx0d2hpbGUgKGluZGV4IDwgdG9rZW5zLmxlbmd0aCkge1xuXHRcdGNvbnN0IHRva2VuID0gY29uc3VtZSgpO1xuXHRcdGlmICh0b2tlbi5raW5kICE9PSBcImlkZW50aWZpZXJcIikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gbmFtZVwiKTtcblx0XHRjb25zdCBhcmdzID0gcGFyc2VBcmd1bWVudExpc3QoKTtcblx0XHRjb21wb25lbnRzLnB1c2goY3JlYXRlQ29tcG9uZW50KHRva2VuLnZhbHVlLCBhcmdzKSk7XG5cdH1cblx0aWYgKGNvbXBvbmVudHMubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFbXB0eSB0cmFuc2Zvcm0gbGlzdFwiKTtcblx0Y29uc3QgQ1NTVHJhbnNmb3JtVmFsdWVDdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3Iod2luLCBcIkNTU1RyYW5zZm9ybVZhbHVlXCIpO1xuXHRpZiAodHlwZW9mIENTU1RyYW5zZm9ybVZhbHVlQ3RvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ1NTVHJhbnNmb3JtVmFsdWUgaXMgbm90IHN1cHBvcnRlZFwiKTtcblx0cmV0dXJuIHtcblx0XHRyb290OiBuZXcgQ1NTVHJhbnNmb3JtVmFsdWVDdG9yKGNvbXBvbmVudHMpLFxuXHRcdGxlYXZlc1xuXHR9O1xufTtcbnZhciBidWlsZFR5cGVkT01TdHlsZVZhbHVlID0gKHByb3BlcnR5LCBjc3NWYWx1ZSwgd2luLCByZWFjdGl2ZVNsb3RzLCB0eXBlZFNsb3RzKSA9PiB7XG5cdGlmIChpc1RyYW5zZm9ybVN0eWxlUHJvcGVydHkocHJvcGVydHkpKSByZXR1cm4gYnVpbGRUcmFuc2Zvcm1UeXBlZE9NVHJlZShjc3NWYWx1ZSwgd2luLCByZWFjdGl2ZVNsb3RzLCB0eXBlZFNsb3RzKTtcblx0cmV0dXJuIGJ1aWxkTnVtZXJpY1R5cGVkT01UcmVlKGNzc1ZhbHVlLCB3aW4sIHJlYWN0aXZlU2xvdHMsIHR5cGVkU2xvdHMpO1xufTtcbnZhciBhZGRNdXRhYmxlTGVhdmVzID0gKHRhcmdldCwgbGVhdmVzKSA9PiB7XG5cdGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcblx0XHRjb25zdCBjdXJyZW50ID0gdGFyZ2V0LmdldChsZWFmLnNsb3QubWFya2VyKTtcblx0XHRpZiAoY3VycmVudCkgY3VycmVudC5wdXNoKGxlYWYpO1xuXHRcdGVsc2UgdGFyZ2V0LnNldChsZWFmLnNsb3QubWFya2VyLCBbbGVhZl0pO1xuXHR9XG59O1xudmFyIGF0dGFjaExlYWZUYXJnZXRzID0gKGxlYXZlcywgcHJvcGVydHksIHJvb3QpID0+IHtcblx0cmV0dXJuIGxlYXZlcy5tYXAoKGxlYWYpID0+ICh7XG5cdFx0c2xvdDogbGVhZi5zbG90LFxuXHRcdHZhbHVlOiBsZWFmLnZhbHVlLFxuXHRcdHByb3BlcnR5LFxuXHRcdHJvb3Rcblx0fSkpO1xufTtcbnZhciBhcHBseVN0eWxlVGVtcGxhdGUgPSAoZWxlbWVudCwgY3NzVGV4dCwgdHlwZWRTbG90cywgcmVhY3RpdmVTbG90cywgdmFyaWFibGVzLCBhbmltYXRhYmxlU2xvdHMpID0+IHtcblx0Y29uc3QgcHJvYmUgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG5cdHByb2JlLnN0eWxlLmNzc1RleHQgPSBjc3NUZXh0O1xuXHRhcHBseU5vcm1hbGl6ZWRJbmxpbmVTdHlsZShlbGVtZW50LCBcIlwiKTtcblx0Y29uc3QgdGFyZ2V0ID0gZWxlbWVudDtcblx0Y29uc3Qgc3R5bGVNYXAgPSB0YXJnZXQuYXR0cmlidXRlU3R5bGVNYXAgPz8gdGFyZ2V0LnN0eWxlTWFwO1xuXHRjb25zdCB3aW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgPz8gZ2xvYmFsVGhpcztcblx0Y29uc3QgQ1NTU3R5bGVWYWx1ZUN0b3IgPSB3aW4/LkNTU1N0eWxlVmFsdWUgPz8gZ2xvYmFsVGhpcy5DU1NTdHlsZVZhbHVlO1xuXHRjb25zdCBtdXRhYmxlTGVhdmVzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3QgcmVxdWlyZWRDU1NWYXJpYWJsZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRjb25zdCBzdWJzY3JpcHRpb25zID0gW107XG5cdGNvbnN0IHByb3BlcnR5TW9kZU93bmVkID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0Zm9yIChjb25zdCBzbG90IG9mIGFuaW1hdGFibGVTbG90cykge1xuXHRcdGxldCBwbGFuID0gbnVsbDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHByb2JlLnN0eWxlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eSA9IHByb2JlLnN0eWxlLml0ZW0oaSk7XG5cdFx0XHRjb25zdCBwYXJzZWRWYWx1ZSA9IHByb2JlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xuXHRcdFx0aWYgKGlzRGlyZWN0U2xvdFZhbHVlKHBhcnNlZFZhbHVlLCBzbG90Lm1hcmtlcikpIHtcblx0XHRcdFx0cGxhbiA9IHtcblx0XHRcdFx0XHRtb2RlOiBcInByb3BlcnR5XCIsXG5cdFx0XHRcdFx0dGFyZ2V0OiBwcm9wZXJ0eVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCBzZXJpYWxpemVBbmltYXRhYmxlQ3NzVmFsdWUoc2xvdC52YWx1ZS52YWx1ZSkpO1xuXHRcdFx0XHRwcm9wZXJ0eU1vZGVPd25lZC5hZGQocHJvcGVydHkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmIChpc0RpcmVjdFNsb3RVbml0UHJvZHVjdChwYXJzZWRWYWx1ZSwgc2xvdC5tYXJrZXIsIHNsb3QubXVsdGlwbGllZEJ5VW5pdCkpIHtcblx0XHRcdFx0cGxhbiA9IHtcblx0XHRcdFx0XHRtb2RlOiBcInByb3BlcnR5XCIsXG5cdFx0XHRcdFx0dGFyZ2V0OiBwcm9wZXJ0eSxcblx0XHRcdFx0XHR1bml0OiBzbG90Lm11bHRpcGxpZWRCeVVuaXRcblx0XHRcdFx0fTtcblx0XHRcdFx0ZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgc2VyaWFsaXplQW5pbWF0YWJsZUNzc1ZhbHVlKHNsb3QudmFsdWUudmFsdWUsIHNsb3QubXVsdGlwbGllZEJ5VW5pdCkpO1xuXHRcdFx0XHRwcm9wZXJ0eU1vZGVPd25lZC5hZGQocHJvcGVydHkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFwbGFuKSB7XG5cdFx0XHRjb25zdCBpbml0aWFsTnVtYmVyID0gTnVtYmVyKHNsb3QudmFsdWUudmFsdWUpIHx8IDA7XG5cdFx0XHRlbnN1cmVSZWdpc3RlcmVkTnVtYmVyUHJvcGVydHkod2luLCBzbG90Lm1hcmtlciwgaW5pdGlhbE51bWJlcik7XG5cdFx0XHRlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHNsb3QubWFya2VyLCBTdHJpbmcoaW5pdGlhbE51bWJlcikpO1xuXHRcdFx0cGxhbiA9IHtcblx0XHRcdFx0bW9kZTogXCJjdXN0b20tcHJvcGVydHlcIixcblx0XHRcdFx0dGFyZ2V0OiBzbG90Lm1hcmtlclxuXHRcdFx0fTtcblx0XHR9XG5cdFx0c3Vic2NyaXB0aW9ucy5wdXNoKHNsb3QudmFsdWUuYXR0YWNoKGVsZW1lbnQsIHBsYW4pKTtcblx0fVxuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcHJvYmUuc3R5bGUubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0Y29uc3QgcHJvcGVydHkgPSBwcm9iZS5zdHlsZS5pdGVtKGluZGV4KTtcblx0XHRpZiAocHJvcGVydHlNb2RlT3duZWQuaGFzKHByb3BlcnR5KSkgY29udGludWU7XG5cdFx0Y29uc3QgcGFyc2VkVmFsdWUgPSBwcm9iZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTtcblx0XHRjb25zdCBwcmlvcml0eSA9IHByb2JlLnN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkocHJvcGVydHkpO1xuXHRcdGNvbnN0IHVzZWRUeXBlZFNsb3RzID0gdHlwZWRTbG90cy5maWx0ZXIoKHNsb3QpID0+IGNvbnRhaW5zTWFya2VyKHBhcnNlZFZhbHVlLCBzbG90Lm1hcmtlcikpO1xuXHRcdGNvbnN0IHVzZWRSZWFjdGl2ZVNsb3RzID0gcmVhY3RpdmVTbG90cy5maWx0ZXIoKHNsb3QpID0+IGNvbnRhaW5zTWFya2VyKHBhcnNlZFZhbHVlLCBzbG90Lm1hcmtlcikpO1xuXHRcdGlmICh1c2VkVHlwZWRTbG90cy5sZW5ndGggPT09IDAgJiYgdXNlZFJlYWN0aXZlU2xvdHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCBwYXJzZWRWYWx1ZSwgcHJpb3JpdHkpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IGNhblVzZVR5cGVkT00gPSBzdHlsZU1hcD8uc2V0ICYmICFwcmlvcml0eSAmJiAhcHJvcGVydHkuc3RhcnRzV2l0aChcIi0tXCIpO1xuXHRcdGxldCBhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSBmYWxzZTtcblx0XHRpZiAoY2FuVXNlVHlwZWRPTSAmJiB1c2VkUmVhY3RpdmVTbG90cy5sZW5ndGggPiAwKSB0cnkge1xuXHRcdFx0Y29uc3QgZGlyZWN0U2xvdCA9IHVzZWRSZWFjdGl2ZVNsb3RzLmxlbmd0aCA9PT0gMSAmJiB1c2VkVHlwZWRTbG90cy5sZW5ndGggPT09IDAgPyB1c2VkUmVhY3RpdmVTbG90c1swXSA6IG51bGw7XG5cdFx0XHRpZiAoZGlyZWN0U2xvdCAmJiBpc0RpcmVjdFNsb3RVbml0UHJvZHVjdChwYXJzZWRWYWx1ZSwgZGlyZWN0U2xvdC5tYXJrZXIsIGRpcmVjdFNsb3QubXVsdGlwbGllZEJ5VW5pdCkpIHtcblx0XHRcdFx0Y29uc3QgbGlua2VkVmFsdWUgPSBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIGRpcmVjdFNsb3QubXVsdGlwbGllZEJ5VW5pdCwgcmVhZFJlYWN0aXZlTnVtYmVyKGRpcmVjdFNsb3QpKTtcblx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBsaW5rZWRWYWx1ZSk7XG5cdFx0XHRcdGFkZE11dGFibGVMZWF2ZXMobXV0YWJsZUxlYXZlcywgYXR0YWNoTGVhZlRhcmdldHMoW3tcblx0XHRcdFx0XHRzbG90OiBkaXJlY3RTbG90LFxuXHRcdFx0XHRcdHZhbHVlOiBsaW5rZWRWYWx1ZVxuXHRcdFx0XHR9XSwgcHJvcGVydHksIGxpbmtlZFZhbHVlKSk7XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGRpcmVjdFNsb3QgJiYgaXNEaXJlY3RTbG90VmFsdWUocGFyc2VkVmFsdWUsIGRpcmVjdFNsb3QubWFya2VyKSkge1xuXHRcdFx0XHRjb25zdCBsaW5rZWRWYWx1ZSA9IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJudW1iZXJcIiwgcmVhZFJlYWN0aXZlTnVtYmVyKGRpcmVjdFNsb3QpKTtcblx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBsaW5rZWRWYWx1ZSk7XG5cdFx0XHRcdGFkZE11dGFibGVMZWF2ZXMobXV0YWJsZUxlYXZlcywgYXR0YWNoTGVhZlRhcmdldHMoW3tcblx0XHRcdFx0XHRzbG90OiBkaXJlY3RTbG90LFxuXHRcdFx0XHRcdHZhbHVlOiBsaW5rZWRWYWx1ZVxuXHRcdFx0XHR9XSwgcHJvcGVydHksIGxpbmtlZFZhbHVlKSk7XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCB0cmVlID0gYnVpbGRUeXBlZE9NU3R5bGVWYWx1ZShwcm9wZXJ0eSwgcGFyc2VkVmFsdWUsIHdpbiwgdXNlZFJlYWN0aXZlU2xvdHMsIHVzZWRUeXBlZFNsb3RzKTtcblx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCB0cmVlLnJvb3QpO1xuXHRcdFx0XHRhZGRNdXRhYmxlTGVhdmVzKG11dGFibGVMZWF2ZXMsIGF0dGFjaExlYWZUYXJnZXRzKHRyZWUubGVhdmVzLCBwcm9wZXJ0eSwgdHJlZS5yb290KSk7XG5cdFx0XHRcdGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7fVxuXHRcdGlmIChhcHBsaWVkVGhyb3VnaFR5cGVkT00pIGNvbnRpbnVlO1xuXHRcdGlmIChjYW5Vc2VUeXBlZE9NICYmIHVzZWRSZWFjdGl2ZVNsb3RzLmxlbmd0aCA9PT0gMCAmJiB1c2VkVHlwZWRTbG90cy5sZW5ndGggPiAwKSB0cnkge1xuXHRcdFx0Y29uc3QgZGlyZWN0U2xvdCA9IHVzZWRUeXBlZFNsb3RzLmxlbmd0aCA9PT0gMSA/IHVzZWRUeXBlZFNsb3RzWzBdIDogbnVsbDtcblx0XHRcdGlmIChkaXJlY3RTbG90ICYmIGlzRGlyZWN0U2xvdFZhbHVlKHBhcnNlZFZhbHVlLCBkaXJlY3RTbG90Lm1hcmtlcikpIHtcblx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBkaXJlY3RTbG90LnZhbHVlKTtcblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoZGlyZWN0U2xvdCAmJiBpc0RpcmVjdFNsb3RVbml0UHJvZHVjdChwYXJzZWRWYWx1ZSwgZGlyZWN0U2xvdC5tYXJrZXIsIGRpcmVjdFNsb3QubXVsdGlwbGllZEJ5VW5pdCkpIHtcblx0XHRcdFx0Y29uc3QgQ1NTTWF0aFByb2R1Y3RDdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3Iod2luLCBcIkNTU01hdGhQcm9kdWN0XCIpO1xuXHRcdFx0XHRpZiAodHlwZW9mIENTU01hdGhQcm9kdWN0Q3RvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ1NTTWF0aFByb2R1Y3QgaXMgbm90IHN1cHBvcnRlZFwiKTtcblx0XHRcdFx0Y29uc3QgcHJvZHVjdCA9IG5ldyBDU1NNYXRoUHJvZHVjdEN0b3IoZGlyZWN0U2xvdC52YWx1ZSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBkaXJlY3RTbG90Lm11bHRpcGxpZWRCeVVuaXQsIDEpKTtcblx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBwcm9kdWN0KTtcblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgdHJlZSA9IGJ1aWxkVHlwZWRPTVN0eWxlVmFsdWUocHJvcGVydHksIHBhcnNlZFZhbHVlLCB3aW4sIFtdLCB1c2VkVHlwZWRTbG90cyk7XG5cdFx0XHRcdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCB0cmVlLnJvb3QpO1xuXHRcdFx0XHR9IGNhdGNoIHtcblx0XHRcdFx0XHRjb25zdCByZWNvbnN0cnVjdGVkID0gcmVwbGFjZVR5cGVkTWFya2VycyhwYXJzZWRWYWx1ZSwgdXNlZFR5cGVkU2xvdHMpO1xuXHRcdFx0XHRcdHNldFBhcnNlZFR5cGVkVmFsdWUoc3R5bGVNYXAsIENTU1N0eWxlVmFsdWVDdG9yLCBwcm9wZXJ0eSwgcmVjb25zdHJ1Y3RlZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHt9XG5cdFx0aWYgKGFwcGxpZWRUaHJvdWdoVHlwZWRPTSkgY29udGludWU7XG5cdFx0Y29uc3QgcmVjb25zdHJ1Y3RlZCA9IHJlcGxhY2VUeXBlZE1hcmtlcnMocGFyc2VkVmFsdWUsIHVzZWRUeXBlZFNsb3RzKTtcblx0XHRlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCByZWNvbnN0cnVjdGVkLCBwcmlvcml0eSk7XG5cdFx0Zm9yIChjb25zdCBzbG90IG9mIHVzZWRSZWFjdGl2ZVNsb3RzKSByZXF1aXJlZENTU1ZhcmlhYmxlcy5hZGQoc2xvdC5tYXJrZXIpO1xuXHR9XG5cdGZvciAoY29uc3Qgc2xvdCBvZiByZWFjdGl2ZVNsb3RzKSB7XG5cdFx0Y29uc3QgbGVhdmVzID0gbXV0YWJsZUxlYXZlcy5nZXQoc2xvdC5tYXJrZXIpID8/IFtdO1xuXHRcdGNvbnN0IG5lZWRzQ1NTVmFyaWFibGUgPSByZXF1aXJlZENTU1ZhcmlhYmxlcy5oYXMoc2xvdC5tYXJrZXIpO1xuXHRcdGlmIChsZWF2ZXMubGVuZ3RoID09PSAwICYmICFuZWVkc0NTU1ZhcmlhYmxlKSBjb250aW51ZTtcblx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSBiaW5kV2l0aChlbGVtZW50LCBzbG90Lm1hcmtlciwgc2xvdC52YWx1ZSwgZnVuY3Rpb24oLi4uYXJncykge1xuXHRcdFx0aWYgKGxlYXZlcy5sZW5ndGggPiAwKSB0cnkge1xuXHRcdFx0XHRjb25zdCBuZXh0VmFsdWUgPSByZWFkUmVhY3RpdmVOdW1iZXIoc2xvdCk7XG5cdFx0XHRcdGNvbnN0IGRpcnR5Um9vdHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxlYWYgb2YgbGVhdmVzKSB7XG5cdFx0XHRcdFx0bGVhZi52YWx1ZS52YWx1ZSA9IG5leHRWYWx1ZTtcblx0XHRcdFx0XHRkaXJ0eVJvb3RzLnNldChsZWFmLnByb3BlcnR5LCBsZWFmLnJvb3QpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzdHlsZU1hcD8uc2V0KSBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHJvb3RdIG9mIGRpcnR5Um9vdHMpIHN0eWxlTWFwLnNldChwcm9wZXJ0eU5hbWUsIHJvb3QpO1xuXHRcdFx0fSBjYXRjaCB7fVxuXHRcdFx0aWYgKG5lZWRzQ1NTVmFyaWFibGUpIGhhbmRsZVN0eWxlQ2hhbmdlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdH0pO1xuXHRcdHN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuXHR9XG5cdGZvciAoY29uc3QgbmFtZSBvZiByZXF1aXJlZENTU1ZhcmlhYmxlcykge1xuXHRcdGlmIChyZWFjdGl2ZVNsb3RzLnNvbWUoKHNsb3QpID0+IHNsb3QubWFya2VyID09PSBuYW1lKSkgY29udGludWU7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YXJpYWJsZXMuZ2V0KG5hbWUpO1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSBjb250aW51ZTtcblx0XHRzdWJzY3JpcHRpb25zLnB1c2goYmluZFdpdGgoZWxlbWVudCwgbmFtZSwgdmFsdWUsIGhhbmRsZVN0eWxlQ2hhbmdlKSk7XG5cdH1cblx0cHJ1bmVFbXB0eVN0eWxlQXR0cmlidXRlKGVsZW1lbnQpO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHN1YnNjcmlwdGlvbnMpIHN1YnNjcmlwdGlvbj8uKCk7XG5cdH07XG59O1xudmFyIGNvbXBsaWxlU3RhdGljQ1NTVGV4dCA9IChmb3JSZXR1cm4pID0+IHtcblx0Y29uc3QgW2FwcGx5LCBwcm9wZXJ0aWVzLCB2YXJpYWJsZXNdID0gZm9yUmV0dXJuO1xuXHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0YXBwbHkoZWxlbWVudCk7XG5cdHJldHVybiBlbGVtZW50LnN0eWxlLmNzc1RleHQ7XG59O1xudmFyIFMgPSAoc3RyaW5ncywgLi4udmFsdWVzKSA9PiB7XG5cdGNvbnN0IHRlbXBsYXRlSWQgPSBzdHlsZVRlbXBsYXRlSWQrKztcblx0Y29uc3QgcHJvcGVydGllcyA9IFtdO1xuXHRjb25zdCB2YXJpYWJsZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdCB0eXBlZFNsb3RzID0gW107XG5cdGNvbnN0IHJlYWN0aXZlU2xvdHMgPSBbXTtcblx0Y29uc3QgcGFydHMgPSBbXTtcblx0Y29uc3QgYW5pbWF0YWJsZVNsb3RzID0gW107XG5cdGNvbnN0IGNvbnN1bWVkID0gbmV3IEFycmF5KHN0cmluZ3MubGVuZ3RoKS5maWxsKDApO1xuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3RyaW5ncy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRwYXJ0cy5wdXNoKHN0cmluZ3NbaW5kZXhdLnNsaWNlKGNvbnN1bWVkW2luZGV4XSkpO1xuXHRcdGlmIChpbmRleCA+PSB2YWx1ZXMubGVuZ3RoKSBjb250aW51ZTtcblx0XHRjb25zdCB2YWx1ZSA9IHZhbHVlc1tpbmRleF07XG5cdFx0Y29uc3QgbmV4dFRleHQgPSBzdHJpbmdzW2luZGV4ICsgMV0gPz8gXCJcIjtcblx0XHRjb25zdCBhdHRhY2hlZFVuaXQgPSByZWFkQXR0YWNoZWRDU1NVbml0KG5leHRUZXh0KTtcblx0XHRpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgbWFya2VyID0gYC0tZmVzdC10eXBlZC0ke3RlbXBsYXRlSWR9LSR7dHlwZWRTbG90cy5sZW5ndGh9YDtcblx0XHRcdHR5cGVkU2xvdHMucHVzaCh7XG5cdFx0XHRcdG1hcmtlcixcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdG11bHRpcGxpZWRCeVVuaXQ6IGF0dGFjaGVkVW5pdD8ubm9ybWFsaXplZFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoYXR0YWNoZWRVbml0KSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYGNhbGModmFyKCR7bWFya2VyfSkgKiAxJHthdHRhY2hlZFVuaXQuYXV0aG9yZWR9KWApO1xuXHRcdFx0XHRjb25zdW1lZFtpbmRleCArIDFdICs9IGF0dGFjaGVkVW5pdC5sZW5ndGg7XG5cdFx0XHR9IGVsc2UgcGFydHMucHVzaChgdmFyKCR7bWFya2VyfSlgKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAoaXNBbmltYXRhYmxlVmFsdWUodmFsdWUpKSB7XG5cdFx0XHRjb25zdCBtYXJrZXIgPSBgLS1mZXN0LWFuaW0tJHt0ZW1wbGF0ZUlkfS0ke2FuaW1hdGFibGVTbG90cy5sZW5ndGh9YDtcblx0XHRcdGlmIChhdHRhY2hlZFVuaXQpIHtcblx0XHRcdFx0cGFydHMucHVzaChgY2FsYyh2YXIoJHttYXJrZXJ9KSAqIDEke2F0dGFjaGVkVW5pdC5hdXRob3JlZH0pYCk7XG5cdFx0XHRcdGNvbnN1bWVkW2luZGV4ICsgMV0gKz0gYXR0YWNoZWRVbml0Lmxlbmd0aDtcblx0XHRcdH0gZWxzZSBwYXJ0cy5wdXNoKGB2YXIoJHttYXJrZXJ9KWApO1xuXHRcdFx0cHJvcGVydGllcy5wdXNoKGBAcHJvcGVydHkgJHttYXJrZXJ9IHsgc3ludGF4OiBcIjxudW1iZXI+XCI7IGluaXRpYWwtdmFsdWU6ICR7TnVtYmVyKHZhbHVlLnZhbHVlKSB8fCAwfTsgaW5oZXJpdHM6IGZhbHNlOyB9O2ApO1xuXHRcdFx0YW5pbWF0YWJsZVNsb3RzLnB1c2goe1xuXHRcdFx0XHRtYXJrZXIsXG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRtdWx0aXBsaWVkQnlVbml0OiBhdHRhY2hlZFVuaXQ/Lm5vcm1hbGl6ZWRcblx0XHRcdH0pO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChpc1JlYWN0aXZlU3R5bGVWYWx1ZSh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IG1hcmtlciA9IGAtLWZlc3QtcmVmLSR7dGVtcGxhdGVJZH0tJHtyZWFjdGl2ZVNsb3RzLmxlbmd0aH1gO1xuXHRcdFx0cmVhY3RpdmVTbG90cy5wdXNoKHtcblx0XHRcdFx0bWFya2VyLFxuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0bXVsdGlwbGllZEJ5VW5pdDogYXR0YWNoZWRVbml0Py5ub3JtYWxpemVkXG5cdFx0XHR9KTtcblx0XHRcdGlmIChhdHRhY2hlZFVuaXQpIHtcblx0XHRcdFx0cGFydHMucHVzaChgY2FsYyh2YXIoJHttYXJrZXJ9KSAqIDEke2F0dGFjaGVkVW5pdC5hdXRob3JlZH0pYCk7XG5cdFx0XHRcdGNvbnN1bWVkW2luZGV4ICsgMV0gKz0gYXR0YWNoZWRVbml0Lmxlbmd0aDtcblx0XHRcdH0gZWxzZSBwYXJ0cy5wdXNoKGB2YXIoJHttYXJrZXJ9KWApO1xuXHRcdFx0Y29uc3QgaW5pdGlhbFZhbHVlID0gZ2V0UmVhY3RpdmVJbml0aWFsTnVtYmVyKHZhbHVlKTtcblx0XHRcdHByb3BlcnRpZXMucHVzaChgQHByb3BlcnR5ICR7bWFya2VyfSB7IHN5bnRheDogXCI8bnVtYmVyPlwiOyBpbml0aWFsLXZhbHVlOiAke2luaXRpYWxWYWx1ZX07IGluaGVyaXRzOiB0cnVlOyB9O2ApO1xuXHRcdFx0dmFyaWFibGVzLnNldChtYXJrZXIsIHZhbHVlKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiICYmIHZhbHVlICE9IG51bGwgJiYgU3RyaW5nKHZhbHVlKS50cmltKCkgIT09IFwiXCIpIHBhcnRzLnB1c2goU3RyaW5nKHZhbHVlKSk7XG5cdH1cblx0Y29uc3QgZm9yUmV0dXJuID0gW1xuXHRcdChlbGVtZW50KSA9PiB7XG5cdFx0XHRyZXR1cm4gYXBwbHlTdHlsZVRlbXBsYXRlKGVsZW1lbnQsIHBhcnRzLmpvaW4oXCJcIiksIHR5cGVkU2xvdHMsIHJlYWN0aXZlU2xvdHMsIHZhcmlhYmxlcywgYW5pbWF0YWJsZVNsb3RzKTtcblx0XHR9LFxuXHRcdHByb3BlcnRpZXMsXG5cdFx0dmFyaWFibGVzXG5cdF07XG5cdGZvclJldHVybltTeW1ib2wudG9TdHJpbmdUYWddID0gKCkgPT4gY29tcGxpbGVTdGF0aWNDU1NUZXh0KGZvclJldHVybik7XG5cdGZvclJldHVybltTeW1ib2wudG9QcmltaXRpdmVdID0gKHR5cGUpID0+IHtcblx0XHRpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbXBsaWxlU3RhdGljQ1NTVGV4dChmb3JSZXR1cm4pO1xuXHRcdHJldHVybiBmb3JSZXR1cm5bMF07XG5cdH07XG5cdGZvclJldHVybi50b1N0cmluZyA9ICgpID0+IGNvbXBsaWxlU3RhdGljQ1NTVGV4dChmb3JSZXR1cm4pO1xuXHRmb3JSZXR1cm4udmFsdWVPZiA9ICgpID0+IGNvbXBsaWxlU3RhdGljQ1NTVGV4dChmb3JSZXR1cm4pO1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZm9yUmV0dXJuLCBcImNzc1RleHRcIiwge1xuXHRcdGdldDogKCkgPT4gY29tcGxpbGVTdGF0aWNDU1NUZXh0KGZvclJldHVybiksXG5cdFx0c2V0OiAodmFsdWUpID0+IHtcblx0XHRcdGNvbnNvbGUubG9nKFwic2V0IGNzc1RleHRcIiwgdmFsdWUpO1xuXHRcdFx0Y29uc3QgW2FwcGx5LCBwcm9wZXJ0aWVzLCB2YXJpYWJsZXNdID0gZm9yUmV0dXJuO1xuXHRcdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRhcHBseShlbGVtZW50KTtcblx0XHRcdGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IHZhbHVlO1xuXHRcdH0sXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdGVudW1lcmFibGU6IHRydWVcblx0fSk7XG5cdHJldHVybiBmb3JSZXR1cm47XG59O1xudmFyIGNzcyA9IChzdHJpbmdzLCAuLi52YWx1ZXMpID0+IHtcblx0cmV0dXJuIFMoc3RyaW5ncywgLi4udmFsdWVzKTtcbn07XG52YXIgc3BsaXRJbmxpbmVTdHlsZVBsYWNlaG9sZGVycyA9IChzb3VyY2UsIGF0dHJpYnV0ZXMpID0+IHtcblx0Y29uc3Qgc3RyaW5ncyA9IFtdO1xuXHRjb25zdCB2YWx1ZXMgPSBbXTtcblx0Y29uc3QgcGF0dGVybiA9IC8jXFx7KFxcZCspXFx9L2c7XG5cdGxldCBjdXJzb3IgPSAwO1xuXHRsZXQgbWF0Y2g7XG5cdHdoaWxlICgobWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc291cmNlKSkgIT0gbnVsbCkge1xuXHRcdGNvbnN0IGF0dHJpYnV0ZUluZGV4ID0gTnVtYmVyLnBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG5cdFx0aWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhdHRyaWJ1dGVJbmRleCkgfHwgYXR0cmlidXRlSW5kZXggPCAwKSBjb250aW51ZTtcblx0XHRzdHJpbmdzLnB1c2goc291cmNlLnNsaWNlKGN1cnNvciwgbWF0Y2guaW5kZXgpKTtcblx0XHR2YWx1ZXMucHVzaChhdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XSk7XG5cdFx0Y3Vyc29yID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG5cdH1cblx0aWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXHRzdHJpbmdzLnB1c2goc291cmNlLnNsaWNlKGN1cnNvcikpO1xuXHRyZXR1cm4ge1xuXHRcdHN0cmluZ3MsXG5cdFx0dmFsdWVzXG5cdH07XG59O1xudmFyIGpvaW5TdGF0aWNJbmxpbmVTdHlsZSA9IChzdHJpbmdzLCB2YWx1ZXMpID0+IHtcblx0bGV0IHJlc3VsdCA9IHN0cmluZ3NbMF0gPz8gXCJcIjtcblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHZhbHVlcy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRjb25zdCB2YWx1ZSA9IHZhbHVlc1tpbmRleF07XG5cdFx0aWYgKHZhbHVlICE9IG51bGwpIHJlc3VsdCArPSBTdHJpbmcodmFsdWUpO1xuXHRcdHJlc3VsdCArPSBzdHJpbmdzW2luZGV4ICsgMV0gPz8gXCJcIjtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufTtcbnZhciBjb21waWxlSW5saW5lU3R5bGVBdHRyaWJ1dGUgPSAoc291cmNlLCBhdHRyaWJ1dGVzKSA9PiB7XG5cdGNvbnN0IHBhcnNlZCA9IHNwbGl0SW5saW5lU3R5bGVQbGFjZWhvbGRlcnMoc291cmNlLCBhdHRyaWJ1dGVzKTtcblx0aWYgKCFwYXJzZWQpIHJldHVybiBudWxsO1xuXHRjb25zdCB7IHN0cmluZ3MsIHZhbHVlcyB9ID0gcGFyc2VkO1xuXHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSAmJiAoc3RyaW5nc1swXSA/PyBcIlwiKS50cmltKCkgPT09IFwiXCIgJiYgKHN0cmluZ3NbMV0gPz8gXCJcIikudHJpbSgpID09PSBcIlwiICYmICFpc1N0YXRpY1N0eWxlSW50ZXJwb2xhdGlvbih2YWx1ZXNbMF0pICYmICFpc05hdGl2ZUNTU1N0eWxlVmFsdWUodmFsdWVzWzBdKSkge1xuXHRcdGlmIChpc1N0eWxlQmluZGluZyh2YWx1ZXNbMF0pKSByZXR1cm4ge1xuXHRcdFx0a2luZDogXCJ0ZW1wbGF0ZVwiLFxuXHRcdFx0YmluZGluZzogdmFsdWVzWzBdXG5cdFx0fTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0a2luZDogXCJkaXJlY3RcIixcblx0XHRcdHZhbHVlOiB2YWx1ZXNbMF1cblx0XHR9O1xuXHR9XG5cdGlmICh2YWx1ZXMuc29tZSgodmFsdWUpID0+IGlzUmVhY3RpdmVTdHlsZVZhbHVlKHZhbHVlKSB8fCBpc05hdGl2ZUNTU1N0eWxlVmFsdWUodmFsdWUpKSkgcmV0dXJuIHtcblx0XHRraW5kOiBcInRlbXBsYXRlXCIsXG5cdFx0YmluZGluZzogUyhzdHJpbmdzLCAuLi52YWx1ZXMpXG5cdH07XG5cdGlmICh2YWx1ZXMuZXZlcnkoaXNTdGF0aWNTdHlsZUludGVycG9sYXRpb24pKSByZXR1cm4ge1xuXHRcdGtpbmQ6IFwic3RhdGljXCIsXG5cdFx0Y3NzVGV4dDogam9pblN0YXRpY0lubGluZVN0eWxlKHN0cmluZ3MsIHZhbHVlcylcblx0fTtcblx0cmV0dXJuIHtcblx0XHRraW5kOiBcInRlbXBsYXRlXCIsXG5cdFx0YmluZGluZzogUyhzdHJpbmdzLCAuLi52YWx1ZXMpXG5cdH07XG59O1xudmFyIGJpbmRTdHlsZSA9IChlbGVtZW50LCBzdHlsZWQpID0+IHtcblx0Y29uc3QgYXBwbHkgPSBBcnJheS5pc0FycmF5KHN0eWxlZCkgPyBzdHlsZWRbMF0gOiBzdHlsZWQ7XG5cdGlmICh0eXBlb2YgYXBwbHkgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuICgpID0+IHt9O1xuXHRjb25zdCByZXN1bHQgPSBhcHBseShlbGVtZW50KTtcblx0cmV0dXJuICgpID0+IHtcblx0XHRpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRyZXN1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmVzdWx0Py51bmJpbmQ/LigpO1xuXHR9O1xufTtcbnZhciByZWdpc3RlcmVkUHJvcGVydGllcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG52YXIgZW5zdXJlUmVnaXN0ZXJlZE51bWJlclByb3BlcnR5ID0gKHdpbiwgbmFtZSwgaW5pdGlhbFZhbHVlKSA9PiB7XG5cdGlmIChyZWdpc3RlcmVkUHJvcGVydGllcy5oYXMobmFtZSkpIHJldHVybjtcblx0cmVnaXN0ZXJlZFByb3BlcnRpZXMuYWRkKG5hbWUpO1xuXHR0cnkge1xuXHRcdCh3aW4/LkNTUyA/PyBDU1MpPy5yZWdpc3RlclByb3BlcnR5Py4oe1xuXHRcdFx0bmFtZSxcblx0XHRcdHN5bnRheDogXCI8bnVtYmVyPlwiLFxuXHRcdFx0aW5pdGlhbFZhbHVlOiBTdHJpbmcoaW5pdGlhbFZhbHVlKSxcblx0XHRcdGluaGVyaXRzOiBmYWxzZVxuXHRcdH0pO1xuXHR9IGNhdGNoIHt9XG59O1xuXG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IEEsIEFOSU1BVEFCTEVfQlJBTkQsIEFuaW1hdGFibGVWYWx1ZSwgT1dORVIsIFMsIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCwgYWRvcHRlZEJsb2JNYXAsIGFkb3B0ZWRMYXllck1hcCwgYWRvcHRlZE1hcCwgYWRvcHRlZFNlbGVjdG9yTWFwLCBhZG9wdGVkU2hhZG93TGF5ZXJNYXAsIGFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcCwgYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUsIGFuaW1hdGFibGUsIGFuaW1hdGUsIGFwcGx5Tm9ybWFsaXplZElubGluZVN0eWxlLCBiaW5kU3R5bGUsIGJsb2JVUkxNYXAsIGNhY2hlTWFwLCBjb21waWxlSW5saW5lU3R5bGVBdHRyaWJ1dGUsIGNzcywgY3NzVGV4dEZvckFkb3B0ZWRTaGVldCwgY3NzVGV4dFJlcXVpcmVzSW5saW5lU3R5bGVFbGVtZW50LCBkZWZpbmVBbmltYXRpb24sIGRvQW5pbWF0aW9uLCBlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50LCBlbnN1cmVIb3N0U3R5bGVzLCBmZXRjaEFuZENhY2hlLCBmZXRjaEFzSW5saW5lLCBnZXRBZG9wdGVkU3R5bGVSdWxlLCBnZXRFbGVtZW50Wm9vbSwgZ2V0UGFkZGluZywgZ2V0UHJvcGVydHlWYWx1ZSwgZ2V0UHhWYWx1ZSwgZ2V0U3R5bGVMYXllciwgZ2V0U3R5bGVSdWxlLCBnZXRUcmFuc2Zvcm0sIGdldFRyYW5zZm9ybU9yaWdpbiwgaGFzaCwgaXNBZG9wdGVkU2hlZXRFbXB0eSwgaXNBbmltYXRhYmxlVmFsdWUsIGlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dCwgaXNOYXRpdmVDU1NTdHlsZVZhbHVlLCBpc1JlYWN0aXZlU3R5bGVWYWx1ZSwgaXNTdHlsZUJpbmRpbmcsIGlzU3R5bGVIb3N0LCBsYXllckNvdW50ZXIsIGxvYWRBc0Fkb3B0ZWQsIGxvYWRCbG9iU3R5bGUsIGxvYWRDYWNoZWRTdHlsZXMsIGxvYWRJbmxpbmVTdHlsZSwgbG9hZFN0eWxlU2hlZXQsIG5vdGlmeVN0eWxlVHJlZUhvc3RzLCBvYnNlcnZlU3R5bGVUcmVlLCBvblNjcm9sbCwgb25WaWV3LCBwYXJhbGxlbEFuaW1hdGlvbnMsIHBhcnNlTGVuZ3RoLCBwYXJzZU9yaWdpbiwgcGFyc2VUaW1lLCBwcmVsb2FkU3R5bGUsIHByb21pc2VPckRpcmVjdCwgcHJ1bmVFbXB0eVN0eWxlQXR0cmlidXRlLCByZWdpc3RlclN0eWxlVHJlZUhvb2ssIHJlaHlkcmF0ZUFkb3B0ZWRTdHlsZVNoZWV0cywgcmVoeWRyYXRlQ29uc3RydWN0YWJsZVNoZWV0cywgcmVtb3ZlQWRvcHRlZCwgc2NoZWR1bGVFbnN1cmVIb3N0U3R5bGVzLCBzZXF1ZW5jZUFuaW1hdGlvbnMsIHNldFByb3BlcnR5LCBzZXRTdHlsZUluUnVsZSwgc2V0U3R5bGVQcm9wZXJ0eSwgc2V0U3R5bGVQcm9wZXJ0eUZhbGxiYWNrLCBzZXRTdHlsZVByb3BlcnR5VHlwZWQsIHNldFN0eWxlUnVsZSwgc2V0U3R5bGVSdWxlcywgc2V0U3R5bGVVUkwsIHN0YWdnZXJBbmltYXRpb24sIHN0eWxlQ2FjaGUsIHN0eWxlRWxlbWVudENhY2hlLCBzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0IH07Il0sCiAgIm1hcHBpbmdzIjog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R0FDSXNnQixLQUFZLENBQUN4ZixHQUFTeWYsTUFBVztBQUNwQyxRQUFNdkgsSUFBUSxNQUFNLFFBQVF1SCxDQUFNLElBQUlBLEVBQU8sQ0FBQyxJQUFJQTtBQUNsRCxNQUFJLE9BQU92SCxLQUFVLFdBQVksUUFBTyxNQUFNO0FBQUEsRUFBQztBQUMvQyxRQUFNakwsSUFBU2lMLEVBQU1sWSxDQUFPO0FBQzVCLFNBQU8sTUFBTTtBQUNaLFFBQUksT0FBT2lOLEtBQVcsWUFBWTtBQUNqQyxNQUFBQSxFQUFPO0FBQ1A7QUFBQSxJQUNEO0FBQ0EsSUFBQUEsR0FBUSxTQUFTO0FBQUEsRUFDbEI7QUFDRCxHQUNJeVMsS0FBdUMsb0JBQUksSUFBSSxHQUMvQ2pDLEtBQWlDLENBQUM5ZixHQUFLQyxHQUFNb2hCLE1BQWlCO0FBQ2pFLE1BQUksQ0FBQVUsR0FBcUIsSUFBSTloQixDQUFJLEdBQ2pDO0FBQUEsSUFBQThoQixHQUFxQixJQUFJOWhCLENBQUk7QUFDN0IsUUFBSTtBQUNILE9BQUNELEdBQUssT0FBTyxNQUFNLG1CQUFtQjtBQUFBLFFBQ3JDLE1BQUFDO0FBQUEsUUFDQSxRQUFRO0FBQUEsUUFDUixjQUFjLE9BQU9vaEIsQ0FBWTtBQUFBLFFBQ2pDLFVBQVU7QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNGLFFBQVE7QUFBQSxJQUFDO0FBQUE7QUFDVjsiLAogICJuYW1lcyI6IFsiJGF2b2lkVHJpZ2dlciIsICIkZ2V0VmFsdWUiLCAiJHNldCIsICJjYW1lbFRvS2ViYWIiLCAiZGVyZWYiLCAiZ2V0T3JJbnNlcnRDb21wdXRlZCIsICJoYW5kbGVMaXN0ZW5lcnMiLCAiaGFzVmFsdWUiLCAiaXNOb3RFcXVhbCIsICJpc1ZhbCIsICJpc1ZhbHVlVW5pdCIsICJ0b1JlZiIsICJ0cnlTdHJpbmdBc051bWJlciIsICJEb3VibGVXZWFrTWFwIiwgImFkZFRvQ2FsbENoYWluIiwgImFmZmVjdGVkIiwgImhhbmRsZUF0dHJpYnV0ZSIsICJoYW5kbGVQcm9wZXJ0eSIsICJvYnNlcnZlQXR0cmlidXRlIiwgImlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSQxIiwgInZhbHVlIiwgIkNTU1N0eWxlVmFsdWVDdG9yIiwgInByb3RvdHlwZSIsICJpc1JlYWN0aXZlU3R5bGVWYWx1ZSQxIiwgImdldFdpbmRvd0NvbnN0cnVjdG9yJDEiLCAid2luIiwgIm5hbWUiLCAiZ2V0Q1NTVW5pdEZhY3RvcnlOYW1lJDEiLCAidW5pdCIsICJnZXRDU1NVbml0Q29uc3RydWN0b3JOYW1lJDEiLCAiY3JlYXRlVHlwZWRVbml0VmFsdWUkMSIsICJDU1NOYW1lc3BhY2UiLCAiZmFjdG9yeU5hbWUiLCAiZmFjdG9yeSIsICJDU1NVbml0VmFsdWVDdG9yIiwgInRva2VuaXplTnVtZXJpY0NTUyQxIiwgInNvdXJjZSIsICJ0b2tlbnMiLCAiY3Vyc29yIiwgInJlc3QiLCAid2hpdGVzcGFjZSIsICJudW1iZXIiLCAidW5pdE1hdGNoIiwgImlkZW50aWZpZXIiLCAic3ltYm9sIiwgIk51bWVyaWNUeXBlZE9NUGFyc2VyJDEiLCAicm9vdCIsICJ0b2tlbiIsICJ2YWx1ZXMiLCAiQ29uc3RydWN0b3IiLCAib3BlcmF0b3IiLCAicmlnaHQiLCAicGFyc2VUb1R5cGVkT00iLCAiY3NzVmFsdWUiLCAiaGFzVHlwZWRPTSIsICJpc1VuaXRWYWx1ZSIsICJ2YWwiLCAic2V0UHJvcGVydHlJZk5vdEVxdWFsIiwgInN0eWxlUmVmIiwgImtlYmFiIiwgImltcG9ydGFuY2UiLCAic2V0U3R5bGVQcm9wZXJ0eVR5cGVkIiwgImVsZW1lbnQiLCAic3R5bGVNYXBSZWYiLCAic2V0U3R5bGVQcm9wZXJ0eUZhbGxiYWNrIiwgIm9sZCIsICJuZXdWYWwiLCAicGFyc2VkIiwgIm1heWJlTnVtIiwgInNldFN0eWxlUHJvcGVydHkiLCAic2V0U3R5bGVJblJ1bGUiLCAic2VsZWN0b3IiLCAiZ2V0U3R5bGVSdWxlIiwgInNldFN0eWxlUnVsZSIsICJzaGVldCIsICJydWxlIiwgInByb3BOYW1lIiwgInByb3BWYWx1ZSIsICJoYXNoIiwgInN0cmluZyIsICJoYXNoQnVmZmVyIiwgImxvYWRTdHlsZVNoZWV0IiwgImlubGluZSIsICJiYXNlIiwgImxheWVyIiwgImludGVncml0eSIsICJsb2FkIiwgImZldGNoQW5kQ2FjaGUiLCAidXJsIiwgInNldFN0eWxlVVJMIiwgInByb21pc2VPckRpcmVjdCIsICJyZXMiLCAiZXJyb3IiLCAibG9hZEJsb2JTdHlsZSIsICJzdHlsZSIsICJsb2FkSW5saW5lU3R5bGUiLCAicm9vdEVsZW1lbnQiLCAiUExBQ0UiLCAic2V0UHJvcGVydHkiLCAidGFyZ2V0IiwgInByZWxvYWRTdHlsZSIsICJzdHlsZXMiLCAibG9hZEFzQWRvcHRlZCIsICJhZG9wdGVkTWFwU3ltYm9sIiwgImFkb3B0ZWRNYXAiLCAiYWRvcHRlZEJsb2JNYXBTeW1ib2wiLCAiYWRvcHRlZEJsb2JNYXAiLCAiYWRvcHRlZEFwcGxpZWRUZXh0U3ltYm9sIiwgImFkb3B0ZWRBcHBsaWVkVGV4dCIsICJhZG9wdGVkRmlsbGVkU3ltYm9sIiwgImFkb3B0ZWRGaWxsZWQiLCAid3JhcEFkb3B0ZWRMYXllciIsICJjc3NUZXh0IiwgImxheWVyTmFtZSIsICJyZWFkU2hlZXRSdWxlQ291bnQiLCAicmVtZW1iZXJBZG9wdGVkVGV4dCIsICJjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0IiwgInN0b3JlZCIsICJrZXkiLCAibWFwcGVkIiwgImlzQWRvcHRlZFNoZWV0RW1wdHkiLCAiY291bnQiLCAiZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudCIsICJ0ZXh0IiwgImFwcGx5QWRvcHRlZFN0eWxlVGV4dCIsICJsYXllckNvdW50ZXJTeW1ib2wiLCAibGF5ZXJDb3VudGVyIiwgIm1lc3NhZ2UiLCAidXJsQ2FuUGFyc2UiLCAic2hlZXRGb3JCbG9iIiwgImJsb2IiLCAibG9hZEFzQWRvcHRlZFVuc2FmZSIsICJzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0IiwgImNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudCIsICJjYWNoZWQiLCAiYXBwbGllZCIsICJsYXllcldyYXBwZWQiLCAicmVtb3ZlQWRvcHRlZCIsICJmZXRjaEFzSW5saW5lIiwgInN0eWxlVHJlZUhvb2tTeW1ib2wiLCAic3R5bGVUcmVlSG9va3MiLCAic3R5bGVUcmVlT2JzZXJ2ZWQiLCAic3R5bGVUcmVlUm9vdHMiLCAiU1RZTEVfVFJFRV9BVFRSUyIsICJpc1N0eWxlSG9zdCIsICJub2RlIiwgImNvbGxlY3RTdHlsZUhvc3RzIiwgImludG8iLCAiY2hpbGQiLCAiZWwiLCAibm90aWZ5U3R5bGVUcmVlSG9zdHMiLCAiaG9zdHMiLCAicmVhc29uIiwgImZuIiwgInJlZ2lzdGVyU3R5bGVUcmVlSG9vayIsICJvYnNlcnZlU3R5bGVUcmVlIiwgIm9ic2VydmVyIiwgInJlY29yZHMiLCAicmVjIiwgInNjb3BlIiwgInNoZWV0cyIsICJyZWh5ZHJhdGVDb25zdHJ1Y3RhYmxlU2hlZXRzIiwgImNhblBhcnNlIiwgImlkeCIsICJwYXJzZU9yaWdpbiIsICJvcmlnaW4iLCAicGFyc2VMZW5ndGgiLCAic2l6ZSIsICJnZXRUcmFuc2Zvcm0iLCAibWF0cml4IiwgImdldFRyYW5zZm9ybU9yaWdpbiIsICJjc3NPcmlnaW4iLCAiZ2V0UHJvcGVydHlWYWx1ZSIsICJzcmMiLCAiY3MiLCAiZ2V0RWxlbWVudFpvb20iLCAiem9vbSIsICJjdXJyZW50RWxlbWVudCIsICJjdXJyZW50Q1NTWm9vbSIsICJnZXRQeFZhbHVlIiwgImdldFBhZGRpbmciLCAiYXhpcyIsICJPV05FUiIsICJzdHlsZUVsZW1lbnQiLCAiY3NzIiwgImlzTGF5ZXJCbG9ja1J1bGUiLCAiZ2V0T3JDcmVhdGVMYXllclJ1bGUiLCAicnVsZXMiLCAiZXhpc3RpbmciLCAicnVsZUluZGV4IiwgImNyZWF0ZWQiLCAic2V0U3R5bGVSdWxlcyIsICJjbGFzc2VzIiwgImFyZ3MiLCAiZ2V0U3R5bGVMYXllciIsICJzdHlsZUlkQ291bnRlciIsICJpc1NoYWRvd1Jvb3QiLCAiaXNEb2N1bWVudCIsICJpc0VsZW1lbnQiLCAiZXNjYXBlQ1NTSWRlbnRpZmllciIsICJjaGFyIiwgImNyZWF0ZVN0eWxlSWQiLCAiam9pblNjb3BlZFNlbGVjdG9yIiwgImZpbmRTdHlsZVJ1bGUiLCAiZnVsbFNlbGVjdG9yIiwgImV4cGVjdGVkIiwgInJlcXVlc3RlZCIsICJhY3R1YWwiLCAiYmFzaXMiLCAiYmFzaXNFbGVtZW50IiwgInN0eWxlSWQiLCAic3R5bGVFbGVtZW50R2xvYmFsIiwgInJ1bGVJZCIsICJwcm9taXNlIiwgImNiIiwgImJsb2JVUkxNYXBTeW1ib2wiLCAiYmxvYlVSTE1hcCIsICJjYWNoZU1hcFN5bWJvbCIsICJjYWNoZU1hcCIsICJidXJsIiwgInByb21pc2VkIiwgImNhY2hlQ29udGVudE1hcCIsICJjYWNoZUJsb2JDb250ZW50TWFwIiwgImFkb3B0ZWRTZWxlY3Rvck1hcFN5bWJvbCIsICJhZG9wdGVkU2VsZWN0b3JNYXAiLCAiYWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwU3ltYm9sIiwgImFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcCIsICJhZG9wdGVkTGF5ZXJNYXBTeW1ib2wiLCAiYWRvcHRlZExheWVyTWFwIiwgImFkb3B0ZWRTaGFkb3dMYXllck1hcFN5bWJvbCIsICJhZG9wdGVkU2hhZG93TGF5ZXJNYXAiLCAiZ2V0QWRvcHRlZFN0eWxlUnVsZSIsICJ0YXJnZXRBZG9wdGVkU2hlZXRzIiwgInNlbGVjdG9yS2V5IiwgInNoYWRvd01hcCIsICJsYXllclJ1bGUiLCAic2hhZG93TGF5ZXJNYXAiLCAibGF5ZXJSdWxlSW5kZXgiLCAiciIsICJhZG9wdGVkU2hlZXRzU3ltYm9sIiwgImFkb3B0ZWRTdHlsZVNoZWV0c0NhY2hlIiwgInN0eWxlQ2FjaGVTeW1ib2wiLCAic3R5bGVDYWNoZSIsICJzdHlsZUVsZW1lbnRDYWNoZVN5bWJvbCIsICJzdHlsZUVsZW1lbnRDYWNoZSIsICJIT1NUX0NTU19GQUxMQkFDSyIsICJzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93IiwgImJUbyIsICJhZG9wdGVkU2hlZXRzIiwgImxpdmUiLCAicyIsICJhZGRBZG9wdGVkU2hlZXRUb0VsZW1lbnQiLCAiZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2siLCAicmVoeWRyYXRlQWRvcHRlZFN0eWxlU2hlZXRzIiwgInJlc3RvcmUiLCAiaG9zdCIsICJob3N0Q3NzVGV4dCIsICJ2aXNpdCIsICJjaGlsZHJlbiIsICJpIiwgIm91dCIsICJlbnN1cmVIb3N0U3R5bGVzIiwgImxvYWRDYWNoZWRTdHlsZXMiLCAic3R5bGVGbHVzaFBlbmRpbmciLCAic3R5bGVGbHVzaEJhdGNoIiwgInN0eWxlRmx1c2hTY2hlZHVsZWQiLCAic2NoZWR1bGVFbnN1cmVIb3N0U3R5bGVzIiwgImJhdGNoIiwgInJlc29sdmVkU3JjIiwgIndlYWsiLCAiZSIsICJyZXN1bHQiLCAiYWRvcHRlZCIsICJhZGRBZG9wdGVkU2hlZXQiLCAidmFycyIsICJwcm9wcyIsICJiYW5rU3ltYm9sIiwgImJhbmsiLCAiZWxNYXBTeW1ib2wiLCAiZWxNYXAiLCAiYWxpdmVzU3ltYm9sIiwgImFsaXZlcyIsICJ1bnN1YiIsICIkYmVoYXZpb3IiLCAiaXNMaW5rZXJMaWtlIiwgIiRvYnNlcnZlSW5wdXQiLCAicmVmIiwgInByb3AiLCAid2VsIiwgInJmIiwgImN0cmxDYiIsICJfZXYiLCAiaGRsIiwgIiRvYnNlcnZlQXR0cmlidXRlIiwgInd2IiwgImF0dHJOYW1lIiwgIm11dGF0aW9uIiwgInZhbFJlZiIsICJyZVZhbCIsICJyZW1vdmVGcm9tQmFuayIsICJoYW5kbGVyIiwgImFkZFRvQmFuayIsICJmb3JMaW5rIiwgImJpbmRIYW5kbGVyIiwgInNldCIsICJ3aXRoT2JzZXJ2ZXIiLCAibGlua2VyIiwgImNvbnRyb2xsZXIiLCAidW4iLCAiY3VyciIsICJfcCIsICJ2YWx1ZVJlZiIsICJzZXRSZWYiLCAiZWxlbWVudFJlZiIsICJ2IiwgIl92YWwiLCAib2JzIiwgImJpbmRXaXRoIiwgImRlbGV0ZVN0eWxlUHJvcGVydHkiLCAiaGFuZGxlU3R5bGVDaGFuZ2UiLCAicGFyc2VUaW1lIiwgImZhbGxiYWNrIiwgInQiLCAibm9ybWFsaXplSXRlcmF0aW9uQ291bnQiLCAiY2FtZWxUb0tlYmFiJDEiLCAic3RyIiwgImxldHRlciIsICJwYXJzZVByb3BlcnR5TGlzdCIsICJvcHRpb25zIiwgImZyb21TdHJpbmciLCAiJHBhaXIiLCAiYSIsICJwYXJzZUFuaW1hdGlvblRlbXBsYXRlIiwgInN0cmluZ3MiLCAicHJvcGVydGllcyIsICJmdWxsVGV4dCIsICJkZWNsYXJhdGlvbnMiLCAiZGVjbGFyYXRpb24iLCAiY29sb25JbmRleCIsICJwcm9wZXJ0eSIsICJ2YWx1ZVRleHQiLCAic2xvdE1hdGNoIiwgInNsb3RWYWx1ZSIsICJwcm9jZXNzQW5pbWF0aW9uVmFsdWVzIiwgInJlc29sdmVkIiwgInJlYWN0aXZlSW5kaWNlcyIsICJoYXNSZWFjdGl2ZSIsICJpc1JlYWN0aXZlU3R5bGVWYWx1ZSIsICJpc05hdGl2ZUNTU1N0eWxlVmFsdWUiLCAiYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMiLCAiZ2xvYmFsT2Zmc2V0cyIsICJwcm9wZXJ0eUxpc3QiLCAibWF4TGVuZ3RoIiwgInAiLCAib2Zmc2V0cyIsICJfIiwgImZyYW1lcyIsICJmcmFtZSIsICJrZWJhYlByb3AiLCAiYnVpbGRBbmltYXRpb25UaW1pbmciLCAiZHVyYXRpb24iLCAiZGVsYXkiLCAiaXRlcmF0aW9ucyIsICJjcmVhdGVSZWFjdGl2ZUFuaW1hdGlvbiIsICJzdWJzY3JpcHRpb25zIiwgInRpbWluZyIsICJhbmltYXRpb24iLCAiaW5kZXgiLCAicmVhY3RpdmVWYWx1ZSIsICJzdWJzY3JpcHRpb24iLCAibmV3RnJhbWVzIiwgImN1cnJlbnRUaW1lIiwgInN1YiIsICJBIiwgImRvQW5pbWF0aW9uIiwgImNvbmZpZyIsICJrZXlmcmFtZXMiLCAiYW5pbWF0ZSIsICJkZWZpbmVBbmltYXRpb24iLCAic2VxdWVuY2VBbmltYXRpb25zIiwgInNlcXVlbmNlIiwgInBhcmFsbGVsQW5pbWF0aW9ucyIsICJhbmltYXRpb25zIiwgInJlc3VsdHMiLCAiY2xlYW51cCIsICJzdGFnZ2VyQW5pbWF0aW9uIiwgImVsZW1lbnRzIiwgInN0YWdnZXJEZWxheSIsICJBTklNQVRBQkxFX0JSQU5EIiwgIm5vcm1hbGl6ZUl0ZXJhdGlvbnMiLCAibiIsICJhbmltYXRhYmxlSWQiLCAib25TY3JvbGwiLCAibyIsICJvblZpZXciLCAiaXNTY3JvbGxEcml2ZW4iLCAiaXNWaWV3RHJpdmVuIiwgIkFuaW1hdGFibGVWYWx1ZSIsICIjc3RlcHMiLCAiI29wdGlvbnMiLCAiI2N1cnJlbnQiLCAiI3N1YnNjcmliZXJzIiwgIiNhdHRhY2htZW50cyIsICIjcmVzb2x2ZUVsZW1lbnRSZWYiLCAic2VsZiIsICIjZmluZE5lYXJlc3RTY3JvbGxlciIsICIjY3JlYXRlVGltZWxpbmUiLCAidHJpZ2dlciIsICJTY3JvbGxUaW1lbGluZUN0b3IiLCAiVmlld1RpbWVsaW5lQ3RvciIsICIjc3RhcnRUaW1lbGluZURyaXZlbiIsICJhdHRhY2htZW50IiwgInBsYW4iLCAidGltZWxpbmUiLCAiI3N0YXJ0VGltZWxpbmVGYWxsYmFjayIsICIjYnVpbGRUaW1pbmciLCAiI2J1aWxkS2V5ZnJhbWVzIiwgInN0ZXBzIiwgIiNyZXNvbHZlU3RlcCIsICJzY3JvbGxlciIsICJyYWZJZCIsICJjb21wdXRlUHJvZ3Jlc3MiLCAidnAiLCAicmVjdCIsICJ0b3RhbCIsICJtYXgiLCAibGlzdGVuVGFyZ2V0IiwgIm5leHQiLCAiaGludCIsICJzdGVwIiwgImVhc2luZyIsICJyYXciLCAiaW5uZXIiLCAic3RhcnQiLCAiI3RyYWNrUHJvZ3Jlc3MiLCAiI3dpcmVUcmlnZ2VyIiwgImxhc3QiLCAicmV2ZXJzZU9uRXhpdCIsICJwbGF5Rm9yd2FyZCIsICJwbGF5QmFja3dhcmQiLCAiZW50ZXIiLCAibGVhdmUiLCAib25FbnRlciIsICJvbkxlYXZlIiwgImZvcndhcmQiLCAib25DbGljayIsICJlbnRyaWVzIiwgImVudHJ5IiwgImFwcGx5IiwgInVuc3Vic2NyaWJlIiwgIiNlYWNoIiwgImF0IiwgInJhdGUiLCAibGlzdCIsICJhbmltYXRhYmxlIiwgImlzQW5pbWF0YWJsZVZhbHVlIiwgImlzU3R5bGVCaW5kaW5nIiwgInN0eWxlVGVtcGxhdGVJZCIsICJDU1NfRElNRU5TSU9OX1VOSVRTIiwgImlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dCIsICJjaHVuayIsICJwcnVuZUVtcHR5U3R5bGVBdHRyaWJ1dGUiLCAiYXBwbHlOb3JtYWxpemVkSW5saW5lU3R5bGUiLCAiaXNTdGF0aWNTdHlsZUludGVycG9sYXRpb24iLCAiZXNjYXBlUmVnRXhwIiwgImNvbnRhaW5zTWFya2VyIiwgIm1hcmtlciIsICJyZWFkQXR0YWNoZWRDU1NVbml0IiwgIm1hdGNoIiwgImF1dGhvcmVkIiwgIm5vcm1hbGl6ZWQiLCAiZ2V0Q1NTVW5pdEZhY3RvcnlOYW1lIiwgImdldENTU1VuaXRDb25zdHJ1Y3Rvck5hbWUiLCAiZ2V0V2luZG93Q29uc3RydWN0b3IiLCAiY3JlYXRlVHlwZWRVbml0VmFsdWUiLCAicmVhZFJlYWN0aXZlTnVtYmVyIiwgInNsb3QiLCAiY3VycmVudCIsICJnZXRSZWFjdGl2ZUluaXRpYWxOdW1iZXIiLCAicmVwbGFjZVR5cGVkTWFya2VycyIsICJzbG90cyIsICJpc0RpcmVjdFNsb3RWYWx1ZSIsICJlc2NhcGVkTWFya2VyIiwgInNlcmlhbGl6ZUFuaW1hdGFibGVDc3NWYWx1ZSIsICJpc0RpcmVjdFNsb3RVbml0UHJvZHVjdCIsICJlc2NhcGVkVW5pdCIsICJzZXRQYXJzZWRUeXBlZFZhbHVlIiwgInN0eWxlTWFwIiwgInRva2VuaXplTnVtZXJpY0NTUyIsICJ2YXJpYWJsZSIsICJOdW1lcmljVHlwZWRPTVBhcnNlciIsICJyZWFjdGl2ZUJ5TWFya2VyIiwgInR5cGVkQnlNYXJrZXIiLCAicmVhY3RpdmUiLCAiY2hlY2twb2ludCIsICJyaHMiLCAibGVhZiIsICJ0eXBlZCIsICJidWlsZE51bWVyaWNUeXBlZE9NVHJlZSIsICJyZWFjdGl2ZVNsb3RzIiwgInR5cGVkU2xvdHMiLCAiaXNUcmFuc2Zvcm1TdHlsZVByb3BlcnR5IiwgImJ1aWxkVHJhbnNmb3JtVHlwZWRPTVRyZWUiLCAibGVhdmVzIiwgImNvbXBvbmVudHMiLCAiemVyb1B4IiwgIm9uZU51bWJlciIsICJjb25zdW1lIiwgImNvbnN1bWVTeW1ib2wiLCAicGFyc2VBcmd1bWVudCIsICJkZXB0aCIsICJzbGljZSIsICJ0cmVlIiwgInBhcnNlQXJndW1lbnRMaXN0IiwgImNyZWF0ZUNvbXBvbmVudCIsICJjdG9yIiwgImNsYXNzTmFtZSIsICJDdG9yIiwgIlRyYW5zbGF0ZSIsICJTY2FsZSIsICJSb3RhdGUiLCAiU2tldyIsICJDU1NUcmFuc2Zvcm1WYWx1ZUN0b3IiLCAiYnVpbGRUeXBlZE9NU3R5bGVWYWx1ZSIsICJhZGRNdXRhYmxlTGVhdmVzIiwgImF0dGFjaExlYWZUYXJnZXRzIiwgImFwcGx5U3R5bGVUZW1wbGF0ZSIsICJ2YXJpYWJsZXMiLCAiYW5pbWF0YWJsZVNsb3RzIiwgInByb2JlIiwgIm11dGFibGVMZWF2ZXMiLCAicmVxdWlyZWRDU1NWYXJpYWJsZXMiLCAicHJvcGVydHlNb2RlT3duZWQiLCAicGFyc2VkVmFsdWUiLCAiaW5pdGlhbE51bWJlciIsICJlbnN1cmVSZWdpc3RlcmVkTnVtYmVyUHJvcGVydHkiLCAicHJpb3JpdHkiLCAidXNlZFR5cGVkU2xvdHMiLCAidXNlZFJlYWN0aXZlU2xvdHMiLCAiY2FuVXNlVHlwZWRPTSIsICJhcHBsaWVkVGhyb3VnaFR5cGVkT00iLCAiZGlyZWN0U2xvdCIsICJsaW5rZWRWYWx1ZSIsICJDU1NNYXRoUHJvZHVjdEN0b3IiLCAicHJvZHVjdCIsICJyZWNvbnN0cnVjdGVkIiwgIm5lZWRzQ1NTVmFyaWFibGUiLCAibmV4dFZhbHVlIiwgImRpcnR5Um9vdHMiLCAicHJvcGVydHlOYW1lIiwgImNvbXBsaWxlU3RhdGljQ1NTVGV4dCIsICJmb3JSZXR1cm4iLCAiUyIsICJ0ZW1wbGF0ZUlkIiwgInBhcnRzIiwgImNvbnN1bWVkIiwgIm5leHRUZXh0IiwgImF0dGFjaGVkVW5pdCIsICJpbml0aWFsVmFsdWUiLCAidHlwZSIsICJzcGxpdElubGluZVN0eWxlUGxhY2Vob2xkZXJzIiwgImF0dHJpYnV0ZXMiLCAicGF0dGVybiIsICJhdHRyaWJ1dGVJbmRleCIsICJqb2luU3RhdGljSW5saW5lU3R5bGUiLCAiY29tcGlsZUlubGluZVN0eWxlQXR0cmlidXRlIiwgImJpbmRTdHlsZSIsICJzdHlsZWQiLCAicmVnaXN0ZXJlZFByb3BlcnRpZXMiXQp9Cg==
2224
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3R5bGUtbGliLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyAkYXZvaWRUcmlnZ2VyLCAkZ2V0VmFsdWUsICRzZXQsIGNhbWVsVG9LZWJhYiwgZGVyZWYsIGdldE9ySW5zZXJ0Q29tcHV0ZWQsIGhhbmRsZUxpc3RlbmVycywgaGFzVmFsdWUsIGlzTm90RXF1YWwsIGlzVmFsLCBpc1ZhbHVlVW5pdCwgdG9SZWYsIHRyeVN0cmluZ0FzTnVtYmVyIH0gZnJvbSBcIkBmZXN0LWxpYi9jb3JlXCI7XG5pbXBvcnQgeyBEb3VibGVXZWFrTWFwLCBhZGRUb0NhbGxDaGFpbiwgYWZmZWN0ZWQgfSBmcm9tIFwiQGZlc3QtbGliL29iamVjdFwiO1xuaW1wb3J0IHsgaGFuZGxlQXR0cmlidXRlLCBoYW5kbGVQcm9wZXJ0eSwgb2JzZXJ2ZUF0dHJpYnV0ZSB9IGZyb20gXCJAZmVzdC1saWIvZG9tXCI7XG5cbi8vI3JlZ2lvbiBzcmMvbWFwcy50c1xudmFyIHNoYXJlZCA9IChrZXksIGNyZWF0ZSkgPT4gZ2xvYmFsVGhpc1tTeW1ib2wuZm9yKGtleSldID8/PSBjcmVhdGUoKTtcbnZhciBibG9iVVJMTWFwID0gc2hhcmVkKFwiZG9tLnRzQGJsb2JVUkxNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGNhY2hlTWFwID0gc2hhcmVkKFwiZG9tLnRzQGNhY2hlTWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIGNhY2hlQ29udGVudE1hcCA9IHNoYXJlZChcImRvbS50c0BjYWNoZUNvbnRlbnRNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgY2FjaGVCbG9iQ29udGVudE1hcCA9IHNoYXJlZChcImRvbS50c0BjYWNoZUJsb2JDb250ZW50TWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBhZG9wdGVkU2VsZWN0b3JNYXAgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZFNlbGVjdG9yTWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIGFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkU2hhZG93U2VsZWN0b3JNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGFkb3B0ZWRMYXllck1hcCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkTGF5ZXJNYXBcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7XG52YXIgYWRvcHRlZFNoYWRvd0xheWVyTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRTaGFkb3dMYXllck1hcFwiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKSk7XG52YXIgYWRvcHRlZE1hcCA9IHNoYXJlZChcImRvbS50c0BhZG9wdGVkTWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIGFkb3B0ZWRCbG9iTWFwID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRCbG9iTWFwXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBhZG9wdGVkQXBwbGllZFRleHQgPSBzaGFyZWQoXCJkb20udHNAYWRvcHRlZEFwcGxpZWRUZXh0XCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpKTtcbnZhciBhZG9wdGVkRmlsbGVkID0gc2hhcmVkKFwiZG9tLnRzQGFkb3B0ZWRGaWxsZWRcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCkpO1xudmFyIGxheWVyQ291bnRlciA9IHNoYXJlZChcImRvbS50c0BsYXllckNvdW50ZXJcIiwgKCkgPT4gMCk7XG52YXIgc3R5bGVUcmVlSG9va3MgPSBzaGFyZWQoXCJkb20udHNAc3R5bGVUcmVlSG9va3NcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG52YXIgc3R5bGVUcmVlT2JzZXJ2ZWQgPSBzaGFyZWQoXCJkb20udHNAc3R5bGVUcmVlT2JzZXJ2ZWRcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrU2V0KCkpO1xudmFyIHN0eWxlVHJlZVJvb3RzID0gc2hhcmVkKFwiZG9tLnRzQHN0eWxlVHJlZVJvb3RzXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpO1xudmFyIGJha2VkU3R5bGVzID0gc2hhcmVkKFwic3R5bGUtbGliQGJha2VkU3R5bGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIGJha2VkTGl2ZSA9IHNoYXJlZChcInN0eWxlLWxpYkBiYWtlZExpdmVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7XG52YXIgYmFrZWRDYWNoZSA9IHNoYXJlZChcInN0eWxlLWxpYkBiYWtlZENhY2hlXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIHJlYmFrZUJhdGNoID0gc2hhcmVkKFwic3R5bGUtbGliQHJlYmFrZUJhdGNoXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpO1xudmFyIGFkb3B0ZWRTdHlsZVNoZWV0c0NhY2hlID0gc2hhcmVkKFwibHVyLmVAYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIHN0eWxlQ2FjaGUgPSBzaGFyZWQoXCJsdXIuZUBzdHlsZUNhY2hlXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpO1xudmFyIHN0eWxlRWxlbWVudENhY2hlID0gc2hhcmVkKFwibHVyLmVAc3R5bGVFbGVtZW50Q2FjaGVcIiwgKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpO1xudmFyIHN0eWxlRmx1c2hQZW5kaW5nID0gc2hhcmVkKFwic3R5bGUtbGliQHN0eWxlRmx1c2hQZW5kaW5nXCIsICgpID0+IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha1NldCgpKTtcbnZhciByZWdpc3RlcmVkUHJvcGVydGllcyA9IHNoYXJlZChcInN0eWxlLWxpYkByZWdpc3RlcmVkUHJvcGVydGllc1wiLCAoKSA9PiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvbnN0YW50cy50c1xudmFyIENTU19ESU1FTlNJT05fVU5JVFNfTElTVCA9IFtcblx0XCIlXCIsXG5cdFwicHhcIixcblx0XCJjbVwiLFxuXHRcIm1tXCIsXG5cdFwicVwiLFxuXHRcImluXCIsXG5cdFwicGNcIixcblx0XCJwdFwiLFxuXHRcImVtXCIsXG5cdFwiZXhcIixcblx0XCJjaFwiLFxuXHRcImNhcFwiLFxuXHRcImljXCIsXG5cdFwibGhcIixcblx0XCJyZW1cIixcblx0XCJyZXhcIixcblx0XCJyY2hcIixcblx0XCJyY2FwXCIsXG5cdFwicmljXCIsXG5cdFwicmxoXCIsXG5cdFwidndcIixcblx0XCJ2aFwiLFxuXHRcInZpXCIsXG5cdFwidmJcIixcblx0XCJ2bWluXCIsXG5cdFwidm1heFwiLFxuXHRcInN2d1wiLFxuXHRcInN2aFwiLFxuXHRcInN2aVwiLFxuXHRcInN2YlwiLFxuXHRcInN2bWluXCIsXG5cdFwic3ZtYXhcIixcblx0XCJsdndcIixcblx0XCJsdmhcIixcblx0XCJsdmlcIixcblx0XCJsdmJcIixcblx0XCJsdm1pblwiLFxuXHRcImx2bWF4XCIsXG5cdFwiZHZ3XCIsXG5cdFwiZHZoXCIsXG5cdFwiZHZpXCIsXG5cdFwiZHZiXCIsXG5cdFwiZHZtaW5cIixcblx0XCJkdm1heFwiLFxuXHRcImNxd1wiLFxuXHRcImNxaFwiLFxuXHRcImNxaVwiLFxuXHRcImNxYlwiLFxuXHRcImNxbWluXCIsXG5cdFwiY3FtYXhcIixcblx0XCJkZWdcIixcblx0XCJncmFkXCIsXG5cdFwicmFkXCIsXG5cdFwidHVyblwiLFxuXHRcInNcIixcblx0XCJtc1wiLFxuXHRcImh6XCIsXG5cdFwia2h6XCIsXG5cdFwiZHBpXCIsXG5cdFwiZHBjbVwiLFxuXHRcImRwcHhcIixcblx0XCJ4XCIsXG5cdFwiZnJcIlxuXTtcbnZhciBDU1NfRElNRU5TSU9OX1VOSVRTID0gbmV3IFNldChDU1NfRElNRU5TSU9OX1VOSVRTX0xJU1QpO1xudmFyIENTU19VTklUX0ZBQ1RPUllfQUxJQVNFUyA9IHtcblx0XCIlXCI6IFwicGVyY2VudFwiLFxuXHRxOiBcIlFcIixcblx0aHo6IFwiSHpcIixcblx0a2h6OiBcImtIelwiLFxuXHRmcjogXCJmbGV4XCJcbn07XG52YXIgQ1NTX1VOSVRfVE9LRU5fUkUgPSAvXiglfFthLXpBLVpdKykvO1xudmFyIENTU19DT0xPUl9QUk9QRVJUSUVTID0gW1xuXHRcImNvbG9yXCIsXG5cdFwiYmFja2dyb3VuZC1jb2xvclwiLFxuXHRcImJvcmRlci1jb2xvclwiLFxuXHRcImJvcmRlci10b3AtY29sb3JcIixcblx0XCJib3JkZXItcmlnaHQtY29sb3JcIixcblx0XCJib3JkZXItYm90dG9tLWNvbG9yXCIsXG5cdFwiYm9yZGVyLWxlZnQtY29sb3JcIixcblx0XCJvdXRsaW5lLWNvbG9yXCIsXG5cdFwiYWNjZW50LWNvbG9yXCIsXG5cdFwiY2FyZXQtY29sb3JcIixcblx0XCJ0ZXh0LWRlY29yYXRpb24tY29sb3JcIixcblx0XCJjb2x1bW4tcnVsZS1jb2xvclwiLFxuXHRcImZpbGxcIixcblx0XCJzdHJva2VcIixcblx0XCJmbG9vZC1jb2xvclwiLFxuXHRcImxpZ2h0aW5nLWNvbG9yXCIsXG5cdFwic3RvcC1jb2xvclwiXG5dO1xudmFyIENTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMgPSBbXG5cdFwiZm9udC1mYW1pbHlcIixcblx0XCJmb250LXNpemVcIixcblx0XCJmb250LXdlaWdodFwiLFxuXHRcImZvbnQtc3R5bGVcIixcblx0XCJmb250LXN0cmV0Y2hcIixcblx0XCJsaW5lLWhlaWdodFwiLFxuXHRcImxldHRlci1zcGFjaW5nXCIsXG5cdFwid29yZC1zcGFjaW5nXCJcbl07XG52YXIgQ1NTX01PVElPTl9QUk9QRVJUSUVTID0gW1xuXHRcInRyYW5zaXRpb24tZHVyYXRpb25cIixcblx0XCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvblwiLFxuXHRcImFuaW1hdGlvbi1kdXJhdGlvblwiLFxuXHRcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIlxuXTtcbnZhciBTVFlMRV9USEVNRV9BVFRSUyA9IFtcblx0XCJkYXRhLXRoZW1lXCIsXG5cdFwiZGF0YS1leHBsb3Jlci1jb2xvci1zY2hlbWVcIixcblx0XCJkYXRhLWNvbG9yLXNjaGVtZVwiLFxuXHRcInRoZW1lXCIsXG5cdFwiY29sb3Itc2NoZW1lXCJcbl07XG52YXIgU1RZTEVfVEhFTUVfT0JTRVJWRV9BVFRSUyA9IFtcblx0Li4uU1RZTEVfVEhFTUVfQVRUUlMsXG5cdFwic3R5bGVcIixcblx0XCJjbGFzc1wiXG5dO1xudmFyIEJBS0VfQ0FURUdPUklFUyA9IFtcblx0XCJ0b2tlbnNcIixcblx0XCJjb2xvcnNcIixcblx0XCJ0eXBvZ3JhcGh5XCIsXG5cdFwibW90aW9uXCJcbl07XG52YXIgVkVFTEFfQ0FTQ0FERV9MQVlFUlMgPSBbXG5cdFwidG9rZW5zXCIsXG5cdFwiYmFzZVwiLFxuXHRcImxheW91dFwiLFxuXHRcImNvbXBvbmVudHNcIixcblx0XCJ1dGlsaXRpZXNcIixcblx0XCJ0aGVtZVwiLFxuXHRcIm92ZXJyaWRlc1wiLFxuXHRcInByaW50XCJcbl07XG52YXIgVVhfSE9TVF9MQVlFUlMgPSBbXCJ1eC1wcmVsb2FkXCIsIFwidXgtbGF5ZXJcIl07XG52YXIgVklFV0VSX1JVTlRJTUVfTEFZRVJTID0gW1xuXHRcInJzLW1kLWJhc2VcIixcblx0XCJycy1tZC1zeXN0ZW1cIixcblx0XCJycy1tZC1tb2R1bGVzXCIsXG5cdFwicnMtbWQtdXNlclwiLFxuXHRcInJzLW1kLXByaW50XCIsXG5cdFwicnMtbWQtdXNlci1wcmludFwiXG5dO1xudmFyIFZJRVdFUl9DU1NfTEFZRVJfT1JERVIgPSBWSUVXRVJfUlVOVElNRV9MQVlFUlM7XG52YXIgTEFZRVJfTkFNRSA9IC9eW2EtekEtWjAtOV8uLV0rJC87XG52YXIgTEFZRVJfT1BFTiA9IC9eQGxheWVyXFxzKyhbYS16QS1aMC05Xy4tXSspXFxzKlxcey87XG52YXIgT1dORVIgPSBcIkRPTVwiO1xudmFyIEhPU1RfQ1NTX0ZBTExCQUNLID0gXCJkYXRhLWdsaXQtaG9zdC1jc3NcIjtcbnZhciBCQUtFX0xBWUVSID0gXCJ1eC1iYWtlZFwiO1xudmFyIERFRkFVTFRfQ0FURUdPUklFUyA9IFtcInRva2Vuc1wiLCBcImNvbG9yc1wiXTtcbnZhciBERUZBVUxUX0NBQ0hFX01TID0gM2U0O1xudmFyIEFOSU1BVEFCTEVfQlJBTkQgPSBTeW1ib2wuZm9yKFwiZmVzdC5hbmltYXRhYmxlXCIpO1xudmFyIGhhc1R5cGVkT00gPSB0eXBlb2YgQ1NTU3R5bGVWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgQ1NTVW5pdFZhbHVlICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvdXRpbHMudHNcbnZhciBjc3NVbml0RmFjdG9yeU5hbWUgPSAodW5pdCkgPT4gQ1NTX1VOSVRfRkFDVE9SWV9BTElBU0VTW3VuaXQudG9Mb3dlckNhc2UoKV0gPz8gdW5pdC50b0xvd2VyQ2FzZSgpO1xudmFyIGNzc1VuaXRDb25zdHJ1Y3Rvck5hbWUgPSAodW5pdCkgPT4gdW5pdC50b0xvd2VyQ2FzZSgpID09PSBcIiVcIiA/IFwicGVyY2VudFwiIDogdW5pdC50b0xvd2VyQ2FzZSgpO1xudmFyIGlzQ3NzTGF5ZXJOYW1lID0gKG5hbWUpID0+IExBWUVSX05BTUUudGVzdChuYW1lKTtcbnZhciBjc3NFbXB0eUxheWVyUnVsZSA9IChsYXllck5hbWUpID0+IGBAbGF5ZXIgJHtsYXllck5hbWV9IHt9YDtcbnZhciBzdHJpcENzc1ByZWFtYmxlID0gKGNzcykgPT4ge1xuXHRsZXQgb3V0ID0gU3RyaW5nKGNzcyB8fCBcIlwiKS50cmltKCk7XG5cdG91dCA9IG91dC5yZXBsYWNlKC9eKEBjaGFyc2V0XFxzK1teO10rO1xccyopKy9pLCBcIlwiKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHtcblx0XHRjb25zdCBuZXh0ID0gb3V0LnJlcGxhY2UoL15cXC9cXCpbXFxzXFxTXSo/XFwqXFwvXFxzKi8sIFwiXCIpO1xuXHRcdGlmIChuZXh0ID09PSBvdXQpIGJyZWFrO1xuXHRcdG91dCA9IG5leHQudHJpbSgpO1xuXHR9XG5cdHJldHVybiBvdXQ7XG59O1xudmFyIGlzTGF5ZXJCbG9ja1J1bGUgPSAocnVsZSkgPT4gdHlwZW9mIENTU0xheWVyQmxvY2tSdWxlICE9PSBcInVuZGVmaW5lZFwiICYmIHJ1bGUgaW5zdGFuY2VvZiBDU1NMYXllckJsb2NrUnVsZTtcbnZhciBzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0ID0gKCkgPT4gdHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGdsb2JhbFRoaXMuQ1NTU3R5bGVTaGVldCA9PT0gXCJmdW5jdGlvblwiO1xudmFyIGNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudCA9IChjc3MpID0+IHR5cGVvZiBjc3MgPT09IFwic3RyaW5nXCIgJiYgL0BpbXBvcnRcXGIvaS50ZXN0KGNzcyk7XG52YXIgcHJvbWlzZU9yRGlyZWN0ID0gKHByb21pc2UsIGNiKSA9PiB7XG5cdGlmICh0eXBlb2YgcHJvbWlzZT8udGhlbiA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBwcm9taXNlPy50aGVuPy4oY2IpO1xuXHRyZXR1cm4gY2IocHJvbWlzZSk7XG59O1xudmFyIGlzU2hhZG93Um9vdCA9ICh2YWx1ZSkgPT4gdHlwZW9mIFNoYWRvd1Jvb3QgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xudmFyIGlzRG9jdW1lbnQgPSAodmFsdWUpID0+IHR5cGVvZiBEb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIERvY3VtZW50O1xudmFyIGlzQ3NzRWxlbWVudCA9ICh2YWx1ZSkgPT4gdHlwZW9mIEVsZW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50O1xudmFyIGVzY2FwZUNTU0lkZW50aWZpZXIgPSAodmFsdWUpID0+IHtcblx0aWYgKHR5cGVvZiBDU1MgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIENTUy5lc2NhcGUgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIENTUy5lc2NhcGUodmFsdWUpO1xuXHRyZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZSkubWFwKChjaGFyKSA9PiBgXFxcXCR7Y2hhci5jb2RlUG9pbnRBdCgwKS50b1N0cmluZygxNil9IGApLmpvaW4oXCJcIik7XG59O1xudmFyIHN0eWxlSWRDb3VudGVyID0gMDtcbnZhciBjcmVhdGVTdHlsZUlkID0gKCkgPT4ge1xuXHRpZiAodHlwZW9mIGNyeXB0byAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgY3J5cHRvLnJhbmRvbVVVSUQgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XG5cdHJldHVybiBgdXgtJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0tJHsoKytzdHlsZUlkQ291bnRlcikudG9TdHJpbmcoMzYpfWA7XG59O1xudmFyIHVybENhblBhcnNlID0gKHZhbHVlKSA9PiB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHR5cGVvZiBVUkwgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIFVSTC5jYW5QYXJzZSA9PT0gXCJmdW5jdGlvblwiICYmIFVSTC5jYW5QYXJzZSh2YWx1ZSk7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBoYXNoID0gYXN5bmMgKHN0cmluZykgPT4ge1xuXHRjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvPy5zdWJ0bGU/LmRpZ2VzdChcIlNIQS0yNTZcIiwgdHlwZW9mIHN0cmluZyA9PSBcInN0cmluZ1wiID8gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cmluZykgOiBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IHN0cmluZyA6IGF3YWl0IHN0cmluZz8uYXJyYXlCdWZmZXI/LigpKTtcblx0cmV0dXJuIFwic2hhMjU2LVwiICsgYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKSk7XG59O1xudmFyIHBhcnNlTGVuZ3RoID0gKHZhbHVlLCBzaXplKSA9PiB7XG5cdGlmICh2YWx1ZS5lbmRzV2l0aChcIiVcIikpIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKSAvIDEwMCAqIHNpemUoKTtcblx0cmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xufTtcbnZhciBwYXJzZU9yaWdpbiA9IChvcmlnaW4sIGVsZW1lbnQpID0+IHtcblx0Y29uc3QgdmFsdWVzID0gb3JpZ2luLnNwbGl0KFwiIFwiKTtcblx0cmV0dXJuIG5ldyBET01Qb2ludChwYXJzZUxlbmd0aCh2YWx1ZXNbMF0sICgpID0+IGVsZW1lbnQuY2xpZW50V2lkdGgpLCBwYXJzZUxlbmd0aCh2YWx1ZXNbMV0sICgpID0+IGVsZW1lbnQuY2xpZW50SGVpZ2h0KSk7XG59O1xudmFyIHBhcnNlVGltZSA9ICh2LCBmYWxsYmFjayA9IDApID0+IHtcblx0aWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSByZXR1cm4gdjtcblx0aWYgKCF2KSByZXR1cm4gZmFsbGJhY2s7XG5cdGNvbnN0IHQgPSBTdHJpbmcodikudHJpbSgpO1xuXHRpZiAodC5lbmRzV2l0aChcIm1zXCIpKSByZXR1cm4gcGFyc2VGbG9hdCh0KTtcblx0aWYgKHQuZW5kc1dpdGgoXCJzXCIpKSByZXR1cm4gcGFyc2VGbG9hdCh0KSAqIDFlMztcblx0cmV0dXJuIHBhcnNlRmxvYXQodCkgfHwgZmFsbGJhY2s7XG59O1xudmFyIG5vcm1hbGl6ZUl0ZXJhdGlvbkNvdW50ID0gKGNvdW50KSA9PiB7XG5cdGlmIChjb3VudCA9PT0gdm9pZCAwKSByZXR1cm4gMTtcblx0aWYgKGNvdW50ID09PSAtMSB8fCBjb3VudCA9PT0gSW5maW5pdHkpIHJldHVybiBJbmZpbml0eTtcblx0cmV0dXJuIE1hdGgubWF4KDEsIE1hdGguZmxvb3IoY291bnQpKTtcbn07XG52YXIgbm9ybWFsaXplSXRlcmF0aW9ucyA9IChuKSA9PiBuID09PSAtMSB8fCBuID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogTWF0aC5tYXgoMSwgbiA/PyAxKTtcbnZhciBpc1Njcm9sbERyaXZlbiA9ICh0KSA9PiB0ICE9IG51bGwgJiYgdHlwZW9mIHQgPT09IFwib2JqZWN0XCIgJiYgdC5raW5kID09PSBcInNjcm9sbFwiO1xudmFyIGlzVmlld0RyaXZlbiA9ICh0KSA9PiB0ICE9IG51bGwgJiYgdHlwZW9mIHQgPT09IFwib2JqZWN0XCIgJiYgdC5raW5kID09PSBcInZpZXdcIjtcbnZhciBpc1N0eWxlSG9zdCA9IChub2RlKSA9PiB7XG5cdGlmICghbm9kZSB8fCBub2RlLm5vZGVUeXBlICE9PSAxKSByZXR1cm4gZmFsc2U7XG5cdGlmIChTdHJpbmcobm9kZS5sb2NhbE5hbWUgfHwgXCJcIikuaW5jbHVkZXMoXCItXCIpKSByZXR1cm4gdHJ1ZTtcblx0aWYgKG5vZGUuc2hhZG93Um9vdCkgcmV0dXJuIHRydWU7XG5cdGlmIChub2RlLnN0eWxlcyAhPSBudWxsKSByZXR1cm4gdHJ1ZTtcblx0cmV0dXJuIGZhbHNlO1xufTtcbnZhciByZWFkU2hlZXRSdWxlQ291bnQgPSAoc2hlZXQpID0+IHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gc2hlZXQuY3NzUnVsZXMubGVuZ3RoO1xuXHR9IGNhdGNoIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufTtcbnZhciBpc0Fkb3B0ZWRTaGVldEVtcHR5ID0gKHNoZWV0KSA9PiB7XG5cdGlmICghc2hlZXQpIHJldHVybiB0cnVlO1xuXHRjb25zdCBjb3VudCA9IHJlYWRTaGVldFJ1bGVDb3VudChzaGVldCk7XG5cdGlmIChjb3VudCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gY291bnQgPT09IDA7XG59O1xudmFyIGlzQ29sb3JUb2tlbiA9IChuYW1lKSA9PiBuYW1lID09PSBcIi0tYmFzZS1jb2xvclwiIHx8IG5hbWUuc3RhcnRzV2l0aChcIi0tY29sb3ItXCIpIHx8IG5hbWUuZW5kc1dpdGgoXCItY29sb3JcIikgfHwgbmFtZS5lbmRzV2l0aChcIi1mZ1wiKSB8fCBuYW1lLmVuZHNXaXRoKFwiLWJnXCIpO1xudmFyIGlzRWxlbWVudFZpc2libGUgPSAoZWwpID0+IHtcblx0aWYgKCFlbC5pc0Nvbm5lY3RlZCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAodHlwZW9mIGVsLmdldENsaWVudFJlY3RzICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXHR0cnkge1xuXHRcdHJldHVybiBlbC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA+IDA7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59O1xudmFyIGlzU3R5bGVCaW5kaW5nID0gKHN0eWxlcykgPT4ge1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheShzdHlsZXMpICYmIHR5cGVvZiBzdHlsZXNbMF0gPT09IFwiZnVuY3Rpb25cIjtcbn07XG52YXIgaXNFZmZlY3RpdmVseUVtcHR5U3R5bGVUZXh0ID0gKGNzc1RleHQpID0+IHtcblx0Y29uc3Qgc291cmNlID0gdHlwZW9mIGNzc1RleHQgPT09IFwic3RyaW5nXCIgPyBjc3NUZXh0LnRyaW0oKSA6IFwiXCI7XG5cdGlmICghc291cmNlKSByZXR1cm4gdHJ1ZTtcblx0Zm9yIChjb25zdCBjaHVuayBvZiBzb3VyY2Uuc3BsaXQoXCI7XCIpKSB7XG5cdFx0Y29uc3QgZGVjbGFyYXRpb24gPSBjaHVuay50cmltKCk7XG5cdFx0aWYgKCFkZWNsYXJhdGlvbikgY29udGludWU7XG5cdFx0Y29uc3QgY29sb25JbmRleCA9IGRlY2xhcmF0aW9uLmluZGV4T2YoXCI6XCIpO1xuXHRcdGlmIChjb2xvbkluZGV4IDwgMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmIChkZWNsYXJhdGlvbi5zbGljZShjb2xvbkluZGV4ICsgMSkudHJpbSgpLmxlbmd0aCA+IDApIHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07XG52YXIgcHJ1bmVFbXB0eVN0eWxlQXR0cmlidXRlID0gKGVsZW1lbnQpID0+IHtcblx0aWYgKGVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuO1xuXHRjb25zdCByYXcgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcInN0eWxlXCIpO1xuXHRpZiAocmF3ID09IG51bGwpIHJldHVybjtcblx0aWYgKGlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dChyYXcpKSB7XG5cdFx0ZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gXCJcIjtcblx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpO1xuXHR9XG59O1xudmFyIGFwcGx5Tm9ybWFsaXplZElubGluZVN0eWxlID0gKGVsZW1lbnQsIGNzc1RleHQpID0+IHtcblx0aWYgKGlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dChjc3NUZXh0KSkge1xuXHRcdGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwiXCI7XG5cdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcblx0XHRyZXR1cm47XG5cdH1cblx0ZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gY3NzVGV4dDtcbn07XG52YXIgaXNOYXRpdmVDU1NTdHlsZVZhbHVlID0gKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuXHR0cnkge1xuXHRcdGNvbnN0IENTU1N0eWxlVmFsdWVDdG9yID0gZ2xvYmFsVGhpcy5DU1NTdHlsZVZhbHVlO1xuXHRcdGlmICh0eXBlb2YgQ1NTU3R5bGVWYWx1ZUN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIENTU1N0eWxlVmFsdWVDdG9yKSByZXR1cm4gdHJ1ZTtcblx0XHRmb3IgKGxldCBwcm90b3R5cGUgPSB2YWx1ZTsgcHJvdG90eXBlOyBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSkgaWYgKHByb3RvdHlwZT8uY29uc3RydWN0b3I/Lm5hbWUgPT09IFwiQ1NTU3R5bGVWYWx1ZVwiKSByZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCB7fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xudmFyIGlzUmVhY3RpdmVTdHlsZVZhbHVlID0gKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBpc05hdGl2ZUNTU1N0eWxlVmFsdWUodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIFwidmFsdWVcIiBpbiB2YWx1ZTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xudmFyIGlzU3RhdGljU3R5bGVJbnRlcnBvbGF0aW9uID0gKHZhbHVlKSA9PiB7XG5cdHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIjtcbn07XG52YXIgZXNjYXBlUmVnRXhwID0gKHZhbHVlKSA9PiB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7XG59O1xudmFyIGNvbnRhaW5zTWFya2VyID0gKGNzc1ZhbHVlLCBtYXJrZXIpID0+IHtcblx0cmV0dXJuIG5ldyBSZWdFeHAoYHZhclxcXFwoXFxcXHMqJHtlc2NhcGVSZWdFeHAobWFya2VyKX1cXFxccypcXFxcKWApLnRlc3QoY3NzVmFsdWUpO1xufTtcbnZhciByZWFkQXR0YWNoZWRDU1NVbml0ID0gKHRleHQpID0+IHtcblx0Y29uc3QgbWF0Y2ggPSBDU1NfVU5JVF9UT0tFTl9SRS5leGVjKHRleHQpO1xuXHRpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgYXV0aG9yZWQgPSBtYXRjaFswXTtcblx0Y29uc3Qgbm9ybWFsaXplZCA9IGF1dGhvcmVkLnRvTG93ZXJDYXNlKCk7XG5cdGlmICghQ1NTX0RJTUVOU0lPTl9VTklUUy5oYXMobm9ybWFsaXplZCkpIHJldHVybiBudWxsO1xuXHRyZXR1cm4ge1xuXHRcdGF1dGhvcmVkLFxuXHRcdG5vcm1hbGl6ZWQsXG5cdFx0bGVuZ3RoOiBhdXRob3JlZC5sZW5ndGhcblx0fTtcbn07XG52YXIgZ2V0V2luZG93Q29uc3RydWN0b3IgPSAod2luLCBuYW1lKSA9PiB7XG5cdHJldHVybiB3aW4/LltuYW1lXSA/PyBnbG9iYWxUaGlzPy5bbmFtZV07XG59O1xudmFyIGNyZWF0ZVR5cGVkVW5pdFZhbHVlID0gKHdpbiwgdW5pdCwgdmFsdWUpID0+IHtcblx0Y29uc3QgQ1NTTmFtZXNwYWNlID0gd2luPy5DU1M7XG5cdGNvbnN0IGZhY3RvcnlOYW1lID0gY3NzVW5pdEZhY3RvcnlOYW1lKHVuaXQpO1xuXHRjb25zdCBmYWN0b3J5ID0gQ1NTTmFtZXNwYWNlPy5bZmFjdG9yeU5hbWVdO1xuXHRpZiAodHlwZW9mIGZhY3RvcnkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGZhY3RvcnkuY2FsbChDU1NOYW1lc3BhY2UsIHZhbHVlKTtcblx0Y29uc3QgQ1NTVW5pdFZhbHVlQ3RvciA9IGdldFdpbmRvd0NvbnN0cnVjdG9yKHdpbiwgXCJDU1NVbml0VmFsdWVcIik7XG5cdGlmICh0eXBlb2YgQ1NTVW5pdFZhbHVlQ3RvciAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBUeXBlZCBPTSBkb2VzIG5vdCBzdXBwb3J0IENTUyB1bml0IFwiJHt1bml0fVwiYCk7XG5cdHJldHVybiBuZXcgQ1NTVW5pdFZhbHVlQ3Rvcih2YWx1ZSwgY3NzVW5pdENvbnN0cnVjdG9yTmFtZSh1bml0KSk7XG59O1xudmFyIGlzU3R5bGVWYWx1ZSA9ICh2YWwpID0+IGhhc1R5cGVkT00gJiYgdmFsIGluc3RhbmNlb2YgQ1NTU3R5bGVWYWx1ZTtcbnZhciBpc1VuaXRWYWx1ZSA9ICh2YWwpID0+IGhhc1R5cGVkT00gJiYgdmFsIGluc3RhbmNlb2YgQ1NTVW5pdFZhbHVlO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbGF5ZXJzLnRzXG52YXIgY3NzTGF5ZXJPcmRlciA9ICguLi5ncm91cHMpID0+IHtcblx0Y29uc3Qgc2VlbiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0IG5hbWVzID0gW107XG5cdGZvciAoY29uc3QgZ3JvdXAgb2YgZ3JvdXBzKSB7XG5cdFx0aWYgKGdyb3VwID09IG51bGwpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGxpc3QgPSB0eXBlb2YgZ3JvdXAgPT09IFwic3RyaW5nXCIgPyBbZ3JvdXBdIDogZ3JvdXA7XG5cdFx0Zm9yIChjb25zdCByYXcgb2YgbGlzdCkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IFN0cmluZyhyYXcgfHwgXCJcIikudHJpbSgpO1xuXHRcdFx0aWYgKCFuYW1lIHx8IHNlZW4uaGFzKG5hbWUpKSBjb250aW51ZTtcblx0XHRcdHNlZW4uYWRkKG5hbWUpO1xuXHRcdFx0bmFtZXMucHVzaChuYW1lKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG5hbWVzLmxlbmd0aCA/IGBAbGF5ZXIgJHtuYW1lcy5qb2luKFwiLCBcIil9O2AgOiBcIlwiO1xufTtcbnZhciB2ZWVsYUNhc2NhZGVPcmRlciA9ICgpID0+IGNzc0xheWVyT3JkZXIoVkVFTEFfQ0FTQ0FERV9MQVlFUlMpO1xudmFyIG1ha2VIb3N0TGF5ZXJPcmRlciA9IChleHRyYSkgPT4gY3NzTGF5ZXJPcmRlcihVWF9IT1NUX0xBWUVSUywgZXh0cmEpO1xudmFyIGNzc0xheWVyQmxvY2sgPSAobGF5ZXJOYW1lLCBjc3NUZXh0KSA9PiB7XG5cdGNvbnN0IGJvZHkgPSAoY3NzVGV4dCB8fCBcIlwiKS50cmltKCk7XG5cdGlmICghbGF5ZXJOYW1lIHx8ICFib2R5KSByZXR1cm4gXCJcIjtcblx0cmV0dXJuIGBAbGF5ZXIgJHtsYXllck5hbWV9IHtcXG4ke2JvZHl9XFxufWA7XG59O1xudmFyIHdyYXBDc3NMYXllciA9IChjc3NUZXh0LCBsYXllck5hbWUpID0+IGxheWVyTmFtZSA/IGBAbGF5ZXIgJHtsYXllck5hbWV9IHsgJHtjc3NUZXh0fSB9YCA6IGNzc1RleHQ7XG52YXIgbm9ybWFsaXplQ3NzRm9yTGF5ZXIgPSAobGF5ZXJOYW1lLCBjc3NUZXh0KSA9PiB7XG5cdGNvbnN0IHRyaW1tZWQgPSAoY3NzVGV4dCB8fCBcIlwiKS50cmltKCk7XG5cdGlmICghdHJpbW1lZCkgcmV0dXJuIFwiXCI7XG5cdGlmICgvXkBsYXllclxcYi8udGVzdCh0cmltbWVkKSkgcmV0dXJuIHRyaW1tZWQ7XG5cdHJldHVybiBjc3NMYXllckJsb2NrKGxheWVyTmFtZSwgdHJpbW1lZCk7XG59O1xudmFyIHVud3JhcE91dGVyTGF5ZXJCbG9jayA9IChjc3MsIGV4cGVjdGVkTmFtZSkgPT4ge1xuXHRjb25zdCBtYXRjaCA9IGNzcy5tYXRjaChMQVlFUl9PUEVOKTtcblx0aWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cdGlmIChleHBlY3RlZE5hbWUgJiYgbWF0Y2hbMV0gIT09IGV4cGVjdGVkTmFtZSkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IG9wZW4gPSBtYXRjaFswXS5sYXN0SW5kZXhPZihcIntcIik7XG5cdGxldCBkZXB0aCA9IDA7XG5cdGZvciAobGV0IGkgPSBvcGVuOyBpIDwgY3NzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgY2ggPSBjc3NbaV07XG5cdFx0aWYgKGNoID09PSBcIntcIikgZGVwdGgrKztcblx0XHRlbHNlIGlmIChjaCA9PT0gXCJ9XCIpIHtcblx0XHRcdGRlcHRoLS07XG5cdFx0XHRpZiAoZGVwdGggPT09IDApIHtcblx0XHRcdFx0aWYgKGNzcy5zbGljZShpICsgMSkudHJpbSgpKSByZXR1cm4gbnVsbDtcblx0XHRcdFx0cmV0dXJuIGNzcy5zbGljZShvcGVuICsgMSwgaSkudHJpbSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG52YXIgdW53cmFwQ3NzTGF5ZXIgPSAoY3NzVGV4dCwgbGF5ZXJOYW1lKSA9PiB7XG5cdGNvbnN0IHN0cmlwcGVkID0gc3RyaXBDc3NQcmVhbWJsZShjc3NUZXh0KTtcblx0cmV0dXJuIHVud3JhcE91dGVyTGF5ZXJCbG9jayhzdHJpcHBlZCwgbGF5ZXJOYW1lKSA/PyBzdHJpcHBlZDtcbn07XG52YXIgY3NzSW1wb3J0V2l0aExheWVyID0gKHVybCwgbGF5ZXIgPSBcIlwiKSA9PiBgQGltcG9ydCB1cmwoXCIke3VybH1cIikgJHtsYXllciAmJiB0eXBlb2YgbGF5ZXIgPT09IFwic3RyaW5nXCIgPyBgbGF5ZXIoJHtsYXllcn0pYCA6IFwiXCJ9O2A7XG52YXIgVVhfUFJFTE9BRF9IT1NUX0NTUyA9IGNzc0xheWVyQmxvY2soXCJ1eC1wcmVsb2FkXCIsIFwiOmhvc3QgeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9XCIpO1xudmFyIGdldE9yQ3JlYXRlTGF5ZXJSdWxlID0gKHNoZWV0LCBsYXllck5hbWUpID0+IHtcblx0aWYgKCFzaGVldCB8fCAhbGF5ZXJOYW1lKSByZXR1cm4gdm9pZCAwO1xuXHRjb25zdCBydWxlcyA9IEFycmF5LmZyb20oc2hlZXQuY3NzUnVsZXMgfHwgW10pO1xuXHRjb25zdCBleGlzdGluZyA9IHJ1bGVzLmZpbmQoKHJ1bGUpID0+IGlzTGF5ZXJCbG9ja1J1bGUocnVsZSkgJiYgcnVsZS5uYW1lID09PSBsYXllck5hbWUpO1xuXHRpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcblx0dHJ5IHtcblx0XHRjb25zdCBydWxlSW5kZXggPSBzaGVldC5pbnNlcnRSdWxlKGNzc0VtcHR5TGF5ZXJSdWxlKGxheWVyTmFtZSksIHJ1bGVzLmxlbmd0aCk7XG5cdFx0Y29uc3QgY3JlYXRlZCA9IHNoZWV0LmNzc1J1bGVzPy5bcnVsZUluZGV4XTtcblx0XHRyZXR1cm4gaXNMYXllckJsb2NrUnVsZShjcmVhdGVkKSA/IGNyZWF0ZWQgOiB2b2lkIDA7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybjtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3Byb3BlcnR5LnRzXG52YXIgdG9rZW5pemVOdW1lcmljQ1NTJDEgPSAoc291cmNlKSA9PiB7XG5cdGNvbnN0IHRva2VucyA9IFtdO1xuXHRsZXQgY3Vyc29yID0gMDtcblx0d2hpbGUgKGN1cnNvciA8IHNvdXJjZS5sZW5ndGgpIHtcblx0XHRjb25zdCByZXN0ID0gc291cmNlLnNsaWNlKGN1cnNvcik7XG5cdFx0Y29uc3Qgd2hpdGVzcGFjZSA9IC9eXFxzKy8uZXhlYyhyZXN0KTtcblx0XHRpZiAod2hpdGVzcGFjZSkge1xuXHRcdFx0Y3Vyc29yICs9IHdoaXRlc3BhY2VbMF0ubGVuZ3RoO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IG51bWJlciA9IC9eKD86XFxkKlxcLlxcZCt8XFxkK1xcLj9cXGQqKSg/OltlRV1bKy1dP1xcZCspPy8uZXhlYyhyZXN0KTtcblx0XHRpZiAobnVtYmVyKSB7XG5cdFx0XHRjdXJzb3IgKz0gbnVtYmVyWzBdLmxlbmd0aDtcblx0XHRcdGNvbnN0IHVuaXRNYXRjaCA9IENTU19VTklUX1RPS0VOX1JFLmV4ZWMoc291cmNlLnNsaWNlKGN1cnNvcikpO1xuXHRcdFx0Y29uc3QgdW5pdCA9IHVuaXRNYXRjaD8uWzBdID8/IG51bGw7XG5cdFx0XHRpZiAodW5pdE1hdGNoKSBjdXJzb3IgKz0gdW5pdE1hdGNoWzBdLmxlbmd0aDtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJudW1iZXJcIixcblx0XHRcdFx0dmFsdWU6IE51bWJlcihudW1iZXJbMF0pLFxuXHRcdFx0XHR1bml0OiB1bml0ID09IG51bGwgPyBudWxsIDogdW5pdC50b0xvd2VyQ2FzZSgpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBpZGVudGlmaWVyID0gL15bYS16QS1aX11bYS16QS1aMC05Xy1dKi8uZXhlYyhyZXN0KTtcblx0XHRpZiAoaWRlbnRpZmllcikge1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcImlkZW50aWZpZXJcIixcblx0XHRcdFx0dmFsdWU6IGlkZW50aWZpZXJbMF0udG9Mb3dlckNhc2UoKVxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IgKz0gaWRlbnRpZmllclswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3ltYm9sID0gcmVzdFswXTtcblx0XHRpZiAoW1xuXHRcdFx0XCIrXCIsXG5cdFx0XHRcIi1cIixcblx0XHRcdFwiKlwiLFxuXHRcdFx0XCIvXCIsXG5cdFx0XHRcIihcIixcblx0XHRcdFwiKVwiLFxuXHRcdFx0XCIsXCJcblx0XHRdLmluY2x1ZGVzKHN5bWJvbCkpIHtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJzeW1ib2xcIixcblx0XHRcdFx0dmFsdWU6IHN5bWJvbFxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IrKztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFVuc3VwcG9ydGVkIHRva2VuIG5lYXIgXCIke3Jlc3R9XCJgKTtcblx0fVxuXHRyZXR1cm4gdG9rZW5zO1xufTtcbnZhciBOdW1lcmljVHlwZWRPTVBhcnNlciQxID0gY2xhc3Mge1xuXHR0b2tlbnM7XG5cdHdpbjtcblx0aW5kZXggPSAwO1xuXHRjb25zdHJ1Y3Rvcih0b2tlbnMsIHdpbikge1xuXHRcdHRoaXMudG9rZW5zID0gdG9rZW5zO1xuXHRcdHRoaXMud2luID0gd2luO1xuXHR9XG5cdHBhcnNlKCkge1xuXHRcdGNvbnN0IHJvb3QgPSB0aGlzLnBhcnNlU3VtKCk7XG5cdFx0aWYgKHRoaXMuaW5kZXggIT09IHRoaXMudG9rZW5zLmxlbmd0aCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiVW5leHBlY3RlZCB0cmFpbGluZyBleHByZXNzaW9uXCIpO1xuXHRcdHJldHVybiByb290O1xuXHR9XG5cdGN1cnJlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMuaW5kZXhdO1xuXHR9XG5cdGNvbnN1bWUoKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblx0XHRpZiAoIXRva2VuKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uXCIpO1xuXHRcdHRoaXMuaW5kZXgrKztcblx0XHRyZXR1cm4gdG9rZW47XG5cdH1cblx0Y29uc3VtZVN5bWJvbChzeW1ib2wpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdGlmICh0b2tlbi5raW5kICE9PSBcInN5bWJvbFwiIHx8IHRva2VuLnZhbHVlICE9PSBzeW1ib2wpIHRocm93IG5ldyBTeW50YXhFcnJvcihgRXhwZWN0ZWQgXCIke3N5bWJvbH1cImApO1xuXHR9XG5cdG1hdGNoZXNTeW1ib2woc3ltYm9sKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnQoKTtcblx0XHRyZXR1cm4gdG9rZW4/LmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IHN5bWJvbDtcblx0fVxuXHRjcmVhdGVNYXRoKG5hbWUsIC4uLnZhbHVlcykge1xuXHRcdGNvbnN0IENvbnN0cnVjdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3IodGhpcy53aW4sIG5hbWUpO1xuXHRcdGlmICh0eXBlb2YgQ29uc3RydWN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG5cdFx0cmV0dXJuIG5ldyBDb25zdHJ1Y3RvciguLi52YWx1ZXMpO1xuXHR9XG5cdHBhcnNlU3VtKCkge1xuXHRcdGxldCB2YWx1ZSA9IHRoaXMucGFyc2VQcm9kdWN0KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIitcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiLVwiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVByb2R1Y3QoKTtcblx0XHRcdGlmIChvcGVyYXRvci5raW5kICE9PSBcInN5bWJvbFwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBzdW0gb3BlcmF0b3JcIik7XG5cdFx0XHRpZiAob3BlcmF0b3IudmFsdWUgPT09IFwiK1wiKSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhTdW1cIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoU3VtXCIsIHZhbHVlLCB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHJpZ2h0KSk7XG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRwYXJzZVByb2R1Y3QoKSB7XG5cdFx0bGV0IHZhbHVlID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIipcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiL1wiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0XHRpZiAob3BlcmF0b3Iua2luZCAhPT0gXCJzeW1ib2xcIikgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgcHJvZHVjdCBvcGVyYXRvclwiKTtcblx0XHRcdGlmIChvcGVyYXRvci52YWx1ZSA9PT0gXCIqXCIpIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFByb2R1Y3RcIiwgdmFsdWUsIHJpZ2h0KTtcblx0XHRcdGVsc2UgdmFsdWUgPSB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoUHJvZHVjdFwiLCB2YWx1ZSwgdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aEludmVydFwiLCByaWdodCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0cGFyc2VVbmFyeSgpIHtcblx0XHRpZiAodGhpcy5tYXRjaGVzU3ltYm9sKFwiK1wiKSkge1xuXHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5wYXJzZVVuYXJ5KCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCItXCIpKSB7XG5cdFx0XHR0aGlzLmNvbnN1bWUoKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTmVnYXRlXCIsIHRoaXMucGFyc2VVbmFyeSgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFyc2VQcmltYXJ5KCk7XG5cdH1cblx0cGFyc2VQcmltYXJ5KCkge1xuXHRcdGNvbnN0IHRva2VuID0gdGhpcy5jb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwibnVtYmVyXCIpIHJldHVybiBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh0aGlzLndpbiwgdG9rZW4udW5pdCA/PyBcIm51bWJlclwiLCB0b2tlbi52YWx1ZSk7XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiKFwiKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcdGlmICh0b2tlbi5raW5kID09PSBcImlkZW50aWZpZXJcIikgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbih0b2tlbi52YWx1ZSk7XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgYSBudW1lcmljIHZhbHVlXCIpO1xuXHR9XG5cdHBhcnNlRnVuY3Rpb24obmFtZSkge1xuXHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIihcIik7XG5cdFx0aWYgKG5hbWUgPT09IFwiY2FsY1wiKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXHRcdGlmICghdGhpcy5tYXRjaGVzU3ltYm9sKFwiKVwiKSkge1xuXHRcdFx0dmFsdWVzLnB1c2godGhpcy5wYXJzZVN1bSgpKTtcblx0XHRcdHdoaWxlICh0aGlzLm1hdGNoZXNTeW1ib2woXCIsXCIpKSB7XG5cdFx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0XHR2YWx1ZXMucHVzaCh0aGlzLnBhcnNlU3VtKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmNvbnN1bWVTeW1ib2woXCIpXCIpO1xuXHRcdGlmIChuYW1lID09PSBcIm1pblwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwibWluKCkgcmVxdWlyZXMgYSB2YWx1ZVwiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTWluXCIsIC4uLnZhbHVlcyk7XG5cdFx0fVxuXHRcdGlmIChuYW1lID09PSBcIm1heFwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwibWF4KCkgcmVxdWlyZXMgYSB2YWx1ZVwiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTWF4XCIsIC4uLnZhbHVlcyk7XG5cdFx0fVxuXHRcdGlmIChuYW1lID09PSBcImNsYW1wXCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoICE9PSAzKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJjbGFtcCgpIHJlcXVpcmVzIHRocmVlIHZhbHVlc1wiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoQ2xhbXBcIiwgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgZnVuY3Rpb24gXCIke25hbWV9XCJgKTtcblx0fVxufTtcbnZhciBwYXJzZVRvVHlwZWRPTSA9IChjc3NWYWx1ZSwgd2luKSA9PiB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgdG9rZW5zID0gdG9rZW5pemVOdW1lcmljQ1NTJDEoY3NzVmFsdWUpO1xuXHRcdHJldHVybiBuZXcgTnVtZXJpY1R5cGVkT01QYXJzZXIkMSh0b2tlbnMsIHdpbikucGFyc2UoKTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG52YXIgc2V0UHJvcGVydHlJZk5vdEVxdWFsID0gKHN0eWxlUmVmLCBrZWJhYiwgdmFsdWUsIGltcG9ydGFuY2UgPSBcIlwiKSA9PiB7XG5cdGlmICghc3R5bGVSZWYgfHwgIWtlYmFiKSByZXR1cm47XG5cdGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0aWYgKHN0eWxlUmVmLmdldFByb3BlcnR5VmFsdWUoa2ViYWIpICE9PSBcIlwiKSBzdHlsZVJlZi5yZW1vdmVQcm9wZXJ0eShrZWJhYik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGlmIChzdHlsZVJlZi5nZXRQcm9wZXJ0eVZhbHVlKGtlYmFiKSAhPT0gdmFsdWUpIHN0eWxlUmVmLnNldFByb3BlcnR5KGtlYmFiLCB2YWx1ZSwgaW1wb3J0YW5jZSk7XG59O1xudmFyIHNldFN0eWxlUHJvcGVydHlUeXBlZCA9IChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0aWYgKCFlbGVtZW50IHx8ICFuYW1lKSByZXR1cm4gZWxlbWVudDtcblx0Y29uc3Qga2ViYWIgPSBjYW1lbFRvS2ViYWIobmFtZSk7XG5cdGNvbnN0IHN0eWxlUmVmID0gZWxlbWVudC5zdHlsZTtcblx0Y29uc3Qgc3R5bGVNYXBSZWYgPSBlbGVtZW50LmF0dHJpYnV0ZVN0eWxlTWFwID8/IGVsZW1lbnQuc3R5bGVNYXA7XG5cdGlmICghaGFzVHlwZWRPTSB8fCAhc3R5bGVNYXBSZWYpIHJldHVybiBzZXRTdHlsZVByb3BlcnR5RmFsbGJhY2soZWxlbWVudCwgbmFtZSwgdmFsdWUsIGltcG9ydGFuY2UpO1xuXHRjb25zdCB3aW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ/LmRlZmF1bHRWaWV3ID8/IGdsb2JhbFRoaXM7XG5cdGxldCB2YWwgPSBoYXNWYWx1ZSh2YWx1ZSkgJiYgaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpID8gdmFsdWUudmFsdWUgOiB2YWx1ZTtcblx0aWYgKHZhbCA9PSBudWxsKSB7XG5cdFx0c3R5bGVNYXBSZWYuZGVsZXRlPy4oa2ViYWIpO1xuXHRcdGlmIChzdHlsZVJlZikgc2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgbnVsbCwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWwpKSB7XG5cdFx0Y29uc3Qgb2xkID0gc3R5bGVNYXBSZWYuZ2V0KGtlYmFiKTtcblx0XHRpZiAoaXNVbml0VmFsdWUodmFsKSAmJiBpc1VuaXRWYWx1ZShvbGQpKSB7XG5cdFx0XHRpZiAob2xkLnZhbHVlID09PSB2YWwudmFsdWUgJiYgb2xkLnVuaXQgPT09IHZhbC51bml0KSByZXR1cm4gZWxlbWVudDtcblx0XHR9IGVsc2UgaWYgKG9sZCA9PT0gdmFsKSByZXR1cm4gZWxlbWVudDtcblx0XHRzdHlsZU1hcFJlZi5zZXQoa2ViYWIsIHZhbCk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIpIHtcblx0XHRpZiAoQ1NTPy5udW1iZXIgJiYgIWtlYmFiLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuXHRcdFx0Y29uc3QgbmV3VmFsID0gQ1NTLm51bWJlcih2YWwpO1xuXHRcdFx0Y29uc3Qgb2xkID0gc3R5bGVNYXBSZWYuZ2V0KGtlYmFiKTtcblx0XHRcdGlmIChpc1VuaXRWYWx1ZShvbGQpICYmIG9sZC52YWx1ZSA9PT0gbmV3VmFsLnZhbHVlICYmIG9sZC51bml0ID09PSBuZXdWYWwudW5pdCkgcmV0dXJuIGVsZW1lbnQ7XG5cdFx0XHRzdHlsZU1hcFJlZi5zZXQoa2ViYWIsIG5ld1ZhbCk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKC9cXGIoY2FsY3xtaW58bWF4fGNsYW1wKVxccypcXCgvLnRlc3QodmFsKSkge1xuXHRcdFx0Y29uc3QgcGFyc2VkID0gcGFyc2VUb1R5cGVkT00odmFsLCB3aW4pO1xuXHRcdFx0aWYgKHBhcnNlZCkgdHJ5IHtcblx0XHRcdFx0c3R5bGVNYXBSZWYuc2V0KGtlYmFiLCBwYXJzZWQpO1xuXHRcdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHRcdH0gY2F0Y2gge31cblx0XHR9XG5cdFx0Y29uc3QgbWF5YmVOdW0gPSB0cnlTdHJpbmdBc051bWJlcih2YWwpO1xuXHRcdGlmICh0eXBlb2YgbWF5YmVOdW0gPT09IFwibnVtYmVyXCIgJiYgQ1NTPy5udW1iZXIgJiYgIWtlYmFiLnN0YXJ0c1dpdGgoXCItLVwiKSkge1xuXHRcdFx0Y29uc3QgbmV3VmFsID0gQ1NTLm51bWJlcihtYXliZU51bSk7XG5cdFx0XHRjb25zdCBvbGQgPSBzdHlsZU1hcFJlZi5nZXQoa2ViYWIpO1xuXHRcdFx0aWYgKGlzVW5pdFZhbHVlKG9sZCkgJiYgb2xkLnZhbHVlID09PSBuZXdWYWwudmFsdWUgJiYgb2xkLnVuaXQgPT09IG5ld1ZhbC51bml0KSByZXR1cm4gZWxlbWVudDtcblx0XHRcdHN0eWxlTWFwUmVmLnNldChrZWJhYiwgbmV3VmFsKTtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0XHRzZXRQcm9wZXJ0eUlmTm90RXF1YWwoc3R5bGVSZWYsIGtlYmFiLCB2YWwsIGltcG9ydGFuY2UpO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cdHNldFByb3BlcnR5SWZOb3RFcXVhbChzdHlsZVJlZiwga2ViYWIsIFN0cmluZyh2YWwpLCBpbXBvcnRhbmNlKTtcblx0cmV0dXJuIGVsZW1lbnQ7XG59O1xudmFyIHNldFN0eWxlUHJvcGVydHlGYWxsYmFjayA9IChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSA9IFwiXCIpID0+IHtcblx0aWYgKCFlbGVtZW50IHx8ICFuYW1lKSByZXR1cm4gZWxlbWVudDtcblx0Y29uc3Qga2ViYWIgPSBjYW1lbFRvS2ViYWIobmFtZSk7XG5cdGNvbnN0IHN0eWxlUmVmID0gZWxlbWVudC5zdHlsZTtcblx0aWYgKCFzdHlsZVJlZikgcmV0dXJuIGVsZW1lbnQ7XG5cdGxldCB2YWwgPSBoYXNWYWx1ZSh2YWx1ZSkgJiYgaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpID8gdmFsdWUudmFsdWUgOiB2YWx1ZTtcblx0aWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIgJiYgIWlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWwpKSB2YWwgPSB0cnlTdHJpbmdBc051bWJlcih2YWwpID8/IHZhbDtcblx0aWYgKHZhbCA9PSBudWxsKSB7XG5cdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgbnVsbCwgaW1wb3J0YW5jZSk7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblx0aWYgKGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWwpKSB7XG5cdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cdGlmICh0eXBlb2YgdmFsID09PSBcIm51bWJlclwiKSB7XG5cdFx0c2V0UHJvcGVydHlJZk5vdEVxdWFsKHN0eWxlUmVmLCBrZWJhYiwgU3RyaW5nKHZhbCksIGltcG9ydGFuY2UpO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cdHNldFByb3BlcnR5SWZOb3RFcXVhbChzdHlsZVJlZiwga2ViYWIsIFN0cmluZyh2YWwpLCBpbXBvcnRhbmNlKTtcblx0cmV0dXJuIGVsZW1lbnQ7XG59O1xudmFyIHNldFN0eWxlUHJvcGVydHkgPSAoZWxlbWVudCwgbmFtZSwgdmFsdWUsIGltcG9ydGFuY2UgPSBcIlwiKSA9PiB7XG5cdHJldHVybiBoYXNUeXBlZE9NID8gc2V0U3R5bGVQcm9wZXJ0eVR5cGVkKGVsZW1lbnQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlKSA6IHNldFN0eWxlUHJvcGVydHlGYWxsYmFjayhlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaW1wb3J0YW5jZSk7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvc2hlZXRzLnRzXG52YXIgc2V0U3R5bGVJblJ1bGUgPSAoc2VsZWN0b3IsIG5hbWUsIHZhbHVlKSA9PiB7XG5cdHJldHVybiBzZXRTdHlsZVByb3BlcnR5KGdldFN0eWxlUnVsZShzZWxlY3RvciksIG5hbWUsIHZhbHVlKTtcbn07XG52YXIgc2V0U3R5bGVSdWxlID0gKHNlbGVjdG9yLCBzaGVldCkgPT4ge1xuXHRjb25zdCBydWxlID0gZ2V0U3R5bGVSdWxlKHNlbGVjdG9yKTtcblx0T2JqZWN0LmVudHJpZXMoc2hlZXQpLmZvckVhY2goKFtwcm9wTmFtZSwgcHJvcFZhbHVlXSkgPT4gc2V0U3R5bGVQcm9wZXJ0eShydWxlLCBwcm9wTmFtZSwgcHJvcFZhbHVlKSk7XG5cdHJldHVybiBydWxlO1xufTtcbnZhciBsb2FkU3R5bGVTaGVldCA9IChpbmxpbmUsIGJhc2UsIGxheWVyID0gXCJcIiwgaW50ZWdyaXR5KSA9PiB7XG5cdGNvbnN0IGxvYWQgPSBmZXRjaEFuZENhY2hlKGlubGluZSk7XG5cdGNvbnN0IHVybCA9IHR5cGVvZiBpbmxpbmUgPT0gXCJzdHJpbmdcIiA/IFVSTC5jYW5QYXJzZShpbmxpbmUpID8gaW5saW5lIDogbG9hZCA6IGxvYWQ7XG5cdGlmIChiYXNlPy5bMF0pIGJhc2VbMF0uZmV0Y2hQcmlvcml0eSA9IFwiaGlnaFwiO1xuXHRpZiAoYmFzZSAmJiB1cmwgJiYgdHlwZW9mIHVybCA9PSBcInN0cmluZ1wiKSBzZXRTdHlsZVVSTChiYXNlLCB1cmwsIGxheWVyKTtcblx0aWYgKGJhc2U/LlswXSAmJiAoIVVSTC5jYW5QYXJzZShpbmxpbmUpIHx8IGludGVncml0eSkgJiYgYmFzZT8uWzBdIGluc3RhbmNlb2YgSFRNTExpbmtFbGVtZW50KSB7fVxuXHRyZXR1cm4gcHJvbWlzZU9yRGlyZWN0KGxvYWQsIChyZXMpID0+IHtcblx0XHRpZiAoYmFzZT8uWzBdICYmIHJlcykge1xuXHRcdFx0c2V0U3R5bGVVUkwoYmFzZSwgcmVzLCBsYXllcik7XG5cdFx0XHRiYXNlPy5bMF0uc2V0QXR0cmlidXRlKFwibG9hZGVkXCIsIFwiXCIpO1xuXHRcdH1cblx0fSk/LmNhdGNoPy4oKGVycm9yKSA9PiB7XG5cdFx0Y29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgc3R5bGUgc2hlZXQ6XCIsIGVycm9yKTtcblx0fSk7XG59O1xudmFyIGxvYWRCbG9iU3R5bGUgPSAoaW5saW5lKSA9PiB7XG5cdGNvbnN0IHN0eWxlID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSA6IG51bGw7XG5cdGlmIChzdHlsZSkgc3R5bGUuZmV0Y2hQcmlvcml0eSA9IFwiaGlnaFwiO1xuXHRpZiAoc3R5bGUpIHtcblx0XHRPYmplY3QuYXNzaWduKHN0eWxlLCB7XG5cdFx0XHRyZWw6IFwic3R5bGVzaGVldFwiLFxuXHRcdFx0dHlwZTogXCJ0ZXh0L2Nzc1wiLFxuXHRcdFx0Y3Jvc3NPcmlnaW46IFwic2FtZS1vcmlnaW5cIlxuXHRcdH0pO1xuXHRcdHN0eWxlLmRhdGFzZXQub3duZXIgPSBcIkRPTVwiO1xuXHRcdGxvYWRTdHlsZVNoZWV0KGlubGluZSwgW3N0eWxlLCBcImhyZWZcIl0pO1xuXHRcdHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmhlYWQuYXBwZW5kKHN0eWxlKTtcblx0XHRyZXR1cm4gc3R5bGU7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xudmFyIGxvYWRJbmxpbmVTdHlsZSA9IChpbmxpbmUsIHJvb3RFbGVtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudD8uaGVhZCA6IG51bGwsIGxheWVyID0gXCJcIikgPT4ge1xuXHRjb25zdCBQTEFDRSA9IHJvb3RFbGVtZW50Py5xdWVyeVNlbGVjdG9yPy4oXCJoZWFkXCIpID8/IHJvb3RFbGVtZW50O1xuXHRpZiAodHlwZW9mIEhUTUxIZWFkRWxlbWVudCAhPSBcInVuZGVmaW5lZFwiICYmIFBMQUNFIGluc3RhbmNlb2YgSFRNTEhlYWRFbGVtZW50KSByZXR1cm4gbG9hZEJsb2JTdHlsZShpbmxpbmUpO1xuXHRjb25zdCBzdHlsZSA9IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpIDogbnVsbDtcblx0aWYgKHN0eWxlKSB7XG5cdFx0c3R5bGUuZGF0YXNldC5vd25lciA9IFwiRE9NXCI7XG5cdFx0bG9hZFN0eWxlU2hlZXQoaW5saW5lLCBbc3R5bGUsIFwiaW5uZXJIVE1MXCJdLCBsYXllcik7XG5cdFx0UExBQ0U/LnByZXBlbmQ/LihzdHlsZSk7XG5cdFx0cmV0dXJuIHN0eWxlO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbnZhciBzZXRQcm9wZXJ0eSA9ICh0YXJnZXQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlID0gXCJcIikgPT4ge1xuXHRyZXR1cm4gc2V0U3R5bGVQcm9wZXJ0eSh0YXJnZXQsIG5hbWUsIHZhbHVlLCBpbXBvcnRhbmNlKTtcbn07XG52YXIgcHJlbG9hZFN0eWxlID0gKHN0eWxlcykgPT4ge1xuXHRyZXR1cm4gbG9hZEFzQWRvcHRlZChzdHlsZXMsIFwiXCIpO1xufTtcbnZhciByZW1lbWJlckFkb3B0ZWRUZXh0ID0gKHNoZWV0LCBjc3NUZXh0KSA9PiB7XG5cdGFkb3B0ZWRBcHBsaWVkVGV4dC5zZXQoc2hlZXQsIGNzc1RleHQpO1xuXHRhZG9wdGVkRmlsbGVkLmFkZChzaGVldCk7XG59O1xudmFyIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQgPSAoc2hlZXQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHN0b3JlZCA9IGFkb3B0ZWRBcHBsaWVkVGV4dC5nZXQoc2hlZXQpO1xuXHRpZiAoc3RvcmVkKSByZXR1cm4gc3RvcmVkO1xuXHRmb3IgKGNvbnN0IFtrZXksIG1hcHBlZF0gb2YgYWRvcHRlZE1hcCkgaWYgKG1hcHBlZCA9PT0gc2hlZXQgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGtleTtcblx0cmV0dXJuIG51bGw7XG59O1xudmFyIGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQgPSAoc2hlZXQsIGNzc1RleHQpID0+IHtcblx0aWYgKCFzaGVldCkgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCB0ZXh0ID0gY3NzVGV4dCB8fCBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KHNoZWV0KTtcblx0Y29uc3QgY291bnQgPSByZWFkU2hlZXRSdWxlQ291bnQoc2hlZXQpO1xuXHRpZiAoY291bnQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcblx0aWYgKGNvdW50ID4gMCkge1xuXHRcdGFkb3B0ZWRGaWxsZWQuYWRkKHNoZWV0KTtcblx0XHRpZiAodGV4dCAmJiAhYWRvcHRlZEFwcGxpZWRUZXh0LmhhcyhzaGVldCkpIGFkb3B0ZWRBcHBsaWVkVGV4dC5zZXQoc2hlZXQsIHRleHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGlmICghdGV4dCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoYXBwbHlBZG9wdGVkU3R5bGVUZXh0KHNoZWV0LCB0ZXh0KSkge1xuXHRcdHJlbWVtYmVyQWRvcHRlZFRleHQoc2hlZXQsIHRleHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgYXBwbHlBZG9wdGVkU3R5bGVUZXh0ID0gKHNoZWV0LCBjc3NUZXh0KSA9PiB7XG5cdGlmICghc2hlZXQgfHwgIWNzc1RleHQpIHJldHVybiBmYWxzZTtcblx0dHJ5IHtcblx0XHRzaGVldC5yZXBsYWNlU3luYyhjc3NUZXh0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zdCBtZXNzYWdlID0gU3RyaW5nKGVycm9yPy5tZXNzYWdlIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKCEobWVzc2FnZS5pbmNsdWRlcyhcIkBpbXBvcnQgcnVsZXMgYXJlIG5vdCBhbGxvd2VkXCIpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoXCJAaW1wb3J0XCIpICYmIG1lc3NhZ2UuaW5jbHVkZXMoXCJub3QgYWxsb3dlZFwiKSkpIGNvbnNvbGUud2FybihcIltET01dIEZhaWxlZCB0byBhcHBseSBhZG9wdGVkIHN0eWxlc2hlZXQ6XCIsIGVycm9yKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgc2hlZXRGb3JCbG9iID0gKGJsb2IpID0+IHtcblx0bGV0IHNoZWV0ID0gYWRvcHRlZEJsb2JNYXAuZ2V0KGJsb2IpO1xuXHRpZiAoIXNoZWV0KSB7XG5cdFx0c2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdGFkb3B0ZWRCbG9iTWFwLnNldChibG9iLCBzaGVldCk7XG5cdH1cblx0cmV0dXJuIHNoZWV0O1xufTtcbnZhciBsb2FkQXNBZG9wdGVkID0gKHN0eWxlcywgbGF5ZXJOYW1lID0gbnVsbCkgPT4ge1xuXHR0cnkge1xuXHRcdHJldHVybiBsb2FkQXNBZG9wdGVkVW5zYWZlKHN0eWxlcywgbGF5ZXJOYW1lKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRjb25zb2xlLndhcm4oXCJbRE9NXSBsb2FkQXNBZG9wdGVkIGZhaWxlZFwiLCBlcnJvcik7XG5cdFx0aWYgKHR5cGVvZiBzdHlsZXMgPT09IFwic3RyaW5nXCIpIGxvYWRJbmxpbmVTdHlsZShzdHlsZXMsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xudmFyIGxvYWRBc0Fkb3B0ZWRVbnNhZmUgPSAoc3R5bGVzLCBsYXllck5hbWUgPSBudWxsKSA9PiB7XG5cdGlmICghc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCgpKSB7XG5cdFx0aWYgKHR5cGVvZiBzdHlsZXMgPT09IFwic3RyaW5nXCIpIGxvYWRJbmxpbmVTdHlsZShzdHlsZXMsIHZvaWQgMCwgbGF5ZXJOYW1lIHx8IFwiXCIpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlb2Ygc3R5bGVzID09PSBcInN0cmluZ1wiICYmIGNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudChzdHlsZXMpKSB7XG5cdFx0bG9hZElubGluZVN0eWxlKHN0eWxlcywgdm9pZCAwLCBsYXllck5hbWUgfHwgXCJcIik7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKHR5cGVvZiBzdHlsZXMgPT0gXCJzdHJpbmdcIiAmJiBhZG9wdGVkTWFwPy5oYXM/LihzdHlsZXMpKSB7XG5cdFx0Y29uc3QgY2FjaGVkID0gYWRvcHRlZE1hcC5nZXQoc3R5bGVzKTtcblx0XHRjb25zdCBhcHBsaWVkID0gYWRvcHRlZEFwcGxpZWRUZXh0LmdldChjYWNoZWQpIHx8IHdyYXBDc3NMYXllcihzdHlsZXMsIGxheWVyTmFtZSk7XG5cdFx0ZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudChjYWNoZWQsIGFwcGxpZWQpO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzICYmICFkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMuaW5jbHVkZXMoY2FjaGVkKSkgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goY2FjaGVkKTtcblx0XHRyZXR1cm4gY2FjaGVkO1xuXHR9XG5cdGlmICgoc3R5bGVzIGluc3RhbmNlb2YgQmxvYiB8fCBzdHlsZXMgaW5zdGFuY2VvZiBGaWxlKSAmJiBhZG9wdGVkQmxvYk1hcD8uaGFzPy4oc3R5bGVzKSkge1xuXHRcdGNvbnN0IGNhY2hlZCA9IGFkb3B0ZWRCbG9iTWFwLmdldChzdHlsZXMpO1xuXHRcdGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQoY2FjaGVkKTtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cyAmJiAhZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLmluY2x1ZGVzKGNhY2hlZCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKGNhY2hlZCk7XG5cdFx0cmV0dXJuIGNhY2hlZDtcblx0fVxuXHRpZiAoIXN0eWxlcykgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHNoZWV0ID0gdHlwZW9mIHN0eWxlcyA9PSBcInN0cmluZ1wiID8gZ2V0T3JJbnNlcnRDb21wdXRlZChhZG9wdGVkTWFwLCBzdHlsZXMsICgpID0+IG5ldyBDU1NTdHlsZVNoZWV0KCkpIDogc2hlZXRGb3JCbG9iKHN0eWxlcyk7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgJiYgIWRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0aWYgKHR5cGVvZiBzdHlsZXMgPT0gXCJzdHJpbmdcIiAmJiAhdXJsQ2FuUGFyc2Uoc3R5bGVzKSkge1xuXHRcdGNvbnN0IGxheWVyV3JhcHBlZCA9IHdyYXBDc3NMYXllcihzdHlsZXMsIGxheWVyTmFtZSk7XG5cdFx0YWRvcHRlZE1hcC5zZXQoc3R5bGVzLCBzaGVldCk7XG5cdFx0aWYgKCFhcHBseUFkb3B0ZWRTdHlsZVRleHQoc2hlZXQsIGxheWVyV3JhcHBlZCkpIHtcblx0XHRcdHJlbW92ZUFkb3B0ZWQoc2hlZXQpO1xuXHRcdFx0YWRvcHRlZE1hcC5kZWxldGUoc3R5bGVzKTtcblx0XHRcdGxvYWRJbmxpbmVTdHlsZShzdHlsZXMpO1xuXHRcdH0gZWxzZSByZW1lbWJlckFkb3B0ZWRUZXh0KHNoZWV0LCBsYXllcldyYXBwZWQpO1xuXHRcdHJldHVybiBzaGVldDtcblx0fSBlbHNlIHByb21pc2VPckRpcmVjdChmZXRjaEFzSW5saW5lKHN0eWxlcyksIChjYWNoZWQpID0+IHtcblx0XHRhZG9wdGVkTWFwLnNldChjYWNoZWQsIHNoZWV0KTtcblx0XHRpZiAoY2FjaGVkKSB7XG5cdFx0XHRpZiAoY3NzVGV4dFJlcXVpcmVzSW5saW5lU3R5bGVFbGVtZW50KGNhY2hlZCkpIHtcblx0XHRcdFx0cmVtb3ZlQWRvcHRlZChzaGVldCk7XG5cdFx0XHRcdGFkb3B0ZWRNYXAuZGVsZXRlKGNhY2hlZCk7XG5cdFx0XHRcdGFkb3B0ZWRCbG9iTWFwLmRlbGV0ZShzdHlsZXMpO1xuXHRcdFx0XHRsb2FkSW5saW5lU3R5bGUoY2FjaGVkLCB2b2lkIDAsIGxheWVyTmFtZSB8fCBcIlwiKTtcblx0XHRcdFx0cmV0dXJuIHNoZWV0O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbGF5ZXJXcmFwcGVkID0gd3JhcENzc0xheWVyKGNhY2hlZCwgbGF5ZXJOYW1lKTtcblx0XHRcdGlmICghYXBwbHlBZG9wdGVkU3R5bGVUZXh0KHNoZWV0LCBsYXllcldyYXBwZWQpKSB7XG5cdFx0XHRcdHJlbW92ZUFkb3B0ZWQoc2hlZXQpO1xuXHRcdFx0XHRhZG9wdGVkTWFwLmRlbGV0ZShjYWNoZWQpO1xuXHRcdFx0XHRhZG9wdGVkQmxvYk1hcC5kZWxldGUoc3R5bGVzKTtcblx0XHRcdFx0bG9hZElubGluZVN0eWxlKGNhY2hlZCwgdm9pZCAwLCBsYXllck5hbWUgfHwgXCJcIik7XG5cdFx0XHR9IGVsc2UgcmVtZW1iZXJBZG9wdGVkVGV4dChzaGVldCwgbGF5ZXJXcmFwcGVkKTtcblx0XHRcdHJldHVybiBzaGVldDtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gc2hlZXQ7XG59O1xudmFyIGNvbGxlY3RTdHlsZUhvc3RzID0gKG5vZGUsIGludG8pID0+IHtcblx0aWYgKCFub2RlIHx8IG5vZGUubm9kZVR5cGUgPT09IDMpIHJldHVybjtcblx0aWYgKG5vZGUubm9kZVR5cGUgPT09IDExKSB7XG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkTm9kZXMgfHwgW10pIGNvbGxlY3RTdHlsZUhvc3RzKGNoaWxkLCBpbnRvKTtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKGlzU3R5bGVIb3N0KG5vZGUpKSBpbnRvLmFkZChub2RlKTtcblx0aWYgKHR5cGVvZiBub2RlLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuO1xuXHR0cnkge1xuXHRcdGZvciAoY29uc3QgZWwgb2Ygbm9kZS5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSkgaWYgKGlzU3R5bGVIb3N0KGVsKSkgaW50by5hZGQoZWwpO1xuXHR9IGNhdGNoIHt9XG59O1xudmFyIG5vdGlmeVN0eWxlVHJlZUhvc3RzID0gKGhvc3RzLCByZWFzb24gPSBcInRyZWVcIikgPT4ge1xuXHRmb3IgKGNvbnN0IGVsIG9mIGhvc3RzKSB7XG5cdFx0aWYgKCFpc1N0eWxlSG9zdChlbCkpIGNvbnRpbnVlO1xuXHRcdGZvciAoY29uc3QgZm4gb2Ygc3R5bGVUcmVlSG9va3MpIGZuKGVsLCByZWFzb24pO1xuXHR9XG59O1xudmFyIHJlZ2lzdGVyU3R5bGVUcmVlSG9vayA9IChmbikgPT4ge1xuXHRpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybjtcblx0c3R5bGVUcmVlSG9va3MuYWRkKGZuKTtcbn07XG52YXIgb2JzZXJ2ZVN0eWxlVHJlZSA9IChyb290KSA9PiB7XG5cdGlmICghcm9vdCB8fCB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHJvb3Q7XG5cdGlmIChzdHlsZVRyZWVPYnNlcnZlZC5oYXMocm9vdCkpIHJldHVybiByb290O1xuXHRzdHlsZVRyZWVPYnNlcnZlZC5hZGQocm9vdCk7XG5cdHN0eWxlVHJlZVJvb3RzLmFkZChyb290KTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigocmVjb3JkcykgPT4ge1xuXHRcdGNvbnN0IGhvc3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcblx0XHRmb3IgKGNvbnN0IHJlYyBvZiByZWNvcmRzKSBpZiAocmVjLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdGZvciAoY29uc3Qgbm9kZSBvZiByZWMuYWRkZWROb2RlcykgY29sbGVjdFN0eWxlSG9zdHMobm9kZSwgaG9zdHMpO1xuXHRcdFx0Y29uc3Qgc2NvcGUgPSByZWMudGFyZ2V0Py5nZXRSb290Tm9kZT8uKCk7XG5cdFx0XHRpZiAoc2NvcGUgaW5zdGFuY2VvZiBTaGFkb3dSb290ICYmIGlzU3R5bGVIb3N0KHNjb3BlLmhvc3QpKSB7XG5cdFx0XHRcdGNvbnN0IHNoZWV0cyA9IHNjb3BlLmFkb3B0ZWRTdHlsZVNoZWV0cztcblx0XHRcdFx0aWYgKCFzaGVldHMgfHwgc2hlZXRzLmxlbmd0aCA9PT0gMCkgaG9zdHMuYWRkKHNjb3BlLmhvc3QpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAocmVjLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiICYmIHJlYy50YXJnZXQpIHtcblx0XHRcdGlmIChpc1N0eWxlSG9zdChyZWMudGFyZ2V0KSkgaG9zdHMuYWRkKHJlYy50YXJnZXQpO1xuXHRcdH1cblx0XHRub3RpZnlTdHlsZVRyZWVIb3N0cyhob3N0cywgXCJtdXRhdGlvblwiKTtcblx0fSk7XG5cdHRyeSB7XG5cdFx0b2JzZXJ2ZXIub2JzZXJ2ZShyb290LCB7XG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdFx0YXR0cmlidXRlczogdHJ1ZSxcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogWy4uLlNUWUxFX1RIRU1FX0FUVFJTXVxuXHRcdH0pO1xuXHR9IGNhdGNoIHtcblx0XHRzdHlsZVRyZWVPYnNlcnZlZC5kZWxldGUocm9vdCk7XG5cdFx0cmV0dXJuIHJvb3Q7XG5cdH1cblx0cmV0dXJuIHJvb3Q7XG59O1xudmFyIHJlaHlkcmF0ZUNvbnN0cnVjdGFibGVTaGVldHMgPSAoKSA9PiB7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblx0Y29uc3QgY2FuUGFyc2UgPSB0eXBlb2YgVVJMICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBVUkwuY2FuUGFyc2UgPT09IFwiZnVuY3Rpb25cIjtcblx0Zm9yIChjb25zdCBba2V5LCBzaGVldF0gb2YgYWRvcHRlZE1hcCkge1xuXHRcdGlmICghc2hlZXQgfHwgdHlwZW9mIGtleSAhPT0gXCJzdHJpbmdcIikgY29udGludWU7XG5cdFx0aWYgKGNhblBhcnNlICYmIFVSTC5jYW5QYXJzZShrZXkpKSBjb250aW51ZTtcblx0XHRjb25zdCB0ZXh0ID0gYWRvcHRlZEFwcGxpZWRUZXh0LmdldChzaGVldCkgfHwga2V5O1xuXHRcdGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQoc2hlZXQsIHRleHQpO1xuXHRcdGlmIChkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgJiYgIWRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0cy5wdXNoKHNoZWV0KTtcblx0fVxufTtcbnZhciByZW1vdmVBZG9wdGVkID0gKHNoZWV0KSA9PiB7XG5cdGlmICghc2hlZXQpIHJldHVybiBmYWxzZTtcblx0Y29uc3QgdGFyZ2V0ID0gdHlwZW9mIHNoZWV0ID09PSBcInN0cmluZ1wiID8gYWRvcHRlZE1hcC5nZXQoc2hlZXQpIDogc2hlZXQ7XG5cdGlmICghdGFyZ2V0IHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCBzaGVldHMgPSBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHM7XG5cdGNvbnN0IGlkeCA9IHNoZWV0cy5pbmRleE9mKHRhcmdldCk7XG5cdGlmIChpZHggIT09IC0xKSB7XG5cdFx0c2hlZXRzLnNwbGljZShpZHgsIDEpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG52YXIgZ2V0VHJhbnNmb3JtID0gKGVsKSA9PiB7XG5cdGlmIChlbD8uY29tcHV0ZWRTdHlsZU1hcCkge1xuXHRcdGNvbnN0IG1hdHJpeCA9IGVsLmNvbXB1dGVkU3R5bGVNYXAoKS5nZXQoXCJ0cmFuc2Zvcm1cIik/LnRvTWF0cml4Py4oKTtcblx0XHRpZiAobWF0cml4KSByZXR1cm4gbWF0cml4O1xuXHR9IGVsc2UgaWYgKGVsKSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsKTtcblx0XHRyZXR1cm4gbmV3IERPTU1hdHJpeChzdHlsZT8uZ2V0UHJvcGVydHlWYWx1ZT8uKFwidHJhbnNmb3JtXCIpKTtcblx0fVxuXHRyZXR1cm4gbmV3IERPTU1hdHJpeCgpO1xufTtcbnZhciBnZXRUcmFuc2Zvcm1PcmlnaW4gPSAoZWwpID0+IHtcblx0Y29uc3QgY3NzT3JpZ2luID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk/LmdldFByb3BlcnR5VmFsdWU/LihcInRyYW5zZm9ybS1vcmlnaW5cIikgfHwgYDUwJSA1MCVgO1xuXHRyZXR1cm4gcGFyc2VPcmlnaW4oY3NzT3JpZ2luLCBlbCk7XG59O1xudmFyIGdldFByb3BlcnR5VmFsdWUgPSAoc3JjLCBuYW1lKSA9PiB7XG5cdGlmIChcImNvbXB1dGVkU3R5bGVNYXBcIiBpbiBzcmMpIHtcblx0XHRjb25zdCB2YWwgPSBzcmM/LmNvbXB1dGVkU3R5bGVNYXA/LigpPy5nZXQobmFtZSk7XG5cdFx0cmV0dXJuIHZhbCBpbnN0YW5jZW9mIENTU1VuaXRWYWx1ZSA/IHZhbD8udmFsdWUgfHwgMCA6IHZhbD8udG9TdHJpbmc/LigpO1xuXHR9XG5cdGlmIChzcmMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnN0IGNzID0gZ2V0Q29tcHV0ZWRTdHlsZT8uKHNyYywgXCJcIik7XG5cdFx0cmV0dXJuIHBhcnNlRmxvYXQoY3M/LmdldFByb3BlcnR5VmFsdWU/LihuYW1lKT8ucmVwbGFjZT8uKFwicHhcIiwgXCJcIikpIHx8IDA7XG5cdH1cblx0cmV0dXJuIHBhcnNlRmxvYXQoKHNyYz8uc3R5bGUgPz8gc3JjKS5nZXRQcm9wZXJ0eVZhbHVlPy4obmFtZSk/LnJlcGxhY2U/LihcInB4XCIsIFwiXCIpKSB8fCAwO1xufTtcbnZhciBnZXRFbGVtZW50Wm9vbSA9IChlbGVtZW50KSA9PiB7XG5cdGxldCB6b29tID0gMSwgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuXHR3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcblx0XHRpZiAoXCJjdXJyZW50Q1NTWm9vbVwiIGluIGN1cnJlbnRFbGVtZW50KSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Q1NTWm9vbSA9IGN1cnJlbnRFbGVtZW50LmN1cnJlbnRDU1Nab29tO1xuXHRcdFx0aWYgKHR5cGVvZiBjdXJyZW50Q1NTWm9vbSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHpvb20gKj0gY3VycmVudENTU1pvb207XG5cdFx0fVxuXHRcdGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50RWxlbWVudCk7XG5cdFx0aWYgKHN0eWxlLnpvb20gJiYgc3R5bGUuem9vbSAhPT0gXCJub3JtYWxcIikgcmV0dXJuIHpvb20gKj0gcGFyc2VGbG9hdChzdHlsZS56b29tKTtcblx0XHRpZiAoc3R5bGUuem9vbSAmJiBzdHlsZS56b29tICE9PSBcIm5vcm1hbFwiIHx8IFwiY3VycmVudENTU1pvb21cIiBpbiBjdXJyZW50RWxlbWVudCkgcmV0dXJuIHpvb207XG5cdFx0Y3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudD8ub2Zmc2V0UGFyZW50ID8/IGN1cnJlbnRFbGVtZW50Py5wYXJlbnRFbGVtZW50O1xuXHR9XG5cdHJldHVybiB6b29tO1xufTtcbnZhciBnZXRQeFZhbHVlID0gKGVsZW1lbnQsIG5hbWUpID0+IHtcblx0cmV0dXJuIGdldFByb3BlcnR5VmFsdWU/LihlbGVtZW50LCBuYW1lKTtcbn07XG52YXIgZ2V0UGFkZGluZyA9IChzcmMsIGF4aXMpID0+IHtcblx0aWYgKGF4aXMgPT0gXCJpbmxpbmVcIikgcmV0dXJuIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctaW5saW5lLXN0YXJ0XCIpICsgZ2V0UHJvcGVydHlWYWx1ZShzcmMsIFwicGFkZGluZy1pbmxpbmUtZW5kXCIpO1xuXHRyZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZShzcmMsIFwicGFkZGluZy1ibG9jay1zdGFydFwiKSArIGdldFByb3BlcnR5VmFsdWUoc3JjLCBcInBhZGRpbmctYmxvY2stZW5kXCIpO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2Nzc29tLnRzXG52YXIgc3R5bGVFbGVtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIikgOiBudWxsO1xuaWYgKHN0eWxlRWxlbWVudCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaGVhZFwiKT8uYXBwZW5kQ2hpbGQ/LihzdHlsZUVsZW1lbnQpO1xuXHRzdHlsZUVsZW1lbnQuZGF0YXNldC5vd25lciA9IFwiRE9NXCI7XG59XG52YXIgc2V0U3R5bGVVUkwgPSAoYmFzZSwgdXJsLCBsYXllciA9IFwiXCIpID0+IHtcblx0YmFzZVswXVtiYXNlWzFdXSA9IGJhc2VbMV0gPT0gXCJpbm5lckhUTUxcIiA/IGNzc0ltcG9ydFdpdGhMYXllcih1cmwsIGxheWVyKSA6IHVybDtcbn07XG52YXIgc2V0U3R5bGVSdWxlcyA9IChjbGFzc2VzKSA9PiB7XG5cdHJldHVybiBjbGFzc2VzPy5tYXA/LigoYXJncykgPT4gc2V0U3R5bGVSdWxlKC4uLmFyZ3MpKTtcbn07XG52YXIgZ2V0U3R5bGVMYXllciA9IChsYXllck5hbWUsIHNoZWV0KSA9PiB7XG5cdHNoZWV0IHx8PSBzdHlsZUVsZW1lbnQ/LnNoZWV0O1xuXHRyZXR1cm4gZ2V0T3JDcmVhdGVMYXllclJ1bGUoc2hlZXQsIGxheWVyTmFtZSk7XG59O1xudmFyIGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvciA9IChlbGVtZW50KSA9PiB7XG5cdGlmIChlbGVtZW50LmlkKSByZXR1cm4gYCMke2VzY2FwZUNTU0lkZW50aWZpZXIoZWxlbWVudC5pZCl9YDtcblx0bGV0IHN0eWxlSWQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtc3R5bGUtaWRcIik7XG5cdGlmICghc3R5bGVJZCkge1xuXHRcdHN0eWxlSWQgPSBjcmVhdGVTdHlsZUlkKCk7XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN0eWxlLWlkXCIsIHN0eWxlSWQpO1xuXHR9XG5cdHJldHVybiBgW2RhdGEtc3R5bGUtaWQ9XCIke2VzY2FwZUNTU0lkZW50aWZpZXIoc3R5bGVJZCl9XCJdYDtcbn07XG52YXIgam9pblNjb3BlZFNlbGVjdG9yID0gKHNjb3BlLCBzZWxlY3RvcikgPT4ge1xuXHRzZWxlY3RvciA9IHNlbGVjdG9yLnRyaW0oKTtcblx0aWYgKCFzY29wZSkgcmV0dXJuIHNlbGVjdG9yO1xuXHRpZiAoIXNlbGVjdG9yKSByZXR1cm4gc2NvcGU7XG5cdGlmIChzZWxlY3Rvci5zdGFydHNXaXRoKFwiOjpcIikpIHJldHVybiBgJHtzY29wZX0ke3NlbGVjdG9yfWA7XG5cdHJldHVybiBgJHtzY29wZX0gJHtzZWxlY3Rvcn1gO1xufTtcbnZhciBmaW5kU3R5bGVSdWxlID0gKHNoZWV0LCBmdWxsU2VsZWN0b3IsIHNjb3BlLCBzZWxlY3RvcikgPT4ge1xuXHRjb25zdCBydWxlcyA9IEFycmF5LmZyb20oc2hlZXQ/LmNzc1J1bGVzIHx8IFtdKTtcblx0Y29uc3QgZXhwZWN0ZWQgPSBmdWxsU2VsZWN0b3IudHJpbSgpO1xuXHRjb25zdCByZXF1ZXN0ZWQgPSBzZWxlY3Rvci50cmltKCk7XG5cdHJldHVybiBydWxlcy5maW5kSW5kZXgoKHJ1bGUpID0+IHtcblx0XHRpZiAoIShydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IGFjdHVhbCA9IHJ1bGUuc2VsZWN0b3JUZXh0Py50cmltPy4oKSA/PyBcIlwiO1xuXHRcdGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAocmVxdWVzdGVkICYmIGFjdHVhbC5lbmRzV2l0aChyZXF1ZXN0ZWQpKSByZXR1cm4gYWN0dWFsLnNsaWNlKDAsIGFjdHVhbC5sZW5ndGggLSByZXF1ZXN0ZWQubGVuZ3RoKS50cmltKCkgPT09IHNjb3BlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59O1xudmFyIGdldFN0eWxlUnVsZSA9IChzZWxlY3Rvciwgc2hlZXQsIGxheWVyTmFtZSA9IFwidXgtcXVlcnlcIiwgYmFzaXMgPSBudWxsKSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBpc1NoYWRvd1Jvb3QoYmFzaXMpIHx8IGlzRG9jdW1lbnQoYmFzaXMpID8gYmFzaXMgOiBiYXNpcz8uZ2V0Um9vdE5vZGU/LigpID8/ICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudCA6IG51bGwpO1xuXHRjb25zdCBiYXNpc0VsZW1lbnQgPSBpc0Nzc0VsZW1lbnQoYmFzaXMpID8gYmFzaXMgOiBudWxsO1xuXHRsZXQgc2NvcGUgPSBcIlwiO1xuXHRpZiAoYmFzaXNFbGVtZW50KSBzY29wZSA9IGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvcihiYXNpc0VsZW1lbnQpO1xuXHRlbHNlIGlmIChpc1NoYWRvd1Jvb3Qocm9vdCkpIHNjb3BlID0gXCI6aG9zdFwiO1xuXHRlbHNlIGlmIChpc0RvY3VtZW50KHJvb3QpKSBzY29wZSA9IFwiOnJvb3RcIjtcblx0bGV0IHN0eWxlRWxlbWVudCA9IG51bGw7XG5cdGlmIChpc1NoYWRvd1Jvb3Qocm9vdCkpIHtcblx0XHRzdHlsZUVsZW1lbnQgPSByb290LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLXV4LXF1ZXJ5XVwiKTtcblx0XHRpZiAoIXN0eWxlRWxlbWVudCAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0XHRcdHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXV4LXF1ZXJ5XCIsIFwiXCIpO1xuXHRcdFx0cm9vdC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuXHRcdH1cblx0fSBlbHNlIHN0eWxlRWxlbWVudCA9IHN0eWxlRWxlbWVudEdsb2JhbCgpO1xuXHRzaGVldCB8fD0gc3R5bGVFbGVtZW50Py5zaGVldDtcblx0aWYgKCFzaGVldCkgcmV0dXJuO1xuXHRpZiAobGF5ZXJOYW1lKSByZXR1cm4gZ2V0U3R5bGVSdWxlKHNlbGVjdG9yLCBnZXRTdHlsZUxheWVyKGxheWVyTmFtZSwgc2hlZXQpLCBudWxsLCBiYXNpcyk7XG5cdGNvbnN0IGZ1bGxTZWxlY3RvciA9IGpvaW5TY29wZWRTZWxlY3RvcihzY29wZSwgc2VsZWN0b3IpO1xuXHRsZXQgcnVsZUlkID0gZmluZFN0eWxlUnVsZShzaGVldCwgZnVsbFNlbGVjdG9yLCBzY29wZSwgc2VsZWN0b3IpO1xuXHRpZiAocnVsZUlkID09PSAtMSkgcnVsZUlkID0gc2hlZXQuaW5zZXJ0UnVsZShgJHtmdWxsU2VsZWN0b3J9IHt9YCk7XG5cdHJldHVybiBzaGVldC5jc3NSdWxlcz8uW3J1bGVJZF07XG59O1xuZnVuY3Rpb24gc3R5bGVFbGVtZW50R2xvYmFsKCkge1xuXHRyZXR1cm4gc3R5bGVFbGVtZW50ID8/IG51bGw7XG59XG52YXIgZmV0Y2hBbmRDYWNoZSA9ICh1cmwpID0+IHtcblx0aWYgKCF1cmwpIHJldHVybiBudWxsO1xuXHRpZiAoY2FjaGVNYXAuaGFzKHVybCkpIHJldHVybiBjYWNoZU1hcC5nZXQodXJsKTtcblx0aWYgKHVybCBpbnN0YW5jZW9mIEJsb2IgfHwgdXJsIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGlmIChibG9iVVJMTWFwLmhhcyh1cmwpKSByZXR1cm4gYmxvYlVSTE1hcC5nZXQodXJsKTtcblx0XHRjb25zdCBidXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTCh1cmwpO1xuXHRcdGJsb2JVUkxNYXAuc2V0KHVybCwgYnVybCk7XG5cdFx0Y2FjaGVNYXAuc2V0KGJ1cmwsIGJ1cmwpO1xuXHRcdHJldHVybiBidXJsO1xuXHR9XG5cdGlmIChVUkwuY2FuUGFyc2UodXJsKSB8fCB1cmw/LnRyaW0/LigpPy5zdGFydHNXaXRoPy4oXCIuL1wiKSkge1xuXHRcdGNvbnN0IHByb21pc2VkID0gZmV0Y2godXJsPy5yZXBsYWNlPy4oXCI/dXJsXCIsIFwiP3Jhd1wiKSwge1xuXHRcdFx0Y2FjaGU6IFwiZm9yY2UtY2FjaGVcIixcblx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHByaW9yaXR5OiBcImhpZ2hcIlxuXHRcdH0pPy50aGVuPy4oYXN5bmMgKHJlcykgPT4ge1xuXHRcdFx0Y29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG5cdFx0XHRjb25zdCBidXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblx0XHRcdGJsb2JVUkxNYXAuc2V0KGJsb2IsIGJ1cmwpO1xuXHRcdFx0Y2FjaGVNYXAuc2V0KHVybCwgYnVybCk7XG5cdFx0XHRjYWNoZU1hcC5zZXQoYnVybCwgYnVybCk7XG5cdFx0XHRyZXR1cm4gYnVybDtcblx0XHR9KTtcblx0XHRjYWNoZU1hcC5zZXQodXJsLCBwcm9taXNlZCk7XG5cdFx0cmV0dXJuIHByb21pc2VkO1xuXHR9XG5cdGlmICh0eXBlb2YgdXJsID09IFwic3RyaW5nXCIpIHtcblx0XHRjb25zdCBibG9iID0gbmV3IEJsb2IoW3VybF0sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXHRcdGNvbnN0IGJ1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdGJsb2JVUkxNYXAuc2V0KGJsb2IsIGJ1cmwpO1xuXHRcdGNhY2hlTWFwLnNldChidXJsLCBidXJsKTtcblx0XHRyZXR1cm4gYnVybDtcblx0fVxuXHRyZXR1cm4gdXJsO1xufTtcbnZhciBmZXRjaEFzSW5saW5lID0gKHVybCkgPT4ge1xuXHRpZiAoIXVybCkgcmV0dXJuIFwiXCI7XG5cdGlmIChjYWNoZUNvbnRlbnRNYXAuaGFzKHVybCkpIHJldHVybiBjYWNoZUNvbnRlbnRNYXAuZ2V0KHVybCkgPz8gXCJcIjtcblx0aWYgKHVybCBpbnN0YW5jZW9mIEJsb2IgfHwgdXJsIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGlmIChjYWNoZUJsb2JDb250ZW50TWFwLmhhcyh1cmwpKSByZXR1cm4gY2FjaGVCbG9iQ29udGVudE1hcC5nZXQodXJsKSA/PyBcIlwiO1xuXHRcdGNvbnN0IHByb21pc2VkID0gdXJsPy50ZXh0Py4oKT8udGhlbj8uKCh0ZXh0KSA9PiB7XG5cdFx0XHRjYWNoZUJsb2JDb250ZW50TWFwLnNldCh1cmwsIHRleHQpO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fSk7XG5cdFx0Y2FjaGVCbG9iQ29udGVudE1hcC5zZXQodXJsLCBwcm9taXNlZCk7XG5cdFx0cmV0dXJuIHByb21pc2VkO1xuXHR9XG5cdGlmIChVUkwuY2FuUGFyc2UodXJsKSB8fCB1cmw/LnRyaW0/LigpPy5zdGFydHNXaXRoPy4oXCIuL1wiKSkge1xuXHRcdGNvbnN0IHByb21pc2VkID0gZmV0Y2godXJsPy5yZXBsYWNlPy4oXCI/dXJsXCIsIFwiP3Jhd1wiKSwge1xuXHRcdFx0Y2FjaGU6IFwiZm9yY2UtY2FjaGVcIixcblx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHByaW9yaXR5OiBcImhpZ2hcIlxuXHRcdH0pPy50aGVuPy4oYXN5bmMgKHJlcykgPT4ge1xuXHRcdFx0Y29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG5cdFx0XHRjYWNoZUNvbnRlbnRNYXAuc2V0KHVybCwgdGV4dCk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9KTtcblx0XHRjYWNoZUNvbnRlbnRNYXAuc2V0KHVybCwgcHJvbWlzZWQpO1xuXHRcdHJldHVybiBwcm9taXNlZDtcblx0fVxuXHRpZiAodHlwZW9mIHVybCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0Y2FjaGVDb250ZW50TWFwLnNldCh1cmwsIHVybCk7XG5cdFx0cmV0dXJuIHVybDtcblx0fVxuXHRyZXR1cm4gdXJsO1xufTtcbnZhciBnZXRBZG9wdGVkU3R5bGVSdWxlID0gKHNlbGVjdG9yLCBsYXllck5hbWUgPSBcInV4LXF1ZXJ5XCIsIGJhc2lzID0gbnVsbCkgPT4ge1xuXHRpZiAoIXNlbGVjdG9yKSByZXR1cm4gbnVsbDtcblx0aWYgKCFzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0KCkpIHJldHVybiBudWxsO1xuXHRjb25zdCByb290ID0gaXNTaGFkb3dSb290KGJhc2lzKSA/IGJhc2lzIDogYmFzaXM/LmdldFJvb3ROb2RlID8gYmFzaXMuZ2V0Um9vdE5vZGUoeyBjb21wb3NlZDogdHJ1ZSB9KSA6IG51bGw7XG5cdGNvbnN0IGluU2hhZG93ID0gaXNTaGFkb3dSb290KHJvb3QpO1xuXHRjb25zdCB0YXJnZXRBZG9wdGVkU2hlZXRzID0gaW5TaGFkb3cgPyByb290LmFkb3B0ZWRTdHlsZVNoZWV0cyA6IHR5cGVvZiBkb2N1bWVudCAhPSBcInVuZGVmaW5lZFwiID8gZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzIDogbnVsbDtcblx0aWYgKCF0YXJnZXRBZG9wdGVkU2hlZXRzKSByZXR1cm4gbnVsbDtcblx0Y29uc3Qgc2VsZWN0b3JLZXkgPSBgJHtsYXllck5hbWUgfHwgXCJcIn06JHtzZWxlY3Rvcn1gO1xuXHRsZXQgc2hlZXQ7XG5cdGlmIChpblNoYWRvdykge1xuXHRcdGxldCBzaGFkb3dNYXAgPSBhZG9wdGVkU2hhZG93U2VsZWN0b3JNYXAuZ2V0KHJvb3QpO1xuXHRcdGlmICghc2hhZG93TWFwKSB7XG5cdFx0XHRzaGFkb3dNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0YWRvcHRlZFNoYWRvd1NlbGVjdG9yTWFwLnNldChyb290LCBzaGFkb3dNYXApO1xuXHRcdH1cblx0XHRzaGVldCA9IHNoYWRvd01hcC5nZXQoc2VsZWN0b3JLZXkpO1xuXHRcdGlmICghc2hlZXQpIHtcblx0XHRcdHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRcdHNoYWRvd01hcC5zZXQoc2VsZWN0b3JLZXksIHNoZWV0KTtcblx0XHRcdGlmICghdGFyZ2V0QWRvcHRlZFNoZWV0cy5pbmNsdWRlcyhzaGVldCkpIHRhcmdldEFkb3B0ZWRTaGVldHMucHVzaChzaGVldCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHNoZWV0ID0gYWRvcHRlZFNlbGVjdG9yTWFwLmdldChzZWxlY3RvcktleSk7XG5cdFx0aWYgKCFzaGVldCkge1xuXHRcdFx0c2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdFx0YWRvcHRlZFNlbGVjdG9yTWFwLnNldChzZWxlY3RvcktleSwgc2hlZXQpO1xuXHRcdFx0aWYgKCF0YXJnZXRBZG9wdGVkU2hlZXRzLmluY2x1ZGVzKHNoZWV0KSkgdGFyZ2V0QWRvcHRlZFNoZWV0cy5wdXNoKHNoZWV0KTtcblx0XHR9XG5cdH1cblx0aWYgKGxheWVyTmFtZSkge1xuXHRcdGxldCBsYXllclJ1bGU7XG5cdFx0aWYgKGluU2hhZG93KSB7XG5cdFx0XHRsZXQgc2hhZG93TGF5ZXJNYXAgPSBhZG9wdGVkU2hhZG93TGF5ZXJNYXAuZ2V0KHJvb3QpO1xuXHRcdFx0aWYgKCFzaGFkb3dMYXllck1hcCkge1xuXHRcdFx0XHRzaGFkb3dMYXllck1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdFx0XHRcdGFkb3B0ZWRTaGFkb3dMYXllck1hcC5zZXQocm9vdCwgc2hhZG93TGF5ZXJNYXApO1xuXHRcdFx0fVxuXHRcdFx0bGF5ZXJSdWxlID0gc2hhZG93TGF5ZXJNYXAuZ2V0KGxheWVyTmFtZSk7XG5cdFx0fSBlbHNlIGxheWVyUnVsZSA9IGFkb3B0ZWRMYXllck1hcC5nZXQobGF5ZXJOYW1lKTtcblx0XHRpZiAoIWxheWVyUnVsZSkge1xuXHRcdFx0bGF5ZXJSdWxlID0gZ2V0T3JDcmVhdGVMYXllclJ1bGUoc2hlZXQsIGxheWVyTmFtZSk7XG5cdFx0XHRpZiAobGF5ZXJSdWxlKSB7XG5cdFx0XHRcdGlmIChpblNoYWRvdykge1xuXHRcdFx0XHRcdGxldCBzaGFkb3dMYXllck1hcCA9IGFkb3B0ZWRTaGFkb3dMYXllck1hcC5nZXQocm9vdCk7XG5cdFx0XHRcdFx0aWYgKCFzaGFkb3dMYXllck1hcCkge1xuXHRcdFx0XHRcdFx0c2hhZG93TGF5ZXJNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRcdFx0XHRcdFx0YWRvcHRlZFNoYWRvd0xheWVyTWFwLnNldChyb290LCBzaGFkb3dMYXllck1hcCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNoYWRvd0xheWVyTWFwLnNldChsYXllck5hbWUsIGxheWVyUnVsZSk7XG5cdFx0XHRcdH0gZWxzZSBhZG9wdGVkTGF5ZXJNYXAuc2V0KGxheWVyTmFtZSwgbGF5ZXJSdWxlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGxheWVyUnVsZSkge1xuXHRcdFx0bGV0IGxheWVyUnVsZUluZGV4ID0gQXJyYXkuZnJvbShsYXllclJ1bGUuY3NzUnVsZXMgfHwgW10pLmZpbmRJbmRleCgocikgPT4gciBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSAmJiByLnNlbGVjdG9yVGV4dD8udHJpbT8uKCkgPT09IHNlbGVjdG9yPy50cmltPy4oKSk7XG5cdFx0XHRpZiAobGF5ZXJSdWxlSW5kZXggPT09IC0xKSB0cnkge1xuXHRcdFx0XHRsYXllclJ1bGVJbmRleCA9IGxheWVyUnVsZS5pbnNlcnRSdWxlKGAke3NlbGVjdG9yfSB7fWAsIGxheWVyUnVsZS5jc3NSdWxlcy5sZW5ndGgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBsYXllclJ1bGUuY3NzUnVsZXNbbGF5ZXJSdWxlSW5kZXhdO1xuXHRcdH1cblx0fVxuXHRsZXQgcnVsZUluZGV4ID0gQXJyYXkuZnJvbShzaGVldC5jc3NSdWxlcyB8fCBbXSkuZmluZEluZGV4KChydWxlKSA9PiBydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlICYmIHJ1bGUuc2VsZWN0b3JUZXh0Py50cmltPy4oKSA9PT0gc2VsZWN0b3I/LnRyaW0/LigpKTtcblx0aWYgKHJ1bGVJbmRleCA9PT0gLTEpIHRyeSB7XG5cdFx0cnVsZUluZGV4ID0gc2hlZXQuaW5zZXJ0UnVsZShgJHtzZWxlY3Rvcn0ge31gLCBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgcnVsZSA9IHNoZWV0LmNzc1J1bGVzW3J1bGVJbmRleF07XG5cdGlmIChydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKSByZXR1cm4gcnVsZTtcblx0cmV0dXJuIG51bGw7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvYmFrZXIudHNcbnZhciBpbnZhbGlkYXRpb25SZWFkeSA9IGZhbHNlO1xudmFyIGxhc3RGaW5nZXJwcmludCA9IFwiXCI7XG52YXIgcmViYWtlUXVldWVkID0gZmFsc2U7XG52YXIgbm9ybWFsaXplQ2F0ZWdvcmllcyA9IChjYXRlZ29yaWVzKSA9PiB7XG5cdGNvbnN0IGxpc3QgPSBbLi4uY2F0ZWdvcmllcz8ubGVuZ3RoID8gY2F0ZWdvcmllcyA6IERFRkFVTFRfQ0FURUdPUklFU107XG5cdHJldHVybiBbLi4ubmV3IFNldChsaXN0LmZpbHRlcihCb29sZWFuKSldO1xufTtcbnZhciBjYWNoZUtleUZvciA9IChzZWxlY3RvciwgY2F0ZWdvcmllcykgPT4gYCR7c2VsZWN0b3J9XFwwJHtbLi4uY2F0ZWdvcmllc10uc29ydCgpLmpvaW4oXCIsXCIpfWA7XG52YXIgYmFrZVRoZW1lRmluZ2VycHJpbnQgPSAocm9vdCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IG51bGwsIGVsKSA9PiB7XG5cdGlmICghcm9vdCB8fCB0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gXCJcIjtcblx0Y29uc3QgY3MgPSBnZXRDb21wdXRlZFN0eWxlKHJvb3QpO1xuXHRjb25zdCBwYXJ0cyA9IFtcblx0XHRyb290LmdldEF0dHJpYnV0ZT8uKFwiZGF0YS10aGVtZVwiKSB8fCByb290LmdldEF0dHJpYnV0ZT8uKFwidGhlbWVcIikgfHwgXCJcIixcblx0XHRyb290LmdldEF0dHJpYnV0ZT8uKFwiZGF0YS1jb2xvci1zY2hlbWVcIikgfHwgcm9vdC5nZXRBdHRyaWJ1dGU/LihcImNvbG9yLXNjaGVtZVwiKSB8fCBjcy5jb2xvclNjaGVtZSB8fCBcIlwiLFxuXHRcdGNzLmdldFByb3BlcnR5VmFsdWUoXCItLWJhc2UtY29sb3JcIikudHJpbSgpLFxuXHRcdGNzLmdldFByb3BlcnR5VmFsdWUoXCItLWNvbG9yLXByaW1hcnlcIikudHJpbSgpXG5cdF07XG5cdGlmIChlbCAmJiBlbCAhPT0gcm9vdCkge1xuXHRcdGNvbnN0IGxvY2FsID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0cGFydHMucHVzaChlbC5nZXRBdHRyaWJ1dGU/LihcImRhdGEtdGhlbWVcIikgfHwgXCJcIiwgbG9jYWwuZ2V0UHJvcGVydHlWYWx1ZShcIi0tYmFzZS1jb2xvclwiKS50cmltKCkpO1xuXHR9XG5cdHJldHVybiBwYXJ0cy5qb2luKFwifFwiKTtcbn07XG52YXIgdGFrZVByb3AgPSAoaW50bywgY3MsIG5hbWUpID0+IHtcblx0Y29uc3QgdmFsdWUgPSBjcy5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpPy50cmltKCk7XG5cdGlmICghdmFsdWUpIHJldHVybjtcblx0aW50by5zZXQobmFtZSwgdmFsdWUpO1xufTtcbnZhciBjb2xsZWN0QmFrZWREZWNsYXJhdGlvbnMgPSAoY3MsIGNhdGVnb3JpZXMpID0+IHtcblx0Y29uc3QgaW50byA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHNldCA9IG5ldyBTZXQoY2F0ZWdvcmllcyk7XG5cdGlmIChzZXQuaGFzKFwidG9rZW5zXCIpIHx8IHNldC5oYXMoXCJjb2xvcnNcIikpIGZvciAobGV0IGkgPSAwOyBpIDwgY3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBuYW1lID0gY3MuaXRlbShpKTtcblx0XHRpZiAoIW5hbWUuc3RhcnRzV2l0aChcIi0tXCIpKSBjb250aW51ZTtcblx0XHRpZiAoc2V0LmhhcyhcInRva2Vuc1wiKSB8fCBpc0NvbG9yVG9rZW4obmFtZSkpIHRha2VQcm9wKGludG8sIGNzLCBuYW1lKTtcblx0fVxuXHRpZiAoc2V0LmhhcyhcImNvbG9yc1wiKSkgZm9yIChjb25zdCBuYW1lIG9mIENTU19DT0xPUl9QUk9QRVJUSUVTKSB0YWtlUHJvcChpbnRvLCBjcywgbmFtZSk7XG5cdGlmIChzZXQuaGFzKFwidHlwb2dyYXBoeVwiKSkgZm9yIChjb25zdCBuYW1lIG9mIENTU19UWVBPR1JBUEhZX1BST1BFUlRJRVMpIHRha2VQcm9wKGludG8sIGNzLCBuYW1lKTtcblx0aWYgKHNldC5oYXMoXCJtb3Rpb25cIikpIGZvciAoY29uc3QgbmFtZSBvZiBDU1NfTU9USU9OX1BST1BFUlRJRVMpIHRha2VQcm9wKGludG8sIGNzLCBuYW1lKTtcblx0cmV0dXJuIGludG87XG59O1xudmFyIGJ1aWxkQmFrZWRDc3NUZXh0ID0gKHNlbGVjdG9yLCBkZWNsYXJhdGlvbnMsIGxheWVyID0gQkFLRV9MQVlFUikgPT4ge1xuXHRjb25zdCBib2R5ID0gW107XG5cdGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBkZWNsYXJhdGlvbnMpIHtcblx0XHRpZiAoIW5hbWUgfHwgIXZhbHVlKSBjb250aW51ZTtcblx0XHRib2R5LnB1c2goYCR7bmFtZX06ICR7dmFsdWV9O2ApO1xuXHR9XG5cdGlmICghYm9keS5sZW5ndGgpIHJldHVybiBcIlwiO1xuXHRyZXR1cm4gW2Nzc0xheWVyT3JkZXIobGF5ZXIpLCBjc3NMYXllckJsb2NrKGxheWVyLCBgJHtzZWxlY3Rvcn0ge1xcbiR7Ym9keS5qb2luKFwiXFxuXCIpfVxcbn1gKV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCJcIik7XG59O1xudmFyIGFkb3B0ZWRMaXN0ID0gKGVsKSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBlbC5nZXRSb290Tm9kZT8uKCk7XG5cdGlmICh0eXBlb2YgU2hhZG93Um9vdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkgcmV0dXJuIHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID8/IG51bGw7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMgPz8gbnVsbDtcblx0cmV0dXJuIG51bGw7XG59O1xudmFyIGFzc2lnbkFkb3B0ZWQgPSAoZWwsIG5leHQpID0+IHtcblx0Y29uc3Qgcm9vdCA9IGVsLmdldFJvb3ROb2RlPy4oKTtcblx0dHJ5IHtcblx0XHRpZiAodHlwZW9mIFNoYWRvd1Jvb3QgIT09IFwidW5kZWZpbmVkXCIgJiYgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcblx0XHRcdHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gbmV4dDtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikgZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzID0gbmV4dDtcblx0fSBjYXRjaCB7fVxufTtcbnZhciBhZG9wdFNoZWV0ID0gKGVsLCBiYWtlZCkgPT4ge1xuXHRpZiAoYmFrZWQuc2hlZXQgJiYgc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCgpKSB7XG5cdFx0Y29uc3QgbGlzdCA9IGFkb3B0ZWRMaXN0KGVsKTtcblx0XHRpZiAoIWxpc3QpIHJldHVybjtcblx0XHRpZiAobGlzdC5pbmNsdWRlcyhiYWtlZC5zaGVldCkpIHtcblx0XHRcdGJha2VkLmFkb3B0ZWQgPSB0cnVlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0bGlzdC5wdXNoKGJha2VkLnNoZWV0KTtcblx0XHRcdGJha2VkLmFkb3B0ZWQgPSB0cnVlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0YXNzaWduQWRvcHRlZChlbCwgWy4uLmxpc3QsIGJha2VkLnNoZWV0XSk7XG5cdFx0XHRiYWtlZC5hZG9wdGVkID0gdHJ1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblx0aWYgKGJha2VkLnN0eWxlRWwgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0aWYgKCFiYWtlZC5zdHlsZUVsLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5oZWFkPy5hcHBlbmQoYmFrZWQuc3R5bGVFbCk7XG5cdFx0YmFrZWQuYWRvcHRlZCA9IHRydWU7XG5cdH1cbn07XG52YXIgdW5hZG9wdFNoZWV0ID0gKGVsLCBiYWtlZCkgPT4ge1xuXHRpZiAoYmFrZWQuc2hlZXQgJiYgc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCgpKSB7XG5cdFx0Y29uc3QgbGlzdCA9IGFkb3B0ZWRMaXN0KGVsKTtcblx0XHRpZiAobGlzdCkge1xuXHRcdFx0Y29uc3QgaWR4ID0gbGlzdC5pbmRleE9mKGJha2VkLnNoZWV0KTtcblx0XHRcdGlmIChpZHggIT09IC0xKSB0cnkge1xuXHRcdFx0XHRsaXN0LnNwbGljZShpZHgsIDEpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdGFzc2lnbkFkb3B0ZWQoZWwsIGxpc3QuZmlsdGVyKChzaGVldCkgPT4gc2hlZXQgIT09IGJha2VkLnNoZWV0KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGJha2VkLnN0eWxlRWw/LnJlbW92ZSgpO1xuXHRiYWtlZC5hZG9wdGVkID0gZmFsc2U7XG59O1xudmFyIHdyaXRlQmFrZWRDc3MgPSAoYmFrZWQsIGNzc1RleHQpID0+IHtcblx0YmFrZWQuY3NzVGV4dCA9IGNzc1RleHQ7XG5cdGlmICghY3NzVGV4dCkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoYmFrZWQuc2hlZXQgJiYgc3VwcG9ydHNDb25zdHJ1Y3RhYmxlU3R5bGVzaGVldCgpKSB0cnkge1xuXHRcdGJha2VkLnNoZWV0LnJlcGxhY2VTeW5jKGNzc1RleHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdGNvbnNvbGUud2FybihcIltzdHlsZS1saWJdIGJha2UgcmVwbGFjZVN5bmMgZmFpbGVkXCIsIGVycm9yKTtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKGJha2VkLnN0eWxlRWwpIHtcblx0XHRiYWtlZC5zdHlsZUVsLnRleHRDb250ZW50ID0gY3NzVGV4dDtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xudmFyIHJlbWVtYmVyQ2FjaGUgPSAoYmFrZWQsIGNhY2hlTXMpID0+IHtcblx0Y29uc3QgcHJldiA9IGJha2VkQ2FjaGUuZ2V0KGJha2VkLmNhY2hlS2V5KTtcblx0aWYgKHByZXY/LnRpbWVyKSBjbGVhclRpbWVvdXQocHJldi50aW1lcik7XG5cdGNvbnN0IGVudHJ5ID0ge1xuXHRcdGNzc1RleHQ6IGJha2VkLmNzc1RleHQsXG5cdFx0ZmluZ2VycHJpbnQ6IGJha2VkLmZpbmdlcnByaW50LFxuXHRcdGNhdGVnb3JpZXM6IGJha2VkLmNhdGVnb3JpZXMsXG5cdFx0c2VsZWN0b3I6IGJha2VkLnNlbGVjdG9yLFxuXHRcdGV4cGlyZXM6IERhdGUubm93KCkgKyBjYWNoZU1zXG5cdH07XG5cdGlmIChjYWNoZU1zID4gMCAmJiB0eXBlb2Ygc2V0VGltZW91dCA9PT0gXCJmdW5jdGlvblwiKSBlbnRyeS50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGlmIChiYWtlZENhY2hlLmdldChiYWtlZC5jYWNoZUtleSkgPT09IGVudHJ5KSBiYWtlZENhY2hlLmRlbGV0ZShiYWtlZC5jYWNoZUtleSk7XG5cdH0sIGNhY2hlTXMpO1xuXHRiYWtlZENhY2hlLnNldChiYWtlZC5jYWNoZUtleSwgZW50cnkpO1xufTtcbnZhciBkcm9wQ2FjaGUgPSAoY2FjaGVLZXkpID0+IHtcblx0Y29uc3QgcHJldiA9IGJha2VkQ2FjaGUuZ2V0KGNhY2hlS2V5KTtcblx0aWYgKHByZXY/LnRpbWVyKSBjbGVhclRpbWVvdXQocHJldi50aW1lcik7XG5cdGJha2VkQ2FjaGUuZGVsZXRlKGNhY2hlS2V5KTtcbn07XG52YXIgY2xlYXJBbGxDYWNoZSA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBlbnRyeSBvZiBiYWtlZENhY2hlLnZhbHVlcygpKSBpZiAoZW50cnkudGltZXIpIGNsZWFyVGltZW91dChlbnRyeS50aW1lcik7XG5cdGJha2VkQ2FjaGUuY2xlYXIoKTtcbn07XG52YXIgcGFya0Jha2VkID0gKGVsLCBjYWNoZU1zID0gREVGQVVMVF9DQUNIRV9NUykgPT4ge1xuXHRjb25zdCBiYWtlZCA9IGJha2VkU3R5bGVzLmdldChlbCk7XG5cdGlmICghYmFrZWQpIHJldHVybjtcblx0aWYgKGJha2VkLmFkb3B0ZWQpIHVuYWRvcHRTaGVldChlbCwgYmFrZWQpO1xuXHRiYWtlZExpdmUuZGVsZXRlKGVsKTtcblx0aWYgKGJha2VkLmNzc1RleHQpIHJlbWVtYmVyQ2FjaGUoYmFrZWQsIGNhY2hlTXMpO1xufTtcbnZhciByZXN1bWVCYWtlZCA9IChlbCwgY2FjaGVNcyA9IERFRkFVTFRfQ0FDSEVfTVMpID0+IHtcblx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRpZiAoIWJha2VkIHx8ICFlbC5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBmaW5nZXJwcmludCA9IGJha2VUaGVtZUZpbmdlcnByaW50KHZvaWQgMCwgZWwpO1xuXHRjb25zdCBjYWNoZWQgPSBiYWtlZENhY2hlLmdldChiYWtlZC5jYWNoZUtleSk7XG5cdGlmICghYmFrZWQuY3NzVGV4dCAmJiBjYWNoZWQgJiYgY2FjaGVkLmZpbmdlcnByaW50ID09PSBmaW5nZXJwcmludCkge1xuXHRcdHdyaXRlQmFrZWRDc3MoYmFrZWQsIGNhY2hlZC5jc3NUZXh0KTtcblx0XHRiYWtlZC5maW5nZXJwcmludCA9IGNhY2hlZC5maW5nZXJwcmludDtcblx0fVxuXHRpZiAoIWJha2VkLmNzc1RleHQgfHwgYmFrZWQuZmluZ2VycHJpbnQgIT09IGZpbmdlcnByaW50KSB7XG5cdFx0YmFrZUNvbXB1dGVkU3R5bGUoZWwsIHtcblx0XHRcdGNhdGVnb3JpZXM6IGJha2VkLmNhdGVnb3JpZXMsXG5cdFx0XHRjYWNoZU1zLFxuXHRcdFx0bGF5ZXI6IEJBS0VfTEFZRVJcblx0XHR9KTtcblx0XHRyZXR1cm47XG5cdH1cblx0YWRvcHRTaGVldChlbCwgYmFrZWQpO1xuXHRiYWtlZExpdmUuYWRkKGVsKTtcbn07XG52YXIgYmFrZUlPID0gbnVsbDtcbnZhciBlbnN1cmVCYWtlSU8gPSAoKSA9PiB7XG5cdGlmIChiYWtlSU8gfHwgdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gYmFrZUlPO1xuXHRiYWtlSU8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcblx0XHRcdGNvbnN0IGVsID0gZW50cnkudGFyZ2V0O1xuXHRcdFx0aWYgKCFiYWtlZFN0eWxlcy5oYXMoZWwpKSBjb250aW51ZTtcblx0XHRcdGlmIChlbnRyeS5pc0ludGVyc2VjdGluZyAmJiBlbC5pc0Nvbm5lY3RlZCkgcmVzdW1lQmFrZWQoZWwpO1xuXHRcdFx0ZWxzZSBwYXJrQmFrZWQoZWwpO1xuXHRcdH1cblx0fSwgeyB0aHJlc2hvbGQ6IDAgfSk7XG5cdHJldHVybiBiYWtlSU87XG59O1xudmFyIGVuc3VyZUJha2VkUmVjb3JkID0gKGVsLCBzZWxlY3RvciwgY2F0ZWdvcmllcykgPT4ge1xuXHRsZXQgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRpZiAoYmFrZWQpIHtcblx0XHRiYWtlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdGJha2VkLmNhdGVnb3JpZXMgPSBjYXRlZ29yaWVzO1xuXHRcdGJha2VkLmNhY2hlS2V5ID0gY2FjaGVLZXlGb3Ioc2VsZWN0b3IsIGNhdGVnb3JpZXMpO1xuXHRcdHJldHVybiBiYWtlZDtcblx0fVxuXHRjb25zdCBjYW5Db25zdHJ1Y3QgPSBzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0KCk7XG5cdGJha2VkID0ge1xuXHRcdHNoZWV0OiBjYW5Db25zdHJ1Y3QgPyBuZXcgQ1NTU3R5bGVTaGVldCgpIDogbnVsbCxcblx0XHRzdHlsZUVsOiBjYW5Db25zdHJ1Y3QgfHwgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiID8gbnVsbCA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSxcblx0XHRzZWxlY3Rvcixcblx0XHRjYXRlZ29yaWVzLFxuXHRcdGNzc1RleHQ6IFwiXCIsXG5cdFx0ZmluZ2VycHJpbnQ6IFwiXCIsXG5cdFx0YWRvcHRlZDogZmFsc2UsXG5cdFx0Y2FjaGVLZXk6IGNhY2hlS2V5Rm9yKHNlbGVjdG9yLCBjYXRlZ29yaWVzKVxuXHR9O1xuXHRpZiAoYmFrZWQuc3R5bGVFbCkge1xuXHRcdGJha2VkLnN0eWxlRWwuZGF0YXNldC51eEJha2VkID0gXCJcIjtcblx0XHRiYWtlZC5zdHlsZUVsLmRhdGFzZXQub3duZXIgPSBcInN0eWxlLWxpYlwiO1xuXHR9XG5cdGJha2VkU3R5bGVzLnNldChlbCwgYmFrZWQpO1xuXHRlbnN1cmVCYWtlSU8oKT8ub2JzZXJ2ZShlbCk7XG5cdHJldHVybiBiYWtlZDtcbn07XG52YXIgZmx1c2hSZWJha2UgPSAoKSA9PiB7XG5cdHJlYmFrZVF1ZXVlZCA9IGZhbHNlO1xuXHRjb25zdCBiYXRjaCA9IFsuLi5yZWJha2VCYXRjaF07XG5cdHJlYmFrZUJhdGNoLmNsZWFyKCk7XG5cdGZvciAoY29uc3QgZWwgb2YgYmF0Y2gpIHtcblx0XHRpZiAoIWVsLmlzQ29ubmVjdGVkIHx8ICFiYWtlZFN0eWxlcy5oYXMoZWwpKSBjb250aW51ZTtcblx0XHRiYWtlQ29tcHV0ZWRTdHlsZShlbCk7XG5cdH1cbn07XG52YXIgc2NoZWR1bGVSZWJha2UgPSAoZWwpID0+IHtcblx0cmViYWtlQmF0Y2guYWRkKGVsKTtcblx0aWYgKHJlYmFrZVF1ZXVlZCkgcmV0dXJuO1xuXHRyZWJha2VRdWV1ZWQgPSB0cnVlO1xuXHRxdWV1ZU1pY3JvdGFzayhmbHVzaFJlYmFrZSk7XG59O1xudmFyIGludmFsaWRhdGVCYWtlZFN0eWxlcyA9IChyZWFzb24gPSBcInRoZW1lXCIpID0+IHtcblx0Y29uc3QgZmluZ2VycHJpbnQgPSBiYWtlVGhlbWVGaW5nZXJwcmludCgpO1xuXHRpZiAocmVhc29uICE9PSBcImZvcmNlXCIgJiYgZmluZ2VycHJpbnQgPT09IGxhc3RGaW5nZXJwcmludCAmJiBsYXN0RmluZ2VycHJpbnQpIHJldHVybjtcblx0bGFzdEZpbmdlcnByaW50ID0gZmluZ2VycHJpbnQ7XG5cdGNsZWFyQWxsQ2FjaGUoKTtcblx0Zm9yIChjb25zdCBlbCBvZiBbLi4uYmFrZWRMaXZlXSkge1xuXHRcdGNvbnN0IGJha2VkID0gYmFrZWRTdHlsZXMuZ2V0KGVsKTtcblx0XHRpZiAoIWJha2VkKSB7XG5cdFx0XHRiYWtlZExpdmUuZGVsZXRlKGVsKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHR1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZC5jc3NUZXh0ID0gXCJcIjtcblx0XHRiYWtlZC5maW5nZXJwcmludCA9IFwiXCI7XG5cdFx0c2NoZWR1bGVSZWJha2UoZWwpO1xuXHR9XG59O1xudmFyIGVuc3VyZUJha2VJbnZhbGlkYXRpb24gPSAoKSA9PiB7XG5cdGlmIChpbnZhbGlkYXRpb25SZWFkeSB8fCB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcblx0aW52YWxpZGF0aW9uUmVhZHkgPSB0cnVlO1xuXHRsYXN0RmluZ2VycHJpbnQgPSBiYWtlVGhlbWVGaW5nZXJwcmludCgpO1xuXHRyZWdpc3RlclN0eWxlVHJlZUhvb2soKGhvc3QpID0+IHtcblx0XHRpZiAoYmFrZVRoZW1lRmluZ2VycHJpbnQoKSAhPT0gbGFzdEZpbmdlcnByaW50KSB7XG5cdFx0XHRpbnZhbGlkYXRlQmFrZWRTdHlsZXMoXCJzdHlsZS10cmVlXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoaG9zdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGJha2VkU3R5bGVzLmhhcyhob3N0KSkgc2NoZWR1bGVSZWJha2UoaG9zdCk7XG5cdH0pO1xuXHR0cnkge1xuXHRcdG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IGludmFsaWRhdGVCYWtlZFN0eWxlcyhcInRoZW1lLWF0dHJcIikpLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7XG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbLi4uU1RZTEVfVEhFTUVfT0JTRVJWRV9BVFRSU11cblx0XHR9KTtcblx0fSBjYXRjaCB7fVxuXHR0cnkge1xuXHRcdChtYXRjaE1lZGlhPy4oXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpKT8uYWRkRXZlbnRMaXN0ZW5lcj8uKFwiY2hhbmdlXCIsICgpID0+IGludmFsaWRhdGVCYWtlZFN0eWxlcyhcImNvbG9yLXNjaGVtZVwiKSk7XG5cdH0gY2F0Y2gge31cbn07XG52YXIgYmFrZUNvbXB1dGVkU3R5bGUgPSAoZWwsIG9wdGlvbnMgPSB7fSkgPT4ge1xuXHRpZiAoIWVsIHx8IGVsLm5vZGVUeXBlICE9PSAxKSByZXR1cm4gbnVsbDtcblx0aWYgKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuXHRlbnN1cmVCYWtlSW52YWxpZGF0aW9uKCk7XG5cdGNvbnN0IGNhdGVnb3JpZXMgPSBub3JtYWxpemVDYXRlZ29yaWVzKG9wdGlvbnMuY2F0ZWdvcmllcyk7XG5cdGNvbnN0IGxheWVyID0gb3B0aW9ucy5sYXllciB8fCBcInV4LWJha2VkXCI7XG5cdGNvbnN0IGNhY2hlTXMgPSBvcHRpb25zLmNhY2hlTXMgPz8gM2U0O1xuXHRjb25zdCBzZWxlY3RvciA9IGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvcihlbCk7XG5cdGNvbnN0IGZpbmdlcnByaW50ID0gYmFrZVRoZW1lRmluZ2VycHJpbnQodm9pZCAwLCBlbCk7XG5cdGNvbnN0IGJha2VkID0gZW5zdXJlQmFrZWRSZWNvcmQoZWwsIHNlbGVjdG9yLCBjYXRlZ29yaWVzKTtcblx0YmFrZWQuZmluZ2VycHJpbnQgPSBmaW5nZXJwcmludDtcblx0Y29uc3QgY2FjaGVkID0gYmFrZWRDYWNoZS5nZXQoYmFrZWQuY2FjaGVLZXkpO1xuXHRsZXQgY3NzVGV4dCA9IFwiXCI7XG5cdGlmIChjYWNoZWQgJiYgY2FjaGVkLmZpbmdlcnByaW50ID09PSBmaW5nZXJwcmludCAmJiBjYWNoZWQuY3NzVGV4dCkgY3NzVGV4dCA9IGNhY2hlZC5jc3NUZXh0O1xuXHRlbHNlIHtcblx0XHRjb25zdCBjcyA9IGdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRcdGNzc1RleHQgPSBidWlsZEJha2VkQ3NzVGV4dChzZWxlY3RvciwgY29sbGVjdEJha2VkRGVjbGFyYXRpb25zKGNzLCBjYXRlZ29yaWVzKSwgbGF5ZXIpO1xuXHR9XG5cdGlmICghY3NzVGV4dCkge1xuXHRcdHVuYWRvcHRTaGVldChlbCwgYmFrZWQpO1xuXHRcdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRcdHJldHVybiBiYWtlZDtcblx0fVxuXHR3cml0ZUJha2VkQ3NzKGJha2VkLCBjc3NUZXh0KTtcblx0cmVtZW1iZXJDYWNoZShiYWtlZCwgY2FjaGVNcyk7XG5cdGlmIChpc0VsZW1lbnRWaXNpYmxlKGVsKSkge1xuXHRcdGFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZExpdmUuYWRkKGVsKTtcblx0fSBlbHNlIHtcblx0XHR1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZExpdmUuZGVsZXRlKGVsKTtcblx0fVxuXHRyZXR1cm4gYmFrZWQ7XG59O1xudmFyIHVuYmFrZUNvbXB1dGVkU3R5bGUgPSAoZWwsIGtlZXBDYWNoZSA9IHRydWUpID0+IHtcblx0aWYgKCFlbCkgcmV0dXJuO1xuXHRjb25zdCBiYWtlZCA9IGJha2VkU3R5bGVzLmdldChlbCk7XG5cdGlmICghYmFrZWQpIHJldHVybjtcblx0dW5hZG9wdFNoZWV0KGVsLCBiYWtlZCk7XG5cdGJha2VkTGl2ZS5kZWxldGUoZWwpO1xuXHRiYWtlSU8/LnVub2JzZXJ2ZShlbCk7XG5cdGlmIChrZWVwQ2FjaGUgJiYgYmFrZWQuY3NzVGV4dCkgcmVtZW1iZXJDYWNoZShiYWtlZCwgREVGQVVMVF9DQUNIRV9NUyk7XG5cdGVsc2UgZHJvcENhY2hlKGJha2VkLmNhY2hlS2V5KTtcblx0YmFrZWRTdHlsZXMuZGVsZXRlKGVsKTtcbn07XG52YXIgcmViYWtlQ29tcHV0ZWRTdHlsZSA9IChlbCwgb3B0aW9ucykgPT4ge1xuXHRpZiAoIWVsKSByZXR1cm4gbnVsbDtcblx0Y29uc3QgYmFrZWQgPSBiYWtlZFN0eWxlcy5nZXQoZWwpO1xuXHRpZiAoYmFrZWQpIHtcblx0XHR1bmFkb3B0U2hlZXQoZWwsIGJha2VkKTtcblx0XHRiYWtlZC5jc3NUZXh0ID0gXCJcIjtcblx0XHRkcm9wQ2FjaGUoYmFrZWQuY2FjaGVLZXkpO1xuXHR9XG5cdHJldHVybiBiYWtlQ29tcHV0ZWRTdHlsZShlbCwgb3B0aW9ucyA/PyAoYmFrZWQgPyB7IGNhdGVnb3JpZXM6IGJha2VkLmNhdGVnb3JpZXMgfSA6IHt9KSk7XG59O1xudmFyIGdldEJha2VkU3R5bGUgPSAoZWwpID0+IGVsID8gYmFrZWRTdHlsZXMuZ2V0KGVsKSA6IHZvaWQgMDtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2NvbXBvbmVudC50c1xudmFyIHN5bmNBZG9wdGVkU2hlZXRzVG9TaGFkb3cgPSAoYlRvKSA9PiB7XG5cdGNvbnN0IHJvb3QgPSBiVG8/LnNoYWRvd1Jvb3Q7XG5cdGlmICghcm9vdCkgcmV0dXJuO1xuXHRjb25zdCBhZG9wdGVkU2hlZXRzID0gYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuZ2V0KGJUbykgfHwgW107XG5cdGZvciAoY29uc3Qgc2hlZXQgb2YgYWRvcHRlZFNoZWV0cykgZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudChzaGVldCk7XG5cdHRyeSB7XG5cdFx0Y29uc3QgbGl2ZSA9IHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzIHx8IFtdO1xuXHRcdHJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gWy4uLmFkb3B0ZWRTaGVldHMuZmlsdGVyKChzKSA9PiAhbGl2ZS5pbmNsdWRlcyhzKSksIC4uLi8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KFsuLi5saXZlXSldO1xuXHR9IGNhdGNoIHt9XG59O1xudmFyIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudCA9IChiVG8sIHNoZWV0KSA9PiB7XG5cdGxldCBhZG9wdGVkU2hlZXRzID0gYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuZ2V0KGJUbyk7XG5cdGlmICghYWRvcHRlZFNoZWV0cykgYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUuc2V0KGJUbywgYWRvcHRlZFNoZWV0cyA9IFtdKTtcblx0aWYgKHNoZWV0ICYmIGFkb3B0ZWRTaGVldHMuaW5kZXhPZihzaGVldCkgPCAwKSBhZG9wdGVkU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRlbnN1cmVBZG9wdGVkU2hlZXRDb250ZW50KHNoZWV0KTtcblx0c3luY0Fkb3B0ZWRTaGVldHNUb1NoYWRvdyhiVG8pO1xufTtcbnZhciBlbnN1cmVTaGFkb3dDc3NGYWxsYmFjayA9IChiVG8sIGNzc1RleHQpID0+IHtcblx0Y29uc3Qgcm9vdCA9IGJUbz8uc2hhZG93Um9vdDtcblx0aWYgKCFyb290IHx8ICFjc3NUZXh0KSByZXR1cm4gbnVsbDtcblx0bGV0IHN0eWxlID0gcm9vdC5xdWVyeVNlbGVjdG9yPy4oYHN0eWxlWyR7SE9TVF9DU1NfRkFMTEJBQ0t9XWApO1xuXHRpZiAoIXN0eWxlKSB7XG5cdFx0c3R5bGUgPSBsb2FkSW5saW5lU3R5bGUoY3NzVGV4dCwgcm9vdCwgXCJcIik7XG5cdFx0aWYgKHN0eWxlKSBzdHlsZS5zZXRBdHRyaWJ1dGUoSE9TVF9DU1NfRkFMTEJBQ0ssIFwiXCIpO1xuXHR9IGVsc2UgaWYgKHN0eWxlLnRleHRDb250ZW50ICE9PSBjc3NUZXh0KSBzdHlsZS50ZXh0Q29udGVudCA9IGNzc1RleHQ7XG5cdHJldHVybiBzdHlsZTtcbn07XG52YXIgcmVoeWRyYXRlQWRvcHRlZFN0eWxlU2hlZXRzID0gKHJvb3QgPSB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgPyBkb2N1bWVudCA6IG51bGwpID0+IHtcblx0aWYgKCFyb290KSByZXR1cm47XG5cdGNvbnN0IHJlc3RvcmUgPSAoaG9zdCkgPT4ge1xuXHRcdGlmICghaG9zdD8uc2hhZG93Um9vdCkgcmV0dXJuO1xuXHRcdGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGhvc3QsIGhvc3RDc3NUZXh0KGhvc3QpKTtcblx0XHRzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93KGhvc3QpO1xuXHR9O1xuXHRpZiAocm9vdC5ub2RlVHlwZSA9PT0gMSkgcmVzdG9yZShyb290KTtcblx0Y29uc3QgdmlzaXQgPSAobm9kZSkgPT4ge1xuXHRcdGxldCBjaGlsZHJlbiA9IFtdO1xuXHRcdHRyeSB7XG5cdFx0XHRjaGlsZHJlbiA9IG5vZGUucXVlcnlTZWxlY3RvckFsbChcIipcIik7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGhvc3QgPSBjaGlsZHJlbltpXTtcblx0XHRcdGlmIChob3N0LnNoYWRvd1Jvb3QpIHtcblx0XHRcdFx0cmVzdG9yZShob3N0KTtcblx0XHRcdFx0dmlzaXQoaG9zdC5zaGFkb3dSb290KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHZpc2l0KHJvb3QpO1xufTtcbnZhciBob3N0Q3NzVGV4dCA9IChiVG8pID0+IHtcblx0Y29uc3Qgc3JjID0gYlRvPy5zdHlsZXM7XG5cdGlmICh0eXBlb2Ygc3JjID09PSBcInN0cmluZ1wiKSByZXR1cm4gc3JjO1xuXHRpZiAodHlwZW9mIHNyYyA9PT0gXCJmdW5jdGlvblwiKSB0cnkge1xuXHRcdGNvbnN0IG91dCA9IHNyYy5jYWxsKGJUbyk7XG5cdFx0aWYgKHR5cGVvZiBvdXQgPT09IFwic3RyaW5nXCIpIHJldHVybiBvdXQ7XG5cdFx0cmV0dXJuIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQob3V0KTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0cmV0dXJuIGNzc1RleHRGb3JBZG9wdGVkU2hlZXQoc3JjKTtcbn07XG52YXIgZW5zdXJlSG9zdFN0eWxlcyA9IChiVG8pID0+IHtcblx0aWYgKCFiVG8pIHJldHVybjtcblx0aWYgKGJUby5zdHlsZXMgIT0gbnVsbCkgbG9hZENhY2hlZFN0eWxlcyhiVG8sIGJUby5zdHlsZXMpO1xuXHRzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93KGJUbyk7XG5cdGVuc3VyZVNoYWRvd0Nzc0ZhbGxiYWNrKGJUbywgaG9zdENzc1RleHQoYlRvKSk7XG59O1xudmFyIHN0eWxlRmx1c2hCYXRjaCA9IFtdO1xudmFyIHN0eWxlRmx1c2hTY2hlZHVsZWQgPSBmYWxzZTtcbnZhciBzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMgPSAoYlRvKSA9PiB7XG5cdGlmICghYlRvIHx8ICEoYlRvIGluc3RhbmNlb2YgRWxlbWVudCkgfHwgc3R5bGVGbHVzaFBlbmRpbmcuaGFzKGJUbykpIHJldHVybjtcblx0c3R5bGVGbHVzaFBlbmRpbmcuYWRkKGJUbyk7XG5cdHN0eWxlRmx1c2hCYXRjaC5wdXNoKGJUbyk7XG5cdGlmIChzdHlsZUZsdXNoU2NoZWR1bGVkKSByZXR1cm47XG5cdHN0eWxlRmx1c2hTY2hlZHVsZWQgPSB0cnVlO1xuXHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0c3R5bGVGbHVzaFNjaGVkdWxlZCA9IGZhbHNlO1xuXHRcdGNvbnN0IGJhdGNoID0gc3R5bGVGbHVzaEJhdGNoO1xuXHRcdHN0eWxlRmx1c2hCYXRjaCA9IFtdO1xuXHRcdGZvciAoY29uc3QgaG9zdCBvZiBiYXRjaCkge1xuXHRcdFx0c3R5bGVGbHVzaFBlbmRpbmcuZGVsZXRlKGhvc3QpO1xuXHRcdFx0aWYgKGhvc3QuaXNDb25uZWN0ZWQpIGVuc3VyZUhvc3RTdHlsZXMoaG9zdCk7XG5cdFx0fVxuXHR9KTtcbn07XG5yZWdpc3RlclN0eWxlVHJlZUhvb2soKGVsKSA9PiBzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMoZWwpKTtcbnZhciBsb2FkQ2FjaGVkU3R5bGVzID0gKGJUbywgc3JjKSA9PiB7XG5cdGlmICghc3JjKSByZXR1cm4gbnVsbDtcblx0bGV0IHJlc29sdmVkU3JjID0gc3JjO1xuXHRpZiAodHlwZW9mIHNyYyA9PSBcImZ1bmN0aW9uXCIpIHRyeSB7XG5cdFx0Y29uc3Qgd2VhayA9IG5ldyBXZWFrUmVmKGJUbyk7XG5cdFx0cmVzb2x2ZWRTcmMgPSBzcmMuY2FsbChiVG8sIHdlYWspO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Y29uc29sZS53YXJuKFwiRXJyb3IgY2FsbGluZyBzdHlsZXMgZnVuY3Rpb246XCIsIGUpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmIChyZXNvbHZlZFNyYyAmJiB0eXBlb2YgQ1NTU3R5bGVTaGVldCAhPSBcInVuZGVmaW5lZFwiICYmIHJlc29sdmVkU3JjIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCkge1xuXHRcdGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHJlc29sdmVkU3JjKTtcblx0XHRyZXR1cm4gZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCBjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0KHJlc29sdmVkU3JjKSk7XG5cdH1cblx0aWYgKHJlc29sdmVkU3JjIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdHJlc29sdmVkU3JjLnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQpIGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHJlc3VsdCk7XG5cdFx0XHRlbHNlIGlmIChyZXN1bHQgIT0gbnVsbCkgbG9hZENhY2hlZFN0eWxlcyhiVG8sIHJlc3VsdCk7XG5cdFx0fSkuY2F0Y2goKGUpID0+IHtcblx0XHRcdGNvbnNvbGUud2FybihcIkVycm9yIGxvYWRpbmcgYWRvcHRlZCBzdHlsZXNoZWV0OlwiLCBlKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIgfHwgcmVzb2x2ZWRTcmMgaW5zdGFuY2VvZiBCbG9iIHx8IHJlc29sdmVkU3JjIGluc3RhbmNlb2YgRmlsZSkge1xuXHRcdGNvbnN0IGFkb3B0ZWQgPSBsb2FkQXNBZG9wdGVkKHJlc29sdmVkU3JjLCBcIlwiKTtcblx0XHRpZiAoYWRvcHRlZCkge1xuXHRcdFx0Y29uc3QgYWRkQWRvcHRlZFNoZWV0ID0gKHNoZWV0KSA9PiB7XG5cdFx0XHRcdGFkZEFkb3B0ZWRTaGVldFRvRWxlbWVudChiVG8sIHNoZWV0KTtcblx0XHRcdH07XG5cdFx0XHRpZiAoYWRvcHRlZCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0YWRvcHRlZC50aGVuKChzaGVldCkgPT4ge1xuXHRcdFx0XHRcdGFkZEFkb3B0ZWRTaGVldChzaGVldCk7XG5cdFx0XHRcdFx0ZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCB0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJzdHJpbmdcIiA/IHJlc29sdmVkU3JjIDogY3NzVGV4dEZvckFkb3B0ZWRTaGVldChzaGVldCkpO1xuXHRcdFx0XHR9KS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnNvbGUud2FybihcIkVycm9yIGxvYWRpbmcgYWRvcHRlZCBzdHlsZXNoZWV0OlwiLCBlKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkQWRvcHRlZFNoZWV0KGFkb3B0ZWQpO1xuXHRcdFx0XHRyZXR1cm4gZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2soYlRvLCB0eXBlb2YgcmVzb2x2ZWRTcmMgPT0gXCJzdHJpbmdcIiA/IHJlc29sdmVkU3JjIDogY3NzVGV4dEZvckFkb3B0ZWRTaGVldChhZG9wdGVkKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHNvdXJjZSA9IHR5cGVvZiBzcmMgPT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBzcmMgPT0gXCJvYmplY3RcIiA/IHN0eWxlRWxlbWVudENhY2hlIDogc3R5bGVDYWNoZTtcblx0Y29uc3QgY2FjaGVkID0gc291cmNlLmdldChzcmMpO1xuXHRsZXQgc3R5bGVFbGVtZW50ID0gY2FjaGVkPy5zdHlsZUVsZW1lbnQ7XG5cdGxldCB2YXJzID0gY2FjaGVkPy52YXJzO1xuXHRpZiAoIWNhY2hlZCkge1xuXHRcdGxldCBzdHlsZXMgPSBgYDtcblx0XHRsZXQgcHJvcHMgPSBbXTtcblx0XHRpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIpIHN0eWxlcyA9IHJlc29sdmVkU3JjIHx8IFwiXCI7XG5cdFx0ZWxzZSBpZiAodHlwZW9mIHJlc29sdmVkU3JjID09IFwib2JqZWN0XCIgJiYgcmVzb2x2ZWRTcmMgIT0gbnVsbCkge1xuXHRcdFx0aWYgKHJlc29sdmVkU3JjIGluc3RhbmNlb2YgSFRNTFN0eWxlRWxlbWVudCkgc3R5bGVFbGVtZW50ID0gcmVzb2x2ZWRTcmM7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0c3R5bGVzID0gdHlwZW9mIHJlc29sdmVkU3JjLmNzcyA9PSBcInN0cmluZ1wiID8gcmVzb2x2ZWRTcmMuY3NzIDogdHlwZW9mIHJlc29sdmVkU3JjID09IFwic3RyaW5nXCIgPyByZXNvbHZlZFNyYyA6IFN0cmluZyhyZXNvbHZlZFNyYyk7XG5cdFx0XHRcdHByb3BzID0gcmVzb2x2ZWRTcmM/LnByb3BzID8/IHByb3BzO1xuXHRcdFx0XHR2YXJzID0gcmVzb2x2ZWRTcmM/LnZhcnMgPz8gdmFycztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFzdHlsZUVsZW1lbnQgJiYgc3R5bGVzKSBzdHlsZUVsZW1lbnQgPSBsb2FkSW5saW5lU3R5bGUoc3R5bGVzLCBiVG8sIFwidXgtbGF5ZXJcIik7XG5cdFx0c291cmNlLnNldChzcmMsIHtcblx0XHRcdGNzczogc3R5bGVzLFxuXHRcdFx0cHJvcHMsXG5cdFx0XHR2YXJzLFxuXHRcdFx0c3R5bGVFbGVtZW50XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHN0eWxlRWxlbWVudDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIC4uL2x1ci5lL3NyYy9sdXJlL2NvcmUvQmluZGluZy50c1xudmFyIGJhbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFwibHVyLmVAYmFua1wiKTtcbnZhciBiYW5rID0gZ2xvYmFsVGhpc1tiYW5rU3ltYm9sXSA/Pz0gbmV3IERvdWJsZVdlYWtNYXAoKTtcbnZhciBlbE1hcFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJsdXIuZUBlbE1hcFwiKTtcbnZhciBlbE1hcCA9IGdsb2JhbFRoaXNbZWxNYXBTeW1ib2xdID8/PSBuZXcgRG91YmxlV2Vha01hcCgpO1xudmFyIGFsaXZlc1N5bWJvbCA9IFN5bWJvbC5mb3IoXCJsdXIuZUBhbGl2ZXNcIik7XG52YXIgYWxpdmVzID0gZ2xvYmFsVGhpc1thbGl2ZXNTeW1ib2xdID8/PSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoKHVuc3ViKSA9PiB1bnN1Yj8uKCkpO1xudmFyICRiZWhhdmlvciA9IFN5bWJvbC5mb3IoXCJAYmVoYXZpb3JcIik7XG52YXIgaXNMaW5rZXJMaWtlID0gKHZhbHVlKSA9PiB7XG5cdHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIFwicmVmXCIgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlPy51bmJpbmQgPT0gXCJmdW5jdGlvblwiO1xufTtcbnZhciAkb2JzZXJ2ZUlucHV0ID0gKGVsZW1lbnQsIHJlZiwgcHJvcCA9IFwidmFsdWVcIikgPT4ge1xuXHRjb25zdCB3ZWwgPSB0b1JlZihlbGVtZW50KTtcblx0Y29uc3QgcmYgPSB0b1JlZihyZWYpO1xuXHRjb25zdCBjdHJsQ2IgPSAoX2V2KSA9PiB7XG5cdFx0JHNldChyZiwgXCJ2YWx1ZVwiLCBkZXJlZih3ZWwpPy5bcHJvcCA/PyBcInZhbHVlXCJdID8/ICRnZXRWYWx1ZShkZXJlZihyZikpKTtcblx0fTtcblx0Y29uc3QgaGRsID0ge1xuXHRcdGNsaWNrOiBjdHJsQ2IsXG5cdFx0aW5wdXQ6IGN0cmxDYixcblx0XHRjaGFuZ2U6IGN0cmxDYlxuXHR9O1xuXHRjdHJsQ2I/Lih7IHRhcmdldDogZWxlbWVudCB9KTtcblx0aGFuZGxlTGlzdGVuZXJzPy4oZWxlbWVudCwgXCJhZGRFdmVudExpc3RlbmVyXCIsIGhkbCk7XG5cdCRzZXQocmYsIFwidmFsdWVcIiwgZWxlbWVudD8uW3Byb3AgPz8gXCJ2YWx1ZVwiXSA/PyAkZ2V0VmFsdWUoZGVyZWYocmVmKSkpO1xuXHRyZXR1cm4gKCkgPT4gaGFuZGxlTGlzdGVuZXJzPy4oZWxlbWVudCwgXCJyZW1vdmVFdmVudExpc3RlbmVyXCIsIGhkbCk7XG59O1xudmFyICRvYnNlcnZlQXR0cmlidXRlID0gKGVsLCByZWYsIHByb3AgPSBcIlwiKSA9PiB7XG5cdHRvUmVmKGVsKTtcblx0Y29uc3Qgd3YgPSB0b1JlZihyZWYpO1xuXHRjb25zdCBhdHRyTmFtZSA9IGNhbWVsVG9LZWJhYihwcm9wKTtcblx0Y29uc3QgY2IgPSAobXV0YXRpb24pID0+IHtcblx0XHRpZiAobXV0YXRpb24udHlwZSA9PSBcImF0dHJpYnV0ZXNcIiAmJiBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09IGF0dHJOYW1lKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IG11dGF0aW9uPy50YXJnZXQ/LmdldEF0dHJpYnV0ZT8uKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUpO1xuXHRcdFx0Y29uc3QgdmFsUmVmID0gZGVyZWYod3YpLCByZVZhbCA9ICRnZXRWYWx1ZSh2YWxSZWYpO1xuXHRcdFx0aWYgKGlzTm90RXF1YWwobXV0YXRpb24ub2xkVmFsdWUsIHZhbHVlKSAmJiB2YWxSZWYgIT0gbnVsbCAmJiAodHlwZW9mIHZhbFJlZiA9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiB2YWxSZWYgPT0gXCJmdW5jdGlvblwiKSkge1xuXHRcdFx0XHRpZiAoaXNOb3RFcXVhbChyZVZhbCwgdmFsdWUpIHx8IHJlVmFsID09IG51bGwpICRzZXQodmFsUmVmLCBcInZhbHVlXCIsIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHJldHVybiBvYnNlcnZlQXR0cmlidXRlKGVsLCBhdHRyTmFtZSwgY2IpO1xufTtcbnZhciByZW1vdmVGcm9tQmFuayA9IChlbCwgaGFuZGxlciwgcHJvcCkgPT4ge1xuXHRjb25zdCBiYW5rID0gZWxNYXAuZ2V0KFtlbCwgaGFuZGxlcl0pO1xuXHRpZiAoYmFuaykge1xuXHRcdGNvbnN0IG9sZCA9IGJhbmtbcHJvcF0/LlsxXTtcblx0XHRkZWxldGUgYmFua1twcm9wXTtcblx0XHRvbGQ/LigpO1xuXHR9XG59O1xudmFyIGFkZFRvQmFuayA9IChlbCwgaGFuZGxlciwgcHJvcCwgZm9yTGluaykgPT4ge1xuXHRjb25zdCBiYW5rID0gZWxNYXAuZ2V0T3JJbnNlcnRDb21wdXRlZChbZWwsIGhhbmRsZXJdLCAoKSA9PiAoe30pKTtcblx0YmFuaz8uW3Byb3BdPy5bMV0/LigpO1xuXHRiYW5rW3Byb3BdID0gZm9yTGluaztcblx0cmV0dXJuIHRydWU7XG59O1xudmFyIGJpbmRIYW5kbGVyID0gKGVsZW1lbnQsIHZhbHVlLCBwcm9wLCBoYW5kbGVyLCBzZXQsIHdpdGhPYnNlcnZlcikgPT4ge1xuXHRjb25zdCBsaW5rZXIgPSBpc0xpbmtlckxpa2UodmFsdWUpID8gdmFsdWUgOiBudWxsO1xuXHRpZiAobGlua2VyKSB7XG5cdFx0bGlua2VyLmJpbmQ/LigpO1xuXHRcdHZhbHVlID0gbGlua2VyLnJlZjtcblx0fVxuXHRjb25zdCB3ZWwgPSB0b1JlZihlbGVtZW50KTtcblx0ZWxlbWVudCA9IGRlcmVmKHdlbCk7XG5cdGlmICghZWxlbWVudCB8fCAhKGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlIHx8IGVsZW1lbnQ/LmVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlKSkgcmV0dXJuO1xuXHRsZXQgY29udHJvbGxlciA9IHZvaWQgMDtcblx0aWYgKGNvbnRyb2xsZXIpIGNvbnRyb2xsZXI/LmFib3J0Py4oKTtcblx0Y29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblx0Y29uc3Qgd3YgPSB0b1JlZih2YWx1ZSk7XG5cdGhhbmRsZXI/LihlbGVtZW50LCBwcm9wLCB2YWx1ZSk7XG5cdGNvbnN0IHVuID0gYWZmZWN0ZWQ/LihbdmFsdWUsIFwidmFsdWVcIl0sIChjdXJyLCBfcCwgb2xkKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVSZWYgPSBkZXJlZih3dik7XG5cdFx0Y29uc3Qgc2V0UmVmID0gZGVyZWYoc2V0KTtcblx0XHRjb25zdCBlbGVtZW50UmVmID0gZGVyZWYod2VsKTtcblx0XHRjb25zdCB2ID0gJGdldFZhbHVlKHZhbHVlUmVmKSA/PyAkZ2V0VmFsdWUoY3Vycik7XG5cdFx0aWYgKCFzZXRSZWYgfHwgc2V0UmVmPy5bcHJvcF0gPT0gdmFsdWVSZWYpIHtcblx0XHRcdGlmICh0eXBlb2YgdmFsdWVSZWY/LlskYmVoYXZpb3JdID09IFwiZnVuY3Rpb25cIikgdmFsdWVSZWY/LlskYmVoYXZpb3JdPy4oKF92YWwgPSBjdXJyKSA9PiBoYW5kbGVyKGVsZW1lbnRSZWYsIHByb3AsIHYpLCBbXG5cdFx0XHRcdGN1cnIsXG5cdFx0XHRcdHByb3AsXG5cdFx0XHRcdG9sZFxuXHRcdFx0XSwgW1xuXHRcdFx0XHRjb250cm9sbGVyPy5zaWduYWwsXG5cdFx0XHRcdHByb3AsXG5cdFx0XHRcdHdlbFxuXHRcdFx0XSk7XG5cdFx0XHRlbHNlIGhhbmRsZXIoZWxlbWVudFJlZiwgcHJvcCwgdik7XG5cdFx0fVxuXHR9KTtcblx0bGV0IG9icyA9IG51bGw7XG5cdGlmICh0eXBlb2Ygd2l0aE9ic2VydmVyID09IFwiYm9vbGVhblwiICYmIHdpdGhPYnNlcnZlcikge1xuXHRcdGlmIChoYW5kbGVyID09IGhhbmRsZUF0dHJpYnV0ZSkgb2JzID0gJG9ic2VydmVBdHRyaWJ1dGUoZWxlbWVudCwgdmFsdWUsIHByb3ApO1xuXHRcdGlmIChoYW5kbGVyID09IGhhbmRsZVByb3BlcnR5KSBvYnMgPSAkb2JzZXJ2ZUlucHV0KGVsZW1lbnQsIHZhbHVlLCBwcm9wKTtcblx0fVxuXHRpZiAodHlwZW9mIHdpdGhPYnNlcnZlciA9PSBcImZ1bmN0aW9uXCIpIG9icyA9IHdpdGhPYnNlcnZlcihlbGVtZW50LCBwcm9wLCB2YWx1ZSk7XG5cdGNvbnN0IHVuc3ViID0gKCkgPT4ge1xuXHRcdG9icz8uZGlzY29ubmVjdD8uKCk7XG5cdFx0b2JzICE9IG51bGwgJiYgdHlwZW9mIG9icyA9PSBcImZ1bmN0aW9uXCIgJiYgb2JzPy4oKTtcblx0XHRsaW5rZXI/LnVuYmluZD8uKCk7XG5cdFx0dW4/LigpO1xuXHRcdGNvbnRyb2xsZXI/LmFib3J0Py4oKTtcblx0XHRyZW1vdmVGcm9tQmFuaz8uKGVsZW1lbnQsIGhhbmRsZXIsIHByb3ApO1xuXHR9O1xuXHRhZGRUb0NhbGxDaGFpbih2YWx1ZSwgU3ltYm9sLmRpc3Bvc2UsIHVuc3ViKTtcblx0YWxpdmVzLnJlZ2lzdGVyKGVsZW1lbnQsIHVuc3ViKTtcblx0aWYgKCFhZGRUb0JhbmsoZWxlbWVudCwgaGFuZGxlciwgcHJvcCwgW3ZhbHVlLCB1bnN1Yl0pKSByZXR1cm4gdW5zdWI7XG59O1xudmFyIGJpbmRXaXRoID0gKGVsLCBwcm9wLCB2YWx1ZSwgaGFuZGxlciwgc2V0LCB3aXRoT2JzZXJ2ZXIpID0+IHtcblx0aGFuZGxlcihlbCwgcHJvcCwgaXNMaW5rZXJMaWtlKHZhbHVlKSA/IHZhbHVlLnJlZiA6IHZhbHVlKTtcblx0cmV0dXJuIGJpbmRIYW5kbGVyKGVsLCB2YWx1ZSwgcHJvcCwgaGFuZGxlciwgc2V0LCB3aXRoT2JzZXJ2ZXIpO1xufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gLi4vZG9tLnRzL3NyYy9taXhpbi9IYW5kbGVyLnRzXG52YXIgZGVsZXRlU3R5bGVQcm9wZXJ0eSA9IChlbCwgbmFtZSkgPT4gZWwuc3R5bGUucmVtb3ZlUHJvcGVydHkoY2FtZWxUb0tlYmFiKG5hbWUpKTtcbnZhciBoYW5kbGVTdHlsZUNoYW5nZSA9IChlbCwgcHJvcCwgdmFsKSA9PiB7XG5cdGNvbnN0IHN0eWxlUmVmID0gZWw/LnN0eWxlO1xuXHRpZiAoIXByb3AgfHwgdHlwZW9mIHByb3AgIT0gXCJzdHJpbmdcIiB8fCAhZWwgfHwgIXN0eWxlUmVmKSByZXR1cm4gZWw7XG5cdCRhdm9pZFRyaWdnZXIodmFsLCAoKSA9PiB7XG5cdFx0aWYgKGlzVmFsKHZhbCkgfHwgaGFzVmFsdWUodmFsKSB8fCBpc1ZhbHVlVW5pdCh2YWwpKSBzZXRTdHlsZVByb3BlcnR5KGVsLCBwcm9wLCB2YWwpO1xuXHRcdGVsc2UgaWYgKHZhbCA9PSBudWxsKSBkZWxldGVTdHlsZVByb3BlcnR5KGVsLCBwcm9wKTtcblx0fSk7XG5cdHJldHVybiBlbDtcbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9BbmltYXRhYmxlLnRzXG52YXIgYW5pbWF0YWJsZUlkID0gMDtcbnZhciBvblNjcm9sbCA9IChvID0ge30pID0+ICh7XG5cdGtpbmQ6IFwic2Nyb2xsXCIsXG5cdC4uLm9cbn0pO1xudmFyIG9uVmlldyA9IChvID0ge30pID0+ICh7XG5cdGtpbmQ6IFwidmlld1wiLFxuXHQuLi5vXG59KTtcbnZhciBBbmltYXRhYmxlVmFsdWUgPSBjbGFzcyB7XG5cdFtBTklNQVRBQkxFX0JSQU5EXSA9IHRydWU7XG5cdGlkID0gYW5pbWF0YWJsZUlkKys7XG5cdCNzdGVwcztcblx0I29wdGlvbnM7XG5cdCNjdXJyZW50O1xuXHQjc3Vic2NyaWJlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHQjYXR0YWNobWVudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHQjcmVzb2x2ZUVsZW1lbnRSZWYodiwgc2VsZikge1xuXHRcdGlmICh2ID09IG51bGwgfHwgdiA9PT0gXCJzZWxmXCIpIHJldHVybiBzZWxmO1xuXHRcdGlmICh2ID09PSBcInJvb3RcIikgcmV0dXJuIHNlbGYub3duZXJEb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50ID8/IHNlbGYub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0aWYgKHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIFwidmFsdWVcIiBpbiB2ICYmICEodiBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdi52YWx1ZSA/PyBzZWxmO1xuXHRcdHJldHVybiB2O1xuXHR9XG5cdCNmaW5kTmVhcmVzdFNjcm9sbGVyKGVsKSB7XG5cdFx0Zm9yIChsZXQgbm9kZSA9IGVsLnBhcmVudEVsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IHMgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuXHRcdFx0aWYgKC8oYXV0b3xzY3JvbGx8b3ZlcmxheSkvLnRlc3Qocy5vdmVyZmxvdyArIHMub3ZlcmZsb3dYICsgcy5vdmVyZmxvd1kpKSByZXR1cm4gbm9kZTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsLm93bmVyRG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCA/PyBlbC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0fVxuXHQjY3JlYXRlVGltZWxpbmUoZWxlbWVudCwgdHJpZ2dlcikge1xuXHRcdGNvbnN0IHdpbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA/PyBnbG9iYWxUaGlzO1xuXHRcdGlmIChpc1Njcm9sbERyaXZlbih0cmlnZ2VyKSkge1xuXHRcdFx0Y29uc3QgU2Nyb2xsVGltZWxpbmVDdG9yID0gd2luLlNjcm9sbFRpbWVsaW5lO1xuXHRcdFx0aWYgKHR5cGVvZiBTY3JvbGxUaW1lbGluZUN0b3IgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7XG5cdFx0XHRyZXR1cm4gbmV3IFNjcm9sbFRpbWVsaW5lQ3Rvcih7XG5cdFx0XHRcdHNvdXJjZTogdHJpZ2dlci5zb3VyY2UgPT09IFwibmVhcmVzdFwiIHx8IHRyaWdnZXIuc291cmNlID09IG51bGwgPyB0aGlzLiNmaW5kTmVhcmVzdFNjcm9sbGVyKGVsZW1lbnQpIDogdGhpcy4jcmVzb2x2ZUVsZW1lbnRSZWYodHJpZ2dlci5zb3VyY2UsIGVsZW1lbnQpLFxuXHRcdFx0XHRheGlzOiB0cmlnZ2VyLmF4aXMgPz8gXCJibG9ja1wiXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Y29uc3QgVmlld1RpbWVsaW5lQ3RvciA9IHdpbi5WaWV3VGltZWxpbmU7XG5cdFx0aWYgKHR5cGVvZiBWaWV3VGltZWxpbmVDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuXHRcdHJldHVybiBuZXcgVmlld1RpbWVsaW5lQ3Rvcih7XG5cdFx0XHRzdWJqZWN0OiB0cmlnZ2VyLnN1YmplY3QgPyB0aGlzLiNyZXNvbHZlRWxlbWVudFJlZih0cmlnZ2VyLnN1YmplY3QsIGVsZW1lbnQpIDogZWxlbWVudCxcblx0XHRcdGF4aXM6IHRyaWdnZXIuYXhpcyA/PyBcImJsb2NrXCIsXG5cdFx0XHRpbnNldDogdHJpZ2dlci5pbnNldFxuXHRcdH0pO1xuXHR9XG5cdCNzdGFydFRpbWVsaW5lRHJpdmVuKGVsZW1lbnQsIGF0dGFjaG1lbnQsIHBsYW4sIHRyaWdnZXIpIHtcblx0XHRjb25zdCB0aW1lbGluZSA9IHRoaXMuI2NyZWF0ZVRpbWVsaW5lKGVsZW1lbnQsIHRyaWdnZXIpO1xuXHRcdGlmICghdGltZWxpbmUpIHJldHVybiB0aGlzLiNzdGFydFRpbWVsaW5lRmFsbGJhY2soZWxlbWVudCwgYXR0YWNobWVudCwgcGxhbiwgdHJpZ2dlcik7XG5cdFx0Y29uc3QgdGltaW5nID0gdGhpcy4jYnVpbGRUaW1pbmcoKTtcblx0XHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUodGhpcy4jYnVpbGRLZXlmcmFtZXMocGxhbiksIHtcblx0XHRcdC4uLnRpbWluZyxcblx0XHRcdGR1cmF0aW9uOiBcImF1dG9cIixcblx0XHRcdGRlbGF5OiAwLFxuXHRcdFx0ZW5kRGVsYXk6IDAsXG5cdFx0XHRpdGVyYXRpb25zOiAxLFxuXHRcdFx0ZmlsbDogdGhpcy4jb3B0aW9ucy5maWxsID8/IFwiYm90aFwiLFxuXHRcdFx0dGltZWxpbmVcblx0XHR9KTtcblx0XHRpZiAodHJpZ2dlci5yYW5nZVN0YXJ0KSBhbmltYXRpb24ucmFuZ2VTdGFydCA9IHRyaWdnZXIucmFuZ2VTdGFydDtcblx0XHRpZiAodHJpZ2dlci5yYW5nZUVuZCkgYW5pbWF0aW9uLnJhbmdlRW5kID0gdHJpZ2dlci5yYW5nZUVuZDtcblx0XHRhdHRhY2htZW50LmFuaW1hdGlvbiA9IGFuaW1hdGlvbjtcblx0XHRyZXR1cm4gKCkgPT4gYW5pbWF0aW9uLmNhbmNlbCgpO1xuXHR9XG5cdGNvbnN0cnVjdG9yKHN0ZXBzLCBvcHRpb25zID0ge30pIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc3RlcHMpIHx8IHN0ZXBzLmxlbmd0aCA8IDIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhbmltYXRhYmxlKCkgZXhwZWN0cyBhdCBsZWFzdCAyIHN0ZXBzXCIpO1xuXHRcdHRoaXMuI3N0ZXBzID0gc3RlcHM7XG5cdFx0dGhpcy4jb3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy4jY3VycmVudCA9IHRoaXMuI3Jlc29sdmVTdGVwKHN0ZXBzWzBdKTtcblx0fVxuXHQjc3RhcnRUaW1lbGluZUZhbGxiYWNrKGVsZW1lbnQsIGF0dGFjaG1lbnQsIHBsYW4sIHRyaWdnZXIpIHtcblx0XHRjb25zdCBEVVJBVElPTiA9IDFlNDtcblx0XHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUodGhpcy4jYnVpbGRLZXlmcmFtZXMocGxhbiksIHtcblx0XHRcdC4uLnRoaXMuI2J1aWxkVGltaW5nKCksXG5cdFx0XHRkdXJhdGlvbjogRFVSQVRJT04sXG5cdFx0XHRkZWxheTogMCxcblx0XHRcdGl0ZXJhdGlvbnM6IDEsXG5cdFx0XHRmaWxsOiBcImJvdGhcIlxuXHRcdH0pO1xuXHRcdGFuaW1hdGlvbi5wYXVzZSgpO1xuXHRcdGF0dGFjaG1lbnQuYW5pbWF0aW9uID0gYW5pbWF0aW9uO1xuXHRcdGNvbnN0IHNjcm9sbGVyID0gaXNTY3JvbGxEcml2ZW4odHJpZ2dlcikgPyB0cmlnZ2VyLnNvdXJjZSA9PT0gXCJuZWFyZXN0XCIgfHwgdHJpZ2dlci5zb3VyY2UgPT0gbnVsbCA/IHRoaXMuI2ZpbmROZWFyZXN0U2Nyb2xsZXIoZWxlbWVudCkgOiB0aGlzLiNyZXNvbHZlRWxlbWVudFJlZih0cmlnZ2VyLnNvdXJjZSwgZWxlbWVudCkgOiB0aGlzLiNmaW5kTmVhcmVzdFNjcm9sbGVyKGVsZW1lbnQpO1xuXHRcdGxldCByYWZJZCA9IDA7XG5cdFx0Y29uc3QgY29tcHV0ZVByb2dyZXNzID0gKCkgPT4ge1xuXHRcdFx0aWYgKGlzVmlld0RyaXZlbih0cmlnZ2VyKSkge1xuXHRcdFx0XHRjb25zdCB2cCA9IHNjcm9sbGVyID09PSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50ID8ge1xuXHRcdFx0XHRcdHRvcDogMCxcblx0XHRcdFx0XHRoZWlnaHQ6IGlubmVySGVpZ2h0XG5cdFx0XHRcdH0gOiBzY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdFx0Y29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRcdGNvbnN0IHRvdGFsID0gdnAuaGVpZ2h0ICsgcmVjdC5oZWlnaHQ7XG5cdFx0XHRcdHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCAodnAudG9wICsgdnAuaGVpZ2h0IC0gcmVjdC50b3ApIC8gdG90YWwpKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGVsID0gc2Nyb2xsZXI7XG5cdFx0XHRjb25zdCBtYXggPSBlbC5zY3JvbGxIZWlnaHQgLSBlbC5jbGllbnRIZWlnaHQ7XG5cdFx0XHRyZXR1cm4gbWF4ID4gMCA/IGVsLnNjcm9sbFRvcCAvIG1heCA6IDA7XG5cdFx0fTtcblx0XHRjb25zdCBvblNjcm9sbCA9ICgpID0+IHtcblx0XHRcdGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcblx0XHRcdHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdFx0YW5pbWF0aW9uLmN1cnJlbnRUaW1lID0gY29tcHV0ZVByb2dyZXNzKCkgKiBEVVJBVElPTjtcblx0XHRcdH0pO1xuXHRcdH07XG5cdFx0Y29uc3QgbGlzdGVuVGFyZ2V0ID0gc2Nyb2xsZXIgPT09IGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgPyB3aW5kb3cgOiBzY3JvbGxlcjtcblx0XHRsaXN0ZW5UYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBvblNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXHRcdG9uU2Nyb2xsKCk7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcblx0XHRcdGxpc3RlblRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIG9uU2Nyb2xsKTtcblx0XHRcdGFuaW1hdGlvbi5jYW5jZWwoKTtcblx0XHR9O1xuXHR9XG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy4jY3VycmVudDtcblx0fVxuXHRzZXQgdmFsdWUobmV4dCkge1xuXHRcdHRoaXMuI2N1cnJlbnQgPSBuZXh0O1xuXHRcdGZvciAoY29uc3QgY2Igb2YgdGhpcy4jc3Vic2NyaWJlcnMpIGNiKG5leHQpO1xuXHR9XG5cdHZhbHVlT2YoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2N1cnJlbnQ7XG5cdH1cblx0dG9TdHJpbmcoKSB7XG5cdFx0Y29uc3QgdiA9IHRoaXMuI2N1cnJlbnQ7XG5cdFx0cmV0dXJuIHYgPT0gbnVsbCA/IFwiXCIgOiBTdHJpbmcodik7XG5cdH1cblx0W1N5bWJvbC50b1ByaW1pdGl2ZV0oaGludCkge1xuXHRcdGlmIChoaW50ID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHRjb25zdCBuID0gTnVtYmVyKHRoaXMuI2N1cnJlbnQpO1xuXHRcdFx0cmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiAwO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy50b1N0cmluZygpO1xuXHR9XG5cdHN1YnNjcmliZShjYikge1xuXHRcdHRoaXMuI3N1YnNjcmliZXJzLmFkZChjYik7XG5cdFx0cmV0dXJuICgpID0+IHRoaXMuI3N1YnNjcmliZXJzLmRlbGV0ZShjYik7XG5cdH1cblx0Z2V0IG9wdGlvbnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI29wdGlvbnM7XG5cdH1cblx0Z2V0IHN0ZXBzKCkge1xuXHRcdHJldHVybiB0aGlzLiNzdGVwcztcblx0fVxuXHQjcmVzb2x2ZVN0ZXAoc3RlcCkge1xuXHRcdGlmIChzdGVwICE9IG51bGwgJiYgdHlwZW9mIHN0ZXAgPT09IFwib2JqZWN0XCIgJiYgXCJ2YWx1ZVwiIGluIHN0ZXApIHJldHVybiBzdGVwLnZhbHVlO1xuXHRcdHJldHVybiBzdGVwO1xuXHR9XG5cdCNidWlsZEtleWZyYW1lcyhwbGFuKSB7XG5cdFx0Y29uc3Qgc3RlcHMgPSB0aGlzLiNzdGVwcy5tYXAoKHMpID0+IHRoaXMuI3Jlc29sdmVTdGVwKHMpKTtcblx0XHRjb25zdCBjb3VudCA9IHN0ZXBzLmxlbmd0aDtcblx0XHRjb25zdCBvZmZzZXRzID0gdGhpcy4jb3B0aW9ucy5vZmZzZXRzO1xuXHRcdGNvbnN0IGVhc2luZyA9IHRoaXMuI29wdGlvbnMuZWFzaW5nO1xuXHRcdHJldHVybiBzdGVwcy5tYXAoKHJhdywgaSkgPT4ge1xuXHRcdFx0Y29uc3QgZnJhbWUgPSB7IG9mZnNldDogb2Zmc2V0cz8uW2ldID8/IChjb3VudCA+IDEgPyBpIC8gKGNvdW50IC0gMSkgOiAwKSB9O1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZWFzaW5nKSkge1xuXHRcdFx0XHRpZiAoZWFzaW5nW2ldKSBmcmFtZS5lYXNpbmcgPSBlYXNpbmdbaV07XG5cdFx0XHR9XG5cdFx0XHRsZXQgdmFsdWUgPSByYXc7XG5cdFx0XHRpZiAocGxhbi5tb2RlID09PSBcInByb3BlcnR5XCIgJiYgcGxhbi51bml0ICE9IG51bGwgJiYgdHlwZW9mIHJhdyA9PT0gXCJudW1iZXJcIikgdmFsdWUgPSBgJHtyYXd9JHtwbGFuLnVuaXR9YDtcblx0XHRcdGlmIChwbGFuLm1vZGUgPT09IFwiY3VzdG9tLXByb3BlcnR5XCIgJiYgdHlwZW9mIHJhdyAhPT0gXCJzdHJpbmdcIikgdmFsdWUgPSBTdHJpbmcocmF3KTtcblx0XHRcdGZyYW1lW3BsYW4udGFyZ2V0XSA9IHZhbHVlO1xuXHRcdFx0cmV0dXJuIGZyYW1lO1xuXHRcdH0pO1xuXHR9XG5cdCNidWlsZFRpbWluZygpIHtcblx0XHRjb25zdCBvID0gdGhpcy4jb3B0aW9ucztcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZHVyYXRpb246IHBhcnNlVGltZShvLmR1cmF0aW9uLCAzMDApLFxuXHRcdFx0ZGVsYXk6IHBhcnNlVGltZShvLmRlbGF5LCAwKSxcblx0XHRcdGVuZERlbGF5OiBvLmVuZERlbGF5ID8/IDAsXG5cdFx0XHRpdGVyYXRpb25zOiBub3JtYWxpemVJdGVyYXRpb25zKG8uaXRlcmF0aW9ucyksXG5cdFx0XHRkaXJlY3Rpb246IG8uZGlyZWN0aW9uID8/IFwibm9ybWFsXCIsXG5cdFx0XHRmaWxsOiBvLmZpbGwgPz8gXCJib3RoXCIsXG5cdFx0XHRjb21wb3NpdGU6IG8uY29tcG9zaXRlLFxuXHRcdFx0ZWFzaW5nOiBBcnJheS5pc0FycmF5KG8uZWFzaW5nKSA/IFwibGluZWFyXCIgOiBvLmVhc2luZyA/PyBcImxpbmVhclwiXG5cdFx0fTtcblx0fVxuXHRhdHRhY2goZWxlbWVudCwgcGxhbikge1xuXHRcdGNvbnN0IGF0dGFjaG1lbnQgPSB7XG5cdFx0XHRlbGVtZW50LFxuXHRcdFx0YW5pbWF0aW9uOiBudWxsLFxuXHRcdFx0Y2xlYW51cDogKCkgPT4ge31cblx0XHR9O1xuXHRcdGNvbnN0IHRyaWdnZXIgPSB0aGlzLiNvcHRpb25zLnRyaWdnZXIgPz8gXCJtb3VudFwiO1xuXHRcdGxldCBpbm5lcjtcblx0XHRpZiAoaXNTY3JvbGxEcml2ZW4odHJpZ2dlcikgfHwgaXNWaWV3RHJpdmVuKHRyaWdnZXIpKSBpbm5lciA9IHRoaXMuI3N0YXJ0VGltZWxpbmVEcml2ZW4oZWxlbWVudCwgYXR0YWNobWVudCwgcGxhbiwgdHJpZ2dlcik7XG5cdFx0ZWxzZSB7XG5cdFx0XHRjb25zdCBzdGFydCA9ICgpID0+IHtcblx0XHRcdFx0YXR0YWNobWVudC5hbmltYXRpb24/LmNhbmNlbCgpO1xuXHRcdFx0XHRjb25zdCBhbmltYXRpb24gPSBlbGVtZW50LmFuaW1hdGUodGhpcy4jYnVpbGRLZXlmcmFtZXMocGxhbiksIHRoaXMuI2J1aWxkVGltaW5nKCkpO1xuXHRcdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbiA9IGFuaW1hdGlvbjtcblx0XHRcdFx0dGhpcy4jdHJhY2tQcm9ncmVzcyhhbmltYXRpb24sIHBsYW4pO1xuXHRcdFx0XHRyZXR1cm4gYW5pbWF0aW9uO1xuXHRcdFx0fTtcblx0XHRcdGlubmVyID0gdGhpcy4jd2lyZVRyaWdnZXIoZWxlbWVudCwgYXR0YWNobWVudCwgc3RhcnQpO1xuXHRcdH1cblx0XHR0aGlzLiNhdHRhY2htZW50cy5hZGQoYXR0YWNobWVudCk7XG5cdFx0YXR0YWNobWVudC5jbGVhbnVwID0gKCkgPT4ge1xuXHRcdFx0aW5uZXIoKTtcblx0XHRcdHRoaXMuI2F0dGFjaG1lbnRzLmRlbGV0ZShhdHRhY2htZW50KTtcblx0XHR9O1xuXHRcdHJldHVybiBhdHRhY2htZW50LmNsZWFudXA7XG5cdH1cblx0I3RyYWNrUHJvZ3Jlc3MoYW5pbWF0aW9uLCBwbGFuKSB7XG5cdFx0YW5pbWF0aW9uLmZpbmlzaGVkLnRoZW4oKCkgPT4ge1xuXHRcdFx0Y29uc3QgbGFzdCA9IHRoaXMuI3Jlc29sdmVTdGVwKHRoaXMuI3N0ZXBzW3RoaXMuI3N0ZXBzLmxlbmd0aCAtIDFdKTtcblx0XHRcdHRoaXMudmFsdWUgPSBsYXN0O1xuXHRcdH0pLmNhdGNoKCgpID0+IHt9KTtcblx0fVxuXHQjd2lyZVRyaWdnZXIoZWxlbWVudCwgYXR0YWNobWVudCwgc3RhcnQpIHtcblx0XHRjb25zdCB0cmlnZ2VyID0gdGhpcy4jb3B0aW9ucy50cmlnZ2VyID8/IFwibW91bnRcIjtcblx0XHRjb25zdCByZXZlcnNlT25FeGl0ID0gdGhpcy4jb3B0aW9ucy5yZXZlcnNlT25FeGl0ID8/IHRydWU7XG5cdFx0Y29uc3QgcGxheUZvcndhcmQgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIWF0dGFjaG1lbnQuYW5pbWF0aW9uIHx8IGF0dGFjaG1lbnQuYW5pbWF0aW9uLnBsYXlTdGF0ZSA9PT0gXCJpZGxlXCIpIHN0YXJ0KCk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0YXR0YWNobWVudC5hbmltYXRpb24ucGxheWJhY2tSYXRlID0gTWF0aC5hYnMoYXR0YWNobWVudC5hbmltYXRpb24ucGxheWJhY2tSYXRlIHx8IDEpO1xuXHRcdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbi5wbGF5KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBwbGF5QmFja3dhcmQgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIWF0dGFjaG1lbnQuYW5pbWF0aW9uKSByZXR1cm47XG5cdFx0XHRhdHRhY2htZW50LmFuaW1hdGlvbi5yZXZlcnNlKCk7XG5cdFx0fTtcblx0XHRpZiAodHJpZ2dlciA9PT0gXCJtb3VudFwiKSB7XG5cdFx0XHRzdGFydCgpO1xuXHRcdFx0cmV0dXJuICgpID0+IHt9O1xuXHRcdH1cblx0XHRpZiAodHJpZ2dlciA9PT0gXCJtYW51YWxcIikgcmV0dXJuICgpID0+IHt9O1xuXHRcdGlmICh0cmlnZ2VyID09PSBcImhvdmVyXCIgfHwgdHJpZ2dlciA9PT0gXCJmb2N1c1wiKSB7XG5cdFx0XHRjb25zdCBlbnRlciA9IHRyaWdnZXIgPT09IFwiaG92ZXJcIiA/IFwicG9pbnRlcmVudGVyXCIgOiBcImZvY3VzaW5cIjtcblx0XHRcdGNvbnN0IGxlYXZlID0gdHJpZ2dlciA9PT0gXCJob3ZlclwiID8gXCJwb2ludGVybGVhdmVcIiA6IFwiZm9jdXNvdXRcIjtcblx0XHRcdGNvbnN0IG9uRW50ZXIgPSAoKSA9PiBwbGF5Rm9yd2FyZCgpO1xuXHRcdFx0Y29uc3Qgb25MZWF2ZSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKHJldmVyc2VPbkV4aXQpIHBsYXlCYWNrd2FyZCgpO1xuXHRcdFx0fTtcblx0XHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihlbnRlciwgb25FbnRlcik7XG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIobGVhdmUsIG9uTGVhdmUpO1xuXHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGVudGVyLCBvbkVudGVyKTtcblx0XHRcdFx0ZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGxlYXZlLCBvbkxlYXZlKTtcblx0XHRcdH07XG5cdFx0fVxuXHRcdGlmICh0cmlnZ2VyID09PSBcImNsaWNrXCIpIHtcblx0XHRcdGxldCBmb3J3YXJkID0gdHJ1ZTtcblx0XHRcdGNvbnN0IG9uQ2xpY2sgPSAoKSA9PiB7XG5cdFx0XHRcdGZvcndhcmQgPyBwbGF5Rm9yd2FyZCgpIDogcGxheUJhY2t3YXJkKCk7XG5cdFx0XHRcdGZvcndhcmQgPSAhZm9yd2FyZDtcblx0XHRcdH07XG5cdFx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrKTtcblx0XHRcdHJldHVybiAoKSA9PiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrKTtcblx0XHR9XG5cdFx0aWYgKHRyaWdnZXIgPT09IFwidmlzaWJsZVwiKSB7XG5cdFx0XHRpZiAodHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0c3RhcnQoKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IHt9O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRcdFx0Zm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHBsYXlGb3J3YXJkKCk7XG5cdFx0XHRcdGVsc2UgaWYgKHJldmVyc2VPbkV4aXQgJiYgYXR0YWNobWVudC5hbmltYXRpb24pIHBsYXlCYWNrd2FyZCgpO1xuXHRcdFx0fSwgdGhpcy4jb3B0aW9ucy5pbnRlcnNlY3Rpb24pO1xuXHRcdFx0b2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcblx0XHRcdHJldHVybiAoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0fVxuXHRcdGlmICh0cmlnZ2VyICE9IG51bGwgJiYgdHlwZW9mIHRyaWdnZXIgPT09IFwib2JqZWN0XCIgJiYgXCJ2YWx1ZVwiIGluIHRyaWdnZXIpIHtcblx0XHRcdGNvbnN0IGFwcGx5ID0gKHYpID0+IHYgPyBwbGF5Rm9yd2FyZCgpIDogcGxheUJhY2t3YXJkKCk7XG5cdFx0XHRhcHBseSh0cmlnZ2VyLnZhbHVlKTtcblx0XHRcdGNvbnN0IHVuc3Vic2NyaWJlID0gdHlwZW9mIHRyaWdnZXIuc3Vic2NyaWJlID09PSBcImZ1bmN0aW9uXCIgPyB0cmlnZ2VyLnN1YnNjcmliZShhcHBseSkgOiBudWxsO1xuXHRcdFx0cmV0dXJuICgpID0+IHVuc3Vic2NyaWJlPy4oKTtcblx0XHR9XG5cdFx0cmV0dXJuICgpID0+IHt9O1xuXHR9XG5cdCNlYWNoKGZuKSB7XG5cdFx0Zm9yIChjb25zdCBhdCBvZiB0aGlzLiNhdHRhY2htZW50cykgaWYgKGF0LmFuaW1hdGlvbikgZm4oYXQuYW5pbWF0aW9uKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRwbGF5KCkge1xuXHRcdHJldHVybiB0aGlzLiNlYWNoKChhKSA9PiBhLnBsYXkoKSk7XG5cdH1cblx0cGF1c2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMuI2VhY2goKGEpID0+IGEucGF1c2UoKSk7XG5cdH1cblx0cmV2ZXJzZSgpIHtcblx0XHRyZXR1cm4gdGhpcy4jZWFjaCgoYSkgPT4gYS5yZXZlcnNlKCkpO1xuXHR9XG5cdGNhbmNlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy4jZWFjaCgoYSkgPT4gYS5jYW5jZWwoKSk7XG5cdH1cblx0ZmluaXNoKCkge1xuXHRcdHJldHVybiB0aGlzLiNlYWNoKChhKSA9PiBhLmZpbmlzaCgpKTtcblx0fVxuXHRzZXQgcGxheWJhY2tSYXRlKHJhdGUpIHtcblx0XHR0aGlzLiNlYWNoKChhKSA9PiB7XG5cdFx0XHRhLnBsYXliYWNrUmF0ZSA9IHJhdGU7XG5cdFx0fSk7XG5cdH1cblx0Z2V0IGZpbmlzaGVkKCkge1xuXHRcdGNvbnN0IGxpc3QgPSBbXTtcblx0XHR0aGlzLiNlYWNoKChhKSA9PiBsaXN0LnB1c2goYS5maW5pc2hlZC5jYXRjaCgoKSA9PiB7fSkpKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwobGlzdCkudGhlbigoKSA9PiB7fSk7XG5cdH1cbn07XG52YXIgYW5pbWF0YWJsZSA9IChzdGVwcywgb3B0aW9ucykgPT4gbmV3IEFuaW1hdGFibGVWYWx1ZShzdGVwcywgb3B0aW9ucyk7XG52YXIgaXNBbmltYXRhYmxlVmFsdWUgPSAodmFsdWUpID0+IHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlW0FOSU1BVEFCTEVfQlJBTkRdID09PSB0cnVlO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvU3R5bGVzLnRzXG52YXIgc3R5bGVUZW1wbGF0ZUlkID0gMDtcbnZhciByZWFkUmVhY3RpdmVOdW1iZXIgPSAoc2xvdCkgPT4ge1xuXHRjb25zdCBjdXJyZW50ID0gc2xvdC52YWx1ZT8udmFsdWU7XG5cdGNvbnN0IG51bWJlciA9IHR5cGVvZiBjdXJyZW50ID09PSBcIm51bWJlclwiID8gY3VycmVudCA6IE51bWJlcihjdXJyZW50KTtcblx0aWYgKCFOdW1iZXIuaXNGaW5pdGUobnVtYmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVhY3RpdmUgQ1NTIHZhbHVlIFwiJHtTdHJpbmcoY3VycmVudCl9XCIgaXMgbm90IGZpbml0ZWApO1xuXHRyZXR1cm4gbnVtYmVyO1xufTtcbnZhciBnZXRSZWFjdGl2ZUluaXRpYWxOdW1iZXIgPSAodmFsdWUpID0+IHtcblx0Y29uc3QgbnVtYmVyID0gTnVtYmVyKHZhbHVlPy52YWx1ZSk7XG5cdHJldHVybiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKSA/IG51bWJlciA6IDA7XG59O1xudmFyIHJlcGxhY2VUeXBlZE1hcmtlcnMgPSAoY3NzVmFsdWUsIHNsb3RzKSA9PiB7XG5cdGxldCByZXN1bHQgPSBjc3NWYWx1ZTtcblx0Zm9yIChjb25zdCBzbG90IG9mIHNsb3RzKSByZXN1bHQgPSByZXN1bHQucmVwbGFjZShuZXcgUmVnRXhwKGB2YXJcXFxcKFxcXFxzKiR7ZXNjYXBlUmVnRXhwKHNsb3QubWFya2VyKX1cXFxccypcXFxcKWAsIFwiZ1wiKSwgU3RyaW5nKHNsb3QudmFsdWUpKTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG52YXIgaXNEaXJlY3RTbG90VmFsdWUgPSAoY3NzVmFsdWUsIG1hcmtlcikgPT4ge1xuXHRjb25zdCBlc2NhcGVkTWFya2VyID0gZXNjYXBlUmVnRXhwKG1hcmtlcik7XG5cdHJldHVybiBuZXcgUmVnRXhwKGBedmFyXFxcXChcXFxccyoke2VzY2FwZWRNYXJrZXJ9XFxcXHMqXFxcXCkkYCkudGVzdChjc3NWYWx1ZS50cmltKCkpO1xufTtcbnZhciBzZXJpYWxpemVBbmltYXRhYmxlQ3NzVmFsdWUgPSAocmF3LCB1bml0KSA9PiB7XG5cdGxldCB2YWx1ZSA9IHJhdztcblx0aWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIFwidmFsdWVcIiBpbiB2YWx1ZSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCkpIHZhbHVlID0gdmFsdWUudmFsdWU7XG5cdGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSBcIlwiKSByZXR1cm4gdW5pdCA/IGAwJHt1bml0fWAgOiBcIjBcIjtcblx0aWYgKHVuaXQgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHJldHVybiBgJHt2YWx1ZX0ke3VuaXR9YDtcblx0cmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59O1xudmFyIGlzRGlyZWN0U2xvdFVuaXRQcm9kdWN0ID0gKGNzc1ZhbHVlLCBtYXJrZXIsIHVuaXQpID0+IHtcblx0aWYgKCF1bml0KSByZXR1cm4gZmFsc2U7XG5cdGNvbnN0IGVzY2FwZWRNYXJrZXIgPSBlc2NhcGVSZWdFeHAobWFya2VyKTtcblx0Y29uc3QgZXNjYXBlZFVuaXQgPSBlc2NhcGVSZWdFeHAodW5pdCk7XG5cdHJldHVybiBuZXcgUmVnRXhwKGBeY2FsY1xcXFwoXFxcXHMqdmFyXFxcXChcXFxccyoke2VzY2FwZWRNYXJrZXJ9XFxcXHMqXFxcXClcXFxccypcXFxcKlxcXFxzKjEke2VzY2FwZWRVbml0fVxcXFxzKlxcXFwpJGAsIFwiaVwiKS50ZXN0KGNzc1ZhbHVlLnRyaW0oKSk7XG59O1xudmFyIHNldFBhcnNlZFR5cGVkVmFsdWUgPSAoc3R5bGVNYXAsIENTU1N0eWxlVmFsdWVDdG9yLCBwcm9wZXJ0eSwgY3NzVmFsdWUpID0+IHtcblx0aWYgKHR5cGVvZiBDU1NTdHlsZVZhbHVlQ3Rvcj8ucGFyc2VBbGwgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdGNvbnN0IHZhbHVlcyA9IENTU1N0eWxlVmFsdWVDdG9yLnBhcnNlQWxsKHByb3BlcnR5LCBjc3NWYWx1ZSk7XG5cdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCAuLi52YWx1ZXMpO1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAodHlwZW9mIENTU1N0eWxlVmFsdWVDdG9yPy5wYXJzZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBDU1NTdHlsZVZhbHVlQ3Rvci5wYXJzZShwcm9wZXJ0eSwgY3NzVmFsdWUpKTtcblx0XHRyZXR1cm47XG5cdH1cblx0c3R5bGVNYXAuc2V0KHByb3BlcnR5LCBjc3NWYWx1ZSk7XG59O1xudmFyIHRva2VuaXplTnVtZXJpY0NTUyA9IChzb3VyY2UpID0+IHtcblx0Y29uc3QgdG9rZW5zID0gW107XG5cdGxldCBjdXJzb3IgPSAwO1xuXHR3aGlsZSAoY3Vyc29yIDwgc291cmNlLmxlbmd0aCkge1xuXHRcdGNvbnN0IHJlc3QgPSBzb3VyY2Uuc2xpY2UoY3Vyc29yKTtcblx0XHRjb25zdCB3aGl0ZXNwYWNlID0gL15cXHMrLy5leGVjKHJlc3QpO1xuXHRcdGlmICh3aGl0ZXNwYWNlKSB7XG5cdFx0XHRjdXJzb3IgKz0gd2hpdGVzcGFjZVswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgdmFyaWFibGUgPSAvXnZhclxcKFxccyooLS1bYS16QS1aMC05Xy1dKylcXHMqXFwpLy5leGVjKHJlc3QpO1xuXHRcdGlmICh2YXJpYWJsZSkge1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcInZhcmlhYmxlXCIsXG5cdFx0XHRcdG1hcmtlcjogdmFyaWFibGVbMV1cblx0XHRcdH0pO1xuXHRcdFx0Y3Vyc29yICs9IHZhcmlhYmxlWzBdLmxlbmd0aDtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBudW1iZXIgPSAvXig/OlxcZCpcXC5cXGQrfFxcZCtcXC4/XFxkKikoPzpbZUVdWystXT9cXGQrKT8vLmV4ZWMocmVzdCk7XG5cdFx0aWYgKG51bWJlcikge1xuXHRcdFx0Y3Vyc29yICs9IG51bWJlclswXS5sZW5ndGg7XG5cdFx0XHRjb25zdCB1bml0TWF0Y2ggPSAvXiglfFthLXpBLVpdKykvLmV4ZWMoc291cmNlLnNsaWNlKGN1cnNvcikpO1xuXHRcdFx0Y29uc3QgdW5pdCA9IHVuaXRNYXRjaD8uWzBdID8/IG51bGw7XG5cdFx0XHRpZiAodW5pdE1hdGNoKSBjdXJzb3IgKz0gdW5pdE1hdGNoWzBdLmxlbmd0aDtcblx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0a2luZDogXCJudW1iZXJcIixcblx0XHRcdFx0dmFsdWU6IE51bWJlcihudW1iZXJbMF0pLFxuXHRcdFx0XHR1bml0OiB1bml0ID09IG51bGwgPyBudWxsIDogdW5pdC50b0xvd2VyQ2FzZSgpXG5cdFx0XHR9KTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBpZGVudGlmaWVyID0gL15bYS16QS1aX11bYS16QS1aMC05Xy1dKi8uZXhlYyhyZXN0KTtcblx0XHRpZiAoaWRlbnRpZmllcikge1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcImlkZW50aWZpZXJcIixcblx0XHRcdFx0dmFsdWU6IGlkZW50aWZpZXJbMF0udG9Mb3dlckNhc2UoKVxuXHRcdFx0fSk7XG5cdFx0XHRjdXJzb3IgKz0gaWRlbnRpZmllclswXS5sZW5ndGg7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3ltYm9sID0gcmVzdFswXTtcblx0XHRpZiAoc3ltYm9sID09PSBcIitcIiB8fCBzeW1ib2wgPT09IFwiLVwiIHx8IHN5bWJvbCA9PT0gXCIqXCIgfHwgc3ltYm9sID09PSBcIi9cIiB8fCBzeW1ib2wgPT09IFwiKFwiIHx8IHN5bWJvbCA9PT0gXCIpXCIgfHwgc3ltYm9sID09PSBcIixcIikge1xuXHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRraW5kOiBcInN5bWJvbFwiLFxuXHRcdFx0XHR2YWx1ZTogc3ltYm9sXG5cdFx0XHR9KTtcblx0XHRcdGN1cnNvcisrO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgVHlwZWQgT00gbnVtZXJpYyB0b2tlbiBuZWFyIFwiJHtyZXN0fVwiYCk7XG5cdH1cblx0cmV0dXJuIHRva2Vucztcbn07XG52YXIgTnVtZXJpY1R5cGVkT01QYXJzZXIgPSBjbGFzcyB7XG5cdHRva2Vucztcblx0d2luO1xuXHRyZWFjdGl2ZUJ5TWFya2VyO1xuXHR0eXBlZEJ5TWFya2VyO1xuXHRpbmRleCA9IDA7XG5cdGxlYXZlcyA9IFtdO1xuXHRjb25zdHJ1Y3Rvcih0b2tlbnMsIHdpbiwgcmVhY3RpdmVCeU1hcmtlciwgdHlwZWRCeU1hcmtlcikge1xuXHRcdHRoaXMudG9rZW5zID0gdG9rZW5zO1xuXHRcdHRoaXMud2luID0gd2luO1xuXHRcdHRoaXMucmVhY3RpdmVCeU1hcmtlciA9IHJlYWN0aXZlQnlNYXJrZXI7XG5cdFx0dGhpcy50eXBlZEJ5TWFya2VyID0gdHlwZWRCeU1hcmtlcjtcblx0fVxuXHRwYXJzZSgpIHtcblx0XHRjb25zdCByb290ID0gdGhpcy5wYXJzZVN1bSgpO1xuXHRcdGlmICh0aGlzLmluZGV4ICE9PSB0aGlzLnRva2Vucy5sZW5ndGgpIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVuZXhwZWN0ZWQgdHJhaWxpbmcgVHlwZWQgT00gZXhwcmVzc2lvblwiKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cm9vdCxcblx0XHRcdGxlYXZlczogdGhpcy5sZWF2ZXNcblx0XHR9O1xuXHR9XG5cdGN1cnJlbnQoKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMuaW5kZXhdO1xuXHR9XG5cdGNvbnN1bWUoKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLmluZGV4XTtcblx0XHRpZiAoIXRva2VuKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJVbmV4cGVjdGVkIGVuZCBvZiBUeXBlZCBPTSBleHByZXNzaW9uXCIpO1xuXHRcdHRoaXMuaW5kZXgrKztcblx0XHRyZXR1cm4gdG9rZW47XG5cdH1cblx0Y29uc3VtZVN5bWJvbChzeW1ib2wpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdGlmICh0b2tlbi5raW5kICE9PSBcInN5bWJvbFwiIHx8IHRva2VuLnZhbHVlICE9PSBzeW1ib2wpIHRocm93IG5ldyBTeW50YXhFcnJvcihgRXhwZWN0ZWQgXCIke3N5bWJvbH1cImApO1xuXHR9XG5cdG1hdGNoZXNTeW1ib2woc3ltYm9sKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnQoKTtcblx0XHRyZXR1cm4gdG9rZW4/LmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IHN5bWJvbDtcblx0fVxuXHRjcmVhdGVNYXRoKG5hbWUsIC4uLnZhbHVlcykge1xuXHRcdGNvbnN0IENvbnN0cnVjdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3IodGhpcy53aW4sIG5hbWUpO1xuXHRcdGlmICh0eXBlb2YgQ29uc3RydWN0b3IgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtuYW1lfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG5cdFx0cmV0dXJuIG5ldyBDb25zdHJ1Y3RvciguLi52YWx1ZXMpO1xuXHR9XG5cdHBhcnNlU3VtKCkge1xuXHRcdGxldCB2YWx1ZSA9IHRoaXMucGFyc2VQcm9kdWN0KCk7XG5cdFx0d2hpbGUgKHRoaXMubWF0Y2hlc1N5bWJvbChcIitcIikgfHwgdGhpcy5tYXRjaGVzU3ltYm9sKFwiLVwiKSkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnN1bWUoKTtcblx0XHRcdGNvbnN0IHJpZ2h0ID0gdGhpcy5wYXJzZVByb2R1Y3QoKTtcblx0XHRcdGlmIChvcGVyYXRvci5raW5kICE9PSBcInN5bWJvbFwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBhIHN1bSBvcGVyYXRvclwiKTtcblx0XHRcdGlmIChvcGVyYXRvci52YWx1ZSA9PT0gXCIrXCIpIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFN1bVwiLCB2YWx1ZSwgcmlnaHQpO1xuXHRcdFx0ZWxzZSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhTdW1cIiwgdmFsdWUsIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhOZWdhdGVcIiwgcmlnaHQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdHBhcnNlUHJvZHVjdCgpIHtcblx0XHRsZXQgdmFsdWUgPSB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHR3aGlsZSAodGhpcy5tYXRjaGVzU3ltYm9sKFwiKlwiKSB8fCB0aGlzLm1hdGNoZXNTeW1ib2woXCIvXCIpKSB7XG5cdFx0XHRjb25zdCBvcGVyYXRvciA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0Y29uc3QgcmlnaHQgPSB0aGlzLnBhcnNlVW5hcnkoKTtcblx0XHRcdGlmIChvcGVyYXRvci5raW5kICE9PSBcInN5bWJvbFwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBhIHByb2R1Y3Qgb3BlcmF0b3JcIik7XG5cdFx0XHRpZiAob3BlcmF0b3IudmFsdWUgPT09IFwiKlwiKSB2YWx1ZSA9IHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhQcm9kdWN0XCIsIHZhbHVlLCByaWdodCk7XG5cdFx0XHRlbHNlIHZhbHVlID0gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aFByb2R1Y3RcIiwgdmFsdWUsIHRoaXMuY3JlYXRlTWF0aChcIkNTU01hdGhJbnZlcnRcIiwgcmlnaHQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdHBhcnNlVW5hcnkoKSB7XG5cdFx0aWYgKHRoaXMubWF0Y2hlc1N5bWJvbChcIitcIikpIHtcblx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0cmV0dXJuIHRoaXMucGFyc2VVbmFyeSgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5tYXRjaGVzU3ltYm9sKFwiLVwiKSkge1xuXHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5jcmVhdGVNYXRoKFwiQ1NTTWF0aE5lZ2F0ZVwiLCB0aGlzLnBhcnNlVW5hcnkoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnBhcnNlUHJpbWFyeSgpO1xuXHR9XG5cdHBhcnNlUHJpbWFyeSgpIHtcblx0XHRjb25zdCB0b2tlbiA9IHRoaXMuY29uc3VtZSgpO1xuXHRcdGlmICh0b2tlbi5raW5kID09PSBcIm51bWJlclwiKSByZXR1cm4gY3JlYXRlVHlwZWRVbml0VmFsdWUodGhpcy53aW4sIHRva2VuLnVuaXQgPz8gXCJudW1iZXJcIiwgdG9rZW4udmFsdWUpO1xuXHRcdGlmICh0b2tlbi5raW5kID09PSBcInZhcmlhYmxlXCIpIHtcblx0XHRcdGNvbnN0IHJlYWN0aXZlID0gdGhpcy5yZWFjdGl2ZUJ5TWFya2VyLmdldCh0b2tlbi5tYXJrZXIpO1xuXHRcdFx0aWYgKHJlYWN0aXZlKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1hdGNoZXNTeW1ib2woXCIqXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2hlY2twb2ludCA9IHRoaXMuaW5kZXg7XG5cdFx0XHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRcdFx0Y29uc3QgcmhzID0gdGhpcy5jdXJyZW50KCk7XG5cdFx0XHRcdFx0aWYgKHJocz8ua2luZCA9PT0gXCJudW1iZXJcIiAmJiByaHMudmFsdWUgPT09IDEgJiYgdHlwZW9mIHJocy51bml0ID09PSBcInN0cmluZ1wiICYmICghcmVhY3RpdmUubXVsdGlwbGllZEJ5VW5pdCB8fCByZWFjdGl2ZS5tdWx0aXBsaWVkQnlVbml0ID09PSByaHMudW5pdC50b0xvd2VyQ2FzZSgpKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb25zdW1lKCk7XG5cdFx0XHRcdFx0XHRjb25zdCBsZWFmID0gY3JlYXRlVHlwZWRVbml0VmFsdWUodGhpcy53aW4sIHJocy51bml0LnRvTG93ZXJDYXNlKCksIHJlYWRSZWFjdGl2ZU51bWJlcihyZWFjdGl2ZSkpO1xuXHRcdFx0XHRcdFx0dGhpcy5sZWF2ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHNsb3Q6IHJlYWN0aXZlLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogbGVhZlxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbGVhZjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5pbmRleCA9IGNoZWNrcG9pbnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbGVhZiA9IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHRoaXMud2luLCBcIm51bWJlclwiLCByZWFkUmVhY3RpdmVOdW1iZXIocmVhY3RpdmUpKTtcblx0XHRcdFx0dGhpcy5sZWF2ZXMucHVzaCh7XG5cdFx0XHRcdFx0c2xvdDogcmVhY3RpdmUsXG5cdFx0XHRcdFx0dmFsdWU6IGxlYWZcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBsZWFmO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgdHlwZWQgPSB0aGlzLnR5cGVkQnlNYXJrZXIuZ2V0KHRva2VuLm1hcmtlcik7XG5cdFx0XHRpZiAodHlwZWQpIHJldHVybiB0eXBlZC52YWx1ZTtcblx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5rbm93biBzdHlsZSBzbG90IFwiJHt0b2tlbi5tYXJrZXJ9XCJgKTtcblx0XHR9XG5cdFx0aWYgKHRva2VuLmtpbmQgPT09IFwic3ltYm9sXCIgJiYgdG9rZW4udmFsdWUgPT09IFwiKFwiKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcdGlmICh0b2tlbi5raW5kID09PSBcImlkZW50aWZpZXJcIikgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbih0b2tlbi52YWx1ZSk7XG5cdFx0dGhyb3cgbmV3IFN5bnRheEVycm9yKFwiRXhwZWN0ZWQgYSBUeXBlZCBPTSBudW1lcmljIHZhbHVlXCIpO1xuXHR9XG5cdHBhcnNlRnVuY3Rpb24obmFtZSkge1xuXHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIihcIik7XG5cdFx0aWYgKG5hbWUgPT09IFwiY2FsY1wiKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucGFyc2VTdW0oKTtcblx0XHRcdHRoaXMuY29uc3VtZVN5bWJvbChcIilcIik7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlcyA9IFtdO1xuXHRcdGlmICghdGhpcy5tYXRjaGVzU3ltYm9sKFwiKVwiKSkge1xuXHRcdFx0dmFsdWVzLnB1c2godGhpcy5wYXJzZVN1bSgpKTtcblx0XHRcdHdoaWxlICh0aGlzLm1hdGNoZXNTeW1ib2woXCIsXCIpKSB7XG5cdFx0XHRcdHRoaXMuY29uc3VtZSgpO1xuXHRcdFx0XHR2YWx1ZXMucHVzaCh0aGlzLnBhcnNlU3VtKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmNvbnN1bWVTeW1ib2woXCIpXCIpO1xuXHRcdGlmIChuYW1lID09PSBcIm1pblwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwibWluKCkgcmVxdWlyZXMgYSB2YWx1ZVwiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTWluXCIsIC4uLnZhbHVlcyk7XG5cdFx0fVxuXHRcdGlmIChuYW1lID09PSBcIm1heFwiKSB7XG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwibWF4KCkgcmVxdWlyZXMgYSB2YWx1ZVwiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoTWF4XCIsIC4uLnZhbHVlcyk7XG5cdFx0fVxuXHRcdGlmIChuYW1lID09PSBcImNsYW1wXCIpIHtcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoICE9PSAzKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJjbGFtcCgpIHJlcXVpcmVzIHRocmVlIHZhbHVlc1wiKTtcblx0XHRcdHJldHVybiB0aGlzLmNyZWF0ZU1hdGgoXCJDU1NNYXRoQ2xhbXBcIiwgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgVHlwZWQgT00gZnVuY3Rpb24gXCIke25hbWV9XCJgKTtcblx0fVxufTtcbnZhciBidWlsZE51bWVyaWNUeXBlZE9NVHJlZSA9IChjc3NWYWx1ZSwgd2luLCByZWFjdGl2ZVNsb3RzLCB0eXBlZFNsb3RzKSA9PiB7XG5cdGNvbnN0IHJlYWN0aXZlQnlNYXJrZXIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdCB0eXBlZEJ5TWFya2VyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Zm9yIChjb25zdCBzbG90IG9mIHJlYWN0aXZlU2xvdHMpIHJlYWN0aXZlQnlNYXJrZXIuc2V0KHNsb3QubWFya2VyLCBzbG90KTtcblx0Zm9yIChjb25zdCBzbG90IG9mIHR5cGVkU2xvdHMpIHR5cGVkQnlNYXJrZXIuc2V0KHNsb3QubWFya2VyLCBzbG90KTtcblx0cmV0dXJuIG5ldyBOdW1lcmljVHlwZWRPTVBhcnNlcih0b2tlbml6ZU51bWVyaWNDU1MoY3NzVmFsdWUpLCB3aW4sIHJlYWN0aXZlQnlNYXJrZXIsIHR5cGVkQnlNYXJrZXIpLnBhcnNlKCk7XG59O1xudmFyIGlzVHJhbnNmb3JtU3R5bGVQcm9wZXJ0eSA9IChwcm9wZXJ0eSkgPT4ge1xuXHRyZXR1cm4gcHJvcGVydHkudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJhbnNmb3JtXCI7XG59O1xudmFyIGJ1aWxkVHJhbnNmb3JtVHlwZWRPTVRyZWUgPSAoY3NzVmFsdWUsIHdpbiwgcmVhY3RpdmVTbG90cywgdHlwZWRTbG90cykgPT4ge1xuXHRjb25zdCB0b2tlbnMgPSB0b2tlbml6ZU51bWVyaWNDU1MoY3NzVmFsdWUpO1xuXHRjb25zdCBsZWF2ZXMgPSBbXTtcblx0Y29uc3QgY29tcG9uZW50cyA9IFtdO1xuXHRjb25zdCByZWFjdGl2ZUJ5TWFya2VyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0Y29uc3QgdHlwZWRCeU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiByZWFjdGl2ZVNsb3RzKSByZWFjdGl2ZUJ5TWFya2VyLnNldChzbG90Lm1hcmtlciwgc2xvdCk7XG5cdGZvciAoY29uc3Qgc2xvdCBvZiB0eXBlZFNsb3RzKSB0eXBlZEJ5TWFya2VyLnNldChzbG90Lm1hcmtlciwgc2xvdCk7XG5cdGNvbnN0IHplcm9QeCA9ICgpID0+IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgXCJweFwiLCAwKTtcblx0Y29uc3Qgb25lTnVtYmVyID0gKCkgPT4gY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAxKTtcblx0bGV0IGluZGV4ID0gMDtcblx0Y29uc3QgY3VycmVudCA9ICgpID0+IHRva2Vuc1tpbmRleF07XG5cdGNvbnN0IGNvbnN1bWUgPSAoKSA9PiB7XG5cdFx0Y29uc3QgdG9rZW4gPSB0b2tlbnNbaW5kZXhdO1xuXHRcdGlmICghdG9rZW4pIHRocm93IG5ldyBTeW50YXhFcnJvcihcIlVuZXhwZWN0ZWQgZW5kIG9mIHRyYW5zZm9ybSBleHByZXNzaW9uXCIpO1xuXHRcdGluZGV4Kys7XG5cdFx0cmV0dXJuIHRva2VuO1xuXHR9O1xuXHRjb25zdCBjb25zdW1lU3ltYm9sID0gKHN5bWJvbCkgPT4ge1xuXHRcdGNvbnN0IHRva2VuID0gY29uc3VtZSgpO1xuXHRcdGlmICh0b2tlbi5raW5kICE9PSBcInN5bWJvbFwiIHx8IHRva2VuLnZhbHVlICE9PSBzeW1ib2wpIHRocm93IG5ldyBTeW50YXhFcnJvcihgRXhwZWN0ZWQgXCIke3N5bWJvbH1cImApO1xuXHR9O1xuXHRjb25zdCBwYXJzZUFyZ3VtZW50ID0gKCkgPT4ge1xuXHRcdGNvbnN0IHN0YXJ0ID0gaW5kZXg7XG5cdFx0bGV0IGRlcHRoID0gMDtcblx0XHR3aGlsZSAoaW5kZXggPCB0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleF07XG5cdFx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gXCIoXCIpIHtcblx0XHRcdFx0ZGVwdGgrKztcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gXCIpXCIpIHtcblx0XHRcdFx0aWYgKGRlcHRoID09PSAwKSBicmVhaztcblx0XHRcdFx0ZGVwdGgtLTtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodG9rZW4ua2luZCA9PT0gXCJzeW1ib2xcIiAmJiB0b2tlbi52YWx1ZSA9PT0gXCIsXCIgJiYgZGVwdGggPT09IDApIGJyZWFrO1xuXHRcdFx0aW5kZXgrKztcblx0XHR9XG5cdFx0Y29uc3Qgc2xpY2UgPSB0b2tlbnMuc2xpY2Uoc3RhcnQsIGluZGV4KTtcblx0XHRpZiAoc2xpY2UubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFbXB0eSB0cmFuc2Zvcm0gZnVuY3Rpb24gYXJndW1lbnRcIik7XG5cdFx0Y29uc3QgdHJlZSA9IG5ldyBOdW1lcmljVHlwZWRPTVBhcnNlcihzbGljZSwgd2luLCByZWFjdGl2ZUJ5TWFya2VyLCB0eXBlZEJ5TWFya2VyKS5wYXJzZSgpO1xuXHRcdGxlYXZlcy5wdXNoKC4uLnRyZWUubGVhdmVzKTtcblx0XHRyZXR1cm4gdHJlZS5yb290O1xuXHR9O1xuXHRjb25zdCBwYXJzZUFyZ3VtZW50TGlzdCA9ICgpID0+IHtcblx0XHRjb25zdCBhcmdzID0gW107XG5cdFx0Y29uc3VtZVN5bWJvbChcIihcIik7XG5cdFx0aWYgKCEoY3VycmVudCgpPy5raW5kID09PSBcInN5bWJvbFwiICYmIGN1cnJlbnQoKT8udmFsdWUgPT09IFwiKVwiKSkge1xuXHRcdFx0YXJncy5wdXNoKHBhcnNlQXJndW1lbnQoKSk7XG5cdFx0XHR3aGlsZSAoY3VycmVudCgpPy5raW5kID09PSBcInN5bWJvbFwiICYmIGN1cnJlbnQoKT8udmFsdWUgPT09IFwiLFwiKSB7XG5cdFx0XHRcdGNvbnN1bWUoKTtcblx0XHRcdFx0YXJncy5wdXNoKHBhcnNlQXJndW1lbnQoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN1bWVTeW1ib2woXCIpXCIpO1xuXHRcdHJldHVybiBhcmdzO1xuXHR9O1xuXHRjb25zdCBjcmVhdGVDb21wb25lbnQgPSAobmFtZSwgYXJncykgPT4ge1xuXHRcdGNvbnN0IGN0b3IgPSAoY2xhc3NOYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBDdG9yID0gZ2V0V2luZG93Q29uc3RydWN0b3Iod2luLCBjbGFzc05hbWUpO1xuXHRcdFx0aWYgKHR5cGVvZiBDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7Y2xhc3NOYW1lfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG5cdFx0XHRyZXR1cm4gQ3Rvcjtcblx0XHR9O1xuXHRcdHN3aXRjaCAobmFtZSkge1xuXHRcdFx0Y2FzZSBcInRyYW5zbGF0ZVwiOiB7XG5cdFx0XHRcdGNvbnN0IFRyYW5zbGF0ZSA9IGN0b3IoXCJDU1NUcmFuc2xhdGVcIik7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIG5ldyBUcmFuc2xhdGUoYXJnc1swXSwgemVyb1B4KCkpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDIpIHJldHVybiBuZXcgVHJhbnNsYXRlKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDMpIHJldHVybiBuZXcgVHJhbnNsYXRlKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuXHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJ0cmFuc2xhdGUoKSBleHBlY3RzIDEuLjMgYXJnc1wiKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJ0cmFuc2xhdGV4XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NUcmFuc2xhdGVcIikpKGFyZ3NbMF0sIHplcm9QeCgpKTtcblx0XHRcdGNhc2UgXCJ0cmFuc2xhdGV5XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NUcmFuc2xhdGVcIikpKHplcm9QeCgpLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJ0cmFuc2xhdGV6XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NUcmFuc2xhdGVcIikpKHplcm9QeCgpLCB6ZXJvUHgoKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwidHJhbnNsYXRlM2RcIjpcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoICE9PSAzKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJ0cmFuc2xhdGUzZCgpIGV4cGVjdHMgMyBhcmdzXCIpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IChjdG9yKFwiQ1NTVHJhbnNsYXRlXCIpKShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblx0XHRcdGNhc2UgXCJzY2FsZVwiOiB7XG5cdFx0XHRcdGNvbnN0IFNjYWxlID0gY3RvcihcIkNTU1NjYWxlXCIpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDEpIHJldHVybiBuZXcgU2NhbGUoYXJnc1swXSwgYXJnc1swXSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMikgcmV0dXJuIG5ldyBTY2FsZShhcmdzWzBdLCBhcmdzWzFdKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAzKSByZXR1cm4gbmV3IFNjYWxlKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuXHRcdFx0XHR0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJzY2FsZSgpIGV4cGVjdHMgMS4uMyBhcmdzXCIpO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcInNjYWxleFwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2NhbGVcIikpKGFyZ3NbMF0sIG9uZU51bWJlcigpKTtcblx0XHRcdGNhc2UgXCJzY2FsZXlcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1NjYWxlXCIpKShvbmVOdW1iZXIoKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwic2NhbGV6XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NTY2FsZVwiKSkob25lTnVtYmVyKCksIG9uZU51bWJlcigpLCBhcmdzWzBdKTtcblx0XHRcdGNhc2UgXCJzY2FsZTNkXCI6XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCAhPT0gMykgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwic2NhbGUzZCgpIGV4cGVjdHMgMyBhcmdzXCIpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2NhbGVcIikpKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuXHRcdFx0Y2FzZSBcInJvdGF0ZVwiOiB7XG5cdFx0XHRcdGNvbnN0IFJvdGF0ZSA9IGN0b3IoXCJDU1NSb3RhdGVcIik7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIG5ldyBSb3RhdGUoYXJnc1swXSk7XG5cdFx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gNCkgcmV0dXJuIG5ldyBSb3RhdGUoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG5cdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInJvdGF0ZSgpIGV4cGVjdHMgMSBvciA0IGFyZ3NcIik7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwicm90YXRleFwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTUm90YXRlXCIpKShvbmVOdW1iZXIoKSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwicm90YXRleVwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTUm90YXRlXCIpKShjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBvbmVOdW1iZXIoKSwgY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCAwKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwicm90YXRlelwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTUm90YXRlXCIpKShjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwibnVtYmVyXCIsIDApLCBvbmVOdW1iZXIoKSwgYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwicm90YXRlM2RcIjpcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoICE9PSA0KSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJyb3RhdGUzZCgpIGV4cGVjdHMgNCBhcmdzXCIpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IChjdG9yKFwiQ1NTUm90YXRlXCIpKShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcblx0XHRcdGNhc2UgXCJza2V3XCI6IHtcblx0XHRcdFx0Y29uc3QgU2tldyA9IGN0b3IoXCJDU1NTa2V3XCIpO1xuXHRcdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDEpIHJldHVybiBuZXcgU2tldyhhcmdzWzBdLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIFwiZGVnXCIsIDApKTtcblx0XHRcdFx0aWYgKGFyZ3MubGVuZ3RoID09PSAyKSByZXR1cm4gbmV3IFNrZXcoYXJnc1swXSwgYXJnc1sxXSk7XG5cdFx0XHRcdHRocm93IG5ldyBTeW50YXhFcnJvcihcInNrZXcoKSBleHBlY3RzIDEuLjIgYXJnc1wiKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJza2V3eFwiOiByZXR1cm4gbmV3IChjdG9yKFwiQ1NTU2tld1hcIikpKGFyZ3NbMF0pO1xuXHRcdFx0Y2FzZSBcInNrZXd5XCI6IHJldHVybiBuZXcgKGN0b3IoXCJDU1NTa2V3WVwiKSkoYXJnc1swXSk7XG5cdFx0XHRjYXNlIFwicGVyc3BlY3RpdmVcIjogcmV0dXJuIG5ldyAoY3RvcihcIkNTU1BlcnNwZWN0aXZlXCIpKShhcmdzWzBdKTtcblx0XHRcdGRlZmF1bHQ6IHRocm93IG5ldyBTeW50YXhFcnJvcihgVW5zdXBwb3J0ZWQgdHJhbnNmb3JtIGZ1bmN0aW9uIFwiJHtuYW1lfVwiYCk7XG5cdFx0fVxuXHR9O1xuXHR3aGlsZSAoaW5kZXggPCB0b2tlbnMubGVuZ3RoKSB7XG5cdFx0Y29uc3QgdG9rZW4gPSBjb25zdW1lKCk7XG5cdFx0aWYgKHRva2VuLmtpbmQgIT09IFwiaWRlbnRpZmllclwiKSB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJFeHBlY3RlZCBhIHRyYW5zZm9ybSBmdW5jdGlvbiBuYW1lXCIpO1xuXHRcdGNvbnN0IGFyZ3MgPSBwYXJzZUFyZ3VtZW50TGlzdCgpO1xuXHRcdGNvbXBvbmVudHMucHVzaChjcmVhdGVDb21wb25lbnQodG9rZW4udmFsdWUsIGFyZ3MpKTtcblx0fVxuXHRpZiAoY29tcG9uZW50cy5sZW5ndGggPT09IDApIHRocm93IG5ldyBTeW50YXhFcnJvcihcIkVtcHR5IHRyYW5zZm9ybSBsaXN0XCIpO1xuXHRjb25zdCBDU1NUcmFuc2Zvcm1WYWx1ZUN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih3aW4sIFwiQ1NTVHJhbnNmb3JtVmFsdWVcIik7XG5cdGlmICh0eXBlb2YgQ1NTVHJhbnNmb3JtVmFsdWVDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDU1NUcmFuc2Zvcm1WYWx1ZSBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuXHRyZXR1cm4ge1xuXHRcdHJvb3Q6IG5ldyBDU1NUcmFuc2Zvcm1WYWx1ZUN0b3IoY29tcG9uZW50cyksXG5cdFx0bGVhdmVzXG5cdH07XG59O1xudmFyIGJ1aWxkVHlwZWRPTVN0eWxlVmFsdWUgPSAocHJvcGVydHksIGNzc1ZhbHVlLCB3aW4sIHJlYWN0aXZlU2xvdHMsIHR5cGVkU2xvdHMpID0+IHtcblx0aWYgKGlzVHJhbnNmb3JtU3R5bGVQcm9wZXJ0eShwcm9wZXJ0eSkpIHJldHVybiBidWlsZFRyYW5zZm9ybVR5cGVkT01UcmVlKGNzc1ZhbHVlLCB3aW4sIHJlYWN0aXZlU2xvdHMsIHR5cGVkU2xvdHMpO1xuXHRyZXR1cm4gYnVpbGROdW1lcmljVHlwZWRPTVRyZWUoY3NzVmFsdWUsIHdpbiwgcmVhY3RpdmVTbG90cywgdHlwZWRTbG90cyk7XG59O1xudmFyIGFkZE11dGFibGVMZWF2ZXMgPSAodGFyZ2V0LCBsZWF2ZXMpID0+IHtcblx0Zm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuXHRcdGNvbnN0IGN1cnJlbnQgPSB0YXJnZXQuZ2V0KGxlYWYuc2xvdC5tYXJrZXIpO1xuXHRcdGlmIChjdXJyZW50KSBjdXJyZW50LnB1c2gobGVhZik7XG5cdFx0ZWxzZSB0YXJnZXQuc2V0KGxlYWYuc2xvdC5tYXJrZXIsIFtsZWFmXSk7XG5cdH1cbn07XG52YXIgYXR0YWNoTGVhZlRhcmdldHMgPSAobGVhdmVzLCBwcm9wZXJ0eSwgcm9vdCkgPT4ge1xuXHRyZXR1cm4gbGVhdmVzLm1hcCgobGVhZikgPT4gKHtcblx0XHRzbG90OiBsZWFmLnNsb3QsXG5cdFx0dmFsdWU6IGxlYWYudmFsdWUsXG5cdFx0cHJvcGVydHksXG5cdFx0cm9vdFxuXHR9KSk7XG59O1xudmFyIGFwcGx5U3R5bGVUZW1wbGF0ZSA9IChlbGVtZW50LCBjc3NUZXh0LCB0eXBlZFNsb3RzLCByZWFjdGl2ZVNsb3RzLCB2YXJpYWJsZXMsIGFuaW1hdGFibGVTbG90cykgPT4ge1xuXHRjb25zdCBwcm9iZSA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcblx0cHJvYmUuc3R5bGUuY3NzVGV4dCA9IGNzc1RleHQ7XG5cdGFwcGx5Tm9ybWFsaXplZElubGluZVN0eWxlKGVsZW1lbnQsIFwiXCIpO1xuXHRjb25zdCB0YXJnZXQgPSBlbGVtZW50O1xuXHRjb25zdCBzdHlsZU1hcCA9IHRhcmdldC5hdHRyaWJ1dGVTdHlsZU1hcCA/PyB0YXJnZXQuc3R5bGVNYXA7XG5cdGNvbnN0IHdpbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA/PyBnbG9iYWxUaGlzO1xuXHRjb25zdCBDU1NTdHlsZVZhbHVlQ3RvciA9IHdpbj8uQ1NTU3R5bGVWYWx1ZSA/PyBnbG9iYWxUaGlzLkNTU1N0eWxlVmFsdWU7XG5cdGNvbnN0IG11dGFibGVMZWF2ZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRjb25zdCByZXF1aXJlZENTU1ZhcmlhYmxlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG5cdGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBbXTtcblx0Y29uc3QgcHJvcGVydHlNb2RlT3duZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuXHRmb3IgKGNvbnN0IHNsb3Qgb2YgYW5pbWF0YWJsZVNsb3RzKSB7XG5cdFx0bGV0IHBsYW4gPSBudWxsO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJvYmUuc3R5bGUubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5ID0gcHJvYmUuc3R5bGUuaXRlbShpKTtcblx0XHRcdGNvbnN0IHBhcnNlZFZhbHVlID0gcHJvYmUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSk7XG5cdFx0XHRpZiAoaXNEaXJlY3RTbG90VmFsdWUocGFyc2VkVmFsdWUsIHNsb3QubWFya2VyKSkge1xuXHRcdFx0XHRwbGFuID0ge1xuXHRcdFx0XHRcdG1vZGU6IFwicHJvcGVydHlcIixcblx0XHRcdFx0XHR0YXJnZXQ6IHByb3BlcnR5XG5cdFx0XHRcdH07XG5cdFx0XHRcdGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHNlcmlhbGl6ZUFuaW1hdGFibGVDc3NWYWx1ZShzbG90LnZhbHVlLnZhbHVlKSk7XG5cdFx0XHRcdHByb3BlcnR5TW9kZU93bmVkLmFkZChwcm9wZXJ0eSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGlzRGlyZWN0U2xvdFVuaXRQcm9kdWN0KHBhcnNlZFZhbHVlLCBzbG90Lm1hcmtlciwgc2xvdC5tdWx0aXBsaWVkQnlVbml0KSkge1xuXHRcdFx0XHRwbGFuID0ge1xuXHRcdFx0XHRcdG1vZGU6IFwicHJvcGVydHlcIixcblx0XHRcdFx0XHR0YXJnZXQ6IHByb3BlcnR5LFxuXHRcdFx0XHRcdHVuaXQ6IHNsb3QubXVsdGlwbGllZEJ5VW5pdFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHByb3BlcnR5LCBzZXJpYWxpemVBbmltYXRhYmxlQ3NzVmFsdWUoc2xvdC52YWx1ZS52YWx1ZSwgc2xvdC5tdWx0aXBsaWVkQnlVbml0KSk7XG5cdFx0XHRcdHByb3BlcnR5TW9kZU93bmVkLmFkZChwcm9wZXJ0eSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIXBsYW4pIHtcblx0XHRcdGNvbnN0IGluaXRpYWxOdW1iZXIgPSBOdW1iZXIoc2xvdC52YWx1ZS52YWx1ZSkgfHwgMDtcblx0XHRcdGVuc3VyZVJlZ2lzdGVyZWROdW1iZXJQcm9wZXJ0eSh3aW4sIHNsb3QubWFya2VyLCBpbml0aWFsTnVtYmVyKTtcblx0XHRcdGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc2xvdC5tYXJrZXIsIFN0cmluZyhpbml0aWFsTnVtYmVyKSk7XG5cdFx0XHRwbGFuID0ge1xuXHRcdFx0XHRtb2RlOiBcImN1c3RvbS1wcm9wZXJ0eVwiLFxuXHRcdFx0XHR0YXJnZXQ6IHNsb3QubWFya2VyXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRzdWJzY3JpcHRpb25zLnB1c2goc2xvdC52YWx1ZS5hdHRhY2goZWxlbWVudCwgcGxhbikpO1xuXHR9XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwcm9iZS5zdHlsZS5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRjb25zdCBwcm9wZXJ0eSA9IHByb2JlLnN0eWxlLml0ZW0oaW5kZXgpO1xuXHRcdGlmIChwcm9wZXJ0eU1vZGVPd25lZC5oYXMocHJvcGVydHkpKSBjb250aW51ZTtcblx0XHRjb25zdCBwYXJzZWRWYWx1ZSA9IHByb2JlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpO1xuXHRcdGNvbnN0IHByaW9yaXR5ID0gcHJvYmUuc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0eSk7XG5cdFx0Y29uc3QgdXNlZFR5cGVkU2xvdHMgPSB0eXBlZFNsb3RzLmZpbHRlcigoc2xvdCkgPT4gY29udGFpbnNNYXJrZXIocGFyc2VkVmFsdWUsIHNsb3QubWFya2VyKSk7XG5cdFx0Y29uc3QgdXNlZFJlYWN0aXZlU2xvdHMgPSByZWFjdGl2ZVNsb3RzLmZpbHRlcigoc2xvdCkgPT4gY29udGFpbnNNYXJrZXIocGFyc2VkVmFsdWUsIHNsb3QubWFya2VyKSk7XG5cdFx0aWYgKHVzZWRUeXBlZFNsb3RzLmxlbmd0aCA9PT0gMCAmJiB1c2VkUmVhY3RpdmVTbG90cy5sZW5ndGggPT09IDApIHtcblx0XHRcdGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHBhcnNlZFZhbHVlLCBwcmlvcml0eSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0Y29uc3QgY2FuVXNlVHlwZWRPTSA9IHN0eWxlTWFwPy5zZXQgJiYgIXByaW9yaXR5ICYmICFwcm9wZXJ0eS5zdGFydHNXaXRoKFwiLS1cIik7XG5cdFx0bGV0IGFwcGxpZWRUaHJvdWdoVHlwZWRPTSA9IGZhbHNlO1xuXHRcdGlmIChjYW5Vc2VUeXBlZE9NICYmIHVzZWRSZWFjdGl2ZVNsb3RzLmxlbmd0aCA+IDApIHRyeSB7XG5cdFx0XHRjb25zdCBkaXJlY3RTbG90ID0gdXNlZFJlYWN0aXZlU2xvdHMubGVuZ3RoID09PSAxICYmIHVzZWRUeXBlZFNsb3RzLmxlbmd0aCA9PT0gMCA/IHVzZWRSZWFjdGl2ZVNsb3RzWzBdIDogbnVsbDtcblx0XHRcdGlmIChkaXJlY3RTbG90ICYmIGlzRGlyZWN0U2xvdFVuaXRQcm9kdWN0KHBhcnNlZFZhbHVlLCBkaXJlY3RTbG90Lm1hcmtlciwgZGlyZWN0U2xvdC5tdWx0aXBsaWVkQnlVbml0KSkge1xuXHRcdFx0XHRjb25zdCBsaW5rZWRWYWx1ZSA9IGNyZWF0ZVR5cGVkVW5pdFZhbHVlKHdpbiwgZGlyZWN0U2xvdC5tdWx0aXBsaWVkQnlVbml0LCByZWFkUmVhY3RpdmVOdW1iZXIoZGlyZWN0U2xvdCkpO1xuXHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIGxpbmtlZFZhbHVlKTtcblx0XHRcdFx0YWRkTXV0YWJsZUxlYXZlcyhtdXRhYmxlTGVhdmVzLCBhdHRhY2hMZWFmVGFyZ2V0cyhbe1xuXHRcdFx0XHRcdHNsb3Q6IGRpcmVjdFNsb3QsXG5cdFx0XHRcdFx0dmFsdWU6IGxpbmtlZFZhbHVlXG5cdFx0XHRcdH1dLCBwcm9wZXJ0eSwgbGlua2VkVmFsdWUpKTtcblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAoZGlyZWN0U2xvdCAmJiBpc0RpcmVjdFNsb3RWYWx1ZShwYXJzZWRWYWx1ZSwgZGlyZWN0U2xvdC5tYXJrZXIpKSB7XG5cdFx0XHRcdGNvbnN0IGxpbmtlZFZhbHVlID0gY3JlYXRlVHlwZWRVbml0VmFsdWUod2luLCBcIm51bWJlclwiLCByZWFkUmVhY3RpdmVOdW1iZXIoZGlyZWN0U2xvdCkpO1xuXHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIGxpbmtlZFZhbHVlKTtcblx0XHRcdFx0YWRkTXV0YWJsZUxlYXZlcyhtdXRhYmxlTGVhdmVzLCBhdHRhY2hMZWFmVGFyZ2V0cyhbe1xuXHRcdFx0XHRcdHNsb3Q6IGRpcmVjdFNsb3QsXG5cdFx0XHRcdFx0dmFsdWU6IGxpbmtlZFZhbHVlXG5cdFx0XHRcdH1dLCBwcm9wZXJ0eSwgbGlua2VkVmFsdWUpKTtcblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHRyZWUgPSBidWlsZFR5cGVkT01TdHlsZVZhbHVlKHByb3BlcnR5LCBwYXJzZWRWYWx1ZSwgd2luLCB1c2VkUmVhY3RpdmVTbG90cywgdXNlZFR5cGVkU2xvdHMpO1xuXHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIHRyZWUucm9vdCk7XG5cdFx0XHRcdGFkZE11dGFibGVMZWF2ZXMobXV0YWJsZUxlYXZlcywgYXR0YWNoTGVhZlRhcmdldHModHJlZS5sZWF2ZXMsIHByb3BlcnR5LCB0cmVlLnJvb3QpKTtcblx0XHRcdFx0YXBwbGllZFRocm91Z2hUeXBlZE9NID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHt9XG5cdFx0aWYgKGFwcGxpZWRUaHJvdWdoVHlwZWRPTSkgY29udGludWU7XG5cdFx0aWYgKGNhblVzZVR5cGVkT00gJiYgdXNlZFJlYWN0aXZlU2xvdHMubGVuZ3RoID09PSAwICYmIHVzZWRUeXBlZFNsb3RzLmxlbmd0aCA+IDApIHRyeSB7XG5cdFx0XHRjb25zdCBkaXJlY3RTbG90ID0gdXNlZFR5cGVkU2xvdHMubGVuZ3RoID09PSAxID8gdXNlZFR5cGVkU2xvdHNbMF0gOiBudWxsO1xuXHRcdFx0aWYgKGRpcmVjdFNsb3QgJiYgaXNEaXJlY3RTbG90VmFsdWUocGFyc2VkVmFsdWUsIGRpcmVjdFNsb3QubWFya2VyKSkge1xuXHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIGRpcmVjdFNsb3QudmFsdWUpO1xuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChkaXJlY3RTbG90ICYmIGlzRGlyZWN0U2xvdFVuaXRQcm9kdWN0KHBhcnNlZFZhbHVlLCBkaXJlY3RTbG90Lm1hcmtlciwgZGlyZWN0U2xvdC5tdWx0aXBsaWVkQnlVbml0KSkge1xuXHRcdFx0XHRjb25zdCBDU1NNYXRoUHJvZHVjdEN0b3IgPSBnZXRXaW5kb3dDb25zdHJ1Y3Rvcih3aW4sIFwiQ1NTTWF0aFByb2R1Y3RcIik7XG5cdFx0XHRcdGlmICh0eXBlb2YgQ1NTTWF0aFByb2R1Y3RDdG9yICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDU1NNYXRoUHJvZHVjdCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuXHRcdFx0XHRjb25zdCBwcm9kdWN0ID0gbmV3IENTU01hdGhQcm9kdWN0Q3RvcihkaXJlY3RTbG90LnZhbHVlLCBjcmVhdGVUeXBlZFVuaXRWYWx1ZSh3aW4sIGRpcmVjdFNsb3QubXVsdGlwbGllZEJ5VW5pdCwgMSkpO1xuXHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIHByb2R1Y3QpO1xuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCB0cmVlID0gYnVpbGRUeXBlZE9NU3R5bGVWYWx1ZShwcm9wZXJ0eSwgcGFyc2VkVmFsdWUsIHdpbiwgW10sIHVzZWRUeXBlZFNsb3RzKTtcblx0XHRcdFx0XHRzdHlsZU1hcC5zZXQocHJvcGVydHksIHRyZWUucm9vdCk7XG5cdFx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRcdGNvbnN0IHJlY29uc3RydWN0ZWQgPSByZXBsYWNlVHlwZWRNYXJrZXJzKHBhcnNlZFZhbHVlLCB1c2VkVHlwZWRTbG90cyk7XG5cdFx0XHRcdFx0c2V0UGFyc2VkVHlwZWRWYWx1ZShzdHlsZU1hcCwgQ1NTU3R5bGVWYWx1ZUN0b3IsIHByb3BlcnR5LCByZWNvbnN0cnVjdGVkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcHBsaWVkVGhyb3VnaFR5cGVkT00gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge31cblx0XHRpZiAoYXBwbGllZFRocm91Z2hUeXBlZE9NKSBjb250aW51ZTtcblx0XHRjb25zdCByZWNvbnN0cnVjdGVkID0gcmVwbGFjZVR5cGVkTWFya2VycyhwYXJzZWRWYWx1ZSwgdXNlZFR5cGVkU2xvdHMpO1xuXHRcdGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHJlY29uc3RydWN0ZWQsIHByaW9yaXR5KTtcblx0XHRmb3IgKGNvbnN0IHNsb3Qgb2YgdXNlZFJlYWN0aXZlU2xvdHMpIHJlcXVpcmVkQ1NTVmFyaWFibGVzLmFkZChzbG90Lm1hcmtlcik7XG5cdH1cblx0Zm9yIChjb25zdCBzbG90IG9mIHJlYWN0aXZlU2xvdHMpIHtcblx0XHRjb25zdCBsZWF2ZXMgPSBtdXRhYmxlTGVhdmVzLmdldChzbG90Lm1hcmtlcikgPz8gW107XG5cdFx0Y29uc3QgbmVlZHNDU1NWYXJpYWJsZSA9IHJlcXVpcmVkQ1NTVmFyaWFibGVzLmhhcyhzbG90Lm1hcmtlcik7XG5cdFx0aWYgKGxlYXZlcy5sZW5ndGggPT09IDAgJiYgIW5lZWRzQ1NTVmFyaWFibGUpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHN1YnNjcmlwdGlvbiA9IGJpbmRXaXRoKGVsZW1lbnQsIHNsb3QubWFya2VyLCBzbG90LnZhbHVlLCBmdW5jdGlvbiguLi5hcmdzKSB7XG5cdFx0XHRpZiAobGVhdmVzLmxlbmd0aCA+IDApIHRyeSB7XG5cdFx0XHRcdGNvbnN0IG5leHRWYWx1ZSA9IHJlYWRSZWFjdGl2ZU51bWJlcihzbG90KTtcblx0XHRcdFx0Y29uc3QgZGlydHlSb290cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdFx0XHRcdGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcblx0XHRcdFx0XHRsZWFmLnZhbHVlLnZhbHVlID0gbmV4dFZhbHVlO1xuXHRcdFx0XHRcdGRpcnR5Um9vdHMuc2V0KGxlYWYucHJvcGVydHksIGxlYWYucm9vdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHN0eWxlTWFwPy5zZXQpIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgcm9vdF0gb2YgZGlydHlSb290cykgc3R5bGVNYXAuc2V0KHByb3BlcnR5TmFtZSwgcm9vdCk7XG5cdFx0XHR9IGNhdGNoIHt9XG5cdFx0XHRpZiAobmVlZHNDU1NWYXJpYWJsZSkgaGFuZGxlU3R5bGVDaGFuZ2UuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0fSk7XG5cdFx0c3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG5cdH1cblx0Zm9yIChjb25zdCBuYW1lIG9mIHJlcXVpcmVkQ1NTVmFyaWFibGVzKSB7XG5cdFx0aWYgKHJlYWN0aXZlU2xvdHMuc29tZSgoc2xvdCkgPT4gc2xvdC5tYXJrZXIgPT09IG5hbWUpKSBjb250aW51ZTtcblx0XHRjb25zdCB2YWx1ZSA9IHZhcmlhYmxlcy5nZXQobmFtZSk7XG5cdFx0aWYgKHZhbHVlID09IG51bGwpIGNvbnRpbnVlO1xuXHRcdHN1YnNjcmlwdGlvbnMucHVzaChiaW5kV2l0aChlbGVtZW50LCBuYW1lLCB2YWx1ZSwgaGFuZGxlU3R5bGVDaGFuZ2UpKTtcblx0fVxuXHRwcnVuZUVtcHR5U3R5bGVBdHRyaWJ1dGUoZWxlbWVudCk7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucykgc3Vic2NyaXB0aW9uPy4oKTtcblx0fTtcbn07XG52YXIgY29tcGxpbGVTdGF0aWNDU1NUZXh0ID0gKGZvclJldHVybikgPT4ge1xuXHRjb25zdCBbYXBwbHksIHByb3BlcnRpZXMsIHZhcmlhYmxlc10gPSBmb3JSZXR1cm47XG5cdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRhcHBseShlbGVtZW50KTtcblx0cmV0dXJuIGVsZW1lbnQuc3R5bGUuY3NzVGV4dDtcbn07XG52YXIgUyA9IChzdHJpbmdzLCAuLi52YWx1ZXMpID0+IHtcblx0Y29uc3QgdGVtcGxhdGVJZCA9IHN0eWxlVGVtcGxhdGVJZCsrO1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gW107XG5cdGNvbnN0IHZhcmlhYmxlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5cdGNvbnN0IHR5cGVkU2xvdHMgPSBbXTtcblx0Y29uc3QgcmVhY3RpdmVTbG90cyA9IFtdO1xuXHRjb25zdCBwYXJ0cyA9IFtdO1xuXHRjb25zdCBhbmltYXRhYmxlU2xvdHMgPSBbXTtcblx0Y29uc3QgY29uc3VtZWQgPSBuZXcgQXJyYXkoc3RyaW5ncy5sZW5ndGgpLmZpbGwoMCk7XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdHJpbmdzLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdHBhcnRzLnB1c2goc3RyaW5nc1tpbmRleF0uc2xpY2UoY29uc3VtZWRbaW5kZXhdKSk7XG5cdFx0aWYgKGluZGV4ID49IHZhbHVlcy5sZW5ndGgpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHZhbHVlID0gdmFsdWVzW2luZGV4XTtcblx0XHRjb25zdCBuZXh0VGV4dCA9IHN0cmluZ3NbaW5kZXggKyAxXSA/PyBcIlwiO1xuXHRcdGNvbnN0IGF0dGFjaGVkVW5pdCA9IHJlYWRBdHRhY2hlZENTU1VuaXQobmV4dFRleHQpO1xuXHRcdGlmIChpc05hdGl2ZUNTU1N0eWxlVmFsdWUodmFsdWUpKSB7XG5cdFx0XHRjb25zdCBtYXJrZXIgPSBgLS1mZXN0LXR5cGVkLSR7dGVtcGxhdGVJZH0tJHt0eXBlZFNsb3RzLmxlbmd0aH1gO1xuXHRcdFx0dHlwZWRTbG90cy5wdXNoKHtcblx0XHRcdFx0bWFya2VyLFxuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0bXVsdGlwbGllZEJ5VW5pdDogYXR0YWNoZWRVbml0Py5ub3JtYWxpemVkXG5cdFx0XHR9KTtcblx0XHRcdGlmIChhdHRhY2hlZFVuaXQpIHtcblx0XHRcdFx0cGFydHMucHVzaChgY2FsYyh2YXIoJHttYXJrZXJ9KSAqIDEke2F0dGFjaGVkVW5pdC5hdXRob3JlZH0pYCk7XG5cdFx0XHRcdGNvbnN1bWVkW2luZGV4ICsgMV0gKz0gYXR0YWNoZWRVbml0Lmxlbmd0aDtcblx0XHRcdH0gZWxzZSBwYXJ0cy5wdXNoKGB2YXIoJHttYXJrZXJ9KWApO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChpc0FuaW1hdGFibGVWYWx1ZSh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0IG1hcmtlciA9IGAtLWZlc3QtYW5pbS0ke3RlbXBsYXRlSWR9LSR7YW5pbWF0YWJsZVNsb3RzLmxlbmd0aH1gO1xuXHRcdFx0aWYgKGF0dGFjaGVkVW5pdCkge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGBjYWxjKHZhcigke21hcmtlcn0pICogMSR7YXR0YWNoZWRVbml0LmF1dGhvcmVkfSlgKTtcblx0XHRcdFx0Y29uc3VtZWRbaW5kZXggKyAxXSArPSBhdHRhY2hlZFVuaXQubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHBhcnRzLnB1c2goYHZhcigke21hcmtlcn0pYCk7XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2goYEBwcm9wZXJ0eSAke21hcmtlcn0geyBzeW50YXg6IFwiPG51bWJlcj5cIjsgaW5pdGlhbC12YWx1ZTogJHtOdW1iZXIodmFsdWUudmFsdWUpIHx8IDB9OyBpbmhlcml0czogZmFsc2U7IH07YCk7XG5cdFx0XHRhbmltYXRhYmxlU2xvdHMucHVzaCh7XG5cdFx0XHRcdG1hcmtlcixcblx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdG11bHRpcGxpZWRCeVVuaXQ6IGF0dGFjaGVkVW5pdD8ubm9ybWFsaXplZFxuXHRcdFx0fSk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKGlzUmVhY3RpdmVTdHlsZVZhbHVlKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgbWFya2VyID0gYC0tZmVzdC1yZWYtJHt0ZW1wbGF0ZUlkfS0ke3JlYWN0aXZlU2xvdHMubGVuZ3RofWA7XG5cdFx0XHRyZWFjdGl2ZVNsb3RzLnB1c2goe1xuXHRcdFx0XHRtYXJrZXIsXG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRtdWx0aXBsaWVkQnlVbml0OiBhdHRhY2hlZFVuaXQ/Lm5vcm1hbGl6ZWRcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGF0dGFjaGVkVW5pdCkge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGBjYWxjKHZhcigke21hcmtlcn0pICogMSR7YXR0YWNoZWRVbml0LmF1dGhvcmVkfSlgKTtcblx0XHRcdFx0Y29uc3VtZWRbaW5kZXggKyAxXSArPSBhdHRhY2hlZFVuaXQubGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHBhcnRzLnB1c2goYHZhcigke21hcmtlcn0pYCk7XG5cdFx0XHRjb25zdCBpbml0aWFsVmFsdWUgPSBnZXRSZWFjdGl2ZUluaXRpYWxOdW1iZXIodmFsdWUpO1xuXHRcdFx0cHJvcGVydGllcy5wdXNoKGBAcHJvcGVydHkgJHttYXJrZXJ9IHsgc3ludGF4OiBcIjxudW1iZXI+XCI7IGluaXRpYWwtdmFsdWU6ICR7aW5pdGlhbFZhbHVlfTsgaW5oZXJpdHM6IHRydWU7IH07YCk7XG5cdFx0XHR2YXJpYWJsZXMuc2V0KG1hcmtlciwgdmFsdWUpO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIgJiYgdmFsdWUgIT0gbnVsbCAmJiBTdHJpbmcodmFsdWUpLnRyaW0oKSAhPT0gXCJcIikgcGFydHMucHVzaChTdHJpbmcodmFsdWUpKTtcblx0fVxuXHRjb25zdCBmb3JSZXR1cm4gPSBbXG5cdFx0KGVsZW1lbnQpID0+IHtcblx0XHRcdHJldHVybiBhcHBseVN0eWxlVGVtcGxhdGUoZWxlbWVudCwgcGFydHMuam9pbihcIlwiKSwgdHlwZWRTbG90cywgcmVhY3RpdmVTbG90cywgdmFyaWFibGVzLCBhbmltYXRhYmxlU2xvdHMpO1xuXHRcdH0sXG5cdFx0cHJvcGVydGllcyxcblx0XHR2YXJpYWJsZXNcblx0XTtcblx0Zm9yUmV0dXJuW1N5bWJvbC50b1N0cmluZ1RhZ10gPSAoKSA9PiBjb21wbGlsZVN0YXRpY0NTU1RleHQoZm9yUmV0dXJuKTtcblx0Zm9yUmV0dXJuW1N5bWJvbC50b1ByaW1pdGl2ZV0gPSAodHlwZSkgPT4ge1xuXHRcdGlmICh0eXBlID09PSBcInN0cmluZ1wiKSByZXR1cm4gY29tcGxpbGVTdGF0aWNDU1NUZXh0KGZvclJldHVybik7XG5cdFx0cmV0dXJuIGZvclJldHVyblswXTtcblx0fTtcblx0Zm9yUmV0dXJuLnRvU3RyaW5nID0gKCkgPT4gY29tcGxpbGVTdGF0aWNDU1NUZXh0KGZvclJldHVybik7XG5cdGZvclJldHVybi52YWx1ZU9mID0gKCkgPT4gY29tcGxpbGVTdGF0aWNDU1NUZXh0KGZvclJldHVybik7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmb3JSZXR1cm4sIFwiY3NzVGV4dFwiLCB7XG5cdFx0Z2V0OiAoKSA9PiBjb21wbGlsZVN0YXRpY0NTU1RleHQoZm9yUmV0dXJuKSxcblx0XHRzZXQ6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0Y29uc29sZS5sb2coXCJzZXQgY3NzVGV4dFwiLCB2YWx1ZSk7XG5cdFx0XHRjb25zdCBbYXBwbHksIHByb3BlcnRpZXMsIHZhcmlhYmxlc10gPSBmb3JSZXR1cm47XG5cdFx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGFwcGx5KGVsZW1lbnQpO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gdmFsdWU7XG5cdFx0fSxcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0ZW51bWVyYWJsZTogdHJ1ZVxuXHR9KTtcblx0cmV0dXJuIGZvclJldHVybjtcbn07XG52YXIgY3NzID0gKHN0cmluZ3MsIC4uLnZhbHVlcykgPT4ge1xuXHRyZXR1cm4gUyhzdHJpbmdzLCAuLi52YWx1ZXMpO1xufTtcbnZhciBzcGxpdElubGluZVN0eWxlUGxhY2Vob2xkZXJzID0gKHNvdXJjZSwgYXR0cmlidXRlcykgPT4ge1xuXHRjb25zdCBzdHJpbmdzID0gW107XG5cdGNvbnN0IHZhbHVlcyA9IFtdO1xuXHRjb25zdCBwYXR0ZXJuID0gLyNcXHsoXFxkKylcXH0vZztcblx0bGV0IGN1cnNvciA9IDA7XG5cdGxldCBtYXRjaDtcblx0d2hpbGUgKChtYXRjaCA9IHBhdHRlcm4uZXhlYyhzb3VyY2UpKSAhPSBudWxsKSB7XG5cdFx0Y29uc3QgYXR0cmlidXRlSW5kZXggPSBOdW1iZXIucGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcblx0XHRpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGF0dHJpYnV0ZUluZGV4KSB8fCBhdHRyaWJ1dGVJbmRleCA8IDApIGNvbnRpbnVlO1xuXHRcdHN0cmluZ3MucHVzaChzb3VyY2Uuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpO1xuXHRcdHZhbHVlcy5wdXNoKGF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdKTtcblx0XHRjdXJzb3IgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcblx0fVxuXHRpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cdHN0cmluZ3MucHVzaChzb3VyY2Uuc2xpY2UoY3Vyc29yKSk7XG5cdHJldHVybiB7XG5cdFx0c3RyaW5ncyxcblx0XHR2YWx1ZXNcblx0fTtcbn07XG52YXIgam9pblN0YXRpY0lubGluZVN0eWxlID0gKHN0cmluZ3MsIHZhbHVlcykgPT4ge1xuXHRsZXQgcmVzdWx0ID0gc3RyaW5nc1swXSA/PyBcIlwiO1xuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWVzLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdGNvbnN0IHZhbHVlID0gdmFsdWVzW2luZGV4XTtcblx0XHRpZiAodmFsdWUgIT0gbnVsbCkgcmVzdWx0ICs9IFN0cmluZyh2YWx1ZSk7XG5cdFx0cmVzdWx0ICs9IHN0cmluZ3NbaW5kZXggKyAxXSA/PyBcIlwiO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59O1xudmFyIGNvbXBpbGVJbmxpbmVTdHlsZUF0dHJpYnV0ZSA9IChzb3VyY2UsIGF0dHJpYnV0ZXMpID0+IHtcblx0Y29uc3QgcGFyc2VkID0gc3BsaXRJbmxpbmVTdHlsZVBsYWNlaG9sZGVycyhzb3VyY2UsIGF0dHJpYnV0ZXMpO1xuXHRpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHsgc3RyaW5ncywgdmFsdWVzIH0gPSBwYXJzZWQ7XG5cdGlmICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIChzdHJpbmdzWzBdID8/IFwiXCIpLnRyaW0oKSA9PT0gXCJcIiAmJiAoc3RyaW5nc1sxXSA/PyBcIlwiKS50cmltKCkgPT09IFwiXCIgJiYgIWlzU3RhdGljU3R5bGVJbnRlcnBvbGF0aW9uKHZhbHVlc1swXSkgJiYgIWlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWx1ZXNbMF0pKSB7XG5cdFx0aWYgKGlzU3R5bGVCaW5kaW5nKHZhbHVlc1swXSkpIHJldHVybiB7XG5cdFx0XHRraW5kOiBcInRlbXBsYXRlXCIsXG5cdFx0XHRiaW5kaW5nOiB2YWx1ZXNbMF1cblx0XHR9O1xuXHRcdHJldHVybiB7XG5cdFx0XHRraW5kOiBcImRpcmVjdFwiLFxuXHRcdFx0dmFsdWU6IHZhbHVlc1swXVxuXHRcdH07XG5cdH1cblx0aWYgKHZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpIHx8IGlzTmF0aXZlQ1NTU3R5bGVWYWx1ZSh2YWx1ZSkpKSByZXR1cm4ge1xuXHRcdGtpbmQ6IFwidGVtcGxhdGVcIixcblx0XHRiaW5kaW5nOiBTKHN0cmluZ3MsIC4uLnZhbHVlcylcblx0fTtcblx0aWYgKHZhbHVlcy5ldmVyeShpc1N0YXRpY1N0eWxlSW50ZXJwb2xhdGlvbikpIHJldHVybiB7XG5cdFx0a2luZDogXCJzdGF0aWNcIixcblx0XHRjc3NUZXh0OiBqb2luU3RhdGljSW5saW5lU3R5bGUoc3RyaW5ncywgdmFsdWVzKVxuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGtpbmQ6IFwidGVtcGxhdGVcIixcblx0XHRiaW5kaW5nOiBTKHN0cmluZ3MsIC4uLnZhbHVlcylcblx0fTtcbn07XG52YXIgYmluZFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlZCkgPT4ge1xuXHRjb25zdCBhcHBseSA9IEFycmF5LmlzQXJyYXkoc3R5bGVkKSA/IHN0eWxlZFswXSA6IHN0eWxlZDtcblx0aWYgKHR5cGVvZiBhcHBseSAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gKCkgPT4ge307XG5cdGNvbnN0IHJlc3VsdCA9IGFwcGx5KGVsZW1lbnQpO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICh0eXBlb2YgcmVzdWx0ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJlc3VsdCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRyZXN1bHQ/LnVuYmluZD8uKCk7XG5cdH07XG59O1xudmFyIGVuc3VyZVJlZ2lzdGVyZWROdW1iZXJQcm9wZXJ0eSA9ICh3aW4sIG5hbWUsIGluaXRpYWxWYWx1ZSkgPT4ge1xuXHRpZiAocmVnaXN0ZXJlZFByb3BlcnRpZXMuaGFzKG5hbWUpKSByZXR1cm47XG5cdHJlZ2lzdGVyZWRQcm9wZXJ0aWVzLmFkZChuYW1lKTtcblx0dHJ5IHtcblx0XHQod2luPy5DU1MgPz8gQ1NTKT8ucmVnaXN0ZXJQcm9wZXJ0eT8uKHtcblx0XHRcdG5hbWUsXG5cdFx0XHRzeW50YXg6IFwiPG51bWJlcj5cIixcblx0XHRcdGluaXRpYWxWYWx1ZTogU3RyaW5nKGluaXRpYWxWYWx1ZSksXG5cdFx0XHRpbmhlcml0czogZmFsc2Vcblx0XHR9KTtcblx0fSBjYXRjaCB7fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL0FuaW1hdGUudHNcbnZhciBwYXJzZVByb3BlcnR5TGlzdCA9IChvcHRpb25zKSA9PiB7XG5cdGNvbnN0IGZyb21TdHJpbmcgPSBbXTtcblx0aWYgKHR5cGVvZiBvcHRpb25zLnByb3BlcnRpZXMgPT0gXCJzdHJpbmdcIikge1xuXHRcdGNvbnN0IHByb3BzID0gb3B0aW9ucy5wcm9wZXJ0aWVzPy50cmltPy4oKT8uc3BsaXQ/LihcIjtcIik7XG5cdFx0ZnJvbVN0cmluZy5wdXNoKC4uLkFycmF5LmZyb20ocHJvcHMgfHwgW10pPy5tYXA/LigoJHBhaXIpID0+IHtcblx0XHRcdGlmICgkcGFpcj8uaW5jbHVkZXM/LihcIjpcIikpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSAoJHBhaXI/LnNwbGl0Py4oXCI6XCIpID8/IFtdKT8uc2xpY2U/LigxLCAtMSk/LmpvaW4/LihcIjpcIik7XG5cdFx0XHRcdHJldHVybiB7IFsoJHBhaXI/LlswXSk/LnRyaW0/LigpXTogdmFsdWU/LnRyaW0/LigpIH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9KT8uZmlsdGVyPy4oKGEpID0+IGEgIT0gbnVsbCkgfHwgW10pO1xuXHR9XG5cdHJldHVybiBBcnJheS5mcm9tKEFycmF5LmlzQXJyYXkob3B0aW9ucy5wcm9wZXJ0aWVzKSA/IG9wdGlvbnMucHJvcGVydGllcyA6IGZyb21TdHJpbmcpO1xufTtcbnZhciBwYXJzZUFuaW1hdGlvblRlbXBsYXRlID0gKHN0cmluZ3MsIHZhbHVlcykgPT4ge1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcblx0bGV0IGZ1bGxUZXh0ID0gXCJcIjtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZnVsbFRleHQgKz0gc3RyaW5nc1tpXTtcblx0XHRpZiAoaSA8IHZhbHVlcy5sZW5ndGgpIGZ1bGxUZXh0ICs9IGBfX1NMT1RfJHtpfV9fYDtcblx0fVxuXHRjb25zdCBkZWNsYXJhdGlvbnMgPSBmdWxsVGV4dC5zcGxpdChcIjtcIikubWFwKChzKSA9PiBzLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pO1xuXHRmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGRlY2xhcmF0aW9ucykge1xuXHRcdGNvbnN0IGNvbG9uSW5kZXggPSBkZWNsYXJhdGlvbi5pbmRleE9mKFwiOlwiKTtcblx0XHRpZiAoY29sb25JbmRleCA9PT0gLTEpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gZGVjbGFyYXRpb24uc2xpY2UoMCwgY29sb25JbmRleCkudHJpbSgpO1xuXHRcdGNvbnN0IHZhbHVlVGV4dCA9IGRlY2xhcmF0aW9uLnNsaWNlKGNvbG9uSW5kZXggKyAxKS50cmltKCk7XG5cdFx0Y29uc3Qgc2xvdE1hdGNoID0gL19fU0xPVF8oXFxkKylfXy8uZXhlYyh2YWx1ZVRleHQpO1xuXHRcdGlmICghc2xvdE1hdGNoKSBjb250aW51ZTtcblx0XHRjb25zdCBzbG90VmFsdWUgPSB2YWx1ZXNbcGFyc2VJbnQoc2xvdE1hdGNoWzFdLCAxMCldO1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShzbG90VmFsdWUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBBXFxgJHtwcm9wZXJ0eX1cXGAgZXhwZWN0cyBhbiBhcnJheSBvZiB2YWx1ZXMsIGdvdCAke3R5cGVvZiBzbG90VmFsdWV9YCk7XG5cdFx0cHJvcGVydGllcy5zZXQocHJvcGVydHksIHtcblx0XHRcdHByb3BlcnR5LFxuXHRcdFx0dmFsdWVzOiBzbG90VmFsdWVcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4geyBwcm9wZXJ0aWVzIH07XG59O1xudmFyIHByb2Nlc3NBbmltYXRpb25WYWx1ZXMgPSAodmFsdWVzKSA9PiB7XG5cdGNvbnN0IHJlc29sdmVkID0gW107XG5cdGNvbnN0IHJlYWN0aXZlSW5kaWNlcyA9IFtdO1xuXHRsZXQgaGFzUmVhY3RpdmUgPSBmYWxzZTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCB2YWx1ZSA9IHZhbHVlc1tpXTtcblx0XHRpZiAoaXNSZWFjdGl2ZVN0eWxlVmFsdWUodmFsdWUpKSB7XG5cdFx0XHRoYXNSZWFjdGl2ZSA9IHRydWU7XG5cdFx0XHRyZWFjdGl2ZUluZGljZXMucHVzaChpKTtcblx0XHRcdHJlc29sdmVkLnB1c2godmFsdWUudmFsdWUpO1xuXHRcdH0gZWxzZSBpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkgcmVzb2x2ZWQucHVzaCh2YWx1ZSk7XG5cdFx0ZWxzZSByZXNvbHZlZC5wdXNoKHZhbHVlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdHJlc29sdmVkLFxuXHRcdGhhc1JlYWN0aXZlLFxuXHRcdHJlYWN0aXZlSW5kaWNlc1xuXHR9O1xufTtcbnZhciBidWlsZFdlYkFuaW1hdGlvbktleWZyYW1lcyA9IChvcHRpb25zKSA9PiB7XG5cdGNvbnN0IGdsb2JhbE9mZnNldHMgPSBvcHRpb25zPy5vZmZzZXRzO1xuXHRjb25zdCBwcm9wZXJ0eUxpc3QgPSBwYXJzZVByb3BlcnR5TGlzdChvcHRpb25zKTtcblx0aWYgKHByb3BlcnR5TGlzdC5sZW5ndGggPT09IDApIHRocm93IG5ldyBFcnJvcihcIk5vIGFuaW1hdGFibGUgcHJvcGVydGllcyBmb3VuZCBpbiBBIHRlbXBsYXRlXCIpO1xuXHRjb25zdCBtYXhMZW5ndGggPSBNYXRoLm1heCguLi5wcm9wZXJ0eUxpc3QubWFwKChwKSA9PiBwLnZhbHVlcy5sZW5ndGgpKTtcblx0Y29uc3Qgb2Zmc2V0cyA9IChnbG9iYWxPZmZzZXRzPy5sZW5ndGggPiAxID8gZ2xvYmFsT2Zmc2V0cyA6IG51bGwpIHx8IEFycmF5LmZyb20oeyBsZW5ndGg6IG1heExlbmd0aCB9LCAoXywgaSkgPT4gaSAvIChtYXhMZW5ndGggLSAxKSk7XG5cdGNvbnN0IGZyYW1lcyA9IFtdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IG1heExlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgZnJhbWUgPSB7IG9mZnNldDogb2Zmc2V0c1tpXSA/PyBpIC8gKG1heExlbmd0aCAtIDEpIH07XG5cdFx0Zm9yIChjb25zdCBwcm9wIG9mIHByb3BlcnR5TGlzdCkge1xuXHRcdFx0Y29uc3QgeyByZXNvbHZlZCB9ID0gcHJvY2Vzc0FuaW1hdGlvblZhbHVlcyhwcm9wLnZhbHVlcyk7XG5cdFx0XHRjb25zdCBrZWJhYlByb3AgPSBjYW1lbFRvS2ViYWIocHJvcC5wcm9wZXJ0eSk7XG5cdFx0XHRsZXQgdmFsdWUgPSByZXNvbHZlZFtNYXRoLm1pbihpLCByZXNvbHZlZC5sZW5ndGggLSAxKV07XG5cdFx0XHRpZiAoaXNOYXRpdmVDU1NTdHlsZVZhbHVlKHZhbHVlKSkgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdFx0ZnJhbWVba2ViYWJQcm9wXSA9IHZhbHVlO1xuXHRcdH1cblx0XHRmcmFtZXMucHVzaChmcmFtZSk7XG5cdH1cblx0cmV0dXJuIGZyYW1lcztcbn07XG52YXIgYnVpbGRBbmltYXRpb25UaW1pbmcgPSAob3B0aW9ucykgPT4ge1xuXHRjb25zdCBkdXJhdGlvbiA9IHBhcnNlVGltZShvcHRpb25zLmR1cmF0aW9uID8/IDMwMCk7XG5cdGNvbnN0IGRlbGF5ID0gcGFyc2VUaW1lKG9wdGlvbnMuZGVsYXkgPz8gMCk7XG5cdGNvbnN0IGl0ZXJhdGlvbnMgPSBub3JtYWxpemVJdGVyYXRpb25Db3VudChvcHRpb25zLml0ZXJhdGlvbkNvdW50KTtcblx0cmV0dXJuIHtcblx0XHRkdXJhdGlvbixcblx0XHRkZWxheSxcblx0XHRjb21wb3NpdGU6IG9wdGlvbnMuY29tcG9zaXRlIHx8IFwicmVwbGFjZVwiLFxuXHRcdGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbnMgPT09IFwiSW5maW5pdHlcIiA/IEluZmluaXR5IDogaXRlcmF0aW9ucyxcblx0XHRmaWxsOiBvcHRpb25zLmZpbGxNb2RlID8/IFwibm9uZVwiLFxuXHRcdGRpcmVjdGlvbjogb3B0aW9ucy5kaXJlY3Rpb24gPz8gXCJub3JtYWxcIixcblx0XHRlYXNpbmc6IHR5cGVvZiBvcHRpb25zLmVhc2luZyA9PT0gXCJzdHJpbmdcIiA/IG9wdGlvbnMuZWFzaW5nIDogXCJsaW5lYXJcIixcblx0XHR0aW1lbGluZTogb3B0aW9ucy50aW1lbGluZVxuXHR9O1xufTtcbnZhciBjcmVhdGVSZWFjdGl2ZUFuaW1hdGlvbiA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHByb3BlcnR5TGlzdCA9IHBhcnNlUHJvcGVydHlMaXN0KG9wdGlvbnMpO1xuXHRjb25zdCBzdWJzY3JpcHRpb25zID0gW107XG5cdGNvbnN0IGZyYW1lcyA9IGJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzKG9wdGlvbnMpO1xuXHRjb25zdCB0aW1pbmcgPSBidWlsZEFuaW1hdGlvblRpbWluZyhvcHRpb25zKTtcblx0Y29uc3QgYW5pbWF0aW9uID0gZWxlbWVudC5hbmltYXRlKGZyYW1lcywgdGltaW5nKTtcblx0Zm9yIChjb25zdCBwcm9wIG9mIHByb3BlcnR5TGlzdCkge1xuXHRcdGNvbnN0IHsgaGFzUmVhY3RpdmUsIHJlYWN0aXZlSW5kaWNlcyB9ID0gcHJvY2Vzc0FuaW1hdGlvblZhbHVlcyhwcm9wLnZhbHVlcyk7XG5cdFx0aWYgKCFoYXNSZWFjdGl2ZSkgY29udGludWU7XG5cdFx0Zm9yIChjb25zdCBpbmRleCBvZiByZWFjdGl2ZUluZGljZXMpIHtcblx0XHRcdGNvbnN0IHJlYWN0aXZlVmFsdWUgPSBwcm9wLnZhbHVlc1tpbmRleF07XG5cdFx0XHRjb25zdCBzdWJzY3JpcHRpb24gPSBiaW5kV2l0aChlbGVtZW50LCBgLS1hbmltLSR7cHJvcC5wcm9wZXJ0eX0tJHtpbmRleH1gLCByZWFjdGl2ZVZhbHVlLCAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG5ld0ZyYW1lcyA9IGJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzKG9wdGlvbnMpO1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VGltZSA9IGFuaW1hdGlvbi5jdXJyZW50VGltZTtcblx0XHRcdFx0YW5pbWF0aW9uLmVmZmVjdCA9IG5ldyBLZXlmcmFtZUVmZmVjdChlbGVtZW50LCBuZXdGcmFtZXMsIHRpbWluZyk7XG5cdFx0XHRcdGlmIChjdXJyZW50VGltZSAhPT0gbnVsbCkgYW5pbWF0aW9uLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG5cdFx0XHR9KTtcblx0XHRcdHN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuXHRcdH1cblx0fVxuXHRjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuXHRcdGFuaW1hdGlvbi5jYW5jZWwoKTtcblx0XHRzdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViKCkpO1xuXHR9O1xuXHRyZXR1cm4ge1xuXHRcdGFuaW1hdGlvbixcblx0XHRjbGVhbnVwXG5cdH07XG59O1xudmFyIEEgPSAoc3RyaW5ncywgLi4udmFsdWVzKSA9PiB7XG5cdHJldHVybiBwYXJzZUFuaW1hdGlvblRlbXBsYXRlKHN0cmluZ3MsIHZhbHVlcyk7XG59O1xudmFyIGRvQW5pbWF0aW9uID0gKGVsZW1lbnQsIGNvbmZpZywga2V5ZnJhbWVzKSA9PiB7XG5cdGlmIChwYXJzZVByb3BlcnR5TGlzdChjb25maWcpLnNvbWUoKHByb3ApID0+IHtcblx0XHRjb25zdCB7IGhhc1JlYWN0aXZlIH0gPSBwcm9jZXNzQW5pbWF0aW9uVmFsdWVzKHByb3AudmFsdWVzKTtcblx0XHRyZXR1cm4gaGFzUmVhY3RpdmU7XG5cdH0pKSByZXR1cm4gY3JlYXRlUmVhY3RpdmVBbmltYXRpb24oZWxlbWVudCwgY29uZmlnKTtcblx0Y29uc3QgZnJhbWVzID0gYnVpbGRXZWJBbmltYXRpb25LZXlmcmFtZXMoY29uZmlnKTtcblx0Y29uc3QgdGltaW5nID0gYnVpbGRBbmltYXRpb25UaW1pbmcoY29uZmlnKTtcblx0Y29uc3QgYW5pbWF0aW9uID0gZWxlbWVudC5hbmltYXRlKGZyYW1lcywgdGltaW5nKTtcblx0Y29uc3QgY2xlYW51cCA9ICgpID0+IHtcblx0XHRhbmltYXRpb24uY2FuY2VsKCk7XG5cdH07XG5cdHJldHVybiB7XG5cdFx0YW5pbWF0aW9uLFxuXHRcdGNsZWFudXBcblx0fTtcbn07XG52YXIgYW5pbWF0ZSA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuXHRmb3IgKGNvbnN0IFtwcm9wZXJ0eSwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zLnByb3BlcnRpZXMpKSB7XG5cdFx0aWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHRocm93IG5ldyBUeXBlRXJyb3IoYGFuaW1hdGUoKSBleHBlY3RzIGFycmF5cyBvZiB2YWx1ZXMsIGdvdCAke3R5cGVvZiB2YWx1ZXN9IGZvciAke3Byb3BlcnR5fWApO1xuXHRcdHByb3BlcnRpZXMuc2V0KHByb3BlcnR5LCB7XG5cdFx0XHRwcm9wZXJ0eSxcblx0XHRcdHZhbHVlc1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBkb0FuaW1hdGlvbihlbGVtZW50LCB7IC4uLm9wdGlvbnMgfSwgcHJvcGVydGllcyk7XG59O1xudmFyIGRlZmluZUFuaW1hdGlvbiA9IChvcHRpb25zKSA9PiB7XG5cdHJldHVybiAoZWxlbWVudCkgPT4ge1xuXHRcdHJldHVybiBkb0FuaW1hdGlvbihlbGVtZW50LCBvcHRpb25zKTtcblx0fTtcbn07XG52YXIgc2VxdWVuY2VBbmltYXRpb25zID0gYXN5bmMgKGVsZW1lbnQsIHNlcXVlbmNlKSA9PiB7XG5cdGZvciAoY29uc3QgY29uZmlnIG9mIHNlcXVlbmNlKSB7XG5cdFx0Y29uc3QgeyBhbmltYXRpb24gfSA9IGRvQW5pbWF0aW9uKGVsZW1lbnQsIGNvbmZpZyk7XG5cdFx0YXdhaXQgYW5pbWF0aW9uLmZpbmlzaGVkO1xuXHR9XG59O1xudmFyIHBhcmFsbGVsQW5pbWF0aW9ucyA9IChlbGVtZW50LCBhbmltYXRpb25zKSA9PiB7XG5cdGNvbnN0IHJlc3VsdHMgPSBhbmltYXRpb25zLm1hcCgoY29uZmlnKSA9PiBkb0FuaW1hdGlvbihlbGVtZW50LCBjb25maWcpKTtcblx0Y29uc3QgY2xlYW51cCA9ICgpID0+IHtcblx0XHRyZXN1bHRzLmZvckVhY2goKHIpID0+IHIuY2xlYW51cCgpKTtcblx0fTtcblx0cmV0dXJuIHtcblx0XHRhbmltYXRpb25zOiByZXN1bHRzLm1hcCgocikgPT4gci5hbmltYXRpb24pLFxuXHRcdGNsZWFudXBcblx0fTtcbn07XG52YXIgc3RhZ2dlckFuaW1hdGlvbiA9IChlbGVtZW50cywgb3B0aW9ucywgc3RhZ2dlckRlbGF5ID0gMTAwKSA9PiB7XG5cdHJldHVybiBlbGVtZW50cy5tYXAoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG5cdFx0Y29uc3QgZGVsYXkgPSBwYXJzZVRpbWUob3B0aW9ucz8uZGVsYXkgPz8gMCkgKyBpbmRleCAqIHN0YWdnZXJEZWxheTtcblx0XHRyZXR1cm4gZG9BbmltYXRpb24oZWxlbWVudCwge1xuXHRcdFx0Li4ub3B0aW9ucyxcblx0XHRcdGRlbGF5XG5cdFx0fSk7XG5cdH0pO1xufTtcblxuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBBLCBBTklNQVRBQkxFX0JSQU5ELCBBbmltYXRhYmxlVmFsdWUsIEJBS0VfQ0FURUdPUklFUywgQkFLRV9MQVlFUiwgQ1NTX0NPTE9SX1BST1BFUlRJRVMsIENTU19ESU1FTlNJT05fVU5JVFMsIENTU19ESU1FTlNJT05fVU5JVFNfTElTVCwgQ1NTX01PVElPTl9QUk9QRVJUSUVTLCBDU1NfVFlQT0dSQVBIWV9QUk9QRVJUSUVTLCBDU1NfVU5JVF9GQUNUT1JZX0FMSUFTRVMsIENTU19VTklUX1RPS0VOX1JFLCBERUZBVUxUX0NBQ0hFX01TLCBERUZBVUxUX0NBVEVHT1JJRVMsIEhPU1RfQ1NTX0ZBTExCQUNLLCBMQVlFUl9OQU1FLCBMQVlFUl9PUEVOLCBPV05FUiwgUywgU1RZTEVfVEhFTUVfQVRUUlMsIFNUWUxFX1RIRU1FX09CU0VSVkVfQVRUUlMsIFVYX0hPU1RfTEFZRVJTLCBVWF9QUkVMT0FEX0hPU1RfQ1NTLCBWRUVMQV9DQVNDQURFX0xBWUVSUywgVklFV0VSX0NTU19MQVlFUl9PUkRFUiwgVklFV0VSX1JVTlRJTUVfTEFZRVJTLCBhZGRBZG9wdGVkU2hlZXRUb0VsZW1lbnQsIGFkb3B0ZWRBcHBsaWVkVGV4dCwgYWRvcHRlZEJsb2JNYXAsIGFkb3B0ZWRGaWxsZWQsIGFkb3B0ZWRMYXllck1hcCwgYWRvcHRlZE1hcCwgYWRvcHRlZFNlbGVjdG9yTWFwLCBhZG9wdGVkU2hhZG93TGF5ZXJNYXAsIGFkb3B0ZWRTaGFkb3dTZWxlY3Rvck1hcCwgYWRvcHRlZFN0eWxlU2hlZXRzQ2FjaGUsIGFuaW1hdGFibGUsIGFuaW1hdGUsIGFwcGx5Tm9ybWFsaXplZElubGluZVN0eWxlLCBiYWtlQ29tcHV0ZWRTdHlsZSwgYmFrZVRoZW1lRmluZ2VycHJpbnQsIGJha2VkQ2FjaGUsIGJha2VkTGl2ZSwgYmFrZWRTdHlsZXMsIGJpbmRTdHlsZSwgYmxvYlVSTE1hcCwgYnVpbGRCYWtlZENzc1RleHQsIGNhY2hlQmxvYkNvbnRlbnRNYXAsIGNhY2hlQ29udGVudE1hcCwgY2FjaGVNYXAsIGNvbGxlY3RCYWtlZERlY2xhcmF0aW9ucywgY29tcGlsZUlubGluZVN0eWxlQXR0cmlidXRlLCBjb250YWluc01hcmtlciwgY3JlYXRlU3R5bGVJZCwgY3JlYXRlVHlwZWRVbml0VmFsdWUsIGNzcywgY3NzRW1wdHlMYXllclJ1bGUsIGNzc0ltcG9ydFdpdGhMYXllciwgY3NzTGF5ZXJCbG9jaywgY3NzTGF5ZXJPcmRlciwgY3NzVGV4dEZvckFkb3B0ZWRTaGVldCwgY3NzVGV4dFJlcXVpcmVzSW5saW5lU3R5bGVFbGVtZW50LCBjc3NVbml0Q29uc3RydWN0b3JOYW1lLCBjc3NVbml0RmFjdG9yeU5hbWUsIGRlZmluZUFuaW1hdGlvbiwgZG9BbmltYXRpb24sIGVuc3VyZUFkb3B0ZWRTaGVldENvbnRlbnQsIGVuc3VyZUhvc3RTdHlsZXMsIGVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvciwgZXNjYXBlQ1NTSWRlbnRpZmllciwgZXNjYXBlUmVnRXhwLCBmZXRjaEFuZENhY2hlLCBmZXRjaEFzSW5saW5lLCBnZXRBZG9wdGVkU3R5bGVSdWxlLCBnZXRCYWtlZFN0eWxlLCBnZXRFbGVtZW50Wm9vbSwgZ2V0T3JDcmVhdGVMYXllclJ1bGUsIGdldFBhZGRpbmcsIGdldFByb3BlcnR5VmFsdWUsIGdldFB4VmFsdWUsIGdldFN0eWxlTGF5ZXIsIGdldFN0eWxlUnVsZSwgZ2V0VHJhbnNmb3JtLCBnZXRUcmFuc2Zvcm1PcmlnaW4sIGdldFdpbmRvd0NvbnN0cnVjdG9yLCBoYXNUeXBlZE9NLCBoYXNoLCBpbnZhbGlkYXRlQmFrZWRTdHlsZXMsIGlzQWRvcHRlZFNoZWV0RW1wdHksIGlzQW5pbWF0YWJsZVZhbHVlLCBpc0NvbG9yVG9rZW4sIGlzQ3NzRWxlbWVudCwgaXNDc3NMYXllck5hbWUsIGlzRG9jdW1lbnQsIGlzRWZmZWN0aXZlbHlFbXB0eVN0eWxlVGV4dCwgaXNFbGVtZW50VmlzaWJsZSwgaXNMYXllckJsb2NrUnVsZSwgaXNOYXRpdmVDU1NTdHlsZVZhbHVlLCBpc1JlYWN0aXZlU3R5bGVWYWx1ZSwgaXNTY3JvbGxEcml2ZW4sIGlzU2hhZG93Um9vdCwgaXNTdGF0aWNTdHlsZUludGVycG9sYXRpb24sIGlzU3R5bGVCaW5kaW5nLCBpc1N0eWxlSG9zdCwgaXNTdHlsZVZhbHVlLCBpc1VuaXRWYWx1ZSwgaXNWaWV3RHJpdmVuLCBsYXllckNvdW50ZXIsIGxvYWRBc0Fkb3B0ZWQsIGxvYWRCbG9iU3R5bGUsIGxvYWRDYWNoZWRTdHlsZXMsIGxvYWRJbmxpbmVTdHlsZSwgbG9hZFN0eWxlU2hlZXQsIG1ha2VIb3N0TGF5ZXJPcmRlciwgbm9ybWFsaXplQ3NzRm9yTGF5ZXIsIG5vcm1hbGl6ZUl0ZXJhdGlvbkNvdW50LCBub3JtYWxpemVJdGVyYXRpb25zLCBub3RpZnlTdHlsZVRyZWVIb3N0cywgb2JzZXJ2ZVN0eWxlVHJlZSwgb25TY3JvbGwsIG9uVmlldywgcGFyYWxsZWxBbmltYXRpb25zLCBwYXJzZUxlbmd0aCwgcGFyc2VPcmlnaW4sIHBhcnNlVGltZSwgcHJlbG9hZFN0eWxlLCBwcm9taXNlT3JEaXJlY3QsIHBydW5lRW1wdHlTdHlsZUF0dHJpYnV0ZSwgcmVhZEF0dGFjaGVkQ1NTVW5pdCwgcmVhZFNoZWV0UnVsZUNvdW50LCByZWJha2VCYXRjaCwgcmViYWtlQ29tcHV0ZWRTdHlsZSwgcmVnaXN0ZXJTdHlsZVRyZWVIb29rLCByZWdpc3RlcmVkUHJvcGVydGllcywgcmVoeWRyYXRlQWRvcHRlZFN0eWxlU2hlZXRzLCByZWh5ZHJhdGVDb25zdHJ1Y3RhYmxlU2hlZXRzLCByZW1vdmVBZG9wdGVkLCBzY2hlZHVsZUVuc3VyZUhvc3RTdHlsZXMsIHNlcXVlbmNlQW5pbWF0aW9ucywgc2V0UHJvcGVydHksIHNldFN0eWxlSW5SdWxlLCBzZXRTdHlsZVByb3BlcnR5LCBzZXRTdHlsZVByb3BlcnR5RmFsbGJhY2ssIHNldFN0eWxlUHJvcGVydHlUeXBlZCwgc2V0U3R5bGVSdWxlLCBzZXRTdHlsZVJ1bGVzLCBzZXRTdHlsZVVSTCwgc3RhZ2dlckFuaW1hdGlvbiwgc3RyaXBDc3NQcmVhbWJsZSwgc3R5bGVDYWNoZSwgc3R5bGVFbGVtZW50Q2FjaGUsIHN0eWxlRmx1c2hQZW5kaW5nLCBzdHlsZVRyZWVIb29rcywgc3R5bGVUcmVlT2JzZXJ2ZWQsIHN0eWxlVHJlZVJvb3RzLCBzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0LCB1bmJha2VDb21wdXRlZFN0eWxlLCB1bndyYXBDc3NMYXllciwgdXJsQ2FuUGFyc2UsIHZlZWxhQ2FzY2FkZU9yZGVyLCB3cmFwQ3NzTGF5ZXIgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGFBQUFDLElBQVcsUUFBQUMsSUFBTSxnQkFBQUMsSUFBYyxTQUFBQyxHQUFPLHVCQUFBQyxJQUFxQixtQkFBQUMsSUFBaUIsWUFBQUMsSUFBVSxjQUFBQyxJQUFZLFNBQUFDLElBQU8sZUFBQUMsSUFBYSxTQUFBQyxHQUFPLHFCQUFBQyxVQUF5QjtBQUM5SyxTQUFTLGlCQUFBQyxJQUFlLGtCQUFBQyxJQUFnQixZQUFBQyxVQUFnQjtBQUN4RCxTQUFTLG1CQUFBQyxJQUFpQixrQkFBQUMsSUFBZ0Isb0JBQUFDLFVBQXdCO0FBR2xFLElBQUlDLElBQVMsQ0FBQ0MsR0FBS0MsTUFBVyxXQUFX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QVdMLEtBQVVLLEdBQVU7QUFDOUIsVUFBTSxFQUFFLFdBQUE3SyxFQUFVLElBQUl1SyxHQUFZcGdCLEdBQVNxZ0IsQ0FBTTtBQUNqRCxVQUFNeEssRUFBVTtBQUFBLEVBQ2pCO0FBQ0QsR0FDSThLLEtBQXFCLENBQUMzZ0IsR0FBUzRnQixNQUFlO0FBQ2pELFFBQU1DLElBQVVELEVBQVcsSUFBSSxDQUFDUCxNQUFXRCxHQUFZcGdCLEdBQVNxZ0IsQ0FBTSxDQUFDLEdBQ2pFUyxJQUFVLE1BQU07QUFDckIsSUFBQUQsRUFBUSxRQUFRLENBQUMzVCxNQUFNQSxFQUFFLFFBQVEsQ0FBQztBQUFBLEVBQ25DO0FBQ0EsU0FBTztBQUFBLElBQ04sWUFBWTJULEVBQVEsSUFBSSxDQUFDM1QsTUFBTUEsRUFBRSxTQUFTO0FBQUEsSUFDMUMsU0FBQTRUO0FBQUEsRUFDRDtBQUNELEdBQ0lDLEtBQW1CLENBQUNDLEdBQVVuUixHQUFTb1IsSUFBZSxRQUNsREQsRUFBUyxJQUFJLENBQUNoaEIsR0FBU3NhLE1BQVU7QUFDdkMsUUFBTXNGLElBQVExZixHQUFVMlAsR0FBUyxTQUFTLENBQUMsSUFBSXlLLElBQVEyRztBQUN2RCxTQUFPYixHQUFZcGdCLEdBQVM7QUFBQSxJQUMzQixHQUFHNlA7QUFBQSxJQUNILE9BQUErUDtBQUFBLEVBQ0QsQ0FBQztBQUNGLENBQUM7IiwKICAibmFtZXMiOiBbIiRhdm9pZFRyaWdnZXIiLCAiJGdldFZhbHVlIiwgIiRzZXQiLCAiY2FtZWxUb0tlYmFiIiwgImRlcmVmIiwgImdldE9ySW5zZXJ0Q29tcHV0ZWQiLCAiaGFuZGxlTGlzdGVuZXJzIiwgImhhc1ZhbHVlIiwgImlzTm90RXF1YWwiLCAiaXNWYWwiLCAiaXNWYWx1ZVVuaXQiLCAidG9SZWYiLCAidHJ5U3RyaW5nQXNOdW1iZXIiLCAiRG91YmxlV2Vha01hcCIsICJhZGRUb0NhbGxDaGFpbiIsICJhZmZlY3RlZCIsICJoYW5kbGVBdHRyaWJ1dGUiLCAiaGFuZGxlUHJvcGVydHkiLCAib2JzZXJ2ZUF0dHJpYnV0ZSIsICJzaGFyZWQiLCAia2V5IiwgImNyZWF0ZSIsICJibG9iVVJMTWFwIiwgImNhY2hlTWFwIiwgImNhY2hlQ29udGVudE1hcCIsICJjYWNoZUJsb2JDb250ZW50TWFwIiwgImFkb3B0ZWRTZWxlY3Rvck1hcCIsICJhZG9wdGVkU2hhZG93U2VsZWN0b3JNYXAiLCAiYWRvcHRlZExheWVyTWFwIiwgImFkb3B0ZWRTaGFkb3dMYXllck1hcCIsICJhZG9wdGVkTWFwIiwgImFkb3B0ZWRCbG9iTWFwIiwgImFkb3B0ZWRBcHBsaWVkVGV4dCIsICJhZG9wdGVkRmlsbGVkIiwgImxheWVyQ291bnRlciIsICJzdHlsZVRyZWVIb29rcyIsICJzdHlsZVRyZWVPYnNlcnZlZCIsICJzdHlsZVRyZWVSb290cyIsICJiYWtlZFN0eWxlcyIsICJiYWtlZExpdmUiLCAiYmFrZWRDYWNoZSIsICJyZWJha2VCYXRjaCIsICJhZG9wdGVkU3R5bGVTaGVldHNDYWNoZSIsICJzdHlsZUNhY2hlIiwgInN0eWxlRWxlbWVudENhY2hlIiwgInN0eWxlRmx1c2hQZW5kaW5nIiwgInJlZ2lzdGVyZWRQcm9wZXJ0aWVzIiwgIkNTU19ESU1FTlNJT05fVU5JVFNfTElTVCIsICJDU1NfRElNRU5TSU9OX1VOSVRTIiwgIkNTU19VTklUX0ZBQ1RPUllfQUxJQVNFUyIsICJDU1NfVU5JVF9UT0tFTl9SRSIsICJDU1NfQ09MT1JfUFJPUEVSVElFUyIsICJDU1NfVFlQT0dSQVBIWV9QUk9QRVJUSUVTIiwgIkNTU19NT1RJT05fUFJPUEVSVElFUyIsICJTVFlMRV9USEVNRV9BVFRSUyIsICJTVFlMRV9USEVNRV9PQlNFUlZFX0FUVFJTIiwgIkJBS0VfQ0FURUdPUklFUyIsICJWRUVMQV9DQVNDQURFX0xBWUVSUyIsICJVWF9IT1NUX0xBWUVSUyIsICJWSUVXRVJfUlVOVElNRV9MQVlFUlMiLCAiVklFV0VSX0NTU19MQVlFUl9PUkRFUiIsICJMQVlFUl9OQU1FIiwgIkxBWUVSX09QRU4iLCAiT1dORVIiLCAiSE9TVF9DU1NfRkFMTEJBQ0siLCAiQkFLRV9MQVlFUiIsICJERUZBVUxUX0NBVEVHT1JJRVMiLCAiREVGQVVMVF9DQUNIRV9NUyIsICJBTklNQVRBQkxFX0JSQU5EIiwgImhhc1R5cGVkT00iLCAiY3NzVW5pdEZhY3RvcnlOYW1lIiwgInVuaXQiLCAiY3NzVW5pdENvbnN0cnVjdG9yTmFtZSIsICJpc0Nzc0xheWVyTmFtZSIsICJuYW1lIiwgImNzc0VtcHR5TGF5ZXJSdWxlIiwgImxheWVyTmFtZSIsICJzdHJpcENzc1ByZWFtYmxlIiwgImNzcyIsICJvdXQiLCAiaSIsICJuZXh0IiwgImlzTGF5ZXJCbG9ja1J1bGUiLCAicnVsZSIsICJzdXBwb3J0c0NvbnN0cnVjdGFibGVTdHlsZXNoZWV0IiwgImNzc1RleHRSZXF1aXJlc0lubGluZVN0eWxlRWxlbWVudCIsICJwcm9taXNlT3JEaXJlY3QiLCAicHJvbWlzZSIsICJjYiIsICJpc1NoYWRvd1Jvb3QiLCAidmFsdWUiLCAiaXNEb2N1bWVudCIsICJpc0Nzc0VsZW1lbnQiLCAiZXNjYXBlQ1NTSWRlbnRpZmllciIsICJjaGFyIiwgInN0eWxlSWRDb3VudGVyIiwgImNyZWF0ZVN0eWxlSWQiLCAidXJsQ2FuUGFyc2UiLCAiaGFzaCIsICJzdHJpbmciLCAiaGFzaEJ1ZmZlciIsICJwYXJzZUxlbmd0aCIsICJzaXplIiwgInBhcnNlT3JpZ2luIiwgIm9yaWdpbiIsICJlbGVtZW50IiwgInZhbHVlcyIsICJwYXJzZVRpbWUiLCAidiIsICJmYWxsYmFjayIsICJ0IiwgIm5vcm1hbGl6ZUl0ZXJhdGlvbkNvdW50IiwgImNvdW50IiwgIm5vcm1hbGl6ZUl0ZXJhdGlvbnMiLCAibiIsICJpc1Njcm9sbERyaXZlbiIsICJpc1ZpZXdEcml2ZW4iLCAiaXNTdHlsZUhvc3QiLCAibm9kZSIsICJyZWFkU2hlZXRSdWxlQ291bnQiLCAic2hlZXQiLCAiaXNBZG9wdGVkU2hlZXRFbXB0eSIsICJpc0NvbG9yVG9rZW4iLCAiaXNFbGVtZW50VmlzaWJsZSIsICJlbCIsICJpc1N0eWxlQmluZGluZyIsICJzdHlsZXMiLCAiaXNFZmZlY3RpdmVseUVtcHR5U3R5bGVUZXh0IiwgImNzc1RleHQiLCAic291cmNlIiwgImNodW5rIiwgImRlY2xhcmF0aW9uIiwgImNvbG9uSW5kZXgiLCAicHJ1bmVFbXB0eVN0eWxlQXR0cmlidXRlIiwgInJhdyIsICJhcHBseU5vcm1hbGl6ZWRJbmxpbmVTdHlsZSIsICJpc05hdGl2ZUNTU1N0eWxlVmFsdWUiLCAiQ1NTU3R5bGVWYWx1ZUN0b3IiLCAicHJvdG90eXBlIiwgImlzUmVhY3RpdmVTdHlsZVZhbHVlIiwgImlzU3RhdGljU3R5bGVJbnRlcnBvbGF0aW9uIiwgImVzY2FwZVJlZ0V4cCIsICJjb250YWluc01hcmtlciIsICJjc3NWYWx1ZSIsICJtYXJrZXIiLCAicmVhZEF0dGFjaGVkQ1NTVW5pdCIsICJ0ZXh0IiwgIm1hdGNoIiwgImF1dGhvcmVkIiwgIm5vcm1hbGl6ZWQiLCAiZ2V0V2luZG93Q29uc3RydWN0b3IiLCAid2luIiwgImNyZWF0ZVR5cGVkVW5pdFZhbHVlIiwgIkNTU05hbWVzcGFjZSIsICJmYWN0b3J5TmFtZSIsICJmYWN0b3J5IiwgIkNTU1VuaXRWYWx1ZUN0b3IiLCAiaXNTdHlsZVZhbHVlIiwgInZhbCIsICJpc1VuaXRWYWx1ZSIsICJjc3NMYXllck9yZGVyIiwgImdyb3VwcyIsICJzZWVuIiwgIm5hbWVzIiwgImdyb3VwIiwgImxpc3QiLCAidmVlbGFDYXNjYWRlT3JkZXIiLCAibWFrZUhvc3RMYXllck9yZGVyIiwgImV4dHJhIiwgImNzc0xheWVyQmxvY2siLCAiYm9keSIsICJ3cmFwQ3NzTGF5ZXIiLCAibm9ybWFsaXplQ3NzRm9yTGF5ZXIiLCAidHJpbW1lZCIsICJ1bndyYXBPdXRlckxheWVyQmxvY2siLCAiZXhwZWN0ZWROYW1lIiwgIm9wZW4iLCAiZGVwdGgiLCAiY2giLCAidW53cmFwQ3NzTGF5ZXIiLCAic3RyaXBwZWQiLCAiY3NzSW1wb3J0V2l0aExheWVyIiwgInVybCIsICJsYXllciIsICJVWF9QUkVMT0FEX0hPU1RfQ1NTIiwgImdldE9yQ3JlYXRlTGF5ZXJSdWxlIiwgInJ1bGVzIiwgImV4aXN0aW5nIiwgInJ1bGVJbmRleCIsICJjcmVhdGVkIiwgInRva2VuaXplTnVtZXJpY0NTUyQxIiwgInRva2VucyIsICJjdXJzb3IiLCAicmVzdCIsICJ3aGl0ZXNwYWNlIiwgIm51bWJlciIsICJ1bml0TWF0Y2giLCAiaWRlbnRpZmllciIsICJzeW1ib2wiLCAiTnVtZXJpY1R5cGVkT01QYXJzZXIkMSIsICJyb290IiwgInRva2VuIiwgIkNvbnN0cnVjdG9yIiwgIm9wZXJhdG9yIiwgInJpZ2h0IiwgInBhcnNlVG9UeXBlZE9NIiwgInNldFByb3BlcnR5SWZOb3RFcXVhbCIsICJzdHlsZVJlZiIsICJrZWJhYiIsICJpbXBvcnRhbmNlIiwgInNldFN0eWxlUHJvcGVydHlUeXBlZCIsICJzdHlsZU1hcFJlZiIsICJzZXRTdHlsZVByb3BlcnR5RmFsbGJhY2siLCAib2xkIiwgIm5ld1ZhbCIsICJwYXJzZWQiLCAibWF5YmVOdW0iLCAic2V0U3R5bGVQcm9wZXJ0eSIsICJzZXRTdHlsZUluUnVsZSIsICJzZWxlY3RvciIsICJnZXRTdHlsZVJ1bGUiLCAic2V0U3R5bGVSdWxlIiwgInByb3BOYW1lIiwgInByb3BWYWx1ZSIsICJsb2FkU3R5bGVTaGVldCIsICJpbmxpbmUiLCAiYmFzZSIsICJpbnRlZ3JpdHkiLCAibG9hZCIsICJmZXRjaEFuZENhY2hlIiwgInNldFN0eWxlVVJMIiwgInJlcyIsICJlcnJvciIsICJsb2FkQmxvYlN0eWxlIiwgInN0eWxlIiwgImxvYWRJbmxpbmVTdHlsZSIsICJyb290RWxlbWVudCIsICJQTEFDRSIsICJzZXRQcm9wZXJ0eSIsICJ0YXJnZXQiLCAicHJlbG9hZFN0eWxlIiwgImxvYWRBc0Fkb3B0ZWQiLCAicmVtZW1iZXJBZG9wdGVkVGV4dCIsICJjc3NUZXh0Rm9yQWRvcHRlZFNoZWV0IiwgInN0b3JlZCIsICJtYXBwZWQiLCAiZW5zdXJlQWRvcHRlZFNoZWV0Q29udGVudCIsICJhcHBseUFkb3B0ZWRTdHlsZVRleHQiLCAibWVzc2FnZSIsICJzaGVldEZvckJsb2IiLCAiYmxvYiIsICJsb2FkQXNBZG9wdGVkVW5zYWZlIiwgImNhY2hlZCIsICJhcHBsaWVkIiwgImxheWVyV3JhcHBlZCIsICJyZW1vdmVBZG9wdGVkIiwgImZldGNoQXNJbmxpbmUiLCAiY29sbGVjdFN0eWxlSG9zdHMiLCAiaW50byIsICJjaGlsZCIsICJub3RpZnlTdHlsZVRyZWVIb3N0cyIsICJob3N0cyIsICJyZWFzb24iLCAiZm4iLCAicmVnaXN0ZXJTdHlsZVRyZWVIb29rIiwgIm9ic2VydmVTdHlsZVRyZWUiLCAib2JzZXJ2ZXIiLCAicmVjb3JkcyIsICJyZWMiLCAic2NvcGUiLCAic2hlZXRzIiwgInJlaHlkcmF0ZUNvbnN0cnVjdGFibGVTaGVldHMiLCAiY2FuUGFyc2UiLCAiaWR4IiwgImdldFRyYW5zZm9ybSIsICJtYXRyaXgiLCAiZ2V0VHJhbnNmb3JtT3JpZ2luIiwgImNzc09yaWdpbiIsICJnZXRQcm9wZXJ0eVZhbHVlIiwgInNyYyIsICJjcyIsICJnZXRFbGVtZW50Wm9vbSIsICJ6b29tIiwgImN1cnJlbnRFbGVtZW50IiwgImN1cnJlbnRDU1Nab29tIiwgImdldFB4VmFsdWUiLCAiZ2V0UGFkZGluZyIsICJheGlzIiwgInN0eWxlRWxlbWVudCIsICJzZXRTdHlsZVJ1bGVzIiwgImNsYXNzZXMiLCAiYXJncyIsICJnZXRTdHlsZUxheWVyIiwgImVuc3VyZVN0eWxlU2NvcGVTZWxlY3RvciIsICJzdHlsZUlkIiwgImpvaW5TY29wZWRTZWxlY3RvciIsICJmaW5kU3R5bGVSdWxlIiwgImZ1bGxTZWxlY3RvciIsICJleHBlY3RlZCIsICJyZXF1ZXN0ZWQiLCAiYWN0dWFsIiwgImJhc2lzIiwgImJhc2lzRWxlbWVudCIsICJzdHlsZUVsZW1lbnRHbG9iYWwiLCAicnVsZUlkIiwgImJ1cmwiLCAicHJvbWlzZWQiLCAiZ2V0QWRvcHRlZFN0eWxlUnVsZSIsICJpblNoYWRvdyIsICJ0YXJnZXRBZG9wdGVkU2hlZXRzIiwgInNlbGVjdG9yS2V5IiwgInNoYWRvd01hcCIsICJsYXllclJ1bGUiLCAic2hhZG93TGF5ZXJNYXAiLCAibGF5ZXJSdWxlSW5kZXgiLCAiciIsICJpbnZhbGlkYXRpb25SZWFkeSIsICJsYXN0RmluZ2VycHJpbnQiLCAicmViYWtlUXVldWVkIiwgIm5vcm1hbGl6ZUNhdGVnb3JpZXMiLCAiY2F0ZWdvcmllcyIsICJjYWNoZUtleUZvciIsICJiYWtlVGhlbWVGaW5nZXJwcmludCIsICJwYXJ0cyIsICJsb2NhbCIsICJ0YWtlUHJvcCIsICJjb2xsZWN0QmFrZWREZWNsYXJhdGlvbnMiLCAic2V0IiwgImJ1aWxkQmFrZWRDc3NUZXh0IiwgImRlY2xhcmF0aW9ucyIsICJhZG9wdGVkTGlzdCIsICJhc3NpZ25BZG9wdGVkIiwgImFkb3B0U2hlZXQiLCAiYmFrZWQiLCAidW5hZG9wdFNoZWV0IiwgIndyaXRlQmFrZWRDc3MiLCAicmVtZW1iZXJDYWNoZSIsICJjYWNoZU1zIiwgInByZXYiLCAiZW50cnkiLCAiZHJvcENhY2hlIiwgImNhY2hlS2V5IiwgImNsZWFyQWxsQ2FjaGUiLCAicGFya0Jha2VkIiwgInJlc3VtZUJha2VkIiwgImZpbmdlcnByaW50IiwgImJha2VDb21wdXRlZFN0eWxlIiwgImJha2VJTyIsICJlbnN1cmVCYWtlSU8iLCAiZW50cmllcyIsICJlbnN1cmVCYWtlZFJlY29yZCIsICJjYW5Db25zdHJ1Y3QiLCAiZmx1c2hSZWJha2UiLCAiYmF0Y2giLCAic2NoZWR1bGVSZWJha2UiLCAiaW52YWxpZGF0ZUJha2VkU3R5bGVzIiwgImVuc3VyZUJha2VJbnZhbGlkYXRpb24iLCAiaG9zdCIsICJvcHRpb25zIiwgInVuYmFrZUNvbXB1dGVkU3R5bGUiLCAia2VlcENhY2hlIiwgInJlYmFrZUNvbXB1dGVkU3R5bGUiLCAiZ2V0QmFrZWRTdHlsZSIsICJzeW5jQWRvcHRlZFNoZWV0c1RvU2hhZG93IiwgImJUbyIsICJhZG9wdGVkU2hlZXRzIiwgImxpdmUiLCAicyIsICJhZGRBZG9wdGVkU2hlZXRUb0VsZW1lbnQiLCAiZW5zdXJlU2hhZG93Q3NzRmFsbGJhY2siLCAicmVoeWRyYXRlQWRvcHRlZFN0eWxlU2hlZXRzIiwgInJlc3RvcmUiLCAiaG9zdENzc1RleHQiLCAidmlzaXQiLCAiY2hpbGRyZW4iLCAiZW5zdXJlSG9zdFN0eWxlcyIsICJsb2FkQ2FjaGVkU3R5bGVzIiwgInN0eWxlRmx1c2hCYXRjaCIsICJzdHlsZUZsdXNoU2NoZWR1bGVkIiwgInNjaGVkdWxlRW5zdXJlSG9zdFN0eWxlcyIsICJyZXNvbHZlZFNyYyIsICJ3ZWFrIiwgImUiLCAicmVzdWx0IiwgImFkb3B0ZWQiLCAiYWRkQWRvcHRlZFNoZWV0IiwgInZhcnMiLCAicHJvcHMiLCAiYmFua1N5bWJvbCIsICJiYW5rIiwgImVsTWFwU3ltYm9sIiwgImVsTWFwIiwgImFsaXZlc1N5bWJvbCIsICJhbGl2ZXMiLCAidW5zdWIiLCAiJGJlaGF2aW9yIiwgImlzTGlua2VyTGlrZSIsICIkb2JzZXJ2ZUlucHV0IiwgInJlZiIsICJwcm9wIiwgIndlbCIsICJyZiIsICJjdHJsQ2IiLCAiX2V2IiwgImhkbCIsICIkb2JzZXJ2ZUF0dHJpYnV0ZSIsICJ3diIsICJhdHRyTmFtZSIsICJtdXRhdGlvbiIsICJ2YWxSZWYiLCAicmVWYWwiLCAicmVtb3ZlRnJvbUJhbmsiLCAiaGFuZGxlciIsICJhZGRUb0JhbmsiLCAiZm9yTGluayIsICJiaW5kSGFuZGxlciIsICJ3aXRoT2JzZXJ2ZXIiLCAibGlua2VyIiwgImNvbnRyb2xsZXIiLCAidW4iLCAiY3VyciIsICJfcCIsICJ2YWx1ZVJlZiIsICJzZXRSZWYiLCAiZWxlbWVudFJlZiIsICJfdmFsIiwgIm9icyIsICJiaW5kV2l0aCIsICJkZWxldGVTdHlsZVByb3BlcnR5IiwgImhhbmRsZVN0eWxlQ2hhbmdlIiwgImFuaW1hdGFibGVJZCIsICJvblNjcm9sbCIsICJvIiwgIm9uVmlldyIsICJBbmltYXRhYmxlVmFsdWUiLCAiI3N0ZXBzIiwgIiNvcHRpb25zIiwgIiNjdXJyZW50IiwgIiNzdWJzY3JpYmVycyIsICIjYXR0YWNobWVudHMiLCAiI3Jlc29sdmVFbGVtZW50UmVmIiwgInNlbGYiLCAiI2ZpbmROZWFyZXN0U2Nyb2xsZXIiLCAiI2NyZWF0ZVRpbWVsaW5lIiwgInRyaWdnZXIiLCAiU2Nyb2xsVGltZWxpbmVDdG9yIiwgIlZpZXdUaW1lbGluZUN0b3IiLCAiI3N0YXJ0VGltZWxpbmVEcml2ZW4iLCAiYXR0YWNobWVudCIsICJwbGFuIiwgInRpbWVsaW5lIiwgIiNzdGFydFRpbWVsaW5lRmFsbGJhY2siLCAidGltaW5nIiwgIiNidWlsZFRpbWluZyIsICJhbmltYXRpb24iLCAiI2J1aWxkS2V5ZnJhbWVzIiwgInN0ZXBzIiwgIiNyZXNvbHZlU3RlcCIsICJzY3JvbGxlciIsICJyYWZJZCIsICJjb21wdXRlUHJvZ3Jlc3MiLCAidnAiLCAicmVjdCIsICJ0b3RhbCIsICJtYXgiLCAibGlzdGVuVGFyZ2V0IiwgImhpbnQiLCAic3RlcCIsICJvZmZzZXRzIiwgImVhc2luZyIsICJmcmFtZSIsICJpbm5lciIsICJzdGFydCIsICIjdHJhY2tQcm9ncmVzcyIsICIjd2lyZVRyaWdnZXIiLCAibGFzdCIsICJyZXZlcnNlT25FeGl0IiwgInBsYXlGb3J3YXJkIiwgInBsYXlCYWNrd2FyZCIsICJlbnRlciIsICJsZWF2ZSIsICJvbkVudGVyIiwgIm9uTGVhdmUiLCAiZm9yd2FyZCIsICJvbkNsaWNrIiwgImFwcGx5IiwgInVuc3Vic2NyaWJlIiwgIiNlYWNoIiwgImF0IiwgImEiLCAicmF0ZSIsICJhbmltYXRhYmxlIiwgImlzQW5pbWF0YWJsZVZhbHVlIiwgInN0eWxlVGVtcGxhdGVJZCIsICJyZWFkUmVhY3RpdmVOdW1iZXIiLCAic2xvdCIsICJjdXJyZW50IiwgImdldFJlYWN0aXZlSW5pdGlhbE51bWJlciIsICJyZXBsYWNlVHlwZWRNYXJrZXJzIiwgInNsb3RzIiwgImlzRGlyZWN0U2xvdFZhbHVlIiwgImVzY2FwZWRNYXJrZXIiLCAic2VyaWFsaXplQW5pbWF0YWJsZUNzc1ZhbHVlIiwgImlzRGlyZWN0U2xvdFVuaXRQcm9kdWN0IiwgImVzY2FwZWRVbml0IiwgInNldFBhcnNlZFR5cGVkVmFsdWUiLCAic3R5bGVNYXAiLCAicHJvcGVydHkiLCAidG9rZW5pemVOdW1lcmljQ1NTIiwgInZhcmlhYmxlIiwgIk51bWVyaWNUeXBlZE9NUGFyc2VyIiwgInJlYWN0aXZlQnlNYXJrZXIiLCAidHlwZWRCeU1hcmtlciIsICJyZWFjdGl2ZSIsICJjaGVja3BvaW50IiwgInJocyIsICJsZWFmIiwgInR5cGVkIiwgImJ1aWxkTnVtZXJpY1R5cGVkT01UcmVlIiwgInJlYWN0aXZlU2xvdHMiLCAidHlwZWRTbG90cyIsICJpc1RyYW5zZm9ybVN0eWxlUHJvcGVydHkiLCAiYnVpbGRUcmFuc2Zvcm1UeXBlZE9NVHJlZSIsICJsZWF2ZXMiLCAiY29tcG9uZW50cyIsICJ6ZXJvUHgiLCAib25lTnVtYmVyIiwgImluZGV4IiwgImNvbnN1bWUiLCAiY29uc3VtZVN5bWJvbCIsICJwYXJzZUFyZ3VtZW50IiwgInNsaWNlIiwgInRyZWUiLCAicGFyc2VBcmd1bWVudExpc3QiLCAiY3JlYXRlQ29tcG9uZW50IiwgImN0b3IiLCAiY2xhc3NOYW1lIiwgIkN0b3IiLCAiVHJhbnNsYXRlIiwgIlNjYWxlIiwgIlJvdGF0ZSIsICJTa2V3IiwgIkNTU1RyYW5zZm9ybVZhbHVlQ3RvciIsICJidWlsZFR5cGVkT01TdHlsZVZhbHVlIiwgImFkZE11dGFibGVMZWF2ZXMiLCAiYXR0YWNoTGVhZlRhcmdldHMiLCAiYXBwbHlTdHlsZVRlbXBsYXRlIiwgInZhcmlhYmxlcyIsICJhbmltYXRhYmxlU2xvdHMiLCAicHJvYmUiLCAibXV0YWJsZUxlYXZlcyIsICJyZXF1aXJlZENTU1ZhcmlhYmxlcyIsICJzdWJzY3JpcHRpb25zIiwgInByb3BlcnR5TW9kZU93bmVkIiwgInBhcnNlZFZhbHVlIiwgImluaXRpYWxOdW1iZXIiLCAiZW5zdXJlUmVnaXN0ZXJlZE51bWJlclByb3BlcnR5IiwgInByaW9yaXR5IiwgInVzZWRUeXBlZFNsb3RzIiwgInVzZWRSZWFjdGl2ZVNsb3RzIiwgImNhblVzZVR5cGVkT00iLCAiYXBwbGllZFRocm91Z2hUeXBlZE9NIiwgImRpcmVjdFNsb3QiLCAibGlua2VkVmFsdWUiLCAiQ1NTTWF0aFByb2R1Y3RDdG9yIiwgInByb2R1Y3QiLCAicmVjb25zdHJ1Y3RlZCIsICJuZWVkc0NTU1ZhcmlhYmxlIiwgInN1YnNjcmlwdGlvbiIsICJuZXh0VmFsdWUiLCAiZGlydHlSb290cyIsICJwcm9wZXJ0eU5hbWUiLCAiY29tcGxpbGVTdGF0aWNDU1NUZXh0IiwgImZvclJldHVybiIsICJwcm9wZXJ0aWVzIiwgIlMiLCAic3RyaW5ncyIsICJ0ZW1wbGF0ZUlkIiwgImNvbnN1bWVkIiwgIm5leHRUZXh0IiwgImF0dGFjaGVkVW5pdCIsICJpbml0aWFsVmFsdWUiLCAidHlwZSIsICJzcGxpdElubGluZVN0eWxlUGxhY2Vob2xkZXJzIiwgImF0dHJpYnV0ZXMiLCAicGF0dGVybiIsICJhdHRyaWJ1dGVJbmRleCIsICJqb2luU3RhdGljSW5saW5lU3R5bGUiLCAiY29tcGlsZUlubGluZVN0eWxlQXR0cmlidXRlIiwgImJpbmRTdHlsZSIsICJzdHlsZWQiLCAicGFyc2VQcm9wZXJ0eUxpc3QiLCAiZnJvbVN0cmluZyIsICIkcGFpciIsICJwYXJzZUFuaW1hdGlvblRlbXBsYXRlIiwgImZ1bGxUZXh0IiwgInZhbHVlVGV4dCIsICJzbG90TWF0Y2giLCAic2xvdFZhbHVlIiwgInByb2Nlc3NBbmltYXRpb25WYWx1ZXMiLCAicmVzb2x2ZWQiLCAicmVhY3RpdmVJbmRpY2VzIiwgImhhc1JlYWN0aXZlIiwgImJ1aWxkV2ViQW5pbWF0aW9uS2V5ZnJhbWVzIiwgImdsb2JhbE9mZnNldHMiLCAicHJvcGVydHlMaXN0IiwgIm1heExlbmd0aCIsICJwIiwgIl8iLCAiZnJhbWVzIiwgImtlYmFiUHJvcCIsICJidWlsZEFuaW1hdGlvblRpbWluZyIsICJkdXJhdGlvbiIsICJkZWxheSIsICJpdGVyYXRpb25zIiwgImNyZWF0ZVJlYWN0aXZlQW5pbWF0aW9uIiwgInJlYWN0aXZlVmFsdWUiLCAibmV3RnJhbWVzIiwgImN1cnJlbnRUaW1lIiwgInN1YiIsICJBIiwgImRvQW5pbWF0aW9uIiwgImNvbmZpZyIsICJrZXlmcmFtZXMiLCAiYW5pbWF0ZSIsICJkZWZpbmVBbmltYXRpb24iLCAic2VxdWVuY2VBbmltYXRpb25zIiwgInNlcXVlbmNlIiwgInBhcmFsbGVsQW5pbWF0aW9ucyIsICJhbmltYXRpb25zIiwgInJlc3VsdHMiLCAiY2xlYW51cCIsICJzdGFnZ2VyQW5pbWF0aW9uIiwgImVsZW1lbnRzIiwgInN0YWdnZXJEZWxheSJdCn0K