@rotki/ui-library 2.6.2 → 2.6.4

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 (63) hide show
  1. package/dist/components/accordions/accordion/RuiAccordion.vue.d.ts +2 -2
  2. package/dist/components/alerts/RuiAlert.vue.d.ts +3 -3
  3. package/dist/components/buttons/button/RuiButton.vue.d.ts +2 -2
  4. package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +2 -2
  5. package/dist/components/cards/RuiCard.vue.d.ts +6 -6
  6. package/dist/components/date-time-picker/use-input-handler.d.ts +2 -2
  7. package/dist/components/date-time-picker/use-keyboard-handler.d.ts +2 -2
  8. package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +18 -18
  9. package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +2 -2
  10. package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +2 -2
  11. package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +2 -2
  12. package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +4 -4
  13. package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +2 -2
  14. package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +3 -3
  15. package/dist/components/forms/text-field/RuiTextField.vue.d.ts +3 -3
  16. package/dist/components/index.es.js +2840 -2889
  17. package/dist/components/overlays/badge/RuiBadge.vue.d.ts +3 -3
  18. package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.d.ts +2 -2
  19. package/dist/components/overlays/dialog/RuiDialog.vue.d.ts +2 -2
  20. package/dist/components/overlays/menu/RuiMenu.vue.d.ts +3 -3
  21. package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.d.ts +2 -2
  22. package/dist/components/overlays/notification/RuiNotification.vue.d.ts +2 -2
  23. package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +3 -3
  24. package/dist/components/tables/RuiDataTable.vue.d.ts +2 -2
  25. package/dist/components/tables/RuiExpandButton.vue.d.ts +2 -2
  26. package/dist/components/tables/RuiTableHead.vue.d.ts +2 -2
  27. package/dist/components/tabs/tab/RuiTab.vue.d.ts +1 -1
  28. package/dist/components/tabs/tab-item/RuiTabItem.vue.d.ts +3 -3
  29. package/dist/components/tabs/tab-items/RuiTabItems.vue.d.ts +2 -2
  30. package/dist/composables/icons.d.ts +1 -1
  31. package/dist/composables/index-D7DVd8pO.js +717 -0
  32. package/dist/composables/index.es.js +2 -1
  33. package/dist/composables/popper.d.ts +11 -11
  34. package/dist/composables/timeout-manager.d.ts +5 -0
  35. package/dist/consts/colors-D563Ic3q.js +1 -0
  36. package/dist/consts/forms/auto-complete/index-l0sNRNKZ.js +1 -0
  37. package/dist/consts/time-accuracy-BnKA5GyT.js +1 -0
  38. package/dist/i18n/keys-CNGXWOJX.js +1 -0
  39. package/dist/icons/icons_1.d.ts +11 -11
  40. package/dist/icons/icons_1.es.js +784 -783
  41. package/dist/icons/icons_2.d.ts +22 -22
  42. package/dist/icons/icons_2.es.js +1087 -1086
  43. package/dist/icons/icons_3.d.ts +28 -28
  44. package/dist/icons/icons_3.es.js +1098 -1097
  45. package/dist/icons/icons_4.d.ts +34 -0
  46. package/dist/icons/icons_4.es.js +443 -306
  47. package/dist/icons/index.d.ts +1 -1
  48. package/dist/icons/index.es.js +1548 -1513
  49. package/dist/index-cTPqOSmm.js +54 -0
  50. package/dist/index.d.ts +1 -1
  51. package/dist/index.es.js +1566 -1531
  52. package/dist/style.css +1 -1
  53. package/dist/theme/index.es.js +1 -0
  54. package/dist/types/index-CN6Ip1GL.js +1 -0
  55. package/dist/types/theme.d.ts +1 -1
  56. package/dist/utils/index-D-sENcA8.js +158 -0
  57. package/dist/vendor-X3mXJl51.js +1931 -0
  58. package/dist/web-types.json +16 -16
  59. package/package.json +38 -37
  60. package/dist/composables/index-DRJor0yQ.js +0 -727
  61. package/dist/index-BpodgU9n.js +0 -54
  62. package/dist/utils/index-lIBwzXNM.js +0 -157
  63. package/dist/vendor-Dt9dVBgA.js +0 -1896
@@ -0,0 +1,1931 @@
1
+ import { g as Vt } from "./index-cTPqOSmm.js";
2
+ const Le = /\d/, Fe = ["-", "_", "/", "."];
3
+ function Ye(t = "") {
4
+ if (!Le.test(t))
5
+ return t !== t.toLowerCase();
6
+ }
7
+ function Be(t, e) {
8
+ const r = Fe, n = [];
9
+ if (!t || typeof t != "string")
10
+ return n;
11
+ let a = "", i, f;
12
+ for (const s of t) {
13
+ const o = r.includes(s);
14
+ if (o === !0) {
15
+ n.push(a), a = "", i = void 0;
16
+ continue;
17
+ }
18
+ const h = Ye(s);
19
+ if (f === !1) {
20
+ if (i === !1 && h === !0) {
21
+ n.push(a), a = s, i = h;
22
+ continue;
23
+ }
24
+ if (i === !0 && h === !1 && a.length > 1) {
25
+ const u = a.at(-1);
26
+ n.push(a.slice(0, Math.max(0, a.length - 1))), a = u + s, i = h;
27
+ continue;
28
+ }
29
+ }
30
+ a += s, i = h, f = o;
31
+ }
32
+ return n.push(a), n;
33
+ }
34
+ function je(t) {
35
+ return t ? t[0].toUpperCase() + t.slice(1) : "";
36
+ }
37
+ function ze(t) {
38
+ return t ? t[0].toLowerCase() + t.slice(1) : "";
39
+ }
40
+ function Ne(t, e) {
41
+ return t ? (Array.isArray(t) ? t : Be(t)).map((r) => je(r)).join("") : "";
42
+ }
43
+ function kn(t, e) {
44
+ return ze(Ne(t || ""));
45
+ }
46
+ var Y = "top", U = "bottom", I = "right", B = "left", Zt = "auto", Rt = [Y, U, I, B], mt = "start", Dt = "end", Ue = "clippingParents", _e = "viewport", At = "popper", Ie = "reference", se = /* @__PURE__ */ Rt.reduce(function(t, e) {
47
+ return t.concat([e + "-" + mt, e + "-" + Dt]);
48
+ }, []), Se = /* @__PURE__ */ [].concat(Rt, [Zt]).reduce(function(t, e) {
49
+ return t.concat([e, e + "-" + mt, e + "-" + Dt]);
50
+ }, []), We = "beforeRead", qe = "read", Ve = "afterRead", Ze = "beforeMain", Xe = "main", Ge = "afterMain", Qe = "beforeWrite", Je = "write", Ke = "afterWrite", tr = [We, qe, Ve, Ze, Xe, Ge, Qe, Je, Ke];
51
+ function G(t) {
52
+ return t ? (t.nodeName || "").toLowerCase() : null;
53
+ }
54
+ function z(t) {
55
+ if (t == null)
56
+ return window;
57
+ if (t.toString() !== "[object Window]") {
58
+ var e = t.ownerDocument;
59
+ return e && e.defaultView || window;
60
+ }
61
+ return t;
62
+ }
63
+ function ut(t) {
64
+ var e = z(t).Element;
65
+ return t instanceof e || t instanceof Element;
66
+ }
67
+ function N(t) {
68
+ var e = z(t).HTMLElement;
69
+ return t instanceof e || t instanceof HTMLElement;
70
+ }
71
+ function Xt(t) {
72
+ if (typeof ShadowRoot > "u")
73
+ return !1;
74
+ var e = z(t).ShadowRoot;
75
+ return t instanceof e || t instanceof ShadowRoot;
76
+ }
77
+ function er(t) {
78
+ var e = t.state;
79
+ Object.keys(e.elements).forEach(function(r) {
80
+ var n = e.styles[r] || {}, a = e.attributes[r] || {}, i = e.elements[r];
81
+ !N(i) || !G(i) || (Object.assign(i.style, n), Object.keys(a).forEach(function(f) {
82
+ var s = a[f];
83
+ s === !1 ? i.removeAttribute(f) : i.setAttribute(f, s === !0 ? "" : s);
84
+ }));
85
+ });
86
+ }
87
+ function rr(t) {
88
+ var e = t.state, r = {
89
+ popper: {
90
+ position: e.options.strategy,
91
+ left: "0",
92
+ top: "0",
93
+ margin: "0"
94
+ },
95
+ arrow: {
96
+ position: "absolute"
97
+ },
98
+ reference: {}
99
+ };
100
+ return Object.assign(e.elements.popper.style, r.popper), e.styles = r, e.elements.arrow && Object.assign(e.elements.arrow.style, r.arrow), function() {
101
+ Object.keys(e.elements).forEach(function(n) {
102
+ var a = e.elements[n], i = e.attributes[n] || {}, f = Object.keys(e.styles.hasOwnProperty(n) ? e.styles[n] : r[n]), s = f.reduce(function(o, h) {
103
+ return o[h] = "", o;
104
+ }, {});
105
+ !N(a) || !G(a) || (Object.assign(a.style, s), Object.keys(i).forEach(function(o) {
106
+ a.removeAttribute(o);
107
+ }));
108
+ });
109
+ };
110
+ }
111
+ const nr = {
112
+ name: "applyStyles",
113
+ enabled: !0,
114
+ phase: "write",
115
+ fn: er,
116
+ effect: rr,
117
+ requires: ["computeStyles"]
118
+ };
119
+ function X(t) {
120
+ return t.split("-")[0];
121
+ }
122
+ var ft = Math.max, Bt = Math.min, bt = Math.round;
123
+ function It() {
124
+ var t = navigator.userAgentData;
125
+ return t != null && t.brands && Array.isArray(t.brands) ? t.brands.map(function(e) {
126
+ return e.brand + "/" + e.version;
127
+ }).join(" ") : navigator.userAgent;
128
+ }
129
+ function $e() {
130
+ return !/^((?!chrome|android).)*safari/i.test(It());
131
+ }
132
+ function yt(t, e, r) {
133
+ e === void 0 && (e = !1), r === void 0 && (r = !1);
134
+ var n = t.getBoundingClientRect(), a = 1, i = 1;
135
+ e && N(t) && (a = t.offsetWidth > 0 && bt(n.width) / t.offsetWidth || 1, i = t.offsetHeight > 0 && bt(n.height) / t.offsetHeight || 1);
136
+ var f = ut(t) ? z(t) : window, s = f.visualViewport, o = !$e() && r, h = (n.left + (o && s ? s.offsetLeft : 0)) / a, u = (n.top + (o && s ? s.offsetTop : 0)) / i, M = n.width / a, y = n.height / i;
137
+ return {
138
+ width: M,
139
+ height: y,
140
+ top: u,
141
+ right: h + M,
142
+ bottom: u + y,
143
+ left: h,
144
+ x: h,
145
+ y: u
146
+ };
147
+ }
148
+ function Gt(t) {
149
+ var e = yt(t), r = t.offsetWidth, n = t.offsetHeight;
150
+ return Math.abs(e.width - r) <= 1 && (r = e.width), Math.abs(e.height - n) <= 1 && (n = e.height), {
151
+ x: t.offsetLeft,
152
+ y: t.offsetTop,
153
+ width: r,
154
+ height: n
155
+ };
156
+ }
157
+ function De(t, e) {
158
+ var r = e.getRootNode && e.getRootNode();
159
+ if (t.contains(e))
160
+ return !0;
161
+ if (r && Xt(r)) {
162
+ var n = e;
163
+ do {
164
+ if (n && t.isSameNode(n))
165
+ return !0;
166
+ n = n.parentNode || n.host;
167
+ } while (n);
168
+ }
169
+ return !1;
170
+ }
171
+ function rt(t) {
172
+ return z(t).getComputedStyle(t);
173
+ }
174
+ function ar(t) {
175
+ return ["table", "td", "th"].indexOf(G(t)) >= 0;
176
+ }
177
+ function it(t) {
178
+ return ((ut(t) ? t.ownerDocument : (
179
+ // $FlowFixMe[prop-missing]
180
+ t.document
181
+ )) || window.document).documentElement;
182
+ }
183
+ function zt(t) {
184
+ return G(t) === "html" ? t : (
185
+ // this is a quicker (but less type safe) way to save quite some bytes from the bundle
186
+ // $FlowFixMe[incompatible-return]
187
+ // $FlowFixMe[prop-missing]
188
+ t.assignedSlot || // step into the shadow DOM of the parent of a slotted node
189
+ t.parentNode || // DOM Element detected
190
+ (Xt(t) ? t.host : null) || // ShadowRoot detected
191
+ // $FlowFixMe[incompatible-call]: HTMLElement is a Node
192
+ it(t)
193
+ );
194
+ }
195
+ function fe(t) {
196
+ return !N(t) || // https://github.com/popperjs/popper-core/issues/837
197
+ rt(t).position === "fixed" ? null : t.offsetParent;
198
+ }
199
+ function ir(t) {
200
+ var e = /firefox/i.test(It()), r = /Trident/i.test(It());
201
+ if (r && N(t)) {
202
+ var n = rt(t);
203
+ if (n.position === "fixed")
204
+ return null;
205
+ }
206
+ var a = zt(t);
207
+ for (Xt(a) && (a = a.host); N(a) && ["html", "body"].indexOf(G(a)) < 0; ) {
208
+ var i = rt(a);
209
+ if (i.transform !== "none" || i.perspective !== "none" || i.contain === "paint" || ["transform", "perspective"].indexOf(i.willChange) !== -1 || e && i.willChange === "filter" || e && i.filter && i.filter !== "none")
210
+ return a;
211
+ a = a.parentNode;
212
+ }
213
+ return null;
214
+ }
215
+ function Tt(t) {
216
+ for (var e = z(t), r = fe(t); r && ar(r) && rt(r).position === "static"; )
217
+ r = fe(r);
218
+ return r && (G(r) === "html" || G(r) === "body" && rt(r).position === "static") ? e : r || ir(t) || e;
219
+ }
220
+ function Qt(t) {
221
+ return ["top", "bottom"].indexOf(t) >= 0 ? "x" : "y";
222
+ }
223
+ function St(t, e, r) {
224
+ return ft(t, Bt(e, r));
225
+ }
226
+ function or(t, e, r) {
227
+ var n = St(t, e, r);
228
+ return n > r ? r : n;
229
+ }
230
+ function ke() {
231
+ return {
232
+ top: 0,
233
+ right: 0,
234
+ bottom: 0,
235
+ left: 0
236
+ };
237
+ }
238
+ function Re(t) {
239
+ return Object.assign({}, ke(), t);
240
+ }
241
+ function Te(t, e) {
242
+ return e.reduce(function(r, n) {
243
+ return r[n] = t, r;
244
+ }, {});
245
+ }
246
+ var sr = function(e, r) {
247
+ return e = typeof e == "function" ? e(Object.assign({}, r.rects, {
248
+ placement: r.placement
249
+ })) : e, Re(typeof e != "number" ? e : Te(e, Rt));
250
+ };
251
+ function fr(t) {
252
+ var e, r = t.state, n = t.name, a = t.options, i = r.elements.arrow, f = r.modifiersData.popperOffsets, s = X(r.placement), o = Qt(s), h = [B, I].indexOf(s) >= 0, u = h ? "height" : "width";
253
+ if (!(!i || !f)) {
254
+ var M = sr(a.padding, r), y = Gt(i), g = o === "y" ? Y : B, w = o === "y" ? U : I, l = r.rects.reference[u] + r.rects.reference[o] - f[o] - r.rects.popper[u], c = f[o] - r.rects.reference[o], p = Tt(i), v = p ? o === "y" ? p.clientHeight || 0 : p.clientWidth || 0 : 0, d = l / 2 - c / 2, m = M[g], x = v - y[u] - M[w], O = v / 2 - y[u] / 2 + d, A = St(m, O, x), S = o;
255
+ r.modifiersData[n] = (e = {}, e[S] = A, e.centerOffset = A - O, e);
256
+ }
257
+ }
258
+ function ur(t) {
259
+ var e = t.state, r = t.options, n = r.element, a = n === void 0 ? "[data-popper-arrow]" : n;
260
+ a != null && (typeof a == "string" && (a = e.elements.popper.querySelector(a), !a) || De(e.elements.popper, a) && (e.elements.arrow = a));
261
+ }
262
+ const cr = {
263
+ name: "arrow",
264
+ enabled: !0,
265
+ phase: "main",
266
+ fn: fr,
267
+ effect: ur,
268
+ requires: ["popperOffsets"],
269
+ requiresIfExists: ["preventOverflow"]
270
+ };
271
+ function xt(t) {
272
+ return t.split("-")[1];
273
+ }
274
+ var lr = {
275
+ top: "auto",
276
+ right: "auto",
277
+ bottom: "auto",
278
+ left: "auto"
279
+ };
280
+ function hr(t, e) {
281
+ var r = t.x, n = t.y, a = e.devicePixelRatio || 1;
282
+ return {
283
+ x: bt(r * a) / a || 0,
284
+ y: bt(n * a) / a || 0
285
+ };
286
+ }
287
+ function ue(t) {
288
+ var e, r = t.popper, n = t.popperRect, a = t.placement, i = t.variation, f = t.offsets, s = t.position, o = t.gpuAcceleration, h = t.adaptive, u = t.roundOffsets, M = t.isFixed, y = f.x, g = y === void 0 ? 0 : y, w = f.y, l = w === void 0 ? 0 : w, c = typeof u == "function" ? u({
289
+ x: g,
290
+ y: l
291
+ }) : {
292
+ x: g,
293
+ y: l
294
+ };
295
+ g = c.x, l = c.y;
296
+ var p = f.hasOwnProperty("x"), v = f.hasOwnProperty("y"), d = B, m = Y, x = window;
297
+ if (h) {
298
+ var O = Tt(r), A = "clientHeight", S = "clientWidth";
299
+ if (O === z(r) && (O = it(r), rt(O).position !== "static" && s === "absolute" && (A = "scrollHeight", S = "scrollWidth")), O = O, a === Y || (a === B || a === I) && i === Dt) {
300
+ m = U;
301
+ var _ = M && O === x && x.visualViewport ? x.visualViewport.height : (
302
+ // $FlowFixMe[prop-missing]
303
+ O[A]
304
+ );
305
+ l -= _ - n.height, l *= o ? 1 : -1;
306
+ }
307
+ if (a === B || (a === Y || a === U) && i === Dt) {
308
+ d = I;
309
+ var $ = M && O === x && x.visualViewport ? x.visualViewport.width : (
310
+ // $FlowFixMe[prop-missing]
311
+ O[S]
312
+ );
313
+ g -= $ - n.width, g *= o ? 1 : -1;
314
+ }
315
+ }
316
+ var D = Object.assign({
317
+ position: s
318
+ }, h && lr), T = u === !0 ? hr({
319
+ x: g,
320
+ y: l
321
+ }, z(r)) : {
322
+ x: g,
323
+ y: l
324
+ };
325
+ if (g = T.x, l = T.y, o) {
326
+ var k;
327
+ return Object.assign({}, D, (k = {}, k[m] = v ? "0" : "", k[d] = p ? "0" : "", k.transform = (x.devicePixelRatio || 1) <= 1 ? "translate(" + g + "px, " + l + "px)" : "translate3d(" + g + "px, " + l + "px, 0)", k));
328
+ }
329
+ return Object.assign({}, D, (e = {}, e[m] = v ? l + "px" : "", e[d] = p ? g + "px" : "", e.transform = "", e));
330
+ }
331
+ function pr(t) {
332
+ var e = t.state, r = t.options, n = r.gpuAcceleration, a = n === void 0 ? !0 : n, i = r.adaptive, f = i === void 0 ? !0 : i, s = r.roundOffsets, o = s === void 0 ? !0 : s, h = {
333
+ placement: X(e.placement),
334
+ variation: xt(e.placement),
335
+ popper: e.elements.popper,
336
+ popperRect: e.rects.popper,
337
+ gpuAcceleration: a,
338
+ isFixed: e.options.strategy === "fixed"
339
+ };
340
+ e.modifiersData.popperOffsets != null && (e.styles.popper = Object.assign({}, e.styles.popper, ue(Object.assign({}, h, {
341
+ offsets: e.modifiersData.popperOffsets,
342
+ position: e.options.strategy,
343
+ adaptive: f,
344
+ roundOffsets: o
345
+ })))), e.modifiersData.arrow != null && (e.styles.arrow = Object.assign({}, e.styles.arrow, ue(Object.assign({}, h, {
346
+ offsets: e.modifiersData.arrow,
347
+ position: "absolute",
348
+ adaptive: !1,
349
+ roundOffsets: o
350
+ })))), e.attributes.popper = Object.assign({}, e.attributes.popper, {
351
+ "data-popper-placement": e.placement
352
+ });
353
+ }
354
+ const dr = {
355
+ name: "computeStyles",
356
+ enabled: !0,
357
+ phase: "beforeWrite",
358
+ fn: pr,
359
+ data: {}
360
+ };
361
+ var Et = {
362
+ passive: !0
363
+ };
364
+ function vr(t) {
365
+ var e = t.state, r = t.instance, n = t.options, a = n.scroll, i = a === void 0 ? !0 : a, f = n.resize, s = f === void 0 ? !0 : f, o = z(e.elements.popper), h = [].concat(e.scrollParents.reference, e.scrollParents.popper);
366
+ return i && h.forEach(function(u) {
367
+ u.addEventListener("scroll", r.update, Et);
368
+ }), s && o.addEventListener("resize", r.update, Et), function() {
369
+ i && h.forEach(function(u) {
370
+ u.removeEventListener("scroll", r.update, Et);
371
+ }), s && o.removeEventListener("resize", r.update, Et);
372
+ };
373
+ }
374
+ const gr = {
375
+ name: "eventListeners",
376
+ enabled: !0,
377
+ phase: "write",
378
+ fn: function() {
379
+ },
380
+ effect: vr,
381
+ data: {}
382
+ };
383
+ var mr = {
384
+ left: "right",
385
+ right: "left",
386
+ bottom: "top",
387
+ top: "bottom"
388
+ };
389
+ function Pt(t) {
390
+ return t.replace(/left|right|bottom|top/g, function(e) {
391
+ return mr[e];
392
+ });
393
+ }
394
+ var br = {
395
+ start: "end",
396
+ end: "start"
397
+ };
398
+ function ce(t) {
399
+ return t.replace(/start|end/g, function(e) {
400
+ return br[e];
401
+ });
402
+ }
403
+ function Jt(t) {
404
+ var e = z(t), r = e.pageXOffset, n = e.pageYOffset;
405
+ return {
406
+ scrollLeft: r,
407
+ scrollTop: n
408
+ };
409
+ }
410
+ function Kt(t) {
411
+ return yt(it(t)).left + Jt(t).scrollLeft;
412
+ }
413
+ function yr(t, e) {
414
+ var r = z(t), n = it(t), a = r.visualViewport, i = n.clientWidth, f = n.clientHeight, s = 0, o = 0;
415
+ if (a) {
416
+ i = a.width, f = a.height;
417
+ var h = $e();
418
+ (h || !h && e === "fixed") && (s = a.offsetLeft, o = a.offsetTop);
419
+ }
420
+ return {
421
+ width: i,
422
+ height: f,
423
+ x: s + Kt(t),
424
+ y: o
425
+ };
426
+ }
427
+ function xr(t) {
428
+ var e, r = it(t), n = Jt(t), a = (e = t.ownerDocument) == null ? void 0 : e.body, i = ft(r.scrollWidth, r.clientWidth, a ? a.scrollWidth : 0, a ? a.clientWidth : 0), f = ft(r.scrollHeight, r.clientHeight, a ? a.scrollHeight : 0, a ? a.clientHeight : 0), s = -n.scrollLeft + Kt(t), o = -n.scrollTop;
429
+ return rt(a || r).direction === "rtl" && (s += ft(r.clientWidth, a ? a.clientWidth : 0) - i), {
430
+ width: i,
431
+ height: f,
432
+ x: s,
433
+ y: o
434
+ };
435
+ }
436
+ function te(t) {
437
+ var e = rt(t), r = e.overflow, n = e.overflowX, a = e.overflowY;
438
+ return /auto|scroll|overlay|hidden/.test(r + a + n);
439
+ }
440
+ function Ce(t) {
441
+ return ["html", "body", "#document"].indexOf(G(t)) >= 0 ? t.ownerDocument.body : N(t) && te(t) ? t : Ce(zt(t));
442
+ }
443
+ function $t(t, e) {
444
+ var r;
445
+ e === void 0 && (e = []);
446
+ var n = Ce(t), a = n === ((r = t.ownerDocument) == null ? void 0 : r.body), i = z(n), f = a ? [i].concat(i.visualViewport || [], te(n) ? n : []) : n, s = e.concat(f);
447
+ return a ? s : (
448
+ // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
449
+ s.concat($t(zt(f)))
450
+ );
451
+ }
452
+ function Wt(t) {
453
+ return Object.assign({}, t, {
454
+ left: t.x,
455
+ top: t.y,
456
+ right: t.x + t.width,
457
+ bottom: t.y + t.height
458
+ });
459
+ }
460
+ function wr(t, e) {
461
+ var r = yt(t, !1, e === "fixed");
462
+ return r.top = r.top + t.clientTop, r.left = r.left + t.clientLeft, r.bottom = r.top + t.clientHeight, r.right = r.left + t.clientWidth, r.width = t.clientWidth, r.height = t.clientHeight, r.x = r.left, r.y = r.top, r;
463
+ }
464
+ function le(t, e, r) {
465
+ return e === _e ? Wt(yr(t, r)) : ut(e) ? wr(e, r) : Wt(xr(it(t)));
466
+ }
467
+ function Mr(t) {
468
+ var e = $t(zt(t)), r = ["absolute", "fixed"].indexOf(rt(t).position) >= 0, n = r && N(t) ? Tt(t) : t;
469
+ return ut(n) ? e.filter(function(a) {
470
+ return ut(a) && De(a, n) && G(a) !== "body";
471
+ }) : [];
472
+ }
473
+ function Or(t, e, r, n) {
474
+ var a = e === "clippingParents" ? Mr(t) : [].concat(e), i = [].concat(a, [r]), f = i[0], s = i.reduce(function(o, h) {
475
+ var u = le(t, h, n);
476
+ return o.top = ft(u.top, o.top), o.right = Bt(u.right, o.right), o.bottom = Bt(u.bottom, o.bottom), o.left = ft(u.left, o.left), o;
477
+ }, le(t, f, n));
478
+ return s.width = s.right - s.left, s.height = s.bottom - s.top, s.x = s.left, s.y = s.top, s;
479
+ }
480
+ function He(t) {
481
+ var e = t.reference, r = t.element, n = t.placement, a = n ? X(n) : null, i = n ? xt(n) : null, f = e.x + e.width / 2 - r.width / 2, s = e.y + e.height / 2 - r.height / 2, o;
482
+ switch (a) {
483
+ case Y:
484
+ o = {
485
+ x: f,
486
+ y: e.y - r.height
487
+ };
488
+ break;
489
+ case U:
490
+ o = {
491
+ x: f,
492
+ y: e.y + e.height
493
+ };
494
+ break;
495
+ case I:
496
+ o = {
497
+ x: e.x + e.width,
498
+ y: s
499
+ };
500
+ break;
501
+ case B:
502
+ o = {
503
+ x: e.x - r.width,
504
+ y: s
505
+ };
506
+ break;
507
+ default:
508
+ o = {
509
+ x: e.x,
510
+ y: e.y
511
+ };
512
+ }
513
+ var h = a ? Qt(a) : null;
514
+ if (h != null) {
515
+ var u = h === "y" ? "height" : "width";
516
+ switch (i) {
517
+ case mt:
518
+ o[h] = o[h] - (e[u] / 2 - r[u] / 2);
519
+ break;
520
+ case Dt:
521
+ o[h] = o[h] + (e[u] / 2 - r[u] / 2);
522
+ break;
523
+ }
524
+ }
525
+ return o;
526
+ }
527
+ function kt(t, e) {
528
+ e === void 0 && (e = {});
529
+ var r = e, n = r.placement, a = n === void 0 ? t.placement : n, i = r.strategy, f = i === void 0 ? t.strategy : i, s = r.boundary, o = s === void 0 ? Ue : s, h = r.rootBoundary, u = h === void 0 ? _e : h, M = r.elementContext, y = M === void 0 ? At : M, g = r.altBoundary, w = g === void 0 ? !1 : g, l = r.padding, c = l === void 0 ? 0 : l, p = Re(typeof c != "number" ? c : Te(c, Rt)), v = y === At ? Ie : At, d = t.rects.popper, m = t.elements[w ? v : y], x = Or(ut(m) ? m : m.contextElement || it(t.elements.popper), o, u, f), O = yt(t.elements.reference), A = He({
530
+ reference: O,
531
+ element: d,
532
+ placement: a
533
+ }), S = Wt(Object.assign({}, d, A)), _ = y === At ? S : O, $ = {
534
+ top: x.top - _.top + p.top,
535
+ bottom: _.bottom - x.bottom + p.bottom,
536
+ left: x.left - _.left + p.left,
537
+ right: _.right - x.right + p.right
538
+ }, D = t.modifiersData.offset;
539
+ if (y === At && D) {
540
+ var T = D[a];
541
+ Object.keys($).forEach(function(k) {
542
+ var H = [I, U].indexOf(k) >= 0 ? 1 : -1, E = [Y, U].indexOf(k) >= 0 ? "y" : "x";
543
+ $[k] += T[E] * H;
544
+ });
545
+ }
546
+ return $;
547
+ }
548
+ function Ar(t, e) {
549
+ e === void 0 && (e = {});
550
+ var r = e, n = r.placement, a = r.boundary, i = r.rootBoundary, f = r.padding, s = r.flipVariations, o = r.allowedAutoPlacements, h = o === void 0 ? Se : o, u = xt(n), M = u ? s ? se : se.filter(function(w) {
551
+ return xt(w) === u;
552
+ }) : Rt, y = M.filter(function(w) {
553
+ return h.indexOf(w) >= 0;
554
+ });
555
+ y.length === 0 && (y = M);
556
+ var g = y.reduce(function(w, l) {
557
+ return w[l] = kt(t, {
558
+ placement: l,
559
+ boundary: a,
560
+ rootBoundary: i,
561
+ padding: f
562
+ })[X(l)], w;
563
+ }, {});
564
+ return Object.keys(g).sort(function(w, l) {
565
+ return g[w] - g[l];
566
+ });
567
+ }
568
+ function _r(t) {
569
+ if (X(t) === Zt)
570
+ return [];
571
+ var e = Pt(t);
572
+ return [ce(t), e, ce(e)];
573
+ }
574
+ function Sr(t) {
575
+ var e = t.state, r = t.options, n = t.name;
576
+ if (!e.modifiersData[n]._skip) {
577
+ for (var a = r.mainAxis, i = a === void 0 ? !0 : a, f = r.altAxis, s = f === void 0 ? !0 : f, o = r.fallbackPlacements, h = r.padding, u = r.boundary, M = r.rootBoundary, y = r.altBoundary, g = r.flipVariations, w = g === void 0 ? !0 : g, l = r.allowedAutoPlacements, c = e.options.placement, p = X(c), v = p === c, d = o || (v || !w ? [Pt(c)] : _r(c)), m = [c].concat(d).reduce(function(nt, Z) {
578
+ return nt.concat(X(Z) === Zt ? Ar(e, {
579
+ placement: Z,
580
+ boundary: u,
581
+ rootBoundary: M,
582
+ padding: h,
583
+ flipVariations: w,
584
+ allowedAutoPlacements: l
585
+ }) : Z);
586
+ }, []), x = e.rects.reference, O = e.rects.popper, A = /* @__PURE__ */ new Map(), S = !0, _ = m[0], $ = 0; $ < m.length; $++) {
587
+ var D = m[$], T = X(D), k = xt(D) === mt, H = [Y, U].indexOf(T) >= 0, E = H ? "width" : "height", C = kt(e, {
588
+ placement: D,
589
+ boundary: u,
590
+ rootBoundary: M,
591
+ altBoundary: y,
592
+ padding: h
593
+ }), P = H ? k ? I : B : k ? U : Y;
594
+ x[E] > O[E] && (P = Pt(P));
595
+ var W = Pt(P), F = [];
596
+ if (i && F.push(C[T] <= 0), s && F.push(C[P] <= 0, C[W] <= 0), F.every(function(nt) {
597
+ return nt;
598
+ })) {
599
+ _ = D, S = !1;
600
+ break;
601
+ }
602
+ A.set(D, F);
603
+ }
604
+ if (S)
605
+ for (var Q = w ? 3 : 1, L = function(Z) {
606
+ var ot = m.find(function(ct) {
607
+ var tt = A.get(ct);
608
+ if (tt)
609
+ return tt.slice(0, Z).every(function(lt) {
610
+ return lt;
611
+ });
612
+ });
613
+ if (ot)
614
+ return _ = ot, "break";
615
+ }, J = Q; J > 0; J--) {
616
+ var K = L(J);
617
+ if (K === "break") break;
618
+ }
619
+ e.placement !== _ && (e.modifiersData[n]._skip = !0, e.placement = _, e.reset = !0);
620
+ }
621
+ }
622
+ const $r = {
623
+ name: "flip",
624
+ enabled: !0,
625
+ phase: "main",
626
+ fn: Sr,
627
+ requiresIfExists: ["offset"],
628
+ data: {
629
+ _skip: !1
630
+ }
631
+ };
632
+ function he(t, e, r) {
633
+ return r === void 0 && (r = {
634
+ x: 0,
635
+ y: 0
636
+ }), {
637
+ top: t.top - e.height - r.y,
638
+ right: t.right - e.width + r.x,
639
+ bottom: t.bottom - e.height + r.y,
640
+ left: t.left - e.width - r.x
641
+ };
642
+ }
643
+ function pe(t) {
644
+ return [Y, I, U, B].some(function(e) {
645
+ return t[e] >= 0;
646
+ });
647
+ }
648
+ function Dr(t) {
649
+ var e = t.state, r = t.name, n = e.rects.reference, a = e.rects.popper, i = e.modifiersData.preventOverflow, f = kt(e, {
650
+ elementContext: "reference"
651
+ }), s = kt(e, {
652
+ altBoundary: !0
653
+ }), o = he(f, n), h = he(s, a, i), u = pe(o), M = pe(h);
654
+ e.modifiersData[r] = {
655
+ referenceClippingOffsets: o,
656
+ popperEscapeOffsets: h,
657
+ isReferenceHidden: u,
658
+ hasPopperEscaped: M
659
+ }, e.attributes.popper = Object.assign({}, e.attributes.popper, {
660
+ "data-popper-reference-hidden": u,
661
+ "data-popper-escaped": M
662
+ });
663
+ }
664
+ const kr = {
665
+ name: "hide",
666
+ enabled: !0,
667
+ phase: "main",
668
+ requiresIfExists: ["preventOverflow"],
669
+ fn: Dr
670
+ };
671
+ function Rr(t, e, r) {
672
+ var n = X(t), a = [B, Y].indexOf(n) >= 0 ? -1 : 1, i = typeof r == "function" ? r(Object.assign({}, e, {
673
+ placement: t
674
+ })) : r, f = i[0], s = i[1];
675
+ return f = f || 0, s = (s || 0) * a, [B, I].indexOf(n) >= 0 ? {
676
+ x: s,
677
+ y: f
678
+ } : {
679
+ x: f,
680
+ y: s
681
+ };
682
+ }
683
+ function Tr(t) {
684
+ var e = t.state, r = t.options, n = t.name, a = r.offset, i = a === void 0 ? [0, 0] : a, f = Se.reduce(function(u, M) {
685
+ return u[M] = Rr(M, e.rects, i), u;
686
+ }, {}), s = f[e.placement], o = s.x, h = s.y;
687
+ e.modifiersData.popperOffsets != null && (e.modifiersData.popperOffsets.x += o, e.modifiersData.popperOffsets.y += h), e.modifiersData[n] = f;
688
+ }
689
+ const Cr = {
690
+ name: "offset",
691
+ enabled: !0,
692
+ phase: "main",
693
+ requires: ["popperOffsets"],
694
+ fn: Tr
695
+ };
696
+ function Hr(t) {
697
+ var e = t.state, r = t.name;
698
+ e.modifiersData[r] = He({
699
+ reference: e.rects.reference,
700
+ element: e.rects.popper,
701
+ placement: e.placement
702
+ });
703
+ }
704
+ const Er = {
705
+ name: "popperOffsets",
706
+ enabled: !0,
707
+ phase: "read",
708
+ fn: Hr,
709
+ data: {}
710
+ };
711
+ function Pr(t) {
712
+ return t === "x" ? "y" : "x";
713
+ }
714
+ function Lr(t) {
715
+ var e = t.state, r = t.options, n = t.name, a = r.mainAxis, i = a === void 0 ? !0 : a, f = r.altAxis, s = f === void 0 ? !1 : f, o = r.boundary, h = r.rootBoundary, u = r.altBoundary, M = r.padding, y = r.tether, g = y === void 0 ? !0 : y, w = r.tetherOffset, l = w === void 0 ? 0 : w, c = kt(e, {
716
+ boundary: o,
717
+ rootBoundary: h,
718
+ padding: M,
719
+ altBoundary: u
720
+ }), p = X(e.placement), v = xt(e.placement), d = !v, m = Qt(p), x = Pr(m), O = e.modifiersData.popperOffsets, A = e.rects.reference, S = e.rects.popper, _ = typeof l == "function" ? l(Object.assign({}, e.rects, {
721
+ placement: e.placement
722
+ })) : l, $ = typeof _ == "number" ? {
723
+ mainAxis: _,
724
+ altAxis: _
725
+ } : Object.assign({
726
+ mainAxis: 0,
727
+ altAxis: 0
728
+ }, _), D = e.modifiersData.offset ? e.modifiersData.offset[e.placement] : null, T = {
729
+ x: 0,
730
+ y: 0
731
+ };
732
+ if (O) {
733
+ if (i) {
734
+ var k, H = m === "y" ? Y : B, E = m === "y" ? U : I, C = m === "y" ? "height" : "width", P = O[m], W = P + c[H], F = P - c[E], Q = g ? -S[C] / 2 : 0, L = v === mt ? A[C] : S[C], J = v === mt ? -S[C] : -A[C], K = e.elements.arrow, nt = g && K ? Gt(K) : {
735
+ width: 0,
736
+ height: 0
737
+ }, Z = e.modifiersData["arrow#persistent"] ? e.modifiersData["arrow#persistent"].padding : ke(), ot = Z[H], ct = Z[E], tt = St(0, A[C], nt[C]), lt = d ? A[C] / 2 - Q - tt - ot - $.mainAxis : L - tt - ot - $.mainAxis, Ct = d ? -A[C] / 2 + Q + tt + ct + $.mainAxis : J + tt + ct + $.mainAxis, st = e.elements.arrow && Tt(e.elements.arrow), wt = st ? m === "y" ? st.clientTop || 0 : st.clientLeft || 0 : 0, ht = (k = D?.[m]) != null ? k : 0, pt = P + lt - ht - wt, dt = P + Ct - ht, vt = St(g ? Bt(W, pt) : W, P, g ? ft(F, dt) : F);
738
+ O[m] = vt, T[m] = vt - P;
739
+ }
740
+ if (s) {
741
+ var gt, Mt = m === "x" ? Y : B, Ot = m === "x" ? U : I, at = O[x], Ht = x === "y" ? "height" : "width", ee = at + c[Mt], re = at - c[Ot], Ut = [Y, B].indexOf(p) !== -1, ne = (gt = D?.[x]) != null ? gt : 0, ae = Ut ? ee : at - A[Ht] - S[Ht] - ne + $.altAxis, ie = Ut ? at + A[Ht] + S[Ht] - ne - $.altAxis : re, oe = g && Ut ? or(ae, at, ie) : St(g ? ae : ee, at, g ? ie : re);
742
+ O[x] = oe, T[x] = oe - at;
743
+ }
744
+ e.modifiersData[n] = T;
745
+ }
746
+ }
747
+ const Fr = {
748
+ name: "preventOverflow",
749
+ enabled: !0,
750
+ phase: "main",
751
+ fn: Lr,
752
+ requiresIfExists: ["offset"]
753
+ };
754
+ function Yr(t) {
755
+ return {
756
+ scrollLeft: t.scrollLeft,
757
+ scrollTop: t.scrollTop
758
+ };
759
+ }
760
+ function Br(t) {
761
+ return t === z(t) || !N(t) ? Jt(t) : Yr(t);
762
+ }
763
+ function jr(t) {
764
+ var e = t.getBoundingClientRect(), r = bt(e.width) / t.offsetWidth || 1, n = bt(e.height) / t.offsetHeight || 1;
765
+ return r !== 1 || n !== 1;
766
+ }
767
+ function zr(t, e, r) {
768
+ r === void 0 && (r = !1);
769
+ var n = N(e), a = N(e) && jr(e), i = it(e), f = yt(t, a, r), s = {
770
+ scrollLeft: 0,
771
+ scrollTop: 0
772
+ }, o = {
773
+ x: 0,
774
+ y: 0
775
+ };
776
+ return (n || !n && !r) && ((G(e) !== "body" || // https://github.com/popperjs/popper-core/issues/1078
777
+ te(i)) && (s = Br(e)), N(e) ? (o = yt(e, !0), o.x += e.clientLeft, o.y += e.clientTop) : i && (o.x = Kt(i))), {
778
+ x: f.left + s.scrollLeft - o.x,
779
+ y: f.top + s.scrollTop - o.y,
780
+ width: f.width,
781
+ height: f.height
782
+ };
783
+ }
784
+ function Nr(t) {
785
+ var e = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Set(), n = [];
786
+ t.forEach(function(i) {
787
+ e.set(i.name, i);
788
+ });
789
+ function a(i) {
790
+ r.add(i.name);
791
+ var f = [].concat(i.requires || [], i.requiresIfExists || []);
792
+ f.forEach(function(s) {
793
+ if (!r.has(s)) {
794
+ var o = e.get(s);
795
+ o && a(o);
796
+ }
797
+ }), n.push(i);
798
+ }
799
+ return t.forEach(function(i) {
800
+ r.has(i.name) || a(i);
801
+ }), n;
802
+ }
803
+ function Ur(t) {
804
+ var e = Nr(t);
805
+ return tr.reduce(function(r, n) {
806
+ return r.concat(e.filter(function(a) {
807
+ return a.phase === n;
808
+ }));
809
+ }, []);
810
+ }
811
+ function Ir(t) {
812
+ var e;
813
+ return function() {
814
+ return e || (e = new Promise(function(r) {
815
+ Promise.resolve().then(function() {
816
+ e = void 0, r(t());
817
+ });
818
+ })), e;
819
+ };
820
+ }
821
+ function Wr(t) {
822
+ var e = t.reduce(function(r, n) {
823
+ var a = r[n.name];
824
+ return r[n.name] = a ? Object.assign({}, a, n, {
825
+ options: Object.assign({}, a.options, n.options),
826
+ data: Object.assign({}, a.data, n.data)
827
+ }) : n, r;
828
+ }, {});
829
+ return Object.keys(e).map(function(r) {
830
+ return e[r];
831
+ });
832
+ }
833
+ var de = {
834
+ placement: "bottom",
835
+ modifiers: [],
836
+ strategy: "absolute"
837
+ };
838
+ function ve() {
839
+ for (var t = arguments.length, e = new Array(t), r = 0; r < t; r++)
840
+ e[r] = arguments[r];
841
+ return !e.some(function(n) {
842
+ return !(n && typeof n.getBoundingClientRect == "function");
843
+ });
844
+ }
845
+ function qr(t) {
846
+ t === void 0 && (t = {});
847
+ var e = t, r = e.defaultModifiers, n = r === void 0 ? [] : r, a = e.defaultOptions, i = a === void 0 ? de : a;
848
+ return function(s, o, h) {
849
+ h === void 0 && (h = i);
850
+ var u = {
851
+ placement: "bottom",
852
+ orderedModifiers: [],
853
+ options: Object.assign({}, de, i),
854
+ modifiersData: {},
855
+ elements: {
856
+ reference: s,
857
+ popper: o
858
+ },
859
+ attributes: {},
860
+ styles: {}
861
+ }, M = [], y = !1, g = {
862
+ state: u,
863
+ setOptions: function(p) {
864
+ var v = typeof p == "function" ? p(u.options) : p;
865
+ l(), u.options = Object.assign({}, i, u.options, v), u.scrollParents = {
866
+ reference: ut(s) ? $t(s) : s.contextElement ? $t(s.contextElement) : [],
867
+ popper: $t(o)
868
+ };
869
+ var d = Ur(Wr([].concat(n, u.options.modifiers)));
870
+ return u.orderedModifiers = d.filter(function(m) {
871
+ return m.enabled;
872
+ }), w(), g.update();
873
+ },
874
+ // Sync update – it will always be executed, even if not necessary. This
875
+ // is useful for low frequency updates where sync behavior simplifies the
876
+ // logic.
877
+ // For high frequency updates (e.g. `resize` and `scroll` events), always
878
+ // prefer the async Popper#update method
879
+ forceUpdate: function() {
880
+ if (!y) {
881
+ var p = u.elements, v = p.reference, d = p.popper;
882
+ if (ve(v, d)) {
883
+ u.rects = {
884
+ reference: zr(v, Tt(d), u.options.strategy === "fixed"),
885
+ popper: Gt(d)
886
+ }, u.reset = !1, u.placement = u.options.placement, u.orderedModifiers.forEach(function($) {
887
+ return u.modifiersData[$.name] = Object.assign({}, $.data);
888
+ });
889
+ for (var m = 0; m < u.orderedModifiers.length; m++) {
890
+ if (u.reset === !0) {
891
+ u.reset = !1, m = -1;
892
+ continue;
893
+ }
894
+ var x = u.orderedModifiers[m], O = x.fn, A = x.options, S = A === void 0 ? {} : A, _ = x.name;
895
+ typeof O == "function" && (u = O({
896
+ state: u,
897
+ options: S,
898
+ name: _,
899
+ instance: g
900
+ }) || u);
901
+ }
902
+ }
903
+ }
904
+ },
905
+ // Async and optimistically optimized update – it will not be executed if
906
+ // not necessary (debounced to run at most once-per-tick)
907
+ update: Ir(function() {
908
+ return new Promise(function(c) {
909
+ g.forceUpdate(), c(u);
910
+ });
911
+ }),
912
+ destroy: function() {
913
+ l(), y = !0;
914
+ }
915
+ };
916
+ if (!ve(s, o))
917
+ return g;
918
+ g.setOptions(h).then(function(c) {
919
+ !y && h.onFirstUpdate && h.onFirstUpdate(c);
920
+ });
921
+ function w() {
922
+ u.orderedModifiers.forEach(function(c) {
923
+ var p = c.name, v = c.options, d = v === void 0 ? {} : v, m = c.effect;
924
+ if (typeof m == "function") {
925
+ var x = m({
926
+ state: u,
927
+ name: p,
928
+ instance: g,
929
+ options: d
930
+ }), O = function() {
931
+ };
932
+ M.push(x || O);
933
+ }
934
+ });
935
+ }
936
+ function l() {
937
+ M.forEach(function(c) {
938
+ return c();
939
+ }), M = [];
940
+ }
941
+ return g;
942
+ };
943
+ }
944
+ var Vr = [gr, Er, dr, nr, Cr, $r, Fr, cr, kr], Rn = /* @__PURE__ */ qr({
945
+ defaultModifiers: Vr
946
+ });
947
+ function jt(t) {
948
+ "@babel/helpers - typeof";
949
+ return jt = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) {
950
+ return typeof e;
951
+ } : function(e) {
952
+ return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
953
+ }, jt(t);
954
+ }
955
+ var Zr = /^\s+/, Xr = /\s+$/;
956
+ function b(t, e) {
957
+ if (t = t || "", e = e || {}, t instanceof b)
958
+ return t;
959
+ if (!(this instanceof b))
960
+ return new b(t, e);
961
+ var r = Gr(t);
962
+ this._originalInput = t, this._r = r.r, this._g = r.g, this._b = r.b, this._a = r.a, this._roundA = Math.round(100 * this._a) / 100, this._format = e.format || r.format, this._gradientType = e.gradientType, this._r < 1 && (this._r = Math.round(this._r)), this._g < 1 && (this._g = Math.round(this._g)), this._b < 1 && (this._b = Math.round(this._b)), this._ok = r.ok;
963
+ }
964
+ b.prototype = {
965
+ isDark: function() {
966
+ return this.getBrightness() < 128;
967
+ },
968
+ isLight: function() {
969
+ return !this.isDark();
970
+ },
971
+ isValid: function() {
972
+ return this._ok;
973
+ },
974
+ getOriginalInput: function() {
975
+ return this._originalInput;
976
+ },
977
+ getFormat: function() {
978
+ return this._format;
979
+ },
980
+ getAlpha: function() {
981
+ return this._a;
982
+ },
983
+ getBrightness: function() {
984
+ var e = this.toRgb();
985
+ return (e.r * 299 + e.g * 587 + e.b * 114) / 1e3;
986
+ },
987
+ getLuminance: function() {
988
+ var e = this.toRgb(), r, n, a, i, f, s;
989
+ return r = e.r / 255, n = e.g / 255, a = e.b / 255, r <= 0.03928 ? i = r / 12.92 : i = Math.pow((r + 0.055) / 1.055, 2.4), n <= 0.03928 ? f = n / 12.92 : f = Math.pow((n + 0.055) / 1.055, 2.4), a <= 0.03928 ? s = a / 12.92 : s = Math.pow((a + 0.055) / 1.055, 2.4), 0.2126 * i + 0.7152 * f + 0.0722 * s;
990
+ },
991
+ setAlpha: function(e) {
992
+ return this._a = Ee(e), this._roundA = Math.round(100 * this._a) / 100, this;
993
+ },
994
+ toHsv: function() {
995
+ var e = me(this._r, this._g, this._b);
996
+ return {
997
+ h: e.h * 360,
998
+ s: e.s,
999
+ v: e.v,
1000
+ a: this._a
1001
+ };
1002
+ },
1003
+ toHsvString: function() {
1004
+ var e = me(this._r, this._g, this._b), r = Math.round(e.h * 360), n = Math.round(e.s * 100), a = Math.round(e.v * 100);
1005
+ return this._a == 1 ? "hsv(" + r + ", " + n + "%, " + a + "%)" : "hsva(" + r + ", " + n + "%, " + a + "%, " + this._roundA + ")";
1006
+ },
1007
+ toHsl: function() {
1008
+ var e = ge(this._r, this._g, this._b);
1009
+ return {
1010
+ h: e.h * 360,
1011
+ s: e.s,
1012
+ l: e.l,
1013
+ a: this._a
1014
+ };
1015
+ },
1016
+ toHslString: function() {
1017
+ var e = ge(this._r, this._g, this._b), r = Math.round(e.h * 360), n = Math.round(e.s * 100), a = Math.round(e.l * 100);
1018
+ return this._a == 1 ? "hsl(" + r + ", " + n + "%, " + a + "%)" : "hsla(" + r + ", " + n + "%, " + a + "%, " + this._roundA + ")";
1019
+ },
1020
+ toHex: function(e) {
1021
+ return be(this._r, this._g, this._b, e);
1022
+ },
1023
+ toHexString: function(e) {
1024
+ return "#" + this.toHex(e);
1025
+ },
1026
+ toHex8: function(e) {
1027
+ return tn(this._r, this._g, this._b, this._a, e);
1028
+ },
1029
+ toHex8String: function(e) {
1030
+ return "#" + this.toHex8(e);
1031
+ },
1032
+ toRgb: function() {
1033
+ return {
1034
+ r: Math.round(this._r),
1035
+ g: Math.round(this._g),
1036
+ b: Math.round(this._b),
1037
+ a: this._a
1038
+ };
1039
+ },
1040
+ toRgbString: function() {
1041
+ return this._a == 1 ? "rgb(" + Math.round(this._r) + ", " + Math.round(this._g) + ", " + Math.round(this._b) + ")" : "rgba(" + Math.round(this._r) + ", " + Math.round(this._g) + ", " + Math.round(this._b) + ", " + this._roundA + ")";
1042
+ },
1043
+ toPercentageRgb: function() {
1044
+ return {
1045
+ r: Math.round(R(this._r, 255) * 100) + "%",
1046
+ g: Math.round(R(this._g, 255) * 100) + "%",
1047
+ b: Math.round(R(this._b, 255) * 100) + "%",
1048
+ a: this._a
1049
+ };
1050
+ },
1051
+ toPercentageRgbString: function() {
1052
+ return this._a == 1 ? "rgb(" + Math.round(R(this._r, 255) * 100) + "%, " + Math.round(R(this._g, 255) * 100) + "%, " + Math.round(R(this._b, 255) * 100) + "%)" : "rgba(" + Math.round(R(this._r, 255) * 100) + "%, " + Math.round(R(this._g, 255) * 100) + "%, " + Math.round(R(this._b, 255) * 100) + "%, " + this._roundA + ")";
1053
+ },
1054
+ toName: function() {
1055
+ return this._a === 0 ? "transparent" : this._a < 1 ? !1 : pn[be(this._r, this._g, this._b, !0)] || !1;
1056
+ },
1057
+ toFilter: function(e) {
1058
+ var r = "#" + ye(this._r, this._g, this._b, this._a), n = r, a = this._gradientType ? "GradientType = 1, " : "";
1059
+ if (e) {
1060
+ var i = b(e);
1061
+ n = "#" + ye(i._r, i._g, i._b, i._a);
1062
+ }
1063
+ return "progid:DXImageTransform.Microsoft.gradient(" + a + "startColorstr=" + r + ",endColorstr=" + n + ")";
1064
+ },
1065
+ toString: function(e) {
1066
+ var r = !!e;
1067
+ e = e || this._format;
1068
+ var n = !1, a = this._a < 1 && this._a >= 0, i = !r && a && (e === "hex" || e === "hex6" || e === "hex3" || e === "hex4" || e === "hex8" || e === "name");
1069
+ return i ? e === "name" && this._a === 0 ? this.toName() : this.toRgbString() : (e === "rgb" && (n = this.toRgbString()), e === "prgb" && (n = this.toPercentageRgbString()), (e === "hex" || e === "hex6") && (n = this.toHexString()), e === "hex3" && (n = this.toHexString(!0)), e === "hex4" && (n = this.toHex8String(!0)), e === "hex8" && (n = this.toHex8String()), e === "name" && (n = this.toName()), e === "hsl" && (n = this.toHslString()), e === "hsv" && (n = this.toHsvString()), n || this.toHexString());
1070
+ },
1071
+ clone: function() {
1072
+ return b(this.toString());
1073
+ },
1074
+ _applyModification: function(e, r) {
1075
+ var n = e.apply(null, [this].concat([].slice.call(r)));
1076
+ return this._r = n._r, this._g = n._g, this._b = n._b, this.setAlpha(n._a), this;
1077
+ },
1078
+ lighten: function() {
1079
+ return this._applyModification(an, arguments);
1080
+ },
1081
+ brighten: function() {
1082
+ return this._applyModification(on, arguments);
1083
+ },
1084
+ darken: function() {
1085
+ return this._applyModification(sn, arguments);
1086
+ },
1087
+ desaturate: function() {
1088
+ return this._applyModification(en, arguments);
1089
+ },
1090
+ saturate: function() {
1091
+ return this._applyModification(rn, arguments);
1092
+ },
1093
+ greyscale: function() {
1094
+ return this._applyModification(nn, arguments);
1095
+ },
1096
+ spin: function() {
1097
+ return this._applyModification(fn, arguments);
1098
+ },
1099
+ _applyCombination: function(e, r) {
1100
+ return e.apply(null, [this].concat([].slice.call(r)));
1101
+ },
1102
+ analogous: function() {
1103
+ return this._applyCombination(ln, arguments);
1104
+ },
1105
+ complement: function() {
1106
+ return this._applyCombination(un, arguments);
1107
+ },
1108
+ monochromatic: function() {
1109
+ return this._applyCombination(hn, arguments);
1110
+ },
1111
+ splitcomplement: function() {
1112
+ return this._applyCombination(cn, arguments);
1113
+ },
1114
+ // Disabled until https://github.com/bgrins/TinyColor/issues/254
1115
+ // polyad: function (number) {
1116
+ // return this._applyCombination(polyad, [number]);
1117
+ // },
1118
+ triad: function() {
1119
+ return this._applyCombination(xe, [3]);
1120
+ },
1121
+ tetrad: function() {
1122
+ return this._applyCombination(xe, [4]);
1123
+ }
1124
+ };
1125
+ b.fromRatio = function(t, e) {
1126
+ if (jt(t) == "object") {
1127
+ var r = {};
1128
+ for (var n in t)
1129
+ t.hasOwnProperty(n) && (n === "a" ? r[n] = t[n] : r[n] = _t(t[n]));
1130
+ t = r;
1131
+ }
1132
+ return b(t, e);
1133
+ };
1134
+ function Gr(t) {
1135
+ var e = {
1136
+ r: 0,
1137
+ g: 0,
1138
+ b: 0
1139
+ }, r = 1, n = null, a = null, i = null, f = !1, s = !1;
1140
+ return typeof t == "string" && (t = mn(t)), jt(t) == "object" && (et(t.r) && et(t.g) && et(t.b) ? (e = Qr(t.r, t.g, t.b), f = !0, s = String(t.r).substr(-1) === "%" ? "prgb" : "rgb") : et(t.h) && et(t.s) && et(t.v) ? (n = _t(t.s), a = _t(t.v), e = Kr(t.h, n, a), f = !0, s = "hsv") : et(t.h) && et(t.s) && et(t.l) && (n = _t(t.s), i = _t(t.l), e = Jr(t.h, n, i), f = !0, s = "hsl"), t.hasOwnProperty("a") && (r = t.a)), r = Ee(r), {
1141
+ ok: f,
1142
+ format: t.format || s,
1143
+ r: Math.min(255, Math.max(e.r, 0)),
1144
+ g: Math.min(255, Math.max(e.g, 0)),
1145
+ b: Math.min(255, Math.max(e.b, 0)),
1146
+ a: r
1147
+ };
1148
+ }
1149
+ function Qr(t, e, r) {
1150
+ return {
1151
+ r: R(t, 255) * 255,
1152
+ g: R(e, 255) * 255,
1153
+ b: R(r, 255) * 255
1154
+ };
1155
+ }
1156
+ function ge(t, e, r) {
1157
+ t = R(t, 255), e = R(e, 255), r = R(r, 255);
1158
+ var n = Math.max(t, e, r), a = Math.min(t, e, r), i, f, s = (n + a) / 2;
1159
+ if (n == a)
1160
+ i = f = 0;
1161
+ else {
1162
+ var o = n - a;
1163
+ switch (f = s > 0.5 ? o / (2 - n - a) : o / (n + a), n) {
1164
+ case t:
1165
+ i = (e - r) / o + (e < r ? 6 : 0);
1166
+ break;
1167
+ case e:
1168
+ i = (r - t) / o + 2;
1169
+ break;
1170
+ case r:
1171
+ i = (t - e) / o + 4;
1172
+ break;
1173
+ }
1174
+ i /= 6;
1175
+ }
1176
+ return {
1177
+ h: i,
1178
+ s: f,
1179
+ l: s
1180
+ };
1181
+ }
1182
+ function Jr(t, e, r) {
1183
+ var n, a, i;
1184
+ t = R(t, 360), e = R(e, 100), r = R(r, 100);
1185
+ function f(h, u, M) {
1186
+ return M < 0 && (M += 1), M > 1 && (M -= 1), M < 1 / 6 ? h + (u - h) * 6 * M : M < 1 / 2 ? u : M < 2 / 3 ? h + (u - h) * (2 / 3 - M) * 6 : h;
1187
+ }
1188
+ if (e === 0)
1189
+ n = a = i = r;
1190
+ else {
1191
+ var s = r < 0.5 ? r * (1 + e) : r + e - r * e, o = 2 * r - s;
1192
+ n = f(o, s, t + 1 / 3), a = f(o, s, t), i = f(o, s, t - 1 / 3);
1193
+ }
1194
+ return {
1195
+ r: n * 255,
1196
+ g: a * 255,
1197
+ b: i * 255
1198
+ };
1199
+ }
1200
+ function me(t, e, r) {
1201
+ t = R(t, 255), e = R(e, 255), r = R(r, 255);
1202
+ var n = Math.max(t, e, r), a = Math.min(t, e, r), i, f, s = n, o = n - a;
1203
+ if (f = n === 0 ? 0 : o / n, n == a)
1204
+ i = 0;
1205
+ else {
1206
+ switch (n) {
1207
+ case t:
1208
+ i = (e - r) / o + (e < r ? 6 : 0);
1209
+ break;
1210
+ case e:
1211
+ i = (r - t) / o + 2;
1212
+ break;
1213
+ case r:
1214
+ i = (t - e) / o + 4;
1215
+ break;
1216
+ }
1217
+ i /= 6;
1218
+ }
1219
+ return {
1220
+ h: i,
1221
+ s: f,
1222
+ v: s
1223
+ };
1224
+ }
1225
+ function Kr(t, e, r) {
1226
+ t = R(t, 360) * 6, e = R(e, 100), r = R(r, 100);
1227
+ var n = Math.floor(t), a = t - n, i = r * (1 - e), f = r * (1 - a * e), s = r * (1 - (1 - a) * e), o = n % 6, h = [r, f, i, i, s, r][o], u = [s, r, r, f, i, i][o], M = [i, i, s, r, r, f][o];
1228
+ return {
1229
+ r: h * 255,
1230
+ g: u * 255,
1231
+ b: M * 255
1232
+ };
1233
+ }
1234
+ function be(t, e, r, n) {
1235
+ var a = [V(Math.round(t).toString(16)), V(Math.round(e).toString(16)), V(Math.round(r).toString(16))];
1236
+ return n && a[0].charAt(0) == a[0].charAt(1) && a[1].charAt(0) == a[1].charAt(1) && a[2].charAt(0) == a[2].charAt(1) ? a[0].charAt(0) + a[1].charAt(0) + a[2].charAt(0) : a.join("");
1237
+ }
1238
+ function tn(t, e, r, n, a) {
1239
+ var i = [V(Math.round(t).toString(16)), V(Math.round(e).toString(16)), V(Math.round(r).toString(16)), V(Pe(n))];
1240
+ return a && i[0].charAt(0) == i[0].charAt(1) && i[1].charAt(0) == i[1].charAt(1) && i[2].charAt(0) == i[2].charAt(1) && i[3].charAt(0) == i[3].charAt(1) ? i[0].charAt(0) + i[1].charAt(0) + i[2].charAt(0) + i[3].charAt(0) : i.join("");
1241
+ }
1242
+ function ye(t, e, r, n) {
1243
+ var a = [V(Pe(n)), V(Math.round(t).toString(16)), V(Math.round(e).toString(16)), V(Math.round(r).toString(16))];
1244
+ return a.join("");
1245
+ }
1246
+ b.equals = function(t, e) {
1247
+ return !t || !e ? !1 : b(t).toRgbString() == b(e).toRgbString();
1248
+ };
1249
+ b.random = function() {
1250
+ return b.fromRatio({
1251
+ r: Math.random(),
1252
+ g: Math.random(),
1253
+ b: Math.random()
1254
+ });
1255
+ };
1256
+ function en(t, e) {
1257
+ e = e === 0 ? 0 : e || 10;
1258
+ var r = b(t).toHsl();
1259
+ return r.s -= e / 100, r.s = Nt(r.s), b(r);
1260
+ }
1261
+ function rn(t, e) {
1262
+ e = e === 0 ? 0 : e || 10;
1263
+ var r = b(t).toHsl();
1264
+ return r.s += e / 100, r.s = Nt(r.s), b(r);
1265
+ }
1266
+ function nn(t) {
1267
+ return b(t).desaturate(100);
1268
+ }
1269
+ function an(t, e) {
1270
+ e = e === 0 ? 0 : e || 10;
1271
+ var r = b(t).toHsl();
1272
+ return r.l += e / 100, r.l = Nt(r.l), b(r);
1273
+ }
1274
+ function on(t, e) {
1275
+ e = e === 0 ? 0 : e || 10;
1276
+ var r = b(t).toRgb();
1277
+ return r.r = Math.max(0, Math.min(255, r.r - Math.round(255 * -(e / 100)))), r.g = Math.max(0, Math.min(255, r.g - Math.round(255 * -(e / 100)))), r.b = Math.max(0, Math.min(255, r.b - Math.round(255 * -(e / 100)))), b(r);
1278
+ }
1279
+ function sn(t, e) {
1280
+ e = e === 0 ? 0 : e || 10;
1281
+ var r = b(t).toHsl();
1282
+ return r.l -= e / 100, r.l = Nt(r.l), b(r);
1283
+ }
1284
+ function fn(t, e) {
1285
+ var r = b(t).toHsl(), n = (r.h + e) % 360;
1286
+ return r.h = n < 0 ? 360 + n : n, b(r);
1287
+ }
1288
+ function un(t) {
1289
+ var e = b(t).toHsl();
1290
+ return e.h = (e.h + 180) % 360, b(e);
1291
+ }
1292
+ function xe(t, e) {
1293
+ if (isNaN(e) || e <= 0)
1294
+ throw new Error("Argument to polyad must be a positive number");
1295
+ for (var r = b(t).toHsl(), n = [b(t)], a = 360 / e, i = 1; i < e; i++)
1296
+ n.push(b({
1297
+ h: (r.h + i * a) % 360,
1298
+ s: r.s,
1299
+ l: r.l
1300
+ }));
1301
+ return n;
1302
+ }
1303
+ function cn(t) {
1304
+ var e = b(t).toHsl(), r = e.h;
1305
+ return [b(t), b({
1306
+ h: (r + 72) % 360,
1307
+ s: e.s,
1308
+ l: e.l
1309
+ }), b({
1310
+ h: (r + 216) % 360,
1311
+ s: e.s,
1312
+ l: e.l
1313
+ })];
1314
+ }
1315
+ function ln(t, e, r) {
1316
+ e = e || 6, r = r || 30;
1317
+ var n = b(t).toHsl(), a = 360 / r, i = [b(t)];
1318
+ for (n.h = (n.h - (a * e >> 1) + 720) % 360; --e; )
1319
+ n.h = (n.h + a) % 360, i.push(b(n));
1320
+ return i;
1321
+ }
1322
+ function hn(t, e) {
1323
+ e = e || 6;
1324
+ for (var r = b(t).toHsv(), n = r.h, a = r.s, i = r.v, f = [], s = 1 / e; e--; )
1325
+ f.push(b({
1326
+ h: n,
1327
+ s: a,
1328
+ v: i
1329
+ })), i = (i + s) % 1;
1330
+ return f;
1331
+ }
1332
+ b.mix = function(t, e, r) {
1333
+ r = r === 0 ? 0 : r || 50;
1334
+ var n = b(t).toRgb(), a = b(e).toRgb(), i = r / 100, f = {
1335
+ r: (a.r - n.r) * i + n.r,
1336
+ g: (a.g - n.g) * i + n.g,
1337
+ b: (a.b - n.b) * i + n.b,
1338
+ a: (a.a - n.a) * i + n.a
1339
+ };
1340
+ return b(f);
1341
+ };
1342
+ b.readability = function(t, e) {
1343
+ var r = b(t), n = b(e);
1344
+ return (Math.max(r.getLuminance(), n.getLuminance()) + 0.05) / (Math.min(r.getLuminance(), n.getLuminance()) + 0.05);
1345
+ };
1346
+ b.isReadable = function(t, e, r) {
1347
+ var n = b.readability(t, e), a, i;
1348
+ switch (i = !1, a = bn(r), a.level + a.size) {
1349
+ case "AAsmall":
1350
+ case "AAAlarge":
1351
+ i = n >= 4.5;
1352
+ break;
1353
+ case "AAlarge":
1354
+ i = n >= 3;
1355
+ break;
1356
+ case "AAAsmall":
1357
+ i = n >= 7;
1358
+ break;
1359
+ }
1360
+ return i;
1361
+ };
1362
+ b.mostReadable = function(t, e, r) {
1363
+ var n = null, a = 0, i, f, s, o;
1364
+ r = r || {}, f = r.includeFallbackColors, s = r.level, o = r.size;
1365
+ for (var h = 0; h < e.length; h++)
1366
+ i = b.readability(t, e[h]), i > a && (a = i, n = b(e[h]));
1367
+ return b.isReadable(t, n, {
1368
+ level: s,
1369
+ size: o
1370
+ }) || !f ? n : (r.includeFallbackColors = !1, b.mostReadable(t, ["#fff", "#000"], r));
1371
+ };
1372
+ var qt = b.names = {
1373
+ aliceblue: "f0f8ff",
1374
+ antiquewhite: "faebd7",
1375
+ aqua: "0ff",
1376
+ aquamarine: "7fffd4",
1377
+ azure: "f0ffff",
1378
+ beige: "f5f5dc",
1379
+ bisque: "ffe4c4",
1380
+ black: "000",
1381
+ blanchedalmond: "ffebcd",
1382
+ blue: "00f",
1383
+ blueviolet: "8a2be2",
1384
+ brown: "a52a2a",
1385
+ burlywood: "deb887",
1386
+ burntsienna: "ea7e5d",
1387
+ cadetblue: "5f9ea0",
1388
+ chartreuse: "7fff00",
1389
+ chocolate: "d2691e",
1390
+ coral: "ff7f50",
1391
+ cornflowerblue: "6495ed",
1392
+ cornsilk: "fff8dc",
1393
+ crimson: "dc143c",
1394
+ cyan: "0ff",
1395
+ darkblue: "00008b",
1396
+ darkcyan: "008b8b",
1397
+ darkgoldenrod: "b8860b",
1398
+ darkgray: "a9a9a9",
1399
+ darkgreen: "006400",
1400
+ darkgrey: "a9a9a9",
1401
+ darkkhaki: "bdb76b",
1402
+ darkmagenta: "8b008b",
1403
+ darkolivegreen: "556b2f",
1404
+ darkorange: "ff8c00",
1405
+ darkorchid: "9932cc",
1406
+ darkred: "8b0000",
1407
+ darksalmon: "e9967a",
1408
+ darkseagreen: "8fbc8f",
1409
+ darkslateblue: "483d8b",
1410
+ darkslategray: "2f4f4f",
1411
+ darkslategrey: "2f4f4f",
1412
+ darkturquoise: "00ced1",
1413
+ darkviolet: "9400d3",
1414
+ deeppink: "ff1493",
1415
+ deepskyblue: "00bfff",
1416
+ dimgray: "696969",
1417
+ dimgrey: "696969",
1418
+ dodgerblue: "1e90ff",
1419
+ firebrick: "b22222",
1420
+ floralwhite: "fffaf0",
1421
+ forestgreen: "228b22",
1422
+ fuchsia: "f0f",
1423
+ gainsboro: "dcdcdc",
1424
+ ghostwhite: "f8f8ff",
1425
+ gold: "ffd700",
1426
+ goldenrod: "daa520",
1427
+ gray: "808080",
1428
+ green: "008000",
1429
+ greenyellow: "adff2f",
1430
+ grey: "808080",
1431
+ honeydew: "f0fff0",
1432
+ hotpink: "ff69b4",
1433
+ indianred: "cd5c5c",
1434
+ indigo: "4b0082",
1435
+ ivory: "fffff0",
1436
+ khaki: "f0e68c",
1437
+ lavender: "e6e6fa",
1438
+ lavenderblush: "fff0f5",
1439
+ lawngreen: "7cfc00",
1440
+ lemonchiffon: "fffacd",
1441
+ lightblue: "add8e6",
1442
+ lightcoral: "f08080",
1443
+ lightcyan: "e0ffff",
1444
+ lightgoldenrodyellow: "fafad2",
1445
+ lightgray: "d3d3d3",
1446
+ lightgreen: "90ee90",
1447
+ lightgrey: "d3d3d3",
1448
+ lightpink: "ffb6c1",
1449
+ lightsalmon: "ffa07a",
1450
+ lightseagreen: "20b2aa",
1451
+ lightskyblue: "87cefa",
1452
+ lightslategray: "789",
1453
+ lightslategrey: "789",
1454
+ lightsteelblue: "b0c4de",
1455
+ lightyellow: "ffffe0",
1456
+ lime: "0f0",
1457
+ limegreen: "32cd32",
1458
+ linen: "faf0e6",
1459
+ magenta: "f0f",
1460
+ maroon: "800000",
1461
+ mediumaquamarine: "66cdaa",
1462
+ mediumblue: "0000cd",
1463
+ mediumorchid: "ba55d3",
1464
+ mediumpurple: "9370db",
1465
+ mediumseagreen: "3cb371",
1466
+ mediumslateblue: "7b68ee",
1467
+ mediumspringgreen: "00fa9a",
1468
+ mediumturquoise: "48d1cc",
1469
+ mediumvioletred: "c71585",
1470
+ midnightblue: "191970",
1471
+ mintcream: "f5fffa",
1472
+ mistyrose: "ffe4e1",
1473
+ moccasin: "ffe4b5",
1474
+ navajowhite: "ffdead",
1475
+ navy: "000080",
1476
+ oldlace: "fdf5e6",
1477
+ olive: "808000",
1478
+ olivedrab: "6b8e23",
1479
+ orange: "ffa500",
1480
+ orangered: "ff4500",
1481
+ orchid: "da70d6",
1482
+ palegoldenrod: "eee8aa",
1483
+ palegreen: "98fb98",
1484
+ paleturquoise: "afeeee",
1485
+ palevioletred: "db7093",
1486
+ papayawhip: "ffefd5",
1487
+ peachpuff: "ffdab9",
1488
+ peru: "cd853f",
1489
+ pink: "ffc0cb",
1490
+ plum: "dda0dd",
1491
+ powderblue: "b0e0e6",
1492
+ purple: "800080",
1493
+ rebeccapurple: "663399",
1494
+ red: "f00",
1495
+ rosybrown: "bc8f8f",
1496
+ royalblue: "4169e1",
1497
+ saddlebrown: "8b4513",
1498
+ salmon: "fa8072",
1499
+ sandybrown: "f4a460",
1500
+ seagreen: "2e8b57",
1501
+ seashell: "fff5ee",
1502
+ sienna: "a0522d",
1503
+ silver: "c0c0c0",
1504
+ skyblue: "87ceeb",
1505
+ slateblue: "6a5acd",
1506
+ slategray: "708090",
1507
+ slategrey: "708090",
1508
+ snow: "fffafa",
1509
+ springgreen: "00ff7f",
1510
+ steelblue: "4682b4",
1511
+ tan: "d2b48c",
1512
+ teal: "008080",
1513
+ thistle: "d8bfd8",
1514
+ tomato: "ff6347",
1515
+ turquoise: "40e0d0",
1516
+ violet: "ee82ee",
1517
+ wheat: "f5deb3",
1518
+ white: "fff",
1519
+ whitesmoke: "f5f5f5",
1520
+ yellow: "ff0",
1521
+ yellowgreen: "9acd32"
1522
+ }, pn = b.hexNames = dn(qt);
1523
+ function dn(t) {
1524
+ var e = {};
1525
+ for (var r in t)
1526
+ t.hasOwnProperty(r) && (e[t[r]] = r);
1527
+ return e;
1528
+ }
1529
+ function Ee(t) {
1530
+ return t = parseFloat(t), (isNaN(t) || t < 0 || t > 1) && (t = 1), t;
1531
+ }
1532
+ function R(t, e) {
1533
+ vn(t) && (t = "100%");
1534
+ var r = gn(t);
1535
+ return t = Math.min(e, Math.max(0, parseFloat(t))), r && (t = parseInt(t * e, 10) / 100), Math.abs(t - e) < 1e-6 ? 1 : t % e / parseFloat(e);
1536
+ }
1537
+ function Nt(t) {
1538
+ return Math.min(1, Math.max(0, t));
1539
+ }
1540
+ function j(t) {
1541
+ return parseInt(t, 16);
1542
+ }
1543
+ function vn(t) {
1544
+ return typeof t == "string" && t.indexOf(".") != -1 && parseFloat(t) === 1;
1545
+ }
1546
+ function gn(t) {
1547
+ return typeof t == "string" && t.indexOf("%") != -1;
1548
+ }
1549
+ function V(t) {
1550
+ return t.length == 1 ? "0" + t : "" + t;
1551
+ }
1552
+ function _t(t) {
1553
+ return t <= 1 && (t = t * 100 + "%"), t;
1554
+ }
1555
+ function Pe(t) {
1556
+ return Math.round(parseFloat(t) * 255).toString(16);
1557
+ }
1558
+ function we(t) {
1559
+ return j(t) / 255;
1560
+ }
1561
+ var q = function() {
1562
+ var t = "[-\\+]?\\d+%?", e = "[-\\+]?\\d*\\.\\d+%?", r = "(?:" + e + ")|(?:" + t + ")", n = "[\\s|\\(]+(" + r + ")[,|\\s]+(" + r + ")[,|\\s]+(" + r + ")\\s*\\)?", a = "[\\s|\\(]+(" + r + ")[,|\\s]+(" + r + ")[,|\\s]+(" + r + ")[,|\\s]+(" + r + ")\\s*\\)?";
1563
+ return {
1564
+ CSS_UNIT: new RegExp(r),
1565
+ rgb: new RegExp("rgb" + n),
1566
+ rgba: new RegExp("rgba" + a),
1567
+ hsl: new RegExp("hsl" + n),
1568
+ hsla: new RegExp("hsla" + a),
1569
+ hsv: new RegExp("hsv" + n),
1570
+ hsva: new RegExp("hsva" + a),
1571
+ hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
1572
+ hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
1573
+ hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
1574
+ hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
1575
+ };
1576
+ }();
1577
+ function et(t) {
1578
+ return !!q.CSS_UNIT.exec(t);
1579
+ }
1580
+ function mn(t) {
1581
+ t = t.replace(Zr, "").replace(Xr, "").toLowerCase();
1582
+ var e = !1;
1583
+ if (qt[t])
1584
+ t = qt[t], e = !0;
1585
+ else if (t == "transparent")
1586
+ return {
1587
+ r: 0,
1588
+ g: 0,
1589
+ b: 0,
1590
+ a: 0,
1591
+ format: "name"
1592
+ };
1593
+ var r;
1594
+ return (r = q.rgb.exec(t)) ? {
1595
+ r: r[1],
1596
+ g: r[2],
1597
+ b: r[3]
1598
+ } : (r = q.rgba.exec(t)) ? {
1599
+ r: r[1],
1600
+ g: r[2],
1601
+ b: r[3],
1602
+ a: r[4]
1603
+ } : (r = q.hsl.exec(t)) ? {
1604
+ h: r[1],
1605
+ s: r[2],
1606
+ l: r[3]
1607
+ } : (r = q.hsla.exec(t)) ? {
1608
+ h: r[1],
1609
+ s: r[2],
1610
+ l: r[3],
1611
+ a: r[4]
1612
+ } : (r = q.hsv.exec(t)) ? {
1613
+ h: r[1],
1614
+ s: r[2],
1615
+ v: r[3]
1616
+ } : (r = q.hsva.exec(t)) ? {
1617
+ h: r[1],
1618
+ s: r[2],
1619
+ v: r[3],
1620
+ a: r[4]
1621
+ } : (r = q.hex8.exec(t)) ? {
1622
+ r: j(r[1]),
1623
+ g: j(r[2]),
1624
+ b: j(r[3]),
1625
+ a: we(r[4]),
1626
+ format: e ? "name" : "hex8"
1627
+ } : (r = q.hex6.exec(t)) ? {
1628
+ r: j(r[1]),
1629
+ g: j(r[2]),
1630
+ b: j(r[3]),
1631
+ format: e ? "name" : "hex"
1632
+ } : (r = q.hex4.exec(t)) ? {
1633
+ r: j(r[1] + "" + r[1]),
1634
+ g: j(r[2] + "" + r[2]),
1635
+ b: j(r[3] + "" + r[3]),
1636
+ a: we(r[4] + "" + r[4]),
1637
+ format: e ? "name" : "hex8"
1638
+ } : (r = q.hex3.exec(t)) ? {
1639
+ r: j(r[1] + "" + r[1]),
1640
+ g: j(r[2] + "" + r[2]),
1641
+ b: j(r[3] + "" + r[3]),
1642
+ format: e ? "name" : "hex"
1643
+ } : !1;
1644
+ }
1645
+ function bn(t) {
1646
+ var e, r;
1647
+ return t = t || {
1648
+ level: "AA",
1649
+ size: "small"
1650
+ }, e = (t.level || "AA").toUpperCase(), r = (t.size || "small").toLowerCase(), e !== "AA" && e !== "AAA" && (e = "AA"), r !== "small" && r !== "large" && (r = "small"), {
1651
+ level: e,
1652
+ size: r
1653
+ };
1654
+ }
1655
+ var Lt = { exports: {} }, yn = Lt.exports, Me;
1656
+ function xn() {
1657
+ return Me || (Me = 1, function(t, e) {
1658
+ (function(r, n) {
1659
+ t.exports = n();
1660
+ })(yn, function() {
1661
+ var r = { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" }, n = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g, a = /\d/, i = /\d\d/, f = /\d\d?/, s = /\d*[^-_:/,()\s\d]+/, o = {}, h = function(c) {
1662
+ return (c = +c) + (c > 68 ? 1900 : 2e3);
1663
+ }, u = function(c) {
1664
+ return function(p) {
1665
+ this[c] = +p;
1666
+ };
1667
+ }, M = [/[+-]\d\d:?(\d\d)?|Z/, function(c) {
1668
+ (this.zone || (this.zone = {})).offset = function(p) {
1669
+ if (!p || p === "Z") return 0;
1670
+ var v = p.match(/([+-]|\d\d)/g), d = 60 * v[1] + (+v[2] || 0);
1671
+ return d === 0 ? 0 : v[0] === "+" ? -d : d;
1672
+ }(c);
1673
+ }], y = function(c) {
1674
+ var p = o[c];
1675
+ return p && (p.indexOf ? p : p.s.concat(p.f));
1676
+ }, g = function(c, p) {
1677
+ var v, d = o.meridiem;
1678
+ if (d) {
1679
+ for (var m = 1; m <= 24; m += 1) if (c.indexOf(d(m, 0, p)) > -1) {
1680
+ v = m > 12;
1681
+ break;
1682
+ }
1683
+ } else v = c === (p ? "pm" : "PM");
1684
+ return v;
1685
+ }, w = { A: [s, function(c) {
1686
+ this.afternoon = g(c, !1);
1687
+ }], a: [s, function(c) {
1688
+ this.afternoon = g(c, !0);
1689
+ }], Q: [a, function(c) {
1690
+ this.month = 3 * (c - 1) + 1;
1691
+ }], S: [a, function(c) {
1692
+ this.milliseconds = 100 * +c;
1693
+ }], SS: [i, function(c) {
1694
+ this.milliseconds = 10 * +c;
1695
+ }], SSS: [/\d{3}/, function(c) {
1696
+ this.milliseconds = +c;
1697
+ }], s: [f, u("seconds")], ss: [f, u("seconds")], m: [f, u("minutes")], mm: [f, u("minutes")], H: [f, u("hours")], h: [f, u("hours")], HH: [f, u("hours")], hh: [f, u("hours")], D: [f, u("day")], DD: [i, u("day")], Do: [s, function(c) {
1698
+ var p = o.ordinal, v = c.match(/\d+/);
1699
+ if (this.day = v[0], p) for (var d = 1; d <= 31; d += 1) p(d).replace(/\[|\]/g, "") === c && (this.day = d);
1700
+ }], w: [f, u("week")], ww: [i, u("week")], M: [f, u("month")], MM: [i, u("month")], MMM: [s, function(c) {
1701
+ var p = y("months"), v = (y("monthsShort") || p.map(function(d) {
1702
+ return d.slice(0, 3);
1703
+ })).indexOf(c) + 1;
1704
+ if (v < 1) throw new Error();
1705
+ this.month = v % 12 || v;
1706
+ }], MMMM: [s, function(c) {
1707
+ var p = y("months").indexOf(c) + 1;
1708
+ if (p < 1) throw new Error();
1709
+ this.month = p % 12 || p;
1710
+ }], Y: [/[+-]?\d+/, u("year")], YY: [i, function(c) {
1711
+ this.year = h(c);
1712
+ }], YYYY: [/\d{4}/, u("year")], Z: M, ZZ: M };
1713
+ function l(c) {
1714
+ var p, v;
1715
+ p = c, v = o && o.formats;
1716
+ for (var d = (c = p.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, function($, D, T) {
1717
+ var k = T && T.toUpperCase();
1718
+ return D || v[T] || r[T] || v[k].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, function(H, E, C) {
1719
+ return E || C.slice(1);
1720
+ });
1721
+ })).match(n), m = d.length, x = 0; x < m; x += 1) {
1722
+ var O = d[x], A = w[O], S = A && A[0], _ = A && A[1];
1723
+ d[x] = _ ? { regex: S, parser: _ } : O.replace(/^\[|\]$/g, "");
1724
+ }
1725
+ return function($) {
1726
+ for (var D = {}, T = 0, k = 0; T < m; T += 1) {
1727
+ var H = d[T];
1728
+ if (typeof H == "string") k += H.length;
1729
+ else {
1730
+ var E = H.regex, C = H.parser, P = $.slice(k), W = E.exec(P)[0];
1731
+ C.call(D, W), $ = $.replace(W, "");
1732
+ }
1733
+ }
1734
+ return function(F) {
1735
+ var Q = F.afternoon;
1736
+ if (Q !== void 0) {
1737
+ var L = F.hours;
1738
+ Q ? L < 12 && (F.hours += 12) : L === 12 && (F.hours = 0), delete F.afternoon;
1739
+ }
1740
+ }(D), D;
1741
+ };
1742
+ }
1743
+ return function(c, p, v) {
1744
+ v.p.customParseFormat = !0, c && c.parseTwoDigitYear && (h = c.parseTwoDigitYear);
1745
+ var d = p.prototype, m = d.parse;
1746
+ d.parse = function(x) {
1747
+ var O = x.date, A = x.utc, S = x.args;
1748
+ this.$u = A;
1749
+ var _ = S[1];
1750
+ if (typeof _ == "string") {
1751
+ var $ = S[2] === !0, D = S[3] === !0, T = $ || D, k = S[2];
1752
+ D && (k = S[2]), o = this.$locale(), !$ && k && (o = v.Ls[k]), this.$d = function(P, W, F, Q) {
1753
+ try {
1754
+ if (["x", "X"].indexOf(W) > -1) return new Date((W === "X" ? 1e3 : 1) * P);
1755
+ var L = l(W)(P), J = L.year, K = L.month, nt = L.day, Z = L.hours, ot = L.minutes, ct = L.seconds, tt = L.milliseconds, lt = L.zone, Ct = L.week, st = /* @__PURE__ */ new Date(), wt = nt || (J || K ? 1 : st.getDate()), ht = J || st.getFullYear(), pt = 0;
1756
+ J && !K || (pt = K > 0 ? K - 1 : st.getMonth());
1757
+ var dt, vt = Z || 0, gt = ot || 0, Mt = ct || 0, Ot = tt || 0;
1758
+ return lt ? new Date(Date.UTC(ht, pt, wt, vt, gt, Mt, Ot + 60 * lt.offset * 1e3)) : F ? new Date(Date.UTC(ht, pt, wt, vt, gt, Mt, Ot)) : (dt = new Date(ht, pt, wt, vt, gt, Mt, Ot), Ct && (dt = Q(dt).week(Ct).toDate()), dt);
1759
+ } catch {
1760
+ return /* @__PURE__ */ new Date("");
1761
+ }
1762
+ }(O, _, A, v), this.init(), k && k !== !0 && (this.$L = this.locale(k).$L), T && O != this.format(_) && (this.$d = /* @__PURE__ */ new Date("")), o = {};
1763
+ } else if (_ instanceof Array) for (var H = _.length, E = 1; E <= H; E += 1) {
1764
+ S[1] = _[E - 1];
1765
+ var C = v.apply(this, S);
1766
+ if (C.isValid()) {
1767
+ this.$d = C.$d, this.$L = C.$L, this.init();
1768
+ break;
1769
+ }
1770
+ E === H && (this.$d = /* @__PURE__ */ new Date(""));
1771
+ }
1772
+ else m.call(this, x);
1773
+ };
1774
+ };
1775
+ });
1776
+ }(Lt)), Lt.exports;
1777
+ }
1778
+ var wn = xn();
1779
+ const Tn = /* @__PURE__ */ Vt(wn);
1780
+ var Ft = { exports: {} }, Mn = Ft.exports, Oe;
1781
+ function On() {
1782
+ return Oe || (Oe = 1, function(t, e) {
1783
+ (function(r, n) {
1784
+ t.exports = n();
1785
+ })(Mn, function() {
1786
+ var r = { year: 0, month: 1, day: 2, hour: 3, minute: 4, second: 5 }, n = {};
1787
+ return function(a, i, f) {
1788
+ var s, o = function(y, g, w) {
1789
+ w === void 0 && (w = {});
1790
+ var l = new Date(y), c = function(p, v) {
1791
+ v === void 0 && (v = {});
1792
+ var d = v.timeZoneName || "short", m = p + "|" + d, x = n[m];
1793
+ return x || (x = new Intl.DateTimeFormat("en-US", { hour12: !1, timeZone: p, year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit", timeZoneName: d }), n[m] = x), x;
1794
+ }(g, w);
1795
+ return c.formatToParts(l);
1796
+ }, h = function(y, g) {
1797
+ for (var w = o(y, g), l = [], c = 0; c < w.length; c += 1) {
1798
+ var p = w[c], v = p.type, d = p.value, m = r[v];
1799
+ m >= 0 && (l[m] = parseInt(d, 10));
1800
+ }
1801
+ var x = l[3], O = x === 24 ? 0 : x, A = l[0] + "-" + l[1] + "-" + l[2] + " " + O + ":" + l[4] + ":" + l[5] + ":000", S = +y;
1802
+ return (f.utc(A).valueOf() - (S -= S % 1e3)) / 6e4;
1803
+ }, u = i.prototype;
1804
+ u.tz = function(y, g) {
1805
+ y === void 0 && (y = s);
1806
+ var w, l = this.utcOffset(), c = this.toDate(), p = c.toLocaleString("en-US", { timeZone: y }), v = Math.round((c - new Date(p)) / 1e3 / 60), d = 15 * -Math.round(c.getTimezoneOffset() / 15) - v;
1807
+ if (!Number(d)) w = this.utcOffset(0, g);
1808
+ else if (w = f(p, { locale: this.$L }).$set("millisecond", this.$ms).utcOffset(d, !0), g) {
1809
+ var m = w.utcOffset();
1810
+ w = w.add(l - m, "minute");
1811
+ }
1812
+ return w.$x.$timezone = y, w;
1813
+ }, u.offsetName = function(y) {
1814
+ var g = this.$x.$timezone || f.tz.guess(), w = o(this.valueOf(), g, { timeZoneName: y }).find(function(l) {
1815
+ return l.type.toLowerCase() === "timezonename";
1816
+ });
1817
+ return w && w.value;
1818
+ };
1819
+ var M = u.startOf;
1820
+ u.startOf = function(y, g) {
1821
+ if (!this.$x || !this.$x.$timezone) return M.call(this, y, g);
1822
+ var w = f(this.format("YYYY-MM-DD HH:mm:ss:SSS"), { locale: this.$L });
1823
+ return M.call(w, y, g).tz(this.$x.$timezone, !0);
1824
+ }, f.tz = function(y, g, w) {
1825
+ var l = w && g, c = w || g || s, p = h(+f(), c);
1826
+ if (typeof y != "string") return f(y).tz(c);
1827
+ var v = function(O, A, S) {
1828
+ var _ = O - 60 * A * 1e3, $ = h(_, S);
1829
+ if (A === $) return [_, A];
1830
+ var D = h(_ -= 60 * ($ - A) * 1e3, S);
1831
+ return $ === D ? [_, $] : [O - 60 * Math.min($, D) * 1e3, Math.max($, D)];
1832
+ }(f.utc(y, l).valueOf(), p, c), d = v[0], m = v[1], x = f(d).utcOffset(m);
1833
+ return x.$x.$timezone = c, x;
1834
+ }, f.tz.guess = function() {
1835
+ return Intl.DateTimeFormat().resolvedOptions().timeZone;
1836
+ }, f.tz.setDefault = function(y) {
1837
+ s = y;
1838
+ };
1839
+ };
1840
+ });
1841
+ }(Ft)), Ft.exports;
1842
+ }
1843
+ var An = On();
1844
+ const Cn = /* @__PURE__ */ Vt(An);
1845
+ var Yt = { exports: {} }, _n = Yt.exports, Ae;
1846
+ function Sn() {
1847
+ return Ae || (Ae = 1, function(t, e) {
1848
+ (function(r, n) {
1849
+ t.exports = n();
1850
+ })(_n, function() {
1851
+ var r = "minute", n = /[+-]\d\d(?::?\d\d)?/g, a = /([+-]|\d\d)/g;
1852
+ return function(i, f, s) {
1853
+ var o = f.prototype;
1854
+ s.utc = function(l) {
1855
+ var c = { date: l, utc: !0, args: arguments };
1856
+ return new f(c);
1857
+ }, o.utc = function(l) {
1858
+ var c = s(this.toDate(), { locale: this.$L, utc: !0 });
1859
+ return l ? c.add(this.utcOffset(), r) : c;
1860
+ }, o.local = function() {
1861
+ return s(this.toDate(), { locale: this.$L, utc: !1 });
1862
+ };
1863
+ var h = o.parse;
1864
+ o.parse = function(l) {
1865
+ l.utc && (this.$u = !0), this.$utils().u(l.$offset) || (this.$offset = l.$offset), h.call(this, l);
1866
+ };
1867
+ var u = o.init;
1868
+ o.init = function() {
1869
+ if (this.$u) {
1870
+ var l = this.$d;
1871
+ this.$y = l.getUTCFullYear(), this.$M = l.getUTCMonth(), this.$D = l.getUTCDate(), this.$W = l.getUTCDay(), this.$H = l.getUTCHours(), this.$m = l.getUTCMinutes(), this.$s = l.getUTCSeconds(), this.$ms = l.getUTCMilliseconds();
1872
+ } else u.call(this);
1873
+ };
1874
+ var M = o.utcOffset;
1875
+ o.utcOffset = function(l, c) {
1876
+ var p = this.$utils().u;
1877
+ if (p(l)) return this.$u ? 0 : p(this.$offset) ? M.call(this) : this.$offset;
1878
+ if (typeof l == "string" && (l = function(x) {
1879
+ x === void 0 && (x = "");
1880
+ var O = x.match(n);
1881
+ if (!O) return null;
1882
+ var A = ("" + O[0]).match(a) || ["-", 0, 0], S = A[0], _ = 60 * +A[1] + +A[2];
1883
+ return _ === 0 ? 0 : S === "+" ? _ : -_;
1884
+ }(l), l === null)) return this;
1885
+ var v = Math.abs(l) <= 16 ? 60 * l : l, d = this;
1886
+ if (c) return d.$offset = v, d.$u = l === 0, d;
1887
+ if (l !== 0) {
1888
+ var m = this.$u ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset();
1889
+ (d = this.local().add(v + m, r)).$offset = v, d.$x.$localOffset = m;
1890
+ } else d = this.utc();
1891
+ return d;
1892
+ };
1893
+ var y = o.format;
1894
+ o.format = function(l) {
1895
+ var c = l || (this.$u ? "YYYY-MM-DDTHH:mm:ss[Z]" : "");
1896
+ return y.call(this, c);
1897
+ }, o.valueOf = function() {
1898
+ var l = this.$utils().u(this.$offset) ? 0 : this.$offset + (this.$x.$localOffset || this.$d.getTimezoneOffset());
1899
+ return this.$d.valueOf() - 6e4 * l;
1900
+ }, o.isUTC = function() {
1901
+ return !!this.$u;
1902
+ }, o.toISOString = function() {
1903
+ return this.toDate().toISOString();
1904
+ }, o.toString = function() {
1905
+ return this.toDate().toUTCString();
1906
+ };
1907
+ var g = o.toDate;
1908
+ o.toDate = function(l) {
1909
+ return l === "s" && this.$offset ? s(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate() : g.call(this);
1910
+ };
1911
+ var w = o.diff;
1912
+ o.diff = function(l, c, p) {
1913
+ if (l && this.$u === l.$u) return w.call(this, l, c, p);
1914
+ var v = this.local(), d = s(l).local();
1915
+ return w.call(v, d, c, p);
1916
+ };
1917
+ };
1918
+ });
1919
+ }(Yt)), Yt.exports;
1920
+ }
1921
+ var $n = Sn();
1922
+ const Hn = /* @__PURE__ */ Vt($n);
1923
+ export {
1924
+ Rn as a,
1925
+ Cn as b,
1926
+ kn as c,
1927
+ Tn as d,
1928
+ b as t,
1929
+ Hn as u
1930
+ };
1931
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9yLVgzbVhKbDUxLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvLnBucG0vc2N1bGVAMS4zLjAvbm9kZV9tb2R1bGVzL3NjdWxlL2Rpc3QvaW5kZXgubWpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc0xheW91dFZpZXdwb3J0LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2NvbnRhaW5zLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNTY3JvbGxQYXJlbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QWx0QXhpcy5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZUJ5TmFtZS5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3Rpbnljb2xvcjJAMS42LjAvbm9kZV9tb2R1bGVzL3Rpbnljb2xvcjIvZXNtL3Rpbnljb2xvci5qcyIsIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9kYXlqc0AxLjExLjEzL25vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQuanMiLCIuLi9ub2RlX21vZHVsZXMvLnBucG0vZGF5anNAMS4xMS4xMy9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL3RpbWV6b25lLmpzIiwiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTMvbm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi91dGMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTlVNQkVSX0NIQVJfUkUgPSAvXFxkLztcbmNvbnN0IFNUUl9TUExJVFRFUlMgPSBbXCItXCIsIFwiX1wiLCBcIi9cIiwgXCIuXCJdO1xuZnVuY3Rpb24gaXNVcHBlcmNhc2UoY2hhciA9IFwiXCIpIHtcbiAgaWYgKE5VTUJFUl9DSEFSX1JFLnRlc3QoY2hhcikpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG4gIHJldHVybiBjaGFyICE9PSBjaGFyLnRvTG93ZXJDYXNlKCk7XG59XG5mdW5jdGlvbiBzcGxpdEJ5Q2FzZShzdHIsIHNlcGFyYXRvcnMpIHtcbiAgY29uc3Qgc3BsaXR0ZXJzID0gc2VwYXJhdG9ycyA/PyBTVFJfU1BMSVRURVJTO1xuICBjb25zdCBwYXJ0cyA9IFtdO1xuICBpZiAoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHBhcnRzO1xuICB9XG4gIGxldCBidWZmID0gXCJcIjtcbiAgbGV0IHByZXZpb3VzVXBwZXI7XG4gIGxldCBwcmV2aW91c1NwbGl0dGVyO1xuICBmb3IgKGNvbnN0IGNoYXIgb2Ygc3RyKSB7XG4gICAgY29uc3QgaXNTcGxpdHRlciA9IHNwbGl0dGVycy5pbmNsdWRlcyhjaGFyKTtcbiAgICBpZiAoaXNTcGxpdHRlciA9PT0gdHJ1ZSkge1xuICAgICAgcGFydHMucHVzaChidWZmKTtcbiAgICAgIGJ1ZmYgPSBcIlwiO1xuICAgICAgcHJldmlvdXNVcHBlciA9IHZvaWQgMDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBpc1VwcGVyID0gaXNVcHBlcmNhc2UoY2hhcik7XG4gICAgaWYgKHByZXZpb3VzU3BsaXR0ZXIgPT09IGZhbHNlKSB7XG4gICAgICBpZiAocHJldmlvdXNVcHBlciA9PT0gZmFsc2UgJiYgaXNVcHBlciA9PT0gdHJ1ZSkge1xuICAgICAgICBwYXJ0cy5wdXNoKGJ1ZmYpO1xuICAgICAgICBidWZmID0gY2hhcjtcbiAgICAgICAgcHJldmlvdXNVcHBlciA9IGlzVXBwZXI7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByZXZpb3VzVXBwZXIgPT09IHRydWUgJiYgaXNVcHBlciA9PT0gZmFsc2UgJiYgYnVmZi5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IGxhc3RDaGFyID0gYnVmZi5hdCgtMSk7XG4gICAgICAgIHBhcnRzLnB1c2goYnVmZi5zbGljZSgwLCBNYXRoLm1heCgwLCBidWZmLmxlbmd0aCAtIDEpKSk7XG4gICAgICAgIGJ1ZmYgPSBsYXN0Q2hhciArIGNoYXI7XG4gICAgICAgIHByZXZpb3VzVXBwZXIgPSBpc1VwcGVyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnVmZiArPSBjaGFyO1xuICAgIHByZXZpb3VzVXBwZXIgPSBpc1VwcGVyO1xuICAgIHByZXZpb3VzU3BsaXR0ZXIgPSBpc1NwbGl0dGVyO1xuICB9XG4gIHBhcnRzLnB1c2goYnVmZik7XG4gIHJldHVybiBwYXJ0cztcbn1cbmZ1bmN0aW9uIHVwcGVyRmlyc3Qoc3RyKSB7XG4gIHJldHVybiBzdHIgPyBzdHJbMF0udG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKSA6IFwiXCI7XG59XG5mdW5jdGlvbiBsb3dlckZpcnN0KHN0cikge1xuICByZXR1cm4gc3RyID8gc3RyWzBdLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSkgOiBcIlwiO1xufVxuZnVuY3Rpb24gcGFzY2FsQ2FzZShzdHIsIG9wdHMpIHtcbiAgcmV0dXJuIHN0ciA/IChBcnJheS5pc0FycmF5KHN0cikgPyBzdHIgOiBzcGxpdEJ5Q2FzZShzdHIpKS5tYXAoKHApID0+IHVwcGVyRmlyc3Qob3B0cz8ubm9ybWFsaXplID8gcC50b0xvd2VyQ2FzZSgpIDogcCkpLmpvaW4oXCJcIikgOiBcIlwiO1xufVxuZnVuY3Rpb24gY2FtZWxDYXNlKHN0ciwgb3B0cykge1xuICByZXR1cm4gbG93ZXJGaXJzdChwYXNjYWxDYXNlKHN0ciB8fCBcIlwiLCBvcHRzKSk7XG59XG5mdW5jdGlvbiBrZWJhYkNhc2Uoc3RyLCBqb2luZXIpIHtcbiAgcmV0dXJuIHN0ciA/IChBcnJheS5pc0FycmF5KHN0cikgPyBzdHIgOiBzcGxpdEJ5Q2FzZShzdHIpKS5tYXAoKHApID0+IHAudG9Mb3dlckNhc2UoKSkuam9pbihqb2luZXIgPz8gXCItXCIpIDogXCJcIjtcbn1cbmZ1bmN0aW9uIHNuYWtlQ2FzZShzdHIpIHtcbiAgcmV0dXJuIGtlYmFiQ2FzZShzdHIgfHwgXCJcIiwgXCJfXCIpO1xufVxuZnVuY3Rpb24gZmxhdENhc2Uoc3RyKSB7XG4gIHJldHVybiBrZWJhYkNhc2Uoc3RyIHx8IFwiXCIsIFwiXCIpO1xufVxuZnVuY3Rpb24gdHJhaW5DYXNlKHN0ciwgb3B0cykge1xuICByZXR1cm4gKEFycmF5LmlzQXJyYXkoc3RyKSA/IHN0ciA6IHNwbGl0QnlDYXNlKHN0cikpLmZpbHRlcihCb29sZWFuKS5tYXAoKHApID0+IHVwcGVyRmlyc3Qob3B0cz8ubm9ybWFsaXplID8gcC50b0xvd2VyQ2FzZSgpIDogcCkpLmpvaW4oXCItXCIpO1xufVxuY29uc3QgdGl0bGVDYXNlRXhjZXB0aW9ucyA9IC9eKGF8YW58YW5kfGFzfGF0fGJ1dHxieXxmb3J8aWZ8aW58aXN8bm9yfG9mfG9ufG9yfHRoZXx0b3x3aXRoKSQvaTtcbmZ1bmN0aW9uIHRpdGxlQ2FzZShzdHIsIG9wdHMpIHtcbiAgcmV0dXJuIChBcnJheS5pc0FycmF5KHN0cikgPyBzdHIgOiBzcGxpdEJ5Q2FzZShzdHIpKS5maWx0ZXIoQm9vbGVhbikubWFwKFxuICAgIChwKSA9PiB0aXRsZUNhc2VFeGNlcHRpb25zLnRlc3QocCkgPyBwLnRvTG93ZXJDYXNlKCkgOiB1cHBlckZpcnN0KG9wdHM/Lm5vcm1hbGl6ZSA/IHAudG9Mb3dlckNhc2UoKSA6IHApXG4gICkuam9pbihcIiBcIik7XG59XG5cbmV4cG9ydCB7IGNhbWVsQ2FzZSwgZmxhdENhc2UsIGlzVXBwZXJjYXNlLCBrZWJhYkNhc2UsIGxvd2VyRmlyc3QsIHBhc2NhbENhc2UsIHNuYWtlQ2FzZSwgc3BsaXRCeUNhc2UsIHRpdGxlQ2FzZSwgdHJhaW5DYXNlLCB1cHBlckZpcnN0IH07XG4iLCJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07IiwiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VUFTdHJpbmcoKSB7XG4gIHZhciB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcblxuICBpZiAodWFEYXRhICE9IG51bGwgJiYgdWFEYXRhLmJyYW5kcyAmJiBBcnJheS5pc0FycmF5KHVhRGF0YS5icmFuZHMpKSB7XG4gICAgcmV0dXJuIHVhRGF0YS5icmFuZHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5icmFuZCArIFwiL1wiICsgaXRlbS52ZXJzaW9uO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufSIsImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGluY2x1ZGVTY2FsZSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc2NhbGVYID0gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgPyByb3VuZChjbGllbnRSZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSA6IDE7XG4gICAgc2NhbGVZID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwID8gcm91bmQoY2xpZW50UmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMSA6IDE7XG4gIH1cblxuICB2YXIgX3JlZiA9IGlzRWxlbWVudChlbGVtZW50KSA/IGdldFdpbmRvdyhlbGVtZW50KSA6IHdpbmRvdyxcbiAgICAgIHZpc3VhbFZpZXdwb3J0ID0gX3JlZi52aXN1YWxWaWV3cG9ydDtcblxuICB2YXIgYWRkVmlzdWFsT2Zmc2V0cyA9ICFpc0xheW91dFZpZXdwb3J0KCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICB2YXIgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQgOiAwKSkgLyBzY2FsZVg7XG4gIHZhciB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3AgOiAwKSkgLyBzY2FsZVk7XG4gIHZhciB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZVg7XG4gIHZhciBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlWTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIGxlZnQ6IHgsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgaXNUYWJsZUVsZW1lbnQgZnJvbSBcIi4vaXNUYWJsZUVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IC9maXJlZm94L2kudGVzdChnZXRVQVN0cmluZygpKTtcbiAgdmFyIGlzSUUgPSAvVHJpZGVudC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICBpZiAoaXNTaGFkb3dSb290KGN1cnJlbnROb2RlKSkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUuaG9zdDtcbiAgfVxuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi4vZG9tLXV0aWxzL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHdpdGhpbiB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4uL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi4vdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzXCI7XG5pbXBvcnQgeyBsZWZ0LCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHRvcCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHRvUGFkZGluZ09iamVjdCA9IGZ1bmN0aW9uIHRvUGFkZGluZ09iamVjdChwYWRkaW5nLCBzdGF0ZSkge1xuICBwYWRkaW5nID0gdHlwZW9mIHBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBwYWRkaW5nKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogcGFkZGluZztcbiAgcmV0dXJuIG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG59O1xuXG5mdW5jdGlvbiBhcnJvdyhfcmVmKSB7XG4gIHZhciBfc3RhdGUkbW9kaWZpZXJzRGF0YSQ7XG5cbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBpc1ZlcnRpY2FsID0gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIGlmICghYXJyb3dFbGVtZW50IHx8ICFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhZGRpbmdPYmplY3QgPSB0b1BhZGRpbmdPYmplY3Qob3B0aW9ucy5wYWRkaW5nLCBzdGF0ZSk7XG4gIHZhciBhcnJvd1JlY3QgPSBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCk7XG4gIHZhciBtaW5Qcm9wID0gYXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgdmFyIG1heFByb3AgPSBheGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgdmFyIGVuZERpZmYgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbbGVuXSArIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5wb3BwZXJbbGVuXTtcbiAgdmFyIHN0YXJ0RGlmZiA9IHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gIHZhciBhcnJvd09mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChhcnJvd0VsZW1lbnQpO1xuICB2YXIgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0IHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRXaWR0aCB8fCAwIDogMDtcbiAgdmFyIGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyOyAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBvcHBlciBpZiB0aGUgY2VudGVyIHBvaW50IGlzXG4gIC8vIG91dHNpZGUgb2YgdGhlIHBvcHBlciBib3VuZHNcblxuICB2YXIgbWluID0gcGFkZGluZ09iamVjdFttaW5Qcm9wXTtcbiAgdmFyIG1heCA9IGNsaWVudFNpemUgLSBhcnJvd1JlY3RbbGVuXSAtIHBhZGRpbmdPYmplY3RbbWF4UHJvcF07XG4gIHZhciBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93UmVjdFtsZW5dIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICB2YXIgb2Zmc2V0ID0gd2l0aGluKG1pbiwgY2VudGVyLCBtYXgpOyAvLyBQcmV2ZW50cyBicmVha2luZyBzeW50YXggaGlnaGxpZ2h0aW5nLi4uXG5cbiAgdmFyIGF4aXNQcm9wID0gYXhpcztcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IChfc3RhdGUkbW9kaWZpZXJzRGF0YSQgPSB7fSwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkW2F4aXNQcm9wXSA9IG9mZnNldCwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkLmNlbnRlck9mZnNldCA9IG9mZnNldCAtIGNlbnRlciwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkKTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRlbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50LFxuICAgICAgYXJyb3dFbGVtZW50ID0gX29wdGlvbnMkZWxlbWVudCA9PT0gdm9pZCAwID8gJ1tkYXRhLXBvcHBlci1hcnJvd10nIDogX29wdGlvbnMkZWxlbWVudDtcblxuICBpZiAoYXJyb3dFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gQ1NTIHNlbGVjdG9yXG5cblxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRhaW5zKHN0YXRlLmVsZW1lbnRzLnBvcHBlciwgYXJyb3dFbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZiwgd2luKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0sIGdldFdpbmRvdyhwb3BwZXIpKSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjQueDtcbiAgeSA9IF9yZWY0Lnk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjUuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjUub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb24sXG4gICAgaXNGaXhlZDogc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIHZhciBsYXlvdXRWaWV3cG9ydCA9IGlzTGF5b3V0Vmlld3BvcnQoKTtcblxuICAgIGlmIChsYXlvdXRWaWV3cG9ydCB8fCAhbGF5b3V0Vmlld3BvcnQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByb3VuZChyZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJvdW5kKHJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIHJldHVybiBzY2FsZVggIT09IDEgfHwgc2NhbGVZICE9PSAxO1xufSAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcG9zaXRlUmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50LCBpc0ZpeGVkKSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cblxuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnRJc1NjYWxlZCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc0VsZW1lbnRTY2FsZWQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCwgb2Zmc2V0UGFyZW50SXNTY2FsZWQsIGlzRml4ZWQpO1xuICB2YXIgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIHZhciBvZmZzZXRzID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTA3OFxuICAgIGlzU2Nyb2xsUGFyZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG5cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBvZmZzZXRzID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSk7XG4gICAgICBvZmZzZXRzLnggKz0gb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgKz0gb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgb2Zmc2V0cy54ID0gZ2V0V2luZG93U2Nyb2xsQmFyWChkb2N1bWVudEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogcmVjdC5sZWZ0ICsgc2Nyb2xsLnNjcm9sbExlZnQgLSBvZmZzZXRzLngsXG4gICAgeTogcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55LFxuICAgIHdpZHRoOiByZWN0LndpZHRoLFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQnlOYW1lKG1vZGlmaWVycykge1xuICB2YXIgbWVyZ2VkID0gbW9kaWZpZXJzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkLCBjdXJyZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nID0gbWVyZ2VkW2N1cnJlbnQubmFtZV07XG4gICAgbWVyZ2VkW2N1cnJlbnQubmFtZV0gPSBleGlzdGluZyA/IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLCBjdXJyZW50LCB7XG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5vcHRpb25zLCBjdXJyZW50Lm9wdGlvbnMpLFxuICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcuZGF0YSwgY3VycmVudC5kYXRhKVxuICAgIH0pIDogY3VycmVudDtcbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9LCB7fSk7IC8vIElFMTEgZG9lcyBub3Qgc3VwcG9ydCBPYmplY3QudmFsdWVzXG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG1lcmdlZCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbWVyZ2VkW2tleV07XG4gIH0pO1xufSIsImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IG1lcmdlQnlOYW1lIGZyb20gXCIuL3V0aWxzL21lcmdlQnlOYW1lLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhzZXRPcHRpb25zQWN0aW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNldE9wdGlvbnNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBzZXRPcHRpb25zQWN0aW9uKHN0YXRlLm9wdGlvbnMpIDogc2V0T3B0aW9uc0FjdGlvbjtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBzdGF0ZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIHN0YXRlLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSkgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UpIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KSA6IFtdLFxuICAgICAgICAgIHBvcHBlcjogbGlzdFNjcm9sbFBhcmVudHMocG9wcGVyKVxuICAgICAgICB9OyAvLyBPcmRlcnMgdGhlIG1vZGlmaWVycyBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGBwaGFzZWBcbiAgICAgICAgLy8gcHJvcGVydGllc1xuXG4gICAgICAgIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJNb2RpZmllcnMobWVyZ2VCeU5hbWUoW10uY29uY2F0KGRlZmF1bHRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSkpOyAvLyBTdHJpcCBvdXQgZGlzYWJsZWQgbW9kaWZpZXJzXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uZW5hYmxlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUg4oCTIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuXG5cbiAgICAgICAgc3RhdGUucmVjdHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBnZXRDb21wb3NpdGVSZWN0KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCcpLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpXG4gICAgICAgIH07IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuXG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50OyAvLyBPbiBlYWNoIHVwZGF0ZSBjeWNsZSwgdGhlIGBtb2RpZmllcnNEYXRhYCBwcm9wZXJ0eSBmb3IgZWFjaCBtb2RpZmllclxuICAgICAgICAvLyBpcyBmaWxsZWQgd2l0aCB0aGUgaW5pdGlhbCBkYXRhIHNwZWNpZmllZCBieSB0aGUgbW9kaWZpZXIuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gaXQgZG9lc24ndCBwZXJzaXN0IGFuZCBpcyBmcmVzaCBvbiBlYWNoIHVwZGF0ZS5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHBlcnNpc3RlbnQgZGF0YSwgdXNlIGAke25hbWV9I3BlcnNpc3RlbnRgXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kaWZpZXIuZGF0YSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGlmIChzdGF0ZS5yZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3N0YXRlJG9yZGVyZWRNb2RpZmllID0gc3RhdGUub3JkZXJlZE1vZGlmaWVyc1tpbmRleF0sXG4gICAgICAgICAgICAgIGZuID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLmZuLFxuICAgICAgICAgICAgICBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm9wdGlvbnMsXG4gICAgICAgICAgICAgIF9vcHRpb25zID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9PT0gdm9pZCAwID8ge30gOiBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyLFxuICAgICAgICAgICAgICBuYW1lID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm5hbWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGZuKHtcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgICAgICB9KSB8fCBzdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBBc3luYyBhbmQgb3B0aW1pc3RpY2FsbHkgb3B0aW1pemVkIHVwZGF0ZSDigJMgaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWZcbiAgICAgIC8vIG5vdCBuZWNlc3NhcnkgKGRlYm91bmNlZCB0byBydW4gYXQgbW9zdCBvbmNlLXBlci10aWNrKVxuICAgICAgdXBkYXRlOiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgICAgICAgX3JlZiRvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyA9IF9yZWYkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmLmVmZmVjdDtcblxuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjbGVhbnVwRm4gPSBlZmZlY3Qoe1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBub29wRm4gPSBmdW5jdGlvbiBub29wRm4oKSB7fTtcblxuICAgICAgICAgIGVmZmVjdENsZWFudXBGbnMucHVzaChjbGVhbnVwRm4gfHwgbm9vcEZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5leHBvcnQgdmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdyB9OyIsImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwiLy8gVGhpcyBmaWxlIGlzIGF1dG9nZW5lcmF0ZWQuIEl0J3MgdXNlZCB0byBwdWJsaXNoIEVTTSB0byBucG0uXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgfSwgX3R5cGVvZihvYmopO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYmdyaW5zL1RpbnlDb2xvclxuLy8gQnJpYW4gR3JpbnN0ZWFkLCBNSVQgTGljZW5zZVxuXG52YXIgdHJpbUxlZnQgPSAvXlxccysvO1xudmFyIHRyaW1SaWdodCA9IC9cXHMrJC87XG5mdW5jdGlvbiB0aW55Y29sb3IoY29sb3IsIG9wdHMpIHtcbiAgY29sb3IgPSBjb2xvciA/IGNvbG9yIDogXCJcIjtcbiAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgLy8gSWYgaW5wdXQgaXMgYWxyZWFkeSBhIHRpbnljb2xvciwgcmV0dXJuIGl0c2VsZlxuICBpZiAoY29sb3IgaW5zdGFuY2VvZiB0aW55Y29sb3IpIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgLy8gSWYgd2UgYXJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBjYWxsIHVzaW5nIG5ldyBpbnN0ZWFkXG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiB0aW55Y29sb3IpKSB7XG4gICAgcmV0dXJuIG5ldyB0aW55Y29sb3IoY29sb3IsIG9wdHMpO1xuICB9XG4gIHZhciByZ2IgPSBpbnB1dFRvUkdCKGNvbG9yKTtcbiAgdGhpcy5fb3JpZ2luYWxJbnB1dCA9IGNvbG9yLCB0aGlzLl9yID0gcmdiLnIsIHRoaXMuX2cgPSByZ2IuZywgdGhpcy5fYiA9IHJnYi5iLCB0aGlzLl9hID0gcmdiLmEsIHRoaXMuX3JvdW5kQSA9IE1hdGgucm91bmQoMTAwICogdGhpcy5fYSkgLyAxMDAsIHRoaXMuX2Zvcm1hdCA9IG9wdHMuZm9ybWF0IHx8IHJnYi5mb3JtYXQ7XG4gIHRoaXMuX2dyYWRpZW50VHlwZSA9IG9wdHMuZ3JhZGllbnRUeXBlO1xuXG4gIC8vIERvbid0IGxldCB0aGUgcmFuZ2Ugb2YgWzAsMjU1XSBjb21lIGJhY2sgaW4gWzAsMV0uXG4gIC8vIFBvdGVudGlhbGx5IGxvc2UgYSBsaXR0bGUgYml0IG9mIHByZWNpc2lvbiBoZXJlLCBidXQgd2lsbCBmaXggaXNzdWVzIHdoZXJlXG4gIC8vIC41IGdldHMgaW50ZXJwcmV0ZWQgYXMgaGFsZiBvZiB0aGUgdG90YWwsIGluc3RlYWQgb2YgaGFsZiBvZiAxXG4gIC8vIElmIGl0IHdhcyBzdXBwb3NlZCB0byBiZSAxMjgsIHRoaXMgd2FzIGFscmVhZHkgdGFrZW4gY2FyZSBvZiBieSBgaW5wdXRUb1JnYmBcbiAgaWYgKHRoaXMuX3IgPCAxKSB0aGlzLl9yID0gTWF0aC5yb3VuZCh0aGlzLl9yKTtcbiAgaWYgKHRoaXMuX2cgPCAxKSB0aGlzLl9nID0gTWF0aC5yb3VuZCh0aGlzLl9nKTtcbiAgaWYgKHRoaXMuX2IgPCAxKSB0aGlzLl9iID0gTWF0aC5yb3VuZCh0aGlzLl9iKTtcbiAgdGhpcy5fb2sgPSByZ2Iub2s7XG59XG50aW55Y29sb3IucHJvdG90eXBlID0ge1xuICBpc0Rhcms6IGZ1bmN0aW9uIGlzRGFyaygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCcmlnaHRuZXNzKCkgPCAxMjg7XG4gIH0sXG4gIGlzTGlnaHQ6IGZ1bmN0aW9uIGlzTGlnaHQoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzRGFyaygpO1xuICB9LFxuICBpc1ZhbGlkOiBmdW5jdGlvbiBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0aGlzLl9vaztcbiAgfSxcbiAgZ2V0T3JpZ2luYWxJbnB1dDogZnVuY3Rpb24gZ2V0T3JpZ2luYWxJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb3JpZ2luYWxJbnB1dDtcbiAgfSxcbiAgZ2V0Rm9ybWF0OiBmdW5jdGlvbiBnZXRGb3JtYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgfSxcbiAgZ2V0QWxwaGE6IGZ1bmN0aW9uIGdldEFscGhhKCkge1xuICAgIHJldHVybiB0aGlzLl9hO1xuICB9LFxuICBnZXRCcmlnaHRuZXNzOiBmdW5jdGlvbiBnZXRCcmlnaHRuZXNzKCkge1xuICAgIC8vaHR0cDovL3d3dy53My5vcmcvVFIvQUVSVCNjb2xvci1jb250cmFzdFxuICAgIHZhciByZ2IgPSB0aGlzLnRvUmdiKCk7XG4gICAgcmV0dXJuIChyZ2IuciAqIDI5OSArIHJnYi5nICogNTg3ICsgcmdiLmIgKiAxMTQpIC8gMTAwMDtcbiAgfSxcbiAgZ2V0THVtaW5hbmNlOiBmdW5jdGlvbiBnZXRMdW1pbmFuY2UoKSB7XG4gICAgLy9odHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICAgdmFyIHJnYiA9IHRoaXMudG9SZ2IoKTtcbiAgICB2YXIgUnNSR0IsIEdzUkdCLCBCc1JHQiwgUiwgRywgQjtcbiAgICBSc1JHQiA9IHJnYi5yIC8gMjU1O1xuICAgIEdzUkdCID0gcmdiLmcgLyAyNTU7XG4gICAgQnNSR0IgPSByZ2IuYiAvIDI1NTtcbiAgICBpZiAoUnNSR0IgPD0gMC4wMzkyOCkgUiA9IFJzUkdCIC8gMTIuOTI7ZWxzZSBSID0gTWF0aC5wb3coKFJzUkdCICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgaWYgKEdzUkdCIDw9IDAuMDM5MjgpIEcgPSBHc1JHQiAvIDEyLjkyO2Vsc2UgRyA9IE1hdGgucG93KChHc1JHQiArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIGlmIChCc1JHQiA8PSAwLjAzOTI4KSBCID0gQnNSR0IgLyAxMi45MjtlbHNlIEIgPSBNYXRoLnBvdygoQnNSR0IgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICByZXR1cm4gMC4yMTI2ICogUiArIDAuNzE1MiAqIEcgKyAwLjA3MjIgKiBCO1xuICB9LFxuICBzZXRBbHBoYTogZnVuY3Rpb24gc2V0QWxwaGEodmFsdWUpIHtcbiAgICB0aGlzLl9hID0gYm91bmRBbHBoYSh2YWx1ZSk7XG4gICAgdGhpcy5fcm91bmRBID0gTWF0aC5yb3VuZCgxMDAgKiB0aGlzLl9hKSAvIDEwMDtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgdG9Ic3Y6IGZ1bmN0aW9uIHRvSHN2KCkge1xuICAgIHZhciBoc3YgPSByZ2JUb0hzdih0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICByZXR1cm4ge1xuICAgICAgaDogaHN2LmggKiAzNjAsXG4gICAgICBzOiBoc3YucyxcbiAgICAgIHY6IGhzdi52LFxuICAgICAgYTogdGhpcy5fYVxuICAgIH07XG4gIH0sXG4gIHRvSHN2U3RyaW5nOiBmdW5jdGlvbiB0b0hzdlN0cmluZygpIHtcbiAgICB2YXIgaHN2ID0gcmdiVG9Ic3YodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYik7XG4gICAgdmFyIGggPSBNYXRoLnJvdW5kKGhzdi5oICogMzYwKSxcbiAgICAgIHMgPSBNYXRoLnJvdW5kKGhzdi5zICogMTAwKSxcbiAgICAgIHYgPSBNYXRoLnJvdW5kKGhzdi52ICogMTAwKTtcbiAgICByZXR1cm4gdGhpcy5fYSA9PSAxID8gXCJoc3YoXCIgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyB2ICsgXCIlKVwiIDogXCJoc3ZhKFwiICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgdiArIFwiJSwgXCIgKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgfSxcbiAgdG9Ic2w6IGZ1bmN0aW9uIHRvSHNsKCkge1xuICAgIHZhciBoc2wgPSByZ2JUb0hzbCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iKTtcbiAgICByZXR1cm4ge1xuICAgICAgaDogaHNsLmggKiAzNjAsXG4gICAgICBzOiBoc2wucyxcbiAgICAgIGw6IGhzbC5sLFxuICAgICAgYTogdGhpcy5fYVxuICAgIH07XG4gIH0sXG4gIHRvSHNsU3RyaW5nOiBmdW5jdGlvbiB0b0hzbFN0cmluZygpIHtcbiAgICB2YXIgaHNsID0gcmdiVG9Ic2wodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYik7XG4gICAgdmFyIGggPSBNYXRoLnJvdW5kKGhzbC5oICogMzYwKSxcbiAgICAgIHMgPSBNYXRoLnJvdW5kKGhzbC5zICogMTAwKSxcbiAgICAgIGwgPSBNYXRoLnJvdW5kKGhzbC5sICogMTAwKTtcbiAgICByZXR1cm4gdGhpcy5fYSA9PSAxID8gXCJoc2woXCIgKyBoICsgXCIsIFwiICsgcyArIFwiJSwgXCIgKyBsICsgXCIlKVwiIDogXCJoc2xhKFwiICsgaCArIFwiLCBcIiArIHMgKyBcIiUsIFwiICsgbCArIFwiJSwgXCIgKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgfSxcbiAgdG9IZXg6IGZ1bmN0aW9uIHRvSGV4KGFsbG93M0NoYXIpIHtcbiAgICByZXR1cm4gcmdiVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgYWxsb3czQ2hhcik7XG4gIH0sXG4gIHRvSGV4U3RyaW5nOiBmdW5jdGlvbiB0b0hleFN0cmluZyhhbGxvdzNDaGFyKSB7XG4gICAgcmV0dXJuIFwiI1wiICsgdGhpcy50b0hleChhbGxvdzNDaGFyKTtcbiAgfSxcbiAgdG9IZXg4OiBmdW5jdGlvbiB0b0hleDgoYWxsb3c0Q2hhcikge1xuICAgIHJldHVybiByZ2JhVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgdGhpcy5fYSwgYWxsb3c0Q2hhcik7XG4gIH0sXG4gIHRvSGV4OFN0cmluZzogZnVuY3Rpb24gdG9IZXg4U3RyaW5nKGFsbG93NENoYXIpIHtcbiAgICByZXR1cm4gXCIjXCIgKyB0aGlzLnRvSGV4OChhbGxvdzRDaGFyKTtcbiAgfSxcbiAgdG9SZ2I6IGZ1bmN0aW9uIHRvUmdiKCkge1xuICAgIHJldHVybiB7XG4gICAgICByOiBNYXRoLnJvdW5kKHRoaXMuX3IpLFxuICAgICAgZzogTWF0aC5yb3VuZCh0aGlzLl9nKSxcbiAgICAgIGI6IE1hdGgucm91bmQodGhpcy5fYiksXG4gICAgICBhOiB0aGlzLl9hXG4gICAgfTtcbiAgfSxcbiAgdG9SZ2JTdHJpbmc6IGZ1bmN0aW9uIHRvUmdiU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9hID09IDEgPyBcInJnYihcIiArIE1hdGgucm91bmQodGhpcy5fcikgKyBcIiwgXCIgKyBNYXRoLnJvdW5kKHRoaXMuX2cpICsgXCIsIFwiICsgTWF0aC5yb3VuZCh0aGlzLl9iKSArIFwiKVwiIDogXCJyZ2JhKFwiICsgTWF0aC5yb3VuZCh0aGlzLl9yKSArIFwiLCBcIiArIE1hdGgucm91bmQodGhpcy5fZykgKyBcIiwgXCIgKyBNYXRoLnJvdW5kKHRoaXMuX2IpICsgXCIsIFwiICsgdGhpcy5fcm91bmRBICsgXCIpXCI7XG4gIH0sXG4gIHRvUGVyY2VudGFnZVJnYjogZnVuY3Rpb24gdG9QZXJjZW50YWdlUmdiKCkge1xuICAgIHJldHVybiB7XG4gICAgICByOiBNYXRoLnJvdW5kKGJvdW5kMDEodGhpcy5fciwgMjU1KSAqIDEwMCkgKyBcIiVcIixcbiAgICAgIGc6IE1hdGgucm91bmQoYm91bmQwMSh0aGlzLl9nLCAyNTUpICogMTAwKSArIFwiJVwiLFxuICAgICAgYjogTWF0aC5yb3VuZChib3VuZDAxKHRoaXMuX2IsIDI1NSkgKiAxMDApICsgXCIlXCIsXG4gICAgICBhOiB0aGlzLl9hXG4gICAgfTtcbiAgfSxcbiAgdG9QZXJjZW50YWdlUmdiU3RyaW5nOiBmdW5jdGlvbiB0b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2EgPT0gMSA/IFwicmdiKFwiICsgTWF0aC5yb3VuZChib3VuZDAxKHRoaXMuX3IsIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIE1hdGgucm91bmQoYm91bmQwMSh0aGlzLl9nLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyBNYXRoLnJvdW5kKGJvdW5kMDEodGhpcy5fYiwgMjU1KSAqIDEwMCkgKyBcIiUpXCIgOiBcInJnYmEoXCIgKyBNYXRoLnJvdW5kKGJvdW5kMDEodGhpcy5fciwgMjU1KSAqIDEwMCkgKyBcIiUsIFwiICsgTWF0aC5yb3VuZChib3VuZDAxKHRoaXMuX2csIDI1NSkgKiAxMDApICsgXCIlLCBcIiArIE1hdGgucm91bmQoYm91bmQwMSh0aGlzLl9iLCAyNTUpICogMTAwKSArIFwiJSwgXCIgKyB0aGlzLl9yb3VuZEEgKyBcIilcIjtcbiAgfSxcbiAgdG9OYW1lOiBmdW5jdGlvbiB0b05hbWUoKSB7XG4gICAgaWYgKHRoaXMuX2EgPT09IDApIHtcbiAgICAgIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gICAgfVxuICAgIGlmICh0aGlzLl9hIDwgMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gaGV4TmFtZXNbcmdiVG9IZXgodGhpcy5fciwgdGhpcy5fZywgdGhpcy5fYiwgdHJ1ZSldIHx8IGZhbHNlO1xuICB9LFxuICB0b0ZpbHRlcjogZnVuY3Rpb24gdG9GaWx0ZXIoc2Vjb25kQ29sb3IpIHtcbiAgICB2YXIgaGV4OFN0cmluZyA9IFwiI1wiICsgcmdiYVRvQXJnYkhleCh0aGlzLl9yLCB0aGlzLl9nLCB0aGlzLl9iLCB0aGlzLl9hKTtcbiAgICB2YXIgc2Vjb25kSGV4OFN0cmluZyA9IGhleDhTdHJpbmc7XG4gICAgdmFyIGdyYWRpZW50VHlwZSA9IHRoaXMuX2dyYWRpZW50VHlwZSA/IFwiR3JhZGllbnRUeXBlID0gMSwgXCIgOiBcIlwiO1xuICAgIGlmIChzZWNvbmRDb2xvcikge1xuICAgICAgdmFyIHMgPSB0aW55Y29sb3Ioc2Vjb25kQ29sb3IpO1xuICAgICAgc2Vjb25kSGV4OFN0cmluZyA9IFwiI1wiICsgcmdiYVRvQXJnYkhleChzLl9yLCBzLl9nLCBzLl9iLCBzLl9hKTtcbiAgICB9XG4gICAgcmV0dXJuIFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KFwiICsgZ3JhZGllbnRUeXBlICsgXCJzdGFydENvbG9yc3RyPVwiICsgaGV4OFN0cmluZyArIFwiLGVuZENvbG9yc3RyPVwiICsgc2Vjb25kSGV4OFN0cmluZyArIFwiKVwiO1xuICB9LFxuICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoZm9ybWF0KSB7XG4gICAgdmFyIGZvcm1hdFNldCA9ICEhZm9ybWF0O1xuICAgIGZvcm1hdCA9IGZvcm1hdCB8fCB0aGlzLl9mb3JtYXQ7XG4gICAgdmFyIGZvcm1hdHRlZFN0cmluZyA9IGZhbHNlO1xuICAgIHZhciBoYXNBbHBoYSA9IHRoaXMuX2EgPCAxICYmIHRoaXMuX2EgPj0gMDtcbiAgICB2YXIgbmVlZHNBbHBoYUZvcm1hdCA9ICFmb3JtYXRTZXQgJiYgaGFzQWxwaGEgJiYgKGZvcm1hdCA9PT0gXCJoZXhcIiB8fCBmb3JtYXQgPT09IFwiaGV4NlwiIHx8IGZvcm1hdCA9PT0gXCJoZXgzXCIgfHwgZm9ybWF0ID09PSBcImhleDRcIiB8fCBmb3JtYXQgPT09IFwiaGV4OFwiIHx8IGZvcm1hdCA9PT0gXCJuYW1lXCIpO1xuICAgIGlmIChuZWVkc0FscGhhRm9ybWF0KSB7XG4gICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIFwidHJhbnNwYXJlbnRcIiwgYWxsIG90aGVyIG5vbi1hbHBoYSBmb3JtYXRzXG4gICAgICAvLyB3aWxsIHJldHVybiByZ2JhIHdoZW4gdGhlcmUgaXMgdHJhbnNwYXJlbmN5LlxuICAgICAgaWYgKGZvcm1hdCA9PT0gXCJuYW1lXCIgJiYgdGhpcy5fYSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b05hbWUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnRvUmdiU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IFwicmdiXCIpIHtcbiAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9SZ2JTdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gXCJwcmdiXCIpIHtcbiAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9QZXJjZW50YWdlUmdiU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IFwiaGV4XCIgfHwgZm9ybWF0ID09PSBcImhleDZcIikge1xuICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleFN0cmluZygpO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSBcImhleDNcIikge1xuICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleFN0cmluZyh0cnVlKTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gXCJoZXg0XCIpIHtcbiAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9IZXg4U3RyaW5nKHRydWUpO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSBcImhleDhcIikge1xuICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hleDhTdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gXCJuYW1lXCIpIHtcbiAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9OYW1lKCk7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IFwiaHNsXCIpIHtcbiAgICAgIGZvcm1hdHRlZFN0cmluZyA9IHRoaXMudG9Ic2xTdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gXCJoc3ZcIikge1xuICAgICAgZm9ybWF0dGVkU3RyaW5nID0gdGhpcy50b0hzdlN0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0dGVkU3RyaW5nIHx8IHRoaXMudG9IZXhTdHJpbmcoKTtcbiAgfSxcbiAgY2xvbmU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgIHJldHVybiB0aW55Y29sb3IodGhpcy50b1N0cmluZygpKTtcbiAgfSxcbiAgX2FwcGx5TW9kaWZpY2F0aW9uOiBmdW5jdGlvbiBfYXBwbHlNb2RpZmljYXRpb24oZm4sIGFyZ3MpIHtcbiAgICB2YXIgY29sb3IgPSBmbi5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncykpKTtcbiAgICB0aGlzLl9yID0gY29sb3IuX3I7XG4gICAgdGhpcy5fZyA9IGNvbG9yLl9nO1xuICAgIHRoaXMuX2IgPSBjb2xvci5fYjtcbiAgICB0aGlzLnNldEFscGhhKGNvbG9yLl9hKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgbGlnaHRlbjogZnVuY3Rpb24gbGlnaHRlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX2xpZ2h0ZW4sIGFyZ3VtZW50cyk7XG4gIH0sXG4gIGJyaWdodGVuOiBmdW5jdGlvbiBicmlnaHRlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX2JyaWdodGVuLCBhcmd1bWVudHMpO1xuICB9LFxuICBkYXJrZW46IGZ1bmN0aW9uIGRhcmtlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX2RhcmtlbiwgYXJndW1lbnRzKTtcbiAgfSxcbiAgZGVzYXR1cmF0ZTogZnVuY3Rpb24gZGVzYXR1cmF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX2Rlc2F0dXJhdGUsIGFyZ3VtZW50cyk7XG4gIH0sXG4gIHNhdHVyYXRlOiBmdW5jdGlvbiBzYXR1cmF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX3NhdHVyYXRlLCBhcmd1bWVudHMpO1xuICB9LFxuICBncmV5c2NhbGU6IGZ1bmN0aW9uIGdyZXlzY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX2dyZXlzY2FsZSwgYXJndW1lbnRzKTtcbiAgfSxcbiAgc3BpbjogZnVuY3Rpb24gc3BpbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlNb2RpZmljYXRpb24oX3NwaW4sIGFyZ3VtZW50cyk7XG4gIH0sXG4gIF9hcHBseUNvbWJpbmF0aW9uOiBmdW5jdGlvbiBfYXBwbHlDb21iaW5hdGlvbihmbiwgYXJncykge1xuICAgIHJldHVybiBmbi5hcHBseShudWxsLCBbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncykpKTtcbiAgfSxcbiAgYW5hbG9nb3VzOiBmdW5jdGlvbiBhbmFsb2dvdXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oX2FuYWxvZ291cywgYXJndW1lbnRzKTtcbiAgfSxcbiAgY29tcGxlbWVudDogZnVuY3Rpb24gY29tcGxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihfY29tcGxlbWVudCwgYXJndW1lbnRzKTtcbiAgfSxcbiAgbW9ub2Nocm9tYXRpYzogZnVuY3Rpb24gbW9ub2Nocm9tYXRpYygpIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihfbW9ub2Nocm9tYXRpYywgYXJndW1lbnRzKTtcbiAgfSxcbiAgc3BsaXRjb21wbGVtZW50OiBmdW5jdGlvbiBzcGxpdGNvbXBsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oX3NwbGl0Y29tcGxlbWVudCwgYXJndW1lbnRzKTtcbiAgfSxcbiAgLy8gRGlzYWJsZWQgdW50aWwgaHR0cHM6Ly9naXRodWIuY29tL2Jncmlucy9UaW55Q29sb3IvaXNzdWVzLzI1NFxuICAvLyBwb2x5YWQ6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihwb2x5YWQsIFtudW1iZXJdKTtcbiAgLy8gfSxcbiAgdHJpYWQ6IGZ1bmN0aW9uIHRyaWFkKCkge1xuICAgIHJldHVybiB0aGlzLl9hcHBseUNvbWJpbmF0aW9uKHBvbHlhZCwgWzNdKTtcbiAgfSxcbiAgdGV0cmFkOiBmdW5jdGlvbiB0ZXRyYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24ocG9seWFkLCBbNF0pO1xuICB9XG59O1xuXG4vLyBJZiBpbnB1dCBpcyBhbiBvYmplY3QsIGZvcmNlIDEgaW50byBcIjEuMFwiIHRvIGhhbmRsZSByYXRpb3MgcHJvcGVybHlcbi8vIFN0cmluZyBpbnB1dCByZXF1aXJlcyBcIjEuMFwiIGFzIGlucHV0LCBzbyAxIHdpbGwgYmUgdHJlYXRlZCBhcyAxXG50aW55Y29sb3IuZnJvbVJhdGlvID0gZnVuY3Rpb24gKGNvbG9yLCBvcHRzKSB7XG4gIGlmIChfdHlwZW9mKGNvbG9yKSA9PSBcIm9iamVjdFwiKSB7XG4gICAgdmFyIG5ld0NvbG9yID0ge307XG4gICAgZm9yICh2YXIgaSBpbiBjb2xvcikge1xuICAgICAgaWYgKGNvbG9yLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgIGlmIChpID09PSBcImFcIikge1xuICAgICAgICAgIG5ld0NvbG9yW2ldID0gY29sb3JbaV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3Q29sb3JbaV0gPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb2xvciA9IG5ld0NvbG9yO1xuICB9XG4gIHJldHVybiB0aW55Y29sb3IoY29sb3IsIG9wdHMpO1xufTtcblxuLy8gR2l2ZW4gYSBzdHJpbmcgb3Igb2JqZWN0LCBjb252ZXJ0IHRoYXQgaW5wdXQgdG8gUkdCXG4vLyBQb3NzaWJsZSBzdHJpbmcgaW5wdXRzOlxuLy9cbi8vICAgICBcInJlZFwiXG4vLyAgICAgXCIjZjAwXCIgb3IgXCJmMDBcIlxuLy8gICAgIFwiI2ZmMDAwMFwiIG9yIFwiZmYwMDAwXCJcbi8vICAgICBcIiNmZjAwMDAwMFwiIG9yIFwiZmYwMDAwMDBcIlxuLy8gICAgIFwicmdiIDI1NSAwIDBcIiBvciBcInJnYiAoMjU1LCAwLCAwKVwiXG4vLyAgICAgXCJyZ2IgMS4wIDAgMFwiIG9yIFwicmdiICgxLCAwLCAwKVwiXG4vLyAgICAgXCJyZ2JhICgyNTUsIDAsIDAsIDEpXCIgb3IgXCJyZ2JhIDI1NSwgMCwgMCwgMVwiXG4vLyAgICAgXCJyZ2JhICgxLjAsIDAsIDAsIDEpXCIgb3IgXCJyZ2JhIDEuMCwgMCwgMCwgMVwiXG4vLyAgICAgXCJoc2woMCwgMTAwJSwgNTAlKVwiIG9yIFwiaHNsIDAgMTAwJSA1MCVcIlxuLy8gICAgIFwiaHNsYSgwLCAxMDAlLCA1MCUsIDEpXCIgb3IgXCJoc2xhIDAgMTAwJSA1MCUsIDFcIlxuLy8gICAgIFwiaHN2KDAsIDEwMCUsIDEwMCUpXCIgb3IgXCJoc3YgMCAxMDAlIDEwMCVcIlxuLy9cbmZ1bmN0aW9uIGlucHV0VG9SR0IoY29sb3IpIHtcbiAgdmFyIHJnYiA9IHtcbiAgICByOiAwLFxuICAgIGc6IDAsXG4gICAgYjogMFxuICB9O1xuICB2YXIgYSA9IDE7XG4gIHZhciBzID0gbnVsbDtcbiAgdmFyIHYgPSBudWxsO1xuICB2YXIgbCA9IG51bGw7XG4gIHZhciBvayA9IGZhbHNlO1xuICB2YXIgZm9ybWF0ID0gZmFsc2U7XG4gIGlmICh0eXBlb2YgY29sb3IgPT0gXCJzdHJpbmdcIikge1xuICAgIGNvbG9yID0gc3RyaW5nSW5wdXRUb09iamVjdChjb2xvcik7XG4gIH1cbiAgaWYgKF90eXBlb2YoY29sb3IpID09IFwib2JqZWN0XCIpIHtcbiAgICBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IucikgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IuZykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IuYikpIHtcbiAgICAgIHJnYiA9IHJnYlRvUmdiKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIpO1xuICAgICAgb2sgPSB0cnVlO1xuICAgICAgZm9ybWF0ID0gU3RyaW5nKGNvbG9yLnIpLnN1YnN0cigtMSkgPT09IFwiJVwiID8gXCJwcmdiXCIgOiBcInJnYlwiO1xuICAgIH0gZWxzZSBpZiAoaXNWYWxpZENTU1VuaXQoY29sb3IuaCkgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IucykgJiYgaXNWYWxpZENTU1VuaXQoY29sb3IudikpIHtcbiAgICAgIHMgPSBjb252ZXJ0VG9QZXJjZW50YWdlKGNvbG9yLnMpO1xuICAgICAgdiA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3Iudik7XG4gICAgICByZ2IgPSBoc3ZUb1JnYihjb2xvci5oLCBzLCB2KTtcbiAgICAgIG9rID0gdHJ1ZTtcbiAgICAgIGZvcm1hdCA9IFwiaHN2XCI7XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkQ1NTVW5pdChjb2xvci5oKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5zKSAmJiBpc1ZhbGlkQ1NTVW5pdChjb2xvci5sKSkge1xuICAgICAgcyA9IGNvbnZlcnRUb1BlcmNlbnRhZ2UoY29sb3Iucyk7XG4gICAgICBsID0gY29udmVydFRvUGVyY2VudGFnZShjb2xvci5sKTtcbiAgICAgIHJnYiA9IGhzbFRvUmdiKGNvbG9yLmgsIHMsIGwpO1xuICAgICAgb2sgPSB0cnVlO1xuICAgICAgZm9ybWF0ID0gXCJoc2xcIjtcbiAgICB9XG4gICAgaWYgKGNvbG9yLmhhc093blByb3BlcnR5KFwiYVwiKSkge1xuICAgICAgYSA9IGNvbG9yLmE7XG4gICAgfVxuICB9XG4gIGEgPSBib3VuZEFscGhhKGEpO1xuICByZXR1cm4ge1xuICAgIG9rOiBvayxcbiAgICBmb3JtYXQ6IGNvbG9yLmZvcm1hdCB8fCBmb3JtYXQsXG4gICAgcjogTWF0aC5taW4oMjU1LCBNYXRoLm1heChyZ2IuciwgMCkpLFxuICAgIGc6IE1hdGgubWluKDI1NSwgTWF0aC5tYXgocmdiLmcsIDApKSxcbiAgICBiOiBNYXRoLm1pbigyNTUsIE1hdGgubWF4KHJnYi5iLCAwKSksXG4gICAgYTogYVxuICB9O1xufVxuXG4vLyBDb252ZXJzaW9uIEZ1bmN0aW9uc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gYHJnYlRvSHNsYCwgYHJnYlRvSHN2YCwgYGhzbFRvUmdiYCwgYGhzdlRvUmdiYCBtb2RpZmllZCBmcm9tOlxuLy8gPGh0dHA6Ly9tamlqYWNrc29uLmNvbS8yMDA4LzAyL3JnYi10by1oc2wtYW5kLXJnYi10by1oc3YtY29sb3ItbW9kZWwtY29udmVyc2lvbi1hbGdvcml0aG1zLWluLWphdmFzY3JpcHQ+XG5cbi8vIGByZ2JUb1JnYmBcbi8vIEhhbmRsZSBib3VuZHMgLyBwZXJjZW50YWdlIGNoZWNraW5nIHRvIGNvbmZvcm0gdG8gQ1NTIGNvbG9yIHNwZWNcbi8vIDxodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLz5cbi8vICpBc3N1bWVzOiogciwgZywgYiBpbiBbMCwgMjU1XSBvciBbMCwgMV1cbi8vICpSZXR1cm5zOiogeyByLCBnLCBiIH0gaW4gWzAsIDI1NV1cbmZ1bmN0aW9uIHJnYlRvUmdiKHIsIGcsIGIpIHtcbiAgcmV0dXJuIHtcbiAgICByOiBib3VuZDAxKHIsIDI1NSkgKiAyNTUsXG4gICAgZzogYm91bmQwMShnLCAyNTUpICogMjU1LFxuICAgIGI6IGJvdW5kMDEoYiwgMjU1KSAqIDI1NVxuICB9O1xufVxuXG4vLyBgcmdiVG9Ic2xgXG4vLyBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNMLlxuLy8gKkFzc3VtZXM6KiByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIFswLCAyNTVdIG9yIFswLCAxXVxuLy8gKlJldHVybnM6KiB7IGgsIHMsIGwgfSBpbiBbMCwxXVxuZnVuY3Rpb24gcmdiVG9Ic2wociwgZywgYikge1xuICByID0gYm91bmQwMShyLCAyNTUpO1xuICBnID0gYm91bmQwMShnLCAyNTUpO1xuICBiID0gYm91bmQwMShiLCAyNTUpO1xuICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYiksXG4gICAgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gIHZhciBoLFxuICAgIHMsXG4gICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKG1heCA9PSBtaW4pIHtcbiAgICBoID0gcyA9IDA7IC8vIGFjaHJvbWF0aWNcbiAgfSBlbHNlIHtcbiAgICB2YXIgZCA9IG1heCAtIG1pbjtcbiAgICBzID0gbCA+IDAuNSA/IGQgLyAoMiAtIG1heCAtIG1pbikgOiBkIC8gKG1heCArIG1pbik7XG4gICAgc3dpdGNoIChtYXgpIHtcbiAgICAgIGNhc2UgcjpcbiAgICAgICAgaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZzpcbiAgICAgICAgaCA9IChiIC0gcikgLyBkICsgMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGI6XG4gICAgICAgIGggPSAociAtIGcpIC8gZCArIDQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBoIC89IDY7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBoOiBoLFxuICAgIHM6IHMsXG4gICAgbDogbFxuICB9O1xufVxuXG4vLyBgaHNsVG9SZ2JgXG4vLyBDb252ZXJ0cyBhbiBIU0wgY29sb3IgdmFsdWUgdG8gUkdCLlxuLy8gKkFzc3VtZXM6KiBoIGlzIGNvbnRhaW5lZCBpbiBbMCwgMV0gb3IgWzAsIDM2MF0gYW5kIHMgYW5kIGwgYXJlIGNvbnRhaW5lZCBbMCwgMV0gb3IgWzAsIDEwMF1cbi8vICpSZXR1cm5zOiogeyByLCBnLCBiIH0gaW4gdGhlIHNldCBbMCwgMjU1XVxuZnVuY3Rpb24gaHNsVG9SZ2IoaCwgcywgbCkge1xuICB2YXIgciwgZywgYjtcbiAgaCA9IGJvdW5kMDEoaCwgMzYwKTtcbiAgcyA9IGJvdW5kMDEocywgMTAwKTtcbiAgbCA9IGJvdW5kMDEobCwgMTAwKTtcbiAgZnVuY3Rpb24gaHVlMnJnYihwLCBxLCB0KSB7XG4gICAgaWYgKHQgPCAwKSB0ICs9IDE7XG4gICAgaWYgKHQgPiAxKSB0IC09IDE7XG4gICAgaWYgKHQgPCAxIC8gNikgcmV0dXJuIHAgKyAocSAtIHApICogNiAqIHQ7XG4gICAgaWYgKHQgPCAxIC8gMikgcmV0dXJuIHE7XG4gICAgaWYgKHQgPCAyIC8gMykgcmV0dXJuIHAgKyAocSAtIHApICogKDIgLyAzIC0gdCkgKiA2O1xuICAgIHJldHVybiBwO1xuICB9XG4gIGlmIChzID09PSAwKSB7XG4gICAgciA9IGcgPSBiID0gbDsgLy8gYWNocm9tYXRpY1xuICB9IGVsc2Uge1xuICAgIHZhciBxID0gbCA8IDAuNSA/IGwgKiAoMSArIHMpIDogbCArIHMgLSBsICogcztcbiAgICB2YXIgcCA9IDIgKiBsIC0gcTtcbiAgICByID0gaHVlMnJnYihwLCBxLCBoICsgMSAvIDMpO1xuICAgIGcgPSBodWUycmdiKHAsIHEsIGgpO1xuICAgIGIgPSBodWUycmdiKHAsIHEsIGggLSAxIC8gMyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByOiByICogMjU1LFxuICAgIGc6IGcgKiAyNTUsXG4gICAgYjogYiAqIDI1NVxuICB9O1xufVxuXG4vLyBgcmdiVG9Ic3ZgXG4vLyBDb252ZXJ0cyBhbiBSR0IgY29sb3IgdmFsdWUgdG8gSFNWXG4vLyAqQXNzdW1lczoqIHIsIGcsIGFuZCBiIGFyZSBjb250YWluZWQgaW4gdGhlIHNldCBbMCwgMjU1XSBvciBbMCwgMV1cbi8vICpSZXR1cm5zOiogeyBoLCBzLCB2IH0gaW4gWzAsMV1cbmZ1bmN0aW9uIHJnYlRvSHN2KHIsIGcsIGIpIHtcbiAgciA9IGJvdW5kMDEociwgMjU1KTtcbiAgZyA9IGJvdW5kMDEoZywgMjU1KTtcbiAgYiA9IGJvdW5kMDEoYiwgMjU1KTtcbiAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICB2YXIgaCxcbiAgICBzLFxuICAgIHYgPSBtYXg7XG4gIHZhciBkID0gbWF4IC0gbWluO1xuICBzID0gbWF4ID09PSAwID8gMCA6IGQgLyBtYXg7XG4gIGlmIChtYXggPT0gbWluKSB7XG4gICAgaCA9IDA7IC8vIGFjaHJvbWF0aWNcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKG1heCkge1xuICAgICAgY2FzZSByOlxuICAgICAgICBoID0gKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBnOlxuICAgICAgICBoID0gKGIgLSByKSAvIGQgKyAyO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgYjpcbiAgICAgICAgaCA9IChyIC0gZykgLyBkICsgNDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGggLz0gNjtcbiAgfVxuICByZXR1cm4ge1xuICAgIGg6IGgsXG4gICAgczogcyxcbiAgICB2OiB2XG4gIH07XG59XG5cbi8vIGBoc3ZUb1JnYmBcbi8vIENvbnZlcnRzIGFuIEhTViBjb2xvciB2YWx1ZSB0byBSR0IuXG4vLyAqQXNzdW1lczoqIGggaXMgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMzYwXSBhbmQgcyBhbmQgdiBhcmUgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMTAwXVxuLy8gKlJldHVybnM6KiB7IHIsIGcsIGIgfSBpbiB0aGUgc2V0IFswLCAyNTVdXG5mdW5jdGlvbiBoc3ZUb1JnYihoLCBzLCB2KSB7XG4gIGggPSBib3VuZDAxKGgsIDM2MCkgKiA2O1xuICBzID0gYm91bmQwMShzLCAxMDApO1xuICB2ID0gYm91bmQwMSh2LCAxMDApO1xuICB2YXIgaSA9IE1hdGguZmxvb3IoaCksXG4gICAgZiA9IGggLSBpLFxuICAgIHAgPSB2ICogKDEgLSBzKSxcbiAgICBxID0gdiAqICgxIC0gZiAqIHMpLFxuICAgIHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyksXG4gICAgbW9kID0gaSAlIDYsXG4gICAgciA9IFt2LCBxLCBwLCBwLCB0LCB2XVttb2RdLFxuICAgIGcgPSBbdCwgdiwgdiwgcSwgcCwgcF1bbW9kXSxcbiAgICBiID0gW3AsIHAsIHQsIHYsIHYsIHFdW21vZF07XG4gIHJldHVybiB7XG4gICAgcjogciAqIDI1NSxcbiAgICBnOiBnICogMjU1LFxuICAgIGI6IGIgKiAyNTVcbiAgfTtcbn1cblxuLy8gYHJnYlRvSGV4YFxuLy8gQ29udmVydHMgYW4gUkdCIGNvbG9yIHRvIGhleFxuLy8gQXNzdW1lcyByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV1cbi8vIFJldHVybnMgYSAzIG9yIDYgY2hhcmFjdGVyIGhleFxuZnVuY3Rpb24gcmdiVG9IZXgociwgZywgYiwgYWxsb3czQ2hhcikge1xuICB2YXIgaGV4ID0gW3BhZDIoTWF0aC5yb3VuZChyKS50b1N0cmluZygxNikpLCBwYWQyKE1hdGgucm91bmQoZykudG9TdHJpbmcoMTYpKSwgcGFkMihNYXRoLnJvdW5kKGIpLnRvU3RyaW5nKDE2KSldO1xuXG4gIC8vIFJldHVybiBhIDMgY2hhcmFjdGVyIGhleCBpZiBwb3NzaWJsZVxuICBpZiAoYWxsb3czQ2hhciAmJiBoZXhbMF0uY2hhckF0KDApID09IGhleFswXS5jaGFyQXQoMSkgJiYgaGV4WzFdLmNoYXJBdCgwKSA9PSBoZXhbMV0uY2hhckF0KDEpICYmIGhleFsyXS5jaGFyQXQoMCkgPT0gaGV4WzJdLmNoYXJBdCgxKSkge1xuICAgIHJldHVybiBoZXhbMF0uY2hhckF0KDApICsgaGV4WzFdLmNoYXJBdCgwKSArIGhleFsyXS5jaGFyQXQoMCk7XG4gIH1cbiAgcmV0dXJuIGhleC5qb2luKFwiXCIpO1xufVxuXG4vLyBgcmdiYVRvSGV4YFxuLy8gQ29udmVydHMgYW4gUkdCQSBjb2xvciBwbHVzIGFscGhhIHRyYW5zcGFyZW5jeSB0byBoZXhcbi8vIEFzc3VtZXMgciwgZywgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gYW5kXG4vLyBhIGluIFswLCAxXS4gUmV0dXJucyBhIDQgb3IgOCBjaGFyYWN0ZXIgcmdiYSBoZXhcbmZ1bmN0aW9uIHJnYmFUb0hleChyLCBnLCBiLCBhLCBhbGxvdzRDaGFyKSB7XG4gIHZhciBoZXggPSBbcGFkMihNYXRoLnJvdW5kKHIpLnRvU3RyaW5nKDE2KSksIHBhZDIoTWF0aC5yb3VuZChnKS50b1N0cmluZygxNikpLCBwYWQyKE1hdGgucm91bmQoYikudG9TdHJpbmcoMTYpKSwgcGFkMihjb252ZXJ0RGVjaW1hbFRvSGV4KGEpKV07XG5cbiAgLy8gUmV0dXJuIGEgNCBjaGFyYWN0ZXIgaGV4IGlmIHBvc3NpYmxlXG4gIGlmIChhbGxvdzRDaGFyICYmIGhleFswXS5jaGFyQXQoMCkgPT0gaGV4WzBdLmNoYXJBdCgxKSAmJiBoZXhbMV0uY2hhckF0KDApID09IGhleFsxXS5jaGFyQXQoMSkgJiYgaGV4WzJdLmNoYXJBdCgwKSA9PSBoZXhbMl0uY2hhckF0KDEpICYmIGhleFszXS5jaGFyQXQoMCkgPT0gaGV4WzNdLmNoYXJBdCgxKSkge1xuICAgIHJldHVybiBoZXhbMF0uY2hhckF0KDApICsgaGV4WzFdLmNoYXJBdCgwKSArIGhleFsyXS5jaGFyQXQoMCkgKyBoZXhbM10uY2hhckF0KDApO1xuICB9XG4gIHJldHVybiBoZXguam9pbihcIlwiKTtcbn1cblxuLy8gYHJnYmFUb0FyZ2JIZXhgXG4vLyBDb252ZXJ0cyBhbiBSR0JBIGNvbG9yIHRvIGFuIEFSR0IgSGV4OCBzdHJpbmdcbi8vIFJhcmVseSB1c2VkLCBidXQgcmVxdWlyZWQgZm9yIFwidG9GaWx0ZXIoKVwiXG5mdW5jdGlvbiByZ2JhVG9BcmdiSGV4KHIsIGcsIGIsIGEpIHtcbiAgdmFyIGhleCA9IFtwYWQyKGNvbnZlcnREZWNpbWFsVG9IZXgoYSkpLCBwYWQyKE1hdGgucm91bmQocikudG9TdHJpbmcoMTYpKSwgcGFkMihNYXRoLnJvdW5kKGcpLnRvU3RyaW5nKDE2KSksIHBhZDIoTWF0aC5yb3VuZChiKS50b1N0cmluZygxNikpXTtcbiAgcmV0dXJuIGhleC5qb2luKFwiXCIpO1xufVxuXG4vLyBgZXF1YWxzYFxuLy8gQ2FuIGJlIGNhbGxlZCB3aXRoIGFueSB0aW55Y29sb3IgaW5wdXRcbnRpbnljb2xvci5lcXVhbHMgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIpIHtcbiAgaWYgKCFjb2xvcjEgfHwgIWNvbG9yMikgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdGlueWNvbG9yKGNvbG9yMSkudG9SZ2JTdHJpbmcoKSA9PSB0aW55Y29sb3IoY29sb3IyKS50b1JnYlN0cmluZygpO1xufTtcbnRpbnljb2xvci5yYW5kb20gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aW55Y29sb3IuZnJvbVJhdGlvKHtcbiAgICByOiBNYXRoLnJhbmRvbSgpLFxuICAgIGc6IE1hdGgucmFuZG9tKCksXG4gICAgYjogTWF0aC5yYW5kb20oKVxuICB9KTtcbn07XG5cbi8vIE1vZGlmaWNhdGlvbiBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoYW5rcyB0byBsZXNzLmpzIGZvciBzb21lIG9mIHRoZSBiYXNpY3MgaGVyZVxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9jbG91ZGhlYWQvbGVzcy5qcy9ibG9iL21hc3Rlci9saWIvbGVzcy9mdW5jdGlvbnMuanM+XG5cbmZ1bmN0aW9uIF9kZXNhdHVyYXRlKGNvbG9yLCBhbW91bnQpIHtcbiAgYW1vdW50ID0gYW1vdW50ID09PSAwID8gMCA6IGFtb3VudCB8fCAxMDtcbiAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgaHNsLnMgLT0gYW1vdW50IC8gMTAwO1xuICBoc2wucyA9IGNsYW1wMDEoaHNsLnMpO1xuICByZXR1cm4gdGlueWNvbG9yKGhzbCk7XG59XG5mdW5jdGlvbiBfc2F0dXJhdGUoY29sb3IsIGFtb3VudCkge1xuICBhbW91bnQgPSBhbW91bnQgPT09IDAgPyAwIDogYW1vdW50IHx8IDEwO1xuICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICBoc2wucyArPSBhbW91bnQgLyAxMDA7XG4gIGhzbC5zID0gY2xhbXAwMShoc2wucyk7XG4gIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cbmZ1bmN0aW9uIF9ncmV5c2NhbGUoY29sb3IpIHtcbiAgcmV0dXJuIHRpbnljb2xvcihjb2xvcikuZGVzYXR1cmF0ZSgxMDApO1xufVxuZnVuY3Rpb24gX2xpZ2h0ZW4oY29sb3IsIGFtb3VudCkge1xuICBhbW91bnQgPSBhbW91bnQgPT09IDAgPyAwIDogYW1vdW50IHx8IDEwO1xuICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICBoc2wubCArPSBhbW91bnQgLyAxMDA7XG4gIGhzbC5sID0gY2xhbXAwMShoc2wubCk7XG4gIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cbmZ1bmN0aW9uIF9icmlnaHRlbihjb2xvciwgYW1vdW50KSB7XG4gIGFtb3VudCA9IGFtb3VudCA9PT0gMCA/IDAgOiBhbW91bnQgfHwgMTA7XG4gIHZhciByZ2IgPSB0aW55Y29sb3IoY29sb3IpLnRvUmdiKCk7XG4gIHJnYi5yID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCByZ2IuciAtIE1hdGgucm91bmQoMjU1ICogLShhbW91bnQgLyAxMDApKSkpO1xuICByZ2IuZyA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgcmdiLmcgLSBNYXRoLnJvdW5kKDI1NSAqIC0oYW1vdW50IC8gMTAwKSkpKTtcbiAgcmdiLmIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIHJnYi5iIC0gTWF0aC5yb3VuZCgyNTUgKiAtKGFtb3VudCAvIDEwMCkpKSk7XG4gIHJldHVybiB0aW55Y29sb3IocmdiKTtcbn1cbmZ1bmN0aW9uIF9kYXJrZW4oY29sb3IsIGFtb3VudCkge1xuICBhbW91bnQgPSBhbW91bnQgPT09IDAgPyAwIDogYW1vdW50IHx8IDEwO1xuICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICBoc2wubCAtPSBhbW91bnQgLyAxMDA7XG4gIGhzbC5sID0gY2xhbXAwMShoc2wubCk7XG4gIHJldHVybiB0aW55Y29sb3IoaHNsKTtcbn1cblxuLy8gU3BpbiB0YWtlcyBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGFtb3VudCB3aXRoaW4gWy0zNjAsIDM2MF0gaW5kaWNhdGluZyB0aGUgY2hhbmdlIG9mIGh1ZS5cbi8vIFZhbHVlcyBvdXRzaWRlIG9mIHRoaXMgcmFuZ2Ugd2lsbCBiZSB3cmFwcGVkIGludG8gdGhpcyByYW5nZS5cbmZ1bmN0aW9uIF9zcGluKGNvbG9yLCBhbW91bnQpIHtcbiAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgdmFyIGh1ZSA9IChoc2wuaCArIGFtb3VudCkgJSAzNjA7XG4gIGhzbC5oID0gaHVlIDwgMCA/IDM2MCArIGh1ZSA6IGh1ZTtcbiAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuXG4vLyBDb21iaW5hdGlvbiBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhhbmtzIHRvIGpRdWVyeSB4Q29sb3IgZm9yIHNvbWUgb2YgdGhlIGlkZWFzIGJlaGluZCB0aGVzZVxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9pbmZ1c2lvbi9qUXVlcnkteGNvbG9yL2Jsb2IvbWFzdGVyL2pxdWVyeS54Y29sb3IuanM+XG5cbmZ1bmN0aW9uIF9jb21wbGVtZW50KGNvbG9yKSB7XG4gIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gIGhzbC5oID0gKGhzbC5oICsgMTgwKSAlIDM2MDtcbiAgcmV0dXJuIHRpbnljb2xvcihoc2wpO1xufVxuZnVuY3Rpb24gcG9seWFkKGNvbG9yLCBudW1iZXIpIHtcbiAgaWYgKGlzTmFOKG51bWJlcikgfHwgbnVtYmVyIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBcmd1bWVudCB0byBwb2x5YWQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgfVxuICB2YXIgaHNsID0gdGlueWNvbG9yKGNvbG9yKS50b0hzbCgpO1xuICB2YXIgcmVzdWx0ID0gW3Rpbnljb2xvcihjb2xvcildO1xuICB2YXIgc3RlcCA9IDM2MCAvIG51bWJlcjtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBudW1iZXI7IGkrKykge1xuICAgIHJlc3VsdC5wdXNoKHRpbnljb2xvcih7XG4gICAgICBoOiAoaHNsLmggKyBpICogc3RlcCkgJSAzNjAsXG4gICAgICBzOiBoc2wucyxcbiAgICAgIGw6IGhzbC5sXG4gICAgfSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBfc3BsaXRjb21wbGVtZW50KGNvbG9yKSB7XG4gIHZhciBoc2wgPSB0aW55Y29sb3IoY29sb3IpLnRvSHNsKCk7XG4gIHZhciBoID0gaHNsLmg7XG4gIHJldHVybiBbdGlueWNvbG9yKGNvbG9yKSwgdGlueWNvbG9yKHtcbiAgICBoOiAoaCArIDcyKSAlIDM2MCxcbiAgICBzOiBoc2wucyxcbiAgICBsOiBoc2wubFxuICB9KSwgdGlueWNvbG9yKHtcbiAgICBoOiAoaCArIDIxNikgJSAzNjAsXG4gICAgczogaHNsLnMsXG4gICAgbDogaHNsLmxcbiAgfSldO1xufVxuZnVuY3Rpb24gX2FuYWxvZ291cyhjb2xvciwgcmVzdWx0cywgc2xpY2VzKSB7XG4gIHJlc3VsdHMgPSByZXN1bHRzIHx8IDY7XG4gIHNsaWNlcyA9IHNsaWNlcyB8fCAzMDtcbiAgdmFyIGhzbCA9IHRpbnljb2xvcihjb2xvcikudG9Ic2woKTtcbiAgdmFyIHBhcnQgPSAzNjAgLyBzbGljZXM7XG4gIHZhciByZXQgPSBbdGlueWNvbG9yKGNvbG9yKV07XG4gIGZvciAoaHNsLmggPSAoaHNsLmggLSAocGFydCAqIHJlc3VsdHMgPj4gMSkgKyA3MjApICUgMzYwOyAtLXJlc3VsdHM7KSB7XG4gICAgaHNsLmggPSAoaHNsLmggKyBwYXJ0KSAlIDM2MDtcbiAgICByZXQucHVzaCh0aW55Y29sb3IoaHNsKSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbmZ1bmN0aW9uIF9tb25vY2hyb21hdGljKGNvbG9yLCByZXN1bHRzKSB7XG4gIHJlc3VsdHMgPSByZXN1bHRzIHx8IDY7XG4gIHZhciBoc3YgPSB0aW55Y29sb3IoY29sb3IpLnRvSHN2KCk7XG4gIHZhciBoID0gaHN2LmgsXG4gICAgcyA9IGhzdi5zLFxuICAgIHYgPSBoc3YudjtcbiAgdmFyIHJldCA9IFtdO1xuICB2YXIgbW9kaWZpY2F0aW9uID0gMSAvIHJlc3VsdHM7XG4gIHdoaWxlIChyZXN1bHRzLS0pIHtcbiAgICByZXQucHVzaCh0aW55Y29sb3Ioe1xuICAgICAgaDogaCxcbiAgICAgIHM6IHMsXG4gICAgICB2OiB2XG4gICAgfSkpO1xuICAgIHYgPSAodiArIG1vZGlmaWNhdGlvbikgJSAxO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8vIFV0aWxpdHkgRnVuY3Rpb25zXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudGlueWNvbG9yLm1peCA9IGZ1bmN0aW9uIChjb2xvcjEsIGNvbG9yMiwgYW1vdW50KSB7XG4gIGFtb3VudCA9IGFtb3VudCA9PT0gMCA/IDAgOiBhbW91bnQgfHwgNTA7XG4gIHZhciByZ2IxID0gdGlueWNvbG9yKGNvbG9yMSkudG9SZ2IoKTtcbiAgdmFyIHJnYjIgPSB0aW55Y29sb3IoY29sb3IyKS50b1JnYigpO1xuICB2YXIgcCA9IGFtb3VudCAvIDEwMDtcbiAgdmFyIHJnYmEgPSB7XG4gICAgcjogKHJnYjIuciAtIHJnYjEucikgKiBwICsgcmdiMS5yLFxuICAgIGc6IChyZ2IyLmcgLSByZ2IxLmcpICogcCArIHJnYjEuZyxcbiAgICBiOiAocmdiMi5iIC0gcmdiMS5iKSAqIHAgKyByZ2IxLmIsXG4gICAgYTogKHJnYjIuYSAtIHJnYjEuYSkgKiBwICsgcmdiMS5hXG4gIH07XG4gIHJldHVybiB0aW55Y29sb3IocmdiYSk7XG59O1xuXG4vLyBSZWFkYWJpbGl0eSBGdW5jdGlvbnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jY29udHJhc3QtcmF0aW9kZWYgKFdDQUcgVmVyc2lvbiAyKVxuXG4vLyBgY29udHJhc3RgXG4vLyBBbmFseXplIHRoZSAyIGNvbG9ycyBhbmQgcmV0dXJucyB0aGUgY29sb3IgY29udHJhc3QgZGVmaW5lZCBieSAoV0NBRyBWZXJzaW9uIDIpXG50aW55Y29sb3IucmVhZGFiaWxpdHkgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIpIHtcbiAgdmFyIGMxID0gdGlueWNvbG9yKGNvbG9yMSk7XG4gIHZhciBjMiA9IHRpbnljb2xvcihjb2xvcjIpO1xuICByZXR1cm4gKE1hdGgubWF4KGMxLmdldEx1bWluYW5jZSgpLCBjMi5nZXRMdW1pbmFuY2UoKSkgKyAwLjA1KSAvIChNYXRoLm1pbihjMS5nZXRMdW1pbmFuY2UoKSwgYzIuZ2V0THVtaW5hbmNlKCkpICsgMC4wNSk7XG59O1xuXG4vLyBgaXNSZWFkYWJsZWBcbi8vIEVuc3VyZSB0aGF0IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3IgY29tYmluYXRpb25zIG1lZXQgV0NBRzIgZ3VpZGVsaW5lcy5cbi8vIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBPYmplY3QuXG4vLyAgICAgIHRoZSAnbGV2ZWwnIHByb3BlcnR5IHN0YXRlcyAnQUEnIG9yICdBQUEnIC0gaWYgbWlzc2luZyBvciBpbnZhbGlkLCBpdCBkZWZhdWx0cyB0byAnQUEnO1xuLy8gICAgICB0aGUgJ3NpemUnIHByb3BlcnR5IHN0YXRlcyAnbGFyZ2UnIG9yICdzbWFsbCcgLSBpZiBtaXNzaW5nIG9yIGludmFsaWQsIGl0IGRlZmF1bHRzIHRvICdzbWFsbCcuXG4vLyBJZiB0aGUgZW50aXJlIG9iamVjdCBpcyBhYnNlbnQsIGlzUmVhZGFibGUgZGVmYXVsdHMgdG8ge2xldmVsOlwiQUFcIixzaXplOlwic21hbGxcIn0uXG5cbi8vICpFeGFtcGxlKlxuLy8gICAgdGlueWNvbG9yLmlzUmVhZGFibGUoXCIjMDAwXCIsIFwiIzExMVwiKSA9PiBmYWxzZVxuLy8gICAgdGlueWNvbG9yLmlzUmVhZGFibGUoXCIjMDAwXCIsIFwiIzExMVwiLHtsZXZlbDpcIkFBXCIsc2l6ZTpcImxhcmdlXCJ9KSA9PiBmYWxzZVxudGlueWNvbG9yLmlzUmVhZGFibGUgPSBmdW5jdGlvbiAoY29sb3IxLCBjb2xvcjIsIHdjYWcyKSB7XG4gIHZhciByZWFkYWJpbGl0eSA9IHRpbnljb2xvci5yZWFkYWJpbGl0eShjb2xvcjEsIGNvbG9yMik7XG4gIHZhciB3Y2FnMlBhcm1zLCBvdXQ7XG4gIG91dCA9IGZhbHNlO1xuICB3Y2FnMlBhcm1zID0gdmFsaWRhdGVXQ0FHMlBhcm1zKHdjYWcyKTtcbiAgc3dpdGNoICh3Y2FnMlBhcm1zLmxldmVsICsgd2NhZzJQYXJtcy5zaXplKSB7XG4gICAgY2FzZSBcIkFBc21hbGxcIjpcbiAgICBjYXNlIFwiQUFBbGFyZ2VcIjpcbiAgICAgIG91dCA9IHJlYWRhYmlsaXR5ID49IDQuNTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJBQWxhcmdlXCI6XG4gICAgICBvdXQgPSByZWFkYWJpbGl0eSA+PSAzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIkFBQXNtYWxsXCI6XG4gICAgICBvdXQgPSByZWFkYWJpbGl0eSA+PSA3O1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn07XG5cbi8vIGBtb3N0UmVhZGFibGVgXG4vLyBHaXZlbiBhIGJhc2UgY29sb3IgYW5kIGEgbGlzdCBvZiBwb3NzaWJsZSBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmRcbi8vIGNvbG9ycyBmb3IgdGhhdCBiYXNlLCByZXR1cm5zIHRoZSBtb3N0IHJlYWRhYmxlIGNvbG9yLlxuLy8gT3B0aW9uYWxseSByZXR1cm5zIEJsYWNrIG9yIFdoaXRlIGlmIHRoZSBtb3N0IHJlYWRhYmxlIGNvbG9yIGlzIHVucmVhZGFibGUuXG4vLyAqRXhhbXBsZSpcbi8vICAgIHRpbnljb2xvci5tb3N0UmVhZGFibGUodGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiMxMjNcIiwgW1wiIzEyNFwiLCBcIiMxMjVcIl0se2luY2x1ZGVGYWxsYmFja0NvbG9yczpmYWxzZX0pLnRvSGV4U3RyaW5nKCk7IC8vIFwiIzExMjI1NVwiXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKHRpbnljb2xvci5tb3N0UmVhZGFibGUoXCIjMTIzXCIsIFtcIiMxMjRcIiwgXCIjMTI1XCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6dHJ1ZX0pLnRvSGV4U3RyaW5nKCk7ICAvLyBcIiNmZmZmZmZcIlxuLy8gICAgdGlueWNvbG9yLm1vc3RSZWFkYWJsZShcIiNhODAxNWFcIiwgW1wiI2ZhZjNmM1wiXSx7aW5jbHVkZUZhbGxiYWNrQ29sb3JzOnRydWUsbGV2ZWw6XCJBQUFcIixzaXplOlwibGFyZ2VcIn0pLnRvSGV4U3RyaW5nKCk7IC8vIFwiI2ZhZjNmM1wiXG4vLyAgICB0aW55Y29sb3IubW9zdFJlYWRhYmxlKFwiI2E4MDE1YVwiLCBbXCIjZmFmM2YzXCJdLHtpbmNsdWRlRmFsbGJhY2tDb2xvcnM6dHJ1ZSxsZXZlbDpcIkFBQVwiLHNpemU6XCJzbWFsbFwifSkudG9IZXhTdHJpbmcoKTsgLy8gXCIjZmZmZmZmXCJcbnRpbnljb2xvci5tb3N0UmVhZGFibGUgPSBmdW5jdGlvbiAoYmFzZUNvbG9yLCBjb2xvckxpc3QsIGFyZ3MpIHtcbiAgdmFyIGJlc3RDb2xvciA9IG51bGw7XG4gIHZhciBiZXN0U2NvcmUgPSAwO1xuICB2YXIgcmVhZGFiaWxpdHk7XG4gIHZhciBpbmNsdWRlRmFsbGJhY2tDb2xvcnMsIGxldmVsLCBzaXplO1xuICBhcmdzID0gYXJncyB8fCB7fTtcbiAgaW5jbHVkZUZhbGxiYWNrQ29sb3JzID0gYXJncy5pbmNsdWRlRmFsbGJhY2tDb2xvcnM7XG4gIGxldmVsID0gYXJncy5sZXZlbDtcbiAgc2l6ZSA9IGFyZ3Muc2l6ZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvckxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICByZWFkYWJpbGl0eSA9IHRpbnljb2xvci5yZWFkYWJpbGl0eShiYXNlQ29sb3IsIGNvbG9yTGlzdFtpXSk7XG4gICAgaWYgKHJlYWRhYmlsaXR5ID4gYmVzdFNjb3JlKSB7XG4gICAgICBiZXN0U2NvcmUgPSByZWFkYWJpbGl0eTtcbiAgICAgIGJlc3RDb2xvciA9IHRpbnljb2xvcihjb2xvckxpc3RbaV0pO1xuICAgIH1cbiAgfVxuICBpZiAodGlueWNvbG9yLmlzUmVhZGFibGUoYmFzZUNvbG9yLCBiZXN0Q29sb3IsIHtcbiAgICBsZXZlbDogbGV2ZWwsXG4gICAgc2l6ZTogc2l6ZVxuICB9KSB8fCAhaW5jbHVkZUZhbGxiYWNrQ29sb3JzKSB7XG4gICAgcmV0dXJuIGJlc3RDb2xvcjtcbiAgfSBlbHNlIHtcbiAgICBhcmdzLmluY2x1ZGVGYWxsYmFja0NvbG9ycyA9IGZhbHNlO1xuICAgIHJldHVybiB0aW55Y29sb3IubW9zdFJlYWRhYmxlKGJhc2VDb2xvciwgW1wiI2ZmZlwiLCBcIiMwMDBcIl0sIGFyZ3MpO1xuICB9XG59O1xuXG4vLyBCaWcgTGlzdCBvZiBDb2xvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gPGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtY29sb3ItNC8jbmFtZWQtY29sb3JzPlxudmFyIG5hbWVzID0gdGlueWNvbG9yLm5hbWVzID0ge1xuICBhbGljZWJsdWU6IFwiZjBmOGZmXCIsXG4gIGFudGlxdWV3aGl0ZTogXCJmYWViZDdcIixcbiAgYXF1YTogXCIwZmZcIixcbiAgYXF1YW1hcmluZTogXCI3ZmZmZDRcIixcbiAgYXp1cmU6IFwiZjBmZmZmXCIsXG4gIGJlaWdlOiBcImY1ZjVkY1wiLFxuICBiaXNxdWU6IFwiZmZlNGM0XCIsXG4gIGJsYWNrOiBcIjAwMFwiLFxuICBibGFuY2hlZGFsbW9uZDogXCJmZmViY2RcIixcbiAgYmx1ZTogXCIwMGZcIixcbiAgYmx1ZXZpb2xldDogXCI4YTJiZTJcIixcbiAgYnJvd246IFwiYTUyYTJhXCIsXG4gIGJ1cmx5d29vZDogXCJkZWI4ODdcIixcbiAgYnVybnRzaWVubmE6IFwiZWE3ZTVkXCIsXG4gIGNhZGV0Ymx1ZTogXCI1ZjllYTBcIixcbiAgY2hhcnRyZXVzZTogXCI3ZmZmMDBcIixcbiAgY2hvY29sYXRlOiBcImQyNjkxZVwiLFxuICBjb3JhbDogXCJmZjdmNTBcIixcbiAgY29ybmZsb3dlcmJsdWU6IFwiNjQ5NWVkXCIsXG4gIGNvcm5zaWxrOiBcImZmZjhkY1wiLFxuICBjcmltc29uOiBcImRjMTQzY1wiLFxuICBjeWFuOiBcIjBmZlwiLFxuICBkYXJrYmx1ZTogXCIwMDAwOGJcIixcbiAgZGFya2N5YW46IFwiMDA4YjhiXCIsXG4gIGRhcmtnb2xkZW5yb2Q6IFwiYjg4NjBiXCIsXG4gIGRhcmtncmF5OiBcImE5YTlhOVwiLFxuICBkYXJrZ3JlZW46IFwiMDA2NDAwXCIsXG4gIGRhcmtncmV5OiBcImE5YTlhOVwiLFxuICBkYXJra2hha2k6IFwiYmRiNzZiXCIsXG4gIGRhcmttYWdlbnRhOiBcIjhiMDA4YlwiLFxuICBkYXJrb2xpdmVncmVlbjogXCI1NTZiMmZcIixcbiAgZGFya29yYW5nZTogXCJmZjhjMDBcIixcbiAgZGFya29yY2hpZDogXCI5OTMyY2NcIixcbiAgZGFya3JlZDogXCI4YjAwMDBcIixcbiAgZGFya3NhbG1vbjogXCJlOTk2N2FcIixcbiAgZGFya3NlYWdyZWVuOiBcIjhmYmM4ZlwiLFxuICBkYXJrc2xhdGVibHVlOiBcIjQ4M2Q4YlwiLFxuICBkYXJrc2xhdGVncmF5OiBcIjJmNGY0ZlwiLFxuICBkYXJrc2xhdGVncmV5OiBcIjJmNGY0ZlwiLFxuICBkYXJrdHVycXVvaXNlOiBcIjAwY2VkMVwiLFxuICBkYXJrdmlvbGV0OiBcIjk0MDBkM1wiLFxuICBkZWVwcGluazogXCJmZjE0OTNcIixcbiAgZGVlcHNreWJsdWU6IFwiMDBiZmZmXCIsXG4gIGRpbWdyYXk6IFwiNjk2OTY5XCIsXG4gIGRpbWdyZXk6IFwiNjk2OTY5XCIsXG4gIGRvZGdlcmJsdWU6IFwiMWU5MGZmXCIsXG4gIGZpcmVicmljazogXCJiMjIyMjJcIixcbiAgZmxvcmFsd2hpdGU6IFwiZmZmYWYwXCIsXG4gIGZvcmVzdGdyZWVuOiBcIjIyOGIyMlwiLFxuICBmdWNoc2lhOiBcImYwZlwiLFxuICBnYWluc2Jvcm86IFwiZGNkY2RjXCIsXG4gIGdob3N0d2hpdGU6IFwiZjhmOGZmXCIsXG4gIGdvbGQ6IFwiZmZkNzAwXCIsXG4gIGdvbGRlbnJvZDogXCJkYWE1MjBcIixcbiAgZ3JheTogXCI4MDgwODBcIixcbiAgZ3JlZW46IFwiMDA4MDAwXCIsXG4gIGdyZWVueWVsbG93OiBcImFkZmYyZlwiLFxuICBncmV5OiBcIjgwODA4MFwiLFxuICBob25leWRldzogXCJmMGZmZjBcIixcbiAgaG90cGluazogXCJmZjY5YjRcIixcbiAgaW5kaWFucmVkOiBcImNkNWM1Y1wiLFxuICBpbmRpZ286IFwiNGIwMDgyXCIsXG4gIGl2b3J5OiBcImZmZmZmMFwiLFxuICBraGFraTogXCJmMGU2OGNcIixcbiAgbGF2ZW5kZXI6IFwiZTZlNmZhXCIsXG4gIGxhdmVuZGVyYmx1c2g6IFwiZmZmMGY1XCIsXG4gIGxhd25ncmVlbjogXCI3Y2ZjMDBcIixcbiAgbGVtb25jaGlmZm9uOiBcImZmZmFjZFwiLFxuICBsaWdodGJsdWU6IFwiYWRkOGU2XCIsXG4gIGxpZ2h0Y29yYWw6IFwiZjA4MDgwXCIsXG4gIGxpZ2h0Y3lhbjogXCJlMGZmZmZcIixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IFwiZmFmYWQyXCIsXG4gIGxpZ2h0Z3JheTogXCJkM2QzZDNcIixcbiAgbGlnaHRncmVlbjogXCI5MGVlOTBcIixcbiAgbGlnaHRncmV5OiBcImQzZDNkM1wiLFxuICBsaWdodHBpbms6IFwiZmZiNmMxXCIsXG4gIGxpZ2h0c2FsbW9uOiBcImZmYTA3YVwiLFxuICBsaWdodHNlYWdyZWVuOiBcIjIwYjJhYVwiLFxuICBsaWdodHNreWJsdWU6IFwiODdjZWZhXCIsXG4gIGxpZ2h0c2xhdGVncmF5OiBcIjc4OVwiLFxuICBsaWdodHNsYXRlZ3JleTogXCI3ODlcIixcbiAgbGlnaHRzdGVlbGJsdWU6IFwiYjBjNGRlXCIsXG4gIGxpZ2h0eWVsbG93OiBcImZmZmZlMFwiLFxuICBsaW1lOiBcIjBmMFwiLFxuICBsaW1lZ3JlZW46IFwiMzJjZDMyXCIsXG4gIGxpbmVuOiBcImZhZjBlNlwiLFxuICBtYWdlbnRhOiBcImYwZlwiLFxuICBtYXJvb246IFwiODAwMDAwXCIsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IFwiNjZjZGFhXCIsXG4gIG1lZGl1bWJsdWU6IFwiMDAwMGNkXCIsXG4gIG1lZGl1bW9yY2hpZDogXCJiYTU1ZDNcIixcbiAgbWVkaXVtcHVycGxlOiBcIjkzNzBkYlwiLFxuICBtZWRpdW1zZWFncmVlbjogXCIzY2IzNzFcIixcbiAgbWVkaXVtc2xhdGVibHVlOiBcIjdiNjhlZVwiLFxuICBtZWRpdW1zcHJpbmdncmVlbjogXCIwMGZhOWFcIixcbiAgbWVkaXVtdHVycXVvaXNlOiBcIjQ4ZDFjY1wiLFxuICBtZWRpdW12aW9sZXRyZWQ6IFwiYzcxNTg1XCIsXG4gIG1pZG5pZ2h0Ymx1ZTogXCIxOTE5NzBcIixcbiAgbWludGNyZWFtOiBcImY1ZmZmYVwiLFxuICBtaXN0eXJvc2U6IFwiZmZlNGUxXCIsXG4gIG1vY2Nhc2luOiBcImZmZTRiNVwiLFxuICBuYXZham93aGl0ZTogXCJmZmRlYWRcIixcbiAgbmF2eTogXCIwMDAwODBcIixcbiAgb2xkbGFjZTogXCJmZGY1ZTZcIixcbiAgb2xpdmU6IFwiODA4MDAwXCIsXG4gIG9saXZlZHJhYjogXCI2YjhlMjNcIixcbiAgb3JhbmdlOiBcImZmYTUwMFwiLFxuICBvcmFuZ2VyZWQ6IFwiZmY0NTAwXCIsXG4gIG9yY2hpZDogXCJkYTcwZDZcIixcbiAgcGFsZWdvbGRlbnJvZDogXCJlZWU4YWFcIixcbiAgcGFsZWdyZWVuOiBcIjk4ZmI5OFwiLFxuICBwYWxldHVycXVvaXNlOiBcImFmZWVlZVwiLFxuICBwYWxldmlvbGV0cmVkOiBcImRiNzA5M1wiLFxuICBwYXBheWF3aGlwOiBcImZmZWZkNVwiLFxuICBwZWFjaHB1ZmY6IFwiZmZkYWI5XCIsXG4gIHBlcnU6IFwiY2Q4NTNmXCIsXG4gIHBpbms6IFwiZmZjMGNiXCIsXG4gIHBsdW06IFwiZGRhMGRkXCIsXG4gIHBvd2RlcmJsdWU6IFwiYjBlMGU2XCIsXG4gIHB1cnBsZTogXCI4MDAwODBcIixcbiAgcmViZWNjYXB1cnBsZTogXCI2NjMzOTlcIixcbiAgcmVkOiBcImYwMFwiLFxuICByb3N5YnJvd246IFwiYmM4ZjhmXCIsXG4gIHJveWFsYmx1ZTogXCI0MTY5ZTFcIixcbiAgc2FkZGxlYnJvd246IFwiOGI0NTEzXCIsXG4gIHNhbG1vbjogXCJmYTgwNzJcIixcbiAgc2FuZHlicm93bjogXCJmNGE0NjBcIixcbiAgc2VhZ3JlZW46IFwiMmU4YjU3XCIsXG4gIHNlYXNoZWxsOiBcImZmZjVlZVwiLFxuICBzaWVubmE6IFwiYTA1MjJkXCIsXG4gIHNpbHZlcjogXCJjMGMwYzBcIixcbiAgc2t5Ymx1ZTogXCI4N2NlZWJcIixcbiAgc2xhdGVibHVlOiBcIjZhNWFjZFwiLFxuICBzbGF0ZWdyYXk6IFwiNzA4MDkwXCIsXG4gIHNsYXRlZ3JleTogXCI3MDgwOTBcIixcbiAgc25vdzogXCJmZmZhZmFcIixcbiAgc3ByaW5nZ3JlZW46IFwiMDBmZjdmXCIsXG4gIHN0ZWVsYmx1ZTogXCI0NjgyYjRcIixcbiAgdGFuOiBcImQyYjQ4Y1wiLFxuICB0ZWFsOiBcIjAwODA4MFwiLFxuICB0aGlzdGxlOiBcImQ4YmZkOFwiLFxuICB0b21hdG86IFwiZmY2MzQ3XCIsXG4gIHR1cnF1b2lzZTogXCI0MGUwZDBcIixcbiAgdmlvbGV0OiBcImVlODJlZVwiLFxuICB3aGVhdDogXCJmNWRlYjNcIixcbiAgd2hpdGU6IFwiZmZmXCIsXG4gIHdoaXRlc21va2U6IFwiZjVmNWY1XCIsXG4gIHllbGxvdzogXCJmZjBcIixcbiAgeWVsbG93Z3JlZW46IFwiOWFjZDMyXCJcbn07XG5cbi8vIE1ha2UgaXQgZWFzeSB0byBhY2Nlc3MgY29sb3JzIHZpYSBgaGV4TmFtZXNbaGV4XWBcbnZhciBoZXhOYW1lcyA9IHRpbnljb2xvci5oZXhOYW1lcyA9IGZsaXAobmFtZXMpO1xuXG4vLyBVdGlsaXRpZXNcbi8vIC0tLS0tLS0tLVxuXG4vLyBgeyAnbmFtZTEnOiAndmFsMScgfWAgYmVjb21lcyBgeyAndmFsMSc6ICduYW1lMScgfWBcbmZ1bmN0aW9uIGZsaXAobykge1xuICB2YXIgZmxpcHBlZCA9IHt9O1xuICBmb3IgKHZhciBpIGluIG8pIHtcbiAgICBpZiAoby5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgZmxpcHBlZFtvW2ldXSA9IGk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmbGlwcGVkO1xufVxuXG4vLyBSZXR1cm4gYSB2YWxpZCBhbHBoYSB2YWx1ZSBbMCwxXSB3aXRoIGFsbCBpbnZhbGlkIHZhbHVlcyBiZWluZyBzZXQgdG8gMVxuZnVuY3Rpb24gYm91bmRBbHBoYShhKSB7XG4gIGEgPSBwYXJzZUZsb2F0KGEpO1xuICBpZiAoaXNOYU4oYSkgfHwgYSA8IDAgfHwgYSA+IDEpIHtcbiAgICBhID0gMTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy8gVGFrZSBpbnB1dCBmcm9tIFswLCBuXSBhbmQgcmV0dXJuIGl0IGFzIFswLCAxXVxuZnVuY3Rpb24gYm91bmQwMShuLCBtYXgpIHtcbiAgaWYgKGlzT25lUG9pbnRaZXJvKG4pKSBuID0gXCIxMDAlXCI7XG4gIHZhciBwcm9jZXNzUGVyY2VudCA9IGlzUGVyY2VudGFnZShuKTtcbiAgbiA9IE1hdGgubWluKG1heCwgTWF0aC5tYXgoMCwgcGFyc2VGbG9hdChuKSkpO1xuXG4gIC8vIEF1dG9tYXRpY2FsbHkgY29udmVydCBwZXJjZW50YWdlIGludG8gbnVtYmVyXG4gIGlmIChwcm9jZXNzUGVyY2VudCkge1xuICAgIG4gPSBwYXJzZUludChuICogbWF4LCAxMCkgLyAxMDA7XG4gIH1cblxuICAvLyBIYW5kbGUgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzXG4gIGlmIChNYXRoLmFicyhuIC0gbWF4KSA8IDAuMDAwMDAxKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICAvLyBDb252ZXJ0IGludG8gWzAsIDFdIHJhbmdlIGlmIGl0IGlzbid0IGFscmVhZHlcbiAgcmV0dXJuIG4gJSBtYXggLyBwYXJzZUZsb2F0KG1heCk7XG59XG5cbi8vIEZvcmNlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMVxuZnVuY3Rpb24gY2xhbXAwMSh2YWwpIHtcbiAgcmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHZhbCkpO1xufVxuXG4vLyBQYXJzZSBhIGJhc2UtMTYgaGV4IHZhbHVlIGludG8gYSBiYXNlLTEwIGludGVnZXJcbmZ1bmN0aW9uIHBhcnNlSW50RnJvbUhleCh2YWwpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHZhbCwgMTYpO1xufVxuXG4vLyBOZWVkIHRvIGhhbmRsZSAxLjAgYXMgMTAwJSwgc2luY2Ugb25jZSBpdCBpcyBhIG51bWJlciwgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGl0IGFuZCAxXG4vLyA8aHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83NDIyMDcyL2phdmFzY3JpcHQtaG93LXRvLWRldGVjdC1udW1iZXItYXMtYS1kZWNpbWFsLWluY2x1ZGluZy0xLTA+XG5mdW5jdGlvbiBpc09uZVBvaW50WmVybyhuKSB7XG4gIHJldHVybiB0eXBlb2YgbiA9PSBcInN0cmluZ1wiICYmIG4uaW5kZXhPZihcIi5cIikgIT0gLTEgJiYgcGFyc2VGbG9hdChuKSA9PT0gMTtcbn1cblxuLy8gQ2hlY2sgdG8gc2VlIGlmIHN0cmluZyBwYXNzZWQgaW4gaXMgYSBwZXJjZW50YWdlXG5mdW5jdGlvbiBpc1BlcmNlbnRhZ2Uobikge1xuICByZXR1cm4gdHlwZW9mIG4gPT09IFwic3RyaW5nXCIgJiYgbi5pbmRleE9mKFwiJVwiKSAhPSAtMTtcbn1cblxuLy8gRm9yY2UgYSBoZXggdmFsdWUgdG8gaGF2ZSAyIGNoYXJhY3RlcnNcbmZ1bmN0aW9uIHBhZDIoYykge1xuICByZXR1cm4gYy5sZW5ndGggPT0gMSA/IFwiMFwiICsgYyA6IFwiXCIgKyBjO1xufVxuXG4vLyBSZXBsYWNlIGEgZGVjaW1hbCB3aXRoIGl0J3MgcGVyY2VudGFnZSB2YWx1ZVxuZnVuY3Rpb24gY29udmVydFRvUGVyY2VudGFnZShuKSB7XG4gIGlmIChuIDw9IDEpIHtcbiAgICBuID0gbiAqIDEwMCArIFwiJVwiO1xuICB9XG4gIHJldHVybiBuO1xufVxuXG4vLyBDb252ZXJ0cyBhIGRlY2ltYWwgdG8gYSBoZXggdmFsdWVcbmZ1bmN0aW9uIGNvbnZlcnREZWNpbWFsVG9IZXgoZCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGQpICogMjU1KS50b1N0cmluZygxNik7XG59XG4vLyBDb252ZXJ0cyBhIGhleCB2YWx1ZSB0byBhIGRlY2ltYWxcbmZ1bmN0aW9uIGNvbnZlcnRIZXhUb0RlY2ltYWwoaCkge1xuICByZXR1cm4gcGFyc2VJbnRGcm9tSGV4KGgpIC8gMjU1O1xufVxudmFyIG1hdGNoZXJzID0gZnVuY3Rpb24gKCkge1xuICAvLyA8aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy12YWx1ZXMvI2ludGVnZXJzPlxuICB2YXIgQ1NTX0lOVEVHRVIgPSBcIlstXFxcXCtdP1xcXFxkKyU/XCI7XG5cbiAgLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdmFsdWVzLyNudW1iZXItdmFsdWU+XG4gIHZhciBDU1NfTlVNQkVSID0gXCJbLVxcXFwrXT9cXFxcZCpcXFxcLlxcXFxkKyU/XCI7XG5cbiAgLy8gQWxsb3cgcG9zaXRpdmUvbmVnYXRpdmUgaW50ZWdlci9udW1iZXIuICBEb24ndCBjYXB0dXJlIHRoZSBlaXRoZXIvb3IsIGp1c3QgdGhlIGVudGlyZSBvdXRjb21lLlxuICB2YXIgQ1NTX1VOSVQgPSBcIig/OlwiICsgQ1NTX05VTUJFUiArIFwiKXwoPzpcIiArIENTU19JTlRFR0VSICsgXCIpXCI7XG5cbiAgLy8gQWN0dWFsIG1hdGNoaW5nLlxuICAvLyBQYXJlbnRoZXNlcyBhbmQgY29tbWFzIGFyZSBvcHRpb25hbCwgYnV0IG5vdCByZXF1aXJlZC5cbiAgLy8gV2hpdGVzcGFjZSBjYW4gdGFrZSB0aGUgcGxhY2Ugb2YgY29tbWFzIG9yIG9wZW5pbmcgcGFyZW5cbiAgdmFyIFBFUk1JU1NJVkVfTUFUQ0gzID0gXCJbXFxcXHN8XFxcXChdKyhcIiArIENTU19VTklUICsgXCIpWyx8XFxcXHNdKyhcIiArIENTU19VTklUICsgXCIpWyx8XFxcXHNdKyhcIiArIENTU19VTklUICsgXCIpXFxcXHMqXFxcXCk/XCI7XG4gIHZhciBQRVJNSVNTSVZFX01BVENINCA9IFwiW1xcXFxzfFxcXFwoXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVssfFxcXFxzXSsoXCIgKyBDU1NfVU5JVCArIFwiKVxcXFxzKlxcXFwpP1wiO1xuICByZXR1cm4ge1xuICAgIENTU19VTklUOiBuZXcgUmVnRXhwKENTU19VTklUKSxcbiAgICByZ2I6IG5ldyBSZWdFeHAoXCJyZ2JcIiArIFBFUk1JU1NJVkVfTUFUQ0gzKSxcbiAgICByZ2JhOiBuZXcgUmVnRXhwKFwicmdiYVwiICsgUEVSTUlTU0lWRV9NQVRDSDQpLFxuICAgIGhzbDogbmV3IFJlZ0V4cChcImhzbFwiICsgUEVSTUlTU0lWRV9NQVRDSDMpLFxuICAgIGhzbGE6IG5ldyBSZWdFeHAoXCJoc2xhXCIgKyBQRVJNSVNTSVZFX01BVENINCksXG4gICAgaHN2OiBuZXcgUmVnRXhwKFwiaHN2XCIgKyBQRVJNSVNTSVZFX01BVENIMyksXG4gICAgaHN2YTogbmV3IFJlZ0V4cChcImhzdmFcIiArIFBFUk1JU1NJVkVfTUFUQ0g0KSxcbiAgICBoZXgzOiAvXiM/KFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8sXG4gICAgaGV4NjogL14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvLFxuICAgIGhleDQ6IC9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8sXG4gICAgaGV4ODogL14jPyhbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkL1xuICB9O1xufSgpO1xuXG4vLyBgaXNWYWxpZENTU1VuaXRgXG4vLyBUYWtlIGluIGEgc2luZ2xlIHN0cmluZyAvIG51bWJlciBhbmQgY2hlY2sgdG8gc2VlIGlmIGl0IGxvb2tzIGxpa2UgYSBDU1MgdW5pdFxuLy8gKHNlZSBgbWF0Y2hlcnNgIGFib3ZlIGZvciBkZWZpbml0aW9uKS5cbmZ1bmN0aW9uIGlzVmFsaWRDU1NVbml0KGNvbG9yKSB7XG4gIHJldHVybiAhIW1hdGNoZXJzLkNTU19VTklULmV4ZWMoY29sb3IpO1xufVxuXG4vLyBgc3RyaW5nSW5wdXRUb09iamVjdGBcbi8vIFBlcm1pc3NpdmUgc3RyaW5nIHBhcnNpbmcuICBUYWtlIGluIGEgbnVtYmVyIG9mIGZvcm1hdHMsIGFuZCBvdXRwdXQgYW4gb2JqZWN0XG4vLyBiYXNlZCBvbiBkZXRlY3RlZCBmb3JtYXQuICBSZXR1cm5zIGB7IHIsIGcsIGIgfWAgb3IgYHsgaCwgcywgbCB9YCBvciBgeyBoLCBzLCB2fWBcbmZ1bmN0aW9uIHN0cmluZ0lucHV0VG9PYmplY3QoY29sb3IpIHtcbiAgY29sb3IgPSBjb2xvci5yZXBsYWNlKHRyaW1MZWZ0LCBcIlwiKS5yZXBsYWNlKHRyaW1SaWdodCwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgdmFyIG5hbWVkID0gZmFsc2U7XG4gIGlmIChuYW1lc1tjb2xvcl0pIHtcbiAgICBjb2xvciA9IG5hbWVzW2NvbG9yXTtcbiAgICBuYW1lZCA9IHRydWU7XG4gIH0gZWxzZSBpZiAoY29sb3IgPT0gXCJ0cmFuc3BhcmVudFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IDAsXG4gICAgICBnOiAwLFxuICAgICAgYjogMCxcbiAgICAgIGE6IDAsXG4gICAgICBmb3JtYXQ6IFwibmFtZVwiXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRyeSB0byBtYXRjaCBzdHJpbmcgaW5wdXQgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucy5cbiAgLy8gS2VlcCBtb3N0IG9mIHRoZSBudW1iZXIgYm91bmRpbmcgb3V0IG9mIHRoaXMgZnVuY3Rpb24gLSBkb24ndCB3b3JyeSBhYm91dCBbMCwxXSBvciBbMCwxMDBdIG9yIFswLDM2MF1cbiAgLy8gSnVzdCByZXR1cm4gYW4gb2JqZWN0IGFuZCBsZXQgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIGhhbmRsZSB0aGF0LlxuICAvLyBUaGlzIHdheSB0aGUgcmVzdWx0IHdpbGwgYmUgdGhlIHNhbWUgd2hldGhlciB0aGUgdGlueWNvbG9yIGlzIGluaXRpYWxpemVkIHdpdGggc3RyaW5nIG9yIG9iamVjdC5cbiAgdmFyIG1hdGNoO1xuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5yZ2IuZXhlYyhjb2xvcikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcjogbWF0Y2hbMV0sXG4gICAgICBnOiBtYXRjaFsyXSxcbiAgICAgIGI6IG1hdGNoWzNdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5yZ2JhLmV4ZWMoY29sb3IpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IG1hdGNoWzFdLFxuICAgICAgZzogbWF0Y2hbMl0sXG4gICAgICBiOiBtYXRjaFszXSxcbiAgICAgIGE6IG1hdGNoWzRdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oc2wuZXhlYyhjb2xvcikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaDogbWF0Y2hbMV0sXG4gICAgICBzOiBtYXRjaFsyXSxcbiAgICAgIGw6IG1hdGNoWzNdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oc2xhLmV4ZWMoY29sb3IpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGg6IG1hdGNoWzFdLFxuICAgICAgczogbWF0Y2hbMl0sXG4gICAgICBsOiBtYXRjaFszXSxcbiAgICAgIGE6IG1hdGNoWzRdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oc3YuZXhlYyhjb2xvcikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaDogbWF0Y2hbMV0sXG4gICAgICBzOiBtYXRjaFsyXSxcbiAgICAgIHY6IG1hdGNoWzNdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oc3ZhLmV4ZWMoY29sb3IpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGg6IG1hdGNoWzFdLFxuICAgICAgczogbWF0Y2hbMl0sXG4gICAgICB2OiBtYXRjaFszXSxcbiAgICAgIGE6IG1hdGNoWzRdXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oZXg4LmV4ZWMoY29sb3IpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSksXG4gICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0pLFxuICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdKSxcbiAgICAgIGE6IGNvbnZlcnRIZXhUb0RlY2ltYWwobWF0Y2hbNF0pLFxuICAgICAgZm9ybWF0OiBuYW1lZCA/IFwibmFtZVwiIDogXCJoZXg4XCJcbiAgICB9O1xuICB9XG4gIGlmIChtYXRjaCA9IG1hdGNoZXJzLmhleDYuZXhlYyhjb2xvcikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzFdKSxcbiAgICAgIGc6IHBhcnNlSW50RnJvbUhleChtYXRjaFsyXSksXG4gICAgICBiOiBwYXJzZUludEZyb21IZXgobWF0Y2hbM10pLFxuICAgICAgZm9ybWF0OiBuYW1lZCA/IFwibmFtZVwiIDogXCJoZXhcIlxuICAgIH07XG4gIH1cbiAgaWYgKG1hdGNoID0gbWF0Y2hlcnMuaGV4NC5leGVjKGNvbG9yKSkge1xuICAgIHJldHVybiB7XG4gICAgICByOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMV0gKyBcIlwiICsgbWF0Y2hbMV0pLFxuICAgICAgZzogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzJdICsgXCJcIiArIG1hdGNoWzJdKSxcbiAgICAgIGI6IHBhcnNlSW50RnJvbUhleChtYXRjaFszXSArIFwiXCIgKyBtYXRjaFszXSksXG4gICAgICBhOiBjb252ZXJ0SGV4VG9EZWNpbWFsKG1hdGNoWzRdICsgXCJcIiArIG1hdGNoWzRdKSxcbiAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4OFwiXG4gICAgfTtcbiAgfVxuICBpZiAobWF0Y2ggPSBtYXRjaGVycy5oZXgzLmV4ZWMoY29sb3IpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHBhcnNlSW50RnJvbUhleChtYXRjaFsxXSArIFwiXCIgKyBtYXRjaFsxXSksXG4gICAgICBnOiBwYXJzZUludEZyb21IZXgobWF0Y2hbMl0gKyBcIlwiICsgbWF0Y2hbMl0pLFxuICAgICAgYjogcGFyc2VJbnRGcm9tSGV4KG1hdGNoWzNdICsgXCJcIiArIG1hdGNoWzNdKSxcbiAgICAgIGZvcm1hdDogbmFtZWQgPyBcIm5hbWVcIiA6IFwiaGV4XCJcbiAgICB9O1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlV0NBRzJQYXJtcyhwYXJtcykge1xuICAvLyByZXR1cm4gdmFsaWQgV0NBRzIgcGFybXMgZm9yIGlzUmVhZGFibGUuXG4gIC8vIElmIGlucHV0IHBhcm1zIGFyZSBpbnZhbGlkLCByZXR1cm4ge1wibGV2ZWxcIjpcIkFBXCIsIFwic2l6ZVwiOlwic21hbGxcIn1cbiAgdmFyIGxldmVsLCBzaXplO1xuICBwYXJtcyA9IHBhcm1zIHx8IHtcbiAgICBsZXZlbDogXCJBQVwiLFxuICAgIHNpemU6IFwic21hbGxcIlxuICB9O1xuICBsZXZlbCA9IChwYXJtcy5sZXZlbCB8fCBcIkFBXCIpLnRvVXBwZXJDYXNlKCk7XG4gIHNpemUgPSAocGFybXMuc2l6ZSB8fCBcInNtYWxsXCIpLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChsZXZlbCAhPT0gXCJBQVwiICYmIGxldmVsICE9PSBcIkFBQVwiKSB7XG4gICAgbGV2ZWwgPSBcIkFBXCI7XG4gIH1cbiAgaWYgKHNpemUgIT09IFwic21hbGxcIiAmJiBzaXplICE9PSBcImxhcmdlXCIpIHtcbiAgICBzaXplID0gXCJzbWFsbFwiO1xuICB9XG4gIHJldHVybiB7XG4gICAgbGV2ZWw6IGxldmVsLFxuICAgIHNpemU6IHNpemVcbiAgfTtcbn1cblxuZXhwb3J0IHsgdGlueWNvbG9yIGFzIGRlZmF1bHQgfTtcbiIsIiFmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuZGF5anNfcGx1Z2luX2N1c3RvbVBhcnNlRm9ybWF0PXQoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgZT17TFRTOlwiaDptbTpzcyBBXCIsTFQ6XCJoOm1tIEFcIixMOlwiTU0vREQvWVlZWVwiLExMOlwiTU1NTSBELCBZWVlZXCIsTExMOlwiTU1NTSBELCBZWVlZIGg6bW0gQVwiLExMTEw6XCJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBXCJ9LHQ9LyhcXFtbXltdKlxcXSl8KFstXzovLiwoKVxcc10rKXwoQXxhfFF8WVlZWXxZWT98d3c/fE1NP00/TT98RG98REQ/fGhoP3xISD98bW0/fHNzP3xTezEsM318enxaWj8pL2csbj0vXFxkLyxyPS9cXGRcXGQvLGk9L1xcZFxcZD8vLG89L1xcZCpbXi1fOi8sKClcXHNcXGRdKy8scz17fSxhPWZ1bmN0aW9uKGUpe3JldHVybihlPStlKSsoZT42OD8xOTAwOjJlMyl9O3ZhciBmPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzW2VdPSt0fX0saD1bL1srLV1cXGRcXGQ6PyhcXGRcXGQpP3xaLyxmdW5jdGlvbihlKXsodGhpcy56b25lfHwodGhpcy56b25lPXt9KSkub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiAwO2lmKFwiWlwiPT09ZSlyZXR1cm4gMDt2YXIgdD1lLm1hdGNoKC8oWystXXxcXGRcXGQpL2cpLG49NjAqdFsxXSsoK3RbMl18fDApO3JldHVybiAwPT09bj8wOlwiK1wiPT09dFswXT8tbjpufShlKX1dLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9c1tlXTtyZXR1cm4gdCYmKHQuaW5kZXhPZj90OnQucy5jb25jYXQodC5mKSl9LGQ9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPXMubWVyaWRpZW07aWYocil7Zm9yKHZhciBpPTE7aTw9MjQ7aSs9MSlpZihlLmluZGV4T2YocihpLDAsdCkpPi0xKXtuPWk+MTI7YnJlYWt9fWVsc2Ugbj1lPT09KHQ/XCJwbVwiOlwiUE1cIik7cmV0dXJuIG59LGM9e0E6W28sZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249ZChlLCExKX1dLGE6W28sZnVuY3Rpb24oZSl7dGhpcy5hZnRlcm5vb249ZChlLCEwKX1dLFE6W24sZnVuY3Rpb24oZSl7dGhpcy5tb250aD0zKihlLTEpKzF9XSxTOltuLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwMCorZX1dLFNTOltyLGZ1bmN0aW9uKGUpe3RoaXMubWlsbGlzZWNvbmRzPTEwKitlfV0sU1NTOlsvXFxkezN9LyxmdW5jdGlvbihlKXt0aGlzLm1pbGxpc2Vjb25kcz0rZX1dLHM6W2ksZihcInNlY29uZHNcIildLHNzOltpLGYoXCJzZWNvbmRzXCIpXSxtOltpLGYoXCJtaW51dGVzXCIpXSxtbTpbaSxmKFwibWludXRlc1wiKV0sSDpbaSxmKFwiaG91cnNcIildLGg6W2ksZihcImhvdXJzXCIpXSxISDpbaSxmKFwiaG91cnNcIildLGhoOltpLGYoXCJob3Vyc1wiKV0sRDpbaSxmKFwiZGF5XCIpXSxERDpbcixmKFwiZGF5XCIpXSxEbzpbbyxmdW5jdGlvbihlKXt2YXIgdD1zLm9yZGluYWwsbj1lLm1hdGNoKC9cXGQrLyk7aWYodGhpcy5kYXk9blswXSx0KWZvcih2YXIgcj0xO3I8PTMxO3IrPTEpdChyKS5yZXBsYWNlKC9cXFt8XFxdL2csXCJcIik9PT1lJiYodGhpcy5kYXk9cil9XSx3OltpLGYoXCJ3ZWVrXCIpXSx3dzpbcixmKFwid2Vla1wiKV0sTTpbaSxmKFwibW9udGhcIildLE1NOltyLGYoXCJtb250aFwiKV0sTU1NOltvLGZ1bmN0aW9uKGUpe3ZhciB0PXUoXCJtb250aHNcIiksbj0odShcIm1vbnRoc1Nob3J0XCIpfHx0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoMCwzKX0pKSkuaW5kZXhPZihlKSsxO2lmKG48MSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5tb250aD1uJTEyfHxufV0sTU1NTTpbbyxmdW5jdGlvbihlKXt2YXIgdD11KFwibW9udGhzXCIpLmluZGV4T2YoZSkrMTtpZih0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9dCUxMnx8dH1dLFk6Wy9bKy1dP1xcZCsvLGYoXCJ5ZWFyXCIpXSxZWTpbcixmdW5jdGlvbihlKXt0aGlzLnllYXI9YShlKX1dLFlZWVk6Wy9cXGR7NH0vLGYoXCJ5ZWFyXCIpXSxaOmgsWlo6aH07ZnVuY3Rpb24gbChuKXt2YXIgcixpO3I9bixpPXMmJnMuZm9ybWF0cztmb3IodmFyIG89KG49ci5yZXBsYWNlKC8oXFxbW15cXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csKGZ1bmN0aW9uKHQsbixyKXt2YXIgbz1yJiZyLnRvVXBwZXJDYXNlKCk7cmV0dXJuIG58fGlbcl18fGVbcl18fGlbb10ucmVwbGFjZSgvKFxcW1teXFxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLChmdW5jdGlvbihlLHQsbil7cmV0dXJuIHR8fG4uc2xpY2UoMSl9KSl9KSkpLm1hdGNoKHQpLGE9by5sZW5ndGgsZj0wO2Y8YTtmKz0xKXt2YXIgaD1vW2ZdLHU9Y1toXSxkPXUmJnVbMF0sbD11JiZ1WzFdO29bZl09bD97cmVnZXg6ZCxwYXJzZXI6bH06aC5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX1yZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXt9LG49MCxyPTA7bjxhO24rPTEpe3ZhciBpPW9bbl07aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkpcis9aS5sZW5ndGg7ZWxzZXt2YXIgcz1pLnJlZ2V4LGY9aS5wYXJzZXIsaD1lLnNsaWNlKHIpLHU9cy5leGVjKGgpWzBdO2YuY2FsbCh0LHUpLGU9ZS5yZXBsYWNlKHUsXCJcIil9fXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmFmdGVybm9vbjtpZih2b2lkIDAhPT10KXt2YXIgbj1lLmhvdXJzO3Q/bjwxMiYmKGUuaG91cnMrPTEyKToxMj09PW4mJihlLmhvdXJzPTApLGRlbGV0ZSBlLmFmdGVybm9vbn19KHQpLHR9fXJldHVybiBmdW5jdGlvbihlLHQsbil7bi5wLmN1c3RvbVBhcnNlRm9ybWF0PSEwLGUmJmUucGFyc2VUd29EaWdpdFllYXImJihhPWUucGFyc2VUd29EaWdpdFllYXIpO3ZhciByPXQucHJvdG90eXBlLGk9ci5wYXJzZTtyLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0ZSxyPWUudXRjLG89ZS5hcmdzO3RoaXMuJHU9cjt2YXIgYT1vWzFdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgZj0hMD09PW9bMl0saD0hMD09PW9bM10sdT1mfHxoLGQ9b1syXTtoJiYoZD1vWzJdKSxzPXRoaXMuJGxvY2FsZSgpLCFmJiZkJiYocz1uLkxzW2RdKSx0aGlzLiRkPWZ1bmN0aW9uKGUsdCxuLHIpe3RyeXtpZihbXCJ4XCIsXCJYXCJdLmluZGV4T2YodCk+LTEpcmV0dXJuIG5ldyBEYXRlKChcIlhcIj09PXQ/MWUzOjEpKmUpO3ZhciBpPWwodCkoZSksbz1pLnllYXIscz1pLm1vbnRoLGE9aS5kYXksZj1pLmhvdXJzLGg9aS5taW51dGVzLHU9aS5zZWNvbmRzLGQ9aS5taWxsaXNlY29uZHMsYz1pLnpvbmUsbT1pLndlZWssTT1uZXcgRGF0ZSxZPWF8fChvfHxzPzE6TS5nZXREYXRlKCkpLHA9b3x8TS5nZXRGdWxsWWVhcigpLHY9MDtvJiYhc3x8KHY9cz4wP3MtMTpNLmdldE1vbnRoKCkpO3ZhciBELHc9Znx8MCxnPWh8fDAseT11fHwwLEw9ZHx8MDtyZXR1cm4gYz9uZXcgRGF0ZShEYXRlLlVUQyhwLHYsWSx3LGcseSxMKzYwKmMub2Zmc2V0KjFlMykpOm4/bmV3IERhdGUoRGF0ZS5VVEMocCx2LFksdyxnLHksTCkpOihEPW5ldyBEYXRlKHAsdixZLHcsZyx5LEwpLG0mJihEPXIoRCkud2VlayhtKS50b0RhdGUoKSksRCl9Y2F0Y2goZSl7cmV0dXJuIG5ldyBEYXRlKFwiXCIpfX0odCxhLHIsbiksdGhpcy5pbml0KCksZCYmITAhPT1kJiYodGhpcy4kTD10aGlzLmxvY2FsZShkKS4kTCksdSYmdCE9dGhpcy5mb3JtYXQoYSkmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKSxzPXt9fWVsc2UgaWYoYSBpbnN0YW5jZW9mIEFycmF5KWZvcih2YXIgYz1hLmxlbmd0aCxtPTE7bTw9YzttKz0xKXtvWzFdPWFbbS0xXTt2YXIgTT1uLmFwcGx5KHRoaXMsbyk7aWYoTS5pc1ZhbGlkKCkpe3RoaXMuJGQ9TS4kZCx0aGlzLiRMPU0uJEwsdGhpcy5pbml0KCk7YnJlYWt9bT09PWMmJih0aGlzLiRkPW5ldyBEYXRlKFwiXCIpKX1lbHNlIGkuY2FsbCh0aGlzLGUpfX19KSk7IiwiIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqc19wbHVnaW5fdGltZXpvbmU9ZSgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PXt5ZWFyOjAsbW9udGg6MSxkYXk6Mixob3VyOjMsbWludXRlOjQsc2Vjb25kOjV9LGU9e307cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgcixhPWZ1bmN0aW9uKHQsbixpKXt2b2lkIDA9PT1pJiYoaT17fSk7dmFyIG89bmV3IERhdGUodCkscj1mdW5jdGlvbih0LG4pe3ZvaWQgMD09PW4mJihuPXt9KTt2YXIgaT1uLnRpbWVab25lTmFtZXx8XCJzaG9ydFwiLG89dCtcInxcIitpLHI9ZVtvXTtyZXR1cm4gcnx8KHI9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1VU1wiLHtob3VyMTI6ITEsdGltZVpvbmU6dCx5ZWFyOlwibnVtZXJpY1wiLG1vbnRoOlwiMi1kaWdpdFwiLGRheTpcIjItZGlnaXRcIixob3VyOlwiMi1kaWdpdFwiLG1pbnV0ZTpcIjItZGlnaXRcIixzZWNvbmQ6XCIyLWRpZ2l0XCIsdGltZVpvbmVOYW1lOml9KSxlW29dPXIpLHJ9KG4saSk7cmV0dXJuIHIuZm9ybWF0VG9QYXJ0cyhvKX0sdT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT1hKGUsbikscj1bXSx1PTA7dTxpLmxlbmd0aDt1Kz0xKXt2YXIgZj1pW3VdLHM9Zi50eXBlLG09Zi52YWx1ZSxjPXRbc107Yz49MCYmKHJbY109cGFyc2VJbnQobSwxMCkpfXZhciBkPXJbM10sbD0yND09PWQ/MDpkLGg9clswXStcIi1cIityWzFdK1wiLVwiK3JbMl0rXCIgXCIrbCtcIjpcIityWzRdK1wiOlwiK3JbNV0rXCI6MDAwXCIsdj0rZTtyZXR1cm4oby51dGMoaCkudmFsdWVPZigpLSh2LT12JTFlMykpLzZlNH0sZj1pLnByb3RvdHlwZTtmLnR6PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9cik7dmFyIG4saT10aGlzLnV0Y09mZnNldCgpLGE9dGhpcy50b0RhdGUoKSx1PWEudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLHt0aW1lWm9uZTp0fSksZj1NYXRoLnJvdW5kKChhLW5ldyBEYXRlKHUpKS8xZTMvNjApLHM9MTUqLU1hdGgucm91bmQoYS5nZXRUaW1lem9uZU9mZnNldCgpLzE1KS1mO2lmKCFOdW1iZXIocykpbj10aGlzLnV0Y09mZnNldCgwLGUpO2Vsc2UgaWYobj1vKHUse2xvY2FsZTp0aGlzLiRMfSkuJHNldChcIm1pbGxpc2Vjb25kXCIsdGhpcy4kbXMpLnV0Y09mZnNldChzLCEwKSxlKXt2YXIgbT1uLnV0Y09mZnNldCgpO249bi5hZGQoaS1tLFwibWludXRlXCIpfXJldHVybiBuLiR4LiR0aW1lem9uZT10LG59LGYub2Zmc2V0TmFtZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLiR4LiR0aW1lem9uZXx8by50ei5ndWVzcygpLG49YSh0aGlzLnZhbHVlT2YoKSxlLHt0aW1lWm9uZU5hbWU6dH0pLmZpbmQoKGZ1bmN0aW9uKHQpe3JldHVyblwidGltZXpvbmVuYW1lXCI9PT10LnR5cGUudG9Mb3dlckNhc2UoKX0pKTtyZXR1cm4gbiYmbi52YWx1ZX07dmFyIHM9Zi5zdGFydE9mO2Yuc3RhcnRPZj1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLiR4fHwhdGhpcy4keC4kdGltZXpvbmUpcmV0dXJuIHMuY2FsbCh0aGlzLHQsZSk7dmFyIG49byh0aGlzLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3M6U1NTXCIpLHtsb2NhbGU6dGhpcy4kTH0pO3JldHVybiBzLmNhbGwobix0LGUpLnR6KHRoaXMuJHguJHRpbWV6b25lLCEwKX0sby50ej1mdW5jdGlvbih0LGUsbil7dmFyIGk9biYmZSxhPW58fGV8fHIsZj11KCtvKCksYSk7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpcmV0dXJuIG8odCkudHooYSk7dmFyIHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXQtNjAqZSoxZTMsbz11KGksbik7aWYoZT09PW8pcmV0dXJuW2ksZV07dmFyIHI9dShpLT02MCooby1lKSoxZTMsbik7cmV0dXJuIG89PT1yP1tpLG9dOlt0LTYwKk1hdGgubWluKG8scikqMWUzLE1hdGgubWF4KG8scildfShvLnV0Yyh0LGkpLnZhbHVlT2YoKSxmLGEpLG09c1swXSxjPXNbMV0sZD1vKG0pLnV0Y09mZnNldChjKTtyZXR1cm4gZC4keC4kdGltZXpvbmU9YSxkfSxvLnR6Lmd1ZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZX0sby50ei5zZXREZWZhdWx0PWZ1bmN0aW9uKHQpe3I9dH19fSkpOyIsIiFmdW5jdGlvbih0LGkpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWkoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGkpOih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anNfcGx1Z2luX3V0Yz1pKCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9XCJtaW51dGVcIixpPS9bKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9nLGU9LyhbKy1dfFxcZFxcZCkvZztyZXR1cm4gZnVuY3Rpb24ocyxmLG4pe3ZhciB1PWYucHJvdG90eXBlO24udXRjPWZ1bmN0aW9uKHQpe3ZhciBpPXtkYXRlOnQsdXRjOiEwLGFyZ3M6YXJndW1lbnRzfTtyZXR1cm4gbmV3IGYoaSl9LHUudXRjPWZ1bmN0aW9uKGkpe3ZhciBlPW4odGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiEwfSk7cmV0dXJuIGk/ZS5hZGQodGhpcy51dGNPZmZzZXQoKSx0KTplfSx1LmxvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiExfSl9O3ZhciBvPXUucGFyc2U7dS5wYXJzZT1mdW5jdGlvbih0KXt0LnV0YyYmKHRoaXMuJHU9ITApLHRoaXMuJHV0aWxzKCkudSh0LiRvZmZzZXQpfHwodGhpcy4kb2Zmc2V0PXQuJG9mZnNldCksby5jYWxsKHRoaXMsdCl9O3ZhciByPXUuaW5pdDt1LmluaXQ9ZnVuY3Rpb24oKXtpZih0aGlzLiR1KXt2YXIgdD10aGlzLiRkO3RoaXMuJHk9dC5nZXRVVENGdWxsWWVhcigpLHRoaXMuJE09dC5nZXRVVENNb250aCgpLHRoaXMuJEQ9dC5nZXRVVENEYXRlKCksdGhpcy4kVz10LmdldFVUQ0RheSgpLHRoaXMuJEg9dC5nZXRVVENIb3VycygpLHRoaXMuJG09dC5nZXRVVENNaW51dGVzKCksdGhpcy4kcz10LmdldFVUQ1NlY29uZHMoKSx0aGlzLiRtcz10LmdldFVUQ01pbGxpc2Vjb25kcygpfWVsc2Ugci5jYWxsKHRoaXMpfTt2YXIgYT11LnV0Y09mZnNldDt1LnV0Y09mZnNldD1mdW5jdGlvbihzLGYpe3ZhciBuPXRoaXMuJHV0aWxzKCkudTtpZihuKHMpKXJldHVybiB0aGlzLiR1PzA6bih0aGlzLiRvZmZzZXQpP2EuY2FsbCh0aGlzKTp0aGlzLiRvZmZzZXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHMmJihzPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PVwiXCIpO3ZhciBzPXQubWF0Y2goaSk7aWYoIXMpcmV0dXJuIG51bGw7dmFyIGY9KFwiXCIrc1swXSkubWF0Y2goZSl8fFtcIi1cIiwwLDBdLG49ZlswXSx1PTYwKitmWzFdKyArZlsyXTtyZXR1cm4gMD09PXU/MDpcIitcIj09PW4/dTotdX0ocyksbnVsbD09PXMpKXJldHVybiB0aGlzO3ZhciB1PU1hdGguYWJzKHMpPD0xNj82MCpzOnMsbz10aGlzO2lmKGYpcmV0dXJuIG8uJG9mZnNldD11LG8uJHU9MD09PXMsbztpZigwIT09cyl7dmFyIHI9dGhpcy4kdT90aGlzLnRvRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk6LTEqdGhpcy51dGNPZmZzZXQoKTsobz10aGlzLmxvY2FsKCkuYWRkKHUrcix0KSkuJG9mZnNldD11LG8uJHguJGxvY2FsT2Zmc2V0PXJ9ZWxzZSBvPXRoaXMudXRjKCk7cmV0dXJuIG99O3ZhciBoPXUuZm9ybWF0O3UuZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBpPXR8fCh0aGlzLiR1P1wiWVlZWS1NTS1ERFRISDptbTpzc1taXVwiOlwiXCIpO3JldHVybiBoLmNhbGwodGhpcyxpKX0sdS52YWx1ZU9mPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kdXRpbHMoKS51KHRoaXMuJG9mZnNldCk/MDp0aGlzLiRvZmZzZXQrKHRoaXMuJHguJGxvY2FsT2Zmc2V0fHx0aGlzLiRkLmdldFRpbWV6b25lT2Zmc2V0KCkpO3JldHVybiB0aGlzLiRkLnZhbHVlT2YoKS02ZTQqdH0sdS5pc1VUQz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy4kdX0sdS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCl9LHUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b1VUQ1N0cmluZygpfTt2YXIgbD11LnRvRGF0ZTt1LnRvRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm5cInNcIj09PXQmJnRoaXMuJG9mZnNldD9uKHRoaXMuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzczpTU1NcIikpLnRvRGF0ZSgpOmwuY2FsbCh0aGlzKX07dmFyIGM9dS5kaWZmO3UuZGlmZj1mdW5jdGlvbih0LGksZSl7aWYodCYmdGhpcy4kdT09PXQuJHUpcmV0dXJuIGMuY2FsbCh0aGlzLHQsaSxlKTt2YXIgcz10aGlzLmxvY2FsKCksZj1uKHQpLmxvY2FsKCk7cmV0dXJuIGMuY2FsbChzLGYsaSxlKX19fSkpOyJdLCJuYW1lcyI6WyJOVU1CRVJfQ0hBUl9SRSIsIlNUUl9TUExJVFRFUlMiLCJpc1VwcGVyY2FzZSIsImNoYXIiLCJzcGxpdEJ5Q2FzZSIsInN0ciIsInNlcGFyYXRvcnMiLCJzcGxpdHRlcnMiLCJwYXJ0cyIsImJ1ZmYiLCJwcmV2aW91c1VwcGVyIiwicHJldmlvdXNTcGxpdHRlciIsImlzU3BsaXR0ZXIiLCJpc1VwcGVyIiwibGFzdENoYXIiLCJ1cHBlckZpcnN0IiwibG93ZXJGaXJzdCIsInBhc2NhbENhc2UiLCJvcHRzIiwicCIsImNhbWVsQ2FzZSIsInRvcCIsImJvdHRvbSIsInJpZ2h0IiwibGVmdCIsImF1dG8iLCJiYXNlUGxhY2VtZW50cyIsInN0YXJ0IiwiZW5kIiwiY2xpcHBpbmdQYXJlbnRzIiwidmlld3BvcnQiLCJwb3BwZXIiLCJyZWZlcmVuY2UiLCJ2YXJpYXRpb25QbGFjZW1lbnRzIiwiYWNjIiwicGxhY2VtZW50IiwicGxhY2VtZW50cyIsImJlZm9yZVJlYWQiLCJyZWFkIiwiYWZ0ZXJSZWFkIiwiYmVmb3JlTWFpbiIsIm1haW4iLCJhZnRlck1haW4iLCJiZWZvcmVXcml0ZSIsIndyaXRlIiwiYWZ0ZXJXcml0ZSIsIm1vZGlmaWVyUGhhc2VzIiwiZ2V0Tm9kZU5hbWUiLCJlbGVtZW50IiwiZ2V0V2luZG93Iiwibm9kZSIsIm93bmVyRG9jdW1lbnQiLCJpc0VsZW1lbnQiLCJPd25FbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzU2hhZG93Um9vdCIsImFwcGx5U3R5bGVzIiwiX3JlZiIsInN0YXRlIiwibmFtZSIsInN0eWxlIiwiYXR0cmlidXRlcyIsInZhbHVlIiwiZWZmZWN0IiwiX3JlZjIiLCJpbml0aWFsU3R5bGVzIiwic3R5bGVQcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJhdHRyaWJ1dGUiLCJhcHBseVN0eWxlcyQxIiwiZ2V0QmFzZVBsYWNlbWVudCIsIm1heCIsIm1pbiIsInJvdW5kIiwiZ2V0VUFTdHJpbmciLCJ1YURhdGEiLCJpdGVtIiwiaXNMYXlvdXRWaWV3cG9ydCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImluY2x1ZGVTY2FsZSIsImlzRml4ZWRTdHJhdGVneSIsImNsaWVudFJlY3QiLCJzY2FsZVgiLCJzY2FsZVkiLCJ2aXN1YWxWaWV3cG9ydCIsImFkZFZpc3VhbE9mZnNldHMiLCJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0IiwiZ2V0TGF5b3V0UmVjdCIsImNvbnRhaW5zIiwicGFyZW50IiwiY2hpbGQiLCJyb290Tm9kZSIsIm5leHQiLCJnZXRDb21wdXRlZFN0eWxlIiwiaXNUYWJsZUVsZW1lbnQiLCJnZXREb2N1bWVudEVsZW1lbnQiLCJnZXRQYXJlbnROb2RlIiwiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsImdldENvbnRhaW5pbmdCbG9jayIsImlzRmlyZWZveCIsImlzSUUiLCJlbGVtZW50Q3NzIiwiY3VycmVudE5vZGUiLCJjc3MiLCJnZXRPZmZzZXRQYXJlbnQiLCJ3aW5kb3ciLCJvZmZzZXRQYXJlbnQiLCJnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQiLCJ3aXRoaW4iLCJtYXRoTWF4IiwibWF0aE1pbiIsIndpdGhpbk1heENsYW1wIiwidiIsImdldEZyZXNoU2lkZU9iamVjdCIsIm1lcmdlUGFkZGluZ09iamVjdCIsInBhZGRpbmdPYmplY3QiLCJleHBhbmRUb0hhc2hNYXAiLCJrZXlzIiwiaGFzaE1hcCIsImtleSIsInRvUGFkZGluZ09iamVjdCIsInBhZGRpbmciLCJhcnJvdyIsIl9zdGF0ZSRtb2RpZmllcnNEYXRhJCIsIm9wdGlvbnMiLCJhcnJvd0VsZW1lbnQiLCJwb3BwZXJPZmZzZXRzIiwiYmFzZVBsYWNlbWVudCIsImF4aXMiLCJpc1ZlcnRpY2FsIiwibGVuIiwiYXJyb3dSZWN0IiwibWluUHJvcCIsIm1heFByb3AiLCJlbmREaWZmIiwic3RhcnREaWZmIiwiYXJyb3dPZmZzZXRQYXJlbnQiLCJjbGllbnRTaXplIiwiY2VudGVyVG9SZWZlcmVuY2UiLCJjZW50ZXIiLCJvZmZzZXQiLCJheGlzUHJvcCIsIl9vcHRpb25zJGVsZW1lbnQiLCJhcnJvdyQxIiwiZ2V0VmFyaWF0aW9uIiwidW5zZXRTaWRlcyIsInJvdW5kT2Zmc2V0c0J5RFBSIiwid2luIiwiZHByIiwibWFwVG9TdHlsZXMiLCJfT2JqZWN0JGFzc2lnbjIiLCJwb3BwZXJSZWN0IiwidmFyaWF0aW9uIiwib2Zmc2V0cyIsInBvc2l0aW9uIiwiZ3B1QWNjZWxlcmF0aW9uIiwiYWRhcHRpdmUiLCJyb3VuZE9mZnNldHMiLCJpc0ZpeGVkIiwiX29mZnNldHMkeCIsIl9vZmZzZXRzJHkiLCJfcmVmMyIsImhhc1giLCJoYXNZIiwic2lkZVgiLCJzaWRlWSIsImhlaWdodFByb3AiLCJ3aWR0aFByb3AiLCJvZmZzZXRZIiwib2Zmc2V0WCIsImNvbW1vblN0eWxlcyIsIl9yZWY0IiwiX09iamVjdCRhc3NpZ24iLCJjb21wdXRlU3R5bGVzIiwiX3JlZjUiLCJfb3B0aW9ucyRncHVBY2NlbGVyYXQiLCJfb3B0aW9ucyRhZGFwdGl2ZSIsIl9vcHRpb25zJHJvdW5kT2Zmc2V0cyIsImNvbXB1dGVTdHlsZXMkMSIsInBhc3NpdmUiLCJpbnN0YW5jZSIsIl9vcHRpb25zJHNjcm9sbCIsInNjcm9sbCIsIl9vcHRpb25zJHJlc2l6ZSIsInJlc2l6ZSIsInNjcm9sbFBhcmVudHMiLCJzY3JvbGxQYXJlbnQiLCJldmVudExpc3RlbmVycyIsImhhc2giLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsIm1hdGNoZWQiLCJnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCIsImdldFdpbmRvd1Njcm9sbCIsInNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJnZXRXaW5kb3dTY3JvbGxCYXJYIiwiZ2V0Vmlld3BvcnRSZWN0Iiwic3RyYXRlZ3kiLCJodG1sIiwibGF5b3V0Vmlld3BvcnQiLCJnZXREb2N1bWVudFJlY3QiLCJfZWxlbWVudCRvd25lckRvY3VtZW4iLCJ3aW5TY3JvbGwiLCJib2R5IiwiaXNTY3JvbGxQYXJlbnQiLCJfZ2V0Q29tcHV0ZWRTdHlsZSIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwiZ2V0U2Nyb2xsUGFyZW50IiwibGlzdFNjcm9sbFBhcmVudHMiLCJsaXN0IiwiaXNCb2R5IiwidGFyZ2V0IiwidXBkYXRlZExpc3QiLCJyZWN0VG9DbGllbnRSZWN0IiwicmVjdCIsImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUiLCJjbGlwcGluZ1BhcmVudCIsImdldENsaXBwaW5nUGFyZW50cyIsImNhbkVzY2FwZUNsaXBwaW5nIiwiY2xpcHBlckVsZW1lbnQiLCJnZXRDbGlwcGluZ1JlY3QiLCJib3VuZGFyeSIsInJvb3RCb3VuZGFyeSIsIm1haW5DbGlwcGluZ1BhcmVudHMiLCJmaXJzdENsaXBwaW5nUGFyZW50IiwiY2xpcHBpbmdSZWN0IiwiYWNjUmVjdCIsImNvbXB1dGVPZmZzZXRzIiwiY29tbW9uWCIsImNvbW1vblkiLCJtYWluQXhpcyIsImRldGVjdE92ZXJmbG93IiwiX29wdGlvbnMiLCJfb3B0aW9ucyRwbGFjZW1lbnQiLCJfb3B0aW9ucyRzdHJhdGVneSIsIl9vcHRpb25zJGJvdW5kYXJ5IiwiX29wdGlvbnMkcm9vdEJvdW5kYXJ5IiwiX29wdGlvbnMkZWxlbWVudENvbnRlIiwiZWxlbWVudENvbnRleHQiLCJfb3B0aW9ucyRhbHRCb3VuZGFyeSIsImFsdEJvdW5kYXJ5IiwiX29wdGlvbnMkcGFkZGluZyIsImFsdENvbnRleHQiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJyZWZlcmVuY2VDbGllbnRSZWN0IiwicG9wcGVyQ2xpZW50UmVjdCIsImVsZW1lbnRDbGllbnRSZWN0Iiwib3ZlcmZsb3dPZmZzZXRzIiwib2Zmc2V0RGF0YSIsIm11bHRpcGx5IiwiY29tcHV0ZUF1dG9QbGFjZW1lbnQiLCJmbGlwVmFyaWF0aW9ucyIsIl9vcHRpb25zJGFsbG93ZWRBdXRvUCIsImFsbG93ZWRBdXRvUGxhY2VtZW50cyIsImFsbFBsYWNlbWVudHMiLCJhbGxvd2VkUGxhY2VtZW50cyIsIm92ZXJmbG93cyIsImEiLCJiIiwiZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMiLCJvcHBvc2l0ZVBsYWNlbWVudCIsImZsaXAiLCJfb3B0aW9ucyRtYWluQXhpcyIsImNoZWNrTWFpbkF4aXMiLCJfb3B0aW9ucyRhbHRBeGlzIiwiY2hlY2tBbHRBeGlzIiwic3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIiwiX29wdGlvbnMkZmxpcFZhcmlhdGlvIiwicHJlZmVycmVkUGxhY2VtZW50IiwiaXNCYXNlUGxhY2VtZW50IiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwicmVmZXJlbmNlUmVjdCIsImNoZWNrc01hcCIsIm1ha2VGYWxsYmFja0NoZWNrcyIsImZpcnN0Rml0dGluZ1BsYWNlbWVudCIsImkiLCJfYmFzZVBsYWNlbWVudCIsImlzU3RhcnRWYXJpYXRpb24iLCJtYWluVmFyaWF0aW9uU2lkZSIsImFsdFZhcmlhdGlvblNpZGUiLCJjaGVja3MiLCJjaGVjayIsIm51bWJlck9mQ2hlY2tzIiwiX2xvb3AiLCJfaSIsImZpdHRpbmdQbGFjZW1lbnQiLCJfcmV0IiwiZmxpcCQyIiwiZ2V0U2lkZU9mZnNldHMiLCJwcmV2ZW50ZWRPZmZzZXRzIiwiaXNBbnlTaWRlRnVsbHlDbGlwcGVkIiwic2lkZSIsImhpZGUiLCJyZWZlcmVuY2VPdmVyZmxvdyIsInBvcHBlckFsdE92ZXJmbG93IiwicmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzIiwicG9wcGVyRXNjYXBlT2Zmc2V0cyIsImlzUmVmZXJlbmNlSGlkZGVuIiwiaGFzUG9wcGVyRXNjYXBlZCIsImhpZGUkMSIsImRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZIiwicmVjdHMiLCJpbnZlcnREaXN0YW5jZSIsInNraWRkaW5nIiwiZGlzdGFuY2UiLCJfb3B0aW9ucyRvZmZzZXQiLCJkYXRhIiwiX2RhdGEkc3RhdGUkcGxhY2VtZW50Iiwib2Zmc2V0JDEiLCJwb3BwZXJPZmZzZXRzJDEiLCJnZXRBbHRBeGlzIiwicHJldmVudE92ZXJmbG93IiwiX29wdGlvbnMkdGV0aGVyIiwidGV0aGVyIiwiX29wdGlvbnMkdGV0aGVyT2Zmc2V0IiwidGV0aGVyT2Zmc2V0IiwiYWx0QXhpcyIsInRldGhlck9mZnNldFZhbHVlIiwibm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlIiwib2Zmc2V0TW9kaWZpZXJTdGF0ZSIsIl9vZmZzZXRNb2RpZmllclN0YXRlJCIsIm1haW5TaWRlIiwiYWx0U2lkZSIsImFkZGl0aXZlIiwibWluTGVuIiwibWF4TGVuIiwiYXJyb3dQYWRkaW5nT2JqZWN0IiwiYXJyb3dQYWRkaW5nTWluIiwiYXJyb3dQYWRkaW5nTWF4IiwiYXJyb3dMZW4iLCJtaW5PZmZzZXQiLCJtYXhPZmZzZXQiLCJjbGllbnRPZmZzZXQiLCJvZmZzZXRNb2RpZmllclZhbHVlIiwidGV0aGVyTWluIiwidGV0aGVyTWF4IiwicHJldmVudGVkT2Zmc2V0IiwiX29mZnNldE1vZGlmaWVyU3RhdGUkMiIsIl9tYWluU2lkZSIsIl9hbHRTaWRlIiwiX29mZnNldCIsIl9sZW4iLCJfbWluIiwiX21heCIsImlzT3JpZ2luU2lkZSIsIl9vZmZzZXRNb2RpZmllclZhbHVlIiwiX3RldGhlck1pbiIsIl90ZXRoZXJNYXgiLCJfcHJldmVudGVkT2Zmc2V0IiwicHJldmVudE92ZXJmbG93JDEiLCJnZXRIVE1MRWxlbWVudFNjcm9sbCIsImdldE5vZGVTY3JvbGwiLCJpc0VsZW1lbnRTY2FsZWQiLCJnZXRDb21wb3NpdGVSZWN0IiwiZWxlbWVudE9yVmlydHVhbEVsZW1lbnQiLCJpc09mZnNldFBhcmVudEFuRWxlbWVudCIsIm9mZnNldFBhcmVudElzU2NhbGVkIiwiZG9jdW1lbnRFbGVtZW50Iiwib3JkZXIiLCJtb2RpZmllcnMiLCJtYXAiLCJ2aXNpdGVkIiwicmVzdWx0IiwibW9kaWZpZXIiLCJzb3J0IiwicmVxdWlyZXMiLCJkZXAiLCJkZXBNb2RpZmllciIsIm9yZGVyTW9kaWZpZXJzIiwib3JkZXJlZE1vZGlmaWVycyIsInBoYXNlIiwiZGVib3VuY2UiLCJmbiIsInBlbmRpbmciLCJyZXNvbHZlIiwibWVyZ2VCeU5hbWUiLCJtZXJnZWQiLCJjdXJyZW50IiwiZXhpc3RpbmciLCJERUZBVUxUX09QVElPTlMiLCJhcmVWYWxpZEVsZW1lbnRzIiwiYXJncyIsIl9rZXkiLCJwb3BwZXJHZW5lcmF0b3IiLCJnZW5lcmF0b3JPcHRpb25zIiwiX2dlbmVyYXRvck9wdGlvbnMiLCJfZ2VuZXJhdG9yT3B0aW9ucyRkZWYiLCJkZWZhdWx0TW9kaWZpZXJzIiwiX2dlbmVyYXRvck9wdGlvbnMkZGVmMiIsImRlZmF1bHRPcHRpb25zIiwiZWZmZWN0Q2xlYW51cEZucyIsImlzRGVzdHJveWVkIiwic2V0T3B0aW9uc0FjdGlvbiIsImNsZWFudXBNb2RpZmllckVmZmVjdHMiLCJydW5Nb2RpZmllckVmZmVjdHMiLCJfc3RhdGUkZWxlbWVudHMiLCJpbmRleCIsIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZSIsIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIiLCJfcmVmJG9wdGlvbnMiLCJjbGVhbnVwRm4iLCJub29wRm4iLCJjcmVhdGVQb3BwZXIiLCJfdHlwZW9mIiwib2JqIiwidHJpbUxlZnQiLCJ0cmltUmlnaHQiLCJ0aW55Y29sb3IiLCJjb2xvciIsInJnYiIsImlucHV0VG9SR0IiLCJSc1JHQiIsIkdzUkdCIiwiQnNSR0IiLCJSIiwiRyIsIkIiLCJib3VuZEFscGhhIiwiaHN2IiwicmdiVG9Ic3YiLCJoIiwicyIsImhzbCIsInJnYlRvSHNsIiwibCIsImFsbG93M0NoYXIiLCJyZ2JUb0hleCIsImFsbG93NENoYXIiLCJyZ2JhVG9IZXgiLCJib3VuZDAxIiwiaGV4TmFtZXMiLCJzZWNvbmRDb2xvciIsImhleDhTdHJpbmciLCJyZ2JhVG9BcmdiSGV4Iiwic2Vjb25kSGV4OFN0cmluZyIsImdyYWRpZW50VHlwZSIsImZvcm1hdCIsImZvcm1hdFNldCIsImZvcm1hdHRlZFN0cmluZyIsImhhc0FscGhhIiwibmVlZHNBbHBoYUZvcm1hdCIsIl9saWdodGVuIiwiX2JyaWdodGVuIiwiX2RhcmtlbiIsIl9kZXNhdHVyYXRlIiwiX3NhdHVyYXRlIiwiX2dyZXlzY2FsZSIsIl9zcGluIiwiX2FuYWxvZ291cyIsIl9jb21wbGVtZW50IiwiX21vbm9jaHJvbWF0aWMiLCJfc3BsaXRjb21wbGVtZW50IiwicG9seWFkIiwibmV3Q29sb3IiLCJjb252ZXJ0VG9QZXJjZW50YWdlIiwib2siLCJzdHJpbmdJbnB1dFRvT2JqZWN0IiwiaXNWYWxpZENTU1VuaXQiLCJyZ2JUb1JnYiIsImhzdlRvUmdiIiwiaHNsVG9SZ2IiLCJyIiwiZyIsImQiLCJodWUycmdiIiwicSIsInQiLCJmIiwibW9kIiwiaGV4IiwicGFkMiIsImNvbnZlcnREZWNpbWFsVG9IZXgiLCJjb2xvcjEiLCJjb2xvcjIiLCJhbW91bnQiLCJjbGFtcDAxIiwiaHVlIiwibnVtYmVyIiwic3RlcCIsInJlc3VsdHMiLCJzbGljZXMiLCJwYXJ0IiwicmV0IiwibW9kaWZpY2F0aW9uIiwicmdiMSIsInJnYjIiLCJyZ2JhIiwiYzEiLCJjMiIsIndjYWcyIiwicmVhZGFiaWxpdHkiLCJ3Y2FnMlBhcm1zIiwib3V0IiwidmFsaWRhdGVXQ0FHMlBhcm1zIiwiYmFzZUNvbG9yIiwiY29sb3JMaXN0IiwiYmVzdENvbG9yIiwiYmVzdFNjb3JlIiwiaW5jbHVkZUZhbGxiYWNrQ29sb3JzIiwibGV2ZWwiLCJzaXplIiwibmFtZXMiLCJvIiwiZmxpcHBlZCIsIm4iLCJpc09uZVBvaW50WmVybyIsInByb2Nlc3NQZXJjZW50IiwiaXNQZXJjZW50YWdlIiwidmFsIiwicGFyc2VJbnRGcm9tSGV4IiwiYyIsImNvbnZlcnRIZXhUb0RlY2ltYWwiLCJtYXRjaGVycyIsIkNTU19JTlRFR0VSIiwiQ1NTX05VTUJFUiIsIkNTU19VTklUIiwiUEVSTUlTU0lWRV9NQVRDSDMiLCJQRVJNSVNTSVZFX01BVENINCIsIm5hbWVkIiwibWF0Y2giLCJwYXJtcyIsImUiLCJtb2R1bGUiLCJ0aGlzIiwidSIsIm0iLCJNIiwiWSIsIkQiLCJ3IiwiTCJdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU1BLEtBQWlCLE1BQ2pCQyxLQUFnQixDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFDekMsU0FBU0MsR0FBWUMsSUFBTyxJQUFJO0FBQzlCLE1BQUksQ0FBQUgsR0FBZSxLQUFLRyxDQUFJO0FBRzVCLFdBQU9BLE1BQVNBLEVBQUssWUFBVztBQUNsQztBQUNBLFNBQVNDLEdBQVlDLEdBQUtDLEdBQVk7QUFDcEMsUUFBTUMsSUFBMEJOLElBQzFCTyxJQUFRLENBQUE7QUFDZCxNQUFJLENBQUNILEtBQU8sT0FBT0EsS0FBUTtBQUN6QixXQUFPRztBQUVULE1BQUlDLElBQU8sSUFDUEMsR0FDQUM7QUFDSixhQUFXUixLQUFRRSxHQUFLO0FBQ3RCLFVBQU1PLElBQWFMLEVBQVUsU0FBU0osQ0FBSTtBQUMxQyxRQUFJUyxNQUFlLElBQU07QUFDdkIsTUFBQUosRUFBTSxLQUFLQyxDQUFJLEdBQ2ZBLElBQU8sSUFDUEMsSUFBZ0I7QUFDaEI7QUFBQSxJQUNGO0FBQ0EsVUFBTUcsSUFBVVgsR0FBWUMsQ0FBSTtB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RUFDWCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxnQkFBZ0I7QUFBQSxFQUNoQixVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixlQUFlO0FBQUEsRUFDZixVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixnQkFBZ0I7QUFBQSxFQUNoQixZQUFZO0FBQUEsRUFDWixZQUFZO0FBQUEsRUFDWixTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixjQUFjO0FBQUEsRUFDZCxlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixhQUFhO0FBQUEsRUFDYixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixhQUFhO0FBQUEsRUFDYixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixlQUFlO0FBQUEsRUFDZixXQUFXO0FBQUEsRUFDWCxjQUFjO0FBQUEsRUFDZCxXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxzQkFBc0I7QUFBQSxFQUN0QixXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixlQUFlO0FBQUEsRUFDZixjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixnQkFBZ0I7QUFBQSxFQUNoQixnQkFBZ0I7QUFBQSxFQUNoQixhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixrQkFBa0I7QUFBQSxFQUNsQixZQUFZO0FBQUEsRUFDWixjQUFjO0FBQUEsRUFDZCxjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixpQkFBaUI7QUFBQSxFQUNqQixtQkFBbUI7QUFBQSxFQUNuQixpQkFBaUI7QUFBQSxFQUNqQixpQkFBaUI7QUFBQSxFQUNqQixjQUFjO0FBQUEsRUFDZCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQUEsRUFDVixhQUFhO0FBQUEsRUFDYixNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixlQUFlO0FBQUEsRUFDZixXQUFXO0FBQUEsRUFDWCxlQUFlO0FBQUEsRUFDZixlQUFlO0FBQUEsRUFDZixZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixZQUFZO0FBQUEsRUFDWixRQUFRO0FBQUEsRUFDUixlQUFlO0FBQUEsRUFDZixLQUFLO0FBQUEsRUFDTCxXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxXQUFX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QUFBSyxRQUFBQSxFQUFFLE9BQUssU0FBUzFELEdBQUUvTCxHQUFFc1AsR0FBRTtBQUFDLGNBQUd2RCxLQUFHLEtBQUssT0FBS0EsRUFBRSxHQUFHLFFBQU80QyxFQUFFLEtBQUssTUFBSzVDLEdBQUUvTCxHQUFFc1AsQ0FBQztBQUFFLGNBQUlwRyxJQUFFLEtBQUssTUFBSyxHQUFHOEMsSUFBRXFDLEVBQUV0QyxDQUFDLEVBQUU7QUFBUSxpQkFBTzRDLEVBQUUsS0FBS3pGLEdBQUU4QyxHQUFFaE0sR0FBRXNQLENBQUM7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUFBLElBQUMsQ0FBQztBQUFBOzs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4XX0=