@getopenpay/openpay-js-react 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.js +157 -154
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -387,9 +387,50 @@ const Ko = n.object({
|
|
|
387
387
|
} catch (t) {
|
|
388
388
|
return console.error("Invalid CDE connection check:", t), !1;
|
|
389
389
|
}
|
|
390
|
-
}, ci = (e, t) => !!e && t
|
|
390
|
+
}, ci = (e, t) => !!e && t;
|
|
391
|
+
function li(e, t) {
|
|
392
|
+
var r = Object.setPrototypeOf;
|
|
393
|
+
r ? r(e, t) : e.__proto__ = t;
|
|
394
|
+
}
|
|
395
|
+
function ui(e, t) {
|
|
396
|
+
t === void 0 && (t = e.constructor);
|
|
397
|
+
var r = Error.captureStackTrace;
|
|
398
|
+
r && r(e, t);
|
|
399
|
+
}
|
|
400
|
+
var di = /* @__PURE__ */ function() {
|
|
401
|
+
var e = function(t, r) {
|
|
402
|
+
return e = Object.setPrototypeOf || {
|
|
403
|
+
__proto__: []
|
|
404
|
+
} instanceof Array && function(o, i) {
|
|
405
|
+
o.__proto__ = i;
|
|
406
|
+
} || function(o, i) {
|
|
407
|
+
for (var a in i)
|
|
408
|
+
Object.prototype.hasOwnProperty.call(i, a) && (o[a] = i[a]);
|
|
409
|
+
}, e(t, r);
|
|
410
|
+
};
|
|
411
|
+
return function(t, r) {
|
|
412
|
+
if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
|
|
413
|
+
e(t, r);
|
|
414
|
+
function o() {
|
|
415
|
+
this.constructor = t;
|
|
416
|
+
}
|
|
417
|
+
t.prototype = r === null ? Object.create(r) : (o.prototype = r.prototype, new o());
|
|
418
|
+
};
|
|
419
|
+
}(), pi = function(e) {
|
|
420
|
+
di(t, e);
|
|
421
|
+
function t(r, o) {
|
|
422
|
+
var i = this.constructor, a = e.call(this, r, o) || this;
|
|
423
|
+
return Object.defineProperty(a, "name", {
|
|
424
|
+
value: i.name,
|
|
425
|
+
enumerable: !1,
|
|
426
|
+
configurable: !0
|
|
427
|
+
}), li(a, i.prototype), ui(a), a;
|
|
428
|
+
}
|
|
429
|
+
return t;
|
|
430
|
+
}(Error);
|
|
431
|
+
const v = (e) => n.nullable(e.optional());
|
|
391
432
|
n.string().trim().min(1, { message: "Cannot be blank" });
|
|
392
|
-
const
|
|
433
|
+
const mi = n.object({
|
|
393
434
|
cde_response_type: n.literal("error"),
|
|
394
435
|
message: n.string(),
|
|
395
436
|
headers: n.record(n.string(), n.string()).optional()
|
|
@@ -411,44 +452,44 @@ const Qr = n.object({
|
|
|
411
452
|
billing_interval: v(n.string()),
|
|
412
453
|
billing_interval_count: v(n.number().int()),
|
|
413
454
|
quantity: n.number().int()
|
|
414
|
-
}),
|
|
455
|
+
}), hi = n.record(n.string(), n.any()), yi = n.object({
|
|
415
456
|
name: n.string(),
|
|
416
|
-
settings: v(
|
|
457
|
+
settings: v(hi)
|
|
417
458
|
}), De = n.object({
|
|
418
459
|
provider: n.string(),
|
|
419
460
|
processor_name: v(n.string()),
|
|
420
461
|
metadata: v(n.record(n.string(), n.any()))
|
|
421
|
-
}),
|
|
462
|
+
}), fi = n.object({
|
|
422
463
|
quantity: n.number()
|
|
423
|
-
}),
|
|
464
|
+
}), _i = n.object({
|
|
424
465
|
id: v(n.string()),
|
|
425
466
|
billing_interval: v(n.string()),
|
|
426
467
|
billing_interval_count: v(n.number().int()),
|
|
427
|
-
subscription_items: n.array(
|
|
468
|
+
subscription_items: n.array(fi),
|
|
428
469
|
trial_start: v(n.string()),
|
|
429
470
|
trial_end: v(n.string())
|
|
430
471
|
}), Jr = n.object({
|
|
431
472
|
amount_atom: n.number()
|
|
432
|
-
}),
|
|
473
|
+
}), gi = n.object({
|
|
433
474
|
amount_atom: n.number(),
|
|
434
475
|
amount_atom_considering_discount_applied: n.number(),
|
|
435
476
|
currency: n.string(),
|
|
436
477
|
discount_amount_atoms: n.array(Jr),
|
|
437
478
|
subscription_item_id: n.string()
|
|
438
|
-
}),
|
|
479
|
+
}), vi = n.object({
|
|
439
480
|
coupon: Qr
|
|
440
|
-
}),
|
|
481
|
+
}), bi = n.object({
|
|
441
482
|
currency: n.string(),
|
|
442
|
-
discounts: n.array(
|
|
483
|
+
discounts: n.array(vi),
|
|
443
484
|
hosted_invoice_url: v(n.string()),
|
|
444
|
-
lines: n.array(
|
|
485
|
+
lines: n.array(gi),
|
|
445
486
|
remaining_amount_atom: n.number(),
|
|
446
487
|
tax_amount_atom: n.number(),
|
|
447
488
|
total_amount_atom: n.number(),
|
|
448
489
|
total_discount_amount_atoms: n.array(Jr)
|
|
449
490
|
}), nr = n.object({
|
|
450
|
-
created: n.array(
|
|
451
|
-
invoices: n.array(
|
|
491
|
+
created: n.array(_i),
|
|
492
|
+
invoices: n.array(bi),
|
|
452
493
|
processors_used: v(n.array(n.string()))
|
|
453
494
|
}), Wr = n.object({
|
|
454
495
|
preview: nr,
|
|
@@ -462,7 +503,7 @@ const Qr = n.object({
|
|
|
462
503
|
line_items: n.array(Zr),
|
|
463
504
|
amount_subtotal_atom: n.number().int(),
|
|
464
505
|
amount_total_atom: n.number().int(),
|
|
465
|
-
brand:
|
|
506
|
+
brand: yi,
|
|
466
507
|
subs_preview: v(Wr),
|
|
467
508
|
// Null in setup mode
|
|
468
509
|
methods_available: n.array(De)
|
|
@@ -475,12 +516,12 @@ const Qr = n.object({
|
|
|
475
516
|
mode: n.enum(["payment", "subscription"]),
|
|
476
517
|
currency: n.string()
|
|
477
518
|
}).extend(or.shape)
|
|
478
|
-
]),
|
|
519
|
+
]), wi = n.object({
|
|
479
520
|
status: n.literal("complete")
|
|
480
|
-
}),
|
|
521
|
+
}), Ei = n.object({
|
|
481
522
|
status: n.literal("expired")
|
|
482
523
|
});
|
|
483
|
-
n.union([Xr,
|
|
524
|
+
n.union([Xr, wi, Ei]);
|
|
484
525
|
n.object({
|
|
485
526
|
logo: n.string(),
|
|
486
527
|
icon: n.string(),
|
|
@@ -516,26 +557,26 @@ n.object({
|
|
|
516
557
|
id: n.string(),
|
|
517
558
|
return_url: n.string()
|
|
518
559
|
});
|
|
519
|
-
const
|
|
560
|
+
const Pi = n.object({
|
|
520
561
|
type: n.string(),
|
|
521
562
|
loc: n.array(n.string()),
|
|
522
563
|
msg: n.string(),
|
|
523
564
|
url: n.string()
|
|
524
565
|
});
|
|
525
|
-
n.array(
|
|
526
|
-
const
|
|
566
|
+
n.array(Pi);
|
|
567
|
+
const Ci = n.object({
|
|
527
568
|
new_customer_email: n.string().optional(),
|
|
528
569
|
new_customer_address: n.record(n.string(), n.any()).optional(),
|
|
529
570
|
new_customer_first_name: n.string().optional(),
|
|
530
571
|
new_customer_last_name: n.string().optional()
|
|
531
|
-
}),
|
|
572
|
+
}), Si = n.object({
|
|
532
573
|
price_id: n.string(),
|
|
533
574
|
quantity: n.number().int()
|
|
534
|
-
}),
|
|
535
|
-
line_items: n.array(
|
|
575
|
+
}), ki = n.object({
|
|
576
|
+
line_items: n.array(Si),
|
|
536
577
|
promotion_code: n.string().optional(),
|
|
537
578
|
displayed_total_amount_atom: n.number().int()
|
|
538
|
-
}),
|
|
579
|
+
}), Ai = n.object({
|
|
539
580
|
processor_specific_metadata: v(n.record(n.string(), n.any()))
|
|
540
581
|
});
|
|
541
582
|
n.object({
|
|
@@ -544,8 +585,8 @@ n.object({
|
|
|
544
585
|
existing_cc_pm_id: n.string().optional(),
|
|
545
586
|
their_existing_pm_id: n.string().optional(),
|
|
546
587
|
use_pay_first_flow: n.boolean().optional(),
|
|
547
|
-
pay_first_flow_cart_info:
|
|
548
|
-
}).extend(
|
|
588
|
+
pay_first_flow_cart_info: ki.optional()
|
|
589
|
+
}).extend(Ci.shape).extend(Ai.shape);
|
|
549
590
|
const tn = n.object({
|
|
550
591
|
required_user_actions: n.array(n.record(n.string(), n.any())),
|
|
551
592
|
checkout_attempt_id: v(n.string())
|
|
@@ -563,7 +604,7 @@ n.object({
|
|
|
563
604
|
// This is optional in CDE, but not in OJS moving forward
|
|
564
605
|
payment_route_id: v(n.string())
|
|
565
606
|
});
|
|
566
|
-
const
|
|
607
|
+
const Ii = n.object({
|
|
567
608
|
required_user_actions: n.array(n.record(n.string(), n.any())),
|
|
568
609
|
cc_pm_id: n.string()
|
|
569
610
|
});
|
|
@@ -595,7 +636,7 @@ n.object({
|
|
|
595
636
|
n.object({
|
|
596
637
|
message: n.string()
|
|
597
638
|
});
|
|
598
|
-
const
|
|
639
|
+
const Ti = n.object({
|
|
599
640
|
error_code: n.string()
|
|
600
641
|
});
|
|
601
642
|
n.object({
|
|
@@ -603,7 +644,7 @@ n.object({
|
|
|
603
644
|
processor_specific_metadata: n.record(n.any()).optional(),
|
|
604
645
|
payment_route_id: v(n.string())
|
|
605
646
|
});
|
|
606
|
-
const
|
|
647
|
+
const Ri = n.object({
|
|
607
648
|
next_action_metadata: v(n.record(n.any()))
|
|
608
649
|
});
|
|
609
650
|
n.object({
|
|
@@ -620,48 +661,7 @@ n.any().optional();
|
|
|
620
661
|
n.object({
|
|
621
662
|
device_token: n.string()
|
|
622
663
|
});
|
|
623
|
-
const
|
|
624
|
-
function Ti(e, t) {
|
|
625
|
-
var r = Object.setPrototypeOf;
|
|
626
|
-
r ? r(e, t) : e.__proto__ = t;
|
|
627
|
-
}
|
|
628
|
-
function Ri(e, t) {
|
|
629
|
-
t === void 0 && (t = e.constructor);
|
|
630
|
-
var r = Error.captureStackTrace;
|
|
631
|
-
r && r(e, t);
|
|
632
|
-
}
|
|
633
|
-
var xi = /* @__PURE__ */ function() {
|
|
634
|
-
var e = function(t, r) {
|
|
635
|
-
return e = Object.setPrototypeOf || {
|
|
636
|
-
__proto__: []
|
|
637
|
-
} instanceof Array && function(o, i) {
|
|
638
|
-
o.__proto__ = i;
|
|
639
|
-
} || function(o, i) {
|
|
640
|
-
for (var a in i)
|
|
641
|
-
Object.prototype.hasOwnProperty.call(i, a) && (o[a] = i[a]);
|
|
642
|
-
}, e(t, r);
|
|
643
|
-
};
|
|
644
|
-
return function(t, r) {
|
|
645
|
-
if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
|
|
646
|
-
e(t, r);
|
|
647
|
-
function o() {
|
|
648
|
-
this.constructor = t;
|
|
649
|
-
}
|
|
650
|
-
t.prototype = r === null ? Object.create(r) : (o.prototype = r.prototype, new o());
|
|
651
|
-
};
|
|
652
|
-
}(), Oi = function(e) {
|
|
653
|
-
xi(t, e);
|
|
654
|
-
function t(r, o) {
|
|
655
|
-
var i = this.constructor, a = e.call(this, r, o) || this;
|
|
656
|
-
return Object.defineProperty(a, "name", {
|
|
657
|
-
value: i.name,
|
|
658
|
-
enumerable: !1,
|
|
659
|
-
configurable: !0
|
|
660
|
-
}), Ti(a, i.prototype), Ri(a), a;
|
|
661
|
-
}
|
|
662
|
-
return t;
|
|
663
|
-
}(Error);
|
|
664
|
-
const ce = (e) => async (t) => {
|
|
664
|
+
const xi = n.object({}), Oi = (e) => e.reduce((t, r) => t + r, 0), ce = (e) => async (t) => {
|
|
665
665
|
var r, o;
|
|
666
666
|
try {
|
|
667
667
|
(o = (r = t.formCallbacks.get).onCheckoutStarted) == null || o.call(r), g("checkout_started", {
|
|
@@ -684,14 +684,14 @@ const ce = (e) => async (t) => {
|
|
|
684
684
|
throw new Error(`Unhandled mode: ${i}`);
|
|
685
685
|
} catch (i) {
|
|
686
686
|
const a = H(i), s = await _n(t.context.anyCdeConnection, a);
|
|
687
|
-
t.formCallbacks.get.onCheckoutError(a, s), g("checkout_error", { cpm: t.checkoutPaymentMethod, errorMessage: a, errorCode: s });
|
|
687
|
+
t.formCallbacks.get.onCheckoutError(a, s), g("checkout_error", { cpm: t.checkoutPaymentMethod, errorMessage: a, errorCode: s, error: i });
|
|
688
688
|
}
|
|
689
689
|
}, ke = (e) => async (t) => {
|
|
690
690
|
try {
|
|
691
691
|
return await e(t);
|
|
692
692
|
} catch (r) {
|
|
693
693
|
const { err__: o } = I("init-error-catcher"), i = H(r), a = await _n(t.context.anyCdeConnection, i);
|
|
694
|
-
return o(a, i, r), g("init_flow_error", { errorMessage: i, errorCode: a }), { isAvailable: !1, reason: i, errorCode: a, isLoading: !1 };
|
|
694
|
+
return o(a, i, r), g("init_flow_error", { errorMessage: i, errorCode: a, error: r }), { isAvailable: !1, reason: i, errorCode: a, isLoading: !1 };
|
|
695
695
|
}
|
|
696
696
|
}, I = (e) => {
|
|
697
697
|
const t = (...o) => {
|
|
@@ -1917,7 +1917,7 @@ var mr;
|
|
|
1917
1917
|
(mr = j()) == null || mr.addEventListener("beforeunload", () => {
|
|
1918
1918
|
pn.processQueue();
|
|
1919
1919
|
});
|
|
1920
|
-
class yn extends
|
|
1920
|
+
class yn extends pi {
|
|
1921
1921
|
constructor(t) {
|
|
1922
1922
|
const r = `${t.message}`;
|
|
1923
1923
|
super(r), this.response = t;
|
|
@@ -1932,7 +1932,9 @@ const V = async (e, t, r, o) => {
|
|
|
1932
1932
|
});
|
|
1933
1933
|
const i = await e.send(t);
|
|
1934
1934
|
if (La(i))
|
|
1935
|
-
throw
|
|
1935
|
+
throw g("cde_response_error", {
|
|
1936
|
+
...i
|
|
1937
|
+
}), new yn(i);
|
|
1936
1938
|
if (!Ma(i, r)) {
|
|
1937
1939
|
const a = r.safeParse(i);
|
|
1938
1940
|
throw a.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", r, "Actual:", i), a.error);
|
|
@@ -1940,7 +1942,7 @@ const V = async (e, t, r, o) => {
|
|
|
1940
1942
|
return o && g(o, {
|
|
1941
1943
|
...i
|
|
1942
1944
|
}), i;
|
|
1943
|
-
}, Ma = (e, t) => t.safeParse(e).success, La = (e) =>
|
|
1945
|
+
}, Ma = (e, t) => t.safeParse(e).success, La = (e) => mi.safeParse(e).success, Da = async (e, t) => await V(e, { type: "get_checkout_preview", payload: t }, Wr), L = async (e) => await V(e, { type: "get_prefill", payload: {} }, Xr), Ne = async (e, t) => await V(
|
|
1944
1946
|
e,
|
|
1945
1947
|
{ type: "v2_start_payment_flow", payload: t },
|
|
1946
1948
|
tn,
|
|
@@ -1948,7 +1950,7 @@ const V = async (e, t, r, o) => {
|
|
|
1948
1950
|
), Na = async (e, t) => await V(
|
|
1949
1951
|
e,
|
|
1950
1952
|
{ type: "start_payment_flow_for_cc", payload: t },
|
|
1951
|
-
|
|
1953
|
+
Ii,
|
|
1952
1954
|
"start_payment_flow_for_cc"
|
|
1953
1955
|
), Ua = async (e, t) => {
|
|
1954
1956
|
g("start_payment_flow_for_pr", {
|
|
@@ -1980,7 +1982,7 @@ const V = async (e, t, r, o) => {
|
|
|
1980
1982
|
}), i = new Set(o.preview.invoices.map((c) => c.currency));
|
|
1981
1983
|
if (i.size !== 1)
|
|
1982
1984
|
throw new Error(`Expected exactly one currency, got ${i.size}`);
|
|
1983
|
-
const a = i.values().next().value ?? "usd", s =
|
|
1985
|
+
const a = i.values().next().value ?? "usd", s = Oi(o.preview.invoices.map((c) => c.remaining_amount_atom));
|
|
1984
1986
|
return {
|
|
1985
1987
|
currency: a,
|
|
1986
1988
|
amountAtom: s
|
|
@@ -2019,14 +2021,14 @@ const V = async (e, t, r, o) => {
|
|
|
2019
2021
|
}, Wt = async (e, t) => await V(
|
|
2020
2022
|
e,
|
|
2021
2023
|
{ type: "prepare_payment_flow", payload: t },
|
|
2022
|
-
|
|
2024
|
+
Ri,
|
|
2023
2025
|
"prepare_payment_flow"
|
|
2024
2026
|
), _n = async (e, t) => {
|
|
2025
2027
|
try {
|
|
2026
2028
|
return (await V(
|
|
2027
2029
|
e,
|
|
2028
2030
|
{ type: "get_standardized_error_code", payload: { message: t } },
|
|
2029
|
-
|
|
2031
|
+
Ti
|
|
2030
2032
|
)).error_code;
|
|
2031
2033
|
} catch (r) {
|
|
2032
2034
|
return console.error("[cde-client] Error during getStandardizedErrorCode:", H(r)), "PAYMENT_FAILED_GENERIC";
|
|
@@ -2034,7 +2036,7 @@ const V = async (e, t, r, o) => {
|
|
|
2034
2036
|
}, Ba = async (e, t) => await V(
|
|
2035
2037
|
e,
|
|
2036
2038
|
{ type: "set_user_device_token", payload: { device_token: t } },
|
|
2037
|
-
|
|
2039
|
+
xi
|
|
2038
2040
|
), te = n.enum(["stripe", "airwallex", "authorize_net"]);
|
|
2039
2041
|
te.Enum.stripe;
|
|
2040
2042
|
const gn = ({
|
|
@@ -4551,7 +4553,7 @@ const Mc = (e, t, r) => {
|
|
|
4551
4553
|
(a = j()) == null || a.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), ja(), this.registeredElements = null, delete window.ojs, g("form_destroyed");
|
|
4552
4554
|
}, this.updateCallbacks = (a) => {
|
|
4553
4555
|
this.formCallbacks.setCallbacks(a);
|
|
4554
|
-
}, st.assignAsSingleton(this), this.ojsVersion = "0.3.
|
|
4556
|
+
}, st.assignAsSingleton(this), this.ojsVersion = "0.3.3", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = _c.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Se()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new jc(), this.deviceToken = kc(), Oa();
|
|
4555
4557
|
const { framework: o, version: i } = Rc();
|
|
4556
4558
|
un(this.baseUrl).then((a) => {
|
|
4557
4559
|
if (!$t.current.isSuccess) {
|
|
@@ -4871,7 +4873,49 @@ n.object({
|
|
|
4871
4873
|
client_secret: n.string(),
|
|
4872
4874
|
stripe_pk: n.string()
|
|
4873
4875
|
});
|
|
4874
|
-
const ll = (e) => JSON.stringify(e)
|
|
4876
|
+
const ll = (e) => JSON.stringify(e);
|
|
4877
|
+
function ul(e, t) {
|
|
4878
|
+
var r = Object.setPrototypeOf;
|
|
4879
|
+
r ? r(e, t) : e.__proto__ = t;
|
|
4880
|
+
}
|
|
4881
|
+
function dl(e, t) {
|
|
4882
|
+
t === void 0 && (t = e.constructor);
|
|
4883
|
+
var r = Error.captureStackTrace;
|
|
4884
|
+
r && r(e, t);
|
|
4885
|
+
}
|
|
4886
|
+
var pl = /* @__PURE__ */ function() {
|
|
4887
|
+
var e = function(r, o) {
|
|
4888
|
+
return e = Object.setPrototypeOf || {
|
|
4889
|
+
__proto__: []
|
|
4890
|
+
} instanceof Array && function(i, a) {
|
|
4891
|
+
i.__proto__ = a;
|
|
4892
|
+
} || function(i, a) {
|
|
4893
|
+
for (var s in a)
|
|
4894
|
+
Object.prototype.hasOwnProperty.call(a, s) && (i[s] = a[s]);
|
|
4895
|
+
}, e(r, o);
|
|
4896
|
+
};
|
|
4897
|
+
return function(t, r) {
|
|
4898
|
+
if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
|
|
4899
|
+
e(t, r);
|
|
4900
|
+
function o() {
|
|
4901
|
+
this.constructor = t;
|
|
4902
|
+
}
|
|
4903
|
+
t.prototype = r === null ? Object.create(r) : (o.prototype = r.prototype, new o());
|
|
4904
|
+
};
|
|
4905
|
+
}();
|
|
4906
|
+
(function(e) {
|
|
4907
|
+
pl(t, e);
|
|
4908
|
+
function t(r, o) {
|
|
4909
|
+
var i = this.constructor, a = e.call(this, r, o) || this;
|
|
4910
|
+
return Object.defineProperty(a, "name", {
|
|
4911
|
+
value: i.name,
|
|
4912
|
+
enumerable: !1,
|
|
4913
|
+
configurable: !0
|
|
4914
|
+
}), ul(a, i.prototype), dl(a), a;
|
|
4915
|
+
}
|
|
4916
|
+
return t;
|
|
4917
|
+
})(Error);
|
|
4918
|
+
const b = (e) => n.nullable(e.optional());
|
|
4875
4919
|
n.string().trim().min(1, { message: "Cannot be blank" });
|
|
4876
4920
|
n.object({
|
|
4877
4921
|
cde_response_type: n.literal("error"),
|
|
@@ -4895,46 +4939,46 @@ const Qn = n.object({
|
|
|
4895
4939
|
billing_interval: b(n.string()),
|
|
4896
4940
|
billing_interval_count: b(n.number().int()),
|
|
4897
4941
|
quantity: n.number().int()
|
|
4898
|
-
}),
|
|
4942
|
+
}), ml = n.record(n.string(), n.any()), hl = n.object({
|
|
4899
4943
|
name: n.string(),
|
|
4900
|
-
settings: b(
|
|
4944
|
+
settings: b(ml)
|
|
4901
4945
|
}), qe = n.object({
|
|
4902
4946
|
provider: n.string(),
|
|
4903
4947
|
processor_name: b(n.string()),
|
|
4904
4948
|
metadata: b(n.record(n.string(), n.any()))
|
|
4905
|
-
}),
|
|
4949
|
+
}), yl = n.object({
|
|
4906
4950
|
quantity: n.number()
|
|
4907
|
-
}),
|
|
4951
|
+
}), fl = n.object({
|
|
4908
4952
|
id: b(n.string()),
|
|
4909
4953
|
billing_interval: b(n.string()),
|
|
4910
4954
|
billing_interval_count: b(n.number().int()),
|
|
4911
|
-
subscription_items: n.array(
|
|
4955
|
+
subscription_items: n.array(yl),
|
|
4912
4956
|
trial_start: b(n.string()),
|
|
4913
4957
|
trial_end: b(n.string())
|
|
4914
4958
|
}), Jn = n.object({
|
|
4915
4959
|
amount_atom: n.number()
|
|
4916
|
-
}),
|
|
4960
|
+
}), _l = n.object({
|
|
4917
4961
|
amount_atom: n.number(),
|
|
4918
4962
|
amount_atom_considering_discount_applied: n.number(),
|
|
4919
4963
|
currency: n.string(),
|
|
4920
4964
|
discount_amount_atoms: n.array(Jn),
|
|
4921
4965
|
subscription_item_id: n.string()
|
|
4922
|
-
}),
|
|
4966
|
+
}), gl = n.object({
|
|
4923
4967
|
coupon: Qn
|
|
4924
|
-
}),
|
|
4968
|
+
}), vl = n.object({
|
|
4925
4969
|
currency: n.string(),
|
|
4926
|
-
discounts: n.array(
|
|
4970
|
+
discounts: n.array(gl),
|
|
4927
4971
|
hosted_invoice_url: b(n.string()),
|
|
4928
|
-
lines: n.array(
|
|
4972
|
+
lines: n.array(_l),
|
|
4929
4973
|
remaining_amount_atom: n.number(),
|
|
4930
4974
|
tax_amount_atom: n.number(),
|
|
4931
4975
|
total_amount_atom: n.number(),
|
|
4932
4976
|
total_discount_amount_atoms: n.array(Jn)
|
|
4933
4977
|
}), kr = n.object({
|
|
4934
|
-
created: n.array(
|
|
4935
|
-
invoices: n.array(
|
|
4978
|
+
created: n.array(fl),
|
|
4979
|
+
invoices: n.array(vl),
|
|
4936
4980
|
processors_used: b(n.array(n.string()))
|
|
4937
|
-
}),
|
|
4981
|
+
}), bl = n.object({
|
|
4938
4982
|
preview: kr,
|
|
4939
4983
|
preview_post_trial: b(kr),
|
|
4940
4984
|
coupons: n.array(Qn)
|
|
@@ -4946,11 +4990,11 @@ const Qn = n.object({
|
|
|
4946
4990
|
line_items: n.array(Zn),
|
|
4947
4991
|
amount_subtotal_atom: n.number().int(),
|
|
4948
4992
|
amount_total_atom: n.number().int(),
|
|
4949
|
-
brand:
|
|
4950
|
-
subs_preview: b(
|
|
4993
|
+
brand: hl,
|
|
4994
|
+
subs_preview: b(bl),
|
|
4951
4995
|
// Null in setup mode
|
|
4952
4996
|
methods_available: n.array(qe)
|
|
4953
|
-
}),
|
|
4997
|
+
}), wl = n.discriminatedUnion("mode", [
|
|
4954
4998
|
n.object({
|
|
4955
4999
|
mode: n.literal("setup"),
|
|
4956
5000
|
currency: n.nullable(n.undefined())
|
|
@@ -4959,12 +5003,12 @@ const Qn = n.object({
|
|
|
4959
5003
|
mode: n.enum(["payment", "subscription"]),
|
|
4960
5004
|
currency: n.string()
|
|
4961
5005
|
}).extend(Ar.shape)
|
|
4962
|
-
]),
|
|
5006
|
+
]), El = n.object({
|
|
4963
5007
|
status: n.literal("complete")
|
|
4964
|
-
}),
|
|
5008
|
+
}), Pl = n.object({
|
|
4965
5009
|
status: n.literal("expired")
|
|
4966
5010
|
});
|
|
4967
|
-
n.union([
|
|
5011
|
+
n.union([wl, El, Pl]);
|
|
4968
5012
|
n.object({
|
|
4969
5013
|
logo: n.string(),
|
|
4970
5014
|
icon: n.string(),
|
|
@@ -5000,26 +5044,26 @@ n.object({
|
|
|
5000
5044
|
id: n.string(),
|
|
5001
5045
|
return_url: n.string()
|
|
5002
5046
|
});
|
|
5003
|
-
const
|
|
5047
|
+
const Cl = n.object({
|
|
5004
5048
|
type: n.string(),
|
|
5005
5049
|
loc: n.array(n.string()),
|
|
5006
5050
|
msg: n.string(),
|
|
5007
5051
|
url: n.string()
|
|
5008
5052
|
});
|
|
5009
|
-
n.array(
|
|
5010
|
-
const
|
|
5053
|
+
n.array(Cl);
|
|
5054
|
+
const Sl = n.object({
|
|
5011
5055
|
new_customer_email: n.string().optional(),
|
|
5012
5056
|
new_customer_address: n.record(n.string(), n.any()).optional(),
|
|
5013
5057
|
new_customer_first_name: n.string().optional(),
|
|
5014
5058
|
new_customer_last_name: n.string().optional()
|
|
5015
|
-
}),
|
|
5059
|
+
}), kl = n.object({
|
|
5016
5060
|
price_id: n.string(),
|
|
5017
5061
|
quantity: n.number().int()
|
|
5018
|
-
}),
|
|
5019
|
-
line_items: n.array(
|
|
5062
|
+
}), Al = n.object({
|
|
5063
|
+
line_items: n.array(kl),
|
|
5020
5064
|
promotion_code: n.string().optional(),
|
|
5021
5065
|
displayed_total_amount_atom: n.number().int()
|
|
5022
|
-
}),
|
|
5066
|
+
}), Il = n.object({
|
|
5023
5067
|
processor_specific_metadata: b(n.record(n.string(), n.any()))
|
|
5024
5068
|
});
|
|
5025
5069
|
n.object({
|
|
@@ -5028,8 +5072,8 @@ n.object({
|
|
|
5028
5072
|
existing_cc_pm_id: n.string().optional(),
|
|
5029
5073
|
their_existing_pm_id: n.string().optional(),
|
|
5030
5074
|
use_pay_first_flow: n.boolean().optional(),
|
|
5031
|
-
pay_first_flow_cart_info:
|
|
5032
|
-
}).extend(
|
|
5075
|
+
pay_first_flow_cart_info: Al.optional()
|
|
5076
|
+
}).extend(Sl.shape).extend(Il.shape);
|
|
5033
5077
|
n.object({
|
|
5034
5078
|
required_user_actions: n.array(n.record(n.string(), n.any())),
|
|
5035
5079
|
checkout_attempt_id: b(n.string())
|
|
@@ -5105,47 +5149,6 @@ n.object({
|
|
|
5105
5149
|
device_token: n.string()
|
|
5106
5150
|
});
|
|
5107
5151
|
n.object({});
|
|
5108
|
-
function kl(e, t) {
|
|
5109
|
-
var r = Object.setPrototypeOf;
|
|
5110
|
-
r ? r(e, t) : e.__proto__ = t;
|
|
5111
|
-
}
|
|
5112
|
-
function Al(e, t) {
|
|
5113
|
-
t === void 0 && (t = e.constructor);
|
|
5114
|
-
var r = Error.captureStackTrace;
|
|
5115
|
-
r && r(e, t);
|
|
5116
|
-
}
|
|
5117
|
-
var Il = /* @__PURE__ */ function() {
|
|
5118
|
-
var e = function(r, o) {
|
|
5119
|
-
return e = Object.setPrototypeOf || {
|
|
5120
|
-
__proto__: []
|
|
5121
|
-
} instanceof Array && function(i, a) {
|
|
5122
|
-
i.__proto__ = a;
|
|
5123
|
-
} || function(i, a) {
|
|
5124
|
-
for (var s in a)
|
|
5125
|
-
Object.prototype.hasOwnProperty.call(a, s) && (i[s] = a[s]);
|
|
5126
|
-
}, e(r, o);
|
|
5127
|
-
};
|
|
5128
|
-
return function(t, r) {
|
|
5129
|
-
if (typeof r != "function" && r !== null) throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
|
|
5130
|
-
e(t, r);
|
|
5131
|
-
function o() {
|
|
5132
|
-
this.constructor = t;
|
|
5133
|
-
}
|
|
5134
|
-
t.prototype = r === null ? Object.create(r) : (o.prototype = r.prototype, new o());
|
|
5135
|
-
};
|
|
5136
|
-
}();
|
|
5137
|
-
(function(e) {
|
|
5138
|
-
Il(t, e);
|
|
5139
|
-
function t(r, o) {
|
|
5140
|
-
var i = this.constructor, a = e.call(this, r, o) || this;
|
|
5141
|
-
return Object.defineProperty(a, "name", {
|
|
5142
|
-
value: i.name,
|
|
5143
|
-
enumerable: !1,
|
|
5144
|
-
configurable: !0
|
|
5145
|
-
}), kl(a, i.prototype), Al(a), a;
|
|
5146
|
-
}
|
|
5147
|
-
return t;
|
|
5148
|
-
})(Error);
|
|
5149
5152
|
const Wn = (e) => {
|
|
5150
5153
|
const t = (...o) => {
|
|
5151
5154
|
window.console.log(`${_e.green.bold("ojs/")}${_e.bold.gray(`${e}`)} `, ...o);
|
|
@@ -6697,4 +6700,4 @@ export {
|
|
|
6697
6700
|
ju as PayInState,
|
|
6698
6701
|
mo as useOpenPayElements
|
|
6699
6702
|
};
|
|
6700
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBMZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBWdCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgSG4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBKbiA9IHokMS5hcnJheShIbiksIEtuID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIFpuID0geiQxLmFycmF5KEtuKSwgV24gPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIHJ0ID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBXbltuXSA/PyBlO1xufSwgUW4gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZShlKSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIFhuID0gKGUpID0+IGUubGVuZ3RoID09PSAxID8gcnQoZVswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKCh0KSA9PiBg4oCiICR7cnQodC5tc2cpfWApLmpvaW4oYFxuYCl9YCwgZXIgPSAoZSkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgodCkgPT4gYC0gJHt0LnBhdGguam9pbihcIi9cIil9OiAke3QubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIEcgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChRbihlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBuID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIEpuLnNhZmVQYXJzZShuKS5zdWNjZXNzID8gWG4obikgOiBabi5zYWZlUGFyc2Uobikuc3VjY2VzcyA/IGVyKG4pIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIHJ0KGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgcmV0dXJuIG4gKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIHRyID0gKGUsIG4sIHQpID0+ICguLi5yKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG4oLi4ucik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICB0KGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyIHggPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgZS5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIGUuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlLnBheXBhbCA9IFwicGF5cGFsXCIsIGUpKSh4IHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKHgpOyBjb25zdCBJID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pLCBDID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBOID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xudmFyIHAgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgZS5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIGUuRU1BSUwgPSBcImVtYWlsXCIsIGUuWklQX0NPREUgPSBcInppcENvZGVcIiwgZS5DSVRZID0gXCJjaXR5XCIsIGUuU1RBVEUgPSBcInN0YXRlXCIsIGUuQ09VTlRSWSA9IFwiY291bnRyeVwiLCBlLkFERFJFU1MgPSBcImFkZHJlc3NcIiwgZS5QSE9ORSA9IFwicGhvbmVcIiwgZS5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCBlKSkocCB8fCB7fSk7XG5jb25zdCBHdCA9IHokMS5uYXRpdmVFbnVtKHApO1xudmFyIHp0ID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIGUpKSh6dCB8fCB7fSk7XG5jb25zdCBxdCA9IHokMS5uYXRpdmVFbnVtKHp0KSwgWXQgPSB6JDEudW5pb24oW0d0LCBxdF0pO1xudmFyIFggPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEID0gXCJjYXJkXCIsIGUuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIGUuQ0RFX0JSSURHRSA9IFwiY2RlLWJyaWRnZVwiLCBlKSkoWCB8fCB7fSk7XG5jb25zdCBuciA9IHokMS5uYXRpdmVFbnVtKFgpLCBxZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogTih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogTih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCByciA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBDLFxuICBleHBpcnk6IEMsXG4gIGN2YzogQ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBDLFxuICBjb2xvcjogQyxcbiAgZm9udEZhbWlseTogQyxcbiAgZm9udFNpemU6IEMsXG4gIGZvbnRXZWlnaHQ6IEMsXG4gIG1hcmdpbjogQyxcbiAgcGFkZGluZzogQyxcbiAgbGV0dGVyU3BhY2luZzogQyxcbiAgbGluZUhlaWdodDogQyxcbiAgaGlkZUljb246IENcbn0pO1xuY29uc3QgWiA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBvciA9IFouZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIGFyID0geiQxLm9iamVjdCh7IHR5cGU6IG9yIH0pLCBzciA9IFouZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBpciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBzcixcbiAgZWxlbWVudFR5cGU6IHF0LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBjciA9IFouZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSksIGxyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IGNyLFxuICBtZXNzYWdlOiBJLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgdXIgPSBaLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIGRyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHVyLFxuICBlbGVtZW50VHlwZTogWXQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBwciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChaLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBJXG59KSwgbXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoWi5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogSSxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogQyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KHFlKVxufSksIHlyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFouZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBmciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChaLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KSwgRmUgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBJLFxuICBsYXN0TmFtZTogSSxcbiAgZW1haWw6IEksXG4gIHppcENvZGU6IEksXG4gIGNvdW50cnk6IEksXG4gIHByb21vdGlvbkNvZGU6IENcbn0pLCBfciA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IEMsXG4gIGxhc3ROYW1lOiBDLFxuICBlbWFpbDogSSxcbiAgemlwQ29kZTogSSxcbiAgY291bnRyeTogSSxcbiAgcHJvbW90aW9uQ29kZTogQyxcbiAgYWRkcmVzczogQyxcbiAgY2l0eTogQyxcbiAgc3RhdGU6IENcbn0pLCBociA9IFouZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgZ3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogaHIsXG4gIHNlc3Npb25JZDogSSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBxZSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBDLFxuICBwYXltZW50Um91dGVJZDogQ1xufSkuZXh0ZW5kKEZlLnNoYXBlKSwgd3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoWi5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCBiciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChaLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgdnIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIGFyLFxuICBpcixcbiAgbHIsXG4gIGRyLFxuICBwcixcbiAgbXIsXG4gIGdyLFxuICB3cixcbiAgYnIsXG4gIHlyLFxuICBmclxuXSksIEVyID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IHZyLFxuICBub25jZTogSSxcbiAgZm9ybUlkOiBJLFxuICBlbGVtZW50SWQ6IElcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogSVxufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IE4oeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IE4oeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogTih6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IE4oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IGx0ID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IE4oeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KSwgQ3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFNyID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShDcilcbn0pLCBQciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgU3Jcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHFlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBGZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogTih6JDEuc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IE4oeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IEZlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogTih6JDEuc3RyaW5nKCkpXG59KTtcbnZhciBGID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuU1VDQ0VTUyA9IFwic3VjY2Vzc1wiLCBlLkZBSUxVUkUgPSBcImZhaWx1cmVcIiwgZS5DQU5DRUxMRUQgPSBcImNhbmNlbGxlZFwiLCBlKSkoRiB8fCB7fSk7XG5jb25zdCBrciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcbiAgICBcInN1Y2Nlc3NcIixcbiAgICBcImZhaWx1cmVcIixcbiAgICBcImNhbmNlbGxlZFwiXG4gICAgLyogQ0FOQ0VMTEVEICovXG4gIF0pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IEFyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgQnQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IE4oeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IE4oeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogTih6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTih6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IE4oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgSXIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMCksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCExKSB9KVxuXSksIFJyID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KHJyKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IE4obHQpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IE4oeiQxLmFycmF5KEJ0KSlcbn0pLCBIdCA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKFt0LCByXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhID0gR3QucGFyc2UodCk7XG4gICAgICBBcnJheS5pc0FycmF5KHIpID8gblthXSA9IHIgOiBBcnJheS5pc0FycmF5KHIuX2Vycm9ycykgJiYgKG5bYV0gPSByLl9lcnJvcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSksIG47XG59LCBGciA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIFRyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIE1yID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgWWUgPSBhc3luYyAoZSkgPT4ge1xuICBmb3IgKGxldCB0ID0gMDsgdCA8IDEwOyB0KyspXG4gICAgZnQoKSB8fCBhd2FpdCBCZSg1MDApO1xuICBpZiAoIWZ0KCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKGUpO1xufSwgRHIgPSBhc3luYyAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gYXdhaXQgWWUoZSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHQuZWxlbWVudHMobiksXG4gICAgc3RyaXBlOiB0XG4gIH07XG59LCBOciA9IGFzeW5jIChlLCBuLCB0LCByLCBhKSA9PiB7XG4gIGNvbnN0IHMgPSBhd2FpdCBZZShlKSwgaSA9IE1yW3QudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gcy5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IGksXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IG4sXG4gICAgICBwZW5kaW5nOiByXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogITAsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6ICEwLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXVxuICB9KTtcbn0sIEJlID0gKGUpID0+IG5ldyBQcm9taXNlKChuKSA9PiB7XG4gIHNldFRpbWVvdXQobiwgZSk7XG59KSwgZnQgPSAoKSA9PiBcIlN0cmlwZVwiIGluIHdpbmRvdywgTHIgPSBhc3luYyAoZSkgPT4gbmV3IFByb21pc2UoKG4sIHQpID0+IHtcbiAgdHJ5IHtcbiAgICBlLm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAocikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCByKSwgbihyKTtcbiAgICB9KSwgZS5vbihcInRva2VuXCIsIGFzeW5jIChyKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCByKTtcbiAgICB9KSwgZS5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICB0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0KHIpO1xuICB9XG59KSwgT3IgPSBhc3luYyAoZSwgbikgPT4ge1xuICBpZiAoIWUuc3RyaXBlX3BrIHx8ICFlLmNsaWVudF9zZWNyZXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgY29uc3QgciA9IGF3YWl0IChhd2FpdCBZZShlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IG4ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKHIuZXJyb3IpXG4gICAgdGhyb3cgbi5jb21wbGV0ZShcImZhaWxcIiksIG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7ci5lcnJvci5tZXNzYWdlID8/IFwidW5rbm93blwifWApO1xuICByZXR1cm4gbi5jb21wbGV0ZShcInN1Y2Nlc3NcIiksIHI7XG59LCBVciA9IGFzeW5jIChlKSA9PiB7XG4gIHZhciBhLCBzLCBpLCBjO1xuICBjb25zdCB0ID0gYXdhaXQgKGF3YWl0IFllKGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogZS5zdHJpcGVfcG1faWRcbiAgfSksIHIgPSAoYSA9IHQuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBhLnN0YXR1cztcbiAgaWYgKHIgPT09IFwic3VjY2VlZGVkXCIpXG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBlLnN0cmlwZV9wbV9pZCksIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIHQuc2V0dXBJbnRlbnQpO1xuICBlbHNlIHRocm93IHIgPT09IFwiY2FuY2VsZWRcIiA/IG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSA6IG5ldyBFcnJvcihcbiAgICBgJHsoKHMgPSB0LmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogcy5tZXNzYWdlKSA/PyAoKGMgPSAoaSA9IHQuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBpLmxhc3Rfc2V0dXBfZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBjLm1lc3NhZ2UpID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgKTtcbn0sIGpyID0gKGUpID0+IEpTT04uc3RyaW5naWZ5KGUpLCBWID0gKGUsIG4pID0+IEFycmF5LmZyb20oZS5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgoYSwgcykgPT4ge1xuICBjb25zdCBpID0gcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIHJldHVybiBpID8geyAuLi5hLCBbaV06IHMudmFsdWUgfSA6IGE7XG59LCB7fSksIHhyID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRXIucGFyc2UoZSk7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCBlLCBuKSwgbjtcbiAgfVxufSwgJHIgPSBhc3luYyAoZSkgPT4ge1xuICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCAhZSkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSB7IHR5cGU6IFwicGluZ1wiIH0sIHQgPSBhd2FpdCBlLnNlbmQobik7XG4gICAgaWYgKHQgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoIChuKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCBuKSwgITE7XG4gIH1cbn0sIFZyID0gKGUsIG4pID0+ICEhZSAmJiBuLCB3ID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgR3IgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgSnQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IHcoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IHcoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IHcoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiB3KHokMS5udW1iZXIoKSlcbn0pLCBLdCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogdyh6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiB3KHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IHcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHpyID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIHFyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IHcoenIpXG59KSwgYmUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IHcoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IHcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSksIEJyID0geiQxLm9iamVjdCh7XG4gIGlkOiB3KHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IHcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogdyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShZciksXG4gIHRyaWFsX3N0YXJ0OiB3KHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogdyh6JDEuc3RyaW5nKCkpXG59KSwgWnQgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSksIEhyID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoWnQpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KSwgSnIgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBKdFxufSksIEtyID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KEpyKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSHIpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KFp0KVxufSksIF90ID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShCciksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoS3IpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IHcoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KSwgV3QgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogX3QsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogdyhfdCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShKdClcbn0pLCBodCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiB3KHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShLdCksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBxcixcbiAgc3Vic19wcmV2aWV3OiB3KFd0KSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoYmUpXG59KSwgUXQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChodC5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKGh0LnNoYXBlKVxuXSksIFpyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIFdyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUXQsIFpyLCBXcl0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KEt0KSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGJlLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogdyh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgWHQgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFFyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShRcik7XG5jb25zdCBYciA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGVvID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCB0byA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoZW8pLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgbm8gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB3KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogYmUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB0by5vcHRpb25hbCgpXG59KS5leHRlbmQoWHIuc2hhcGUpLmV4dGVuZChuby5zaGFwZSk7XG5jb25zdCBlbiA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHcoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBfcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBiZSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IEZlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogYmUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHBheW1lbnRfcm91dGVfaWQ6IHcoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBybyA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IHcoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiB3KHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IHcoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IHcoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogdyh6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogdyh6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiB3KHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogdyh6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiB3KHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiB3KHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogdyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IHcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiB3KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IG9vID0geiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGJlLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgYW8gPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IHcoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3Qgc28gPSB6JDEub2JqZWN0KHt9KSwgaW8gPSAoZSkgPT4gZS5yZWR1Y2UoKG4sIHQpID0+IG4gKyB0LCAwKTtcbmZ1bmN0aW9uIGNvKGUsIG4pIHtcbiAgdmFyIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHQgPyB0KGUsIG4pIDogZS5fX3Byb3RvX18gPSBuO1xufVxuZnVuY3Rpb24gbG8oZSwgbikge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSBlLmNvbnN0cnVjdG9yKTtcbiAgdmFyIHQgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgdCAmJiB0KGUsIG4pO1xufVxudmFyIHVvID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGEsIHMpIHtcbiAgICAgIGEuX19wcm90b19fID0gcztcbiAgICB9IHx8IGZ1bmN0aW9uKGEsIHMpIHtcbiAgICAgIGZvciAodmFyIGkgaW4gcylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIGkpICYmIChhW2ldID0gc1tpXSk7XG4gICAgfSwgZSh0LCByKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4sIHQpIHtcbiAgICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiICYmIHQgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHQpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKG4sIHQpO1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gbjtcbiAgICB9XG4gICAgbi5wcm90b3R5cGUgPSB0ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZSh0KSA6IChyLnByb3RvdHlwZSA9IHQucHJvdG90eXBlLCBuZXcgcigpKTtcbiAgfTtcbn0oKSwgcG8gPSBmdW5jdGlvbihlKSB7XG4gIHVvKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICB2YXIgYSA9IHRoaXMuY29uc3RydWN0b3IsIHMgPSBlLmNhbGwodGhpcywgdCwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIGNvKHMsIGEucHJvdG90eXBlKSwgbG8ocyksIHM7XG4gIH1cbiAgcmV0dXJuIG47XG59KEVycm9yKTtcbmNvbnN0IG5lID0gKGUpID0+IGFzeW5jIChuKSA9PiB7XG4gIHZhciB0LCByO1xuICB0cnkge1xuICAgIChyID0gKHQgPSBuLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkNoZWNrb3V0U3RhcnRlZCkgPT0gbnVsbCB8fCByLmNhbGwodCksIGcoXCJjaGVja291dF9zdGFydGVkXCIsIHtcbiAgICAgIGNwbTogbi5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBhID0gYXdhaXQgZShuKTtcbiAgICBpZiAoZyhcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgY3BtOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLmFcbiAgICB9KSwgYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhhLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoYS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBhLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGEucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGEucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICBhLnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW11cbiAgICAgICk7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHthfWApO1xuICB9IGNhdGNoIChhKSB7XG4gICAgY29uc3QgcyA9IEcoYSksIGkgPSBhd2FpdCBobihuLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgcyk7XG4gICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IocywgaSksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogbi5jaGVja291dFBheW1lbnRNZXRob2QsIGVycm9yTWVzc2FnZTogcywgZXJyb3JDb2RlOiBpIH0pO1xuICB9XG59LCBwZSA9IChlKSA9PiBhc3luYyAobikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlKG4pO1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgeyBlcnJfXzogciB9ID0gayhcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgYSA9IEcodCksIHMgPSBhd2FpdCBobihuLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgcmV0dXJuIHIocywgYSwgdCksIGcoXCJpbml0X2Zsb3dfZXJyb3JcIiwgeyBlcnJvck1lc3NhZ2U6IGEsIGVycm9yQ29kZTogcyB9KSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogYSwgZXJyb3JDb2RlOiBzLCBpc0xvYWRpbmc6ICExIH07XG4gIH1cbn0sIGsgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gKC4uLnIpID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coYCR7TGUuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtMZS5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLnIpO1xuICB9LCB0ID0gKC4uLnIpID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS53YXJuKGAke0xlLnJlZC5ib2xkKFwib2pzL1wiKX0ke0xlLmJvbGQuZ3JheShgJHtlfWApfVx0YCwgLi4ucik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nOiBuLFxuICAgIGVycjogdCxcbiAgICBsb2dfXzogbixcbiAgICBlcnJfXzogdFxuICB9O1xufTtcbnZhciBvdCA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgcmV0dXJuIG90ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24odCwgcikge1xuICAgIHQuX19wcm90b19fID0gcjtcbiAgfSB8fCBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgYSBpbiByKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwociwgYSkgJiYgKHRbYV0gPSByW2FdKTtcbiAgfSwgb3QoZSwgbik7XG59O1xuZnVuY3Rpb24gc2UoZSwgbikge1xuICBpZiAodHlwZW9mIG4gIT0gXCJmdW5jdGlvblwiICYmIG4gIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcobikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBvdChlLCBuKTtcbiAgZnVuY3Rpb24gdCgpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZTtcbiAgfVxuICBlLnByb3RvdHlwZSA9IG4gPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKG4pIDogKHQucHJvdG90eXBlID0gbi5wcm90b3R5cGUsIG5ldyB0KCkpO1xufVxuZnVuY3Rpb24gbW8oZSwgbiwgdCwgcikge1xuICBmdW5jdGlvbiBhKHMpIHtcbiAgICByZXR1cm4gcyBpbnN0YW5jZW9mIHQgPyBzIDogbmV3IHQoZnVuY3Rpb24oaSkge1xuICAgICAgaShzKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3ICh0IHx8ICh0ID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHMsIGkpIHtcbiAgICBmdW5jdGlvbiBjKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUoci5uZXh0KGQpKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgaShfKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KHIudGhyb3coZCkpO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBpKF8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGQpIHtcbiAgICAgIGQuZG9uZSA/IHMoZC52YWx1ZSkgOiBhKGQudmFsdWUpLnRoZW4oYywgbCk7XG4gICAgfVxuICAgIHUoKHIgPSByLmFwcGx5KGUsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB0bihlLCBuKSB7XG4gIHZhciB0ID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHNbMF0gJiAxKSB0aHJvdyBzWzFdO1xuICAgIHJldHVybiBzWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCByLCBhLCBzLCBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gaS5uZXh0ID0gYygwKSwgaS50aHJvdyA9IGMoMSksIGkucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgaTtcbiAgZnVuY3Rpb24gYyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBsKFt1LCBkXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAocikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGkgJiYgKGkgPSAwLCB1WzBdICYmICh0ID0gMCkpLCB0OyApIHRyeSB7XG4gICAgICBpZiAociA9IDEsIGEgJiYgKHMgPSB1WzBdICYgMiA/IGEucmV0dXJuIDogdVswXSA/IGEudGhyb3cgfHwgKChzID0gYS5yZXR1cm4pICYmIHMuY2FsbChhKSwgMCkgOiBhLm5leHQpICYmICEocyA9IHMuY2FsbChhLCB1WzFdKSkuZG9uZSkgcmV0dXJuIHM7XG4gICAgICBzd2l0Y2ggKGEgPSAwLCBzICYmICh1ID0gW3VbMF0gJiAyLCBzLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcyA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gdC5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgdC5sYWJlbCsrLCBhID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSB0Lm9wcy5wb3AoKSwgdC50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzID0gdC50cnlzLCAhKHMgPSBzLmxlbmd0aCA+IDAgJiYgc1tzLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgdCA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFzIHx8IHVbMV0gPiBzWzBdICYmIHVbMV0gPCBzWzNdKSkge1xuICAgICAgICAgICAgdC5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgdC5sYWJlbCA8IHNbMV0pIHtcbiAgICAgICAgICAgIHQubGFiZWwgPSBzWzFdLCBzID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocyAmJiB0LmxhYmVsIDwgc1syXSkge1xuICAgICAgICAgICAgdC5sYWJlbCA9IHNbMl0sIHQub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc1syXSAmJiB0Lm9wcy5wb3AoKSwgdC50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IG4uY2FsbChlLCB0KTtcbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICB1ID0gWzYsIGRdLCBhID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgciA9IHMgPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBoZShlKSB7XG4gIHZhciBuID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCB0ID0gbiAmJiBlW25dLCByID0gMDtcbiAgaWYgKHQpIHJldHVybiB0LmNhbGwoZSk7XG4gIGlmIChlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGUgJiYgciA+PSBlLmxlbmd0aCAmJiAoZSA9IHZvaWQgMCksIHsgdmFsdWU6IGUgJiYgZVtyKytdLCBkb25lOiAhZSB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihuID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gVmUoZSwgbikge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCF0KSByZXR1cm4gZTtcbiAgdmFyIHIgPSB0LmNhbGwoZSksIGEsIHMgPSBbXSwgaTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKGEgPSByLm5leHQoKSkuZG9uZTsgKSBzLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBpID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHQgPSByLnJldHVybikgJiYgdC5jYWxsKHIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBHZShlLCBuLCB0KSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciByID0gMCwgYSA9IG4ubGVuZ3RoLCBzOyByIDwgYTsgcisrKVxuICAgIChzIHx8ICEociBpbiBuKSkgJiYgKHMgfHwgKHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuLCAwLCByKSksIHNbcl0gPSBuW3JdKTtcbiAgcmV0dXJuIGUuY29uY2F0KHMgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobikpO1xufVxuZnVuY3Rpb24gX2UoZSkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9lID8gKHRoaXMudiA9IGUsIHRoaXMpIDogbmV3IF9lKGUpO1xufVxuZnVuY3Rpb24geW8oZSwgbiwgdCkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgciA9IHQuYXBwbHkoZSwgbiB8fCBbXSksIGEsIHMgPSBbXTtcbiAgcmV0dXJuIGEgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBjKFwibmV4dFwiKSwgYyhcInRocm93XCIpLCBjKFwicmV0dXJuXCIsIGkpLCBhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBhO1xuICBmdW5jdGlvbiBpKG0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmKS50aGVuKG0sIF8pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYyhtLCBmKSB7XG4gICAgclttXSAmJiAoYVttXSA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihFLCBiKSB7XG4gICAgICAgIHMucHVzaChbbSwgaCwgRSwgYl0pID4gMSB8fCBsKG0sIGgpO1xuICAgICAgfSk7XG4gICAgfSwgZiAmJiAoYVttXSA9IGYoYVttXSkpKTtcbiAgfVxuICBmdW5jdGlvbiBsKG0sIGYpIHtcbiAgICB0cnkge1xuICAgICAgdShyW21dKGYpKTtcbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICB5KHNbMF1bM10sIGgpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1KG0pIHtcbiAgICBtLnZhbHVlIGluc3RhbmNlb2YgX2UgPyBQcm9taXNlLnJlc29sdmUobS52YWx1ZS52KS50aGVuKGQsIF8pIDogeShzWzBdWzJdLCBtKTtcbiAgfVxuICBmdW5jdGlvbiBkKG0pIHtcbiAgICBsKFwibmV4dFwiLCBtKTtcbiAgfVxuICBmdW5jdGlvbiBfKG0pIHtcbiAgICBsKFwidGhyb3dcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24geShtLCBmKSB7XG4gICAgbShmKSwgcy5zaGlmdCgpLCBzLmxlbmd0aCAmJiBsKHNbMF1bMF0sIHNbMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBmbyhlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIHQ7XG4gIHJldHVybiBuID8gbi5jYWxsKGUpIDogKGUgPSB0eXBlb2YgaGUgPT0gXCJmdW5jdGlvblwiID8gaGUoZSkgOiBlW1N5bWJvbC5pdGVyYXRvcl0oKSwgdCA9IHt9LCByKFwibmV4dFwiKSwgcihcInRocm93XCIpLCByKFwicmV0dXJuXCIpLCB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0KTtcbiAgZnVuY3Rpb24gcihzKSB7XG4gICAgdFtzXSA9IGVbc10gJiYgZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIGwpIHtcbiAgICAgICAgaSA9IGVbc10oaSksIGEoYywgbCwgaS5kb25lLCBpLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYShzLCBpLCBjLCBsKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oZnVuY3Rpb24odSkge1xuICAgICAgcyh7IHZhbHVlOiB1LCBkb25lOiBjIH0pO1xuICAgIH0sIGkpO1xuICB9XG59XG5mdW5jdGlvbiBMKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIEhlKGUpIHtcbiAgdmFyIG4gPSBmdW5jdGlvbihyKSB7XG4gICAgRXJyb3IuY2FsbChyKSwgci5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCB0ID0gZShuKTtcbiAgcmV0dXJuIHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCB0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHQsIHQ7XG59XG52YXIgWGUgPSBIZShmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gdCA/IHQubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIHQubWFwKGZ1bmN0aW9uKHIsIGEpIHtcbiAgICAgIHJldHVybiBhICsgMSArIFwiKSBcIiArIHIudG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSB0O1xuICB9O1xufSk7XG5mdW5jdGlvbiB6ZShlLCBuKSB7XG4gIGlmIChlKSB7XG4gICAgdmFyIHQgPSBlLmluZGV4T2Yobik7XG4gICAgMCA8PSB0ICYmIGUuc3BsaWNlKHQsIDEpO1xuICB9XG59XG52YXIgVGUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZShuKSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBuLCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiwgdCwgciwgYSwgcztcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIGkgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAoaSlcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkoaSkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSBoZShpKSwgbCA9IGMubmV4dCgpOyAhbC5kb25lOyBsID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBsLnZhbHVlO1xuICAgICAgICAgICAgICB1LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsICYmICFsLmRvbmUgJiYgKHQgPSBjLnJldHVybikgJiYgdC5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgaS5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgZCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKEwoZCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZCgpO1xuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgcyA9IGggaW5zdGFuY2VvZiBYZSA/IGguZXJyb3JzIDogW2hdO1xuICAgICAgICB9XG4gICAgICB2YXIgXyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAoXykge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciB5ID0gaGUoXyksIG0gPSB5Lm5leHQoKTsgIW0uZG9uZTsgbSA9IHkubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgZiA9IG0udmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBndChmKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgcyA9IHMgPz8gW10sIGggaW5zdGFuY2VvZiBYZSA/IHMgPSBHZShHZShbXSwgVmUocykpLCBWZShoLmVycm9ycykpIDogcy5wdXNoKGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIHIgPSB7IGVycm9yOiBoIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG0gJiYgIW0uZG9uZSAmJiAoYSA9IHkucmV0dXJuKSAmJiBhLmNhbGwoeSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMpXG4gICAgICAgIHRocm93IG5ldyBYZShzKTtcbiAgICB9XG4gIH0sIGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdDtcbiAgICBpZiAobiAmJiBuICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBndChuKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAobiBpbnN0YW5jZW9mIGUpIHtcbiAgICAgICAgICBpZiAobi5jbG9zZWQgfHwgbi5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIG4uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9ICh0ID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwID8gdCA6IFtdKS5wdXNoKG4pO1xuICAgICAgfVxuICB9LCBlLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiB0ID09PSBuIHx8IEFycmF5LmlzQXJyYXkodCkgJiYgdC5pbmNsdWRlcyhuKTtcbiAgfSwgZS5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KHQpID8gKHQucHVzaChuKSwgdCkgOiB0ID8gW3QsIG5dIDogbjtcbiAgfSwgZS5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0ID09PSBuID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkodCkgJiYgemUodCwgbik7XG4gIH0sIGUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgdCAmJiB6ZSh0LCBuKSwgbiBpbnN0YW5jZW9mIGUgJiYgbi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCBlLkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4gPSBuZXcgZSgpO1xuICAgIHJldHVybiBuLmNsb3NlZCA9ICEwLCBuO1xuICB9KCksIGU7XG59KCksIG5uID0gVGUuRU1QVFk7XG5mdW5jdGlvbiBybihlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgVGUgfHwgZSAmJiBcImNsb3NlZFwiIGluIGUgJiYgTChlLnJlbW92ZSkgJiYgTChlLmFkZCkgJiYgTChlLnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIGd0KGUpIHtcbiAgTChlKSA/IGUoKSA6IGUudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBvbiA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCBhbiA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24oZSwgbikge1xuICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDI7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICB0W3IgLSAyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIEdlKFtlLCBuXSwgVmUodCkpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKGUpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gc24oZSkge1xuICBhbi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IGU7XG4gIH0pO1xufVxuZnVuY3Rpb24gd3QoKSB7XG59XG5mdW5jdGlvbiBqZShlKSB7XG4gIGUoKTtcbn1cbnZhciB1dCA9IGZ1bmN0aW9uKGUpIHtcbiAgc2UobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCkge1xuICAgIHZhciByID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHIuaXNTdG9wcGVkID0gITEsIHQgPyAoci5kZXN0aW5hdGlvbiA9IHQsIHJuKHQpICYmIHQuYWRkKHIpKSA6IHIuZGVzdGluYXRpb24gPSB3bywgcjtcbiAgfVxuICByZXR1cm4gbi5jcmVhdGUgPSBmdW5jdGlvbih0LCByLCBhKSB7XG4gICAgcmV0dXJuIG5ldyBhdCh0LCByLCBhKTtcbiAgfSwgbi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KHQpO1xuICB9LCBuLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IodCkpO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCBuLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodCk7XG4gIH0sIG4ucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgbi5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgbjtcbn0oVGUpLCBfbyA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gZXQoZSwgbikge1xuICByZXR1cm4gX28uY2FsbChlLCBuKTtcbn1cbnZhciBobyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKG4pIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IG47XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAodC5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5uZXh0KG4pO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBPZShyKTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAodC5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIHQuZXJyb3Iobik7XG4gICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgIE9lKHIpO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIE9lKG4pO1xuICB9LCBlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKG4uY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICBuLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgIE9lKHQpO1xuICAgICAgfVxuICB9LCBlO1xufSgpLCBhdCA9IGZ1bmN0aW9uKGUpIHtcbiAgc2UobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCwgciwgYSkge1xuICAgIHZhciBzID0gZS5jYWxsKHRoaXMpIHx8IHRoaXMsIGk7XG4gICAgaWYgKEwodCkgfHwgIXQpXG4gICAgICBpID0ge1xuICAgICAgICBuZXh0OiB0ID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IHIgPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogYSA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYztcbiAgICAgIHMgJiYgb24udXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGMgPSBPYmplY3QuY3JlYXRlKHQpLCBjLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBpID0ge1xuICAgICAgICBuZXh0OiB0Lm5leHQgJiYgZXQodC5uZXh0LCBjKSxcbiAgICAgICAgZXJyb3I6IHQuZXJyb3IgJiYgZXQodC5lcnJvciwgYyksXG4gICAgICAgIGNvbXBsZXRlOiB0LmNvbXBsZXRlICYmIGV0KHQuY29tcGxldGUsIGMpXG4gICAgICB9KSA6IGkgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gcy5kZXN0aW5hdGlvbiA9IG5ldyBobyhpKSwgcztcbiAgfVxuICByZXR1cm4gbjtcbn0odXQpO1xuZnVuY3Rpb24gT2UoZSkge1xuICBzbihlKTtcbn1cbmZ1bmN0aW9uIGdvKGUpIHtcbiAgdGhyb3cgZTtcbn1cbnZhciB3byA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogd3QsXG4gIGVycm9yOiBnbyxcbiAgY29tcGxldGU6IHd0XG59LCBkdCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIGJvKGUpIHtcbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiB2byhlKSB7XG4gIHJldHVybiBlLmxlbmd0aCA9PT0gMCA/IGJvIDogZS5sZW5ndGggPT09IDEgPyBlWzBdIDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBlLnJlZHVjZShmdW5jdGlvbihyLCBhKSB7XG4gICAgICByZXR1cm4gYShyKTtcbiAgICB9LCB0KTtcbiAgfTtcbn1cbnZhciByZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKG4pIHtcbiAgICBuICYmICh0aGlzLl9zdWJzY3JpYmUgPSBuKTtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IG5ldyBlKCk7XG4gICAgcmV0dXJuIHQuc291cmNlID0gdGhpcywgdC5vcGVyYXRvciA9IG4sIHQ7XG4gIH0sIGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKG4sIHQsIHIpIHtcbiAgICB2YXIgYSA9IHRoaXMsIHMgPSBDbyhuKSA/IG4gOiBuZXcgYXQobiwgdCwgcik7XG4gICAgcmV0dXJuIGplKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBhLCBjID0gaS5vcGVyYXRvciwgbCA9IGkuc291cmNlO1xuICAgICAgcy5hZGQoYyA/IGMuY2FsbChzLCBsKSA6IGwgPyBhLl9zdWJzY3JpYmUocykgOiBhLl90cnlTdWJzY3JpYmUocykpO1xuICAgIH0pLCBzO1xuICB9LCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24obikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKG4pO1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIG4uZXJyb3IodCk7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24obiwgdCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICByZXR1cm4gdCA9IGJ0KHQpLCBuZXcgdChmdW5jdGlvbihhLCBzKSB7XG4gICAgICB2YXIgaSA9IG5ldyBhdCh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbihjKTtcbiAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICBzKGwpLCBpLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcyxcbiAgICAgICAgY29tcGxldGU6IGFcbiAgICAgIH0pO1xuICAgICAgci5zdWJzY3JpYmUoaSk7XG4gICAgfSk7XG4gIH0sIGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQ7XG4gICAgcmV0dXJuICh0ID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuc3Vic2NyaWJlKG4pO1xuICB9LCBlLnByb3RvdHlwZVtkdF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgdCA9IDA7IHQgPCBhcmd1bWVudHMubGVuZ3RoOyB0KyspXG4gICAgICBuW3RdID0gYXJndW1lbnRzW3RdO1xuICAgIHJldHVybiB2byhuKSh0aGlzKTtcbiAgfSwgZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcztcbiAgICByZXR1cm4gbiA9IGJ0KG4pLCBuZXcgbihmdW5jdGlvbihyLCBhKSB7XG4gICAgICB2YXIgcztcbiAgICAgIHQuc3Vic2NyaWJlKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgcmV0dXJuIHMgPSBpO1xuICAgICAgfSwgZnVuY3Rpb24oaSkge1xuICAgICAgICByZXR1cm4gYShpKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcihzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCBlLmNyZWF0ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gbmV3IGUobik7XG4gIH0sIGU7XG59KCk7XG5mdW5jdGlvbiBidChlKSB7XG4gIHZhciBuO1xuICByZXR1cm4gKG4gPSBlID8/IG9uLlByb21pc2UpICE9PSBudWxsICYmIG4gIT09IHZvaWQgMCA/IG4gOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gRW8oZSkge1xuICByZXR1cm4gZSAmJiBMKGUubmV4dCkgJiYgTChlLmVycm9yKSAmJiBMKGUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gQ28oZSkge1xuICByZXR1cm4gZSAmJiBlIGluc3RhbmNlb2YgdXQgfHwgRW8oZSkgJiYgcm4oZSk7XG59XG5mdW5jdGlvbiBTbyhlKSB7XG4gIHJldHVybiBMKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGlmdCk7XG59XG5mdW5jdGlvbiBQbyhlKSB7XG4gIHJldHVybiBmdW5jdGlvbihuKSB7XG4gICAgaWYgKFNvKG4pKVxuICAgICAgcmV0dXJuIG4ubGlmdChmdW5jdGlvbih0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGUodCwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgICB0aGlzLmVycm9yKHIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBrbyhlLCBuLCB0LCByLCBhKSB7XG4gIHJldHVybiBuZXcgQW8oZSwgbiwgdCwgciwgYSk7XG59XG52YXIgQW8gPSBmdW5jdGlvbihlKSB7XG4gIHNlKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIsIGEsIHMsIGksIGMpIHtcbiAgICB2YXIgbCA9IGUuY2FsbCh0aGlzLCB0KSB8fCB0aGlzO1xuICAgIHJldHVybiBsLm9uRmluYWxpemUgPSBpLCBsLnNob3VsZFVuc3Vic2NyaWJlID0gYywgbC5fbmV4dCA9IHIgPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICByKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICB0LmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fbmV4dCwgbC5fZXJyb3IgPSBzID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgdC5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2Vycm9yLCBsLl9jb21wbGV0ZSA9IGEgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEoKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgdC5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2NvbXBsZXRlLCBsO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0O1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciByID0gdGhpcy5jbG9zZWQ7XG4gICAgICBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhciAmJiAoKHQgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCB8fCB0LmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgbjtcbn0odXQpLCBJbyA9IEhlKGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgY24gPSBmdW5jdGlvbihlKSB7XG4gIHNlKG4sIGUpO1xuICBmdW5jdGlvbiBuKCkge1xuICAgIHZhciB0ID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHQuY2xvc2VkID0gITEsIHQuY3VycmVudE9ic2VydmVycyA9IG51bGwsIHQub2JzZXJ2ZXJzID0gW10sIHQuaXNTdG9wcGVkID0gITEsIHQuaGFzRXJyb3IgPSAhMSwgdC50aHJvd25FcnJvciA9IG51bGwsIHQ7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBuZXcgdnQodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIHIub3BlcmF0b3IgPSB0LCByO1xuICB9LCBuLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBJbygpO1xuICB9LCBuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICBqZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhLCBzO1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuY3VycmVudE9ic2VydmVycyB8fCAoci5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShyLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSBoZShyLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gaS5uZXh0KCk7ICFjLmRvbmU7IGMgPSBpLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGwgPSBjLnZhbHVlO1xuICAgICAgICAgICAgbC5uZXh0KHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIGEgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAocyA9IGkucmV0dXJuKSAmJiBzLmNhbGwoaSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgamUoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5oYXNFcnJvciA9IHIuaXNTdG9wcGVkID0gITAsIHIudGhyb3duRXJyb3IgPSB0O1xuICAgICAgICBmb3IgKHZhciBhID0gci5vYnNlcnZlcnM7IGEubGVuZ3RoOyApXG4gICAgICAgICAgYS5zaGlmdCgpLmVycm9yKHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gdGhpcztcbiAgICBqZShmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0Ll90aHJvd0lmQ2xvc2VkKCksICF0LmlzU3RvcHBlZCkge1xuICAgICAgICB0LmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciByID0gdC5vYnNlcnZlcnM7IHIubGVuZ3RoOyApXG4gICAgICAgICAgci5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0O1xuICAgICAgcmV0dXJuICgodCA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0Lmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgbi5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgdCk7XG4gIH0sIG4ucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyh0KSwgdGhpcy5faW5uZXJTdWJzY3JpYmUodCk7XG4gIH0sIG4ucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMsIGEgPSB0aGlzLCBzID0gYS5oYXNFcnJvciwgaSA9IGEuaXNTdG9wcGVkLCBjID0gYS5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIHMgfHwgaSA/IG5uIDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGMucHVzaCh0KSwgbmV3IFRlKGZ1bmN0aW9uKCkge1xuICAgICAgci5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgemUoYywgdCk7XG4gICAgfSkpO1xuICB9LCBuLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMsIGEgPSByLmhhc0Vycm9yLCBzID0gci50aHJvd25FcnJvciwgaSA9IHIuaXNTdG9wcGVkO1xuICAgIGEgPyB0LmVycm9yKHMpIDogaSAmJiB0LmNvbXBsZXRlKCk7XG4gIH0sIG4ucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gbmV3IHJlKCk7XG4gICAgcmV0dXJuIHQuc291cmNlID0gdGhpcywgdDtcbiAgfSwgbi5jcmVhdGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgcmV0dXJuIG5ldyB2dCh0LCByKTtcbiAgfSwgbjtcbn0ocmUpLCB2dCA9IGZ1bmN0aW9uKGUpIHtcbiAgc2UobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCwgcikge1xuICAgIHZhciBhID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuZGVzdGluYXRpb24gPSB0LCBhLnNvdXJjZSA9IHIsIGE7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIGE7XG4gICAgKGEgPSAociA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIubmV4dCkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwIHx8IGEuY2FsbChyLCB0KTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIGE7XG4gICAgKGEgPSAociA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuZXJyb3IpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwociwgdCk7XG4gIH0sIG4ucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgKHIgPSAodCA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQuY29tcGxldGUpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCB8fCByLmNhbGwodCk7XG4gIH0sIG4ucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIGE7XG4gICAgcmV0dXJuIChhID0gKHIgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5zdWJzY3JpYmUodCkpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiBubjtcbiAgfSwgbjtcbn0oY24pLCBSbyA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgRm8gPSBmdW5jdGlvbihlKSB7XG4gIHNlKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICByZXR1cm4gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24odCwgcikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBuO1xufShUZSksIEV0ID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24oZSwgbikge1xuICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDI7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICB0W3IgLSAyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBHZShbZSwgbl0sIFZlKHQpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbChlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgVG8gPSBmdW5jdGlvbihlKSB7XG4gIHNlKG4sIGUpO1xuICBmdW5jdGlvbiBuKHQsIHIpIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzLCB0LCByKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLnNjaGVkdWxlciA9IHQsIGEud29yayA9IHIsIGEucGVuZGluZyA9ICExLCBhO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgYTtcbiAgICBpZiAociA9PT0gdm9pZCAwICYmIChyID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IHQ7XG4gICAgdmFyIHMgPSB0aGlzLmlkLCBpID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIHMgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoaSwgcywgcikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IHIsIHRoaXMuaWQgPSAoYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiB0aGlzLnJlcXVlc3RBc3luY0lkKGksIHRoaXMuaWQsIHIpLCB0aGlzO1xuICB9LCBuLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHQsIHIsIGEpIHtcbiAgICByZXR1cm4gYSA9PT0gdm9pZCAwICYmIChhID0gMCksIEV0LnNldEludGVydmFsKHQuZmx1c2guYmluZCh0LCB0aGlzKSwgYSk7XG4gIH0sIG4ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24odCwgciwgYSkge1xuICAgIGlmIChhID09PSB2b2lkIDAgJiYgKGEgPSAwKSwgYSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGEgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiByO1xuICAgIHIgIT0gbnVsbCAmJiBFdC5jbGVhckludGVydmFsKHIpO1xuICB9LCBuLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBhID0gdGhpcy5fZXhlY3V0ZSh0LCByKTtcbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiBhO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCBuLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB2YXIgYSA9ICExLCBzO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsodCk7XG4gICAgfSBjYXRjaCAoaSkge1xuICAgICAgYSA9ICEwLCBzID0gaSB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIHM7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIHQgPSB0aGlzLCByID0gdC5pZCwgYSA9IHQuc2NoZWR1bGVyLCBzID0gYS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIHplKHMsIHRoaXMpLCByICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIHIsIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCBuO1xufShGbyksIEN0ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUobiwgdCkge1xuICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IGUubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gbiwgdGhpcy5ub3cgPSB0O1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKG4sIHQsIHIpIHtcbiAgICByZXR1cm4gdCA9PT0gdm9pZCAwICYmICh0ID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgbikuc2NoZWR1bGUociwgdCk7XG4gIH0sIGUubm93ID0gUm8ubm93LCBlO1xufSgpLCBNbyA9IGZ1bmN0aW9uKGUpIHtcbiAgc2UobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCwgcikge1xuICAgIHIgPT09IHZvaWQgMCAmJiAociA9IEN0Lm5vdyk7XG4gICAgdmFyIGEgPSBlLmNhbGwodGhpcywgdCwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5hY3Rpb25zID0gW10sIGEuX2FjdGl2ZSA9ICExLCBhO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICByLnB1c2godCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBhO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAoYSA9IHQuZXhlY3V0ZSh0LnN0YXRlLCB0LmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKHQgPSByLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgYSkge1xuICAgICAgZm9yICg7IHQgPSByLnNoaWZ0KCk7IClcbiAgICAgICAgdC51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgYTtcbiAgICB9XG4gIH0sIG47XG59KEN0KSwgRG8gPSBuZXcgTW8oVG8pLCBObyA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIExvKGUpIHtcbiAgcmV0dXJuIEwoZSA9PSBudWxsID8gdm9pZCAwIDogZS50aGVuKTtcbn1cbmZ1bmN0aW9uIE9vKGUpIHtcbiAgcmV0dXJuIEwoZVtkdF0pO1xufVxuZnVuY3Rpb24gVW8oZSkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgTChlID09IG51bGwgPyB2b2lkIDAgOiBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiBqbyhlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGUgIT09IG51bGwgJiYgdHlwZW9mIGUgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgZSArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24geG8oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgJG8gPSB4bygpO1xuZnVuY3Rpb24gVm8oZSkge1xuICByZXR1cm4gTChlID09IG51bGwgPyB2b2lkIDAgOiBlWyRvXSk7XG59XG5mdW5jdGlvbiBHbyhlKSB7XG4gIHJldHVybiB5byh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciB0LCByLCBhLCBzO1xuICAgIHJldHVybiB0bih0aGlzLCBmdW5jdGlvbihpKSB7XG4gICAgICBzd2l0Y2ggKGkubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHQgPSBlLmdldFJlYWRlcigpLCBpLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGkudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIGkubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCBfZSh0LnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIHIgPSBpLnNlbnQoKSwgYSA9IHIudmFsdWUsIHMgPSByLmRvbmUsIHMgPyBbNCwgX2Uodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIGkuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgX2UoYSldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBpLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gaS5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIHQucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gem8oZSkge1xuICByZXR1cm4gTChlID09IG51bGwgPyB2b2lkIDAgOiBlLmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBxbyhlKSB7XG4gIGlmIChlIGluc3RhbmNlb2YgcmUpXG4gICAgcmV0dXJuIGU7XG4gIGlmIChlICE9IG51bGwpIHtcbiAgICBpZiAoT28oZSkpXG4gICAgICByZXR1cm4gWW8oZSk7XG4gICAgaWYgKE5vKGUpKVxuICAgICAgcmV0dXJuIEJvKGUpO1xuICAgIGlmIChMbyhlKSlcbiAgICAgIHJldHVybiBIbyhlKTtcbiAgICBpZiAoVW8oZSkpXG4gICAgICByZXR1cm4gbG4oZSk7XG4gICAgaWYgKFZvKGUpKVxuICAgICAgcmV0dXJuIEpvKGUpO1xuICAgIGlmICh6byhlKSlcbiAgICAgIHJldHVybiBLbyhlKTtcbiAgfVxuICB0aHJvdyBqbyhlKTtcbn1cbmZ1bmN0aW9uIFlvKGUpIHtcbiAgcmV0dXJuIG5ldyByZShmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSBlW2R0XSgpO1xuICAgIGlmIChMKHQuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiB0LnN1YnNjcmliZShuKTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gQm8oZSkge1xuICByZXR1cm4gbmV3IHJlKGZ1bmN0aW9uKG4pIHtcbiAgICBmb3IgKHZhciB0ID0gMDsgdCA8IGUubGVuZ3RoICYmICFuLmNsb3NlZDsgdCsrKVxuICAgICAgbi5uZXh0KGVbdF0pO1xuICAgIG4uY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBIbyhlKSB7XG4gIHJldHVybiBuZXcgcmUoZnVuY3Rpb24obikge1xuICAgIGUudGhlbihmdW5jdGlvbih0KSB7XG4gICAgICBuLmNsb3NlZCB8fCAobi5uZXh0KHQpLCBuLmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBuLmVycm9yKHQpO1xuICAgIH0pLnRoZW4obnVsbCwgc24pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEpvKGUpIHtcbiAgcmV0dXJuIG5ldyByZShmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQsIHI7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGEgPSBoZShlKSwgcyA9IGEubmV4dCgpOyAhcy5kb25lOyBzID0gYS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIGkgPSBzLnZhbHVlO1xuICAgICAgICBpZiAobi5uZXh0KGkpLCBuLmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAoYykge1xuICAgICAgdCA9IHsgZXJyb3I6IGMgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyAmJiAhcy5kb25lICYmIChyID0gYS5yZXR1cm4pICYmIHIuY2FsbChhKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICBuLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbG4oZSkge1xuICByZXR1cm4gbmV3IHJlKGZ1bmN0aW9uKG4pIHtcbiAgICBabyhlLCBuKS5jYXRjaChmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gbi5lcnJvcih0KTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBLbyhlKSB7XG4gIHJldHVybiBsbihHbyhlKSk7XG59XG5mdW5jdGlvbiBabyhlLCBuKSB7XG4gIHZhciB0LCByLCBhLCBzO1xuICByZXR1cm4gbW8odGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBpLCBjO1xuICAgIHJldHVybiB0bih0aGlzLCBmdW5jdGlvbihsKSB7XG4gICAgICBzd2l0Y2ggKGwubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGwudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCB0ID0gZm8oZSksIGwubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCB0Lm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAociA9IGwuc2VudCgpLCAhIXIuZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAoaSA9IHIudmFsdWUsIG4ubmV4dChpKSwgbi5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGwubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSBsLnNlbnQoKSwgYSA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBsLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCByICYmICFyLmRvbmUgJiYgKHMgPSB0LnJldHVybikgPyBbNCwgcy5jYWxsKHQpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwuc2VudCgpLCBsLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiBuLmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBXbyhlLCBuLCB0LCByLCBhKSB7XG4gIHIgPT09IHZvaWQgMCAmJiAociA9IDApLCBhID09PSB2b2lkIDAgJiYgKGEgPSAhMSk7XG4gIHZhciBzID0gbi5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICB0KCksIGEgPyBlLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIHIpKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgcik7XG4gIGlmIChlLmFkZChzKSwgIWEpXG4gICAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBRbyhlLCBuKSB7XG4gIHZhciB0ID0gTChlKSA/IGUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgciA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gYS5lcnJvcih0KCkpO1xuICB9O1xuICByZXR1cm4gbmV3IHJlKHIpO1xufVxudmFyIFhvID0gSGUoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gZWEoZSwgbikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCwgcikge1xuICAgIHZhciBhID0gITEsIHM7XG4gICAgZS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24oaSkge1xuICAgICAgICBzID0gaSwgYSA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiByLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBhID8gdChzKSA6IHIobmV3IFhvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHRhKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihlKTtcbn1cbnZhciBuYSA9IEhlKGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSBudWxsKSwgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSB0O1xuICB9O1xufSk7XG5mdW5jdGlvbiByYShlLCBuKSB7XG4gIHZhciB0ID0gdGEoZSkgPyB7IGZpcnN0OiBlIH0gOiB0eXBlb2YgZSA9PSBcIm51bWJlclwiID8geyBlYWNoOiBlIH0gOiBlLCByID0gdC5maXJzdCwgYSA9IHQuZWFjaCwgcyA9IHQud2l0aCwgaSA9IHMgPT09IHZvaWQgMCA/IG9hIDogcywgYyA9IHQuc2NoZWR1bGVyLCBsID0gYyA9PT0gdm9pZCAwID8gRG8gOiBjLCB1ID0gdC5tZXRhLCBkID0gdSA9PT0gdm9pZCAwID8gbnVsbCA6IHU7XG4gIGlmIChyID09IG51bGwgJiYgYSA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIFBvKGZ1bmN0aW9uKF8sIHkpIHtcbiAgICB2YXIgbSwgZiwgaCA9IG51bGwsIEUgPSAwLCBiID0gZnVuY3Rpb24odikge1xuICAgICAgZiA9IFdvKHksIGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG0udW5zdWJzY3JpYmUoKSwgcW8oaSh7XG4gICAgICAgICAgICBtZXRhOiBkLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiBoLFxuICAgICAgICAgICAgc2VlbjogRVxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoeSk7XG4gICAgICAgIH0gY2F0Y2ggKFMpIHtcbiAgICAgICAgICB5LmVycm9yKFMpO1xuICAgICAgICB9XG4gICAgICB9LCB2KTtcbiAgICB9O1xuICAgIG0gPSBfLnN1YnNjcmliZShrbyh5LCBmdW5jdGlvbih2KSB7XG4gICAgICBmID09IG51bGwgfHwgZi51bnN1YnNjcmliZSgpLCBFKyssIHkubmV4dChoID0gdiksIGEgPiAwICYmIGIoYSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgZiAhPSBudWxsICYmIGYuY2xvc2VkIHx8IGYgPT0gbnVsbCB8fCBmLnVuc3Vic2NyaWJlKCksIGggPSBudWxsO1xuICAgIH0pKSwgIUUgJiYgYihyICE9IG51bGwgPyB0eXBlb2YgciA9PSBcIm51bWJlclwiID8gciA6ICtyIC0gbC5ub3coKSA6IGEpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG9hKGUpIHtcbiAgdGhyb3cgbmV3IG5hKGUpO1xufVxuY2xhc3MgQWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9IChuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiBuIH0sIHRoaXMuX3N1YmplY3QubmV4dChuKSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAobiwgdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IG4sIGVyck1zZzogdCB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKG4pO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAobikgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IG4sIHRoaXMuc3Vic2NyaWJlID0gKG4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiBuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdCA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIG4odGhpcy5fY3VycmVudCksIHQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIG4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAobikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgSmUodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0ID0ge1xuICAgICAgICBmaXJzdDogbi50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiBRbygoKSA9PiBuZXcgRXJyb3Iobi50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gZWEodGhpcy5fc3ViamVjdC5waXBlKHJhKHQpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IGNuKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IFN0ID0geiQxLmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSksIGFhID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59LCBzYSA9IChlKSA9PiBhYVtlXSwgdHQgPSB7fSwgdW4gPSBhc3luYyAoZSkgPT4ge1xuICBpZiAodHRbZV0pXG4gICAgcmV0dXJuIHR0W2VdO1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBlKSkudGhlbigocikgPT4gci5qc29uKCkpLCB0ID0gU3QucGFyc2Uobi5lbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIHR0W2VdID0gdCwgdDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFN0LlZhbHVlcy5wcm9kO1xuICB9XG59O1xuZnVuY3Rpb24gSmUoZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke2V9YCk7XG59XG5jb25zdCBkbiA9IChlLCBuKSA9PiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdF0pID0+ICFuLmluY2x1ZGVzKHQpKSksIFIgPSAoKSA9PiB7XG4gIGlmICghKHR5cGVvZiB3aW5kb3cgPiBcInVcIikpXG4gICAgcmV0dXJuIHdpbmRvdztcbn0sIHN0ID0gbmV3IEFlKCksIFB0ID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCIsIGlhID0gMywgY2EgPSAzLCBsYSA9IDFlMywgeyBsb2dfXzogVWUgfSA9IGsoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgdWEge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgbiwgdDtcbiAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIFVlKFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0sIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBVZShcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIiksIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpLCAobiA9IFIoKSkgPT0gbnVsbCB8fCBuLmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHQgPSBSKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KG4sIHQsIHIpIHtcbiAgICBjb25zdCBhID0ge1xuICAgICAgZXZlbnROYW1lOiBuLFxuICAgICAgcHJvcGVydGllczogdCB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiByIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gcGVyZm9ybWFuY2Uubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gYS50aW1lc3RhbXAsIHRoaXMucXVldWUucHVzaChhKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSwgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHZhciBuLCB0O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByID0gKHQgPSAobiA9IFIoKSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4ubG9jYWxTdG9yYWdlKSA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRJdGVtKFB0KTtcbiAgICAgIHIgJiYgKHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHIpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIHZhciBuO1xuICAgIChuID0gUigpKSA9PSBudWxsIHx8IG4ubG9jYWxTdG9yYWdlLnNldEl0ZW0oUHQsIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBuID0gUigpO1xuICAgIG4gJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCAmJiAodGhpcy5iYXRjaFRpbWVvdXQgPSBuLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsLCB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH0sIGxhKSk7XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIHZhciBuO1xuICAgIHRoaXMuYmF0Y2hUaW1lb3V0ICYmICgobiA9IFIoKSkgPT0gbnVsbCB8fCBuLmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCksIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCksIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITE7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgICFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwIHx8ICh0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICEwLCB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMSwgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9KSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IG4gPSBzdC5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghbikge1xuICAgICAgVWUoXCJNZXRyaWNzIGNvbnRleHQgbm90IGF2YWlsYWJsZSwgd2lsbCByZXRyeSBsYXRlclwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdCA9IHRoaXMucXVldWUuc2xpY2UoMCwgY2EpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByID0ge1xuICAgICAgICBldmVudHM6IHQubWFwKChjKSA9PiAoe1xuICAgICAgICAgIGV2ZW50X25hbWU6IGMuZXZlbnROYW1lLFxuICAgICAgICAgIGRldmljZV90b2tlbjogbi5kZXZpY2VUb2tlbixcbiAgICAgICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLm4sXG4gICAgICAgICAgICAuLi5jLmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBub25jZTogYy5ub25jZSxcbiAgICAgICAgICAgIGRhdGV0aW1lOiBjLmRhdGV0aW1lLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBjLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBjLnRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQsXG4gICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IG4uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIC4uLmMucHJvcGVydGllc1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgICB9LCBhID0gc2Eobi5lbnZpcm9ubWVudCksIHMgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgYSk7XG4gICAgICAoYXdhaXQgZmV0Y2gocy50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyKVxuICAgICAgfSkpLm9rID8gKHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHQubGVuZ3RoKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSkgOiB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHQpO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIFVlKFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCByKSwgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaCh0KTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2gobikge1xuICAgIG4uZm9yRWFjaCgocikgPT4ge1xuICAgICAgci5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCB0ID0gbi5maWx0ZXIoKHIpID0+IHIuYXR0ZW1wdENvdW50IDwgaWEpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKG4ubGVuZ3RoKSwgdGhpcy5xdWV1ZSA9IFsuLi50LCAuLi50aGlzLnF1ZXVlXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIHZhciBuLCB0O1xuICAgIChuID0gUigpKSA9PSBudWxsIHx8IG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAodCA9IFIoKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lciksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IHBuID0gbmV3IHVhKCksIGcgPSAoZSwgbiwgdCkgPT4ge1xuICBwbi5hZGRFdmVudChlLCBuLCB0KTtcbn0sIG1uID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IEcoZS5yZWFzb24pO1xuICBnKFwidW5oYW5kbGVkX3JlamVjdGlvbl9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogbixcbiAgICBlcnJvcl9uYW1lOiBlLnJlYXNvblxuICB9KTtcbn0sIHluID0gKGUpID0+IHtcbiAgdmFyIHQsIHI7XG4gIGNvbnN0IG4gPSBHKGUuZXJyb3IpO1xuICBnKFwidW5jYXVnaHRfZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IG4sXG4gICAgZXJyb3JfbmFtZTogKHQgPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogdC5uYW1lLFxuICAgIGVycm9yX3N0YWNrOiAociA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiByLnN0YWNrLFxuICAgIGZpbGVfbmFtZTogZS5maWxlbmFtZSxcbiAgICBsaW5lX251bWJlcjogZS5saW5lbm8sXG4gICAgY29sdW1uX251bWJlcjogZS5jb2xub1xuICB9KTtcbn0sIGRhID0gKCkgPT4ge1xuICB2YXIgZSwgbjtcbiAgKGUgPSBSKCkpID09IG51bGwgfHwgZS5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgeW4pLCAobiA9IFIoKSkgPT0gbnVsbCB8fCBuLmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgbW4pO1xufSwgcGEgPSAoKSA9PiB7XG4gIHZhciBlLCBuO1xuICAoZSA9IFIoKSkgPT0gbnVsbCB8fCBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCB5biksIChuID0gUigpKSA9PSBudWxsIHx8IG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBtbik7XG59O1xudmFyIHh0O1xuKHh0ID0gUigpKSA9PSBudWxsIHx8IHh0LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgKCkgPT4ge1xuICBwbi5wcm9jZXNzUXVldWUoKTtcbn0pO1xuY2xhc3MgZm4gZXh0ZW5kcyBwbyB7XG4gIGNvbnN0cnVjdG9yKG4pIHtcbiAgICBjb25zdCB0ID0gYCR7bi5tZXNzYWdlfWA7XG4gICAgc3VwZXIodCksIHRoaXMucmVzcG9uc2UgPSBuO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBVID0gYXN5bmMgKGUsIG4sIHQsIHIpID0+IHtcbiAgciAmJiBnKHIsIHtcbiAgICAuLi5uXG4gIH0pO1xuICBjb25zdCBhID0gYXdhaXQgZS5zZW5kKG4pO1xuICBpZiAoeWEoYSkpXG4gICAgdGhyb3cgbmV3IGZuKGEpO1xuICBpZiAoIW1hKGEsIHQpKSB7XG4gICAgY29uc3QgcyA9IHQuc2FmZVBhcnNlKGEpO1xuICAgIHRocm93IHMuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgdCwgXCJBY3R1YWw6XCIsIGEpLCBzLmVycm9yKTtcbiAgfVxuICByZXR1cm4gciAmJiBnKHIsIHtcbiAgICAuLi5hXG4gIH0pLCBhO1xufSwgbWEgPSAoZSwgbikgPT4gbi5zYWZlUGFyc2UoZSkuc3VjY2VzcywgeWEgPSAoZSkgPT4gR3Iuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIGZhID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IG4gfSwgV3QpLCBUID0gYXN5bmMgKGUpID0+IGF3YWl0IFUoZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIFF0KSwgdmUgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgVShcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiBuIH0sXG4gIGVuLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCBfYSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBVKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiBuIH0sXG4gIHJvLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgaGEgPSBhc3luYyAoZSwgbikgPT4ge1xuICBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4ublxuICB9KTtcbiAgY29uc3QgdCA9IGF3YWl0IFUoZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogbiB9LCBlbik7XG4gIHJldHVybiBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnRcbiAgfSksIHQ7XG59LCB6ID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiBuIH0sXG4gIFJyLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIGdhID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sXG4gIFh0LFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIHdhID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogbiB9LFxuICBJcixcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgYmEgPSBhc3luYyAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgZmEoZSwge1xuICAgIHNlY3VyZV90b2tlbjogbixcbiAgICBwcm9tb3Rpb25fY29kZTogdFxuICB9KSwgYSA9IG5ldyBTZXQoci5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoYS5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2Euc2l6ZX1gKTtcbiAgY29uc3QgcyA9IGEudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIGkgPSBpbyhyLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBzLFxuICAgIGFtb3VudEF0b206IGlcbiAgfTtcbn0sIEVlID0gYXN5bmMgKGUsIG4sIHQsIHIpID0+IHtcbiAgaWYgKHQpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIHIgPSByIHx8IHZvaWQgMDtcbiAgICBjb25zdCBhID0gYXdhaXQgYmEoZSwgbiwgcik7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogYS5hbW91bnRBdG9tLCBjdXJyZW5jeTogYS5jdXJyZW5jeSB9O1xuICB9XG59LCB2YSA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGlmIChlLnNpemUgPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShlLnZhbHVlcygpKS5tYXAoXG4gICAgICAocikgPT4gVShyLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkOiBuIH0sIFByKVxuICAgIClcbiAgKTtcbn0sIGt0ID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IG4gfSxcbiAgbHQsXG4gIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4pLCBFYSA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBVKGUsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sIFh0LCBcInNldHVwX2NoZWNrb3V0XCIpLCBwdCA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBVKGUsIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkOiBuIH0sIGx0LCBcInBlcmZvcm1fY2hlY2tvdXRcIiksIF9uID0gMWUzLCBDYSA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnNvbGUubG9nKG4pO1xuICBjb25zdCByID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogX24sXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIGEgPSBhd2FpdCBVKHIsIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBrcik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIGEpLCBhO1xufSwgbXQgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgVShcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSxcbiAgYW8sXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgaG4gPSBhc3luYyAoZSwgbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgVShcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogbiB9IH0sXG4gICAgICBvb1xuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBHKHQpKSwgXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn0sIFNhID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJzZXRfdXNlcl9kZXZpY2VfdG9rZW5cIiwgcGF5bG9hZDogeyBkZXZpY2VfdG9rZW46IG4gfSB9LFxuICBzb1xuKSwgSyA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuSy5FbnVtLnN0cmlwZTtcbmNvbnN0IGduID0gKHtcbiAgc2NyaXB0SWQ6IGUsXG4gIHNyYzogbixcbiAgY2hlY2tMb2FkZWRGbjogdFxufSkgPT4ge1xuICBjb25zdCByID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGEsIHMpID0+IHtcbiAgICBsZXQgaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgaS5zcmMgPSBuLCBpLmlkID0gZSwgaS5hc3luYyA9ICEwO1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICB0KCkgPyBhKCkgOiBjID8gaSA9IGMgOiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLCBpLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImxvYWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgci5hYm9ydCgpLCBhKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IHIuc2lnbmFsIH1cbiAgICApLCBpLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImVycm9yXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHIuYWJvcnQoKSwgcyhcIkZhaWxlZCB0byBsb2FkIHRoZSBzY3JpcHRcIik7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IHIuc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn0sIHduID0gKCkgPT4gZ24oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhIXdpbmRvdy5BcHBsZVBheVNES1xufSksIGJuID0gKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IG4udG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgciA9IG4uYmlsbGluZ0NvbnRhY3QsIGEgPSBuLnNoaXBwaW5nQ29udGFjdCwgcyA9IHsgLi4uZSB9O1xuICBpZiAodCB8fCByIHx8IGEpIHtcbiAgICBzW3AuRU1BSUxdID0gc1twLkVNQUlMXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5lbWFpbEFkZHJlc3MpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmVtYWlsQWRkcmVzcykgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBzW3AuQ09VTlRSWV0gPSBzW3AuQ09VTlRSWV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuY291bnRyeUNvZGUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBzW3AuWklQX0NPREVdID0gc1twLlpJUF9DT0RFXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5wb3N0YWxDb2RlKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5wb3N0YWxDb2RlKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgaSA9IHNbcC5GSVJTVF9OQU1FXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5naXZlbk5hbWUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmdpdmVuTmFtZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZ2l2ZW5OYW1lKSB8fCBcIlwiLCBjID0gc1twLkxBU1RfTkFNRV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZmFtaWx5TmFtZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZmFtaWx5TmFtZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZmFtaWx5TmFtZSkgfHwgXCJcIjtcbiAgICBpIHx8IGMgPyAoc1twLkZJUlNUX05BTUVdID0gaSwgc1twLkxBU1RfTkFNRV0gPSBjKSA6IChzW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHNbcC5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIHM7XG59O1xueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IFBhID0gKHtcbiAgdG90YWw6IGUsXG4gIHByZWZpbGw6IG5cbn0pID0+IHtcbiAgdmFyIHI7XG4gIGlmIChuLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7bi50b2tlbn1gLCBWdCkudG9TdHJpbmcoKVxuICAgIH07XG4gIGNvbnN0IHQgPSAociA9IG4ubGluZV9pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF07XG4gIGlmICh0KVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5iaWxsaW5nX2ludGVydmFsX2NvdW50KSA/PyB2b2lkIDAsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHtuLnRva2VufWBcbiAgICB9O1xufSwga2EgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogbixcbiAgcHJlZmlsbDogdCxcbiAgZGVmYXVsdExhYmVsOiByID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIHZhciBjLCBsO1xuICBjb25zdCBhID0gKCgoYyA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogYy5jdXJyZW5jeSkgPz8gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuY3VycmVuY3kpID8/IG4uY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGkgPSAoKCgobCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnRBdG9tKSA/PyAobiA9PSBudWxsID8gdm9pZCAwIDogbi5hbW91bnRBdG9tKSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGU6IGEsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5sYWJlbCkgPz8gciA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlICE9IG51bGwgJiYgZS5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IGlcbiAgICB9XG4gIH07XG59LCB2biA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiBuLFxuICBwcmVmaWxsOiB0LFxuICBkZWZhdWx0TGFiZWw6IHJcbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGU6IGEsIHRvdGFsOiBzIH0gPSBrYSh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgICBpbml0aWFsUHJldmlldzogbixcbiAgICBwcmVmaWxsOiB0LFxuICAgIGRlZmF1bHRMYWJlbDogclxuICB9KTtcbiAgbGV0IGkgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGU6IGEsXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgIF0sXG4gICAgdG90YWw6IHMsXG4gICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IFBhKHtcbiAgICAgIHRvdGFsOiBzLFxuICAgICAgcHJlZmlsbDogdFxuICAgIH0pXG4gIH07XG4gIHJldHVybiBlICE9IG51bGwgJiYgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ICYmICh0eXBlb2YgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IGkgPSB7XG4gICAgLi4uaSxcbiAgICAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QoaSlcbiAgfSA6IGkgPSB7IC4uLmksIC4uLmUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9KSwgaTtcbn0sIHsgbG9nX186IGdpLCBlcnJfXzogRW4gfSA9IGsoXCJjb21tb25cIiksIE1lID0gKGUpID0+IHtcbiAgaWYgKGUucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiBlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgcSA9IChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBlLmZpbmQoKHIpID0+IG4uc2FmZVBhcnNlKHIpLnN1Y2Nlc3MpO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgRW4oXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgZSksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gbi5wYXJzZSh0KTtcbn0sIENuID0gKGUpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogZS5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogZS56aXBDb2RlLFxuICAgIGNvdW50cnk6IGUuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGUubGFzdE5hbWVcbn0pLCBEZSA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IG4gfSA9IGsoZS5sb2dQcmVmaXgpLCB0ID0gYXdhaXQgVChlLmFueUNkZUNvbm5lY3Rpb24pLCByID0gTWUoZS5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHQubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiBuKFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgZ2EoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQudG9rZW4sXG4gICAgICBwbV9pZDogci5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICBpZiAoZS51c2VQYXlGaXJzdEZsb3cpIHtcbiAgICAgIGlmIChuKFwiVXNpbmcgcGF5LWZpcnN0IGZsb3cuLi5cIiksICFlLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IEVuKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZS5jb25maXJtUmVzdWx0KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgICBuKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiBlLnJlcXVpcmVkRm9ybUZpZWxkc1twLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogdC5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHQuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IHIucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBwdChlLmFueUNkZUNvbm5lY3Rpb24sIGEpIH07XG4gIH1cbn0sIEFhID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgU24gPSAoZSkgPT4ge1xuICBjb25zdCBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICBuLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke0FhfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHIgPSB0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICByLmFwcGVuZENoaWxkKG4uY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgYSA9IHIucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIHMgPSByLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksIHsgaG9zdDogdCwgaWZyYW1lOiBhLCBjYW5jZWxCdXR0b246IHMgfTtcbn07XG5mdW5jdGlvbiBJYShlLCBuLCB0KSB7XG4gIGNvbnN0IHIgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHMgPSBhd2FpdCBDYShlLCB0KTtcbiAgICAgIHMgJiYgKGNsZWFySW50ZXJ2YWwoYSksIG4ocykpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgcigpO1xuICBjb25zdCBhID0gc2V0SW50ZXJ2YWwociwgX24pO1xuICByZXR1cm4gYTtcbn1cbmZ1bmN0aW9uIFJhKHtcbiAgZWxlbWVudHM6IGUsXG4gIHBvbGxpbmdJbnRlcnZhbDogbixcbiAgcmVzb2x2ZTogdFxufSkge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwobiksIGUuaG9zdC5yZW1vdmUoKSwgdCh7IHN0YXR1czogRi5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiBlLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgciksICgpID0+IHtcbiAgICBlLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBLZShlKSB7XG4gIGNvbnN0IHsgdXJsOiBuLCBiYXNlVXJsOiB0IH0gPSBlLCByID0gU24obik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSkgPT4ge1xuICAgIGNvbnN0IHMgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHIuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIGEobCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgaSA9IElhKHIuaWZyYW1lLCBzLCBuZXcgVVJMKHQpLm9yaWdpbiksIGMgPSBSYSh7XG4gICAgICBlbGVtZW50czogcixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogaSxcbiAgICAgIHJlc29sdmU6IGFcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBQbiA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBLZShlKTtcbiAgaWYgKG4uc3RhdHVzID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4uc3RhdHVzID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiBuLnN0YXR1cyAhPT0gRi5TVUNDRVNTICYmIEplKG4uc3RhdHVzKSwge1xuICAgIGhyZWY6IG4uaHJlZlxuICB9O1xufSwgRmEgPSAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gd2luZG93Lm9wZW4obiwgXCJfYmxhbmtcIik7XG4gIGlmICghdClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHQ7XG59LCBrbiA9IGFzeW5jIChlLCBuLCB0LCByKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IGEgfSA9IGsoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocywgaSkgPT4ge1xuICAgIGNvbnN0IGMgPSBGYShlLCByKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCB3YShuLCB0KTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIHMoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBhKEcodSkpLCBjbGVhckludGVydmFsKGwpLCBpKEcodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogVGEsIGVycl9fOiB5dCB9ID0gayhcImFpcndhbGxleC1jY1wiKSwgTWEgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBEYSA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBNYS5zYWZlUGFyc2UoZSk7XG4gIGlmICghbi5zdWNjZXNzKSB7XG4gICAgY29uc3QgdCA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgciA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IHl0KHIpLCBuZXcgRXJyb3IodCk7XG4gIH1cbiAgcmV0dXJuIG4uZGF0YTtcbn0sIE5hID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIExhID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBUYShgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtufV1gKSwgbjtcbiAgfSBjYXRjaCAobikge1xuICAgIGNvbnN0IHQgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgeXQodCwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtHKG4pfWApLCBuZXcgRXJyb3IodCk7XG4gIH1cbn0sIE9hID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IERhKG4pLCByID0gYXdhaXQgUG4oeyB1cmw6IHRbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogZSB9KSwgYSA9IExhKHIuaHJlZiA/PyBcIlwiKSwgcyA9IHRbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChzICE9PSBhKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbCA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHthfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke3N9KS5gO1xuICAgIHRocm93IHl0KGwpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGEsXG4gICAgICBjb25zZW50X2lkOiB0W1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCBBbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgSW4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IFJuLCBlcnJfXzogRm4gfSA9IGsoXCJjb21tb24tY2NcIiksIG9lID0gKGUsIG4sIHQpID0+IHtcbiAgaWYgKHQpIHtcbiAgICBSbihgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gICAgZm9yIChjb25zdCBbYSwgc10gb2YgT2JqZWN0LmVudHJpZXModCkpXG4gICAgICBlW2FdIHx8IChlW2FdID0gcyk7XG4gIH1cbiAgY29uc3QgciA9IEZlLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBhID0gci5lcnJvci5mb3JtYXQoKSwgcyA9IEh0KGEpO1xuICAgIGZvciAoY29uc3QgW2ksIGNdIG9mIE9iamVjdC5lbnRyaWVzKHMpKVxuICAgICAgbihpLCBjLCBpKTtcbiAgICB0aHJvdyBGbihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIHMpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgVWEgPSAoZSwgbikgPT4ge1xuICBmb3IgKGNvbnN0IHQgb2YgZSlcbiAgICBpZiAodC5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IHQuZXJyb3JzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgY29uc3QgYSA9IFl0LnNhZmVQYXJzZShyLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFhLnN1Y2Nlc3MpXG4gICAgICAgICAgRm4oYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtyLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIHIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzID0gYS5kYXRhO1xuICAgICAgICAgIG4ocywgci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgUm4oYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHQuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIHsgbG9nX186IHhlIH0gPSBrKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGphKGUsIG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gKGF3YWl0IG10KG4uY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IG4ucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gciA9PSBudWxsID8gdm9pZCAwIDogci5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbi5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uYVxuICAgIH0pO1xuICB9IGNhdGNoICh0KSB7XG4gICAgdGhyb3cgbi5zZXNzaW9uLmFib3J0KCksIHQ7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHhhKGUsIG4pIHtcbiAgaWYgKCFlLnJlZGlyZWN0X3VybClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmRcIik7XG4gIHhlKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgZSk7XG4gIGNvbnN0IHsgc3RhdHVzOiB0IH0gPSBhd2FpdCBLZSh7XG4gICAgdXJsOiBlLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiBuLmJhc2VVcmxcbiAgfSk7XG4gIGlmICh4ZShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7dH1dYCksIHQgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAodCA9PT0gRi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBjb25zdCByID0gYXdhaXQgeihuLmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IG4ucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBlLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGUuY29uc2VudF9pZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHhlKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgciksIHI7XG59XG5hc3luYyBmdW5jdGlvbiAkYShlLCBuKSB7XG4gIHZhciB0LCByLCBhLCBzLCBpO1xuICB0cnkge1xuICAgIGNvbnN0IGMgPSBlLnBheW1lbnQsIGwgPSBibihuLm5vbkNkZUZvcm1JbnB1dHMsIGMpLCB1ID0gb2UoXG4gICAgICBsLFxuICAgICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCB5ID0gKGF3YWl0IHZlKG4uY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogdVtwLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogdVtwLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXS5jb25zZW50X2lkO1xuICAgIGlmICgheSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbGV0IG0gPSBhd2FpdCB6KG4uY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB5LFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShjLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHhlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbSk7XG4gICAgbGV0IGYgPSAociA9ICh0ID0gbS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB0WzBdKSA9PSBudWxsID8gdm9pZCAwIDogci5pZDtcbiAgICBjb25zdCBoID0gKGEgPSBtLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZmluZChcbiAgICAgIChiKSA9PiBiLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAoaCAhPSBudWxsICYmIGgucmVkaXJlY3RfdXJsICYmIGguY29uc2VudF9pZCAmJiBoLnRoZWlyX3BtX2lkICYmIChtID0gYXdhaXQgeGEoaCwgbiksIGYgPSAoaSA9IChzID0gbS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBzWzBdKSA9PSBudWxsID8gdm9pZCAwIDogaS5pZCksICFmKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgRSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChFKSwgRGUoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogbi5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IG0sXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobCksIGM7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IFNlLCBlcnJfXzogVG4gfSA9IGsoXCJhd3gtYXBwbGUtcGF5XCIpLCBWYSA9IHBlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCB0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBxKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQW4pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiB0O1xuICAgIGlmIChTZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgd24oKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBTZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHQ7XG4gICAgaWYgKFNlKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBTZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgdDtcbiAgICBpZiAoIXIubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKGkpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBFZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKF8pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEEuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBUbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIHkpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogSy5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBHYSA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgY3VzdG9tUGFyYW1zOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBmO1xuICAgIGNvbnN0IHMgPSBxKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQW4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGksIGluaXRpYWxQcmV2aWV3OiBjIH0gPSByLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgVChsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBfID0gdm4oe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoZiA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgeSA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgXyksIG0gPSB7XG4gICAgICBzZXNzaW9uOiB5LFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHMubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiByID09IG51bGwgPyB2b2lkIDAgOiByLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBuLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZG4odSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaVxuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgRSkgPT4ge1xuICAgICAgY29uc3QgYiA9ICgpID0+IHtcbiAgICAgICAgU2UoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBFKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHkub25jYW5jZWwgPSBiLCB5Lm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh2KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgamEodiwgbSk7XG4gICAgICAgIH0gY2F0Y2ggKFMpIHtcbiAgICAgICAgICBFKFMpO1xuICAgICAgICB9XG4gICAgICB9LCB5Lm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB2ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLl8udG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICB5LmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih2KTtcbiAgICAgIH0sIHkub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh2KSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IFMgPSBhd2FpdCAkYSh2LCBtKTtcbiAgICAgICAgICBoKFMpO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgRShTKTtcbiAgICAgICAgfVxuICAgICAgfSwgeS5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBUbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIFplID0gKHtcbiAgZ2F0ZXdheTogZSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQ6IG4sXG4gIG1lcmNoYW50TmFtZTogdCxcbiAgbWVyY2hhbnRJZDogcixcbiAgaW5pdGlhbFByZXZpZXc6IGEsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gIHByZWZpbGw6IGlcbn0pID0+IHtcbiAgdmFyIF8sIHk7XG4gIGNvbnN0IGMgPSAoKF8gPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF8uYW1vdW50QXRvbSkgPz8gKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYW1vdW50QXRvbSkgPz8gMCwgbCA9IE1hdGgubWF4KGMgLyAxMDAsIDApLCB1ID0gKCgoeSA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogeS5jdXJyZW5jeSkgPz8gKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuY3VycmVuY3kpID8/IGEuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGQgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6ICEwLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5OiBlLFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6ICEwLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gUFJPRCBlbnYgd2lsbCBuZWVkIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiByID8/IFwiXCIsXG4gICAgICBtZXJjaGFudE5hbWU6IHRcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IHMgIT0gbnVsbCAmJiBzLnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogbC50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gcyAhPSBudWxsICYmIHMuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB0eXBlb2Ygcy5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB7IC4uLmQsIC4uLnMuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QoZCkgfSA6IHsgLi4uZCwgLi4ucy5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIE1uID0gKCkgPT4gZ24oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+IHtcbiAgICB2YXIgZSwgbjtcbiAgICByZXR1cm4gISEoKG4gPSAoZSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBlLnBheW1lbnRzKSAhPSBudWxsICYmIG4uYXBpKTtcbiAgfVxufSk7XG5sZXQgbnQgPSBudWxsO1xuY29uc3QgRG4gPSBhc3luYyAoZSkgPT4gYXdhaXQgdW4oZSkgPT09IFwicHJvZFwiID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgV2UgPSBhc3luYyAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gYXdhaXQgRG4oZSk7XG4gIHJldHVybiBudCA9PT0gbnVsbCAmJiAobnQgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiB0LFxuICAgIG1lcmNoYW50SW5mbzogbi5tZXJjaGFudEluZm9cbiAgfSkpLCBudDtcbn0sIHphID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHQpID0+IHQudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gbiA/IEJ0LnBhcnNlKG4pIDogbnVsbDtcbn0sIE5uID0gKGUsIG4pID0+IHtcbiAgdmFyIGEsIHMsIGksIGM7XG4gIGNvbnN0IHQgPSB7IC4uLmUgfSwgciA9IChzID0gKGEgPSBuLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogYS5pbmZvKSA9PSBudWxsID8gdm9pZCAwIDogcy5iaWxsaW5nQWRkcmVzcztcbiAgaWYgKHIpIHtcbiAgICBjb25zdCBbbCwgLi4udV0gPSAoKGMgPSAoaSA9IHIubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgZCA9IHUuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICAgIHRbcC5FTUFJTF0gPSB0W3AuRU1BSUxdIHx8IG4uZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCB0W3AuQ09VTlRSWV0gPSB0W3AuQ09VTlRSWV0gfHwgci5jb3VudHJ5Q29kZSB8fCBcIlVTXCIsIHRbcC5BRERSRVNTXSA9IHRbcC5BRERSRVNTXSB8fCByLmFkZHJlc3MxIHx8IFwiXCIsIHRbcC5DSVRZXSA9IHRbcC5DSVRZXSB8fCByLmxvY2FsaXR5IHx8IFwiXCIsIHRbcC5aSVBfQ09ERV0gPSB0W3AuWklQX0NPREVdIHx8IHIucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCIsIHRbcC5TVEFURV0gPSB0W3AuU1RBVEVdIHx8IHIuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgY29uc3QgXyA9IHRbcC5GSVJTVF9OQU1FXSB8fCBsIHx8IFwiXCIsIHkgPSB0W3AuTEFTVF9OQU1FXSB8fCBkIHx8IFwiXCI7XG4gICAgXyB8fCB5ID8gKHRbcC5GSVJTVF9OQU1FXSA9IF8sIHRbcC5MQVNUX05BTUVdID0geSkgOiAodFtwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCB0W3AuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiB0O1xufSwgeyBsb2dfXzogSiwgZXJyX186IHllIH0gPSBrKFwiYXd4LWdvb2dsZS1wYXlcIiksIHFhID0gcGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIHZhciBfLCB5O1xuICAgIGNvbnN0IHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IEsuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgciA9IHEoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBJbik7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIHQ7XG4gICAgSihcIkdvb2dsZSBQYXkgQ1BNXCIsIHIpO1xuICAgIGNvbnN0IGEgPSByLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiB5ZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHQ7XG4gICAgaWYgKEooXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBNbigpLCAhKCh5ID0gKF8gPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogXy5wYXltZW50cykgIT0gbnVsbCAmJiB5LmFwaSkpXG4gICAgICByZXR1cm4geWUoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCB0O1xuICAgIGlmIChhd2FpdCBEbihlLmJhc2VVcmwpID09PSBcIlBST0RVQ1RJT05cIiAmJiAhYS5nb29nbGVfcGF5X21lcmNoYW50X2lkKVxuICAgICAgcmV0dXJuIHllKFwiR29vZ2xlIFBheSBtZXJjaGFudCBJRCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFwiKSwgdDtcbiAgICBKKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gWmUoe1xuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogYS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBhLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIGYgPSBhd2FpdCBXZShlLmJhc2VVcmwsIG0pLCB7IHJlc3VsdDogaCB9ID0gYXdhaXQgZi5pc1JlYWR5VG9QYXkobSk7XG4gICAgICBpZiAoIWgpXG4gICAgICAgIHJldHVybiBKKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHQ7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIHllKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHQ7XG4gICAgfVxuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKGkpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBFZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIEEuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogVihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgeWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZiksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoZiA9PSBudWxsID8gdm9pZCAwIDogZi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIFlhID0gbmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIGYsIGgsIEUsIGIsIHYsIFM7XG4gICAgSihcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBzID0gcShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEluKSwgeyBpbml0aWFsUHJldmlldzogaSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYyB9ID0gYSwgbCA9IHMubWV0YWRhdGE7XG4gICAgaWYgKCFsLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCB1ID0gWmUoe1xuICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBpLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pLCBkID0gZS5hbnlDZGVDb25uZWN0aW9uLCBfID0gYXdhaXQgVChkKTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHMucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBkbihfLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgY29uc3QgeSA9IGF3YWl0IFdlKGUuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IE0gPSBhd2FpdCB5LmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIEooXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBNKTtcbiAgICAgIGNvbnN0IFkgPSBObih0LCBNKSwgTyA9IG9lKFxuICAgICAgICBZLFxuICAgICAgICByLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYSA9PSBudWxsID8gdm9pZCAwIDogYS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uT1xuICAgICAgfSk7XG4gICAgICBjb25zdCBtZSA9IChmID0gKG0gPSBNLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbjtcbiAgICAgIGlmICghbWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgQm4gPSBhd2FpdCB2ZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IE9bcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBPW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IE9bcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBPW3AuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IE9bcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwgTmUgPSB6YShCbik7XG4gICAgICBKKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgTmUpO1xuICAgICAgbGV0IGllID0gYXdhaXQgeihkLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogTmUgPT0gbnVsbCA/IHZvaWQgMCA6IE5lLmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IG1lXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIEooXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBpZSk7XG4gICAgICBsZXQgUWUgPSAoRSA9IChoID0gaWUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQ7XG4gICAgICBjb25zdCBjZSA9IChiID0gaWUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogYi5maW5kKFxuICAgICAgICAoQ2UpID0+IENlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKGNlICYmIGNlLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBKKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgY2UpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogQ2UgfSA9IGF3YWl0IEtlKHtcbiAgICAgICAgICB1cmw6IGNlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChKKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtDZX1dYCksIENlID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKENlID09PSBGLkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoY2UgJiYgIVFlICYmIChpZSA9IGF3YWl0IHooZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IF8udG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBjZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY2UuY29uc2VudF9pZFxuICAgICAgICB9XG4gICAgICB9KSwgSihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGllKSwgUWUgPSAoUyA9ICh2ID0gaWUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdlswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IFMuaWQpLCAhUWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIERlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IE8sXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IGllLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChNKSB7XG4gICAgICB0aHJvdyB5ZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBNKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBNXG4gICAgICB9KSwgbmV3IEVycm9yKChNID09IG51bGwgPyB2b2lkIDAgOiBNLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIExuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgT24gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuYXN5bmMgZnVuY3Rpb24gQmEoZSwgbikge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSAoYXdhaXQgbXQobi5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBuLnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIG4uc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IG4uc2Vzc2lvbi5hYm9ydCgpLCB0O1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBIYShlLCBuKSB7XG4gIHZhciB0LCByO1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSBlLnBheW1lbnQsIHMgPSBibihuLm5vbkNkZUZvcm1JbnB1dHMsIGEpLCBpID0gb2Uocywgbi5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5pXG4gICAgfSksIGF3YWl0IHZlKG4uY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGlbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogaVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogaVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogaVtwLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogaVtwLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5BUFBMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKEpTT04uc3RyaW5naWZ5KGEudG9rZW4ucGF5bWVudERhdGEpKVxuICAgIH0sIGwgPSBhd2FpdCB6KG4uY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiBjXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCEoKHIgPSAodCA9IGwucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuaWQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgZCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChkKSwgRGUoe1xuICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IG4uY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGksXG4gICAgICBjb25maXJtUmVzdWx0OiBsLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChhKSB7XG4gICAgY29uc3QgcyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyBuLnNlc3Npb24uY29tcGxldGVQYXltZW50KHMpLCBhO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiAkZSwgZXJyX186IFVuIH0gPSBrKFwiYXV0aG5ldC1hcHBsZXBheVwiKSwgSmEgPSBwZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgY29uc3QgdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogSy5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgciA9IHEoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBMbik7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIHQ7XG4gICAgaWYgKCRlKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCB3bigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuICRlKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgdDtcbiAgICBpZiAoIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiAkZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgdDtcbiAgICBpZiAoIXIubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKGkpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBFZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKF8pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEEuYXV0aG9yaXplTmV0QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBVbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIHkpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiB5XG4gICAgICAgIH0pLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogSy5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgS2EgPSBuZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGN1c3RvbVBhcmFtczogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgZjtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpIH0gPSByLCBjID0gcShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIExuKSwgbCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IFQobCksIGQgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgXyA9IHZuKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGksXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBkZWZhdWx0TGFiZWw6IChmID0gYyA9PSBudWxsID8gdm9pZCAwIDogYy5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBuLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGlcbiAgICB9KTtcbiAgICBjb25zdCB5ID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBfKSwgbSA9IHtcbiAgICAgIHNlc3Npb246IHksXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogbi5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogZCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoaCwgRSkgPT4ge1xuICAgICAgeS5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgJGUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBFKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfSwgeS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoYikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IEJhKGIsIG0pO1xuICAgICAgICB9IGNhdGNoICh2KSB7XG4gICAgICAgICAgRSh2KTtcbiAgICAgICAgfVxuICAgICAgfSwgeS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgYiA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogXy50b3RhbFxuICAgICAgICB9O1xuICAgICAgICB5LmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihiKTtcbiAgICAgIH0sIHkub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChiKSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHYgPSBhd2FpdCBIYShiLCBtKTtcbiAgICAgICAgICBoKHYpO1xuICAgICAgICB9IGNhdGNoICh2KSB7XG4gICAgICAgICAgRSh2KTtcbiAgICAgICAgfVxuICAgICAgfSwgeS5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBVbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IHVlLCBlcnJfXzogUGUgfSA9IGsoXCJhdXRobmV0LWdvb2dsZXBheVwiKSwgWmEgPSBwZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgdmFyIGQsIF87XG4gICAgdWUoXCJJbml0aWFsaXppbmcgQXV0aG5ldCBHb29nbGVQYXkgZmxvd1wiKTtcbiAgICBjb25zdCB0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gcShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIE9uKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gdDtcbiAgICB1ZShcIkdvb2dsZSBQYXkgQ1BNXCIsIHIpO1xuICAgIGNvbnN0IGEgPSByLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBQZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHQ7XG4gICAgaWYgKHVlKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgTW4oKSwgISgoXyA9IChkID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIFBlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgdDtcbiAgICB1ZShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeSA9IFplKHtcbiAgICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGEucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogYS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCBtID0gYXdhaXQgV2UoZS5iYXNlVXJsLCB5KSwgeyByZXN1bHQ6IGYgfSA9IGF3YWl0IG0uaXNSZWFkeVRvUGF5KHkpO1xuICAgICAgaWYgKCFmKVxuICAgICAgICByZXR1cm4gdWUoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgdDtcbiAgICB9IGNhdGNoICh5KSB7XG4gICAgICByZXR1cm4gUGUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCB5KSwgdDtcbiAgICB9XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IFQocyksIGMgPSBpLm1vZGUgPT09IFwic2V0dXBcIiwgbCA9IGF3YWl0IEVlKHMsIGkudG9rZW4sIGMsIHZvaWQgMCksIHUgPSBhc3luYyAoeSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgQS5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi55LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBQZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IG1cbiAgICAgICAgfSksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobSA9PSBudWxsID8gdm9pZCAwIDogbS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBXYSA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogbixcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBtLCBmLCBoLCBFO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGkgfSA9IGEsIGwgPSBxKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgT24pLm1ldGFkYXRhLCB1ID0gWmUoe1xuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBzLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaVxuICAgIH0pLCBkID0gZS5hbnlDZGVDb25uZWN0aW9uLCBfID0gYXdhaXQgVChkKTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBfLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaVxuICAgIH0pO1xuICAgIGNvbnN0IHkgPSBhd2FpdCBXZShlLmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiID0gYXdhaXQgeS5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICB1ZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIGIpO1xuICAgICAgY29uc3QgdiA9IE5uKG4sIGIpLCBTID0gb2Uodiwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLlNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgTSA9IChmID0gKG0gPSBiLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbjtcbiAgICAgIGlmICghTSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBZID0gYXdhaXQgdmUoZCwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBTW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogU1twLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBTW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICB6aXBfY29kZTogU1twLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiBTW3AuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB1ZShcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBZKTtcbiAgICAgIGNvbnN0IE8gPSBhd2FpdCB6KGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBfLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoTSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCEoKEUgPSAoaCA9IE8ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBEZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogUyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogTyxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYikge1xuICAgICAgdGhyb3cgUGUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgYiksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogYlxuICAgICAgfSksIG5ldyBFcnJvcigoYiA9PSBudWxsID8gdm9pZCAwIDogYi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBRYSwgZXJyX186IGpuIH0gPSBrKFwicG9ja3l0LWNjXCIpLCBYYSA9IHokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSksIGVzID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IFhhLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFuLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCB0ID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCByID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWA7XG4gICAgdGhyb3cgam4ociksIG5ldyBFcnJvcih0KTtcbiAgfVxuICByZXR1cm4gbi5kYXRhO1xufSwgeG4gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSBuZXcgVVJMKGUgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIFFhKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHtufV1gKSwgbjtcbiAgfSBjYXRjaCAobikge1xuICAgIGNvbnN0IHQgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBqbih0LCBgUmVzdWx0aW5nIFVSTDogJHtlfS5cbkVycm9yOiAke0cobil9YCksIG5ldyBFcnJvcih0KTtcbiAgfVxufSwgaXQgPSAoZSwgbikgPT4gbmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KG4pLCB0cyA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBucyA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBlcyhuKSwgciA9IGF3YWl0IFBuKHsgdXJsOiB0W1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiB4bihyLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogdFtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IHRbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgcnMgPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSksIG9zID0geiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSksIHsgbG9nX186IGdlLCBlcnJfXzogUmUgfSA9IGsoXCJhZHllbi1jY1wiKSwgYXMgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBycyxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogeiQxLnN0cmluZygpXG59KSwgJG4gPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIHNzID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGFzLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFuLnN1Y2Nlc3MpXG4gICAgdGhyb3cgUmUoYEFkeWVuIDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCksIG5ldyBFcnJvcigkbik7XG4gIHJldHVybiBuLmRhdGE7XG59LCBpcyA9IChlKSA9PiBKU09OLnBhcnNlKGUpLCBBdCA9ICgpID0+IFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93LkFkeWVuV2ViLCBjcyA9IGFzeW5jICgpID0+IHtcbiAgZ2UoXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIEF0KCkgfHwgYXdhaXQgQmUoNTAwKTtcbiAgaWYgKCFBdCgpKVxuICAgIHRocm93IFJlKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIG5ldyBFcnJvcigkbik7XG4gIHJldHVybiBnZShcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpLCB3aW5kb3cuQWR5ZW5XZWIuQWR5ZW5DaGVja291dDtcbn0sIGxzID0gKGUpID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzOiBuLCBsb2NhbGU6IHQsIGNvdW50cnlDb2RlOiByLCBjb21wb25lbnQ6IGEsIGhvc3Q6IHMsIGNhbmNlbEJ1dHRvbjogaSB9ID0gZSwgYyA9IGlzKG5bXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICByZXR1cm4gZ2UoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2MudHlwZX1gKSwgbmV3IFByb21pc2UoKGwpID0+IHtcbiAgICBjb25zdCB1ID0gKCkgPT4ge1xuICAgICAgZ2UoXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKSwgaS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgeSksIHMucmVtb3ZlKCk7XG4gICAgfSwgZCA9IChmKSA9PiB7XG4gICAgICBSZShcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBmKSwgbCh7IHN0YXR1czogRi5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIF8gPSAoZikgPT4ge1xuICAgICAgUmUoXCJBZHllbiBlcnJvcjpcIiwgZiksIGwoeyBzdGF0dXM6IEYuRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCB5ID0gKCkgPT4ge1xuICAgICAgbCh7IHN0YXR1czogRi5DQU5DRUxMRUQsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB5KTtcbiAgICBjb25zdCBtID0gKGYsIGgsIEUpID0+IHtcbiAgICAgIHMucmVtb3ZlKCksIGwoeyBzdGF0dXM6IEYuU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IGYsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICBjcygpLnRoZW4oXG4gICAgICAoZikgPT4gZih7XG4gICAgICAgIGNsaWVudEtleTogbltcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiBuW1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZTogdCxcbiAgICAgICAgY291bnRyeUNvZGU6IHIsXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHM6IG0sXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZDogZCxcbiAgICAgICAgb25FcnJvcjogX1xuICAgICAgfSlcbiAgICApLnRoZW4oKGYpID0+IHtcbiAgICAgIGYuY3JlYXRlRnJvbUFjdGlvbihjLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChhKTtcbiAgICB9KTtcbiAgfSk7XG59LCB1cyA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG5hdmlnYXRvci5sYW5ndWFnZSwgdCA9IGUgPz8gbiwgciA9IG9zLnNhZmVQYXJzZSh0KTtcbiAgcmV0dXJuIHIuc3VjY2VzcyA/IChnZShgUmVzb2x2ZWQgbG9jYWxlOiAke3IuZGF0YX1gKSwgci5kYXRhKSA6IChSZShgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7dH0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCksIFwiZW4tVVNcIik7XG59LCBkcyA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFkeWVuLWFjdGlvblwiXSkgIT09IHZvaWQgMCwgcHMgPSBhc3luYyAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gc3MobiksIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBhLmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0OiBzLCBpZnJhbWU6IGksIGNhbmNlbEJ1dHRvbjogYyB9ID0gU24oXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGkucmVwbGFjZVdpdGgoYSk7XG4gIGNvbnN0IGwgPSBhd2FpdCBscyh7XG4gICAgaGVhZGVyczogcixcbiAgICBsb2NhbGU6IHVzKHQpLFxuICAgIGNvdW50cnlDb2RlOiBlLFxuICAgIGNvbXBvbmVudDogYSxcbiAgICBob3N0OiBzLFxuICAgIGNhbmNlbEJ1dHRvbjogY1xuICB9KTtcbiAgaWYgKGwuY2xlYW51cCgpLCBsLnN0YXR1cyA9PT0gRi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IEYuU1VDQ0VTUykge1xuICAgIGlmICghbC5hZGRpdGlvbmFsRGV0YWlscylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkIGJ1dCBubyBhZGRpdGlvbmFsIGRldGFpbHMgd2VyZSByZXR1cm5lZFwiKTtcbiAgICByZXR1cm4gZ2UoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKSwge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiBsLmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2VcbiAgICBKZShsLnN0YXR1cyk7XG59LCB7IGxvZ19fOiBQLCBlcnJfXzogSXQgfSA9IGsoXCJjb21tb24tY2NcIiksIHsgbG9nX186IFJ0IH0gPSBrKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBtcyA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB1O1xuICAgIFAoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbiB9KTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBpID0gYXdhaXQgVChzKTtcbiAgICBnKFwiY29tbW9uX2NjX2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICAuLi5uLFxuICAgICAgcHJlZmlsbDogaVxuICAgIH0pLCBQKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2kubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IG9lKHQsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmNcbiAgICB9KTtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHBheW1lbnRfcm91dGVfaWQ6IGEucGF5bWVudFJvdXRlSWRcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBQKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgZCA9IGF3YWl0IHZhKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKFVhKGQsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgaS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgUChg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtpLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgXyA9IGF3YWl0IEVhKHMsIGwpO1xuICAgICAgICByZXR1cm4gUChg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke18ucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBfIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBQKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgXyA9IGF3YWl0IGt0KHMsIGwpO1xuICAgICAgICByZXR1cm4gUChcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogXyB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIGlmIChkIGluc3RhbmNlb2YgZm4gJiYgZC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBQKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgUChcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBkLnJlc3BvbnNlLmhlYWRlcnMpLCBnKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAuLi5uLFxuICAgICAgICAgIC4uLmQucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgXyA9IHRzKGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmIChfKSB7XG4gICAgICAgICAgUChcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgbnMoZS5iYXNlVXJsLCBkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTmEoZC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIFAoXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgYiA9IGF3YWl0IE9hKGUuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRzKGQucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBQKFwi4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgcHMoXG4gICAgICAgICAgICB0W3AuQ09VTlRSWV0sXG4gICAgICAgICAgICBkLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBpLmxvY2FsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgbC5leHRyYV9tZXRhZGF0YS5hZHllbiA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IF9hKHMsIGwpO1xuICAgICAgICBQKFwi4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIGYpO1xuICAgICAgICBjb25zdCBoID0gKCh1ID0gZC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogdVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgXyA/IFAoXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IGggPyAoUChcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IGdzKGYpKSA6IChQKFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgaHMoZiwgZS5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IEUgPSBmLmNjX3BtX2lkO1xuICAgICAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBQKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke0V9XWApO1xuICAgICAgICAgIGNvbnN0IGIgPSBhd2FpdCB6KHMsIHtcbiAgICAgICAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBFXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgUChcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBiKTtcbiAgICAgICAgICBjb25zdCB2ID0gTWUoYik7XG4gICAgICAgICAgcmV0dXJuIFAoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHt2LnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogdiB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFAoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7aCA/IFwibGVnYWN5XCIgOiBcIm5ld1wifV1gKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQga3Qocywge1xuICAgICAgICAgICAgLi4ubCxcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBFLFxuICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogaFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBQKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBiIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IEl0KFwi4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFXCIpLCBJdChkKSwgZDtcbiAgICB9XG4gIH1cbiksIHlzID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHQpID0+IHQudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIW4pXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBGci5wYXJzZShuKTtcbn0sIGZzID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdLCBfcyA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKCh0KSA9PiBmcy5pbmNsdWRlcyh0LnR5cGUpKTtcbiAgaWYgKCFuKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gQXIucGFyc2Uobik7XG59LCBocyA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBfcyhlKTtcbiAgaWYgKHQucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgUChcIuKUnCAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpLCBnKFwiM2RzX2NvbXBsZXRlXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBQKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7dC5yZWRpcmVjdF91cmx9XWApLCBnKFwiM2RzX3JlZGlyZWN0XCIsIHtcbiAgICAuLi50XG4gIH0pO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgS2UoeyB1cmw6IHQucmVkaXJlY3RfdXJsLCBiYXNlVXJsOiBuIH0pO1xuICBpZiAoUChg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7cn1dYCksIHIgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IGcoXCIzZHNfY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IEYuRkFJTFVSRSlcbiAgICB0aHJvdyBnKFwiM2RzX2ZhaWx1cmVcIiksIG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xufSwgZ3MgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCBuID0geXMoZSk7XG4gIGcoXCIzZHNfc3RyaXBlX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5uXG4gIH0pLCBSdChg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgVXIobiksIGcoXCIzZHNfc3RyaXBlX2NvbXBsZXRlXCIpLCBSdChcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIHdzID0gMSwgYnMgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186ICQsIGVycl9fOiBWbiB9ID0gayhcImxvb3AtY3J5cHRvXCIpLCB2cyA9IHokMS5vYmplY3Qoe1xuICBsb29wRmlyc3ROYW1lOiBJLFxuICBsb29wTGFzdE5hbWU6IEksXG4gIGxvb3BFbWFpbDogSSxcbiAgW3AuUFJPTU9USU9OX0NPREVdOiBDXG59KSwgRXMgPSB6JDEub2JqZWN0KHtcbiAgbG9vcEZpcnN0TmFtZTogQyxcbiAgbG9vcExhc3ROYW1lOiBDLFxuICBsb29wRW1haWw6IEMsXG4gIFtwLlBST01PVElPTl9DT0RFXTogQ1xufSksIEZ0ID0gKGUsIG4sIHQsIHIpID0+IHtcbiAgY29uc3QgYSA9IHQuc2FmZVBhcnNlKGUpO1xuICBpZiAoIWEuc3VjY2Vzcykge1xuICAgIGNvbnN0IHMgPSBhLmVycm9yLmZvcm1hdCgpLCBpID0gSHQocyk7XG4gICAgZm9yIChjb25zdCBbYywgbF0gb2YgT2JqZWN0LmVudHJpZXMoaSkpXG4gICAgICBuKGMsIGwsIGMpO1xuICAgIHRocm93IFZuKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaSksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBhLmRhdGE7XG59LCBDcyA9IHBlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICAkKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCBuID0gcShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGJzKTtcbiAgICAkKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkobil9YCksICQoXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHQgPSBhd2FpdCBUKGUuYW55Q2RlQ29ubmVjdGlvbiksIHIgPSBhd2FpdCBtdChlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuXG4gICAgfSk7XG4gICAgaWYgKHQubW9kZSAhPT0gXCJzZXR1cFwiICYmICFuLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKHQuY3VycmVuY3kpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3QuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7bi5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIGlmICghciB8fCAhci5uZXh0X2FjdGlvbl9tZXRhZGF0YSlcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIGNvbnN0IGEgPSByLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBzO1xuICAgIHQubW9kZSA9PT0gXCJzZXR1cFwiID8gcyA9IHdzIDogcyA9IHQuYW1vdW50X3RvdGFsX2F0b20gKiBhLnRva2VuX3ByaWNlO1xuICAgIGNvbnN0IGkgPSBzLCBjID0gYS5hdXRob3JpemF0aW9uX2Ftb3VudCwgbCA9IHY0KCksIHUgPSB7XG4gICAgICBwYXltZW50VXNkQW1vdW50OiBpLFxuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudDogYyxcbiAgICAgIGN1c3RvbWVyUmVmSWQ6IGxcbiAgICB9LCBkID0ge1xuICAgICAgYXBpS2V5OiBuLm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiBuLm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IG4ubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogbi5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiB1LFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IGRcbiAgICB9O1xuICB9XG4pLCBTcyA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgICQoXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgJChcImNvbnRleHRcIiwgZSksICQoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgbiksICQoXCJub25DZGVGb3JtSW5wdXRzXCIsIHQpLCAkKFwiZmxvd0NhbGxiYWNrc1wiLCByKSwgJChcImN1c3RvbVBhcmFtc1wiLCBhKTtcbiAgICBsZXQgcztcbiAgICBhICE9IG51bGwgJiYgYS5zdWNjZXNzID8gcyA9IEZ0KFxuICAgICAgdCxcbiAgICAgIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdnNcbiAgICApIDogcyA9IEZ0KFxuICAgICAgdCxcbiAgICAgIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgRXNcbiAgICApO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKGUuYW55Q2RlQ29ubmVjdGlvbiksIGwgPSBjLm1vZGUgIT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHZlKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4sXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzLmxvb3BFbWFpbCxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBzLmxvb3BGaXJzdE5hbWUsXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBzLmxvb3BMYXN0TmFtZSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYy5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGNvbnN0IGQgPSBhd2FpdCB6KGksIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBhLnN1Y2Nlc3MgPyBhLnBheWluLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkIDogdm9pZCAwLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYy5tb2RlICE9PSBcInNldHVwXCIgPyB1LmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgbG9vcF9jdXN0b21lcjogYS5zdWNjZXNzID8gYS5jdXN0b21lciA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9wYXlpbjogYS5zdWNjZXNzID8gYS5wYXlpbiA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9mYWlsdXJlX2RldGFpbHM6IGEuc3VjY2VzcyA/IHZvaWQgMCA6IGEuZmFpbHVyZURldGFpbHMsXG4gICAgICAgIGxvb3BfZGVidWdfaW5mbzogYS5zdWNjZXNzID8gdm9pZCAwIDogYS5kZWJ1Z0luZm8sXG4gICAgICAgIGxvb3Bfc3VjY2VzczogYS5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCQoYENvbmZpcm0gcmVzdWx0OiAke2R9YCksIGMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAkKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgJChcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBkKTtcbiAgICAgIGNvbnN0IF8gPSBNZShkKTtcbiAgICAgIHJldHVybiAkKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCQoXCJEb2luZyBjaGVja291dC4uLlwiKSwgIWQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IFZuKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBXLCBlcnJfXzogVHQgfSA9IGsoXCJwb2NreXQtcGF5cGFsXCIpLCBQcyA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3Qga3MgPSBuZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgTywgbWU7XG4gICAgVyhcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBUKHMpO1xuICAgIFcoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBQcy5wYXJzZShuKTtcbiAgICBXKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCBsID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncywgdSA9IG9lKFxuICAgICAgdCxcbiAgICAgIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBkID0gQ24odSk7XG4gICAgVyhgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7aS5tb2RlfWApO1xuICAgIGNvbnN0IF8gPSB2NCgpLCB5ID0gaS5tb2RlICE9PSBcInNldHVwXCIsIG0gPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGMsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHksXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHkgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGkubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISEoKE8gPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzKSAhPSBudWxsICYmIE8udXNlUmVkaXJlY3RGbG93KSxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IF9cbiAgICAgIH0sXG4gICAgICAuLi5kXG4gICAgfSwgZiA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgaCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkobSkpLCBFID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogaS50b2tlbixcbiAgICAgIHI6IGhcbiAgICB9KSwgYiA9IGAke2Z9PyR7RS50b1N0cmluZygpfWA7XG4gICAgaWYgKChtZSA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc2V0dGluZ3MpICE9IG51bGwgJiYgbWUudXNlUmVkaXJlY3RGbG93KVxuICAgICAgdGhyb3cgVyhcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBiLCBhd2FpdCBCZSgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIFcoXCJTdGFydGluZyBwb3B1cCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIFcoXCJPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5cIik7XG4gICAgY29uc3QgdiA9IGF3YWl0IGtuKFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIHMsXG4gICAgICBfLFxuICAgICAgYlxuICAgICk7XG4gICAgVyhcIlBheXBhbCBmbG93IHJlc3VsdFwiLCB2KTtcbiAgICBjb25zdCBTID0geG4odi5ocmVmKSwgTSA9IGl0KHYuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghTSlcbiAgICAgIHRocm93IFR0KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCB2LmhyZWYpLCBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgVyhgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHtTfWApO1xuICAgIGNvbnN0IFkgPSBhd2FpdCB6KHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBTLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogeSA/IE0gOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoVyhcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBZKSwgaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBZLnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmICghWS5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IFR0KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgWSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IFkucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG4pLCBNdCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiBELCBlcnJfXzogQXMgfSA9IGsoXCJzdHJpcGUtbGlua1wiKSwgSXMgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgUnMgPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgRnMgPSBwZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgY29uc3QgdCA9IGUuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIEQoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBxKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSXMpO1xuICAgIEQoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBUKGEpLCBpID0gcy5tb2RlID09PSBcInNldHVwXCI7XG4gICAgRChcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgRWUoYSwgcy50b2tlbiwgaSwgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBEcihyLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIEQoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGQgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBfID0gKCkgPT4ge1xuICAgICAgZC5tb3VudChgIyR7TXR9YCk7XG4gICAgfSwgeSA9ICgpID0+IHtcbiAgICAgIGQudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIHQgIT0gbnVsbCAmJiB0LmRvTm90TW91bnRPbkluaXQgPyBEKFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6IChEKFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBfKCkpLCBkLm9uKFwiY2xpY2tcIiwgYXN5bmMgKG0pID0+IHtcbiAgICAgIGlmIChEKFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIHQgIT0gbnVsbCAmJiB0Lm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgdC5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICBEKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtLnJlc29sdmUoKTtcbiAgICB9KSwgZC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKG0pID0+IHtcbiAgICAgIEQoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIG0pO1xuICAgICAgY29uc3QgZiA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IG0uYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmLmVycm9yID8gKEFzKFwiZXJyb3JcIiwgZi5lcnJvciksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcihmLmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6IChEKFwicGF5bWVudE1ldGhvZFwiLCBmLnBheW1lbnRNZXRob2QpLCBBLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogZi5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogXyxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IHksXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBEcyhNdClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBUcyA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIEQoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBEKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBpID0gTXModCwgYS5zdHJpcGVQTSksIGMgPSBvZShpLCByLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5jXG4gICAgfSksIEQoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IHZlKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBhLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IGNbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IGNbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIEQoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgY29uc3QgZCA9IFJzLnBhcnNlKGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXS5vdXJfZXhpc3RpbmdfcG1faWQsIF8gPSBhd2FpdCBUKHMpO1xuICAgIGlmIChfLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgRChcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgeihzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IE1lKHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEQoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IHkgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IG4ucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBjW3AuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBjW3AuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBfLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBfLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5cbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcHQocywgeSkgfTtcbiAgICB9XG4gIH1cbiksIE1zID0gKGUsIG4pID0+IHtcbiAgdmFyIGwsIHUsIGQsIF8sIHk7XG4gIGNvbnN0IHQgPSB7IC4uLmUgfSwgW3IsIC4uLmFdID0gKCh1ID0gKGwgPSBuLmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHRbcC5FTUFJTF0gPSB0W3AuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgoZCA9IG4ubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGQuZW1haWwpIHx8IG4uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgdFtwLlpJUF9DT0RFXSA9IHRbcC5aSVBfQ09ERV0gfHwgKChfID0gbi5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF8ucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgdFtwLkNPVU5UUlldID0gdFtwLkNPVU5UUlldIHx8ICgoeSA9IG4uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB5LmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgaSA9IHRbcC5GSVJTVF9OQU1FXSB8fCByIHx8IFwiXCIsIGMgPSB0W3AuTEFTVF9OQU1FXSB8fCBzIHx8IFwiXCI7XG4gIHJldHVybiBpIHx8IGMgPyAodFtwLkZJUlNUX05BTUVdID0gaSwgdFtwLkxBU1RfTkFNRV0gPSBjKSA6ICh0W3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHRbcC5MQVNUX05BTUVdID0gXCJcIiksIEQoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgdCksIHQ7XG59LCBEcyA9IChlKSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBjb25zdCB0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICByID8gbihyKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KTtcbiAgfTtcbiAgdCgpO1xufSksIHsgbG9nX186IGosIGVycl9fOiBOcyB9ID0gayhcInN0cmlwZS1wclwiKSwgTHMgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIE9zID0gcGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIGooXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCB0ID0gcShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIExzKTtcbiAgICBqKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBUKHIpLCBzID0gYS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgaihcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBpID0gYXdhaXQgRWUociwgYS50b2tlbiwgcywgdm9pZCAwKSwgYyA9IGF3YWl0IE5yKFxuICAgICAgdC5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBpLmFtb3VudEF0b20sXG4gICAgICBpLmN1cnJlbmN5LFxuICAgICAgc1xuICAgICk7XG4gICAgaihcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBOcyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgaihcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKGQsIF8pID0+IEEuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBfID09IG51bGwgPyB2b2lkIDAgOiBfLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBLLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogSy5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgVXMgPSBuZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBhLFxuICAgIGluaXRSZXN1bHQ6IHNcbiAgfSkgPT4ge1xuICAgIGlmIChqKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgYS5wcm92aWRlciAhPT0gbi5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7YS5wcm92aWRlcn0sIGdvdCAke24ucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IHMucHI7XG4gICAgaWYgKGEgIT0gbnVsbCAmJiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGYgPSBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBqKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBmKTtcbiAgICAgIGNvbnN0IGggPSB0eXBlb2YgZi5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IGYuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiBmLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICB4cyhjLCBmLmFtb3VudCwgZi5wZW5kaW5nLCBoLCBmLmxhYmVsKTtcbiAgICB9XG4gICAgaihcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgTHIoYyk7XG4gICAgaihcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIGooXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBqcyh0LCBsKSwgZCA9IG9lKHUsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmRcbiAgICB9KSwgaihcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIGQpO1xuICAgIGNvbnN0IF8gPSBhd2FpdCBoYShpLCB7XG4gICAgICBmaWVsZHM6IGQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG5cbiAgICB9KSwgeSA9ICRzKF8pO1xuICAgIGooXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBPcih5LCBsKTtcbiAgICBjb25zdCBtID0gYXdhaXQgVChpKTtcbiAgICBpZiAobS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGooXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBmID0gYXdhaXQgeihpLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogTWUoZikgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaihcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBmID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IG0udG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBuLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGRbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBkW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBkW3AuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBkW3AuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBtLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBtLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5cbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcHQoaSwgZikgfTtcbiAgICB9XG4gIH1cbiksIGpzID0gKGUsIG4pID0+IHtcbiAgdmFyIGQsIF8sIHksIG07XG4gIGNvbnN0IHQgPSB7IC4uLmUgfSwgW3IsIC4uLmFdID0gKChfID0gKGQgPSBuLnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogXy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGEuam9pbihcIiBcIikgfHwgdm9pZCAwLCBpID0gKG0gPSAoeSA9IG4ucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogbS5hZGRyZXNzLCBjID0gbi5zaGlwcGluZ0FkZHJlc3M7XG4gIHRbcC5FTUFJTF0gPSB0W3AuRU1BSUxdIHx8IG4ucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHRbcC5aSVBfQ09ERV0gPSB0W3AuWklQX0NPREVdIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIHRbcC5DT1VOVFJZXSA9IHRbcC5DT1VOVFJZXSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IGwgPSB0W3AuRklSU1RfTkFNRV0gfHwgciB8fCBcIlwiLCB1ID0gdFtwLkxBU1RfTkFNRV0gfHwgcyB8fCBcIlwiO1xuICByZXR1cm4gbCB8fCB1ID8gKHRbcC5GSVJTVF9OQU1FXSA9IGwsIHRbcC5MQVNUX05BTUVdID0gdSkgOiAodFtwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCB0W3AuTEFTVF9OQU1FXSA9IFwiXCIpLCBqKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHQpLCB0O1xufSwgeHMgPSAoZSwgbiwgdCwgciwgYSkgPT4ge1xuICBlLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogbi5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IGEgPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogdFxuICAgIH0sXG4gICAgY3VycmVuY3k6IG4uY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogclxuICB9KTtcbn0sICRzID0gKGUpID0+IHtcbiAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7ZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIFRyLnBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIFZzID0gKCkgPT4ge1xuICBjb25zdCBlID0gdjQoKS5zcGxpdChcIi1cIilbMF07XG4gIHJldHVybiB7XG4gICAgZmlyc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgbGFzdE5hbWU6IGB4eF8ke2V9YCxcbiAgICBlbWFpbDogYHh4XyR7ZX1AZW1haWwuY29tYCxcbiAgICB6aXBDb2RlOiBgeHhfJHtlfWAsXG4gICAgY291bnRyeTogXCJVU1wiXG4gIH07XG59LCB7IGxvZ19fOiBsZSwgZXJyX186IEdzIH0gPSBrKFwicGF5cGFsXCIpLCBHbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHsgY2xpZW50X2lkOiB6JDEuc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIHpzID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gIGNvbnN0IHQgPSBxKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR24pO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IEEucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogVihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBxcyA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogbixcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsZShcIlJ1bm5pbmcgUGF5UGFsIGZsb3cuLi5cIik7XG4gICAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBpID0gYXdhaXQgVChzKSwgeyBpc0Fub255bW91czogYywgdXNlUmVkaXJlY3RGbG93OiBsIH0gPSBhLnNldHRpbmdzID8/IHt9O1xuICAgICAgbGUoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgICAgY29uc3QgdSA9IEduLnBhcnNlKHQpO1xuICAgICAgbGUoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgICAgY29uc3QgZCA9IG9lKFxuICAgICAgICBuLFxuICAgICAgICByLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYyA/IFZzKCkgOiB2b2lkIDBcbiAgICAgICksIF8gPSBDbihkKTtcbiAgICAgIGxlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtpLm1vZGV9YCk7XG4gICAgICBjb25zdCB5ID0gdjQoKSwgbSA9IGkubW9kZSAhPT0gXCJzZXR1cFwiLCBmID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBtLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IG0gPyB7XG4gICAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBpLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogbCxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogeVxuICAgICAgICB9LFxuICAgICAgICAuLi5fXG4gICAgICB9LCBoID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBFID0gYnRvYShKU09OLnN0cmluZ2lmeShmKSksIGIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IGkudG9rZW4sXG4gICAgICAgIHI6IEVcbiAgICAgIH0pLCB2ID0gYCR7aH0/JHtiLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmIChsKVxuICAgICAgICB0aHJvdyBsZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB2LCBhd2FpdCBCZSgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgY29uc3QgUyA9IGF3YWl0IGtuKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBzLFxuICAgICAgICB5LFxuICAgICAgICB2XG4gICAgICApO1xuICAgICAgbGUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgUyk7XG4gICAgICBjb25zdCBNID0gaXQoUy5ocmVmLCBcImNhdHRcIiksIFkgPSBpdChTLmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKSwgTyA9IGF3YWl0IHoocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGkudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG0gPyBNIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogbSA/IFkgOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIE8pLCBEZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogcyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB1LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGQsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IE8sXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogbVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgdGhyb3cgR3MoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBzKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBzIH0pLCBuZXcgRXJyb3IoKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgZmUgPSAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gZS5maWx0ZXIoKGEpID0+IHtcbiAgICBjb25zdCBzID0gdCA9PT0gdm9pZCAwID8gITAgOiBhLnByb2Nlc3Nvcl9uYW1lID09PSB0LCBpID0gYS5wcm92aWRlciA9PT0gbjtcbiAgICByZXR1cm4gcyAmJiBpO1xuICB9KTtcbiAgaWYgKHIubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7bn0nIGFuZCBwcm9jZXNzb3IgJyR7dH0nYCk7XG4gIHJldHVybiByLmxlbmd0aCAhPT0gMSAmJiAoY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBjb25zb2xlLndhcm4oYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7bn0nIGFuZCBwcm9jZXNzb3IgJyR7dH0nYCksIGcoXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgcHJvdmlkZXI6IG4sXG4gICAgcHJvY2Vzc29yOiB0LFxuICAgIGNwbXM6IGVcbiAgfSkpLCByWzBdO1xufSwgQSA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBtc1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBPcyxcbiAgICBydW46IFVzXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBGcyxcbiAgICBydW46IFRzXG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBydW46IGtzXG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiB6cyxcbiAgICBydW46IHFzXG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBxYSxcbiAgICBydW46IFlhXG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogVmEsXG4gICAgcnVuOiBHYVxuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiBDcyxcbiAgICBydW46IFNzXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogSmEsXG4gICAgcnVuOiBLYVxuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBaYSxcbiAgICBydW46IFdhXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59LCB7IGxvZ19fOiBZcywgZXJyX186IEJzIH0gPSBrKFwiaW5pdC1mbG93c1wiKSwgYWUgPSAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gbmV3IEFlKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiB0LFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodC5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGEgPSBhd2FpdCBuKHIpO1xuICAgICAgICBZcyhg4pyUICR7ZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBhKSwgdC5zZXQoYSk7XG4gICAgICB9IGNhdGNoIChhKSB7XG4gICAgICAgIEJzKGDwnZmtICR7ZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIEcoYSksIFwiRGV0YWlsczpcIiwgYSksIHQudGhyb3coYSwgRyhhKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgSHMgPSBhc3luYyAoZSwgbiwgdCkgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgocikgPT4gci5pbml0aWFsaXplKHsgY29udGV4dDogbiwgZm9ybUNhbGxiYWNrczogdCB9KSkpO1xufSwgSnMgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogYWUoXCJTdHJpcGUgUFJcIiwgQS5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogYWUoXCJTdHJpcGUgTGlua1wiLCBBLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiBhZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgQS5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogYWUoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgQS5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiBhZShcIkxvb3BcIiwgQS5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiBhZShcIlBheVBhbFwiLCBBLnBheXBhbC5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBhZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIEEuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBhZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgQS5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IEtzIH0gPSBrKFwiZm9ybS1jYWxsYmFja3NcIiksIEIgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBEdCA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBCLFxuICBvbkJsdXI6IEIsXG4gIG9uQ2hhbmdlOiBCLFxuICBvbkxvYWQ6IEIsXG4gIG9uTG9hZEVycm9yOiBCLFxuICBvblZhbGlkYXRpb25FcnJvcjogQixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IEIsXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBCLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IEIsXG4gIG9uQ2hlY2tvdXRFcnJvcjogQixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IEJcbn0pLCBlZSA9IGNsYXNzIGVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAobikgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gZWUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXMobikuZm9yRWFjaCgoW3QsIHJdKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSB0cih0LCByID8/IGVlLk5PT1AsIEtzKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW3RdID0gYTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IGVlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG5lZS5OT09QID0gKCkgPT4ge1xufSwgZWUuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IG4gPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKER0LmtleW9mKCkuZW51bSkuZm9yRWFjaCgodCkgPT4ge1xuICAgIG5bdF0gPSBlZS5OT09QO1xuICB9KSwgbjtcbn0sIGVlLmZyb21PYmplY3QgPSAobikgPT4ge1xuICBjb25zdCB0ID0gbmV3IGVlKCk7XG4gIHJldHVybiB0LnNldENhbGxiYWNrcyhEdC5wYXJzZShuKSksIHQ7XG59O1xubGV0IGN0ID0gZWU7XG5jb25zdCB6biA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIiwgSWUgPSAzMiwgWnMgPSAxNiwgcW4gPSAxMCwgTnQgPSAyODE0NzQ5NzY3MTA2NTU7XG52YXIgZGU7XG4oZnVuY3Rpb24oZSkge1xuICBlLkJhc2UzMkluY29ycmVjdEVuY29kaW5nID0gXCJCMzJfRU5DX0lOVkFMSURcIiwgZS5EZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlciA9IFwiREVDX1RJTUVfQ0hBUlwiLCBlLkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCIsIGUuRW5jb2RlVGltZU5lZ2F0aXZlID0gXCJFTkNfVElNRV9ORUdcIiwgZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiLCBlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCIsIGUuUFJOR0RldGVjdEZhaWx1cmUgPSBcIlBSTkdfREVURUNUXCIsIGUuVUxJREludmFsaWQgPSBcIlVMSURfSU5WQUxJRFwiLCBlLlVuZXhwZWN0ZWQgPSBcIlVORVhQRUNURURcIiwgZS5VVUlESW52YWxpZCA9IFwiVVVJRF9JTlZBTElEXCI7XG59KShkZSB8fCAoZGUgPSB7fSkpO1xuY2xhc3Mga2UgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG4sIHQpIHtcbiAgICBzdXBlcihgJHt0fSAoJHtufSlgKSwgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIiwgdGhpcy5jb2RlID0gbjtcbiAgfVxufVxuZnVuY3Rpb24gV3MoZSkge1xuICBsZXQgbiA9IE1hdGguZmxvb3IoZSgpICogSWUpO1xuICByZXR1cm4gbiA9PT0gSWUgJiYgKG4gPSBJZSAtIDEpLCB6bi5jaGFyQXQobik7XG59XG5mdW5jdGlvbiBRcyhlKSB7XG4gIGNvbnN0IG4gPSBYcygpLCB0ID0gbiAmJiAobi5jcnlwdG8gfHwgbi5tc0NyeXB0bykgfHwgbnVsbDtcbiAgaWYgKHR5cGVvZiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSYW5kb21WYWx1ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHQuZ2V0UmFuZG9tVmFsdWVzKHIpLCByWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2YgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQucmFuZG9tQnl0ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4gdC5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDI1NTtcbiAgdGhyb3cgbmV3IGtlKGRlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIFhzKCkge1xuICByZXR1cm4gbmkoKSA/IHNlbGYgOiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsIDwgXCJ1XCIgPyBnbG9iYWwgOiB0eXBlb2YgZ2xvYmFsVGhpcyA8IFwidVwiID8gZ2xvYmFsVGhpcyA6IG51bGw7XG59XG5mdW5jdGlvbiBlaShlLCBuKSB7XG4gIGxldCB0ID0gXCJcIjtcbiAgZm9yICg7IGUgPiAwOyBlLS0pXG4gICAgdCA9IFdzKG4pICsgdDtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiB0aShlLCBuID0gcW4pIHtcbiAgaWYgKGlzTmFOKGUpKVxuICAgIHRocm93IG5ldyBrZShkZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7ZX1gKTtcbiAgaWYgKGUgPiBOdClcbiAgICB0aHJvdyBuZXcga2UoZGUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7TnR9OiAke2V9YCk7XG4gIGlmIChlIDwgMClcbiAgICB0aHJvdyBuZXcga2UoZGUuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke2V9YCk7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGUpID09PSAhMSlcbiAgICB0aHJvdyBuZXcga2UoZGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7ZX1gKTtcbiAgbGV0IHQsIHIgPSBcIlwiO1xuICBmb3IgKGxldCBhID0gbjsgYSA+IDA7IGEtLSlcbiAgICB0ID0gZSAlIEllLCByID0gem4uY2hhckF0KHQpICsgciwgZSA9IChlIC0gdCkgLyBJZTtcbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBuaSgpIHtcbiAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA8IFwidVwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbmZ1bmN0aW9uIHJpKGUsIG4pIHtcbiAgY29uc3QgdCA9IFFzKCksIHIgPSBEYXRlLm5vdygpO1xuICByZXR1cm4gdGkociwgcW4pICsgZWkoWnMsIHQpO1xufVxuY29uc3QgWW4gPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIiwgb2kgPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKHQpID0+IHQuaW5jbHVkZXMoWW4pKTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIGUuc3BsaXQoXCI9XCIpWzFdO1xuICBjb25zdCBuID0gcmkoKTtcbiAgcmV0dXJuIGFpKG4pLCBuO1xufSwgYWkgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIG4uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpICsgMSksIGRvY3VtZW50LmNvb2tpZSA9IGAke1lufT0ke2V9OyBwYXRoPS87IGV4cGlyZXM9JHtuLnRvVVRDU3RyaW5nKCl9YDtcbn07XG5mdW5jdGlvbiBzaSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlID0gUigpLCBuID0gZTtcbiAgICBpZiAobiAhPSBudWxsICYmIG4ubmV4dCB8fCBuICE9IG51bGwgJiYgbi5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKVxuICAgICAgcmV0dXJuIFwibmV4dGpzXCI7XG4gICAgY29uc3QgdCA9IGU7XG4gICAgaWYgKHQgIT0gbnVsbCAmJiB0Ll9fTlVYVF9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19udXh0XCIpKVxuICAgICAgcmV0dXJuIFwibnV4dFwiO1xuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgoYSkgPT4gYS5pbmNsdWRlcyhcInJlYWN0XCIpKSB8fCBBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKGEpID0+IGEuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpXG4gICAgICByZXR1cm4gXCJyZWFjdFwiO1xuICAgIGNvbnN0IHIgPSBlO1xuICAgIHJldHVybiByICE9IG51bGwgJiYgci5WdWUgfHwgciAhPSBudWxsICYmIHIuX19WVUVfXyA/IFwidnVlXCIgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpID8gXCJhbmd1bGFyXCIgOiBcInZhbmlsbGFcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5mdW5jdGlvbiBpaShlKSB7XG4gIHZhciBuLCB0LCByO1xuICB0cnkge1xuICAgIHN3aXRjaCAoZSkge1xuICAgICAgY2FzZSBcInJlYWN0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcIm5leHRqc1wiOiB7XG4gICAgICAgIGNvbnN0IHMgPSBSKCk7XG4gICAgICAgIHJldHVybiAoKG4gPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLm5leHQpID09IG51bGwgPyB2b2lkIDAgOiBuLnZlcnNpb24pIHx8ICgodCA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuX19ORVhUX0RBVEFfXykgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYnVpbGRJZCkgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcInZ1ZVwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJhbmd1bGFyXCI6IHtcbiAgICAgICAgY29uc3QgYSA9IChyID0gUigpKSA9PSBudWxsID8gdm9pZCAwIDogci5kb2N1bWVudCwgcyA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIHMgPyBzLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gY2koKSB7XG4gIGNvbnN0IGUgPSBzaSgpLCBuID0gaWkoZSk7XG4gIHJldHVybiB7IGZyYW1ld29yazogZSwgdmVyc2lvbjogbiB9O1xufVxuY2xhc3MgbGkge1xuICBjb25zdHJ1Y3RvcihuLCB0LCByLCBhKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKHMpID0+IHtcbiAgICAgIGlmICghcy5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoTHQocy5vcmlnaW4pICE9PSBMdCh0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBzLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBzLmRhdGEucGVucGFsIHx8IHR5cGVvZiBzLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBzLmRhdGEuc291cmNlICYmIHMuZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBpID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkgPSB4cihKU09OLnBhcnNlKHMuZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KGkpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gaSwgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gcy5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKHMpID0+IHMuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhcy5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIHMuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIHMpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMocy5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgcyksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQocy5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IG4sIHRoaXMuYmFzZVVybCA9IHQsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IHIsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBhO1xuICB9XG59XG5jb25zdCBMdCA9IChlKSA9PiBuZXcgVVJMKGUpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIHVpKGUsIG4pIHtcbiAgY29uc3QgciA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiBuXG4gIH0pLnByb21pc2UsIGEgPSBhd2FpdCAkcihyKTtcbiAgaWYgKCFWcihyLCBhKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiByO1xufVxuY2xhc3MgZGkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKG4sIHQpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChuLCB0KTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IG4gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgcGkgPSAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiByIH0gPSBlO1xuICByLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGEpID0+IHtcbiAgICBpZiAoYS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHMgPSBhLmxvYWRlZFZhbHVlLCBpID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBpLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGkgJiYgT3QoXCJhcHBsZV9wYXlcIiwgcywgbiwgdCwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIE90KFwiZ29vZ2xlX3BheVwiLCBzLCBuLCB0LCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0LmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwgT3QgPSAoZSwgbiwgdCwgciwgYSkgPT4gQS5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiB0LFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZSksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IFYodC5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogcixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBlLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogblxufSksIFV0ID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogUSwgZXJyX186IEggfSA9IGsoXCJvcC1mb3JtXCIpLCB0ZSA9IGNsYXNzIHRlIHtcbiAgY29uc3RydWN0b3Iobikge1xuICAgIHZhciBhO1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSAhMSwgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgQWUoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IEFlKCksIHRoaXMuY29udGV4dCA9IG5ldyBBZSgpLCB0aGlzLmluaXRGbG93cyA9IEpzKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoWC5DREVfQlJJREdFKTtcbiAgICAgICAgcy5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIiwgcy5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIiwgT2JqZWN0LmFzc2lnbihzLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgfSksIHMubW91bnQoXCJib2R5XCIpLCBRKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIiksIFEoXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgUShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogVXRcbiAgICAgICAgfSk7XG4gICAgICAgIFEoXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIFEoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBVdFxuICAgICAgICB9KTtcbiAgICAgICAgUShcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgYXdhaXQgU2EoYywgdGhpcy5kZXZpY2VUb2tlbiksIFEoXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgIGNvbnN0IGwgPSB0ZS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGksXG4gICAgICAgICAgYyxcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGwpLCBwaSh0aGlzLmluaXRGbG93cywgbCwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgUShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgSHModGhpcy5pbml0Rmxvd3MsIGwsIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGkudG90YWxBbW91bnRBdG9tcywgaS5jdXJyZW5jeSksIFEoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKSwgZyhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICBjb25zdCBpID0gRyhzKTtcbiAgICAgICAgSChcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgaSksIGcoXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBpXG4gICAgICAgIH0pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKGkpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChzKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IHMsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgIWkgfHwgaS50eXBlID09PSBYLkNERV9CUklER0UgfHwgKGkubm9kZS5zdHlsZS5oZWlnaHQgPSBzKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAocykgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnNldChzKSwgZyhcImNkZV9sb2FkZWRcIikpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAocykgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihzKSwgcyksIGcoXCJjZGVfbG9hZF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBzXG4gICAgICB9KSk7XG4gICAgfSwgdGhpcy5jcmVhdGVFbGVtZW50ID0gKHMsIGkgPSB7fSkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImNyZWF0ZUVsZW1lbnRcIiksICF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IGMgPSBuci5wYXJzZShzKSwgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksIHUgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcoaSk7XG4gICAgICBsLm5hbWUgPSBgJHtjfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IGQgPSBuZXcgVVJMKGAvYXBwL3YxLyR7bC5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHJldHVybiBkLnNlYXJjaCA9IHUudG9TdHJpbmcoKSwgbC5zcmMgPSBkLmhyZWYsIGwuc3R5bGUuYm9yZGVyID0gXCJub25lXCIsIGwuc3R5bGUud2lkdGggPSBcIjEwMCVcIiwgdGhpcy5yZWdpc3RlcklmcmFtZShjLCBsKTtcbiAgICB9LCB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKHMsIGkpID0+IHtcbiAgICAgIGNvbnN0IGMgPSB7XG4gICAgICAgIHR5cGU6IHMsXG4gICAgICAgIG5vZGU6IGksXG4gICAgICAgIG1vdW50OiAobCkgPT4ge1xuICAgICAgICAgIHZhciB1O1xuICAgICAgICAgICh1ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsKSkgPT0gbnVsbCB8fCB1LmFwcGVuZENoaWxkKGkpLCBnKFwiZWxlbWVudF9tb3VudGVkXCIsIHtcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZTogc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGMudHlwZSwgbm9kZTogYy5ub2RlIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyB8fCAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgIFtYLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtYLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbWC5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgW1guQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgIFtYLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tzXSA9IGMsIGM7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKHMpID0+IHtcbiAgICAgIGNvbnN0IGkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gaS5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBpLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIHMuc3R5bGVzICYmIGkuYXBwZW5kKFwic3R5bGVzXCIsIGpyKHMuc3R5bGVzKSksIGkuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIGk7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKHMpID0+IHtcbiAgICAgIHVpKHMubm9kZSkudGhlbigoaSkgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24ocy50eXBlLCBpKSwgIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBzLnR5cGUgPT09IFguQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KGkpO1xuICAgICAgfSkuY2F0Y2goKGkpID0+IEgoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGkpKTtcbiAgICB9LCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gKHMpID0+IHtcbiAgICAgIGcoXCJzdWJtaXRfY2FyZFwiLCB7IC4uLnMgfSksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcInN1Ym1pdENhcmRcIik7XG4gICAgICBjb25zdCBpID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFpKSB7XG4gICAgICAgIEgoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBBLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGksXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmUoaS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGkuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMucGF5bWVudFJvdXRlSWRcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kc1wiKSwgIXRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSkge1xuICAgICAgICBIKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpID0ge1xuICAgICAgICBwYXlwYWw6IHgucGF5cGFsLFxuICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IHguYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogeC5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB4LmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHguYXV0aG9yaXplbmV0QXBwbGVQYXlcbiAgICAgIH0sIGMgPSBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbbCwgdV0pID0+ICh7XG4gICAgICAgIG5hbWU6IGlbbF0gPz8gbCxcbiAgICAgICAgLi4udS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbClcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBnKFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIiwge1xuICAgICAgICBhdmFpbGFibGVfcGF5bWVudF9tZXRob2RzOiBjXG4gICAgICB9KSwgYztcbiAgICB9LCB0aGlzLmdlbmVyYWxTdWJtaXQgPSAocywgaSkgPT4ge1xuICAgICAgZyhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwge1xuICAgICAgICBtZXRob2Q6IHMsXG4gICAgICAgIHNldHRpbmdzOiBpXG4gICAgICB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2VuZXJhbFN1Ym1pdFwiKTtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWMpIHtcbiAgICAgICAgSChcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocykge1xuICAgICAgICBjYXNlIHgucG9ja3l0UGF5cGFsOlxuICAgICAgICAgIHJldHVybiBBLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmUoYy5jaGVja291dFBheW1lbnRNZXRob2RzLCBcInBheXBhbFwiLCBcInBvY2t5dFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFYoYy5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogaSB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgeC5wYXlwYWw6XG4gICAgICAgICAgcmV0dXJuIEEucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBjLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmZShjLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwicGF5cGFsXCIsIFwicGF5cGFsXCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogVihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7IC4uLmksIHVzZVJlZGlyZWN0RmxvdzogITAgfSB9LFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgeC5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBsID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWwpIHtcbiAgICAgICAgICAgIEgoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsLnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHguYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBsID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghbCkge1xuICAgICAgICAgICAgSChcbiAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbC5zdGFydEZsb3coaSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB4LmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgIGNvbnN0IGwgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghbCkge1xuICAgICAgICAgICAgSChcbiAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsLnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHguYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBsID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghbCkge1xuICAgICAgICAgICAgSChcbiAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGwuc3RhcnRGbG93KGkpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgeC5sb29wQ3J5cHRvOlxuICAgICAgICAgIHJldHVybiBBLmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZlKGMuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcnlwdG9cIiwgXCJsb29wXCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogVihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBpLFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgSmUocyk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIHZhciBzO1xuICAgICAgUShcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpLCB0aGlzLmlzRGVzdHJveWVkID0gITA7XG4gICAgICBmb3IgKGNvbnN0IGkgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIGkgJiYgaS5ub2RlLnJlbW92ZSgpO1xuICAgICAgKHMgPSBSKCkpID09IG51bGwgfHwgcy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgcGEoKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCBkZWxldGUgd2luZG93Lm9qcywgZyhcImZvcm1fZGVzdHJveWVkXCIpO1xuICAgIH0sIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKHMpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3Mocyk7XG4gICAgfSwgdGUuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4zLjJcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gbi5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLm4sIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBjdC5mcm9tT2JqZWN0KG4pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IG4uZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgZGkoKSwgdGhpcy5kZXZpY2VUb2tlbiA9IG9pKCksIGRhKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcms6IHQsIHZlcnNpb246IHIgfSA9IGNpKCk7XG4gICAgdW4odGhpcy5iYXNlVXJsKS50aGVuKChzKSA9PiB7XG4gICAgICBpZiAoIXN0LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IGkgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudDogcyxcbiAgICAgICAgICBmcmFtZXdvcms6IHQsXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogcixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIHN0LnNldChpKTtcbiAgICAgIH1cbiAgICB9KSwgZyhcImZvcm1faW5pdFwiKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgbGkodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIChhID0gUigpKSA9PSBudWxsIHx8IGEuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIGNoZWNrVmFsaWRGb3JtSW5zdGFuY2UobiA9IFwidW5rbm93blwiKSB7XG4gICAgY29uc3QgdCA9IHRlLmdldEluc3RhbmNlKCksIHIgPSB7XG4gICAgICBjYWxsZXI6IG4sXG4gICAgICB0aGlzRm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgIGN1cnJlbnRGb3JtSWQ6ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmZvcm1JZCkgfHwgXCJuby1jdXJyZW50LWluc3RhbmNlXCIsXG4gICAgICBpc0Rlc3Ryb3llZDogdGhpcy5pc0Rlc3Ryb3llZCxcbiAgICAgIGNoZWNrb3V0VG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4uc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICB9LCBhID0gYFxuICAgICAgW1dhcm5pbmddIEludmFsaWQgZm9ybSBpbnN0YW5jZSBkZXRlY3RlZC5cbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91IGFyZSBzdGlsbCB1c2luZyBhbiBvbGQgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBkZXN0cm95ZWQuXG4gICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZm9ybSBhbmQgY2xlYW51cCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIERlYnVnIEluZm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIC0gY2FsbGVyOiAke259XG4gICAgICAtIGNhbGxlcl9mb3JtX2lkOiAke3IudGhpc0Zvcm1JZH1cbiAgICAgIC0gY3VycmVudF9hY3RpdmVfZm9ybV9pZDogJHtyLmN1cnJlbnRGb3JtSWR9XG4gICAgICAtIGlzX2Rlc3Ryb3llZDogJHtyLmlzRGVzdHJveWVkfVxuICAgICAgLSBjaGVja291dF90b2tlbjogJHtyLmNoZWNrb3V0VG9rZW59XG4gICAgYDtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZCA/IChIKGEpLCBnKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBhIH0pLCAhMSkgOiAhdCB8fCB0LmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgPyAoSChhKSwgZyhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogYSB9KSwgITEpIDogITA7XG4gIH1cbn07XG50ZS5vanNGbG93cyA9IEEsIHRlLmFzc2lnbkFzU2luZ2xldG9uID0gKG4pID0+IHtcbiAgaWYgKHRlLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSBuO1xufSwgdGUuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIHRlLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAobiwgdCwgciwgYSkgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogbi5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKG4uYmFzZVVybCA/PyBWdCkub3JpZ2luLFxuICBmb3JtRGl2OiBhLFxuICBlbGVtZW50c1Nlc3Npb25JZDogdC5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogcixcbiAgY3VzdG9tSW5pdFBhcmFtczogbi5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG59KTtcbmxldCBqdCA9IHRlO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5hcnJheShab2RGaWVsZEVycm9yKTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbiwgZXJyb3JMb2dnZXIpID0+IHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImxvb3BDcnlwdG9cIl0gPSBcImxvb3AtY3J5cHRvXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicGF5cGFsXCJdID0gXCJwYXlwYWxcIjtcbiAgcmV0dXJuIFN1Ym1pdE1ldGhvZHMyO1xufSkoU3VibWl0TWV0aG9kcyB8fCB7fSk7XG56JDEubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgT3B0aW9uYWxTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoUHJpY2VRdHkpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7fSk7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMkMShDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke0xlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7TGUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtMZS5yZWQuYm9sZChcIm9qcy9cIil9JHtMZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICAgIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgICBQcm9taXNlOiB1bmRlZmluZWQsXG4gICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsXG4gICAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiBmYWxzZSxcbn07XG5cbnZhciB0aW1lb3V0UHJvdmlkZXIgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJUaW1lb3V0KSB8fCBjbGVhclRpbWVvdXQpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxuZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7XG4gICAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuXG5mdW5jdGlvbiBlcnJvckNvbnRleHQoY2IpIHtcbiAgICB7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IEVNUFRZX09CU0VSVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlci5jcmVhdGUgPSBmdW5jdGlvbiAobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb24pKTtcbnZhciBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBfYmluZC5jYWxsKGZuLCB0aGlzQXJnKTtcbn1cbnZhciBDb25zdW1lck9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcikge1xuICAgICAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHBhcnRpYWxPYnNlcnZlcjtcbiAgICB9XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29uc3VtZXJPYnNlcnZlcjtcbn0oKSk7XG52YXIgU2FmZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTYWZlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCAhb2JzZXJ2ZXJPck5leHQpIHtcbiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICBuZXh0OiAob2JzZXJ2ZXJPck5leHQgIT09IG51bGwgJiYgb2JzZXJ2ZXJPck5leHQgIT09IHZvaWQgMCA/IG9ic2VydmVyT3JOZXh0IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSAhPT0gbnVsbCAmJiBjb21wbGV0ZSAhPT0gdm9pZCAwID8gY29tcGxldGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMTtcbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuY29tcGxldGUsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IG9ic2VydmVyT3JOZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gU2FmZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAge1xuICAgICAgICByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHtcbiAgICB0aHJvdyBlcnI7XG59XG52YXIgRU1QVFlfT0JTRVJWRVIgPSB7XG4gICAgY2xvc2VkOiB0cnVlLFxuICAgIG5leHQ6IG5vb3AsXG4gICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgY29tcGxldGU6IG5vb3AsXG59O1xuXG52YXIgb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7IHJldHVybiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSkgfHwgJ0BAb2JzZXJ2YWJsZSc7IH0pKCk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHtcbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgfVxuICAgIGlmIChmbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBmbnNbMF07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBwaXBlZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbiAocHJldiwgZm4pIHsgcmV0dXJuIGZuKHByZXYpOyB9LCBpbnB1dCk7XG4gICAgfTtcbn1cblxudmFyIE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlKSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcywgb3BlcmF0b3IgPSBfYS5vcGVyYXRvciwgc291cmNlID0gX2Euc291cmNlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQob3BlcmF0b3JcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKVxuICAgICAgICAgICAgICAgIDogc291cmNlXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RyeVN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc2luaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzaW5rLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAobmV4dCwgcHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlRnJvbUFycmF5KG9wZXJhdGlvbnMpKHRoaXMpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24gKHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShmdW5jdGlvbiAoeCkgeyByZXR1cm4gKHZhbHVlID0geCk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHZhbHVlKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmUpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGU7XG59KCkpO1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUuZXJyb3IpICYmIGlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXIpIHx8IChpc09ic2VydmVyKHZhbHVlKSAmJiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTtcbn1cbmZ1bmN0aW9uIG9wZXJhdGUoaW5pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbiAobGlmdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUnKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxudmFyIE9wZXJhdG9yU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE9wZXJhdG9yU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSwgc2hvdWxkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRmluYWxpemUgPSBvbkZpbmFsaXplO1xuICAgICAgICBfdGhpcy5zaG91bGRVbnN1YnNjcmliZSA9IHNob3VsZFVuc3Vic2NyaWJlO1xuICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbk5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9uZXh0O1xuICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2Vycm9yO1xuICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9wZXJhdG9yU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT3BlcmF0b3JTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5cbnZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgIH07XG59KTtcblxudmFyIFN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIFN1YmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YmplY3Q7XG59KE9ic2VydmFibGUpKTtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5cbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoRGF0ZSkubm93KCk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpO1xuICAgICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyhcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIik7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChldmVudE5hbWUsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IGNvbnRleHRQcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gcGVyZm9ybWFuY2Uubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChzYWZlV2luZG93ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gc2FmZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZClcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18oXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6JDEuZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKTtcbnokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgUGF5SW5TdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFBheUluU3RhdGUyKSA9PiB7XG4gIFBheUluU3RhdGUyW1wiSURMRVwiXSA9IFwiaWRsZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQkFMQU5DRVwiXSA9IFwiY29uZmlybWluZ0JhbGFuY2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcImNvbmZpcm1pbmdBdXRob3JpemF0aW9uXCI7XG4gIFBheUluU3RhdGUyW1wiVVBEQVRJTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwidXBkYXRpbmdBdXRob3JpemF0aW9uXCI7XG4gIFBheUluU3RhdGUyW1wiU0lHTklOR19NRVNTQUdFXCJdID0gXCJzaWduaW5nTWVzc2FnZVwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX0NVU1RPTUVSXCJdID0gXCJjcmVhdGluZ0N1c3RvbWVyXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbmNvbnN0IExPT1BfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIGNvbmZpZzogbnVsbCxcbiAgd2lkZ2V0OiBudWxsXG59O1xueiQxLm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7IGNsaWVudF9pZDogeiQxLnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KHtcbiAgICBvbkZvY3VzOiBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uQ2hhbmdlOiBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkxvYWQ6IHByb3BzLm9uTG9hZCxcbiAgICBvbkxvYWRFcnJvcjogcHJvcHMub25Mb2FkRXJyb3IsXG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCxcbiAgICBvbkNoZWNrb3V0U3VjY2VzczogcHJvcHMub25DaGVja291dFN1Y2Nlc3MsXG4gICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgb25DaGVja291dEVycm9yOiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXG4gIH0pO1xuICBpZiAoanQuZ2V0SW5zdGFuY2UoKSkge1xuICAgIGp0LmdldEluc3RhbmNlKCk/LnVwZGF0ZUNhbGxiYWNrcyhmb3JtQ2FsbGJhY2tzLmdldCk7XG4gIH1cbiAgcmV0dXJuIGZvcm1DYWxsYmFja3MuZ2V0O1xufTtcblxuY29uc3QgdXNlUGF5bWVudFJlcXVlc3RzID0gKG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQpID0+IHtcbiAgY29uc3QgW3BheW1lbnRSZXF1ZXN0cywgc2V0UGF5bWVudFJlcXVlc3RzXSA9IHVzZVN0YXRlKHtcbiAgICBhcHBsZV9wYXk6IFBSX0xPQURJTkcsXG4gICAgZ29vZ2xlX3BheTogUFJfTE9BRElOR1xuICB9KTtcbiAgY29uc3Qgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAocGF5bWVudFJlcXVlc3RzMikgPT4ge1xuICAgICAgc2V0UGF5bWVudFJlcXVlc3RzKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgICAgb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZD8uKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgIH0sXG4gICAgW29yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWRdXG4gICk7XG4gIHJldHVybiB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfTtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfSA9IHVzZVBheW1lbnRSZXF1ZXN0cyhwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdHJpcGVMaW5rQ3RybCwgc2V0U3RyaXBlTGlua0N0cmxdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb29wQ29uZmlnLCBzZXRMb29wQ29uZmlnXSA9IHVzZVN0YXRlKExPT1BfTE9BRElORyk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBqdC5nZXRJbnN0YW5jZSgpID8/IG5ldyBqdCh7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIC4uLmZvcm1DYWxsYmFja3NcbiAgICB9KTtcbiAgICBzZXRPcEZvcm0oZm9ybSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZShmb3JtKTtcbiAgICBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS5pbml0Rmxvd3Muc3RyaXBlTGluay5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRTdHJpcGVMaW5rQ3RybChyZXN1bHQubG9hZGVkVmFsdWUuY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogcmVzdWx0LmxvYWRlZFZhbHVlLndpZGdldFByb3BzLFxuICAgICAgICAgIGNvbmZpZzogcmVzdWx0LmxvYWRlZFZhbHVlLmluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmICFyZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgd2lkZ2V0OiBudWxsLFxuICAgICAgICAgIGNvbmZpZzogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGFwcGxlUGF5OiBwcmV2LmFwcGxlUGF5LFxuICAgICAgICAgIGdvb2dsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgZ29vZ2xlUGF5OiBwcmV2Lmdvb2dsZVBheSxcbiAgICAgICAgICBhcHBsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50L2AsIGJhc2VVcmwpO1xuICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmc7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogdXJsLnRvU3RyaW5nKCksXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEN2Y0VsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDIH0pO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCwgQ2FyZEVsZW1lbnQsIENhcmRFeHBpcnlFbGVtZW50LCBDYXJkTnVtYmVyRWxlbWVudCwgRWxlbWVudHNGb3JtLCBGaWVsZE5hbWUsIFBheUluU3RhdGUsIHVzZU9wZW5QYXlFbGVtZW50cyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLGVBQUFDLElBQWEsYUFBQUMsSUFBVyxVQUFBQyxJQUFRLFdBQUFDLFVBQWU7QUFDN0YsU0FBUyxPQUFBQyxJQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsS0FBS0MsU0FBVztBQUN6QixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsUUFBUTtBQUVmLE1BQU1DLEtBQWtCYixHQUFjO0FBQUEsRUFDcEMsUUFBUTtBQUFBLEVBQ1IsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUFBLEVBQ1YscUJBQXFCO0FBQUEsRUFD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TztBQUFBLE1BQ2hCLFdBQVc7QUFBQSxNQUNYLEtBQUtXLEVBQUksU0FBUztBQUFBLE1BQ2xCLE9BQU9IO0FBQUEsTUFDUCxLQUFLTDtBQUFBLElBQ1A7QUFBQSxFQUNGO0FBQ0YsR0FFTVMsS0FBaUIsQ0FBQyxFQUFFLFFBQUFwQixFQUFPLE1BQ1IsZ0JBQUFOLEdBQUlJLElBQWMsRUFBRSxRQUFBRSxHQUFRLGFBQWFxQixHQUFnQixTQUFTLENBQUMsR0FHdEZDLEtBQWMsQ0FBQyxFQUFFLFFBQUF0QixFQUFPLE1BQ0wsZ0JBQUFOLEdBQUlJLElBQWMsRUFBRSxRQUFBRSxHQUFRLGFBQWFxQixHQUFnQixLQUFLLENBQUMsR0FHbEZFLEtBQW9CLENBQUMsRUFBRSxRQUFBdkIsRUFBTyxNQUNYLGdCQUFBTixHQUFJSSxJQUFjLEVBQUUsUUFBQUUsR0FBUSxhQUFhcUIsR0FBZ0IsWUFBWSxDQUFDLEdBR3pGRyxLQUFvQixDQUFDLEVBQUUsUUFBQXhCLEVBQU8sTUFDWCxnQkFBQU4sR0FBSUksSUFBYyxFQUFFLFFBQUFFLEdBQVEsYUFBYXFCLEdBQWdCLFlBQVksQ0FBQzsiLAogICJuYW1lcyI6IFsiY3JlYXRlQ29udGV4dCIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJqc3giLCAiRnJhZ21lbnQiLCAieiQxIiwgInY0IiwgImNvbm5lY3RUb0NoaWxkIiwgIkxlIiwgIkVsZW1lbnRzQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAiY29udGV4dCIsICJWdCIsICJIbiIsICJKbiIsICJLbiIsICJabiIsICJXbiIsICJydCIsICJuIiwgIlFuIiwgIlhuIiwgImVyIiwgIkciLCAidHIiLCAidCIsICJyIiwgImEiLCAieCIsICJJIiwgIkMiLCAicCIsICJHdCIsICJ6dCIsICJxdCIsICJZdCIsICJYIiwgIm5yIiwgInFlIiwgInJyIiwgIloiLCAib3IiLCAiYXIiLCAic3IiLCAiaXIiLCAiY3IiLCAibHIiLCAidXIiLCAiZHIiLCAicHIiLCAibXIiLCAieXIiLCAiZnIiLCAiRmUiLCAiX3IiLCAiaHIiLCAiZ3IiLCAid3IiLCAiYnIiLCAidnIiLCAiRXIiLCAibHQiLCAiQ3IiLCAiU3IiLCAiUHIiLCAiRiIsICJrciIsICJBciIsICJCdCIsICJJciIsICJSciIsICJIdCIsICJGciIsICJUciIsICJNciIsICJZZSIsICJmdCIsICJCZSIsICJEciIsICJOciIsICJzIiwgImkiLCAiTHIiLCAiT3IiLCAiVXIiLCAiYyIsICJqciIsICJWIiwgInhyIiwgIiRyIiwgIlZyIiwgInciLCAiR3IiLCAiSnQiLCAiS3QiLCAienIiLCAicXIiLCAiYmUiLCAiWXIiLCAiQnIiLCAiWnQiLCAiSHIiLCAiSnIiLCAiS3IiLCAiX3QiLCAiV3QiLCAiaHQiLCAiUXQiLCAiWnIiLCAiV3IiLCAiWHQiLCAiUXIiLCAiWHIiLCAiZW8iLCAidG8iLCAibm8iLCAiZW4iLCAicm8iLCAib28iLCAiYW8iLCAic28iLCAiaW8iLCAiY28iLCAibG8iLCAidW8iLCAicG8iLCAibmUiLCAiaG4iLCAicGUiLCAiayIsICJvdCIsICJzZSIsICJtbyIsICJfIiwgInRuIiwgImhlIiwgIlZlIiwgIkdlIiwgIl9lIiwgInlvIiwgIm0iLCAiZiIsICJoIiwgImIiLCAiZm8iLCAiTCIsICJIZSIsICJYZSIsICJ6ZSIsICJUZSIsICJndCIsICJybiIsICJvbiIsICJhbiIsICJ3dCIsICJqZSIsICJ1dCIsICJ3byIsICJhdCIsICJfbyIsICJldCIsICJobyIsICJPZSIsICJnbyIsICJkdCIsICJibyIsICJ2byIsICJyZSIsICJDbyIsICJidCIsICJFbyIsICJTbyIsICJQbyIsICJrbyIsICJBbyIsICJJbyIsICJ2dCIsICJSbyIsICJGbyIsICJFdCIsICJUbyIsICJDdCIsICJNbyIsICJEbyIsICJObyIsICJMbyIsICJPbyIsICJVbyIsICJqbyIsICJ4byIsICIkbyIsICJWbyIsICJHbyIsICJ6byIsICJxbyIsICJZbyIsICJCbyIsICJIbyIsICJKbyIsICJLbyIsICJabyIsICJXbyIsICJRbyIsICJYbyIsICJlYSIsICJ0YSIsICJuYSIsICJyYSIsICJvYSIsICJ2IiwgIlMiLCAiQWUiLCAiSmUiLCAiU3QiLCAiYWEiLCAic2EiLCAidHQiLCAiUiIsICJzdCIsICJQdCIsICJpYSIsICJjYSIsICJsYSIsICJVZSIsICJ1YSIsICJ5biIsICJkYSIsICJwYSIsICJ4dCIsICJmbiIsICJVIiwgInlhIiwgIm1hIiwgImZhIiwgIlQiLCAidmUiLCAiX2EiLCAiaGEiLCAieiIsICJnYSIsICJ3YSIsICJiYSIsICJFZSIsICJ2YSIsICJrdCIsICJFYSIsICJwdCIsICJfbiIsICJDYSIsICJtdCIsICJTYSIsICJLIiwgInduIiwgIlBhIiwgImthIiwgImwiLCAidm4iLCAiZ2kiLCAiTWUiLCAicSIsICJDbiIsICJEZSIsICJBYSIsICJTbiIsICJJYSIsICJSYSIsICJLZSIsICJQbiIsICJGYSIsICJUYSIsICJ5dCIsICJNYSIsICJEYSIsICJOYSIsICJMYSIsICJPYSIsICJSbiIsICJGbiIsICJvZSIsICJVYSIsICJ4ZSIsICJqYSIsICJ4YSIsICIkYSIsICJ5IiwgIkUiLCAiU2UiLCAiVG4iLCAiVmEiLCAidSIsICJkIiwgIkEiLCAiR2EiLCAiWmUiLCAiTW4iLCAibnQiLCAiRG4iLCAiV2UiLCAiemEiLCAiTm4iLCAiSiIsICJ5ZSIsICJxYSIsICJZYSIsICJNIiwgIlkiLCAiTyIsICJtZSIsICJCbiIsICJOZSIsICJpZSIsICJRZSIsICJjZSIsICJDZSIsICJPbiIsICJCYSIsICJIYSIsICIkZSIsICJVbiIsICJKYSIsICJLYSIsICJ1ZSIsICJQZSIsICJaYSIsICJXYSIsICJRYSIsICJqbiIsICJYYSIsICJlcyIsICJ4biIsICJpdCIsICJ0cyIsICJucyIsICJycyIsICJvcyIsICJnZSIsICJSZSIsICJhcyIsICIkbiIsICJzcyIsICJpcyIsICJBdCIsICJjcyIsICJscyIsICJ1cyIsICJkcyIsICJwcyIsICJQIiwgIkl0IiwgIlJ0IiwgIm1zIiwgImdzIiwgImhzIiwgInlzIiwgImZzIiwgIl9zIiwgIndzIiwgImJzIiwgIiQiLCAidnMiLCAiRXMiLCAiRnQiLCAiQ3MiLCAiU3MiLCAiVyIsICJUdCIsICJQcyIsICJrcyIsICJNdCIsICJBcyIsICJJcyIsICJScyIsICJGcyIsICJEcyIsICJUcyIsICJNcyIsICJqIiwgIk5zIiwgIkxzIiwgIk9zIiwgImZlIiwgIlVzIiwgInhzIiwgImpzIiwgIiRzIiwgIlZzIiwgImxlIiwgIkdzIiwgIkduIiwgInpzIiwgInFzIiwgIllzIiwgIkJzIiwgImFlIiwgIkhzIiwgIkpzIiwgIktzIiwgIkIiLCAiRHQiLCAiZWUiLCAiY3QiLCAiem4iLCAiSWUiLCAiWnMiLCAicW4iLCAiTnQiLCAiZGUiLCAia2UiLCAiV3MiLCAiUXMiLCAiWHMiLCAibmkiLCAiZWkiLCAidGkiLCAicmkiLCAiWW4iLCAib2kiLCAiYWkiLCAic2kiLCAiaWkiLCAiY2kiLCAibGkiLCAiTHQiLCAidWkiLCAiZGkiLCAicGkiLCAiT3QiLCAiVXQiLCAiUSIsICJIIiwgInRlIiwgImp0IiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJnIiwgInZlcmIiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJfX3JlYWQiLCAiX19zcHJlYWRBcnJheSIsICJmcm9tIiwgInBhY2siLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgImF3YWl0UmV0dXJuIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiZnVsZmlsbCIsICJfX2FzeW5jVmFsdWVzIiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiY3JlYXRlRXJyb3JDbGFzcyIsICJjcmVhdGVJbXBsIiwgIl9zdXBlciIsICJpbnN0YW5jZSIsICJjdG9yRnVuYyIsICJVbnN1YnNjcmlwdGlvbkVycm9yIiwgImVycm9ycyIsICJlcnIiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJpIiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJ6JDEiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJQYXltZW50UHJvY2Vzc29yIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiUGF5SW5TdGF0ZSIsICJQYXlJblN0YXRlMiIsICJMT09QX0xPQURJTkciLCAiUmVxdWlyZWRTdHJpbmciLCAiRmllbGROYW1lIiwgIk9wdGlvbmFsU3RyaW5nIiwgIlBSX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJrZXkiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJBV1hfTE9BRElORyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiZm9ybUNhbGxiYWNrcyIsICJqdCIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgInVzZVN0YXRlIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInVzZUNhbGxiYWNrIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgInVzZUVmZmVjdCIsICJmb3JtIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJqc3giLCAiRnJhZ21lbnQiLCAiY2hpbGRyZW5Qcm9wcyIsICJFbGVtZW50c0NvbnRleHQiLCAiRWxlbWVudEZyYW1lIiwgImVsZW1lbnRUeXBlIiwgInN0eWxlcyIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJpZnJhbWVSZWYiLCAidXNlUmVmIiwgImVsZW1lbnRTdHlsZSIsICJ1c2VNZW1vIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgInVybCIsICJDYXJkQ3ZjRWxlbWVudCIsICJFbGVtZW50VHlwZUVudW0iLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
|
|
6703
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBMZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBWdCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgSG4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBKbiA9IHokMS5hcnJheShIbiksIEtuID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIFpuID0geiQxLmFycmF5KEtuKSwgV24gPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIHJ0ID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBXbltuXSA/PyBlO1xufSwgUW4gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZShlKSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIFhuID0gKGUpID0+IGUubGVuZ3RoID09PSAxID8gcnQoZVswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKCh0KSA9PiBg4oCiICR7cnQodC5tc2cpfWApLmpvaW4oYFxuYCl9YCwgZXIgPSAoZSkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgodCkgPT4gYC0gJHt0LnBhdGguam9pbihcIi9cIil9OiAke3QubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIEcgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChRbihlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBuID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIEpuLnNhZmVQYXJzZShuKS5zdWNjZXNzID8gWG4obikgOiBabi5zYWZlUGFyc2Uobikuc3VjY2VzcyA/IGVyKG4pIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIHJ0KGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgcmV0dXJuIG4gKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIHRyID0gKGUsIG4sIHQpID0+ICguLi5yKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG4oLi4ucik7XG4gIH0gY2F0Y2ggKHMpIHtcbiAgICB0KGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgcyk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyIHggPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgZS5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIGUuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgZS5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCBlLnBheXBhbCA9IFwicGF5cGFsXCIsIGUpKSh4IHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKHgpOyBjb25zdCBJID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pLCBDID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBOID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xudmFyIHAgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgZS5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIGUuRU1BSUwgPSBcImVtYWlsXCIsIGUuWklQX0NPREUgPSBcInppcENvZGVcIiwgZS5DSVRZID0gXCJjaXR5XCIsIGUuU1RBVEUgPSBcInN0YXRlXCIsIGUuQ09VTlRSWSA9IFwiY291bnRyeVwiLCBlLkFERFJFU1MgPSBcImFkZHJlc3NcIiwgZS5QSE9ORSA9IFwicGhvbmVcIiwgZS5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCBlKSkocCB8fCB7fSk7XG5jb25zdCBHdCA9IHokMS5uYXRpdmVFbnVtKHApO1xudmFyIHp0ID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCBlLkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIGUpKSh6dCB8fCB7fSk7XG5jb25zdCBxdCA9IHokMS5uYXRpdmVFbnVtKHp0KSwgWXQgPSB6JDEudW5pb24oW0d0LCBxdF0pO1xudmFyIFggPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEID0gXCJjYXJkXCIsIGUuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIGUuQ0RFX0JSSURHRSA9IFwiY2RlLWJyaWRnZVwiLCBlKSkoWCB8fCB7fSk7XG5jb25zdCBuciA9IHokMS5uYXRpdmVFbnVtKFgpLCBxZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogTih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogTih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCByciA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBDLFxuICBleHBpcnk6IEMsXG4gIGN2YzogQ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBDLFxuICBjb2xvcjogQyxcbiAgZm9udEZhbWlseTogQyxcbiAgZm9udFNpemU6IEMsXG4gIGZvbnRXZWlnaHQ6IEMsXG4gIG1hcmdpbjogQyxcbiAgcGFkZGluZzogQyxcbiAgbGV0dGVyU3BhY2luZzogQyxcbiAgbGluZUhlaWdodDogQyxcbiAgaGlkZUljb246IENcbn0pO1xuY29uc3QgWiA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBvciA9IFouZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIHNyID0geiQxLm9iamVjdCh7IHR5cGU6IG9yIH0pLCBhciA9IFouZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBpciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBhcixcbiAgZWxlbWVudFR5cGU6IHF0LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBjciA9IFouZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSksIGxyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IGNyLFxuICBtZXNzYWdlOiBJLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgdXIgPSBaLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIGRyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHVyLFxuICBlbGVtZW50VHlwZTogWXQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBwciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChaLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBJXG59KSwgbXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoWi5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogSSxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogQyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KHFlKVxufSksIHlyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFouZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBmciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChaLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KSwgRmUgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBJLFxuICBsYXN0TmFtZTogSSxcbiAgZW1haWw6IEksXG4gIHppcENvZGU6IEksXG4gIGNvdW50cnk6IEksXG4gIHByb21vdGlvbkNvZGU6IENcbn0pLCBfciA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IEMsXG4gIGxhc3ROYW1lOiBDLFxuICBlbWFpbDogSSxcbiAgemlwQ29kZTogSSxcbiAgY291bnRyeTogSSxcbiAgcHJvbW90aW9uQ29kZTogQyxcbiAgYWRkcmVzczogQyxcbiAgY2l0eTogQyxcbiAgc3RhdGU6IENcbn0pLCBociA9IFouZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgZ3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogaHIsXG4gIHNlc3Npb25JZDogSSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBxZSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBDLFxuICBwYXltZW50Um91dGVJZDogQ1xufSkuZXh0ZW5kKEZlLnNoYXBlKSwgd3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoWi5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCBiciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChaLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgdnIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIHNyLFxuICBpcixcbiAgbHIsXG4gIGRyLFxuICBwcixcbiAgbXIsXG4gIGdyLFxuICB3cixcbiAgYnIsXG4gIHlyLFxuICBmclxuXSksIEVyID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IHZyLFxuICBub25jZTogSSxcbiAgZm9ybUlkOiBJLFxuICBlbGVtZW50SWQ6IElcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogSVxufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IE4oeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IE4oeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogTih6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IE4oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IGx0ID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IE4oeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KSwgQ3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFNyID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShDcilcbn0pLCBQciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgU3Jcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHFlLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBGZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogTih6JDEuc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IE4oeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IEZlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogTih6JDEuc3RyaW5nKCkpXG59KTtcbnZhciBGID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuU1VDQ0VTUyA9IFwic3VjY2Vzc1wiLCBlLkZBSUxVUkUgPSBcImZhaWx1cmVcIiwgZS5DQU5DRUxMRUQgPSBcImNhbmNlbGxlZFwiLCBlKSkoRiB8fCB7fSk7XG5jb25zdCBrciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcbiAgICBcInN1Y2Nlc3NcIixcbiAgICBcImZhaWx1cmVcIixcbiAgICBcImNhbmNlbGxlZFwiXG4gICAgLyogQ0FOQ0VMTEVEICovXG4gIF0pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IEFyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgQnQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IE4oeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IE4oeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogTih6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTih6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IE4oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgSXIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMCksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCExKSB9KVxuXSksIFJyID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KHJyKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IE4obHQpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IE4oeiQxLmFycmF5KEJ0KSlcbn0pLCBIdCA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKFt0LCByXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gR3QucGFyc2UodCk7XG4gICAgICBBcnJheS5pc0FycmF5KHIpID8gbltzXSA9IHIgOiBBcnJheS5pc0FycmF5KHIuX2Vycm9ycykgJiYgKG5bc10gPSByLl9lcnJvcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSksIG47XG59LCBGciA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIFRyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIE1yID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgWWUgPSBhc3luYyAoZSkgPT4ge1xuICBmb3IgKGxldCB0ID0gMDsgdCA8IDEwOyB0KyspXG4gICAgZnQoKSB8fCBhd2FpdCBCZSg1MDApO1xuICBpZiAoIWZ0KCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKGUpO1xufSwgRHIgPSBhc3luYyAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gYXdhaXQgWWUoZSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHQuZWxlbWVudHMobiksXG4gICAgc3RyaXBlOiB0XG4gIH07XG59LCBOciA9IGFzeW5jIChlLCBuLCB0LCByLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBhd2FpdCBZZShlKSwgaSA9IE1yW3QudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gYS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IGksXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IG4sXG4gICAgICBwZW5kaW5nOiByXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogITAsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6ICEwLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXVxuICB9KTtcbn0sIEJlID0gKGUpID0+IG5ldyBQcm9taXNlKChuKSA9PiB7XG4gIHNldFRpbWVvdXQobiwgZSk7XG59KSwgZnQgPSAoKSA9PiBcIlN0cmlwZVwiIGluIHdpbmRvdywgTHIgPSBhc3luYyAoZSkgPT4gbmV3IFByb21pc2UoKG4sIHQpID0+IHtcbiAgdHJ5IHtcbiAgICBlLm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAocikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCByKSwgbihyKTtcbiAgICB9KSwgZS5vbihcInRva2VuXCIsIGFzeW5jIChyKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCByKTtcbiAgICB9KSwgZS5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICB0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0KHIpO1xuICB9XG59KSwgT3IgPSBhc3luYyAoZSwgbikgPT4ge1xuICBpZiAoIWUuc3RyaXBlX3BrIHx8ICFlLmNsaWVudF9zZWNyZXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgY29uc3QgciA9IGF3YWl0IChhd2FpdCBZZShlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IG4ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKHIuZXJyb3IpXG4gICAgdGhyb3cgbi5jb21wbGV0ZShcImZhaWxcIiksIG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7ci5lcnJvci5tZXNzYWdlID8/IFwidW5rbm93blwifWApO1xuICByZXR1cm4gbi5jb21wbGV0ZShcInN1Y2Nlc3NcIiksIHI7XG59LCBVciA9IGFzeW5jIChlKSA9PiB7XG4gIHZhciBzLCBhLCBpLCBjO1xuICBjb25zdCB0ID0gYXdhaXQgKGF3YWl0IFllKGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogZS5zdHJpcGVfcG1faWRcbiAgfSksIHIgPSAocyA9IHQuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBzLnN0YXR1cztcbiAgaWYgKHIgPT09IFwic3VjY2VlZGVkXCIpXG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBlLnN0cmlwZV9wbV9pZCksIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIHQuc2V0dXBJbnRlbnQpO1xuICBlbHNlIHRocm93IHIgPT09IFwiY2FuY2VsZWRcIiA/IG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSA6IG5ldyBFcnJvcihcbiAgICBgJHsoKGEgPSB0LmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYS5tZXNzYWdlKSA/PyAoKGMgPSAoaSA9IHQuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBpLmxhc3Rfc2V0dXBfZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBjLm1lc3NhZ2UpID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgKTtcbn0sIGpyID0gKGUpID0+IEpTT04uc3RyaW5naWZ5KGUpLCBWID0gKGUsIG4pID0+IEFycmF5LmZyb20oZS5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgocywgYSkgPT4ge1xuICBjb25zdCBpID0gYS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIHJldHVybiBpID8geyAuLi5zLCBbaV06IGEudmFsdWUgfSA6IHM7XG59LCB7fSksIHhyID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRXIucGFyc2UoZSk7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCBlLCBuKSwgbjtcbiAgfVxufSwgJHIgPSBhc3luYyAoZSkgPT4ge1xuICBpZiAodHlwZW9mIGUgIT0gXCJvYmplY3RcIiB8fCAhZSkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSB7IHR5cGU6IFwicGluZ1wiIH0sIHQgPSBhd2FpdCBlLnNlbmQobik7XG4gICAgaWYgKHQgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoIChuKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCBuKSwgITE7XG4gIH1cbn0sIFZyID0gKGUsIG4pID0+ICEhZSAmJiBuO1xuZnVuY3Rpb24gR3IoZSwgbikge1xuICB2YXIgdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgdCA/IHQoZSwgbikgOiBlLl9fcHJvdG9fXyA9IG47XG59XG5mdW5jdGlvbiB6cihlLCBuKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IGUuY29uc3RydWN0b3IpO1xuICB2YXIgdCA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICB0ICYmIHQoZSwgbik7XG59XG52YXIgcXIgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIHZhciBlID0gZnVuY3Rpb24odCwgcikge1xuICAgIHJldHVybiBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24ocywgYSkge1xuICAgICAgcy5fX3Byb3RvX18gPSBhO1xuICAgIH0gfHwgZnVuY3Rpb24ocywgYSkge1xuICAgICAgZm9yICh2YXIgaSBpbiBhKVxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgaSkgJiYgKHNbaV0gPSBhW2ldKTtcbiAgICB9LCBlKHQsIHIpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24obiwgdCkge1xuICAgIGlmICh0eXBlb2YgdCAhPSBcImZ1bmN0aW9uXCIgJiYgdCAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcodCkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgIGUobiwgdCk7XG4gICAgZnVuY3Rpb24gcigpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBuO1xuICAgIH1cbiAgICBuLnByb3RvdHlwZSA9IHQgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHQpIDogKHIucHJvdG90eXBlID0gdC5wcm90b3R5cGUsIG5ldyByKCkpO1xuICB9O1xufSgpLCBZciA9IGZ1bmN0aW9uKGUpIHtcbiAgcXIobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCwgcikge1xuICAgIHZhciBzID0gdGhpcy5jb25zdHJ1Y3RvciwgYSA9IGUuY2FsbCh0aGlzLCB0LCByKSB8fCB0aGlzO1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoYSwgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBzLm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9KSwgR3IoYSwgcy5wcm90b3R5cGUpLCB6cihhKSwgYTtcbiAgfVxuICByZXR1cm4gbjtcbn0oRXJyb3IpO1xuY29uc3QgdyA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IEJyID0geiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IEp0ID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiB3KHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiB3KHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiB3KHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogdyh6JDEubnVtYmVyKCkpXG59KSwgS3QgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IHcoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogdyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiB3KHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBIciA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLCBKciA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiB3KEhyKVxufSksIGJlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB3KHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiB3KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIEtyID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCBaciA9IHokMS5vYmplY3Qoe1xuICBpZDogdyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiB3KHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IHcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoS3IpLFxuICB0cmlhbF9zdGFydDogdyh6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IHcoeiQxLnN0cmluZygpKVxufSksIFp0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCBXciA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KFp0KSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIFFyID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogSnRcbn0pLCBYciA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShRciksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogdyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KFdyKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShadClcbn0pLCBfdCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoWnIpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KFhyKSxcbiAgcHJvY2Vzc29yc191c2VkOiB3KHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSksIFd0ID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IF90LFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IHcoX3QpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoSnQpXG59KSwgaHQgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogdyh6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoS3QpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogSnIsXG4gIHN1YnNfcHJldmlldzogdyhXdCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KGJlKVxufSksIFF0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoaHQuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChodC5zaGFwZSlcbl0pLCBlbyA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCB0byA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1F0LCBlbywgdG9dKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShLdCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBiZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IHcoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IFh0ID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBubyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkobm8pO1xuY29uc3Qgcm8gPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBvbyA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgc28gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KG9vKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSksIGFvID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogdyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGJlLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogc28ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKHJvLnNoYXBlKS5leHRlbmQoYW8uc2hhcGUpO1xuY29uc3QgZW4gPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogX3IsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYmUsXG4gIHBheW1lbnRfcm91dGVfaWQ6IHcoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBGZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGJlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgaW8gPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiB3KHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogdyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogdyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogdyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogdyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiB3KHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiB3KHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IHcoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IHcoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IHcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IHcoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogdyh6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IHcoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogdyh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IHcoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiB3KHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IHcoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogdyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBjbyA9IHokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBiZSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogdyh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IGxvID0geiQxLm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiB3KHokMS5yZWNvcmQoeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGV2ZW50czogeiQxLmFycmF5KFxuICAgIHokMS5vYmplY3Qoe1xuICAgICAgZXZlbnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnokMS5hbnkoKS5vcHRpb25hbCgpO1xueiQxLm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IHVvID0geiQxLm9iamVjdCh7fSksIHBvID0gKGUpID0+IGUucmVkdWNlKChuLCB0KSA9PiBuICsgdCwgMCksIG5lID0gKGUpID0+IGFzeW5jIChuKSA9PiB7XG4gIHZhciB0LCByO1xuICB0cnkge1xuICAgIChyID0gKHQgPSBuLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkNoZWNrb3V0U3RhcnRlZCkgPT0gbnVsbCB8fCByLmNhbGwodCksIGcoXCJjaGVja291dF9zdGFydGVkXCIsIHtcbiAgICAgIGNwbTogbi5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgICBjb25zdCBzID0gYXdhaXQgZShuKTtcbiAgICBpZiAoZyhcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgY3BtOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIC4uLnNcbiAgICB9KSwgcy5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhzLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAocy5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBzLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIHMucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIHMucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICBzLnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW11cbiAgICAgICk7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtzfWApO1xuICB9IGNhdGNoIChzKSB7XG4gICAgY29uc3QgYSA9IEcocyksIGkgPSBhd2FpdCBobihuLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoYSwgaSksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogbi5jaGVja291dFBheW1lbnRNZXRob2QsIGVycm9yTWVzc2FnZTogYSwgZXJyb3JDb2RlOiBpLCBlcnJvcjogcyB9KTtcbiAgfVxufSwgcGUgPSAoZSkgPT4gYXN5bmMgKG4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZShuKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHsgZXJyX186IHIgfSA9IGsoXCJpbml0LWVycm9yLWNhdGNoZXJcIiksIHMgPSBHKHQpLCBhID0gYXdhaXQgaG4obi5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHMpO1xuICAgIHJldHVybiByKGEsIHMsIHQpLCBnKFwiaW5pdF9mbG93X2Vycm9yXCIsIHsgZXJyb3JNZXNzYWdlOiBzLCBlcnJvckNvZGU6IGEsIGVycm9yOiB0IH0pLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBzLCBlcnJvckNvZGU6IGEsIGlzTG9hZGluZzogITEgfTtcbiAgfVxufSwgayA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSAoLi4ucikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLmxvZyhgJHtMZS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke0xlLmJvbGQuZ3JheShgJHtlfWApfVx0YCwgLi4ucik7XG4gIH0sIHQgPSAoLi4ucikgPT4ge1xuICAgIHdpbmRvdy5jb25zb2xlLndhcm4oYCR7TGUucmVkLmJvbGQoXCJvanMvXCIpfSR7TGUuYm9sZC5ncmF5KGAke2V9YCl9XHRgLCAuLi5yKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2c6IG4sXG4gICAgZXJyOiB0LFxuICAgIGxvZ19fOiBuLFxuICAgIGVycl9fOiB0XG4gIH07XG59O1xudmFyIG90ID0gZnVuY3Rpb24oZSwgbikge1xuICByZXR1cm4gb3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbih0LCByKSB7XG4gICAgdC5fX3Byb3RvX18gPSByO1xuICB9IHx8IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBmb3IgKHZhciBzIGluIHIpIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCBzKSAmJiAodFtzXSA9IHJbc10pO1xuICB9LCBvdChlLCBuKTtcbn07XG5mdW5jdGlvbiBhZShlLCBuKSB7XG4gIGlmICh0eXBlb2YgbiAhPSBcImZ1bmN0aW9uXCIgJiYgbiAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhuKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIG90KGUsIG4pO1xuICBmdW5jdGlvbiB0KCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSBlO1xuICB9XG4gIGUucHJvdG90eXBlID0gbiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUobikgOiAodC5wcm90b3R5cGUgPSBuLnByb3RvdHlwZSwgbmV3IHQoKSk7XG59XG5mdW5jdGlvbiBtbyhlLCBuLCB0LCByKSB7XG4gIGZ1bmN0aW9uIHMoYSkge1xuICAgIHJldHVybiBhIGluc3RhbmNlb2YgdCA/IGEgOiBuZXcgdChmdW5jdGlvbihpKSB7XG4gICAgICBpKGEpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKHQgfHwgKHQgPSBQcm9taXNlKSkoZnVuY3Rpb24oYSwgaSkge1xuICAgIGZ1bmN0aW9uIGMoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShyLm5leHQoZCkpO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBpKF8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUoci50aHJvdyhkKSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIGkoXyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUoZCkge1xuICAgICAgZC5kb25lID8gYShkLnZhbHVlKSA6IHMoZC52YWx1ZSkudGhlbihjLCBsKTtcbiAgICB9XG4gICAgdSgociA9IHIuYXBwbHkoZSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHRuKGUsIG4pIHtcbiAgdmFyIHQgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoYVswXSAmIDEpIHRocm93IGFbMV07XG4gICAgcmV0dXJuIGFbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIHIsIHMsIGEsIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBpLm5leHQgPSBjKDApLCBpLnRocm93ID0gYygxKSwgaS5yZXR1cm4gPSBjKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBpO1xuICBmdW5jdGlvbiBjKHUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGwoW3UsIGRdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGwodSkge1xuICAgIGlmIChyKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgaSAmJiAoaSA9IDAsIHVbMF0gJiYgKHQgPSAwKSksIHQ7ICkgdHJ5IHtcbiAgICAgIGlmIChyID0gMSwgcyAmJiAoYSA9IHVbMF0gJiAyID8gcy5yZXR1cm4gOiB1WzBdID8gcy50aHJvdyB8fCAoKGEgPSBzLnJldHVybikgJiYgYS5jYWxsKHMpLCAwKSA6IHMubmV4dCkgJiYgIShhID0gYS5jYWxsKHMsIHVbMV0pKS5kb25lKSByZXR1cm4gYTtcbiAgICAgIHN3aXRjaCAocyA9IDAsIGEgJiYgKHUgPSBbdVswXSAmIDIsIGEudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiB0LmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICB0LmxhYmVsKyssIHMgPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IHQub3BzLnBvcCgpLCB0LnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGEgPSB0LnRyeXMsICEoYSA9IGEubGVuZ3RoID4gMCAmJiBhW2EubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICB0ID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIWEgfHwgdVsxXSA+IGFbMF0gJiYgdVsxXSA8IGFbM10pKSB7XG4gICAgICAgICAgICB0LmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiB0LmxhYmVsIDwgYVsxXSkge1xuICAgICAgICAgICAgdC5sYWJlbCA9IGFbMV0sIGEgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhICYmIHQubGFiZWwgPCBhWzJdKSB7XG4gICAgICAgICAgICB0LmxhYmVsID0gYVsyXSwgdC5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhWzJdICYmIHQub3BzLnBvcCgpLCB0LnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gbi5jYWxsKGUsIHQpO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHUgPSBbNiwgZF0sIHMgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByID0gYSA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGhlKGUpIHtcbiAgdmFyIG4gPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIHQgPSBuICYmIGVbbl0sIHIgPSAwO1xuICBpZiAodCkgcmV0dXJuIHQuY2FsbChlKTtcbiAgaWYgKGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZSAmJiByID49IGUubGVuZ3RoICYmIChlID0gdm9pZCAwKSwgeyB2YWx1ZTogZSAmJiBlW3IrK10sIGRvbmU6ICFlIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKG4gPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5mdW5jdGlvbiBWZShlLCBuKSB7XG4gIHZhciB0ID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXQpIHJldHVybiBlO1xuICB2YXIgciA9IHQuY2FsbChlKSwgcywgYSA9IFtdLCBpO1xuICB0cnkge1xuICAgIGZvciAoOyAobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEocyA9IHIubmV4dCgpKS5kb25lOyApIGEucHVzaChzLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGkgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIHMgJiYgIXMuZG9uZSAmJiAodCA9IHIucmV0dXJuKSAmJiB0LmNhbGwocik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYTtcbn1cbmZ1bmN0aW9uIEdlKGUsIG4sIHQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIHIgPSAwLCBzID0gbi5sZW5ndGgsIGE7IHIgPCBzOyByKyspXG4gICAgKGEgfHwgIShyIGluIG4pKSAmJiAoYSB8fCAoYSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4sIDAsIHIpKSwgYVtyXSA9IG5bcl0pO1xuICByZXR1cm4gZS5jb25jYXQoYSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKSk7XG59XG5mdW5jdGlvbiBfZShlKSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX2UgPyAodGhpcy52ID0gZSwgdGhpcykgOiBuZXcgX2UoZSk7XG59XG5mdW5jdGlvbiB5byhlLCBuLCB0KSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciByID0gdC5hcHBseShlLCBuIHx8IFtdKSwgcywgYSA9IFtdO1xuICByZXR1cm4gcyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIGMoXCJuZXh0XCIpLCBjKFwidGhyb3dcIiksIGMoXCJyZXR1cm5cIiwgaSksIHNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHM7XG4gIGZ1bmN0aW9uIGkobSkge1xuICAgIHJldHVybiBmdW5jdGlvbihmKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGYpLnRoZW4obSwgXyk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKG0sIGYpIHtcbiAgICByW21dICYmIChzW21dID0gZnVuY3Rpb24oaCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEUsIGIpIHtcbiAgICAgICAgYS5wdXNoKFttLCBoLCBFLCBiXSkgPiAxIHx8IGwobSwgaCk7XG4gICAgICB9KTtcbiAgICB9LCBmICYmIChzW21dID0gZihzW21dKSkpO1xuICB9XG4gIGZ1bmN0aW9uIGwobSwgZikge1xuICAgIHRyeSB7XG4gICAgICB1KHJbbV0oZikpO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIHkoYVswXVszXSwgaCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHUobSkge1xuICAgIG0udmFsdWUgaW5zdGFuY2VvZiBfZSA/IFByb21pc2UucmVzb2x2ZShtLnZhbHVlLnYpLnRoZW4oZCwgXykgOiB5KGFbMF1bMl0sIG0pO1xuICB9XG4gIGZ1bmN0aW9uIGQobSkge1xuICAgIGwoXCJuZXh0XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIF8obSkge1xuICAgIGwoXCJ0aHJvd1wiLCBtKTtcbiAgfVxuICBmdW5jdGlvbiB5KG0sIGYpIHtcbiAgICBtKGYpLCBhLnNoaWZ0KCksIGEubGVuZ3RoICYmIGwoYVswXVswXSwgYVswXVsxXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZvKGUpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgdDtcbiAgcmV0dXJuIG4gPyBuLmNhbGwoZSkgOiAoZSA9IHR5cGVvZiBoZSA9PSBcImZ1bmN0aW9uXCIgPyBoZShlKSA6IGVbU3ltYm9sLml0ZXJhdG9yXSgpLCB0ID0ge30sIHIoXCJuZXh0XCIpLCByKFwidGhyb3dcIiksIHIoXCJyZXR1cm5cIiksIHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHQpO1xuICBmdW5jdGlvbiByKGEpIHtcbiAgICB0W2FdID0gZVthXSAmJiBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYywgbCkge1xuICAgICAgICBpID0gZVthXShpKSwgcyhjLCBsLCBpLmRvbmUsIGkudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBzKGEsIGksIGMsIGwpIHtcbiAgICBQcm9taXNlLnJlc29sdmUobCkudGhlbihmdW5jdGlvbih1KSB7XG4gICAgICBhKHsgdmFsdWU6IHUsIGRvbmU6IGMgfSk7XG4gICAgfSwgaSk7XG4gIH1cbn1cbmZ1bmN0aW9uIEwoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gSGUoZSkge1xuICB2YXIgbiA9IGZ1bmN0aW9uKHIpIHtcbiAgICBFcnJvci5jYWxsKHIpLCByLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH0sIHQgPSBlKG4pO1xuICByZXR1cm4gdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksIHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gdCwgdDtcbn1cbnZhciBYZSA9IEhlKGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSB0ID8gdC5sZW5ndGggKyBgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG5gICsgdC5tYXAoZnVuY3Rpb24ociwgcykge1xuICAgICAgcmV0dXJuIHMgKyAxICsgXCIpIFwiICsgci50b1N0cmluZygpO1xuICAgIH0pLmpvaW4oYFxuICBgKSA6IFwiXCIsIHRoaXMubmFtZSA9IFwiVW5zdWJzY3JpcHRpb25FcnJvclwiLCB0aGlzLmVycm9ycyA9IHQ7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHplKGUsIG4pIHtcbiAgaWYgKGUpIHtcbiAgICB2YXIgdCA9IGUuaW5kZXhPZihuKTtcbiAgICAwIDw9IHQgJiYgZS5zcGxpY2UodCwgMSk7XG4gIH1cbn1cbnZhciBUZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKG4pIHtcbiAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IG4sIHRoaXMuY2xvc2VkID0gITEsIHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuLCB0LCByLCBzLCBhO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gITA7XG4gICAgICB2YXIgaSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgIGlmIChpKVxuICAgICAgICBpZiAodGhpcy5fcGFyZW50YWdlID0gbnVsbCwgQXJyYXkuaXNBcnJheShpKSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IGhlKGkpLCBsID0gYy5uZXh0KCk7ICFsLmRvbmU7IGwgPSBjLm5leHQoKSkge1xuICAgICAgICAgICAgICB2YXIgdSA9IGwudmFsdWU7XG4gICAgICAgICAgICAgIHUucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgIG4gPSB7IGVycm9yOiBoIH07XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGwgJiYgIWwuZG9uZSAmJiAodCA9IGMucmV0dXJuKSAmJiB0LmNhbGwoYyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBpLnJlbW92ZSh0aGlzKTtcbiAgICAgIHZhciBkID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICBpZiAoTChkKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBhID0gaCBpbnN0YW5jZW9mIFhlID8gaC5lcnJvcnMgOiBbaF07XG4gICAgICAgIH1cbiAgICAgIHZhciBfID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgIGlmIChfKSB7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIHkgPSBoZShfKSwgbSA9IHkubmV4dCgpOyAhbS5kb25lOyBtID0geS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBmID0gbS52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGd0KGYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBhID0gYSA/PyBbXSwgaCBpbnN0YW5jZW9mIFhlID8gYSA9IEdlKEdlKFtdLCBWZShhKSksIFZlKGguZXJyb3JzKSkgOiBhLnB1c2goaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgciA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbSAmJiAhbS5kb25lICYmIChzID0geS5yZXR1cm4pICYmIHMuY2FsbCh5KTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYSlcbiAgICAgICAgdGhyb3cgbmV3IFhlKGEpO1xuICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0O1xuICAgIGlmIChuICYmIG4gIT09IHRoaXMpXG4gICAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICAgIGd0KG4pO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChuIGluc3RhbmNlb2YgZSkge1xuICAgICAgICAgIGlmIChuLmNsb3NlZCB8fCBuLl9oYXNQYXJlbnQodGhpcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgbi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKHQgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogW10pLnB1c2gobik7XG4gICAgICB9XG4gIH0sIGUucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgcmV0dXJuIHQgPT09IG4gfHwgQXJyYXkuaXNBcnJheSh0KSAmJiB0LmluY2x1ZGVzKG4pO1xuICB9LCBlLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkodCkgPyAodC5wdXNoKG4pLCB0KSA6IHQgPyBbdCwgbl0gOiBuO1xuICB9LCBlLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHQgPT09IG4gPyB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsIDogQXJyYXkuaXNBcnJheSh0KSAmJiB6ZSh0LCBuKTtcbiAgfSwgZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gdGhpcy5fZmluYWxpemVycztcbiAgICB0ICYmIHplKHQsIG4pLCBuIGluc3RhbmNlb2YgZSAmJiBuLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gIH0sIGUuRU1QVFkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiA9IG5ldyBlKCk7XG4gICAgcmV0dXJuIG4uY2xvc2VkID0gITAsIG47XG4gIH0oKSwgZTtcbn0oKSwgbm4gPSBUZS5FTVBUWTtcbmZ1bmN0aW9uIHJuKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBUZSB8fCBlICYmIFwiY2xvc2VkXCIgaW4gZSAmJiBMKGUucmVtb3ZlKSAmJiBMKGUuYWRkKSAmJiBMKGUudW5zdWJzY3JpYmUpO1xufVxuZnVuY3Rpb24gZ3QoZSkge1xuICBMKGUpID8gZSgpIDogZS51bnN1YnNjcmliZSgpO1xufVxudmFyIG9uID0ge1xuICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gIFByb21pc2U6IHZvaWQgMCxcbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogITEsXG4gIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogITFcbn0sIHNuID0ge1xuICBzZXRUaW1lb3V0OiBmdW5jdGlvbihlLCBuKSB7XG4gICAgZm9yICh2YXIgdCA9IFtdLCByID0gMjsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgIHRbciAtIDJdID0gYXJndW1lbnRzW3JdO1xuICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgR2UoW2UsIG5dLCBWZSh0KSkpO1xuICB9LFxuICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gKGNsZWFyVGltZW91dCkoZSk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn07XG5mdW5jdGlvbiBhbihlKSB7XG4gIHNuLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgZTtcbiAgfSk7XG59XG5mdW5jdGlvbiB3dCgpIHtcbn1cbmZ1bmN0aW9uIGplKGUpIHtcbiAgZSgpO1xufVxudmFyIHV0ID0gZnVuY3Rpb24oZSkge1xuICBhZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0KSB7XG4gICAgdmFyIHIgPSBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gci5pc1N0b3BwZWQgPSAhMSwgdCA/IChyLmRlc3RpbmF0aW9uID0gdCwgcm4odCkgJiYgdC5hZGQocikpIDogci5kZXN0aW5hdGlvbiA9IHdvLCByO1xuICB9XG4gIHJldHVybiBuLmNyZWF0ZSA9IGZ1bmN0aW9uKHQsIHIsIHMpIHtcbiAgICByZXR1cm4gbmV3IHN0KHQsIHIsIHMpO1xuICB9LCBuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuX25leHQodCk7XG4gIH0sIG4ucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9lcnJvcih0KSk7XG4gIH0sIG4ucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2NvbXBsZXRlKCkpO1xuICB9LCBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xvc2VkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbCk7XG4gIH0sIG4ucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh0KTtcbiAgfSwgbi5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCBuLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCBuO1xufShUZSksIF9vID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBldChlLCBuKSB7XG4gIHJldHVybiBfby5jYWxsKGUsIG4pO1xufVxudmFyIGhvID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUobikge1xuICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gbjtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0Lm5leHQpXG4gICAgICB0cnkge1xuICAgICAgICB0Lm5leHQobik7XG4gICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgIE9lKHIpO1xuICAgICAgfVxuICB9LCBlLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmICh0LmVycm9yKVxuICAgICAgdHJ5IHtcbiAgICAgICAgdC5lcnJvcihuKTtcbiAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgT2Uocik7XG4gICAgICB9XG4gICAgZWxzZVxuICAgICAgT2Uobik7XG4gIH0sIGUucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4gPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAobi5jb21wbGV0ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIG4uY29tcGxldGUoKTtcbiAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgT2UodCk7XG4gICAgICB9XG4gIH0sIGU7XG59KCksIHN0ID0gZnVuY3Rpb24oZSkge1xuICBhZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByLCBzKSB7XG4gICAgdmFyIGEgPSBlLmNhbGwodGhpcykgfHwgdGhpcywgaTtcbiAgICBpZiAoTCh0KSB8fCAhdClcbiAgICAgIGkgPSB7XG4gICAgICAgIG5leHQ6IHQgPz8gdm9pZCAwLFxuICAgICAgICBlcnJvcjogciA/PyB2b2lkIDAsXG4gICAgICAgIGNvbXBsZXRlOiBzID8/IHZvaWQgMFxuICAgICAgfTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBjO1xuICAgICAgYSAmJiBvbi51c2VEZXByZWNhdGVkTmV4dENvbnRleHQgPyAoYyA9IE9iamVjdC5jcmVhdGUodCksIGMudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGEudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIGkgPSB7XG4gICAgICAgIG5leHQ6IHQubmV4dCAmJiBldCh0Lm5leHQsIGMpLFxuICAgICAgICBlcnJvcjogdC5lcnJvciAmJiBldCh0LmVycm9yLCBjKSxcbiAgICAgICAgY29tcGxldGU6IHQuY29tcGxldGUgJiYgZXQodC5jb21wbGV0ZSwgYylcbiAgICAgIH0pIDogaSA9IHQ7XG4gICAgfVxuICAgIHJldHVybiBhLmRlc3RpbmF0aW9uID0gbmV3IGhvKGkpLCBhO1xuICB9XG4gIHJldHVybiBuO1xufSh1dCk7XG5mdW5jdGlvbiBPZShlKSB7XG4gIGFuKGUpO1xufVxuZnVuY3Rpb24gZ28oZSkge1xuICB0aHJvdyBlO1xufVxudmFyIHdvID0ge1xuICBjbG9zZWQ6ICEwLFxuICBuZXh0OiB3dCxcbiAgZXJyb3I6IGdvLFxuICBjb21wbGV0ZTogd3Rcbn0sIGR0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiO1xufSgpO1xuZnVuY3Rpb24gYm8oZSkge1xuICByZXR1cm4gZTtcbn1cbmZ1bmN0aW9uIHZvKGUpIHtcbiAgcmV0dXJuIGUubGVuZ3RoID09PSAwID8gYm8gOiBlLmxlbmd0aCA9PT0gMSA/IGVbMF0gOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKHIsIHMpIHtcbiAgICAgIHJldHVybiBzKHIpO1xuICAgIH0sIHQpO1xuICB9O1xufVxudmFyIHJlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUobikge1xuICAgIG4gJiYgKHRoaXMuX3N1YnNjcmliZSA9IG4pO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24obikge1xuICAgIHZhciB0ID0gbmV3IGUoKTtcbiAgICByZXR1cm4gdC5zb3VyY2UgPSB0aGlzLCB0Lm9wZXJhdG9yID0gbiwgdDtcbiAgfSwgZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24obiwgdCwgcikge1xuICAgIHZhciBzID0gdGhpcywgYSA9IENvKG4pID8gbiA6IG5ldyBzdChuLCB0LCByKTtcbiAgICByZXR1cm4gamUoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IHMsIGMgPSBpLm9wZXJhdG9yLCBsID0gaS5zb3VyY2U7XG4gICAgICBhLmFkZChjID8gYy5jYWxsKGEsIGwpIDogbCA/IHMuX3N1YnNjcmliZShhKSA6IHMuX3RyeVN1YnNjcmliZShhKSk7XG4gICAgfSksIGE7XG4gIH0sIGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUobik7XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgbi5lcnJvcih0KTtcbiAgICB9XG4gIH0sIGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihuLCB0KSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIHJldHVybiB0ID0gYnQodCksIG5ldyB0KGZ1bmN0aW9uKHMsIGEpIHtcbiAgICAgIHZhciBpID0gbmV3IHN0KHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuKGMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgIGEobCksIGkudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBhLFxuICAgICAgICBjb21wbGV0ZTogc1xuICAgICAgfSk7XG4gICAgICByLnN1YnNjcmliZShpKTtcbiAgICB9KTtcbiAgfSwgZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdDtcbiAgICByZXR1cm4gKHQgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5zdWJzY3JpYmUobik7XG4gIH0sIGUucHJvdG90eXBlW2R0XSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCB0ID0gMDsgdCA8IGFyZ3VtZW50cy5sZW5ndGg7IHQrKylcbiAgICAgIG5bdF0gPSBhcmd1bWVudHNbdF07XG4gICAgcmV0dXJuIHZvKG4pKHRoaXMpO1xuICB9LCBlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIHQgPSB0aGlzO1xuICAgIHJldHVybiBuID0gYnQobiksIG5ldyBuKGZ1bmN0aW9uKHIsIHMpIHtcbiAgICAgIHZhciBhO1xuICAgICAgdC5zdWJzY3JpYmUoZnVuY3Rpb24oaSkge1xuICAgICAgICByZXR1cm4gYSA9IGk7XG4gICAgICB9LCBmdW5jdGlvbihpKSB7XG4gICAgICAgIHJldHVybiBzKGkpO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByKGEpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIGUuY3JlYXRlID0gZnVuY3Rpb24obikge1xuICAgIHJldHVybiBuZXcgZShuKTtcbiAgfSwgZTtcbn0oKTtcbmZ1bmN0aW9uIGJ0KGUpIHtcbiAgdmFyIG47XG4gIHJldHVybiAobiA9IGUgPz8gb24uUHJvbWlzZSkgIT09IG51bGwgJiYgbiAhPT0gdm9pZCAwID8gbiA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBFbyhlKSB7XG4gIHJldHVybiBlICYmIEwoZS5uZXh0KSAmJiBMKGUuZXJyb3IpICYmIEwoZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBDbyhlKSB7XG4gIHJldHVybiBlICYmIGUgaW5zdGFuY2VvZiB1dCB8fCBFbyhlKSAmJiBybihlKTtcbn1cbmZ1bmN0aW9uIFNvKGUpIHtcbiAgcmV0dXJuIEwoZSA9PSBudWxsID8gdm9pZCAwIDogZS5saWZ0KTtcbn1cbmZ1bmN0aW9uIFBvKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4pIHtcbiAgICBpZiAoU28obikpXG4gICAgICByZXR1cm4gbi5saWZ0KGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZSh0LCB0aGlzKTtcbiAgICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICAgIHRoaXMuZXJyb3Iocik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZVwiKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGtvKGUsIG4sIHQsIHIsIHMpIHtcbiAgcmV0dXJuIG5ldyBBbyhlLCBuLCB0LCByLCBzKTtcbn1cbnZhciBBbyA9IGZ1bmN0aW9uKGUpIHtcbiAgYWUobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCwgciwgcywgYSwgaSwgYykge1xuICAgIHZhciBsID0gZS5jYWxsKHRoaXMsIHQpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGwub25GaW5hbGl6ZSA9IGksIGwuc2hvdWxkVW5zdWJzY3JpYmUgPSBjLCBsLl9uZXh0ID0gciA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIodSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIHQuZXJyb3IoZCk7XG4gICAgICB9XG4gICAgfSA6IGUucHJvdG90eXBlLl9uZXh0LCBsLl9lcnJvciA9IGEgPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBhKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICB0LmVycm9yKGQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fZXJyb3IsIGwuX2NvbXBsZXRlID0gcyA/IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcygpO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICB0LmVycm9yKHUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fY29tcGxldGUsIGw7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQ7XG4gICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgdmFyIHIgPSB0aGlzLmNsb3NlZDtcbiAgICAgIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksICFyICYmICgodCA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwIHx8IHQuY2FsbCh0aGlzKSk7XG4gICAgfVxuICB9LCBuO1xufSh1dCksIElvID0gSGUoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBjbiA9IGZ1bmN0aW9uKGUpIHtcbiAgYWUobiwgZSk7XG4gIGZ1bmN0aW9uIG4oKSB7XG4gICAgdmFyIHQgPSBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gdC5jbG9zZWQgPSAhMSwgdC5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgdC5vYnNlcnZlcnMgPSBbXSwgdC5pc1N0b3BwZWQgPSAhMSwgdC5oYXNFcnJvciA9ICExLCB0LnRocm93bkVycm9yID0gbnVsbCwgdDtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IG5ldyB2dCh0aGlzLCB0aGlzKTtcbiAgICByZXR1cm4gci5vcGVyYXRvciA9IHQsIHI7XG4gIH0sIG4ucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgdGhyb3cgbmV3IElvKCk7XG4gIH0sIG4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzO1xuICAgIGplKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMsIGE7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5jdXJyZW50T2JzZXJ2ZXJzIHx8IChyLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKHIub2JzZXJ2ZXJzKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IGhlKHIuY3VycmVudE9ic2VydmVycyksIGMgPSBpLm5leHQoKTsgIWMuZG9uZTsgYyA9IGkubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgbCA9IGMudmFsdWU7XG4gICAgICAgICAgICBsLm5leHQodCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgcyA9IHsgZXJyb3I6IHUgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYyAmJiAhYy5kb25lICYmIChhID0gaS5yZXR1cm4pICYmIGEuY2FsbChpKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIG4ucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICBqZShmdW5jdGlvbigpIHtcbiAgICAgIGlmIChyLl90aHJvd0lmQ2xvc2VkKCksICFyLmlzU3RvcHBlZCkge1xuICAgICAgICByLmhhc0Vycm9yID0gci5pc1N0b3BwZWQgPSAhMCwgci50aHJvd25FcnJvciA9IHQ7XG4gICAgICAgIGZvciAodmFyIHMgPSByLm9ic2VydmVyczsgcy5sZW5ndGg7IClcbiAgICAgICAgICBzLnNoaWZ0KCkuZXJyb3IodCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIG4ucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQgPSB0aGlzO1xuICAgIGplKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHQuX3Rocm93SWZDbG9zZWQoKSwgIXQuaXNTdG9wcGVkKSB7XG4gICAgICAgIHQuaXNTdG9wcGVkID0gITA7XG4gICAgICAgIGZvciAodmFyIHIgPSB0Lm9ic2VydmVyczsgci5sZW5ndGg7IClcbiAgICAgICAgICByLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gITAsIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQ7XG4gICAgICByZXR1cm4gKCh0ID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQubGVuZ3RoKSA+IDA7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBuLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCB0KTtcbiAgfSwgbi5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHQpLCB0aGlzLl9pbm5lclN1YnNjcmliZSh0KTtcbiAgfSwgbi5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcywgcyA9IHRoaXMsIGEgPSBzLmhhc0Vycm9yLCBpID0gcy5pc1N0b3BwZWQsIGMgPSBzLm9ic2VydmVycztcbiAgICByZXR1cm4gYSB8fCBpID8gbm4gOiAodGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgYy5wdXNoKHQpLCBuZXcgVGUoZnVuY3Rpb24oKSB7XG4gICAgICByLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCB6ZShjLCB0KTtcbiAgICB9KSk7XG4gIH0sIG4ucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcywgcyA9IHIuaGFzRXJyb3IsIGEgPSByLnRocm93bkVycm9yLCBpID0gci5pc1N0b3BwZWQ7XG4gICAgcyA/IHQuZXJyb3IoYSkgOiBpICYmIHQuY29tcGxldGUoKTtcbiAgfSwgbi5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQgPSBuZXcgcmUoKTtcbiAgICByZXR1cm4gdC5zb3VyY2UgPSB0aGlzLCB0O1xuICB9LCBuLmNyZWF0ZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICByZXR1cm4gbmV3IHZ0KHQsIHIpO1xuICB9LCBuO1xufShyZSksIHZ0ID0gZnVuY3Rpb24oZSkge1xuICBhZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByKSB7XG4gICAgdmFyIHMgPSBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gcy5kZXN0aW5hdGlvbiA9IHQsIHMuc291cmNlID0gciwgcztcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciwgcztcbiAgICAocyA9IChyID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5uZXh0KSA9PT0gbnVsbCB8fCBzID09PSB2b2lkIDAgfHwgcy5jYWxsKHIsIHQpO1xuICB9LCBuLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciwgcztcbiAgICAocyA9IChyID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5lcnJvcikgPT09IG51bGwgfHwgcyA9PT0gdm9pZCAwIHx8IHMuY2FsbChyLCB0KTtcbiAgfSwgbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCwgcjtcbiAgICAociA9ICh0ID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5jb21wbGV0ZSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwIHx8IHIuY2FsbCh0KTtcbiAgfSwgbi5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciwgcztcbiAgICByZXR1cm4gKHMgPSAociA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnN1YnNjcmliZSh0KSkgIT09IG51bGwgJiYgcyAhPT0gdm9pZCAwID8gcyA6IG5uO1xuICB9LCBuO1xufShjbiksIFJvID0ge1xuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBGbyA9IGZ1bmN0aW9uKGUpIHtcbiAgYWUobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCwgcikge1xuICAgIHJldHVybiBlLmNhbGwodGhpcykgfHwgdGhpcztcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIG47XG59KFRlKSwgRXQgPSB7XG4gIHNldEludGVydmFsOiBmdW5jdGlvbihlLCBuKSB7XG4gICAgZm9yICh2YXIgdCA9IFtdLCByID0gMjsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgIHRbciAtIDJdID0gYXJndW1lbnRzW3JdO1xuICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIEdlKFtlLCBuXSwgVmUodCkpKTtcbiAgfSxcbiAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBjbGVhckludGVydmFsKGUpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBUbyA9IGZ1bmN0aW9uKGUpIHtcbiAgYWUobiwgZSk7XG4gIGZ1bmN0aW9uIG4odCwgcikge1xuICAgIHZhciBzID0gZS5jYWxsKHRoaXMsIHQsIHIpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHMuc2NoZWR1bGVyID0gdCwgcy53b3JrID0gciwgcy5wZW5kaW5nID0gITEsIHM7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24odCwgcikge1xuICAgIHZhciBzO1xuICAgIGlmIChyID09PSB2b2lkIDAgJiYgKHIgPSAwKSwgdGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN0YXRlID0gdDtcbiAgICB2YXIgYSA9IHRoaXMuaWQsIGkgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICByZXR1cm4gYSAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChpLCBhLCByKSksIHRoaXMucGVuZGluZyA9ICEwLCB0aGlzLmRlbGF5ID0gciwgdGhpcy5pZCA9IChzID0gdGhpcy5pZCkgIT09IG51bGwgJiYgcyAhPT0gdm9pZCAwID8gcyA6IHRoaXMucmVxdWVzdEFzeW5jSWQoaSwgdGhpcy5pZCwgciksIHRoaXM7XG4gIH0sIG4ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24odCwgciwgcykge1xuICAgIHJldHVybiBzID09PSB2b2lkIDAgJiYgKHMgPSAwKSwgRXQuc2V0SW50ZXJ2YWwodC5mbHVzaC5iaW5kKHQsIHRoaXMpLCBzKTtcbiAgfSwgbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbih0LCByLCBzKSB7XG4gICAgaWYgKHMgPT09IHZvaWQgMCAmJiAocyA9IDApLCBzICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gcyAmJiB0aGlzLnBlbmRpbmcgPT09ICExKVxuICAgICAgcmV0dXJuIHI7XG4gICAgciAhPSBudWxsICYmIEV0LmNsZWFySW50ZXJ2YWwocik7XG4gIH0sIG4ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb25cIik7XG4gICAgdGhpcy5wZW5kaW5nID0gITE7XG4gICAgdmFyIHMgPSB0aGlzLl9leGVjdXRlKHQsIHIpO1xuICAgIGlmIChzKVxuICAgICAgcmV0dXJuIHM7XG4gICAgdGhpcy5wZW5kaW5nID09PSAhMSAmJiB0aGlzLmlkICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKSk7XG4gIH0sIG4ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgIHZhciBzID0gITEsIGE7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29yayh0KTtcbiAgICB9IGNhdGNoIChpKSB7XG4gICAgICBzID0gITAsIGEgPSBpIHx8IG5ldyBFcnJvcihcIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3JcIik7XG4gICAgfVxuICAgIGlmIChzKVxuICAgICAgcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSwgYTtcbiAgfSwgbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB2YXIgdCA9IHRoaXMsIHIgPSB0LmlkLCBzID0gdC5zY2hlZHVsZXIsIGEgPSBzLmFjdGlvbnM7XG4gICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsLCB0aGlzLnBlbmRpbmcgPSAhMSwgemUoYSwgdGhpcyksIHIgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQocywgciwgbnVsbCkpLCB0aGlzLmRlbGF5ID0gbnVsbCwgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIG47XG59KEZvKSwgQ3QgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZShuLCB0KSB7XG4gICAgdCA9PT0gdm9pZCAwICYmICh0ID0gZS5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBuLCB0aGlzLm5vdyA9IHQ7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24obiwgdCwgcikge1xuICAgIHJldHVybiB0ID09PSB2b2lkIDAgJiYgKHQgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCBuKS5zY2hlZHVsZShyLCB0KTtcbiAgfSwgZS5ub3cgPSBSby5ub3csIGU7XG59KCksIE1vID0gZnVuY3Rpb24oZSkge1xuICBhZShuLCBlKTtcbiAgZnVuY3Rpb24gbih0LCByKSB7XG4gICAgciA9PT0gdm9pZCAwICYmIChyID0gQ3Qubm93KTtcbiAgICB2YXIgcyA9IGUuY2FsbCh0aGlzLCB0LCByKSB8fCB0aGlzO1xuICAgIHJldHVybiBzLmFjdGlvbnMgPSBbXSwgcy5fYWN0aXZlID0gITEsIHM7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5hY3Rpb25zO1xuICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgIHIucHVzaCh0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHM7XG4gICAgdGhpcy5fYWN0aXZlID0gITA7XG4gICAgZG9cbiAgICAgIGlmIChzID0gdC5leGVjdXRlKHQuc3RhdGUsIHQuZGVsYXkpKVxuICAgICAgICBicmVhaztcbiAgICB3aGlsZSAodCA9IHIuc2hpZnQoKSk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9ICExLCBzKSB7XG4gICAgICBmb3IgKDsgdCA9IHIuc2hpZnQoKTsgKVxuICAgICAgICB0LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aHJvdyBzO1xuICAgIH1cbiAgfSwgbjtcbn0oQ3QpLCBEbyA9IG5ldyBNbyhUbyksIE5vID0gZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgZSAhPSBcImZ1bmN0aW9uXCI7XG59O1xuZnVuY3Rpb24gTG8oZSkge1xuICByZXR1cm4gTChlID09IG51bGwgPyB2b2lkIDAgOiBlLnRoZW4pO1xufVxuZnVuY3Rpb24gT28oZSkge1xuICByZXR1cm4gTChlW2R0XSk7XG59XG5mdW5jdGlvbiBVbyhlKSB7XG4gIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBMKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cbmZ1bmN0aW9uIGpvKGUpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoZSAhPT0gbnVsbCAmJiB0eXBlb2YgZSA9PSBcIm9iamVjdFwiID8gXCJhbiBpbnZhbGlkIG9iamVjdFwiIDogXCInXCIgKyBlICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5mdW5jdGlvbiB4bygpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT0gXCJmdW5jdGlvblwiIHx8ICFTeW1ib2wuaXRlcmF0b3IgPyBcIkBAaXRlcmF0b3JcIiA6IFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciAkbyA9IHhvKCk7XG5mdW5jdGlvbiBWbyhlKSB7XG4gIHJldHVybiBMKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbJG9dKTtcbn1cbmZ1bmN0aW9uIEdvKGUpIHtcbiAgcmV0dXJuIHlvKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQsIHIsIHMsIGE7XG4gICAgcmV0dXJuIHRuKHRoaXMsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHN3aXRjaCAoaS5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgdCA9IGUuZ2V0UmVhZGVyKCksIGkubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaS50cnlzLnB1c2goWzEsICwgOSwgMTBdKSwgaS5sYWJlbCA9IDI7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gWzQsIF9lKHQucmVhZCgpKV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gciA9IGkuc2VudCgpLCBzID0gci52YWx1ZSwgYSA9IHIuZG9uZSwgYSA/IFs0LCBfZSh2b2lkIDApXSA6IFszLCA1XTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMiwgaS5zZW50KCldO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFs0LCBfZShzKV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gWzQsIGkuc2VudCgpXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBpLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gdC5yZWxlYXNlTG9jaygpLCBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiB6byhlKSB7XG4gIHJldHVybiBMKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZ2V0UmVhZGVyKTtcbn1cbmZ1bmN0aW9uIHFvKGUpIHtcbiAgaWYgKGUgaW5zdGFuY2VvZiByZSlcbiAgICByZXR1cm4gZTtcbiAgaWYgKGUgIT0gbnVsbCkge1xuICAgIGlmIChPbyhlKSlcbiAgICAgIHJldHVybiBZbyhlKTtcbiAgICBpZiAoTm8oZSkpXG4gICAgICByZXR1cm4gQm8oZSk7XG4gICAgaWYgKExvKGUpKVxuICAgICAgcmV0dXJuIEhvKGUpO1xuICAgIGlmIChVbyhlKSlcbiAgICAgIHJldHVybiBsbihlKTtcbiAgICBpZiAoVm8oZSkpXG4gICAgICByZXR1cm4gSm8oZSk7XG4gICAgaWYgKHpvKGUpKVxuICAgICAgcmV0dXJuIEtvKGUpO1xuICB9XG4gIHRocm93IGpvKGUpO1xufVxuZnVuY3Rpb24gWW8oZSkge1xuICByZXR1cm4gbmV3IHJlKGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCA9IGVbZHRdKCk7XG4gICAgaWYgKEwodC5zdWJzY3JpYmUpKVxuICAgICAgcmV0dXJuIHQuc3Vic2NyaWJlKG4pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZVwiKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBCbyhlKSB7XG4gIHJldHVybiBuZXcgcmUoZnVuY3Rpb24obikge1xuICAgIGZvciAodmFyIHQgPSAwOyB0IDwgZS5sZW5ndGggJiYgIW4uY2xvc2VkOyB0KyspXG4gICAgICBuLm5leHQoZVt0XSk7XG4gICAgbi5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEhvKGUpIHtcbiAgcmV0dXJuIG5ldyByZShmdW5jdGlvbihuKSB7XG4gICAgZS50aGVuKGZ1bmN0aW9uKHQpIHtcbiAgICAgIG4uY2xvc2VkIHx8IChuLm5leHQodCksIG4uY29tcGxldGUoKSk7XG4gICAgfSwgZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIG4uZXJyb3IodCk7XG4gICAgfSkudGhlbihudWxsLCBhbik7XG4gIH0pO1xufVxuZnVuY3Rpb24gSm8oZSkge1xuICByZXR1cm4gbmV3IHJlKGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgcyA9IGhlKGUpLCBhID0gcy5uZXh0KCk7ICFhLmRvbmU7IGEgPSBzLm5leHQoKSkge1xuICAgICAgICB2YXIgaSA9IGEudmFsdWU7XG4gICAgICAgIGlmIChuLm5leHQoaSksIG4uY2xvc2VkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICB0ID0geyBlcnJvcjogYyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBzLnJldHVybikgJiYgci5jYWxsKHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHQpIHRocm93IHQuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIG4uY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBsbihlKSB7XG4gIHJldHVybiBuZXcgcmUoZnVuY3Rpb24obikge1xuICAgIFpvKGUsIG4pLmNhdGNoKGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBuLmVycm9yKHQpO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEtvKGUpIHtcbiAgcmV0dXJuIGxuKEdvKGUpKTtcbn1cbmZ1bmN0aW9uIFpvKGUsIG4pIHtcbiAgdmFyIHQsIHIsIHMsIGE7XG4gIHJldHVybiBtbyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGksIGM7XG4gICAgcmV0dXJuIHRuKHRoaXMsIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHN3aXRjaCAobC5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgbC50cnlzLnB1c2goWzAsIDUsIDYsIDExXSksIHQgPSBmbyhlKSwgbC5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gWzQsIHQubmV4dCgpXTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmIChyID0gbC5zZW50KCksICEhci5kb25lKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgIGlmIChpID0gci52YWx1ZSwgbi5uZXh0KGkpLCBuLmNsb3NlZClcbiAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgbC5sYWJlbCA9IDM7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gWzMsIDFdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gYyA9IGwuc2VudCgpLCBzID0geyBlcnJvcjogYyB9LCBbMywgMTFdO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIGwudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSksIHIgJiYgIXIuZG9uZSAmJiAoYSA9IHQucmV0dXJuKSA/IFs0LCBhLmNhbGwodCldIDogWzMsIDhdO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbC5zZW50KCksIGwubGFiZWwgPSA4O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIG4uY29tcGxldGUoKSwgWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFdvKGUsIG4sIHQsIHIsIHMpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gMCksIHMgPT09IHZvaWQgMCAmJiAocyA9ICExKTtcbiAgdmFyIGEgPSBuLnNjaGVkdWxlKGZ1bmN0aW9uKCkge1xuICAgIHQoKSwgcyA/IGUuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgcikpIDogdGhpcy51bnN1YnNjcmliZSgpO1xuICB9LCByKTtcbiAgaWYgKGUuYWRkKGEpLCAhcylcbiAgICByZXR1cm4gYTtcbn1cbmZ1bmN0aW9uIFFvKGUsIG4pIHtcbiAgdmFyIHQgPSBMKGUpID8gZSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBlO1xuICB9LCByID0gZnVuY3Rpb24ocykge1xuICAgIHJldHVybiBzLmVycm9yKHQoKSk7XG4gIH07XG4gIHJldHVybiBuZXcgcmUocik7XG59XG52YXIgWG8gPSBIZShmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBlKHRoaXMpLCB0aGlzLm5hbWUgPSBcIkVtcHR5RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZVwiO1xuICB9O1xufSk7XG5mdW5jdGlvbiBlcyhlLCBuKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LCByKSB7XG4gICAgdmFyIHMgPSAhMSwgYTtcbiAgICBlLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBmdW5jdGlvbihpKSB7XG4gICAgICAgIGEgPSBpLCBzID0gITA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IHIsXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHMgPyB0KGEpIDogcihuZXcgWG8oKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gdHMoZSkge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGUpO1xufVxudmFyIG5zID0gSGUoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IG51bGwpLCBlKHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IHQ7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHJzKGUsIG4pIHtcbiAgdmFyIHQgPSB0cyhlKSA/IHsgZmlyc3Q6IGUgfSA6IHR5cGVvZiBlID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IGUgfSA6IGUsIHIgPSB0LmZpcnN0LCBzID0gdC5lYWNoLCBhID0gdC53aXRoLCBpID0gYSA9PT0gdm9pZCAwID8gb3MgOiBhLCBjID0gdC5zY2hlZHVsZXIsIGwgPSBjID09PSB2b2lkIDAgPyBEbyA6IGMsIHUgPSB0Lm1ldGEsIGQgPSB1ID09PSB2b2lkIDAgPyBudWxsIDogdTtcbiAgaWYgKHIgPT0gbnVsbCAmJiBzID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4gUG8oZnVuY3Rpb24oXywgeSkge1xuICAgIHZhciBtLCBmLCBoID0gbnVsbCwgRSA9IDAsIGIgPSBmdW5jdGlvbih2KSB7XG4gICAgICBmID0gV28oeSwgbCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbS51bnN1YnNjcmliZSgpLCBxbyhpKHtcbiAgICAgICAgICAgIG1ldGE6IGQsXG4gICAgICAgICAgICBsYXN0VmFsdWU6IGgsXG4gICAgICAgICAgICBzZWVuOiBFXG4gICAgICAgICAgfSkpLnN1YnNjcmliZSh5KTtcbiAgICAgICAgfSBjYXRjaCAoUykge1xuICAgICAgICAgIHkuZXJyb3IoUyk7XG4gICAgICAgIH1cbiAgICAgIH0sIHYpO1xuICAgIH07XG4gICAgbSA9IF8uc3Vic2NyaWJlKGtvKHksIGZ1bmN0aW9uKHYpIHtcbiAgICAgIGYgPT0gbnVsbCB8fCBmLnVuc3Vic2NyaWJlKCksIEUrKywgeS5uZXh0KGggPSB2KSwgcyA+IDAgJiYgYihzKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICBmICE9IG51bGwgJiYgZi5jbG9zZWQgfHwgZiA9PSBudWxsIHx8IGYudW5zdWJzY3JpYmUoKSwgaCA9IG51bGw7XG4gICAgfSkpLCAhRSAmJiBiKHIgIT0gbnVsbCA/IHR5cGVvZiByID09IFwibnVtYmVyXCIgPyByIDogK3IgLSBsLm5vdygpIDogcyk7XG4gIH0pO1xufVxuZnVuY3Rpb24gb3MoZSkge1xuICB0aHJvdyBuZXcgbnMoZSk7XG59XG5jbGFzcyBBZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKG4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IG4gfSwgdGhpcy5fc3ViamVjdC5uZXh0KG4pLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9IChuLCB0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogbiwgZXJyTXNnOiB0IH0sIHRoaXMuX3N1YmplY3QuZXJyb3Iobik7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9IChuKSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogbiwgdGhpcy5zdWJzY3JpYmUgPSAobikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIG4odGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCB0ID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgbih0aGlzLl9jdXJyZW50KSwgdC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9IChuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiBKZSh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHQgPSB7XG4gICAgICAgIGZpcnN0OiBuLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IFFvKCgpID0+IG5ldyBFcnJvcihuLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBlcyh0aGlzLl9zdWJqZWN0LnBpcGUocnModCkpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgY24oKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgU3QgPSB6JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKSwgc3MgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn0sIGFzID0gKGUpID0+IHNzW2VdLCB0dCA9IHt9LCB1biA9IGFzeW5jIChlKSA9PiB7XG4gIGlmICh0dFtlXSlcbiAgICByZXR1cm4gdHRbZV07XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IGF3YWl0IGZldGNoKG5ldyBVUkwoXCIvaGVhbHRoL2Vudmlyb25tZW50XCIsIGUpKS50aGVuKChyKSA9PiByLmpzb24oKSksIHQgPSBTdC5wYXJzZShuLmVudmlyb25tZW50KTtcbiAgICByZXR1cm4gdHRbZV0gPSB0LCB0O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gU3QuVmFsdWVzLnByb2Q7XG4gIH1cbn07XG5mdW5jdGlvbiBKZShlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7ZX1gKTtcbn1cbmNvbnN0IGRuID0gKGUsIG4pID0+IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKFt0XSkgPT4gIW4uaW5jbHVkZXModCkpKSwgUiA9ICgpID0+IHtcbiAgaWYgKCEodHlwZW9mIHdpbmRvdyA+IFwidVwiKSlcbiAgICByZXR1cm4gd2luZG93O1xufSwgYXQgPSBuZXcgQWUoKSwgUHQgPSBcIm9wX21ldHJpY3NfcXVldWVcIiwgaXMgPSAzLCBjcyA9IDMsIGxzID0gMWUzLCB7IGxvZ19fOiBVZSB9ID0gayhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyB1cyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHZhciBuLCB0O1xuICAgIHRoaXMucXVldWUgPSBbXSwgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMSwgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsLCB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IDAsIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgVWUoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIiksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSwgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIFVlKFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKSwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCksIChuID0gUigpKSA9PSBudWxsIHx8IG4uYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAodCA9IFIoKSkgPT0gbnVsbCB8fCB0LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQobiwgdCwgcikge1xuICAgIGNvbnN0IHMgPSB7XG4gICAgICBldmVudE5hbWU6IG4sXG4gICAgICBwcm9wZXJ0aWVzOiB0IHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IHIgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogcGVyZm9ybWFuY2Uubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBwZXJmb3JtYW5jZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBzLnRpbWVzdGFtcCwgdGhpcy5xdWV1ZS5wdXNoKHMpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpLCB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdmFyIG4sIHQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSAodCA9IChuID0gUigpKSA9PSBudWxsID8gdm9pZCAwIDogbi5sb2NhbFN0b3JhZ2UpID09IG51bGwgPyB2b2lkIDAgOiB0LmdldEl0ZW0oUHQpO1xuICAgICAgciAmJiAodGhpcy5xdWV1ZSA9IEpTT04ucGFyc2UocikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgdmFyIG47XG4gICAgKG4gPSBSKCkpID09IG51bGwgfHwgbi5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShQdCwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IG4gPSBSKCk7XG4gICAgbiAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0ICYmICh0aGlzLmJhdGNoVGltZW91dCA9IG4uc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwsIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgbHMpKTtcbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgdmFyIG47XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgJiYgKChuID0gUigpKSA9PSBudWxsIHx8IG4uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KSwgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsKSwgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDAgfHwgKHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITAsIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExLCB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0pKTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgbiA9IGF0LmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCFuKSB7XG4gICAgICBVZShcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0ID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBjcyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSB7XG4gICAgICAgIGV2ZW50czogdC5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgZXZlbnRfbmFtZTogYy5ldmVudE5hbWUsXG4gICAgICAgICAgZGV2aWNlX3Rva2VuOiBuLmRldmljZVRva2VuLFxuICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgLi4ubixcbiAgICAgICAgICAgIC4uLmMuY29udGV4dFByb3BlcnRpZXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG5vbmNlOiBjLm5vbmNlLFxuICAgICAgICAgICAgZGF0ZXRpbWU6IGMuZGF0ZXRpbWUsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGMudGltZXN0YW1wLFxuICAgICAgICAgICAgdGltZV9kaWZmX2Zyb21fcHJldmlvdXNfZXZlbnQ6IGMudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgIGNoZWNrb3V0X3NlY3VyZV90b2tlbjogbi5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgLi4uYy5wcm9wZXJ0aWVzXG4gICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICAgIH0sIHMgPSBhcyhuLmVudmlyb25tZW50KSwgYSA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBzKTtcbiAgICAgIChhd2FpdCBmZXRjaChhLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHIpXG4gICAgICB9KSkub2sgPyAodGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UodC5sZW5ndGgpLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpKSA6IHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2godCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgVWUoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIHIpLCB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHQpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChuKSB7XG4gICAgbi5mb3JFYWNoKChyKSA9PiB7XG4gICAgICByLmF0dGVtcHRDb3VudCsrO1xuICAgIH0pO1xuICAgIGNvbnN0IHQgPSBuLmZpbHRlcigocikgPT4gci5hdHRlbXB0Q291bnQgPCBpcyk7XG4gICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2Uobi5sZW5ndGgpLCB0aGlzLnF1ZXVlID0gWy4uLnQsIC4uLnRoaXMucXVldWVdLCB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgdmFyIG4sIHQ7XG4gICAgKG4gPSBSKCkpID09IG51bGwgfHwgbi5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciksICh0ID0gUigpKSA9PSBudWxsIHx8IHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKSwgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgcG4gPSBuZXcgdXMoKSwgZyA9IChlLCBuLCB0KSA9PiB7XG4gIHBuLmFkZEV2ZW50KGUsIG4sIHQpO1xufSwgbW4gPSAoZSkgPT4ge1xuICBjb25zdCBuID0gRyhlLnJlYXNvbik7XG4gIGcoXCJ1bmhhbmRsZWRfcmVqZWN0aW9uX2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiBuLFxuICAgIGVycm9yX25hbWU6IGUucmVhc29uXG4gIH0pO1xufSwgeW4gPSAoZSkgPT4ge1xuICB2YXIgdCwgcjtcbiAgY29uc3QgbiA9IEcoZS5lcnJvcik7XG4gIGcoXCJ1bmNhdWdodF9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogbixcbiAgICBlcnJvcl9uYW1lOiAodCA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiB0Lm5hbWUsXG4gICAgZXJyb3Jfc3RhY2s6IChyID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHIuc3RhY2ssXG4gICAgZmlsZV9uYW1lOiBlLmZpbGVuYW1lLFxuICAgIGxpbmVfbnVtYmVyOiBlLmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBlLmNvbG5vXG4gIH0pO1xufSwgZHMgPSAoKSA9PiB7XG4gIHZhciBlLCBuO1xuICAoZSA9IFIoKSkgPT0gbnVsbCB8fCBlLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCB5biksIChuID0gUigpKSA9PSBudWxsIHx8IG4uYWRkRXZlbnRMaXN0ZW5lcihcInVuaGFuZGxlZHJlamVjdGlvblwiLCBtbik7XG59LCBwcyA9ICgpID0+IHtcbiAgdmFyIGUsIG47XG4gIChlID0gUigpKSA9PSBudWxsIHx8IGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIHluKSwgKG4gPSBSKCkpID09IG51bGwgfHwgbi5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIG1uKTtcbn07XG52YXIgeHQ7XG4oeHQgPSBSKCkpID09IG51bGwgfHwgeHQuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCAoKSA9PiB7XG4gIHBuLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5jbGFzcyBmbiBleHRlbmRzIFlyIHtcbiAgY29uc3RydWN0b3Iobikge1xuICAgIGNvbnN0IHQgPSBgJHtuLm1lc3NhZ2V9YDtcbiAgICBzdXBlcih0KSwgdGhpcy5yZXNwb25zZSA9IG47XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IFUgPSBhc3luYyAoZSwgbiwgdCwgcikgPT4ge1xuICByICYmIGcociwge1xuICAgIC4uLm5cbiAgfSk7XG4gIGNvbnN0IHMgPSBhd2FpdCBlLnNlbmQobik7XG4gIGlmICh5cyhzKSlcbiAgICB0aHJvdyBnKFwiY2RlX3Jlc3BvbnNlX2Vycm9yXCIsIHtcbiAgICAgIC4uLnNcbiAgICB9KSwgbmV3IGZuKHMpO1xuICBpZiAoIW1zKHMsIHQpKSB7XG4gICAgY29uc3QgYSA9IHQuc2FmZVBhcnNlKHMpO1xuICAgIHRocm93IGEuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgdCwgXCJBY3R1YWw6XCIsIHMpLCBhLmVycm9yKTtcbiAgfVxuICByZXR1cm4gciAmJiBnKHIsIHtcbiAgICAuLi5zXG4gIH0pLCBzO1xufSwgbXMgPSAoZSwgbikgPT4gbi5zYWZlUGFyc2UoZSkuc3VjY2VzcywgeXMgPSAoZSkgPT4gQnIuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIGZzID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IG4gfSwgV3QpLCBUID0gYXN5bmMgKGUpID0+IGF3YWl0IFUoZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIFF0KSwgdmUgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgVShcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiBuIH0sXG4gIGVuLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCBfcyA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBVKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiBuIH0sXG4gIGlvLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgaHMgPSBhc3luYyAoZSwgbikgPT4ge1xuICBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4ublxuICB9KTtcbiAgY29uc3QgdCA9IGF3YWl0IFUoZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogbiB9LCBlbik7XG4gIHJldHVybiBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnRcbiAgfSksIHQ7XG59LCB6ID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiBuIH0sXG4gIFJyLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIGdzID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sXG4gIFh0LFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIHdzID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogbiB9LFxuICBJcixcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgYnMgPSBhc3luYyAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgZnMoZSwge1xuICAgIHNlY3VyZV90b2tlbjogbixcbiAgICBwcm9tb3Rpb25fY29kZTogdFxuICB9KSwgcyA9IG5ldyBTZXQoci5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAocy5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke3Muc2l6ZX1gKTtcbiAgY29uc3QgYSA9IHMudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIGkgPSBwbyhyLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBhLFxuICAgIGFtb3VudEF0b206IGlcbiAgfTtcbn0sIEVlID0gYXN5bmMgKGUsIG4sIHQsIHIpID0+IHtcbiAgaWYgKHQpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIHIgPSByIHx8IHZvaWQgMDtcbiAgICBjb25zdCBzID0gYXdhaXQgYnMoZSwgbiwgcik7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogcy5hbW91bnRBdG9tLCBjdXJyZW5jeTogcy5jdXJyZW5jeSB9O1xuICB9XG59LCB2cyA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGlmIChlLnNpemUgPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShlLnZhbHVlcygpKS5tYXAoXG4gICAgICAocikgPT4gVShyLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkOiBuIH0sIFByKVxuICAgIClcbiAgKTtcbn0sIGt0ID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IG4gfSxcbiAgbHQsXG4gIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4pLCBFcyA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBVKGUsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sIFh0LCBcInNldHVwX2NoZWNrb3V0XCIpLCBwdCA9IGFzeW5jIChlLCBuKSA9PiBhd2FpdCBVKGUsIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkOiBuIH0sIGx0LCBcInBlcmZvcm1fY2hlY2tvdXRcIiksIF9uID0gMWUzLCBDcyA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnNvbGUubG9nKG4pO1xuICBjb25zdCByID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogX24sXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIHMgPSBhd2FpdCBVKHIsIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBrcik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIHMpLCBzO1xufSwgbXQgPSBhc3luYyAoZSwgbikgPT4gYXdhaXQgVShcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSxcbiAgbG8sXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgaG4gPSBhc3luYyAoZSwgbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgVShcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogbiB9IH0sXG4gICAgICBjb1xuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBHKHQpKSwgXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn0sIFNzID0gYXN5bmMgKGUsIG4pID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJzZXRfdXNlcl9kZXZpY2VfdG9rZW5cIiwgcGF5bG9hZDogeyBkZXZpY2VfdG9rZW46IG4gfSB9LFxuICB1b1xuKSwgSyA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuSy5FbnVtLnN0cmlwZTtcbmNvbnN0IGduID0gKHtcbiAgc2NyaXB0SWQ6IGUsXG4gIHNyYzogbixcbiAgY2hlY2tMb2FkZWRGbjogdFxufSkgPT4ge1xuICBjb25zdCByID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGEpID0+IHtcbiAgICBsZXQgaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgaS5zcmMgPSBuLCBpLmlkID0gZSwgaS5hc3luYyA9ICEwO1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICB0KCkgPyBzKCkgOiBjID8gaSA9IGMgOiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLCBpLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImxvYWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgci5hYm9ydCgpLCBzKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IHIuc2lnbmFsIH1cbiAgICApLCBpLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImVycm9yXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHIuYWJvcnQoKSwgYShcIkZhaWxlZCB0byBsb2FkIHRoZSBzY3JpcHRcIik7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IHIuc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn0sIHduID0gKCkgPT4gZ24oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhIXdpbmRvdy5BcHBsZVBheVNES1xufSksIGJuID0gKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IG4udG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgciA9IG4uYmlsbGluZ0NvbnRhY3QsIHMgPSBuLnNoaXBwaW5nQ29udGFjdCwgYSA9IHsgLi4uZSB9O1xuICBpZiAodCB8fCByIHx8IHMpIHtcbiAgICBhW3AuRU1BSUxdID0gYVtwLkVNQUlMXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5lbWFpbEFkZHJlc3MpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmVtYWlsQWRkcmVzcykgfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBhW3AuQ09VTlRSWV0gPSBhW3AuQ09VTlRSWV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuY291bnRyeUNvZGUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmNvdW50cnlDb2RlKSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBhW3AuWklQX0NPREVdID0gYVtwLlpJUF9DT0RFXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5wb3N0YWxDb2RlKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5wb3N0YWxDb2RlKSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgaSA9IGFbcC5GSVJTVF9OQU1FXSB8fCAodCA9PSBudWxsID8gdm9pZCAwIDogdC5naXZlbk5hbWUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLmdpdmVuTmFtZSkgfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZ2l2ZW5OYW1lKSB8fCBcIlwiLCBjID0gYVtwLkxBU1RfTkFNRV0gfHwgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZmFtaWx5TmFtZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZmFtaWx5TmFtZSkgfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZmFtaWx5TmFtZSkgfHwgXCJcIjtcbiAgICBpIHx8IGMgPyAoYVtwLkZJUlNUX05BTUVdID0gaSwgYVtwLkxBU1RfTkFNRV0gPSBjKSA6IChhW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIGFbcC5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIGE7XG59O1xueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IFBzID0gKHtcbiAgdG90YWw6IGUsXG4gIHByZWZpbGw6IG5cbn0pID0+IHtcbiAgdmFyIHI7XG4gIGlmIChuLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7bi50b2tlbn1gLCBWdCkudG9TdHJpbmcoKVxuICAgIH07XG4gIGNvbnN0IHQgPSAociA9IG4ubGluZV9pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF07XG4gIGlmICh0KVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5iaWxsaW5nX2ludGVydmFsX2NvdW50KSA/PyB2b2lkIDAsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHtuLnRva2VufWBcbiAgICB9O1xufSwga3MgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogbixcbiAgcHJlZmlsbDogdCxcbiAgZGVmYXVsdExhYmVsOiByID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIHZhciBjLCBsO1xuICBjb25zdCBzID0gKCgoYyA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogYy5jdXJyZW5jeSkgPz8gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuY3VycmVuY3kpID8/IG4uY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGkgPSAoKCgobCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnRBdG9tKSA/PyAobiA9PSBudWxsID8gdm9pZCAwIDogbi5hbW91bnRBdG9tKSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGU6IHMsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5sYWJlbCkgPz8gciA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlICE9IG51bGwgJiYgZS5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IGlcbiAgICB9XG4gIH07XG59LCB2biA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiBuLFxuICBwcmVmaWxsOiB0LFxuICBkZWZhdWx0TGFiZWw6IHJcbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGU6IHMsIHRvdGFsOiBhIH0gPSBrcyh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgICBpbml0aWFsUHJldmlldzogbixcbiAgICBwcmVmaWxsOiB0LFxuICAgIGRlZmF1bHRMYWJlbDogclxuICB9KTtcbiAgbGV0IGkgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGU6IHMsXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgIF0sXG4gICAgdG90YWw6IGEsXG4gICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IFBzKHtcbiAgICAgIHRvdGFsOiBhLFxuICAgICAgcHJlZmlsbDogdFxuICAgIH0pXG4gIH07XG4gIHJldHVybiBlICE9IG51bGwgJiYgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ICYmICh0eXBlb2YgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IGkgPSB7XG4gICAgLi4uaSxcbiAgICAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QoaSlcbiAgfSA6IGkgPSB7IC4uLmksIC4uLmUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9KSwgaTtcbn0sIHsgbG9nX186IGdpLCBlcnJfXzogRW4gfSA9IGsoXCJjb21tb25cIiksIE1lID0gKGUpID0+IHtcbiAgaWYgKGUucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiBlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgcSA9IChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBlLmZpbmQoKHIpID0+IG4uc2FmZVBhcnNlKHIpLnN1Y2Nlc3MpO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgRW4oXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgZSksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gbi5wYXJzZSh0KTtcbn0sIENuID0gKGUpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogZS5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogZS56aXBDb2RlLFxuICAgIGNvdW50cnk6IGUuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGUubGFzdE5hbWVcbn0pLCBEZSA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IG4gfSA9IGsoZS5sb2dQcmVmaXgpLCB0ID0gYXdhaXQgVChlLmFueUNkZUNvbm5lY3Rpb24pLCByID0gTWUoZS5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHQubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiBuKFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgZ3MoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQudG9rZW4sXG4gICAgICBwbV9pZDogci5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICBpZiAoZS51c2VQYXlGaXJzdEZsb3cpIHtcbiAgICAgIGlmIChuKFwiVXNpbmcgcGF5LWZpcnN0IGZsb3cuLi5cIiksICFlLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IEVuKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZS5jb25maXJtUmVzdWx0KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgICBuKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgcyA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiBlLnJlcXVpcmVkRm9ybUZpZWxkc1twLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogdC5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHQuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IHIucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBwdChlLmFueUNkZUNvbm5lY3Rpb24sIHMpIH07XG4gIH1cbn0sIEFzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgU24gPSAoZSkgPT4ge1xuICBjb25zdCBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICBuLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke0FzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHIgPSB0LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICByLmFwcGVuZENoaWxkKG4uY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgcyA9IHIucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGEgPSByLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksIHsgaG9zdDogdCwgaWZyYW1lOiBzLCBjYW5jZWxCdXR0b246IGEgfTtcbn07XG5mdW5jdGlvbiBJcyhlLCBuLCB0KSB7XG4gIGNvbnN0IHIgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGEgPSBhd2FpdCBDcyhlLCB0KTtcbiAgICAgIGEgJiYgKGNsZWFySW50ZXJ2YWwocyksIG4oYSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgcigpO1xuICBjb25zdCBzID0gc2V0SW50ZXJ2YWwociwgX24pO1xuICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIFJzKHtcbiAgZWxlbWVudHM6IGUsXG4gIHBvbGxpbmdJbnRlcnZhbDogbixcbiAgcmVzb2x2ZTogdFxufSkge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwobiksIGUuaG9zdC5yZW1vdmUoKSwgdCh7IHN0YXR1czogRi5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiBlLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgciksICgpID0+IHtcbiAgICBlLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBLZShlKSB7XG4gIGNvbnN0IHsgdXJsOiBuLCBiYXNlVXJsOiB0IH0gPSBlLCByID0gU24obik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocykgPT4ge1xuICAgIGNvbnN0IGEgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHIuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIHMobCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgaSA9IElzKHIuaWZyYW1lLCBhLCBuZXcgVVJMKHQpLm9yaWdpbiksIGMgPSBScyh7XG4gICAgICBlbGVtZW50czogcixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogaSxcbiAgICAgIHJlc29sdmU6IHNcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBQbiA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBLZShlKTtcbiAgaWYgKG4uc3RhdHVzID09PSBGLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4uc3RhdHVzID09PSBGLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiBuLnN0YXR1cyAhPT0gRi5TVUNDRVNTICYmIEplKG4uc3RhdHVzKSwge1xuICAgIGhyZWY6IG4uaHJlZlxuICB9O1xufSwgRnMgPSAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gd2luZG93Lm9wZW4obiwgXCJfYmxhbmtcIik7XG4gIGlmICghdClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHQ7XG59LCBrbiA9IGFzeW5jIChlLCBuLCB0LCByKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IHMgfSA9IGsoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSwgaSkgPT4ge1xuICAgIGNvbnN0IGMgPSBGcyhlLCByKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCB3cyhuLCB0KTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGEoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBzKEcodSkpLCBjbGVhckludGVydmFsKGwpLCBpKEcodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogVHMsIGVycl9fOiB5dCB9ID0gayhcImFpcndhbGxleC1jY1wiKSwgTXMgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBEcyA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBNcy5zYWZlUGFyc2UoZSk7XG4gIGlmICghbi5zdWNjZXNzKSB7XG4gICAgY29uc3QgdCA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgciA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IHl0KHIpLCBuZXcgRXJyb3IodCk7XG4gIH1cbiAgcmV0dXJuIG4uZGF0YTtcbn0sIE5zID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIExzID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBUcyhgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtufV1gKSwgbjtcbiAgfSBjYXRjaCAobikge1xuICAgIGNvbnN0IHQgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgeXQodCwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtHKG4pfWApLCBuZXcgRXJyb3IodCk7XG4gIH1cbn0sIE9zID0gYXN5bmMgKGUsIG4pID0+IHtcbiAgY29uc3QgdCA9IERzKG4pLCByID0gYXdhaXQgUG4oeyB1cmw6IHRbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogZSB9KSwgcyA9IExzKHIuaHJlZiA/PyBcIlwiKSwgYSA9IHRbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChhICE9PSBzKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbCA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtzfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke2F9KS5gO1xuICAgIHRocm93IHl0KGwpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IHMsXG4gICAgICBjb25zZW50X2lkOiB0W1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCBBbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgSW4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IFJuLCBlcnJfXzogRm4gfSA9IGsoXCJjb21tb24tY2NcIiksIG9lID0gKGUsIG4sIHQpID0+IHtcbiAgaWYgKHQpIHtcbiAgICBSbihgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gICAgZm9yIChjb25zdCBbcywgYV0gb2YgT2JqZWN0LmVudHJpZXModCkpXG4gICAgICBlW3NdIHx8IChlW3NdID0gYSk7XG4gIH1cbiAgY29uc3QgciA9IEZlLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBzID0gci5lcnJvci5mb3JtYXQoKSwgYSA9IEh0KHMpO1xuICAgIGZvciAoY29uc3QgW2ksIGNdIG9mIE9iamVjdC5lbnRyaWVzKGEpKVxuICAgICAgbihpLCBjLCBpKTtcbiAgICB0aHJvdyBGbihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGEpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgVXMgPSAoZSwgbikgPT4ge1xuICBmb3IgKGNvbnN0IHQgb2YgZSlcbiAgICBpZiAodC5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IHQuZXJyb3JzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgY29uc3QgcyA9IFl0LnNhZmVQYXJzZShyLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFzLnN1Y2Nlc3MpXG4gICAgICAgICAgRm4oYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtyLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIHIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBhID0gcy5kYXRhO1xuICAgICAgICAgIG4oYSwgci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgUm4oYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHQuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIHsgbG9nX186IHhlIH0gPSBrKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGpzKGUsIG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gKGF3YWl0IG10KG4uY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IG4ucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBzID0gciA9PSBudWxsID8gdm9pZCAwIDogci5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIXMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbi5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKHMpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uc1xuICAgIH0pO1xuICB9IGNhdGNoICh0KSB7XG4gICAgdGhyb3cgbi5zZXNzaW9uLmFib3J0KCksIHQ7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHhzKGUsIG4pIHtcbiAgaWYgKCFlLnJlZGlyZWN0X3VybClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmRcIik7XG4gIHhlKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgZSk7XG4gIGNvbnN0IHsgc3RhdHVzOiB0IH0gPSBhd2FpdCBLZSh7XG4gICAgdXJsOiBlLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiBuLmJhc2VVcmxcbiAgfSk7XG4gIGlmICh4ZShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7dH1dYCksIHQgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAodCA9PT0gRi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBjb25zdCByID0gYXdhaXQgeihuLmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IG4ucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBlLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGUuY29uc2VudF9pZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHhlKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgciksIHI7XG59XG5hc3luYyBmdW5jdGlvbiAkcyhlLCBuKSB7XG4gIHZhciB0LCByLCBzLCBhLCBpO1xuICB0cnkge1xuICAgIGNvbnN0IGMgPSBlLnBheW1lbnQsIGwgPSBibihuLm5vbkNkZUZvcm1JbnB1dHMsIGMpLCB1ID0gb2UoXG4gICAgICBsLFxuICAgICAgbi5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCB5ID0gKGF3YWl0IHZlKG4uY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogdVtwLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogdVtwLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXS5jb25zZW50X2lkO1xuICAgIGlmICgheSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbGV0IG0gPSBhd2FpdCB6KG4uY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB5LFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShjLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHhlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbSk7XG4gICAgbGV0IGYgPSAociA9ICh0ID0gbS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB0WzBdKSA9PSBudWxsID8gdm9pZCAwIDogci5pZDtcbiAgICBjb25zdCBoID0gKHMgPSBtLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZmluZChcbiAgICAgIChiKSA9PiBiLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAoaCAhPSBudWxsICYmIGgucmVkaXJlY3RfdXJsICYmIGguY29uc2VudF9pZCAmJiBoLnRoZWlyX3BtX2lkICYmIChtID0gYXdhaXQgeHMoaCwgbiksIGYgPSAoaSA9IChhID0gbS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBhWzBdKSA9PSBudWxsID8gdm9pZCAwIDogaS5pZCksICFmKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgRSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChFKSwgRGUoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogbi5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IG0sXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobCksIGM7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IFNlLCBlcnJfXzogVG4gfSA9IGsoXCJhd3gtYXBwbGUtcGF5XCIpLCBWcyA9IHBlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCB0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBxKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQW4pO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiB0O1xuICAgIGlmIChTZShcIkxvYWRpbmcgQXBwbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgd24oKSwgIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBTZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHQ7XG4gICAgaWYgKFNlKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBTZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgdDtcbiAgICBpZiAoIXIubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKGkpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBFZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKF8pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEEuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBUbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIHkpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogSy5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBHcyA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgY3VzdG9tUGFyYW1zOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IHNcbiAgfSkgPT4ge1xuICAgIHZhciBmO1xuICAgIGNvbnN0IGEgPSBxKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQW4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGksIGluaXRpYWxQcmV2aWV3OiBjIH0gPSByLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgVChsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBfID0gdm4oe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoZiA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgeSA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgXyksIG0gPSB7XG4gICAgICBzZXNzaW9uOiB5LFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGEubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBzLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiByID09IG51bGwgPyB2b2lkIDAgOiByLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBuLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogZG4odSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaVxuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgRSkgPT4ge1xuICAgICAgY29uc3QgYiA9ICgpID0+IHtcbiAgICAgICAgU2UoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBFKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHkub25jYW5jZWwgPSBiLCB5Lm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh2KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQganModiwgbSk7XG4gICAgICAgIH0gY2F0Y2ggKFMpIHtcbiAgICAgICAgICBFKFMpO1xuICAgICAgICB9XG4gICAgICB9LCB5Lm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB2ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLl8udG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICB5LmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih2KTtcbiAgICAgIH0sIHkub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh2KSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IFMgPSBhd2FpdCAkcyh2LCBtKTtcbiAgICAgICAgICBoKFMpO1xuICAgICAgICB9IGNhdGNoIChTKSB7XG4gICAgICAgICAgRShTKTtcbiAgICAgICAgfVxuICAgICAgfSwgeS5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBUbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIFplID0gKHtcbiAgZ2F0ZXdheTogZSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQ6IG4sXG4gIG1lcmNoYW50TmFtZTogdCxcbiAgbWVyY2hhbnRJZDogcixcbiAgaW5pdGlhbFByZXZpZXc6IHMsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGEsXG4gIHByZWZpbGw6IGlcbn0pID0+IHtcbiAgdmFyIF8sIHk7XG4gIGNvbnN0IGMgPSAoKF8gPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF8uYW1vdW50QXRvbSkgPz8gKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50QXRvbSkgPz8gMCwgbCA9IE1hdGgubWF4KGMgLyAxMDAsIDApLCB1ID0gKCgoeSA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogeS5jdXJyZW5jeSkgPz8gKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuY3VycmVuY3kpID8/IHMuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGQgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6ICEwLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5OiBlLFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6ICEwLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gUFJPRCBlbnYgd2lsbCBuZWVkIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiByID8/IFwiXCIsXG4gICAgICBtZXJjaGFudE5hbWU6IHRcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IGEgIT0gbnVsbCAmJiBhLnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogbC50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gYSAhPSBudWxsICYmIGEuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB0eXBlb2YgYS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB7IC4uLmQsIC4uLmEuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QoZCkgfSA6IHsgLi4uZCwgLi4uYS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIE1uID0gKCkgPT4gZ24oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+IHtcbiAgICB2YXIgZSwgbjtcbiAgICByZXR1cm4gISEoKG4gPSAoZSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBlLnBheW1lbnRzKSAhPSBudWxsICYmIG4uYXBpKTtcbiAgfVxufSk7XG5sZXQgbnQgPSBudWxsO1xuY29uc3QgRG4gPSBhc3luYyAoZSkgPT4gYXdhaXQgdW4oZSkgPT09IFwicHJvZFwiID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgV2UgPSBhc3luYyAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gYXdhaXQgRG4oZSk7XG4gIHJldHVybiBudCA9PT0gbnVsbCAmJiAobnQgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiB0LFxuICAgIG1lcmNoYW50SW5mbzogbi5tZXJjaGFudEluZm9cbiAgfSkpLCBudDtcbn0sIHpzID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHQpID0+IHQudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gbiA/IEJ0LnBhcnNlKG4pIDogbnVsbDtcbn0sIE5uID0gKGUsIG4pID0+IHtcbiAgdmFyIHMsIGEsIGksIGM7XG4gIGNvbnN0IHQgPSB7IC4uLmUgfSwgciA9IChhID0gKHMgPSBuLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogcy5pbmZvKSA9PSBudWxsID8gdm9pZCAwIDogYS5iaWxsaW5nQWRkcmVzcztcbiAgaWYgKHIpIHtcbiAgICBjb25zdCBbbCwgLi4udV0gPSAoKGMgPSAoaSA9IHIubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgZCA9IHUuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICAgIHRbcC5FTUFJTF0gPSB0W3AuRU1BSUxdIHx8IG4uZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCB0W3AuQ09VTlRSWV0gPSB0W3AuQ09VTlRSWV0gfHwgci5jb3VudHJ5Q29kZSB8fCBcIlVTXCIsIHRbcC5BRERSRVNTXSA9IHRbcC5BRERSRVNTXSB8fCByLmFkZHJlc3MxIHx8IFwiXCIsIHRbcC5DSVRZXSA9IHRbcC5DSVRZXSB8fCByLmxvY2FsaXR5IHx8IFwiXCIsIHRbcC5aSVBfQ09ERV0gPSB0W3AuWklQX0NPREVdIHx8IHIucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCIsIHRbcC5TVEFURV0gPSB0W3AuU1RBVEVdIHx8IHIuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgY29uc3QgXyA9IHRbcC5GSVJTVF9OQU1FXSB8fCBsIHx8IFwiXCIsIHkgPSB0W3AuTEFTVF9OQU1FXSB8fCBkIHx8IFwiXCI7XG4gICAgXyB8fCB5ID8gKHRbcC5GSVJTVF9OQU1FXSA9IF8sIHRbcC5MQVNUX05BTUVdID0geSkgOiAodFtwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCB0W3AuTEFTVF9OQU1FXSA9IFwiXCIpO1xuICB9XG4gIHJldHVybiB0O1xufSwgeyBsb2dfXzogSiwgZXJyX186IHllIH0gPSBrKFwiYXd4LWdvb2dsZS1wYXlcIiksIHFzID0gcGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIHZhciBfLCB5O1xuICAgIGNvbnN0IHQgPSB7XG4gICAgICBwcm9jZXNzb3I6IEsuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgciA9IHEoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBJbik7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIHQ7XG4gICAgSihcIkdvb2dsZSBQYXkgQ1BNXCIsIHIpO1xuICAgIGNvbnN0IHMgPSByLm1ldGFkYXRhO1xuICAgIGlmICghcy5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiB5ZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHQ7XG4gICAgaWYgKEooXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBNbigpLCAhKCh5ID0gKF8gPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogXy5wYXltZW50cykgIT0gbnVsbCAmJiB5LmFwaSkpXG4gICAgICByZXR1cm4geWUoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCB0O1xuICAgIGlmIChhd2FpdCBEbihlLmJhc2VVcmwpID09PSBcIlBST0RVQ1RJT05cIiAmJiAhcy5nb29nbGVfcGF5X21lcmNoYW50X2lkKVxuICAgICAgcmV0dXJuIHllKFwiR29vZ2xlIFBheSBtZXJjaGFudCBJRCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFwiKSwgdDtcbiAgICBKKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gWmUoe1xuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcy5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBzLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IHMuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIGYgPSBhd2FpdCBXZShlLmJhc2VVcmwsIG0pLCB7IHJlc3VsdDogaCB9ID0gYXdhaXQgZi5pc1JlYWR5VG9QYXkobSk7XG4gICAgICBpZiAoIWgpXG4gICAgICAgIHJldHVybiBKKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHQ7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIHllKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIHQ7XG4gICAgfVxuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKGkpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBFZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIEEuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogVihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgeWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgZiksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoZiA9PSBudWxsID8gdm9pZCAwIDogZi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIFlzID0gbmUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogc1xuICB9KSA9PiB7XG4gICAgdmFyIG0sIGYsIGgsIEUsIGIsIHYsIFM7XG4gICAgSihcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBhID0gcShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEluKSwgeyBpbml0aWFsUHJldmlldzogaSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYyB9ID0gcywgbCA9IGEubWV0YWRhdGE7XG4gICAgaWYgKCFsLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCB1ID0gWmUoe1xuICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBpLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY1xuICAgIH0pLCBkID0gZS5hbnlDZGVDb25uZWN0aW9uLCBfID0gYXdhaXQgVChkKTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IGEucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBkbihfLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSk7XG4gICAgY29uc3QgeSA9IGF3YWl0IFdlKGUuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IE0gPSBhd2FpdCB5LmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIEooXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBNKTtcbiAgICAgIGNvbnN0IFkgPSBObih0LCBNKSwgTyA9IG9lKFxuICAgICAgICBZLFxuICAgICAgICByLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgcyA9PSBudWxsID8gdm9pZCAwIDogcy5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uT1xuICAgICAgfSk7XG4gICAgICBjb25zdCBtZSA9IChmID0gKG0gPSBNLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbjtcbiAgICAgIGlmICghbWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgQm4gPSBhd2FpdCB2ZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IE9bcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBPW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IE9bcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBPW3AuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IE9bcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwgTmUgPSB6cyhCbik7XG4gICAgICBKKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgTmUpO1xuICAgICAgbGV0IGllID0gYXdhaXQgeihkLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogTmUgPT0gbnVsbCA/IHZvaWQgMCA6IE5lLmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IG1lXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIEooXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBpZSk7XG4gICAgICBsZXQgUWUgPSAoRSA9IChoID0gaWUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQ7XG4gICAgICBjb25zdCBjZSA9IChiID0gaWUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogYi5maW5kKFxuICAgICAgICAoQ2UpID0+IENlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKGNlICYmIGNlLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBKKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgY2UpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogQ2UgfSA9IGF3YWl0IEtlKHtcbiAgICAgICAgICB1cmw6IGNlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChKKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtDZX1dYCksIENlID09PSBGLkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKENlID09PSBGLkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoY2UgJiYgIVFlICYmIChpZSA9IGF3YWl0IHooZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IF8udG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBjZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogY2UuY29uc2VudF9pZFxuICAgICAgICB9XG4gICAgICB9KSwgSihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGllKSwgUWUgPSAoUyA9ICh2ID0gaWUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdlswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IFMuaWQpLCAhUWUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIERlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IE8sXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IGllLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChNKSB7XG4gICAgICB0aHJvdyB5ZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBNKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBNXG4gICAgICB9KSwgbmV3IEVycm9yKChNID09IG51bGwgPyB2b2lkIDAgOiBNLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIExuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgT24gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuYXN5bmMgZnVuY3Rpb24gQnMoZSwgbikge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSAoYXdhaXQgbXQobi5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBuLnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgcyA9IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIG4uc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihzKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLnNcbiAgICB9KTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IG4uc2Vzc2lvbi5hYm9ydCgpLCB0O1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBIcyhlLCBuKSB7XG4gIHZhciB0LCByO1xuICB0cnkge1xuICAgIGNvbnN0IHMgPSBlLnBheW1lbnQsIGEgPSBibihuLm5vbkNkZUZvcm1JbnB1dHMsIHMpLCBpID0gb2UoYSwgbi5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5pXG4gICAgfSksIGF3YWl0IHZlKG4uY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGlbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogaVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogaVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogaVtwLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogaVtwLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5BUFBMRS5JTkFQUC5QQVlNRU5UXCIsXG4gICAgICBkYXRhVmFsdWU6IHdpbmRvdy5idG9hKEpTT04uc3RyaW5naWZ5KHMudG9rZW4ucGF5bWVudERhdGEpKVxuICAgIH0sIGwgPSBhd2FpdCB6KG4uY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiBjXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCEoKHIgPSAodCA9IGwucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuaWQpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgZCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChkKSwgRGUoe1xuICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IG4uY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGksXG4gICAgICBjb25maXJtUmVzdWx0OiBsLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChzKSB7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyBuLnNlc3Npb24uY29tcGxldGVQYXltZW50KGEpLCBzO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiAkZSwgZXJyX186IFVuIH0gPSBrKFwiYXV0aG5ldC1hcHBsZXBheVwiKSwgSnMgPSBwZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgY29uc3QgdCA9IHtcbiAgICAgIHByb2Nlc3NvcjogSy5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgciA9IHEoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBMbik7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIHQ7XG4gICAgaWYgKCRlKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCB3bigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuICRlKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgdDtcbiAgICBpZiAoIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiAkZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgdDtcbiAgICBpZiAoIXIubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKGkpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBFZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKF8pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEEuYXV0aG9yaXplTmV0QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBVbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIHkpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiB5XG4gICAgICAgIH0pLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogSy5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgS3MgPSBuZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGN1c3RvbVBhcmFtczogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBzXG4gIH0pID0+IHtcbiAgICB2YXIgZjtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3OiBhLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpIH0gPSByLCBjID0gcShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIExuKSwgbCA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgdSA9IGF3YWl0IFQobCksIGQgPSB1Lm1vZGUgPT09IFwic2V0dXBcIiwgXyA9IHZuKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGksXG4gICAgICBpbml0aWFsUHJldmlldzogYSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBkZWZhdWx0TGFiZWw6IChmID0gYyA9PSBudWxsID8gdm9pZCAwIDogYy5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pO1xuICAgIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiBuLnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGlcbiAgICB9KTtcbiAgICBjb25zdCB5ID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBfKSwgbSA9IHtcbiAgICAgIHNlc3Npb246IHksXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogbi5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogZCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IHNcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoaCwgRSkgPT4ge1xuICAgICAgeS5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgJGUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBFKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfSwgeS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoYikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IEJzKGIsIG0pO1xuICAgICAgICB9IGNhdGNoICh2KSB7XG4gICAgICAgICAgRSh2KTtcbiAgICAgICAgfVxuICAgICAgfSwgeS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgYiA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogXy50b3RhbFxuICAgICAgICB9O1xuICAgICAgICB5LmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihiKTtcbiAgICAgIH0sIHkub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChiKSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHYgPSBhd2FpdCBIcyhiLCBtKTtcbiAgICAgICAgICBoKHYpO1xuICAgICAgICB9IGNhdGNoICh2KSB7XG4gICAgICAgICAgRSh2KTtcbiAgICAgICAgfVxuICAgICAgfSwgeS5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyBVbihcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IHVlLCBlcnJfXzogUGUgfSA9IGsoXCJhdXRobmV0LWdvb2dsZXBheVwiKSwgWnMgPSBwZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgdmFyIGQsIF87XG4gICAgdWUoXCJJbml0aWFsaXppbmcgQXV0aG5ldCBHb29nbGVQYXkgZmxvd1wiKTtcbiAgICBjb25zdCB0ID0ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gcShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIE9uKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gdDtcbiAgICB1ZShcIkdvb2dsZSBQYXkgQ1BNXCIsIHIpO1xuICAgIGNvbnN0IHMgPSByLm1ldGFkYXRhO1xuICAgIGlmICghcy5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBQZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHQ7XG4gICAgaWYgKHVlKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgTW4oKSwgISgoXyA9IChkID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIFBlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgdDtcbiAgICB1ZShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeSA9IFplKHtcbiAgICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHMucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogcy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBzLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCBtID0gYXdhaXQgV2UoZS5iYXNlVXJsLCB5KSwgeyByZXN1bHQ6IGYgfSA9IGF3YWl0IG0uaXNSZWFkeVRvUGF5KHkpO1xuICAgICAgaWYgKCFmKVxuICAgICAgICByZXR1cm4gdWUoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgdDtcbiAgICB9IGNhdGNoICh5KSB7XG4gICAgICByZXR1cm4gUGUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCB5KSwgdDtcbiAgICB9XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IFQoYSksIGMgPSBpLm1vZGUgPT09IFwic2V0dXBcIiwgbCA9IGF3YWl0IEVlKGEsIGkudG9rZW4sIGMsIHZvaWQgMCksIHUgPSBhc3luYyAoeSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgQS5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi55LFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBQZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IG1cbiAgICAgICAgfSksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobSA9PSBudWxsID8gdm9pZCAwIDogbS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBXcyA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogbixcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IHNcbiAgfSkgPT4ge1xuICAgIHZhciBtLCBmLCBoLCBFO1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGEsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGkgfSA9IHMsIGwgPSBxKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgT24pLm1ldGFkYXRhLCB1ID0gWmUoe1xuICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBsLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiBsLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiBsLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBhLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaVxuICAgIH0pLCBkID0gZS5hbnlDZGVDb25uZWN0aW9uLCBfID0gYXdhaXQgVChkKTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBfLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaVxuICAgIH0pO1xuICAgIGNvbnN0IHkgPSBhd2FpdCBXZShlLmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiID0gYXdhaXQgeS5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICB1ZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIGIpO1xuICAgICAgY29uc3QgdiA9IE5uKG4sIGIpLCBTID0gb2Uodiwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLlNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgTSA9IChmID0gKG0gPSBiLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogbS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbjtcbiAgICAgIGlmICghTSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBZID0gYXdhaXQgdmUoZCwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBTW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogU1twLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBTW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICB6aXBfY29kZTogU1twLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiBTW3AuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB1ZShcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBZKTtcbiAgICAgIGNvbnN0IE8gPSBhd2FpdCB6KGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBfLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoTSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCEoKEUgPSAoaCA9IE8ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBEZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogUyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogTyxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYikge1xuICAgICAgdGhyb3cgUGUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgYiksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogYlxuICAgICAgfSksIG5ldyBFcnJvcigoYiA9PSBudWxsID8gdm9pZCAwIDogYi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBRcywgZXJyX186IGpuIH0gPSBrKFwicG9ja3l0LWNjXCIpLCBYcyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSksIGVhID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IFhzLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFuLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCB0ID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCByID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWA7XG4gICAgdGhyb3cgam4ociksIG5ldyBFcnJvcih0KTtcbiAgfVxuICByZXR1cm4gbi5kYXRhO1xufSwgeG4gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSBuZXcgVVJMKGUgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIFFzKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHtufV1gKSwgbjtcbiAgfSBjYXRjaCAobikge1xuICAgIGNvbnN0IHQgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBqbih0LCBgUmVzdWx0aW5nIFVSTDogJHtlfS5cbkVycm9yOiAke0cobil9YCksIG5ldyBFcnJvcih0KTtcbiAgfVxufSwgaXQgPSAoZSwgbikgPT4gbmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KG4pLCB0YSA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBuYSA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBlYShuKSwgciA9IGF3YWl0IFBuKHsgdXJsOiB0W1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiB4bihyLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogdFtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IHRbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgcmEgPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSksIG9hID0geiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSksIHsgbG9nX186IGdlLCBlcnJfXzogUmUgfSA9IGsoXCJhZHllbi1jY1wiKSwgc2EgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiByYSxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogeiQxLnN0cmluZygpXG59KSwgJG4gPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGFhID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IHNhLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFuLnN1Y2Nlc3MpXG4gICAgdGhyb3cgUmUoYEFkeWVuIDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCksIG5ldyBFcnJvcigkbik7XG4gIHJldHVybiBuLmRhdGE7XG59LCBpYSA9IChlKSA9PiBKU09OLnBhcnNlKGUpLCBBdCA9ICgpID0+IFwiQWR5ZW5XZWJcIiBpbiB3aW5kb3cgJiYgXCJBZHllbkNoZWNrb3V0XCIgaW4gd2luZG93LkFkeWVuV2ViLCBjYSA9IGFzeW5jICgpID0+IHtcbiAgZ2UoXCJXYWl0aW5nIGZvciBBZHllbiBTREsgdG8gbG9hZC4uLlwiKTtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIEF0KCkgfHwgYXdhaXQgQmUoNTAwKTtcbiAgaWYgKCFBdCgpKVxuICAgIHRocm93IFJlKFwiQWR5ZW4gU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIG5ldyBFcnJvcigkbik7XG4gIHJldHVybiBnZShcIkFkeWVuIFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpLCB3aW5kb3cuQWR5ZW5XZWIuQWR5ZW5DaGVja291dDtcbn0sIGxhID0gKGUpID0+IHtcbiAgY29uc3QgeyBoZWFkZXJzOiBuLCBsb2NhbGU6IHQsIGNvdW50cnlDb2RlOiByLCBjb21wb25lbnQ6IHMsIGhvc3Q6IGEsIGNhbmNlbEJ1dHRvbjogaSB9ID0gZSwgYyA9IGlhKG5bXCJvcC1hZHllbi1hY3Rpb25cIl0pO1xuICByZXR1cm4gZ2UoYFJ1bm5pbmcgQWR5ZW4gM0RTIGZsb3cgZm9yIGFjdGlvbiB0eXBlOiAke2MudHlwZX1gKSwgbmV3IFByb21pc2UoKGwpID0+IHtcbiAgICBjb25zdCB1ID0gKCkgPT4ge1xuICAgICAgZ2UoXCJDbGVhbmluZyB1cCBBZHllbiAzRFMgZmxvd1wiKSwgaS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgeSksIGEucmVtb3ZlKCk7XG4gICAgfSwgZCA9IChmKSA9PiB7XG4gICAgICBSZShcIkF1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUmVzdWx0OlwiLCBmKSwgbCh7IHN0YXR1czogRi5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIF8gPSAoZikgPT4ge1xuICAgICAgUmUoXCJBZHllbiBlcnJvcjpcIiwgZiksIGwoeyBzdGF0dXM6IEYuRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCB5ID0gKCkgPT4ge1xuICAgICAgbCh7IHN0YXR1czogRi5DQU5DRUxMRUQsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB5KTtcbiAgICBjb25zdCBtID0gKGYsIGgsIEUpID0+IHtcbiAgICAgIGEucmVtb3ZlKCksIGwoeyBzdGF0dXM6IEYuU1VDQ0VTUywgYWRkaXRpb25hbERldGFpbHM6IGYsIGNsZWFudXA6IHUgfSk7XG4gICAgfTtcbiAgICBjYSgpLnRoZW4oXG4gICAgICAoZikgPT4gZih7XG4gICAgICAgIGNsaWVudEtleTogbltcIm9wLWFkeWVuLWNsaWVudC1rZXlcIl0sXG4gICAgICAgIGVudmlyb25tZW50OiBuW1wib3AtYWR5ZW4tZW52aXJvbm1lbnRcIl0sXG4gICAgICAgIGxvY2FsZTogdCxcbiAgICAgICAgY291bnRyeUNvZGU6IHIsXG4gICAgICAgIG9uQWRkaXRpb25hbERldGFpbHM6IG0sXG4gICAgICAgIG9uUGF5bWVudEZhaWxlZDogZCxcbiAgICAgICAgb25FcnJvcjogX1xuICAgICAgfSlcbiAgICApLnRoZW4oKGYpID0+IHtcbiAgICAgIGYuY3JlYXRlRnJvbUFjdGlvbihjLCB7IGNoYWxsZW5nZVdpbmRvd1NpemU6IFwiMDNcIiB9KS5tb3VudChzKTtcbiAgICB9KTtcbiAgfSk7XG59LCB1YSA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBuYXZpZ2F0b3IubGFuZ3VhZ2VzICYmIG5hdmlnYXRvci5sYW5ndWFnZXMubGVuZ3RoID8gbmF2aWdhdG9yLmxhbmd1YWdlc1swXSA6IG5hdmlnYXRvci5sYW5ndWFnZSwgdCA9IGUgPz8gbiwgciA9IG9hLnNhZmVQYXJzZSh0KTtcbiAgcmV0dXJuIHIuc3VjY2VzcyA/IChnZShgUmVzb2x2ZWQgbG9jYWxlOiAke3IuZGF0YX1gKSwgci5kYXRhKSA6IChSZShgUmVzb2x2ZWQgaW52YWxpZCBsb2NhbGU6ICR7dH0uIERlZmF1bHRpbmcgdG8gZW4tVVMuYCksIFwiZW4tVVNcIik7XG59LCBkYSA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLWFkeWVuLWFjdGlvblwiXSkgIT09IHZvaWQgMCwgcGEgPSBhc3luYyAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gYWEobiksIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBzLmlkID0gXCJhZHllbi1jb250YWluZXJcIjtcbiAgY29uc3QgeyBob3N0OiBhLCBpZnJhbWU6IGksIGNhbmNlbEJ1dHRvbjogYyB9ID0gU24oXCJodHRwOi8vZXhhbXBsZS5jb21cIik7XG4gIGkucmVwbGFjZVdpdGgocyk7XG4gIGNvbnN0IGwgPSBhd2FpdCBsYSh7XG4gICAgaGVhZGVyczogcixcbiAgICBsb2NhbGU6IHVhKHQpLFxuICAgIGNvdW50cnlDb2RlOiBlLFxuICAgIGNvbXBvbmVudDogcyxcbiAgICBob3N0OiBhLFxuICAgIGNhbmNlbEJ1dHRvbjogY1xuICB9KTtcbiAgaWYgKGwuY2xlYW51cCgpLCBsLnN0YXR1cyA9PT0gRi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobC5zdGF0dXMgPT09IEYuU1VDQ0VTUykge1xuICAgIGlmICghbC5hZGRpdGlvbmFsRGV0YWlscylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkIGJ1dCBubyBhZGRpdGlvbmFsIGRldGFpbHMgd2VyZSByZXR1cm5lZFwiKTtcbiAgICByZXR1cm4gZ2UoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFwiKSwge1xuICAgICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgICAgYWRkaXRpb25hbF9kZXRhaWxzOiBsLmFkZGl0aW9uYWxEZXRhaWxzLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2VcbiAgICBKZShsLnN0YXR1cyk7XG59LCB7IGxvZ19fOiBQLCBlcnJfXzogSXQgfSA9IGsoXCJjb21tb24tY2NcIiksIHsgbG9nX186IFJ0IH0gPSBrKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBtYSA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IHNcbiAgfSkgPT4ge1xuICAgIHZhciB1O1xuICAgIFAoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbiB9KTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBpID0gYXdhaXQgVChhKTtcbiAgICBnKFwiY29tbW9uX2NjX2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICAuLi5uLFxuICAgICAgcHJlZmlsbDogaVxuICAgIH0pLCBQKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2kubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IG9lKHQsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmNcbiAgICB9KTtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfSxcbiAgICAgIHBheW1lbnRfcm91dGVfaWQ6IHMucGF5bWVudFJvdXRlSWRcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBQKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgZCA9IGF3YWl0IHZzKHMuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKFVzKGQsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgaS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgUChg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtpLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgXyA9IGF3YWl0IEVzKGEsIGwpO1xuICAgICAgICByZXR1cm4gUChg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke18ucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBfIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBQKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgXyA9IGF3YWl0IGt0KGEsIGwpO1xuICAgICAgICByZXR1cm4gUChcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogXyB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIGlmIChkIGluc3RhbmNlb2YgZm4gJiYgZC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBQKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgUChcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBkLnJlc3BvbnNlLmhlYWRlcnMpLCBnKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAuLi5uLFxuICAgICAgICAgIC4uLmQucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgXyA9IHRhKGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmIChfKSB7XG4gICAgICAgICAgUChcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgbmEoZS5iYXNlVXJsLCBkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoTnMoZC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIFAoXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgYiA9IGF3YWl0IE9zKGUuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhKGQucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBQKFwi4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgcGEoXG4gICAgICAgICAgICB0W3AuQ09VTlRSWV0sXG4gICAgICAgICAgICBkLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBpLmxvY2FsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgbC5leHRyYV9tZXRhZGF0YS5hZHllbiA9IGI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IF9zKGEsIGwpO1xuICAgICAgICBQKFwi4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIGYpO1xuICAgICAgICBjb25zdCBoID0gKCh1ID0gZC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogdVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgXyA/IFAoXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IGggPyAoUChcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IGdhKGYpKSA6IChQKFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgaGEoZiwgZS5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IEUgPSBmLmNjX3BtX2lkO1xuICAgICAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBQKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke0V9XWApO1xuICAgICAgICAgIGNvbnN0IGIgPSBhd2FpdCB6KGEsIHtcbiAgICAgICAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBFXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgUChcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBiKTtcbiAgICAgICAgICBjb25zdCB2ID0gTWUoYik7XG4gICAgICAgICAgcmV0dXJuIFAoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHt2LnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogdiB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFAoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7aCA/IFwibGVnYWN5XCIgOiBcIm5ld1wifV1gKTtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQga3QoYSwge1xuICAgICAgICAgICAgLi4ubCxcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBFLFxuICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogaFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBQKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBiIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IEl0KFwi4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFXCIpLCBJdChkKSwgZDtcbiAgICB9XG4gIH1cbiksIHlhID0gKGUpID0+IHtcbiAgY29uc3QgbiA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHQpID0+IHQudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIW4pXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBGci5wYXJzZShuKTtcbn0sIGZhID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdLCBfYSA9IChlKSA9PiB7XG4gIGNvbnN0IG4gPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKCh0KSA9PiBmYS5pbmNsdWRlcyh0LnR5cGUpKTtcbiAgaWYgKCFuKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gQXIucGFyc2Uobik7XG59LCBoYSA9IGFzeW5jIChlLCBuKSA9PiB7XG4gIGNvbnN0IHQgPSBfYShlKTtcbiAgaWYgKHQucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgUChcIuKUnCAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpLCBnKFwiM2RzX2NvbXBsZXRlXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBQKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7dC5yZWRpcmVjdF91cmx9XWApLCBnKFwiM2RzX3JlZGlyZWN0XCIsIHtcbiAgICAuLi50XG4gIH0pO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgS2UoeyB1cmw6IHQucmVkaXJlY3RfdXJsLCBiYXNlVXJsOiBuIH0pO1xuICBpZiAoUChg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7cn1dYCksIHIgPT09IEYuQ0FOQ0VMTEVEKVxuICAgIHRocm93IGcoXCIzZHNfY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IEYuRkFJTFVSRSlcbiAgICB0aHJvdyBnKFwiM2RzX2ZhaWx1cmVcIiksIG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xufSwgZ2EgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCBuID0geWEoZSk7XG4gIGcoXCIzZHNfc3RyaXBlX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5uXG4gIH0pLCBSdChg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgVXIobiksIGcoXCIzZHNfc3RyaXBlX2NvbXBsZXRlXCIpLCBSdChcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIHdhID0gMSwgYmEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186ICQsIGVycl9fOiBWbiB9ID0gayhcImxvb3AtY3J5cHRvXCIpLCB2YSA9IHokMS5vYmplY3Qoe1xuICBsb29wRmlyc3ROYW1lOiBJLFxuICBsb29wTGFzdE5hbWU6IEksXG4gIGxvb3BFbWFpbDogSSxcbiAgW3AuUFJPTU9USU9OX0NPREVdOiBDXG59KSwgRWEgPSB6JDEub2JqZWN0KHtcbiAgbG9vcEZpcnN0TmFtZTogQyxcbiAgbG9vcExhc3ROYW1lOiBDLFxuICBsb29wRW1haWw6IEMsXG4gIFtwLlBST01PVElPTl9DT0RFXTogQ1xufSksIEZ0ID0gKGUsIG4sIHQsIHIpID0+IHtcbiAgY29uc3QgcyA9IHQuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXMuc3VjY2Vzcykge1xuICAgIGNvbnN0IGEgPSBzLmVycm9yLmZvcm1hdCgpLCBpID0gSHQoYSk7XG4gICAgZm9yIChjb25zdCBbYywgbF0gb2YgT2JqZWN0LmVudHJpZXMoaSkpXG4gICAgICBuKGMsIGwsIGMpO1xuICAgIHRocm93IFZuKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaSksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBzLmRhdGE7XG59LCBDYSA9IHBlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICAkKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCBuID0gcShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGJhKTtcbiAgICAkKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkobil9YCksICQoXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHQgPSBhd2FpdCBUKGUuYW55Q2RlQ29ubmVjdGlvbiksIHIgPSBhd2FpdCBtdChlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuXG4gICAgfSk7XG4gICAgaWYgKHQubW9kZSAhPT0gXCJzZXR1cFwiICYmICFuLm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKHQuY3VycmVuY3kpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3QuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7bi5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIGlmICghciB8fCAhci5uZXh0X2FjdGlvbl9tZXRhZGF0YSlcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIGNvbnN0IHMgPSByLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBhO1xuICAgIHQubW9kZSA9PT0gXCJzZXR1cFwiID8gYSA9IHdhIDogYSA9IHQuYW1vdW50X3RvdGFsX2F0b20gKiBzLnRva2VuX3ByaWNlO1xuICAgIGNvbnN0IGkgPSBhLCBjID0gcy5hdXRob3JpemF0aW9uX2Ftb3VudCwgbCA9IHY0KCksIHUgPSB7XG4gICAgICBwYXltZW50VXNkQW1vdW50OiBpLFxuICAgICAgc3VnZ2VzdGVkQXV0aG9yaXphdGlvblVzZEFtb3VudDogYyxcbiAgICAgIGN1c3RvbWVyUmVmSWQ6IGxcbiAgICB9LCBkID0ge1xuICAgICAgYXBpS2V5OiBuLm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiBuLm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IG4ubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogbi5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiB1LFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IGRcbiAgICB9O1xuICB9XG4pLCBTYSA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IHNcbiAgfSkgPT4ge1xuICAgICQoXCJSdW5uaW5nIExvb3AgZmxvdy4uLlwiKSwgJChcImNvbnRleHRcIiwgZSksICQoXCJjaGVja291dFBheW1lbnRNZXRob2RcIiwgbiksICQoXCJub25DZGVGb3JtSW5wdXRzXCIsIHQpLCAkKFwiZmxvd0NhbGxiYWNrc1wiLCByKSwgJChcImN1c3RvbVBhcmFtc1wiLCBzKTtcbiAgICBsZXQgYTtcbiAgICBzICE9IG51bGwgJiYgcy5zdWNjZXNzID8gYSA9IEZ0KFxuICAgICAgdCxcbiAgICAgIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdmFcbiAgICApIDogYSA9IEZ0KFxuICAgICAgdCxcbiAgICAgIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgRWFcbiAgICApO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBUKGUuYW55Q2RlQ29ubmVjdGlvbiksIGwgPSBjLm1vZGUgIT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IHZlKGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4sXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBhLmxvb3BFbWFpbCxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBhLmxvb3BGaXJzdE5hbWUsXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBhLmxvb3BMYXN0TmFtZSxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbCxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbCA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYy5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGMuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoIXMpXG4gICAgICB0aHJvdyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGNvbnN0IGQgPSBhd2FpdCB6KGksIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBzLnN1Y2Nlc3MgPyBzLnBheWluLnBheW1lbnRNZXRob2QucGF5bWVudE1ldGhvZElkIDogdm9pZCAwLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYy5tb2RlICE9PSBcInNldHVwXCIgPyB1LmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgbG9vcF9jdXN0b21lcjogcy5zdWNjZXNzID8gcy5jdXN0b21lciA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9wYXlpbjogcy5zdWNjZXNzID8gcy5wYXlpbiA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9mYWlsdXJlX2RldGFpbHM6IHMuc3VjY2VzcyA/IHZvaWQgMCA6IHMuZmFpbHVyZURldGFpbHMsXG4gICAgICAgIGxvb3BfZGVidWdfaW5mbzogcy5zdWNjZXNzID8gdm9pZCAwIDogcy5kZWJ1Z0luZm8sXG4gICAgICAgIGxvb3Bfc3VjY2Vzczogcy5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCQoYENvbmZpcm0gcmVzdWx0OiAke2R9YCksIGMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAkKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgJChcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBkKTtcbiAgICAgIGNvbnN0IF8gPSBNZShkKTtcbiAgICAgIHJldHVybiAkKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCQoXCJEb2luZyBjaGVja291dC4uLlwiKSwgIWQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IFZuKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZCksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IGQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBXLCBlcnJfXzogVHQgfSA9IGsoXCJwb2NreXQtcGF5cGFsXCIpLCBQYSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3Qga2EgPSBuZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBzXG4gIH0pID0+IHtcbiAgICB2YXIgTywgbWU7XG4gICAgVyhcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGEgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBUKGEpO1xuICAgIFcoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBQYS5wYXJzZShuKTtcbiAgICBXKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCBsID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5zZXR0aW5ncywgdSA9IG9lKFxuICAgICAgdCxcbiAgICAgIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBkID0gQ24odSk7XG4gICAgVyhgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7aS5tb2RlfWApO1xuICAgIGNvbnN0IF8gPSB2NCgpLCB5ID0gaS5tb2RlICE9PSBcInNldHVwXCIsIG0gPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGMsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHksXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHkgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGkubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISEoKE8gPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLnNldHRpbmdzKSAhPSBudWxsICYmIE8udXNlUmVkaXJlY3RGbG93KSxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IF9cbiAgICAgIH0sXG4gICAgICAuLi5kXG4gICAgfSwgZiA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgaCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkobSkpLCBFID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogaS50b2tlbixcbiAgICAgIHI6IGhcbiAgICB9KSwgYiA9IGAke2Z9PyR7RS50b1N0cmluZygpfWA7XG4gICAgaWYgKChtZSA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuc2V0dGluZ3MpICE9IG51bGwgJiYgbWUudXNlUmVkaXJlY3RGbG93KVxuICAgICAgdGhyb3cgVyhcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBiLCBhd2FpdCBCZSgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIFcoXCJTdGFydGluZyBwb3B1cCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIFcoXCJPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5cIik7XG4gICAgY29uc3QgdiA9IGF3YWl0IGtuKFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGEsXG4gICAgICBfLFxuICAgICAgYlxuICAgICk7XG4gICAgVyhcIlBheXBhbCBmbG93IHJlc3VsdFwiLCB2KTtcbiAgICBjb25zdCBTID0geG4odi5ocmVmKSwgTSA9IGl0KHYuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghTSlcbiAgICAgIHRocm93IFR0KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCB2LmhyZWYpLCBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgVyhgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHtTfWApO1xuICAgIGNvbnN0IFkgPSBhd2FpdCB6KGEsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBTLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogeSA/IE0gOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoVyhcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBZKSwgaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBZLnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmICghWS5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IFR0KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgWSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IFkucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG4pLCBNdCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiLCB7IGxvZ19fOiBELCBlcnJfXzogQWEgfSA9IGsoXCJzdHJpcGUtbGlua1wiKSwgSWEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgUmEgPSB6JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgRmEgPSBwZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgY29uc3QgdCA9IGUuY3VzdG9tSW5pdFBhcmFtcy5zdHJpcGVMaW5rO1xuICAgIEQoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBMaW5rLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBxKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSWEpO1xuICAgIEQoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBUKHMpLCBpID0gYS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgRChcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgRWUocywgYS50b2tlbiwgaSwgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBEcihyLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIEQoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGQgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBfID0gKCkgPT4ge1xuICAgICAgZC5tb3VudChgIyR7TXR9YCk7XG4gICAgfSwgeSA9ICgpID0+IHtcbiAgICAgIGQudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIHQgIT0gbnVsbCAmJiB0LmRvTm90TW91bnRPbkluaXQgPyBEKFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6IChEKFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBfKCkpLCBkLm9uKFwiY2xpY2tcIiwgYXN5bmMgKG0pID0+IHtcbiAgICAgIGlmIChEKFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIHQgIT0gbnVsbCAmJiB0Lm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgdC5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICBEKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtLnJlc29sdmUoKTtcbiAgICB9KSwgZC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKG0pID0+IHtcbiAgICAgIEQoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIG0pO1xuICAgICAgY29uc3QgZiA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IG0uYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmLmVycm9yID8gKEFhKFwiZXJyb3JcIiwgZi5lcnJvciksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcihmLmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6IChEKFwicGF5bWVudE1ldGhvZFwiLCBmLnBheW1lbnRNZXRob2QpLCBBLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogZi5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogXyxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IHksXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBEYShNdClcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBUYSA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IHNcbiAgfSkgPT4ge1xuICAgIEQoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IGUuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBEKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBpID0gTWEodCwgcy5zdHJpcGVQTSksIGMgPSBvZShpLCByLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5jXG4gICAgfSksIEQoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IHZlKGEsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBzLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IGNbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IGNbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIEQoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgY29uc3QgZCA9IFJhLnBhcnNlKGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXS5vdXJfZXhpc3RpbmdfcG1faWQsIF8gPSBhd2FpdCBUKGEpO1xuICAgIGlmIChfLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgRChcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgeihhLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IE1lKHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEQoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IHkgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IG4ucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBjW3AuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBjW3AuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBfLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBfLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5cbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcHQoYSwgeSkgfTtcbiAgICB9XG4gIH1cbiksIE1hID0gKGUsIG4pID0+IHtcbiAgdmFyIGwsIHUsIGQsIF8sIHk7XG4gIGNvbnN0IHQgPSB7IC4uLmUgfSwgW3IsIC4uLnNdID0gKCh1ID0gKGwgPSBuLmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBhID0gcy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHRbcC5FTUFJTF0gPSB0W3AuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgoZCA9IG4ubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGQuZW1haWwpIHx8IG4uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgdFtwLlpJUF9DT0RFXSA9IHRbcC5aSVBfQ09ERV0gfHwgKChfID0gbi5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF8ucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgdFtwLkNPVU5UUlldID0gdFtwLkNPVU5UUlldIHx8ICgoeSA9IG4uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB5LmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgaSA9IHRbcC5GSVJTVF9OQU1FXSB8fCByIHx8IFwiXCIsIGMgPSB0W3AuTEFTVF9OQU1FXSB8fCBhIHx8IFwiXCI7XG4gIHJldHVybiBpIHx8IGMgPyAodFtwLkZJUlNUX05BTUVdID0gaSwgdFtwLkxBU1RfTkFNRV0gPSBjKSA6ICh0W3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHRbcC5MQVNUX05BTUVdID0gXCJcIiksIEQoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgdCksIHQ7XG59LCBEYSA9IChlKSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBjb25zdCB0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICByID8gbihyKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0KTtcbiAgfTtcbiAgdCgpO1xufSksIHsgbG9nX186IGosIGVycl9fOiBOYSB9ID0gayhcInN0cmlwZS1wclwiKSwgTGEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIE9hID0gcGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIGooXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCB0ID0gcShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIExhKTtcbiAgICBqKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBUKHIpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCI7XG4gICAgaihcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBpID0gYXdhaXQgRWUociwgcy50b2tlbiwgYSwgdm9pZCAwKSwgYyA9IGF3YWl0IE5yKFxuICAgICAgdC5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBpLmFtb3VudEF0b20sXG4gICAgICBpLmN1cnJlbmN5LFxuICAgICAgYVxuICAgICk7XG4gICAgaihcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBOYShcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgaihcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKGQsIF8pID0+IEEuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBfID09IG51bGwgPyB2b2lkIDAgOiBfLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBLLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogSy5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgVWEgPSBuZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgIGluaXRSZXN1bHQ6IGFcbiAgfSkgPT4ge1xuICAgIGlmIChqKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgcy5wcm92aWRlciAhPT0gbi5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7cy5wcm92aWRlcn0sIGdvdCAke24ucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGEucHI7XG4gICAgaWYgKHMgIT0gbnVsbCAmJiBzLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGYgPSBzLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBqKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBmKTtcbiAgICAgIGNvbnN0IGggPSB0eXBlb2YgZi5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IGYuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiBmLmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICB4YShjLCBmLmFtb3VudCwgZi5wZW5kaW5nLCBoLCBmLmxhYmVsKTtcbiAgICB9XG4gICAgaihcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgTHIoYyk7XG4gICAgaihcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIGooXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBqYSh0LCBsKSwgZCA9IG9lKHUsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmRcbiAgICB9KSwgaihcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIGQpO1xuICAgIGNvbnN0IF8gPSBhd2FpdCBocyhpLCB7XG4gICAgICBmaWVsZHM6IGQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG5cbiAgICB9KSwgeSA9ICRhKF8pO1xuICAgIGooXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBPcih5LCBsKTtcbiAgICBjb25zdCBtID0gYXdhaXQgVChpKTtcbiAgICBpZiAobS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGooXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBmID0gYXdhaXQgeihpLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogTWUoZikgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaihcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBmID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IG0udG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBuLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGRbcC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBkW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBkW3AuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBkW3AuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBtLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBtLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG5cbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgcHQoaSwgZikgfTtcbiAgICB9XG4gIH1cbiksIGphID0gKGUsIG4pID0+IHtcbiAgdmFyIGQsIF8sIHksIG07XG4gIGNvbnN0IHQgPSB7IC4uLmUgfSwgW3IsIC4uLnNdID0gKChfID0gKGQgPSBuLnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogXy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgYSA9IHMuam9pbihcIiBcIikgfHwgdm9pZCAwLCBpID0gKG0gPSAoeSA9IG4ucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogbS5hZGRyZXNzLCBjID0gbi5zaGlwcGluZ0FkZHJlc3M7XG4gIHRbcC5FTUFJTF0gPSB0W3AuRU1BSUxdIHx8IG4ucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHRbcC5aSVBfQ09ERV0gPSB0W3AuWklQX0NPREVdIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIHRbcC5DT1VOVFJZXSA9IHRbcC5DT1VOVFJZXSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IGwgPSB0W3AuRklSU1RfTkFNRV0gfHwgciB8fCBcIlwiLCB1ID0gdFtwLkxBU1RfTkFNRV0gfHwgYSB8fCBcIlwiO1xuICByZXR1cm4gbCB8fCB1ID8gKHRbcC5GSVJTVF9OQU1FXSA9IGwsIHRbcC5MQVNUX05BTUVdID0gdSkgOiAodFtwLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCB0W3AuTEFTVF9OQU1FXSA9IFwiXCIpLCBqKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHQpLCB0O1xufSwgeGEgPSAoZSwgbiwgdCwgciwgcykgPT4ge1xuICBlLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogbi5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IHMgPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogdFxuICAgIH0sXG4gICAgY3VycmVuY3k6IG4uY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogclxuICB9KTtcbn0sICRhID0gKGUpID0+IHtcbiAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7ZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIFRyLnBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIFZhID0gKCkgPT4ge1xuICBjb25zdCBlID0gdjQoKS5zcGxpdChcIi1cIilbMF07XG4gIHJldHVybiB7XG4gICAgZmlyc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgbGFzdE5hbWU6IGB4eF8ke2V9YCxcbiAgICBlbWFpbDogYHh4XyR7ZX1AZW1haWwuY29tYCxcbiAgICB6aXBDb2RlOiBgeHhfJHtlfWAsXG4gICAgY291bnRyeTogXCJVU1wiXG4gIH07XG59LCB7IGxvZ19fOiBsZSwgZXJyX186IEdhIH0gPSBrKFwicGF5cGFsXCIpLCBHbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHsgY2xpZW50X2lkOiB6JDEuc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIHphID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gIGNvbnN0IHQgPSBxKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR24pO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IEEucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogVihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBxYSA9IG5lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogbixcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IHNcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBsZShcIlJ1bm5pbmcgUGF5UGFsIGZsb3cuLi5cIik7XG4gICAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBpID0gYXdhaXQgVChhKSwgeyBpc0Fub255bW91czogYywgdXNlUmVkaXJlY3RGbG93OiBsIH0gPSBzLnNldHRpbmdzID8/IHt9O1xuICAgICAgbGUoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgICAgY29uc3QgdSA9IEduLnBhcnNlKHQpO1xuICAgICAgbGUoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgICAgY29uc3QgZCA9IG9lKFxuICAgICAgICBuLFxuICAgICAgICByLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYyA/IFZhKCkgOiB2b2lkIDBcbiAgICAgICksIF8gPSBDbihkKTtcbiAgICAgIGxlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtpLm1vZGV9YCk7XG4gICAgICBjb25zdCB5ID0gdjQoKSwgbSA9IGkubW9kZSAhPT0gXCJzZXR1cFwiLCBmID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBtLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IG0gPyB7XG4gICAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBpLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogbCxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogeVxuICAgICAgICB9LFxuICAgICAgICAuLi5fXG4gICAgICB9LCBoID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCBFID0gYnRvYShKU09OLnN0cmluZ2lmeShmKSksIGIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IGkudG9rZW4sXG4gICAgICAgIHI6IEVcbiAgICAgIH0pLCB2ID0gYCR7aH0/JHtiLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmIChsKVxuICAgICAgICB0aHJvdyBsZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB2LCBhd2FpdCBCZSgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgY29uc3QgUyA9IGF3YWl0IGtuKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBhLFxuICAgICAgICB5LFxuICAgICAgICB2XG4gICAgICApO1xuICAgICAgbGUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgUyk7XG4gICAgICBjb25zdCBNID0gaXQoUy5ocmVmLCBcImNhdHRcIiksIFkgPSBpdChTLmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKSwgTyA9IGF3YWl0IHooYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGkudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG0gPyBNIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogbSA/IFkgOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGxlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIE8pLCBEZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogYSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB1LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGQsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IE8sXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogbVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgdGhyb3cgR2EoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBhKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBhIH0pLCBuZXcgRXJyb3IoKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgZmUgPSAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCByID0gZS5maWx0ZXIoKHMpID0+IHtcbiAgICBjb25zdCBhID0gdCA9PT0gdm9pZCAwID8gITAgOiBzLnByb2Nlc3Nvcl9uYW1lID09PSB0LCBpID0gcy5wcm92aWRlciA9PT0gbjtcbiAgICByZXR1cm4gYSAmJiBpO1xuICB9KTtcbiAgaWYgKHIubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7bn0nIGFuZCBwcm9jZXNzb3IgJyR7dH0nYCk7XG4gIHJldHVybiByLmxlbmd0aCAhPT0gMSAmJiAoY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBjb25zb2xlLndhcm4oYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7bn0nIGFuZCBwcm9jZXNzb3IgJyR7dH0nYCksIGcoXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgcHJvdmlkZXI6IG4sXG4gICAgcHJvY2Vzc29yOiB0LFxuICAgIGNwbXM6IGVcbiAgfSkpLCByWzBdO1xufSwgQSA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBtYVxuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBPYSxcbiAgICBydW46IFVhXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBGYSxcbiAgICBydW46IFRhXG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBydW46IGthXG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiB6YSxcbiAgICBydW46IHFhXG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBxcyxcbiAgICBydW46IFlzXG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogVnMsXG4gICAgcnVuOiBHc1xuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiBDYSxcbiAgICBydW46IFNhXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogSnMsXG4gICAgcnVuOiBLc1xuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBacyxcbiAgICBydW46IFdzXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59LCB7IGxvZ19fOiBZYSwgZXJyX186IEJhIH0gPSBrKFwiaW5pdC1mbG93c1wiKSwgc2UgPSAoZSwgbikgPT4ge1xuICBjb25zdCB0ID0gbmV3IEFlKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiB0LFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChyKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodC5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCBuKHIpO1xuICAgICAgICBZYShg4pyUICR7ZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBzKSwgdC5zZXQocyk7XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIEJhKGDwnZmtICR7ZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIEcocyksIFwiRGV0YWlsczpcIiwgcyksIHQudGhyb3cocywgRyhzKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgSGEgPSBhc3luYyAoZSwgbiwgdCkgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgocikgPT4gci5pbml0aWFsaXplKHsgY29udGV4dDogbiwgZm9ybUNhbGxiYWNrczogdCB9KSkpO1xufSwgSmEgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogc2UoXCJTdHJpcGUgUFJcIiwgQS5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogc2UoXCJTdHJpcGUgTGlua1wiLCBBLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiBzZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgQS5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogc2UoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgQS5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiBzZShcIkxvb3BcIiwgQS5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiBzZShcIlBheVBhbFwiLCBBLnBheXBhbC5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBzZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIEEuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBzZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgQS5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IEthIH0gPSBrKFwiZm9ybS1jYWxsYmFja3NcIiksIEIgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBEdCA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBCLFxuICBvbkJsdXI6IEIsXG4gIG9uQ2hhbmdlOiBCLFxuICBvbkxvYWQ6IEIsXG4gIG9uTG9hZEVycm9yOiBCLFxuICBvblZhbGlkYXRpb25FcnJvcjogQixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IEIsXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBCLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IEIsXG4gIG9uQ2hlY2tvdXRFcnJvcjogQixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IEJcbn0pLCBlZSA9IGNsYXNzIGVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAobikgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gZWUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXMobikuZm9yRWFjaCgoW3QsIHJdKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSB0cih0LCByID8/IGVlLk5PT1AsIEthKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW3RdID0gcztcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IGVlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG5lZS5OT09QID0gKCkgPT4ge1xufSwgZWUuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IG4gPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKER0LmtleW9mKCkuZW51bSkuZm9yRWFjaCgodCkgPT4ge1xuICAgIG5bdF0gPSBlZS5OT09QO1xuICB9KSwgbjtcbn0sIGVlLmZyb21PYmplY3QgPSAobikgPT4ge1xuICBjb25zdCB0ID0gbmV3IGVlKCk7XG4gIHJldHVybiB0LnNldENhbGxiYWNrcyhEdC5wYXJzZShuKSksIHQ7XG59O1xubGV0IGN0ID0gZWU7XG5jb25zdCB6biA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIiwgSWUgPSAzMiwgWmEgPSAxNiwgcW4gPSAxMCwgTnQgPSAyODE0NzQ5NzY3MTA2NTU7XG52YXIgZGU7XG4oZnVuY3Rpb24oZSkge1xuICBlLkJhc2UzMkluY29ycmVjdEVuY29kaW5nID0gXCJCMzJfRU5DX0lOVkFMSURcIiwgZS5EZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlciA9IFwiREVDX1RJTUVfQ0hBUlwiLCBlLkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCIsIGUuRW5jb2RlVGltZU5lZ2F0aXZlID0gXCJFTkNfVElNRV9ORUdcIiwgZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiLCBlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCIsIGUuUFJOR0RldGVjdEZhaWx1cmUgPSBcIlBSTkdfREVURUNUXCIsIGUuVUxJREludmFsaWQgPSBcIlVMSURfSU5WQUxJRFwiLCBlLlVuZXhwZWN0ZWQgPSBcIlVORVhQRUNURURcIiwgZS5VVUlESW52YWxpZCA9IFwiVVVJRF9JTlZBTElEXCI7XG59KShkZSB8fCAoZGUgPSB7fSkpO1xuY2xhc3Mga2UgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG4sIHQpIHtcbiAgICBzdXBlcihgJHt0fSAoJHtufSlgKSwgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIiwgdGhpcy5jb2RlID0gbjtcbiAgfVxufVxuZnVuY3Rpb24gV2EoZSkge1xuICBsZXQgbiA9IE1hdGguZmxvb3IoZSgpICogSWUpO1xuICByZXR1cm4gbiA9PT0gSWUgJiYgKG4gPSBJZSAtIDEpLCB6bi5jaGFyQXQobik7XG59XG5mdW5jdGlvbiBRYShlKSB7XG4gIGNvbnN0IG4gPSBYYSgpLCB0ID0gbiAmJiAobi5jcnlwdG8gfHwgbi5tc0NyeXB0bykgfHwgbnVsbDtcbiAgaWYgKHR5cGVvZiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSYW5kb21WYWx1ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgciA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHQuZ2V0UmFuZG9tVmFsdWVzKHIpLCByWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2YgKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQucmFuZG9tQnl0ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4gdC5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDI1NTtcbiAgdGhyb3cgbmV3IGtlKGRlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIFhhKCkge1xuICByZXR1cm4gbmkoKSA/IHNlbGYgOiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsIDwgXCJ1XCIgPyBnbG9iYWwgOiB0eXBlb2YgZ2xvYmFsVGhpcyA8IFwidVwiID8gZ2xvYmFsVGhpcyA6IG51bGw7XG59XG5mdW5jdGlvbiBlaShlLCBuKSB7XG4gIGxldCB0ID0gXCJcIjtcbiAgZm9yICg7IGUgPiAwOyBlLS0pXG4gICAgdCA9IFdhKG4pICsgdDtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiB0aShlLCBuID0gcW4pIHtcbiAgaWYgKGlzTmFOKGUpKVxuICAgIHRocm93IG5ldyBrZShkZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7ZX1gKTtcbiAgaWYgKGUgPiBOdClcbiAgICB0aHJvdyBuZXcga2UoZGUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7TnR9OiAke2V9YCk7XG4gIGlmIChlIDwgMClcbiAgICB0aHJvdyBuZXcga2UoZGUuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke2V9YCk7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGUpID09PSAhMSlcbiAgICB0aHJvdyBuZXcga2UoZGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7ZX1gKTtcbiAgbGV0IHQsIHIgPSBcIlwiO1xuICBmb3IgKGxldCBzID0gbjsgcyA+IDA7IHMtLSlcbiAgICB0ID0gZSAlIEllLCByID0gem4uY2hhckF0KHQpICsgciwgZSA9IChlIC0gdCkgLyBJZTtcbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBuaSgpIHtcbiAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA8IFwidVwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbmZ1bmN0aW9uIHJpKGUsIG4pIHtcbiAgY29uc3QgdCA9IFFhKCksIHIgPSBEYXRlLm5vdygpO1xuICByZXR1cm4gdGkociwgcW4pICsgZWkoWmEsIHQpO1xufVxuY29uc3QgWW4gPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIiwgb2kgPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKHQpID0+IHQuaW5jbHVkZXMoWW4pKTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIGUuc3BsaXQoXCI9XCIpWzFdO1xuICBjb25zdCBuID0gcmkoKTtcbiAgcmV0dXJuIHNpKG4pLCBuO1xufSwgc2kgPSAoZSkgPT4ge1xuICBjb25zdCBuID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIG4uc2V0RnVsbFllYXIobi5nZXRGdWxsWWVhcigpICsgMSksIGRvY3VtZW50LmNvb2tpZSA9IGAke1lufT0ke2V9OyBwYXRoPS87IGV4cGlyZXM9JHtuLnRvVVRDU3RyaW5nKCl9YDtcbn07XG5mdW5jdGlvbiBhaSgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlID0gUigpLCBuID0gZTtcbiAgICBpZiAobiAhPSBudWxsICYmIG4ubmV4dCB8fCBuICE9IG51bGwgJiYgbi5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKVxuICAgICAgcmV0dXJuIFwibmV4dGpzXCI7XG4gICAgY29uc3QgdCA9IGU7XG4gICAgaWYgKHQgIT0gbnVsbCAmJiB0Ll9fTlVYVF9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19udXh0XCIpKVxuICAgICAgcmV0dXJuIFwibnV4dFwiO1xuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgocykgPT4gcy5pbmNsdWRlcyhcInJlYWN0XCIpKSB8fCBBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKHMpID0+IHMuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpXG4gICAgICByZXR1cm4gXCJyZWFjdFwiO1xuICAgIGNvbnN0IHIgPSBlO1xuICAgIHJldHVybiByICE9IG51bGwgJiYgci5WdWUgfHwgciAhPSBudWxsICYmIHIuX19WVUVfXyA/IFwidnVlXCIgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpID8gXCJhbmd1bGFyXCIgOiBcInZhbmlsbGFcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5mdW5jdGlvbiBpaShlKSB7XG4gIHZhciBuLCB0LCByO1xuICB0cnkge1xuICAgIHN3aXRjaCAoZSkge1xuICAgICAgY2FzZSBcInJlYWN0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcIm5leHRqc1wiOiB7XG4gICAgICAgIGNvbnN0IGEgPSBSKCk7XG4gICAgICAgIHJldHVybiAoKG4gPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLm5leHQpID09IG51bGwgPyB2b2lkIDAgOiBuLnZlcnNpb24pIHx8ICgodCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuX19ORVhUX0RBVEFfXykgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYnVpbGRJZCkgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcInZ1ZVwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJhbmd1bGFyXCI6IHtcbiAgICAgICAgY29uc3QgcyA9IChyID0gUigpKSA9PSBudWxsID8gdm9pZCAwIDogci5kb2N1bWVudCwgYSA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIGEgPyBhLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gY2koKSB7XG4gIGNvbnN0IGUgPSBhaSgpLCBuID0gaWkoZSk7XG4gIHJldHVybiB7IGZyYW1ld29yazogZSwgdmVyc2lvbjogbiB9O1xufVxuY2xhc3MgbGkge1xuICBjb25zdHJ1Y3RvcihuLCB0LCByLCBzKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGEpID0+IHtcbiAgICAgIGlmICghYS5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoTHQoYS5vcmlnaW4pICE9PSBMdCh0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBhLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBhLmRhdGEucGVucGFsIHx8IHR5cGVvZiBhLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBhLmRhdGEuc291cmNlICYmIGEuZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBpID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkgPSB4cihKU09OLnBhcnNlKGEuZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KGkpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gaSwgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gYS5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGEpID0+IGEuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhYS5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGEuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGEpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMoYS5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgYSksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQoYS5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IG4sIHRoaXMuYmFzZVVybCA9IHQsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IHIsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBzO1xuICB9XG59XG5jb25zdCBMdCA9IChlKSA9PiBuZXcgVVJMKGUpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIHVpKGUsIG4pIHtcbiAgY29uc3QgciA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiBuXG4gIH0pLnByb21pc2UsIHMgPSBhd2FpdCAkcihyKTtcbiAgaWYgKCFWcihyLCBzKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiByO1xufVxuY2xhc3MgZGkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKG4sIHQpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChuLCB0KTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IG4gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgcGkgPSAoZSwgbiwgdCkgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiByIH0gPSBlO1xuICByLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHMpID0+IHtcbiAgICBpZiAocy5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGEgPSBzLmxvYWRlZFZhbHVlLCBpID0gYS5pc0F2YWlsYWJsZSAmJiBhLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IGEuaXNBdmFpbGFibGUgJiYgYS5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBpLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGkgJiYgT3QoXCJhcHBsZV9wYXlcIiwgYSwgbiwgdCwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIE90KFwiZ29vZ2xlX3BheVwiLCBhLCBuLCB0LCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0LmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwgT3QgPSAoZSwgbiwgdCwgciwgcykgPT4gQS5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiB0LFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZSksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IFYodC5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogcixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBlLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzID09IG51bGwgPyB2b2lkIDAgOiBzLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogblxufSksIFV0ID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogUSwgZXJyX186IEggfSA9IGsoXCJvcC1mb3JtXCIpLCB0ZSA9IGNsYXNzIHRlIHtcbiAgY29uc3RydWN0b3Iobikge1xuICAgIHZhciBzO1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSAhMSwgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgQWUoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IEFlKCksIHRoaXMuY29udGV4dCA9IG5ldyBBZSgpLCB0aGlzLmluaXRGbG93cyA9IEphKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoWC5DREVfQlJJREdFKTtcbiAgICAgICAgYS5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIiwgYS5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIiwgT2JqZWN0LmFzc2lnbihhLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgfSksIGEubW91bnQoXCJib2R5XCIpLCBRKFwiQ0RFIGJyaWRnZSBlbGVtZW50IG1vdW50ZWRcIiksIFEoXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgUShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogVXRcbiAgICAgICAgfSk7XG4gICAgICAgIFEoXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIFEoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBVdFxuICAgICAgICB9KTtcbiAgICAgICAgUShcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgYXdhaXQgU3MoYywgdGhpcy5kZXZpY2VUb2tlbiksIFEoXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgIGNvbnN0IGwgPSB0ZS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGksXG4gICAgICAgICAgYyxcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGwpLCBwaSh0aGlzLmluaXRGbG93cywgbCwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgUShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgSGEodGhpcy5pbml0Rmxvd3MsIGwsIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGkudG90YWxBbW91bnRBdG9tcywgaS5jdXJyZW5jeSksIFEoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKSwgZyhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgfSBjYXRjaCAoYSkge1xuICAgICAgICBjb25zdCBpID0gRyhhKTtcbiAgICAgICAgSChcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgaSksIGcoXCJmb3JtX2luaXRfZXJyb3JcIiwge1xuICAgICAgICAgIGVycm9yOiBpXG4gICAgICAgIH0pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKGkpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChhKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGEsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgIWkgfHwgaS50eXBlID09PSBYLkNERV9CUklER0UgfHwgKGkubm9kZS5zdHlsZS5oZWlnaHQgPSBhKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAoYSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnNldChhKSwgZyhcImNkZV9sb2FkZWRcIikpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoYSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgKHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihhKSwgYSksIGcoXCJjZGVfbG9hZF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBhXG4gICAgICB9KSk7XG4gICAgfSwgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGEsIGkgPSB7fSkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImNyZWF0ZUVsZW1lbnRcIiksICF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IGMgPSBuci5wYXJzZShhKSwgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksIHUgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcoaSk7XG4gICAgICBsLm5hbWUgPSBgJHtjfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IGQgPSBuZXcgVVJMKGAvYXBwL3YxLyR7bC5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHJldHVybiBkLnNlYXJjaCA9IHUudG9TdHJpbmcoKSwgbC5zcmMgPSBkLmhyZWYsIGwuc3R5bGUuYm9yZGVyID0gXCJub25lXCIsIGwuc3R5bGUud2lkdGggPSBcIjEwMCVcIiwgdGhpcy5yZWdpc3RlcklmcmFtZShjLCBsKTtcbiAgICB9LCB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKGEsIGkpID0+IHtcbiAgICAgIGNvbnN0IGMgPSB7XG4gICAgICAgIHR5cGU6IGEsXG4gICAgICAgIG5vZGU6IGksXG4gICAgICAgIG1vdW50OiAobCkgPT4ge1xuICAgICAgICAgIHZhciB1O1xuICAgICAgICAgICh1ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsKSkgPT0gbnVsbCB8fCB1LmFwcGVuZENoaWxkKGkpLCBnKFwiZWxlbWVudF9tb3VudGVkXCIsIHtcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZTogYVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGMudHlwZSwgbm9kZTogYy5ub2RlIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyB8fCAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgIFtYLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtYLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbWC5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgW1guQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgIFtYLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1thXSA9IGMsIGM7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGEpID0+IHtcbiAgICAgIGNvbnN0IGkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gaS5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBpLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGEuc3R5bGVzICYmIGkuYXBwZW5kKFwic3R5bGVzXCIsIGpyKGEuc3R5bGVzKSksIGkuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIGk7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGEpID0+IHtcbiAgICAgIHVpKGEubm9kZSkudGhlbigoaSkgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oYS50eXBlLCBpKSwgIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBhLnR5cGUgPT09IFguQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KGkpO1xuICAgICAgfSkuY2F0Y2goKGkpID0+IEgoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGkpKTtcbiAgICB9LCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gKGEpID0+IHtcbiAgICAgIGcoXCJzdWJtaXRfY2FyZFwiLCB7IC4uLmEgfSksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcInN1Ym1pdENhcmRcIik7XG4gICAgICBjb25zdCBpID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFpKSB7XG4gICAgICAgIEgoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBBLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGksXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmUoaS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBWKGkuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucGF5bWVudFJvdXRlSWRcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kc1wiKSwgIXRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSkge1xuICAgICAgICBIKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpID0ge1xuICAgICAgICBwYXlwYWw6IHgucGF5cGFsLFxuICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IHguYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICBhaXJ3YWxsZXhBcHBsZVBheTogeC5haXJ3YWxsZXhBcHBsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB4LmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHguYXV0aG9yaXplbmV0QXBwbGVQYXlcbiAgICAgIH0sIGMgPSBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbbCwgdV0pID0+ICh7XG4gICAgICAgIG5hbWU6IGlbbF0gPz8gbCxcbiAgICAgICAgLi4udS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbClcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBnKFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIiwge1xuICAgICAgICBhdmFpbGFibGVfcGF5bWVudF9tZXRob2RzOiBjXG4gICAgICB9KSwgYztcbiAgICB9LCB0aGlzLmdlbmVyYWxTdWJtaXQgPSAoYSwgaSkgPT4ge1xuICAgICAgZyhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwge1xuICAgICAgICBtZXRob2Q6IGEsXG4gICAgICAgIHNldHRpbmdzOiBpXG4gICAgICB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2VuZXJhbFN1Ym1pdFwiKTtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWMpIHtcbiAgICAgICAgSChcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoYSkge1xuICAgICAgICBjYXNlIHgucG9ja3l0UGF5cGFsOlxuICAgICAgICAgIHJldHVybiBBLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmUoYy5jaGVja291dFBheW1lbnRNZXRob2RzLCBcInBheXBhbFwiLCBcInBvY2t5dFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFYoYy5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogaSB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgeC5wYXlwYWw6XG4gICAgICAgICAgcmV0dXJuIEEucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBjLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBmZShjLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwicGF5cGFsXCIsIFwicGF5cGFsXCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogVihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiB7IC4uLmksIHVzZVJlZGlyZWN0RmxvdzogITAgfSB9LFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgeC5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBsID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWwpIHtcbiAgICAgICAgICAgIEgoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsLnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHguYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBsID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghbCkge1xuICAgICAgICAgICAgSChcbiAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbC5zdGFydEZsb3coaSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB4LmF1dGhvcml6ZW5ldEdvb2dsZVBheToge1xuICAgICAgICAgIGNvbnN0IGwgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghbCkge1xuICAgICAgICAgICAgSChcbiAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsLnN0YXJ0RmxvdyhpKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHguYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBsID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghbCkge1xuICAgICAgICAgICAgSChcbiAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGwuc3RhcnRGbG93KGkpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgeC5sb29wQ3J5cHRvOlxuICAgICAgICAgIHJldHVybiBBLmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZlKGMuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcnlwdG9cIiwgXCJsb29wXCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogVihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBpLFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgSmUoYSk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIHZhciBhO1xuICAgICAgUShcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpLCB0aGlzLmlzRGVzdHJveWVkID0gITA7XG4gICAgICBmb3IgKGNvbnN0IGkgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIGkgJiYgaS5ub2RlLnJlbW92ZSgpO1xuICAgICAgKGEgPSBSKCkpID09IG51bGwgfHwgYS5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgcHMoKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCBkZWxldGUgd2luZG93Lm9qcywgZyhcImZvcm1fZGVzdHJveWVkXCIpO1xuICAgIH0sIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKGEpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MoYSk7XG4gICAgfSwgdGUuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4zLjNcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gbi5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLm4sIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBjdC5mcm9tT2JqZWN0KG4pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IG4uZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgZGkoKSwgdGhpcy5kZXZpY2VUb2tlbiA9IG9pKCksIGRzKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcms6IHQsIHZlcnNpb246IHIgfSA9IGNpKCk7XG4gICAgdW4odGhpcy5iYXNlVXJsKS50aGVuKChhKSA9PiB7XG4gICAgICBpZiAoIWF0LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IGkgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudDogYSxcbiAgICAgICAgICBmcmFtZXdvcms6IHQsXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogcixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIGF0LnNldChpKTtcbiAgICAgIH1cbiAgICB9KSwgZyhcImZvcm1faW5pdFwiKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgbGkodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIChzID0gUigpKSA9PSBudWxsIHx8IHMuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIGNoZWNrVmFsaWRGb3JtSW5zdGFuY2UobiA9IFwidW5rbm93blwiKSB7XG4gICAgY29uc3QgdCA9IHRlLmdldEluc3RhbmNlKCksIHIgPSB7XG4gICAgICBjYWxsZXI6IG4sXG4gICAgICB0aGlzRm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgIGN1cnJlbnRGb3JtSWQ6ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmZvcm1JZCkgfHwgXCJuby1jdXJyZW50LWluc3RhbmNlXCIsXG4gICAgICBpc0Rlc3Ryb3llZDogdGhpcy5pc0Rlc3Ryb3llZCxcbiAgICAgIGNoZWNrb3V0VG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4uc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICB9LCBzID0gYFxuICAgICAgW1dhcm5pbmddIEludmFsaWQgZm9ybSBpbnN0YW5jZSBkZXRlY3RlZC5cbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91IGFyZSBzdGlsbCB1c2luZyBhbiBvbGQgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBkZXN0cm95ZWQuXG4gICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZm9ybSBhbmQgY2xlYW51cCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIERlYnVnIEluZm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIC0gY2FsbGVyOiAke259XG4gICAgICAtIGNhbGxlcl9mb3JtX2lkOiAke3IudGhpc0Zvcm1JZH1cbiAgICAgIC0gY3VycmVudF9hY3RpdmVfZm9ybV9pZDogJHtyLmN1cnJlbnRGb3JtSWR9XG4gICAgICAtIGlzX2Rlc3Ryb3llZDogJHtyLmlzRGVzdHJveWVkfVxuICAgICAgLSBjaGVja291dF90b2tlbjogJHtyLmNoZWNrb3V0VG9rZW59XG4gICAgYDtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZCA/IChIKHMpLCBnKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBzIH0pLCAhMSkgOiAhdCB8fCB0LmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgPyAoSChzKSwgZyhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogcyB9KSwgITEpIDogITA7XG4gIH1cbn07XG50ZS5vanNGbG93cyA9IEEsIHRlLmFzc2lnbkFzU2luZ2xldG9uID0gKG4pID0+IHtcbiAgaWYgKHRlLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSBuO1xufSwgdGUuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIHRlLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAobiwgdCwgciwgcykgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogbi5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKG4uYmFzZVVybCA/PyBWdCkub3JpZ2luLFxuICBmb3JtRGl2OiBzLFxuICBlbGVtZW50c1Nlc3Npb25JZDogdC5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogcixcbiAgY3VzdG9tSW5pdFBhcmFtczogbi5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG59KTtcbmxldCBqdCA9IHRlO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5hcnJheShab2RGaWVsZEVycm9yKTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbiwgZXJyb3JMb2dnZXIpID0+IHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImxvb3BDcnlwdG9cIl0gPSBcImxvb3AtY3J5cHRvXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicGF5cGFsXCJdID0gXCJwYXlwYWxcIjtcbiAgcmV0dXJuIFN1Ym1pdE1ldGhvZHMyO1xufSkoU3VibWl0TWV0aG9kcyB8fCB7fSk7XG56JDEubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgT3B0aW9uYWxTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDREVfQlJJREdFXCJdID0gXCJjZGUtYnJpZGdlXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nLFxuICBwYXltZW50Um91dGVJZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoUHJpY2VRdHkpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7fSk7XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke0xlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7TGUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtMZS5yZWQuYm9sZChcIm9qcy9cIil9JHtMZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbmZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xufVxuXG5mdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG5cbnZhciBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9yc1xuICAgICAgICAgICAgPyBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1Vuc3Vic2NyaXB0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9O1xufSk7XG5cbmZ1bmN0aW9uIGFyclJlbW92ZShhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGFyci5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAwIDw9IGluZGV4ICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbn1cblxudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbnZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5mdW5jdGlvbiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHxcbiAgICAgICAgKHZhbHVlICYmICdjbG9zZWQnIGluIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUucmVtb3ZlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZS51bnN1YnNjcmliZSkpKTtcbn1cbmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkge1xuICAgICAgICBmaW5hbGl6ZXIoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpO1xuICAgIH1cbn1cblxudmFyIGNvbmZpZyA9IHtcbiAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICAgIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgICBQcm9taXNlOiB1bmRlZmluZWQsXG4gICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsXG4gICAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiBmYWxzZSxcbn07XG5cbnZhciB0aW1lb3V0UHJvdmlkZXIgPSB7XG4gICAgc2V0VGltZW91dDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJUaW1lb3V0KSB8fCBjbGVhclRpbWVvdXQpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxuZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7XG4gICAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuXG5mdW5jdGlvbiBlcnJvckNvbnRleHQoY2IpIHtcbiAgICB7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IEVNUFRZX09CU0VSVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlci5jcmVhdGUgPSBmdW5jdGlvbiAobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb24pKTtcbnZhciBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBfYmluZC5jYWxsKGZuLCB0aGlzQXJnKTtcbn1cbnZhciBDb25zdW1lck9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcikge1xuICAgICAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHBhcnRpYWxPYnNlcnZlcjtcbiAgICB9XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29uc3VtZXJPYnNlcnZlcjtcbn0oKSk7XG52YXIgU2FmZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTYWZlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCAhb2JzZXJ2ZXJPck5leHQpIHtcbiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICBuZXh0OiAob2JzZXJ2ZXJPck5leHQgIT09IG51bGwgJiYgb2JzZXJ2ZXJPck5leHQgIT09IHZvaWQgMCA/IG9ic2VydmVyT3JOZXh0IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSAhPT0gbnVsbCAmJiBjb21wbGV0ZSAhPT0gdm9pZCAwID8gY29tcGxldGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMTtcbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuY29tcGxldGUsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IG9ic2VydmVyT3JOZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gU2FmZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmZ1bmN0aW9uIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKSB7XG4gICAge1xuICAgICAgICByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgfVxufVxuZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHtcbiAgICB0aHJvdyBlcnI7XG59XG52YXIgRU1QVFlfT0JTRVJWRVIgPSB7XG4gICAgY2xvc2VkOiB0cnVlLFxuICAgIG5leHQ6IG5vb3AsXG4gICAgZXJyb3I6IGRlZmF1bHRFcnJvckhhbmRsZXIsXG4gICAgY29tcGxldGU6IG5vb3AsXG59O1xuXG52YXIgb2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7IHJldHVybiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSkgfHwgJ0BAb2JzZXJ2YWJsZSc7IH0pKCk7XG5cbmZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHtcbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgfVxuICAgIGlmIChmbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBmbnNbMF07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBwaXBlZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbiAocHJldiwgZm4pIHsgcmV0dXJuIGZuKHByZXYpOyB9LCBpbnB1dCk7XG4gICAgfTtcbn1cblxudmFyIE9ic2VydmFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlKSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcywgb3BlcmF0b3IgPSBfYS5vcGVyYXRvciwgc291cmNlID0gX2Euc291cmNlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQob3BlcmF0b3JcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLmNhbGwoc3Vic2NyaWJlciwgc291cmNlKVxuICAgICAgICAgICAgICAgIDogc291cmNlXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdWJzY3JpYmUoc3Vic2NyaWJlcilcbiAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3RyeVN1YnNjcmliZShzdWJzY3JpYmVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc2luaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzaW5rLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAobmV4dCwgcHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IHJlc29sdmUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZVtvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlRnJvbUFycmF5KG9wZXJhdGlvbnMpKHRoaXMpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24gKHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShmdW5jdGlvbiAoeCkgeyByZXR1cm4gKHZhbHVlID0geCk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHZhbHVlKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmUpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGU7XG59KCkpO1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUuZXJyb3IpICYmIGlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXIpIHx8IChpc09ic2VydmVyKHZhbHVlKSAmJiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTtcbn1cbmZ1bmN0aW9uIG9wZXJhdGUoaW5pdCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbiAobGlmdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUnKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxudmFyIE9wZXJhdG9yU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE9wZXJhdG9yU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSwgc2hvdWxkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRmluYWxpemUgPSBvbkZpbmFsaXplO1xuICAgICAgICBfdGhpcy5zaG91bGRVbnN1YnNjcmliZSA9IHNob3VsZFVuc3Vic2NyaWJlO1xuICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbk5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9uZXh0O1xuICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2Vycm9yO1xuICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9wZXJhdG9yU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT3BlcmF0b3JTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5cbnZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgIH07XG59KTtcblxudmFyIFN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoX3RoaXMuY3VycmVudE9ic2VydmVycyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlciA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSBfdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXJzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3ViamVjdC5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGgpID4gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGhhc0Vycm9yID0gX2EuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgb2JzZXJ2ZXJzID0gX2Eub2JzZXJ2ZXJzO1xuICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgICAgIGFyclJlbW92ZShvYnNlcnZlcnMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYS50aHJvd25FcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhyb3duRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICB9O1xuICAgIFN1YmplY3QuY3JlYXRlID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YmplY3Q7XG59KE9ic2VydmFibGUpKTtcbnZhciBBbm9ueW1vdXNTdWJqZWN0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5leHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgZXJyKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKF9iID0gKF9hID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEVNUFRZX1NVQlNDUklQVElPTjtcbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5cbnZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoRGF0ZSkubm93KCk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuXG52YXIgaW50ZXJ2YWxQcm92aWRlciA9IHtcbiAgICBzZXRJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAyOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gKGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcblxudmFyIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgX3RoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHRoaXMuaWQgPSAoX2EgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIF9pZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnZhbFByb3ZpZGVyLnNldEludGVydmFsKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdGhpcyksIGRlbGF5KTtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uIChfc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGRlbGF5ICYmIHRoaXMucGVuZGluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgX2RlbGF5KSB7XG4gICAgICAgIHZhciBlcnJvcmVkID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvclZhbHVlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy53b3JrKHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICBlcnJvclZhbHVlID0gZSA/IGUgOiBuZXcgRXJyb3IoJ1NjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JlZCkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yVmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIF9hID0gdGhpcywgaWQgPSBfYS5pZCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgICAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGFyclJlbW92ZShhY3Rpb25zLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jQWN0aW9uO1xufShBY3Rpb24pKTtcblxudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcblxudmFyIEFzeW5jU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQXN5bmNTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIoU2NoZWR1bGVyQWN0aW9uLCBub3cpIHtcbiAgICAgICAgaWYgKG5vdyA9PT0gdm9pZCAwKSB7IG5vdyA9IFNjaGVkdWxlci5ub3c7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBub3cpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmFjdGlvbnMgPSBbXTtcbiAgICAgICAgX3RoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuXG52YXIgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pO1xuXG52YXIgaXNBcnJheUxpa2UgPSAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJzsgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cblxuZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTtcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlKG9iaikge1xuICAgIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaXRlcmF0b3IgPSBnZXRTeW1ib2xJdGVyYXRvcigpO1xuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdChyZWFkZXIucmVhZCgpKV07XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBfYSA9IF9iLnNlbnQoKSwgdmFsdWUgPSBfYS52YWx1ZSwgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZG9uZSkgcmV0dXJuIFszLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHZvaWQgMCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyLCBfYi5zZW50KCldO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFs0LCBfX2F3YWl0KHZhbHVlKV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzQsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMl07XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG5cbmZ1bmN0aW9uIGlubmVyRnJvbShpbnB1dCkge1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Qcm9taXNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21Bc3luY0l0ZXJhYmxlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNJdGVyYWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7XG59XG5mdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzLnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlJyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21JdGVyYWJsZShpdGVyYWJsZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGl0ZXJhYmxlXzEucmV0dXJuKSkgX2EuY2FsbChpdGVyYWJsZV8xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBmcm9tQXN5bmNJdGVyYWJsZShhc3luY0l0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb2Nlc3MoYXN5bmNJdGVyYWJsZSwgc3Vic2NyaWJlcikuY2F0Y2goZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVTY2hlZHVsZShwYXJlbnRTdWJzY3JpcHRpb24sIHNjaGVkdWxlciwgd29yaywgZGVsYXksIHJlcGVhdCkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgIGlmIChyZXBlYXQgPT09IHZvaWQgMCkgeyByZXBlYXQgPSBmYWxzZTsgfVxuICAgIHZhciBzY2hlZHVsZVN1YnNjcmlwdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdvcmsoKTtcbiAgICAgICAgaWYgKHJlcGVhdCkge1xuICAgICAgICAgICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gICAgcGFyZW50U3Vic2NyaXB0aW9uLmFkZChzY2hlZHVsZVN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFyZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlU3Vic2NyaXB0aW9uO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OyB9O1xuICAgIHZhciBpbml0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3JGYWN0b3J5KCkpOyB9O1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShpbml0KTtcbn1cblxudmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuXG5mdW5jdGlvbiBsYXN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUpO1xufVxuXG52YXIgVGltZW91dEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFRpbWVvdXRFcnJvckltcGwoaW5mbykge1xuICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7IGluZm8gPSBudWxsOyB9XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gdGltZW91dChjb25maWcsIHNjaGVkdWxlckFyZykge1xuICAgIHZhciBfYSA9IChpc1ZhbGlkRGF0ZShjb25maWcpID8geyBmaXJzdDogY29uZmlnIH0gOiB0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJyA/IHsgZWFjaDogY29uZmlnIH0gOiBjb25maWcpLCBmaXJzdCA9IF9hLmZpcnN0LCBlYWNoID0gX2EuZWFjaCwgX2IgPSBfYS53aXRoLCBfd2l0aCA9IF9iID09PSB2b2lkIDAgPyB0aW1lb3V0RXJyb3JGYWN0b3J5IDogX2IsIF9jID0gX2Euc2NoZWR1bGVyLCBzY2hlZHVsZXIgPSBfYyA9PT0gdm9pZCAwID8gYXN5bmNTY2hlZHVsZXIgOiBfYywgX2QgPSBfYS5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDtcbiAgICBpZiAoZmlyc3QgPT0gbnVsbCAmJiBlYWNoID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdGltZW91dCBwcm92aWRlZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb247XG4gICAgICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBzZWVuID0gMDtcbiAgICAgICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbiAoZGVsYXkpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID0gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhOiBtZXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBsYXN0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuOiBzZWVuLFxuICAgICAgICAgICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBkZWxheSk7XG4gICAgICAgIH07XG4gICAgICAgIG9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNlZW4rKztcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgobGFzdFZhbHVlID0gdmFsdWUpKTtcbiAgICAgICAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoISh0aW1lclN1YnNjcmlwdGlvbiA9PT0gbnVsbCB8fCB0aW1lclN1YnNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGltZXJTdWJzY3JpcHRpb24uY2xvc2VkKSkge1xuICAgICAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgICAhc2VlbiAmJiBzdGFydFRpbWVyKGZpcnN0ICE9IG51bGwgPyAodHlwZW9mIGZpcnN0ID09PSAnbnVtYmVyJyA/IGZpcnN0IDogK2ZpcnN0IC0gc2NoZWR1bGVyLm5vdygpKSA6IGVhY2gpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdGltZW91dEVycm9yRmFjdG9yeShpbmZvKSB7XG4gICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcihpbmZvKTtcbn1cblxuY2xhc3MgTG9hZGVkT25jZVB1Ymxpc2hlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiB0cnVlLCBsb2FkZWRWYWx1ZTogdmFsdWUgfTtcbiAgICAgIHRoaXMuX3N1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLnRocm93ID0gKGVycm9yLCBlcnJNc2cpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiBmYWxzZSwgZXJyb3IsIGVyck1zZyB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHZhbHVlSWZOb3RMb2FkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlSWZOb3RMb2FkZWQ7XG4gICAgfTtcbiAgICB0aGlzLnN1YnNjcmliZSA9IChmbikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMud2FpdEZvckxvYWQgPSAodGltZW91dENvbmZpZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiKSBhc3NlcnROZXZlcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IHRpbWVvdXRQYXJhbXMgPSB7XG4gICAgICAgIGZpcnN0OiB0aW1lb3V0Q29uZmlnLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpO1xuICAgICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICB9O1xuICAgIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBsb2dfXyhcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIik7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChldmVudE5hbWUsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IGNvbnRleHRQcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IHBlcmZvcm1hbmNlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gcGVyZm9ybWFuY2Uubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChzYWZlV2luZG93ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gc2FmZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZClcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18oXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6JDEuZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKTtcbnokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgUGF5SW5TdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFBheUluU3RhdGUyKSA9PiB7XG4gIFBheUluU3RhdGUyW1wiSURMRVwiXSA9IFwiaWRsZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQkFMQU5DRVwiXSA9IFwiY29uZmlybWluZ0JhbGFuY2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcImNvbmZpcm1pbmdBdXRob3JpemF0aW9uXCI7XG4gIFBheUluU3RhdGUyW1wiVVBEQVRJTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwidXBkYXRpbmdBdXRob3JpemF0aW9uXCI7XG4gIFBheUluU3RhdGUyW1wiU0lHTklOR19NRVNTQUdFXCJdID0gXCJzaWduaW5nTWVzc2FnZVwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX0NVU1RPTUVSXCJdID0gXCJjcmVhdGluZ0N1c3RvbWVyXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbmNvbnN0IExPT1BfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIGNvbmZpZzogbnVsbCxcbiAgd2lkZ2V0OiBudWxsXG59O1xueiQxLm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7IGNsaWVudF9pZDogeiQxLnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KHtcbiAgICBvbkZvY3VzOiBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uQ2hhbmdlOiBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkxvYWQ6IHByb3BzLm9uTG9hZCxcbiAgICBvbkxvYWRFcnJvcjogcHJvcHMub25Mb2FkRXJyb3IsXG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCxcbiAgICBvbkNoZWNrb3V0U3VjY2VzczogcHJvcHMub25DaGVja291dFN1Y2Nlc3MsXG4gICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgb25DaGVja291dEVycm9yOiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXG4gIH0pO1xuICBpZiAoanQuZ2V0SW5zdGFuY2UoKSkge1xuICAgIGp0LmdldEluc3RhbmNlKCk/LnVwZGF0ZUNhbGxiYWNrcyhmb3JtQ2FsbGJhY2tzLmdldCk7XG4gIH1cbiAgcmV0dXJuIGZvcm1DYWxsYmFja3MuZ2V0O1xufTtcblxuY29uc3QgdXNlUGF5bWVudFJlcXVlc3RzID0gKG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQpID0+IHtcbiAgY29uc3QgW3BheW1lbnRSZXF1ZXN0cywgc2V0UGF5bWVudFJlcXVlc3RzXSA9IHVzZVN0YXRlKHtcbiAgICBhcHBsZV9wYXk6IFBSX0xPQURJTkcsXG4gICAgZ29vZ2xlX3BheTogUFJfTE9BRElOR1xuICB9KTtcbiAgY29uc3Qgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAocGF5bWVudFJlcXVlc3RzMikgPT4ge1xuICAgICAgc2V0UGF5bWVudFJlcXVlc3RzKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgICAgb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZD8uKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgIH0sXG4gICAgW29yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWRdXG4gICk7XG4gIHJldHVybiB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfTtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfSA9IHVzZVBheW1lbnRSZXF1ZXN0cyhwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdHJpcGVMaW5rQ3RybCwgc2V0U3RyaXBlTGlua0N0cmxdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb29wQ29uZmlnLCBzZXRMb29wQ29uZmlnXSA9IHVzZVN0YXRlKExPT1BfTE9BRElORyk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBqdC5nZXRJbnN0YW5jZSgpID8/IG5ldyBqdCh7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIC4uLmZvcm1DYWxsYmFja3NcbiAgICB9KTtcbiAgICBzZXRPcEZvcm0oZm9ybSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZShmb3JtKTtcbiAgICBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS5pbml0Rmxvd3Muc3RyaXBlTGluay5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRTdHJpcGVMaW5rQ3RybChyZXN1bHQubG9hZGVkVmFsdWUuY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogcmVzdWx0LmxvYWRlZFZhbHVlLndpZGdldFByb3BzLFxuICAgICAgICAgIGNvbmZpZzogcmVzdWx0LmxvYWRlZFZhbHVlLmluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmICFyZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgd2lkZ2V0OiBudWxsLFxuICAgICAgICAgIGNvbmZpZzogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGFwcGxlUGF5OiBwcmV2LmFwcGxlUGF5LFxuICAgICAgICAgIGdvb2dsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgZ29vZ2xlUGF5OiBwcmV2Lmdvb2dsZVBheSxcbiAgICAgICAgICBhcHBsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50L2AsIGJhc2VVcmwpO1xuICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmc7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogdXJsLnRvU3RyaW5nKCksXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEN2Y0VsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDIH0pO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCwgQ2FyZEVsZW1lbnQsIENhcmRFeHBpcnlFbGVtZW50LCBDYXJkTnVtYmVyRWxlbWVudCwgRWxlbWVudHNGb3JtLCBGaWVsZE5hbWUsIFBheUluU3RhdGUsIHVzZU9wZW5QYXlFbGVtZW50cyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLGVBQUFDLElBQWEsYUFBQUMsSUFBVyxVQUFBQyxJQUFRLFdBQUFDLFVBQWU7QUFDN0YsU0FBUyxPQUFBQyxJQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsS0FBS0MsU0FBVztBQUN6QixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsUUFBUTtBQUVmLE1BQU1DLEtBQWtCYixHQUFjO0FB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QzsiLAogICJuYW1lcyI6IFsiY3JlYXRlQ29udGV4dCIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJqc3giLCAiRnJhZ21lbnQiLCAieiQxIiwgInY0IiwgImNvbm5lY3RUb0NoaWxkIiwgIkxlIiwgIkVsZW1lbnRzQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAiY29udGV4dCIsICJWdCIsICJIbiIsICJKbiIsICJLbiIsICJabiIsICJXbiIsICJydCIsICJuIiwgIlFuIiwgIlhuIiwgImVyIiwgIkciLCAidHIiLCAidCIsICJyIiwgInMiLCAieCIsICJJIiwgIkMiLCAicCIsICJHdCIsICJ6dCIsICJxdCIsICJZdCIsICJYIiwgIm5yIiwgInFlIiwgInJyIiwgIloiLCAib3IiLCAic3IiLCAiYXIiLCAiaXIiLCAiY3IiLCAibHIiLCAidXIiLCAiZHIiLCAicHIiLCAibXIiLCAieXIiLCAiZnIiLCAiRmUiLCAiX3IiLCAiaHIiLCAiZ3IiLCAid3IiLCAiYnIiLCAidnIiLCAiRXIiLCAibHQiLCAiQ3IiLCAiU3IiLCAiUHIiLCAiRiIsICJrciIsICJBciIsICJCdCIsICJJciIsICJSciIsICJIdCIsICJGciIsICJUciIsICJNciIsICJZZSIsICJmdCIsICJCZSIsICJEciIsICJOciIsICJpIiwgIkxyIiwgIk9yIiwgIlVyIiwgImEiLCAiYyIsICJqciIsICJWIiwgInhyIiwgIiRyIiwgIlZyIiwgIkdyIiwgInpyIiwgInFyIiwgIllyIiwgInciLCAiQnIiLCAiSnQiLCAiS3QiLCAiSHIiLCAiSnIiLCAiYmUiLCAiS3IiLCAiWnIiLCAiWnQiLCAiV3IiLCAiUXIiLCAiWHIiLCAiX3QiLCAiV3QiLCAiaHQiLCAiUXQiLCAiZW8iLCAidG8iLCAiWHQiLCAibm8iLCAicm8iLCAib28iLCAic28iLCAiYW8iLCAiZW4iLCAiaW8iLCAiY28iLCAibG8iLCAidW8iLCAicG8iLCAibmUiLCAiaG4iLCAicGUiLCAiayIsICJvdCIsICJhZSIsICJtbyIsICJfIiwgInRuIiwgImhlIiwgIlZlIiwgIkdlIiwgIl9lIiwgInlvIiwgIm0iLCAiZiIsICJoIiwgImIiLCAiZm8iLCAiTCIsICJIZSIsICJYZSIsICJ6ZSIsICJUZSIsICJndCIsICJybiIsICJvbiIsICJzbiIsICJhbiIsICJ3dCIsICJqZSIsICJ1dCIsICJ3byIsICJzdCIsICJfbyIsICJldCIsICJobyIsICJPZSIsICJnbyIsICJkdCIsICJibyIsICJ2byIsICJyZSIsICJDbyIsICJidCIsICJFbyIsICJTbyIsICJQbyIsICJrbyIsICJBbyIsICJJbyIsICJ2dCIsICJSbyIsICJGbyIsICJFdCIsICJUbyIsICJDdCIsICJNbyIsICJEbyIsICJObyIsICJMbyIsICJPbyIsICJVbyIsICJqbyIsICJ4byIsICIkbyIsICJWbyIsICJHbyIsICJ6byIsICJxbyIsICJZbyIsICJCbyIsICJIbyIsICJKbyIsICJLbyIsICJabyIsICJXbyIsICJRbyIsICJYbyIsICJlcyIsICJ0cyIsICJucyIsICJycyIsICJvcyIsICJ2IiwgIlMiLCAiQWUiLCAiSmUiLCAiU3QiLCAic3MiLCAiYXMiLCAidHQiLCAiUiIsICJhdCIsICJQdCIsICJpcyIsICJjcyIsICJscyIsICJVZSIsICJ1cyIsICJ5biIsICJkcyIsICJwcyIsICJ4dCIsICJmbiIsICJVIiwgInlzIiwgIm1zIiwgImZzIiwgIlQiLCAidmUiLCAiX3MiLCAiaHMiLCAieiIsICJncyIsICJ3cyIsICJicyIsICJFZSIsICJ2cyIsICJrdCIsICJFcyIsICJwdCIsICJfbiIsICJDcyIsICJtdCIsICJTcyIsICJLIiwgInduIiwgIlBzIiwgImtzIiwgImwiLCAidm4iLCAiZ2kiLCAiTWUiLCAicSIsICJDbiIsICJEZSIsICJBcyIsICJTbiIsICJJcyIsICJScyIsICJLZSIsICJQbiIsICJGcyIsICJUcyIsICJ5dCIsICJNcyIsICJEcyIsICJOcyIsICJMcyIsICJPcyIsICJSbiIsICJGbiIsICJvZSIsICJVcyIsICJ4ZSIsICJqcyIsICJ4cyIsICIkcyIsICJ5IiwgIkUiLCAiU2UiLCAiVG4iLCAiVnMiLCAidSIsICJkIiwgIkEiLCAiR3MiLCAiWmUiLCAiTW4iLCAibnQiLCAiRG4iLCAiV2UiLCAienMiLCAiTm4iLCAiSiIsICJ5ZSIsICJxcyIsICJZcyIsICJNIiwgIlkiLCAiTyIsICJtZSIsICJCbiIsICJOZSIsICJpZSIsICJRZSIsICJjZSIsICJDZSIsICJPbiIsICJCcyIsICJIcyIsICIkZSIsICJVbiIsICJKcyIsICJLcyIsICJ1ZSIsICJQZSIsICJacyIsICJXcyIsICJRcyIsICJqbiIsICJYcyIsICJlYSIsICJ4biIsICJpdCIsICJ0YSIsICJuYSIsICJyYSIsICJvYSIsICJnZSIsICJSZSIsICJzYSIsICIkbiIsICJhYSIsICJpYSIsICJBdCIsICJjYSIsICJsYSIsICJ1YSIsICJkYSIsICJwYSIsICJQIiwgIkl0IiwgIlJ0IiwgIm1hIiwgImdhIiwgImhhIiwgInlhIiwgImZhIiwgIl9hIiwgIndhIiwgImJhIiwgIiQiLCAidmEiLCAiRWEiLCAiRnQiLCAiQ2EiLCAiU2EiLCAiVyIsICJUdCIsICJQYSIsICJrYSIsICJNdCIsICJBYSIsICJJYSIsICJSYSIsICJGYSIsICJEYSIsICJUYSIsICJNYSIsICJqIiwgIk5hIiwgIkxhIiwgIk9hIiwgImZlIiwgIlVhIiwgInhhIiwgImphIiwgIiRhIiwgIlZhIiwgImxlIiwgIkdhIiwgIkduIiwgInphIiwgInFhIiwgIllhIiwgIkJhIiwgInNlIiwgIkhhIiwgIkphIiwgIkthIiwgIkIiLCAiRHQiLCAiZWUiLCAiY3QiLCAiem4iLCAiSWUiLCAiWmEiLCAicW4iLCAiTnQiLCAiZGUiLCAia2UiLCAiV2EiLCAiUWEiLCAiWGEiLCAibmkiLCAiZWkiLCAidGkiLCAicmkiLCAiWW4iLCAib2kiLCAic2kiLCAiYWkiLCAiaWkiLCAiY2kiLCAibGkiLCAiTHQiLCAidWkiLCAiZGkiLCAicGkiLCAiT3QiLCAiVXQiLCAiUSIsICJIIiwgInRlIiwgImp0IiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJnIiwgInZlcmIiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJfX3JlYWQiLCAiX19zcHJlYWRBcnJheSIsICJmcm9tIiwgInBhY2siLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgImF3YWl0UmV0dXJuIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiZnVsZmlsbCIsICJfX2FzeW5jVmFsdWVzIiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiY3JlYXRlRXJyb3JDbGFzcyIsICJjcmVhdGVJbXBsIiwgIl9zdXBlciIsICJpbnN0YW5jZSIsICJjdG9yRnVuYyIsICJVbnN1YnNjcmlwdGlvbkVycm9yIiwgImVycm9ycyIsICJlcnIiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJpIiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJ6JDEiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJQYXltZW50UHJvY2Vzc29yIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiUGF5SW5TdGF0ZSIsICJQYXlJblN0YXRlMiIsICJMT09QX0xPQURJTkciLCAiUmVxdWlyZWRTdHJpbmciLCAiRmllbGROYW1lIiwgIk9wdGlvbmFsU3RyaW5nIiwgIlBSX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJrZXkiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiRm9ybUNhbGxiYWNrcyIsICJBV1hfTE9BRElORyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiZm9ybUNhbGxiYWNrcyIsICJqdCIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgInVzZVN0YXRlIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInVzZUNhbGxiYWNrIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgInVzZUVmZmVjdCIsICJmb3JtIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJqc3giLCAiRnJhZ21lbnQiLCAiY2hpbGRyZW5Qcm9wcyIsICJFbGVtZW50c0NvbnRleHQiLCAiRWxlbWVudEZyYW1lIiwgImVsZW1lbnRUeXBlIiwgInN0eWxlcyIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJpZnJhbWVSZWYiLCAidXNlUmVmIiwgImVsZW1lbnRTdHlsZSIsICJ1c2VNZW1vIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgInVybCIsICJDYXJkQ3ZjRWxlbWVudCIsICJFbGVtZW50VHlwZUVudW0iLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
|