@getopenpay/openpay-js-react 0.5.11 → 0.5.12
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/{Resource-0djTfVMN-CmYsrpaM.js → Resource-4Hip_NV2-BW-WjUkA.js} +3 -3
- package/dist/{SimpleSpanProcessor-CXAKchog-P4bdmZkd.js → SimpleSpanProcessor-CebhSz7a-BVteoG3Q.js} +7 -7
- package/dist/{detect-resources-C0PkQMRE-ZlIbeXs6.js → detect-resources-RL3Pu86I-CtPz1df5.js} +7 -7
- package/dist/{diag-api-B01V-zDa-Bhv3Glln.js → diag-api-BeajkyBe-SA-ki9jL.js} +2 -2
- package/dist/{index-CecTOTGj.js → index-BqBm8iFn.js} +15 -8
- package/dist/{index-DHY3Uo8p-Bq-Q8Hxf.js → index-Br-PB7OU-DaojMZDA.js} +2 -2
- package/dist/{index-D_6co5B8-BA2hxVb3.js → index-BuMd-yXD-DXUKAYBk.js} +2 -2
- package/dist/{index-i1mAytoD-CdYR3ZEF.js → index-Ce2H2yL4-kzNuB6sz.js} +6 -6
- package/dist/{index-D70Gkmmu-LR3QHogl.js → index-CrRwb0Zu-VZji-URR.js} +6 -6
- package/dist/{index-HZWGf1xw-Cw42pwv4.js → index-DkUhlL4Y-BUkgBYss.js} +2 -2
- package/dist/{index-Bz8Y3G2n-RjNZ0RfV.js → index-DrQwdDbh-C8_v7DQa.js} +5 -5
- package/dist/{index-WNyTR082-ClwmYLMb.js → index-DsmKIl4E-NMeUFqJq.js} +5 -5
- package/dist/{index-gWUrr1w_-CbHVSMxi.js → index-DuC7GwDb-D0_mTzOT.js} +5 -5
- package/dist/{index-BkyaizUM-C72rFmjT.js → index-wBVdMH6e-BqZy1yqo.js} +2 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/{metrics-api-CBxV9rP4-DJyoY8L9.js → metrics-api-DaB1e9Tx-BLMLu7Lz.js} +2 -2
- package/dist/{sdk-info-Cq2lpLy7-U9auX9es.js → sdk-info-BeM1MyuL-CLaoCdLt.js} +2 -2
- package/dist/{url-BlM-ucqw-CdUU-VNp.js → url-Ci3WF3nq-Hce5RF5s.js} +2 -2
- package/dist/{utils-BGmKCd_i-DwBo7-H4.js → utils-BSPmFWfw-xEOOWx1I.js} +2 -2
- package/dist/{utils-CzKFZ2H4-CExO3WGf.js → utils-CX3U2dW9-BvSAkcK9.js} +4 -4
- package/package.json +1 -1
|
@@ -229,7 +229,8 @@ const oa = ge.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), ia = n.ob
|
|
|
229
229
|
type: n.literal(ge.enum.CHECKOUT_SUCCESS),
|
|
230
230
|
invoiceUrls: n.array(n.string()),
|
|
231
231
|
subscriptionIds: n.array(n.string()),
|
|
232
|
-
customerId: n.string()
|
|
232
|
+
customerId: n.string(),
|
|
233
|
+
paymentMethodId: P
|
|
233
234
|
}), ca = n.discriminatedUnion("type", [
|
|
234
235
|
Bi,
|
|
235
236
|
Zi,
|
|
@@ -272,6 +273,7 @@ const Lr = n.object({
|
|
|
272
273
|
invoice_urls: n.array(n.string()),
|
|
273
274
|
subscription_ids: n.array(n.string()),
|
|
274
275
|
customer_id: n.string(),
|
|
276
|
+
payment_method_id: U(n.string()),
|
|
275
277
|
processors_used: U(n.array(n.string()))
|
|
276
278
|
}), la = n.object({
|
|
277
279
|
elementType: n.string(),
|
|
@@ -464,7 +466,8 @@ const ro = n.object({
|
|
|
464
466
|
}), pn = n.object({
|
|
465
467
|
created: n.array(Pa),
|
|
466
468
|
invoices: n.array(Ca),
|
|
467
|
-
processors_used: k(n.array(n.string()))
|
|
469
|
+
processors_used: k(n.array(n.string())),
|
|
470
|
+
payment_method_id: k(n.string())
|
|
468
471
|
}), Aa = n.object({
|
|
469
472
|
preview: pn,
|
|
470
473
|
preview_post_trial: k(pn),
|
|
@@ -2484,7 +2487,8 @@ const bc = ve.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), wc = n.ob
|
|
|
2484
2487
|
type: n.literal(ve.enum.CHECKOUT_SUCCESS),
|
|
2485
2488
|
invoiceUrls: n.array(n.string()),
|
|
2486
2489
|
subscriptionIds: n.array(n.string()),
|
|
2487
|
-
customerId: n.string()
|
|
2490
|
+
customerId: n.string(),
|
|
2491
|
+
paymentMethodId: S
|
|
2488
2492
|
}), Sc = n.discriminatedUnion("type", [
|
|
2489
2493
|
cc,
|
|
2490
2494
|
uc,
|
|
@@ -2526,6 +2530,7 @@ const St = n.object({
|
|
|
2526
2530
|
invoice_urls: n.array(n.string()),
|
|
2527
2531
|
subscription_ids: n.array(n.string()),
|
|
2528
2532
|
customer_id: n.string(),
|
|
2533
|
+
payment_method_id: G(n.string()),
|
|
2529
2534
|
processors_used: G(n.array(n.string()))
|
|
2530
2535
|
}), Cc = n.object({
|
|
2531
2536
|
elementType: n.string(),
|
|
@@ -2712,7 +2717,8 @@ const Po = n.object({
|
|
|
2712
2717
|
}), Sn = n.object({
|
|
2713
2718
|
created: n.array(zc),
|
|
2714
2719
|
invoices: n.array(Zc),
|
|
2715
|
-
processors_used: C(n.array(n.string()))
|
|
2720
|
+
processors_used: C(n.array(n.string())),
|
|
2721
|
+
payment_method_id: C(n.string())
|
|
2716
2722
|
}), Co = n.object({
|
|
2717
2723
|
preview: Sn,
|
|
2718
2724
|
preview_post_trial: C(Sn),
|
|
@@ -2984,7 +2990,8 @@ ${e.message}`), e.message);
|
|
|
2984
2990
|
a.result.invoice_urls,
|
|
2985
2991
|
a.result.subscription_ids,
|
|
2986
2992
|
a.result.customer_id,
|
|
2987
|
-
a.result.processors_used ?? []
|
|
2993
|
+
a.result.processors_used ?? [],
|
|
2994
|
+
a.result.payment_method_id ?? ""
|
|
2988
2995
|
);
|
|
2989
2996
|
else
|
|
2990
2997
|
throw new Error(`Unhandled mode: ${a}`);
|
|
@@ -8666,7 +8673,7 @@ let Yn;
|
|
|
8666
8673
|
const Um = async (e, t) => {
|
|
8667
8674
|
if (typeof window > "u")
|
|
8668
8675
|
return;
|
|
8669
|
-
const r = await import("./index-
|
|
8676
|
+
const r = await import("./index-DuC7GwDb-D0_mTzOT.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-CrRwb0Zu-VZji-URR.js"), { FetchInstrumentation: c } = s, l = await import("./index-wBVdMH6e-BqZy1yqo.js"), { ZoneContextManager: u } = l, d = await import("./index-Ce2H2yL4-kzNuB6sz.js"), { registerInstrumentations: _ } = d, f = await import("./index-DsmKIl4E-NMeUFqJq.js"), { Resource: p } = f, h = await import("./detect-resources-RL3Pu86I-CtPz1df5.js").then((ue) => ue.d), { detectResourcesSync: y } = h, g = await import("./index-Br-PB7OU-DaojMZDA.js"), { OTLPTraceExporter: v } = g, b = await import("./index-DkUhlL4Y-BUkgBYss.js"), { B3Propagator: E, B3InjectEncoding: L } = b, A = await import("./index-BuMd-yXD-DXUKAYBk.js"), { BatchSpanProcessor: I } = A;
|
|
8670
8677
|
xr(`Initializing tracer with version ${e} and baseUrl ${t}`);
|
|
8671
8678
|
const V = Gm(t);
|
|
8672
8679
|
xr(`Using collector URL ${V}`);
|
|
@@ -9239,7 +9246,7 @@ const Hm = (e, t, r) => {
|
|
|
9239
9246
|
(a = z()) == null || a.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), bu(), this.registeredElements = null, delete window.ojs, w("form_destroyed");
|
|
9240
9247
|
}, this.updateCallbacks = (a) => {
|
|
9241
9248
|
this.formCallbacks.setCallbacks(a);
|
|
9242
|
-
}, Bt.assignAsSingleton(this), this.ojsVersion = "0.5.
|
|
9249
|
+
}, Bt.assignAsSingleton(this), this.ojsVersion = "0.5.12", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = xm.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Ye()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new $m(), this.deviceToken = ni(), vu();
|
|
9243
9250
|
const { framework: o, version: i } = Rm();
|
|
9244
9251
|
Uo(this.baseUrl).then((a) => {
|
|
9245
9252
|
if (!Ur.current.isSuccess) {
|
|
@@ -9436,4 +9443,4 @@ export {
|
|
|
9436
9443
|
ec as v,
|
|
9437
9444
|
Xm as w
|
|
9438
9445
|
};
|
|
9439
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA1fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogYXMgeiQxIH0gZnJvbSAnem9kJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsganN4LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8sIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiTElORTFcIl0gPSBcImxpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMlwiXSA9IFwibGluZTJcIjtcbiAgRmllbGROYW1lMltcIkxJTkUzXCJdID0gXCJsaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTFcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMlwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUzXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfQ0lUWVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzQ2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfU1RBVEVcIl0gPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DT1VOVFJZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19aSVBfQ09ERVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXCJdID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0RFX0JSSURHRVwiXSA9IFwiY2RlLWJyaWRnZVwiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEuZW51bShbXCJjYXJkXCIsIFwiY2FyZC1udW1iZXJcIiwgXCJjYXJkLWV4cGlyeVwiLCBcImNhcmQtY3ZjXCIsIFwiY2RlLWJyaWRnZVwiXSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgQmFzZUVsZW1lbnRzU3R5bGUgPSB6JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlclN0eWxlOiB6JDEub2JqZWN0KHtcbiAgICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHokMS5vYmplY3Qoe1xuICAgIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gICAgY3ZjOiBPcHRpb25hbFN0cmluZ1xuICB9KS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIFRoZSBjYXJkIGljb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYXJkIG51bWJlciBpbnB1dCBmaWVsZFxuICAgKiBJdCB3b24ndCBhZmZlY3QgYWZ0ZXIgdGhlIGljb24gY2hhbmdlZCB0byBjYXJkIGJyYW5kIGFmdGVyIHRoZSB1c2VyIGlucHV0IHRoZSBjYXJkIG51bWJlclxuICAgKi9cbiAgaWNvbjogeiQxLm9iamVjdCh7XG4gICAgY29sb3I6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHokMS5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHokMS5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yc191c2VkOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBV1hCYW5rID0geiQxLm9iamVjdCh7XG4gIGJhbmtfbmFtZTogeiQxLnN0cmluZygpLFxuICBkaXNwbGF5X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgcmVzb3VyY2VzOiB6JDEub2JqZWN0KHtcbiAgICBsb2dvX3VybDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSlcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGF2YWlsYWJsZV9iYW5rczogbnVsbE9yVW5kZWZPciQxKHokMS5hcnJheShBV1hCYW5rKSlcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKVxufSk7XG5jb25zdCBFRlRGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBpbnN0aXR1dGlvbk51bWJlcjogeiQxLnN0cmluZygpLFxuICB0cmFuc2l0TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHokMS5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogRUZURm9ybURhdGEub3B0aW9uYWwoKVxufSk7XG5jb25zdCBCQUNTRm9ybURhdGEgPSB6JDEub2JqZWN0KHtcbiAgc29ydENvZGU6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBCQUNTRm9ybURhdGEub3B0aW9uYWwoKVxufSk7XG5jb25zdCBTRVBBRm9ybURhdGEgPSB6JDEub2JqZWN0KHtcbiAgaWJhbjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBTRVBBRm9ybURhdGEub3B0aW9uYWwoKVxufSk7XG5jb25zdCBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpLFxuICBhYmFfcm91dGluZ19udW1iZXI6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBpbnN0aXR1dGlvbl9udW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgdHJhbnNpdF9udW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudF9udW1iZXI6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6JDEub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgc29ydF9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGliYW46IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IHokMS51bmlvbihbXG4gICAgQUNITWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgRUZUTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgQkFDU01pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIFNFUEFNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICB6JDEub2JqZWN0KHsgZXJyb3I6IHokMS5zdHJpbmcoKSB9KVxuICBdKS5vcHRpb25hbCgpXG59KTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc2V0dGluZ3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCksXG4gIHJldHVybl91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBDb21wbGV0ZUFkZHJlc3MgPSB6JDEub2JqZWN0KHtcbiAgbGluZTE6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogeiQxLnN0cmluZygpLFxuICB6aXBfY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3MsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBDb21wbGV0ZUFkZHJlc3Mub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG4gIHVzZV91bmlmaWVkX2NjX2Zsb3c6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPcihDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBldmVudHM6IHokMS5hcnJheShcbiAgICB6JDEub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICAgIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56JDEuYW55KCkub3B0aW9uYWwoKTtcbnokMS5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHt9KTtcbnokMS5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogeiQxLnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6JDEuc3RyaW5nKClcbn0pLmNhdGNoYWxsKHokMS5hbnkoKSk7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke2NoYWxrLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtjaGFsay5yZWQuYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cblxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XG4gIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xufTtcblxuZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/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+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKHRpbWVvdXRDb25maWcudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5fc3ViamVjdC5waXBlKHRpbWVvdXQodGltZW91dFBhcmFtcykpKTtcbiAgICB9O1xuICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogZmFsc2UgfTtcbiAgICB0aGlzLl9zdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuXG56JDEuZW51bShbXCJkZXZcIiwgXCJzdGdcIiwgXCJwcm9kXCJdKTtcbmNvbnN0IGNvbm50b0Jhc2VVcmxzID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59O1xuY29uc3QgZ2V0Q29ubnRvVXJsID0gKGVudikgPT4ge1xuICByZXR1cm4gY29ubnRvQmFzZVVybHNbZW52XTtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5jb25zdCBnZXRXaW5kb3dTYWZlID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIHdpbmRvdztcbn07XG5cbmNvbnN0IG1ldHJpY3NQdWJsaXNoZXIgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuY29uc3QgTUVUUklDU19RVUVVRV9LRVkgPSBcIm9wX21ldHJpY3NfcXVldWVcIjtcbmNvbnN0IE1BWF9SRVRSWV9BVFRFTVBUUyA9IDM7XG5jb25zdCBCQVRDSF9TSVpFID0gMztcbmNvbnN0IEJBVENIX0lOVEVSVkFMX01TID0gMWUzO1xuY29uc3QgeyBsb2dfXzogbG9nX18kMSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgTWV0cmljc1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gMDtcbiAgICB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fJDEoXCJOZXR3b3JrIG9ubGluZSwgcHJvY2Vzc2luZyBtZXRyaWNzIHF1ZXVlXCIpO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9O1xuICAgIHRoaXMubG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmFkZEV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gIH1cbiAgYWRkRXZlbnQoZXZlbnROYW1lLCBwcm9wZXJ0aWVzLCBjb250ZXh0UHJvcGVydGllcykge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnROYW1lLFxuICAgICAgcHJvcGVydGllczogcHJvcGVydGllcyB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBjb250ZXh0UHJvcGVydGllcyB8fCB7fSxcbiAgICAgIG5vbmNlOiB2NCgpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZGF0ZXRpbWU6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIGF0dGVtcHRDb3VudDogMCxcbiAgICAgIHRpbWVEaWZmRnJvbVByZXZpb3VzRXZlbnQ6IHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wIDogMFxuICAgIH07XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSBldmVudC50aW1lc3RhbXA7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RvcmVkUXVldWUgPSBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZT8uZ2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSk7XG4gICAgICBpZiAoc3RvcmVkUXVldWUpIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkUXVldWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgIH1cbiAgfVxuICBzYXZlUXVldWVUb1N0b3JhZ2UoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShNRVRSSUNTX1FVRVVFX0tFWSwgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWV1ZSkpO1xuICB9XG4gIHNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGNvbnN0IHNhZmVXaW5kb3cgPSBnZXRXaW5kb3dTYWZlKCk7XG4gICAgaWYgKHNhZmVXaW5kb3cgJiYgbmF2aWdhdG9yLm9uTGluZSAmJiAhdGhpcy5wcm9jZXNzaW5nUXVldWUgJiYgdGhpcy5xdWV1ZS5sZW5ndGggPiAwICYmICF0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBzYWZlV2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgICB9LCBCQVRDSF9JTlRFUlZBTF9NUyk7XG4gICAgfVxuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBpZiAodGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIGdldFdpbmRvd1NhZmUoKT8uY2xlYXJUaW1lb3V0KHRoaXMuYmF0Y2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgfVxuICBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYgKCFuYXZpZ2F0b3Iub25MaW5lIHx8IHRoaXMucHJvY2Vzc2luZ1F1ZXVlIHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbmRCYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCBjb250ZXh0ID0gbWV0cmljc1B1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZSh2b2lkIDApO1xuICAgIGlmICghY29udGV4dCkge1xuICAgICAgbG9nX18kMShcIk1ldHJpY3MgY29udGV4dCBub3QgYXZhaWxhYmxlLCB3aWxsIHJldHJ5IGxhdGVyXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXRjaCA9IHRoaXMucXVldWUuc2xpY2UoMCwgQkFUQ0hfU0laRSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhdGNoUGF5bG9hZCA9IHtcbiAgICAgICAgZXZlbnRzOiBiYXRjaC5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50X25hbWU6IGV2ZW50LmV2ZW50TmFtZSxcbiAgICAgICAgICAgIGRldmljZV90b2tlbjogY29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICAgIGNvbnRleHRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5jb250ZXh0LFxuICAgICAgICAgICAgICAuLi5ldmVudC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgbm9uY2U6IGV2ZW50Lm5vbmNlLFxuICAgICAgICAgICAgICBkYXRldGltZTogZXZlbnQuZGF0ZXRpbWUsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogZXZlbnQudGltZURpZmZGcm9tUHJldmlvdXNFdmVudCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiBjb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAgIC4uLmV2ZW50LnByb3BlcnRpZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbm50b1VybCA9IGdldENvbm50b1VybChjb250ZXh0LmVudmlyb25tZW50KTtcbiAgICAgIGNvbnN0IG1ldHJpY3NSb3V0ZXIgPSBuZXcgVVJMKFwiL21ldHJpY3MvcHVibGljL2NhcHR1cmVcIiwgY29ubnRvVXJsKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWV0cmljc1JvdXRlci50b1N0cmluZygpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShiYXRjaFBheWxvYWQpLFxuICAgICAgICBrZWVwYWxpdmU6IHRydWVcbiAgICAgICAgLy8gVG8gc2VuZCBldmVudHMgZXZlbiBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZFxuICAgICAgfSk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IHRoaXMucXVldWUuc2xpY2UoYmF0Y2gubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dfXyQxKFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBlcnJvcik7XG4gICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpIHtcbiAgICBiYXRjaC5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgZXZlbnQuYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgZXZlbnRzVG9LZWVwID0gYmF0Y2guZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYXR0ZW1wdENvdW50IDwgTUFYX1JFVFJZX0FUVEVNUFRTKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgIHRoaXMucXVldWUgPSBbLi4uZXZlbnRzVG9LZWVwLCAuLi50aGlzLnF1ZXVlXTtcbiAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICB9XG4gIGNsZWFudXAoKSB7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbm5ldyBNZXRyaWNzUXVldWUoKTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBleHRyYWN0SXNzdWVzUGVyRmllbGQgPSAoZXJyb3IpID0+IHtcbiAgY29uc3QgaXNzdWVzUGVyRmllbGQgPSB7fTtcbiAgT2JqZWN0LmVudHJpZXMoZXJyb3IpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBGaWVsZE5hbWVFbnVtLnBhcnNlKGtleSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlLl9lcnJvcnMpKSB7XG4gICAgICAgIGlzc3Vlc1BlckZpZWxkW2ZpZWxkTmFtZV0gPSB2YWx1ZS5fZXJyb3JzO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc3N1ZXNQZXJGaWVsZDtcbn07XG5cbmNvbnN0IHsgbG9nX18sIGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IGNyZWF0ZUR5bmFtaWNWYWxpZGF0aW9uU2NoZW1hID0gKHtcbiAgcmVxdWlyZV96aXBfY29kZSxcbiAgcmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcyxcbiAgcmVxdWlyZV9mdWxsX3NoaXBwaW5nX2FkZHJlc3MsXG4gIHBheW1lbnRfbWV0aG9kXG59KSA9PiB7XG4gIGNvbnN0IGNvbmRpdGlvbmFsRmllbGRzID0ge307XG4gIGlmIChwYXltZW50X21ldGhvZCA9PT0gXCJhY2hcIikge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IHokMS5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IHokMS5zdHJpbmcoKS5taW4oMiwgeyBtZXNzYWdlOiBcIk1pbmltdW0gbGVuZ3RoIGlzIDJcIiB9KTtcbiAgfVxuICBpZiAocmVxdWlyZV96aXBfY29kZSkge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBSZXF1aXJlZFN0cmluZztcbiAgfVxuICBpZiAocmVxdWlyZV9mdWxsX2JpbGxpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkNPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcykge1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gUmVxdWlyZWRTdHJpbmc7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX1pJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChPYmplY3Qua2V5cyhjb25kaXRpb25hbEZpZWxkcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFJlcXVpcmVkRm9ybUZpZWxkcztcbiAgfVxuICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzLmV4dGVuZChjb25kaXRpb25hbEZpZWxkcyk7XG59O1xuY29uc3QgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yLCBkZWZhdWx0RmllbGRWYWx1ZXMgPSB7fSkgPT4ge1xuICBpZiAoZGVmYXVsdEZpZWxkVmFsdWVzKSB7XG4gICAgbG9nX18oYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRGaWVsZFZhbHVlcyl9YCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWZhdWx0RmllbGRWYWx1ZXNba2V5XTtcbiAgICAgIGlmICghbm9uQ2RlRm9ybUlucHV0c1trZXldKSB7XG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddID0gISFub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddO1xuICBpZiAobm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSkge1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUxXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FMl0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FMl07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTNdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTNdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NJVFldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ0lUWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfU1RBVEVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU1RBVEVdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0NPVU5UUlldID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdO1xuICB9XG4gIGNvbnN0IHZhbGlkYXRpb25TY2hlbWEgPSBjcmVhdGVEeW5hbWljVmFsaWRhdGlvblNjaGVtYShkZWZhdWx0RmllbGRWYWx1ZXMpO1xuICBjb25zdCByZXN1bHQgPSB2YWxpZGF0aW9uU2NoZW1hLnNhZmVQYXJzZShub25DZGVGb3JtSW5wdXRzKTtcbiAgaWYgKCFyZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHJlc3VsdC5lcnJvci5mb3JtYXQoKTtcbiAgICBjb25zdCBpc3N1ZXMgPSBleHRyYWN0SXNzdWVzUGVyRmllbGQoZm9ybWF0dGVkKTtcbiAgICBjb25zdCBpc3N1ZUtleXMgPSBPYmplY3Qua2V5cyhpc3N1ZXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBpc3N1ZUtleXNbaV07XG4gICAgICBjb25zdCBlcnJvcnMgPSBpc3N1ZXNbZmllbGROYW1lXTtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyQxKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaXNzdWVzKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbG1vc3QgdGhlcmUhIEp1c3QgYSBmZXcgdGhpbmdzIGhpZ2hsaWdodGVkIGFib3ZlIHRvIGZpeCBiZWZvcmUgeW91IGNhbiBzdWJtaXQuXCIpO1xuICB9XG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6JDEuZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCIsIFwiYWR5ZW5cIiwgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiwgXCJsb29wXCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKTtcbnokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0ZXBfdXBfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGFjY2Vzc190b2tlbjogeiQxLnN0cmluZygpLFxuICBkZF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBkZF90b2tlbjogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1lcmNoYW50X2RhdGE6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgRW52aXJvbm1lbnQgPSAvKiBAX19QVVJFX18gKi8gKChFbnZpcm9ubWVudDIpID0+IHtcbiAgRW52aXJvbm1lbnQyW1wiTG9jYWxcIl0gPSBcImxvY2FsXCI7XG4gIEVudmlyb25tZW50MltcIkRldmVsb3BtZW50XCJdID0gXCJkZXZlbG9wbWVudFwiO1xuICBFbnZpcm9ubWVudDJbXCJTdGFnaW5nXCJdID0gXCJzdGFnaW5nXCI7XG4gIEVudmlyb25tZW50MltcIkRlbW9cIl0gPSBcImRlbW9cIjtcbiAgRW52aXJvbm1lbnQyW1wiUHJvZHVjdGlvblwiXSA9IFwicHJvZHVjdGlvblwiO1xuICByZXR1cm4gRW52aXJvbm1lbnQyO1xufSkoRW52aXJvbm1lbnQgfHwge30pO1xudmFyIFBheUluRmFpbGVkID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5GYWlsZWQyKSA9PiB7XG4gIFBheUluRmFpbGVkMltcIk1FVEhPRF9DUkVBVElPTl9GQUlMRURcIl0gPSBcIm1ldGhvZENyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9CQUxBTkNFXCJdID0gXCJpbnN1ZmZpY2llbnRCYWxhbmNlXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9BVVRIT1JJWkFUSU9OXCJdID0gXCJpbnN1ZmZpY2llbnRBdXRob3JpemF0aW9uXCI7XG4gIFBheUluRmFpbGVkMltcIlNJR05FRF9NRVNTQUdFX1JFUVVJUkVEXCJdID0gXCJzaWduZWRNZXNzYWdlUmVxdWlyZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiQ1VTVE9NRVJfQ1JFQVRJT05fRkFJTEVEXCJdID0gXCJjdXN0b21lckNyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlBBWU1FTlRfRkFJTEVEXCJdID0gXCJwYXltZW50RmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlRSQU5TQUNUSU9OX0ZBSUxFRFwiXSA9IFwidHJhbnNhY3Rpb25GYWlsZWRcIjtcbiAgcmV0dXJuIFBheUluRmFpbGVkMjtcbn0pKFBheUluRmFpbGVkIHx8IHt9KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19QQVlNRU5UX01FVEhPRFwiXSA9IFwiY3JlYXRpbmdQYXltZW50TWV0aG9kXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJBVVRIT1JJWkVEXCJdID0gXCJhdXRob3JpemVkXCI7XG4gIHJldHVybiBQYXlJblN0YXRlMjtcbn0pKFBheUluU3RhdGUgfHwge30pO1xuXG5jb25zdCBMT09QX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBjb25maWc6IG51bGwsXG4gIHdpZGdldDogbnVsbFxufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3QoeyBjbGllbnRfaWQ6IHokMS5zdHJpbmcoKSB9KSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcImNhcmRcIl0gPSBcImNhcmRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhcHBsZVBheVwiXSA9IFwiYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiZ29vZ2xlUGF5XCJdID0gXCJnb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFkeWVuR29vZ2xlUGF5XCJdID0gXCJhZHllbi1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5BcHBsZVBheVwiXSA9IFwiYWR5ZW4tYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QUNIXCJdID0gXCJhaXJ3YWxsZXgtYWNoXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4RUZUXCJdID0gXCJhaXJ3YWxsZXgtZWZ0XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QkFDU1wiXSA9IFwiYWlyd2FsbGV4LWJhY3NcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhTRVBBXCJdID0gXCJhaXJ3YWxsZXgtc2VwYVwiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBwcm9jZXNzb3JzOiBbXSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcbmNvbnN0IGdldEFwcGxlUGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgYXBwbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LCBpbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXksIGluaXRGbG93cy5hZHllbkFwcGxlUGF5XTtcbiAgY29uc3QgYXBwbGVQYXlJbml0UmVzdWx0cyA9IFtdO1xuICBhcHBsZVBheUluaXRGbG93cy5mb3JFYWNoKChmbG93KSA9PiB7XG4gICAgY29uc3QgZmxvd1ZhbHVlID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgaWYgKGZsb3dWYWx1ZT8uaXNBdmFpbGFibGUpIHtcbiAgICAgIGFwcGxlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNBcHBsZVBheUF2YWlsYWJsZSA9IHN0cmlwZVBSRmxvd1Jlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgaWYgKGlzQXBwbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGFwcGxlUGF5SW5pdFJlc3VsdHMucHVzaCh7XG4gICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gICAgICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4gc3RyaXBlUFJGbG93UmVzdWx0LnN0YXJ0RmxvdyhcImFwcGxlX3BheVwiLCB7XG4gICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBhcHBsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogYXBwbGVQYXlJbml0UmVzdWx0cy5sZW5ndGggPiAwLFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiB7XG4gICAgICByZXR1cm4gc3RhcnRBcHBsZVBheUZsb3coYXBwbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3QgZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyA9IChpbml0Rmxvd3MpID0+IHtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdEZsb3dzID0gW2luaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRHb29nbGVQYXksIGluaXRGbG93cy5hZHllbkdvb2dsZVBheV07XG4gIGNvbnN0IGdvb2dsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGdvb2dsZVBheUluaXRGbG93cy5mb3JFYWNoKChmbG93KSA9PiB7XG4gICAgY29uc3QgZmxvd1ZhbHVlID0gZmxvdy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgaWYgKGZsb3dWYWx1ZT8uaXNBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goZmxvd1ZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzdHJpcGVQUkZsb3dSZXN1bHQgPSBpbml0Rmxvd3Muc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICBpZiAoc3RyaXBlUFJGbG93UmVzdWx0Py5pc0F2YWlsYWJsZSkge1xuICAgIGNvbnN0IGlzR29vZ2xlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXk7XG4gICAgaWYgKGlzR29vZ2xlUGF5QXZhaWxhYmxlKSB7XG4gICAgICBnb29nbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiZ29vZ2xlX3BheVwiLCB7XG4gICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogY3VzdG9tUGFyYW1zPy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcm9jZXNzb3JzOiBnb29nbGVQYXlJbml0UmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciksXG4gICAgaXNBdmFpbGFibGU6IGdvb2dsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEdvb2dsZVBheUZsb3coZ29vZ2xlUGF5SW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICB9O1xufTtcbmNvbnN0IHN0YXJ0QXBwbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQXBwbGUgUGF5IHByb2Nlc3NvciAke2N1c3RvbVBhcmFtcy5wcm9jZXNzb3J9IGlzIG5vdCBhdmFpbGFibGVgKTtcbiAgfVxuICBjb25zdCBhdmFpbGFibGVGbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQuaXNBdmFpbGFibGUpO1xuICBpZiAoYXZhaWxhYmxlRmxvdykge1xuICAgIHJldHVybiBhdmFpbGFibGVGbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcIk5vIGF2YWlsYWJsZSBBcHBsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcbmNvbnN0IHN0YXJ0R29vZ2xlUGF5RmxvdyA9IChpbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKSA9PiB7XG4gIGlmIChjdXN0b21QYXJhbXM/LnByb2Nlc3Nvcikge1xuICAgIGNvbnN0IGZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IgPT09IGN1c3RvbVBhcmFtcy5wcm9jZXNzb3IpO1xuICAgIGlmIChmbG93Py5pc0F2YWlsYWJsZSkge1xuICAgICAgcmV0dXJuIGZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgU3BlY2lmaWVkIEdvb2dsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEdvb2dsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50L2AsIGJhc2VVcmwpO1xuICB1cmwuc2VhcmNoID0gcXVlcnlTdHJpbmc7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogdXJsLnRvU3RyaW5nKCksXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkQ3ZjRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkMgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5mdW5jdGlvbiBnbyhlLCB0KSB7XG4gIHZhciByID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICByID8gcihlLCB0KSA6IGUuX19wcm90b19fID0gdDtcbn1cbmZ1bmN0aW9uIHdvKGUsIHQpIHtcbiAgdCA9PT0gdm9pZCAwICYmICh0ID0gZS5jb25zdHJ1Y3Rvcik7XG4gIHZhciByID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIHIgJiYgcihlLCB0KTtcbn1cbnZhciB2byA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihhLCBvKSB7XG4gICAgICBhLl9fcHJvdG9fXyA9IG87XG4gICAgfSB8fCBmdW5jdGlvbihhLCBvKSB7XG4gICAgICBmb3IgKHZhciBzIGluIG8pXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBzKSAmJiAoYVtzXSA9IG9bc10pO1xuICAgIH0sIGUociwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih0LCByKSB7XG4gICAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgZSh0LCByKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gICAgfVxuICAgIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAobi5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIGJvID0gZnVuY3Rpb24oZSkge1xuICB2byh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIGEgPSB0aGlzLmNvbnN0cnVjdG9yLCBvID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGEubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBnbyhvLCBhLnByb3RvdHlwZSksIHdvKG8pLCBvO1xuICB9XG4gIHJldHVybiB0O1xufShFcnJvcik7XG5jb25zdCBBID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIlBsZWFzZSBmaWxsIGluIHRoaXMgZmllbGRcIiB9KSwgRSA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKSwgeCA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnZhciBwID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIGUuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCBlLlBIT05FID0gXCJwaG9uZVwiLCBlLkVNQUlMID0gXCJlbWFpbFwiLCBlLkxJTkUxID0gXCJsaW5lMVwiLCBlLkxJTkUyID0gXCJsaW5lMlwiLCBlLkxJTkUzID0gXCJsaW5lM1wiLCBlLkNJVFkgPSBcImNpdHlcIiwgZS5TVEFURSA9IFwic3RhdGVcIiwgZS5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIGUuWklQX0NPREUgPSBcInppcENvZGVcIiwgZS5TSElQUElOR19MSU5FMSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTFcIiwgZS5TSElQUElOR19MSU5FMiA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIiwgZS5TSElQUElOR19MSU5FMyA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTNcIiwgZS5TSElQUElOR19DSVRZID0gXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIsIGUuU0hJUFBJTkdfU1RBVEUgPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIsIGUuU0hJUFBJTkdfQ09VTlRSWSA9IFwic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiLCBlLlNISVBQSU5HX1pJUF9DT0RFID0gXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIsIGUuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiLCBlLlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIGUpKShwIHx8IHt9KTtcbmNvbnN0IFdyID0geiQxLm5hdGl2ZUVudW0ocCk7XG52YXIgWnIgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCBlLkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgZSkpKFpyIHx8IHt9KTtcbmNvbnN0IEtyID0geiQxLm5hdGl2ZUVudW0oWnIpLCBRciA9IHokMS51bmlvbihbV3IsIEtyXSk7XG52YXIgZ2UgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEID0gXCJjYXJkXCIsIGUuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIGUuQ0RFX0JSSURHRSA9IFwiY2RlLWJyaWRnZVwiLCBlKSkoZ2UgfHwge30pO1xuY29uc3QgRW8gPSB6JDEuZW51bShbXCJjYXJkXCIsIFwiY2FyZC1udW1iZXJcIiwgXCJjYXJkLWV4cGlyeVwiLCBcImNhcmQtY3ZjXCIsIFwiY2RlLWJyaWRnZVwiXSksIFJ0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiB4KHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiB4KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIFBvID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pLCBOdCA9IHokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IEUsXG4gIGNvbG9yOiBFLFxuICBmb250RmFtaWx5OiBFLFxuICBmb250U2l6ZTogRSxcbiAgZm9udFdlaWdodDogRSxcbiAgbWFyZ2luOiBFLFxuICBwYWRkaW5nOiBFLFxuICBsZXR0ZXJTcGFjaW5nOiBFLFxuICBsaW5lSGVpZ2h0OiBFLFxuICBoaWRlSWNvbjogRSxcbiAgcGxhY2Vob2xkZXJTdHlsZTogeiQxLm9iamVjdCh7XG4gICAgY29sb3I6IEUsXG4gICAgZm9udFNpemU6IEUsXG4gICAgZm9udFdlaWdodDogRSxcbiAgICBmb250RmFtaWx5OiBFLFxuICAgIGxldHRlclNwYWNpbmc6IEUsXG4gICAgbGluZUhlaWdodDogRVxuICB9KS5vcHRpb25hbCgpXG59KTtcbk50LmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogRSxcbiAgcGxhY2Vob2xkZXI6IHokMS5vYmplY3Qoe1xuICAgIGNhcmROdW1iZXI6IEUsXG4gICAgZXhwaXJ5OiBFLFxuICAgIGN2YzogRVxuICB9KS5vcHRpb25hbCgpXG59KTtcbk50LmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogRSxcbiAgcGxhY2Vob2xkZXI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogVGhlIGNhcmQgaWNvbiBhdCB0aGUgc3RhcnQgb2YgdGhlIGNhcmQgbnVtYmVyIGlucHV0IGZpZWxkXG4gICAqIEl0IHdvbid0IGFmZmVjdCBhZnRlciB0aGUgaWNvbiBjaGFuZ2VkIHRvIGNhcmQgYnJhbmQgYWZ0ZXIgdGhlIHVzZXIgaW5wdXQgdGhlIGNhcmQgbnVtYmVyXG4gICAqL1xuICBpY29uOiB6JDEub2JqZWN0KHtcbiAgICBjb2xvcjogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSkub3B0aW9uYWwoKVxufSk7XG5OdC5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IEUsXG4gIHBsYWNlaG9sZGVyOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5OdC5leHRlbmQoe1xuICBkaXNhYmxlQXV0b0ZpbGw6IEUsXG4gIHBsYWNlaG9sZGVyOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBjZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBTbyA9IGNlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBDbyA9IHokMS5vYmplY3QoeyB0eXBlOiBTbyB9KSwga28gPSBjZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSksIEFvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IGtvLFxuICBlbGVtZW50VHlwZTogS3IsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIElvID0gY2UuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSksIFRvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElvLFxuICBtZXNzYWdlOiBBLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgUm8gPSBjZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBObyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBSbyxcbiAgZWxlbWVudFR5cGU6IFFyLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgRm8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoY2UuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IEFcbn0pLCBNbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChjZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogQSxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogRSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KFJ0KVxufSksIExvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGNlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgRG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoY2UuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pLCAkZSA9IHokMS5vYmplY3Qoe1xuICBlbWFpbDogQS5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBmaXJzdE5hbWU6IEEsXG4gIGxhc3ROYW1lOiBBLFxuICBwcm9tb3Rpb25Db2RlOiBFLFxuICBsaW5lMTogRSxcbiAgbGluZTI6IEUsXG4gIGxpbmUzOiBFLFxuICBjaXR5OiBFLFxuICBzdGF0ZTogRSxcbiAgY291bnRyeTogQSxcbiAgemlwQ29kZTogRSxcbiAgaXNTaGlwcGluZ1NhbWVBc0JpbGxpbmc6IHokMS5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQoITApLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMTogRSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTI6IEUsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUzOiBFLFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBFLFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogRSxcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogRSxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogRVxufSksIHhvID0geiQxLm9iamVjdCh7XG4gIGVtYWlsOiBBLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIGZpcnN0TmFtZTogRSxcbiAgbGFzdE5hbWU6IEUsXG4gIHByb21vdGlvbkNvZGU6IEUsXG4gIGxpbmUxOiBFLFxuICBsaW5lMjogRSxcbiAgbGluZTM6IEUsXG4gIGNpdHk6IEUsXG4gIHN0YXRlOiBFLFxuICBjb3VudHJ5OiBBLFxuICB6aXBDb2RlOiBFLFxuICBpc1NoaXBwaW5nU2FtZUFzQmlsbGluZzogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCghMCksXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUxOiBFLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMjogRSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTM6IEUsXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IEUsXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBFLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBFLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBFXG59KTtcbnokMS5vYmplY3Qoe1xuICBsaW5lMTogQSxcbiAgY2l0eTogQSxcbiAgc3RhdGU6IEEsXG4gIGNvdW50cnk6IEFcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IEEsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IEFcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUxOiBBLFxuICBzaGlwcGluZ0FkZHJlc3NDaXR5OiBBLFxuICBzaGlwcGluZ0FkZHJlc3NTdGF0ZTogQSxcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogQSxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogQVxufSk7XG5jb25zdCBPbyA9IGNlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIFVvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IE9vLFxuICBzZXNzaW9uSWQ6IEEsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogUnQsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogRSxcbiAgcGF5bWVudFJvdXRlSWQ6IEVcbn0pLmV4dGVuZCgkZS5zaGFwZSksIGpvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGNlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksICRvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGNlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgR28gPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIENvLFxuICBBbyxcbiAgVG8sXG4gIE5vLFxuICBGbyxcbiAgTW8sXG4gIFVvLFxuICBqbyxcbiAgJG8sXG4gIExvLFxuICBEb1xuXSksIFZvID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEdvLFxuICBub25jZTogQSxcbiAgZm9ybUlkOiBBLFxuICBlbGVtZW50SWQ6IEFcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogQVxufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHgoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IHgoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHgoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IGl0ID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IHgoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KSwgcW8gPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IHpvID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShxbylcbn0pLCBIbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgem9cbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFJ0LFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiAkZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IHgoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHgoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogUnQsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6ICRlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogeCh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeCh6JDEuc3RyaW5nKCkpXG59KTtcbnZhciBUID0gLyogQF9fUFVSRV9fICovICgoZSkgPT4gKGUuU1VDQ0VTUyA9IFwic3VjY2Vzc1wiLCBlLkZBSUxVUkUgPSBcImZhaWx1cmVcIiwgZS5DQU5DRUxMRUQgPSBcImNhbmNlbGxlZFwiLCBlKSkoVCB8fCB7fSk7XG5jb25zdCBYciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcbiAgICBcInN1Y2Nlc3NcIixcbiAgICBcImZhaWx1cmVcIixcbiAgICBcImNhbmNlbGxlZFwiXG4gICAgLyogQ0FOQ0VMTEVEICovXG4gIF0pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IEJvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgWW8gPSB6JDEub2JqZWN0KHtcbiAgYmFua19uYW1lOiB6JDEuc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogeiQxLnN0cmluZygpLFxuICByZXNvdXJjZXM6IHokMS5vYmplY3Qoe1xuICAgIGxvZ29fdXJsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSksIGVuID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB4KHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB4KHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IHgoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IHgoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiB4KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiB4KHokMS5hcnJheShZbykpXG59KSwgSm8gPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMCksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCExKSB9KVxuXSksIFdvID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBvKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IHgoaXQpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHgoeiQxLmFycmF5KGVuKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IHgoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogeChpdClcbn0pLCBabyA9IHokMS5vYmplY3Qoe1xuICBpbnN0aXR1dGlvbk51bWJlcjogeiQxLnN0cmluZygpLFxuICB0cmFuc2l0TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHokMS5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogWm8ub3B0aW9uYWwoKVxufSk7XG5jb25zdCBLbyA9IHokMS5vYmplY3Qoe1xuICBzb3J0Q29kZTogeiQxLnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEtvLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUW8gPSB6JDEub2JqZWN0KHtcbiAgaWJhbjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBRby5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFhvID0geiQxLm9iamVjdCh7XG4gIGFjY291bnRfbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogeiQxLnN0cmluZygpXG59KSwgZWEgPSB6JDEub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25fbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXRfbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRfbnVtYmVyOiB6JDEuc3RyaW5nKClcbn0pLCB0YSA9IHokMS5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpLFxuICBzb3J0X2NvZGU6IHokMS5zdHJpbmcoKVxufSksIHJhID0geiQxLm9iamVjdCh7XG4gIGliYW46IHokMS5zdHJpbmcoKVxufSksIG5hID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiB6JDEudW5pb24oW1xuICAgIFhvLFxuICAgIGVhLFxuICAgIHRhLFxuICAgIHJhLFxuICAgIHokMS5vYmplY3QoeyBlcnJvcjogeiQxLnN0cmluZygpIH0pXG4gIF0pLm9wdGlvbmFsKClcbn0pLCBQID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3Qgb2EgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgdG4gPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IFAoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IFAoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IFAoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBQKHokMS5udW1iZXIoKSlcbn0pLCBybiA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogUCh6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBQKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IFAoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIGFhID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIGlhID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IFAoYWEpXG59KSwgSGUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFAoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFAoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgc2EgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSksIGNhID0geiQxLm9iamVjdCh7XG4gIGlkOiBQKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IFAoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogUCh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShzYSksXG4gIHRyaWFsX3N0YXJ0OiBQKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogUCh6JDEuc3RyaW5nKCkpXG59KSwgbm4gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSksIGxhID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkobm4pLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KSwgdWEgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiB0blxufSksIGRhID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KHVhKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkobGEpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KG5uKVxufSksIHZyID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShjYSksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoZGEpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IFAoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KSwgb24gPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogdnIsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogUCh2ciksXG4gIGNvdXBvbnM6IHokMS5hcnJheSh0bilcbn0pLCBiciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBQKHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBQKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3NldHRpbmdzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KHJuKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IGlhLFxuICBzdWJzX3ByZXZpZXc6IFAob24pLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShIZSksXG4gIHJldHVybl91cmw6IFAoeiQxLnN0cmluZygpKSxcbiAgc3VjY2Vzc191cmw6IFAoeiQxLnN0cmluZygpKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGFuID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoYnIuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChici5zaGFwZSlcbl0pLCBwYSA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBfYSA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW2FuLCBwYSwgX2FdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHQgPSB6JDEub2JqZWN0KHtcbiAgbGluZTE6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUzOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY2l0eTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHN0YXRlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogeiQxLnN0cmluZygpLFxuICB6aXBfY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9hZGRyZXNzOiBQdCxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUHQub3B0aW9uYWwoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KHJuKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IEhlLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogUCh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3Qgc24gPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IG1hID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShtYSk7XG5jb25zdCBmYSA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogUHQsXG4gIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBQdC5vcHRpb25hbCgpXG59KSwgeWEgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIGNuID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheSh5YSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBoYSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IFAoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBIZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGNuLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKGZhLnNoYXBlKS5leHRlbmQoaGEuc2hhcGUpO1xuY29uc3QgbG4gPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogeG8sXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogSGUsXG4gIHBheW1lbnRfcm91dGVfaWQ6IFAoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiAkZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IEhlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxuICB1c2VfdW5pZmllZF9jY19mbG93OiBQKHokMS5ib29sZWFuKCkpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGNuLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IFAoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogUCh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IGdhID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogUChpdCksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IFAoeiQxLnN0cmluZygpKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogUCh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IFAoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IFAoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IFAoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IFAoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogUCh6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogUCh6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBQKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBQKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBQKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IFAoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBQKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IFAoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBQKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IFAoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBQKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IFAoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3Qgd2EgPSB6JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogSGUsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IFAoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCB2YSA9IHokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogUCh6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBldmVudHM6IHokMS5hcnJheShcbiAgICB6JDEub2JqZWN0KHtcbiAgICAgIGV2ZW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICAgIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgICAgcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gICAgICBjb250ZXh0X3Byb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpXG4gICAgfSlcbiAgKVxufSk7XG56JDEuYW55KCkub3B0aW9uYWwoKTtcbnokMS5vYmplY3Qoe1xuICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBiYSA9IHokMS5vYmplY3Qoe30pLCBFYSA9IHokMS5vYmplY3Qoe1xuICBfdW5pZmllZF9jY19hY3Rpb25fbmFtZTogeiQxLnN0cmluZygpLFxuICBfdW5pZmllZF9jY19wY2NzX2lkOiB6JDEuc3RyaW5nKClcbn0pLmNhdGNoYWxsKHokMS5hbnkoKSksIFBhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KSwgU2EgPSB6JDEuYXJyYXkoUGEpLCBDYSA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBrYSA9IHokMS5hcnJheShDYSksIEFhID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBcIkNvbm5lY3Rpb24gZXJyb3I6IHBsZWFzZSBkb3VibGUgY2hlY2sgaWYgeW91IGFyZSBjb25uZWN0ZWQgdG8gdGhlIGludGVybmV0LCB0aGVuIHRyeSBhZ2FpblwiXG59LCBKdCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gQWFbdF0gPz8gZTtcbn0sIElhID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIEpTT04ucGFyc2UoZSkgPT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBUYSA9IChlKSA9PiBlLmxlbmd0aCA9PT0gMSA/IEp0KGVbMF0ubXNnKSA6IGBQbGVhc2UgZml4IHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtlLm1hcCgocikgPT4gYOKAoiAke0p0KHIubXNnKX1gKS5qb2luKGBcbmApfWAsIFJhID0gKGUpID0+IGBFbmNvdW50ZXJlZCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGAtICR7ci5wYXRoLmpvaW4oXCIvXCIpfTogJHtyLm1lc3NhZ2V9YCkuam9pbihgXG5gKX1gLCBlZSA9IChlKSA9PiB7XG4gIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgaWYgKElhKGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IHQgPSBKU09OLnBhcnNlKGUubWVzc2FnZSk7XG4gICAgICByZXR1cm4gU2Euc2FmZVBhcnNlKHQpLnN1Y2Nlc3MgPyBUYSh0KSA6IGthLnNhZmVQYXJzZSh0KS5zdWNjZXNzID8gUmEodCkgOiAoY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCksIGUubWVzc2FnZSk7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gSnQoZS5tZXNzYWdlKTtcbiAgaWYgKHR5cGVvZiBlID09IFwib2JqZWN0XCIpXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4gdCArIFwiXCI7XG4gICAgfVxuICBlbHNlXG4gICAgcmV0dXJuIGUgKyBcIlwiO1xufSwgTmEgPSAoZSwgdCwgcikgPT4gKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdCguLi5uKTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIHIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2V9KTpgLCBhKTtcbiAgICByZXR1cm47XG4gIH1cbn0sIEZhID0gKGUpID0+IGUucmVkdWNlKCh0LCByKSA9PiB0ICsgciwgMCksIHVuID0gKGUpID0+IHtcbiAgZS5wcmV2ZW50RGVmYXVsdCgpLCBlLnJldHVyblZhbHVlID0gITA7XG59LCBNYSA9ICgpID0+IHtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgdW4pO1xufSwgTGEgPSAoKSA9PiB7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHVuKTtcbn0sIEIgPSAoZSkgPT4ge1xuICBsZXQgdCA9ICExO1xuICByZXR1cm4gYXN5bmMgKHIpID0+IHtcbiAgICB2YXIgbiwgYTtcbiAgICBpZiAodCkge1xuICAgICAgY29uc29sZS53YXJuKFwiU2tpcHBpbmcgc3VibWlzc2lvbiBiZWNhdXNlIGl0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHQgPSAhMDtcbiAgICB0cnkge1xuICAgICAgci5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbiAmJiBNYSgpLCAoYSA9IChuID0gci5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgYS5jYWxsKG4pLCBnKFwiY2hlY2tvdXRfc3RhcnRlZFwiLCB7XG4gICAgICAgIGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbyA9IGF3YWl0IGUocik7XG4gICAgICBpZiAoZyhcImNoZWNrb3V0X3N1Y2Nlc3NcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgICAuLi5vXG4gICAgICB9KSwgTWkoKSwgby5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKG8ucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICAgIGVsc2UgaWYgKG8ubW9kZSA9PT0gXCJjaGVja291dFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICAgIG8ucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgICBvLnJlc3VsdC5zdWJzY3JpcHRpb25faWRzLFxuICAgICAgICAgIG8ucmVzdWx0LmN1c3RvbWVyX2lkLFxuICAgICAgICAgIG8ucmVzdWx0LnByb2Nlc3NvcnNfdXNlZCA/PyBbXVxuICAgICAgICApO1xuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke299YCk7XG4gICAgfSBjYXRjaCAobykge1xuICAgICAgdCA9ICExO1xuICAgICAgY29uc3QgcyA9IGVlKG8pLCBsID0gYXdhaXQgRm4oci5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHMpO1xuICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IocywgbCksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2QsIGVycm9yTWVzc2FnZTogcywgZXJyb3JDb2RlOiBsLCBlcnJvcjogbyB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdCA9ICExLCByLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uICYmIExhKCk7XG4gICAgfVxuICB9O1xufSwgdmUgPSAoZSkgPT4gYXN5bmMgKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IHsgZXJyX186IG4gfSA9IEkoXCJpbml0LWVycm9yLWNhdGNoZXJcIiksIGEgPSBlZShyKSwgbyA9IGF3YWl0IEZuKHQuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBhKTtcbiAgICByZXR1cm4gbihvLCBhLCByKSwgZyhcImluaXRfZmxvd19lcnJvclwiLCB7IGVycm9yTWVzc2FnZTogYSwgZXJyb3JDb2RlOiBvLCBlcnJvcjogciB9KSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogYSwgZXJyb3JDb2RlOiBvLCBpc0xvYWRpbmc6ICExIH07XG4gIH1cbn0sIEkgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coYCR7Y2hhbGsuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9LCByID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS53YXJuKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtlfWApfVx0YCwgLi4ubik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nOiB0LFxuICAgIGVycjogcixcbiAgICBsb2dfXzogdCxcbiAgICBlcnJfXzogclxuICB9O1xufTtcbnZhciBXdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgcmV0dXJuIFd0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24ociwgbikge1xuICAgIHIuX19wcm90b19fID0gbjtcbiAgfSB8fCBmdW5jdGlvbihyLCBuKSB7XG4gICAgZm9yICh2YXIgYSBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgYSkgJiYgKHJbYV0gPSBuW2FdKTtcbiAgfSwgV3QoZSwgdCk7XG59O1xuZnVuY3Rpb24ga2UoZSwgdCkge1xuICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiICYmIHQgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcodCkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBXdChlLCB0KTtcbiAgZnVuY3Rpb24gcigpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZTtcbiAgfVxuICBlLnByb3RvdHlwZSA9IHQgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHQpIDogKHIucHJvdG90eXBlID0gdC5wcm90b3R5cGUsIG5ldyByKCkpO1xufVxuZnVuY3Rpb24gRGEoZSwgdCwgciwgbikge1xuICBmdW5jdGlvbiBhKG8pIHtcbiAgICByZXR1cm4gbyBpbnN0YW5jZW9mIHIgPyBvIDogbmV3IHIoZnVuY3Rpb24ocykge1xuICAgICAgcyhvKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChyIHx8IChyID0gUHJvbWlzZSkpKGZ1bmN0aW9uKG8sIHMpIHtcbiAgICBmdW5jdGlvbiBsKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi5uZXh0KGQpKTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgcyhtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4udGhyb3coZCkpO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBzKG0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGQpIHtcbiAgICAgIGQuZG9uZSA/IG8oZC52YWx1ZSkgOiBhKGQudmFsdWUpLnRoZW4obCwgYyk7XG4gICAgfVxuICAgIHUoKG4gPSBuLmFwcGx5KGUsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkbihlLCB0KSB7XG4gIHZhciByID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKG9bMF0gJiAxKSB0aHJvdyBvWzFdO1xuICAgIHJldHVybiBvWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBhLCBvLCBzID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gcy5uZXh0ID0gbCgwKSwgcy50aHJvdyA9IGwoMSksIHMucmV0dXJuID0gbCgyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKHNbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgcztcbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBjKFt1LCBkXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IHMgJiYgKHMgPSAwLCB1WzBdICYmIChyID0gMCkpLCByOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIGEgJiYgKG8gPSB1WzBdICYgMiA/IGEucmV0dXJuIDogdVswXSA/IGEudGhyb3cgfHwgKChvID0gYS5yZXR1cm4pICYmIG8uY2FsbChhKSwgMCkgOiBhLm5leHQpICYmICEobyA9IG8uY2FsbChhLCB1WzFdKSkuZG9uZSkgcmV0dXJuIG87XG4gICAgICBzd2l0Y2ggKGEgPSAwLCBvICYmICh1ID0gW3VbMF0gJiAyLCBvLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbyA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gci5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgci5sYWJlbCsrLCBhID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSByLm9wcy5wb3AoKSwgci50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChvID0gci50cnlzLCAhKG8gPSBvLmxlbmd0aCA+IDAgJiYgb1tvLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFvIHx8IHVbMV0gPiBvWzBdICYmIHVbMV0gPCBvWzNdKSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgci5sYWJlbCA8IG9bMV0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBvWzFdLCBvID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobyAmJiByLmxhYmVsIDwgb1syXSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IG9bMl0sIHIub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgb1syXSAmJiByLm9wcy5wb3AoKSwgci50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IHQuY2FsbChlLCByKTtcbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICB1ID0gWzYsIGRdLCBhID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IG8gPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBHZShlKSB7XG4gIHZhciB0ID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCByID0gdCAmJiBlW3RdLCBuID0gMDtcbiAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gIGlmIChlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGUgJiYgbiA+PSBlLmxlbmd0aCAmJiAoZSA9IHZvaWQgMCksIHsgdmFsdWU6IGUgJiYgZVtuKytdLCBkb25lOiAhZSB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcih0ID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gU3QoZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGwpIHtcbiAgICBzID0geyBlcnJvcjogbCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59XG5mdW5jdGlvbiBDdChlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBvOyBuIDwgYTsgbisrKVxuICAgIChvIHx8ICEobiBpbiB0KSkgJiYgKG8gfHwgKG8gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIG9bbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KG8gfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufVxuZnVuY3Rpb24gT2UoZSkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIE9lID8gKHRoaXMudiA9IGUsIHRoaXMpIDogbmV3IE9lKGUpO1xufVxuZnVuY3Rpb24geGEoZSwgdCwgcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IHIuYXBwbHkoZSwgdCB8fCBbXSksIGEsIG8gPSBbXTtcbiAgcmV0dXJuIGEgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBsKFwibmV4dFwiKSwgbChcInRocm93XCIpLCBsKFwicmV0dXJuXCIsIHMpLCBhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBhO1xuICBmdW5jdGlvbiBzKGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oeSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh5KS50aGVuKGYsIG0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbChmLCB5KSB7XG4gICAgbltmXSAmJiAoYVtmXSA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LCBTKSB7XG4gICAgICAgIG8ucHVzaChbZiwgaCwgdiwgU10pID4gMSB8fCBjKGYsIGgpO1xuICAgICAgfSk7XG4gICAgfSwgeSAmJiAoYVtmXSA9IHkoYVtmXSkpKTtcbiAgfVxuICBmdW5jdGlvbiBjKGYsIHkpIHtcbiAgICB0cnkge1xuICAgICAgdShuW2ZdKHkpKTtcbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICBfKG9bMF1bM10sIGgpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1KGYpIHtcbiAgICBmLnZhbHVlIGluc3RhbmNlb2YgT2UgPyBQcm9taXNlLnJlc29sdmUoZi52YWx1ZS52KS50aGVuKGQsIG0pIDogXyhvWzBdWzJdLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBkKGYpIHtcbiAgICBjKFwibmV4dFwiLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBtKGYpIHtcbiAgICBjKFwidGhyb3dcIiwgZik7XG4gIH1cbiAgZnVuY3Rpb24gXyhmLCB5KSB7XG4gICAgZih5KSwgby5zaGlmdCgpLCBvLmxlbmd0aCAmJiBjKG9bMF1bMF0sIG9bMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBPYShlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciB0ID0gZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIHI7XG4gIHJldHVybiB0ID8gdC5jYWxsKGUpIDogKGUgPSB0eXBlb2YgR2UgPT0gXCJmdW5jdGlvblwiID8gR2UoZSkgOiBlW1N5bWJvbC5pdGVyYXRvcl0oKSwgciA9IHt9LCBuKFwibmV4dFwiKSwgbihcInRocm93XCIpLCBuKFwicmV0dXJuXCIpLCByW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCByKTtcbiAgZnVuY3Rpb24gbihvKSB7XG4gICAgcltvXSA9IGVbb10gJiYgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsIGMpIHtcbiAgICAgICAgcyA9IGVbb10ocyksIGEobCwgYywgcy5kb25lLCBzLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYShvLCBzLCBsLCBjKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4oZnVuY3Rpb24odSkge1xuICAgICAgbyh7IHZhbHVlOiB1LCBkb25lOiBsIH0pO1xuICAgIH0sIHMpO1xuICB9XG59XG5mdW5jdGlvbiBWKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIEZ0KGUpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihuKSB7XG4gICAgRXJyb3IuY2FsbChuKSwgbi5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCByID0gZSh0KTtcbiAgcmV0dXJuIHIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCByLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHIsIHI7XG59XG52YXIgJHQgPSBGdChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gciA/IHIubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIHIubWFwKGZ1bmN0aW9uKG4sIGEpIHtcbiAgICAgIHJldHVybiBhICsgMSArIFwiKSBcIiArIG4udG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSByO1xuICB9O1xufSk7XG5mdW5jdGlvbiBrdChlLCB0KSB7XG4gIGlmIChlKSB7XG4gICAgdmFyIHIgPSBlLmluZGV4T2YodCk7XG4gICAgMCA8PSByICYmIGUuc3BsaWNlKHIsIDEpO1xuICB9XG59XG52YXIgcHQgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSB0LCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCwgciwgbiwgYSwgbztcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIHMgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAocylcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkocykpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGwgPSBHZShzKSwgYyA9IGwubmV4dCgpOyAhYy5kb25lOyBjID0gbC5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBjLnZhbHVlO1xuICAgICAgICAgICAgICB1LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICB0ID0geyBlcnJvcjogaCB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKHIgPSBsLnJldHVybikgJiYgci5jYWxsKGwpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKHQpIHRocm93IHQuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcy5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgZCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKFYoZCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZCgpO1xuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgbyA9IGggaW5zdGFuY2VvZiAkdCA/IGguZXJyb3JzIDogW2hdO1xuICAgICAgICB9XG4gICAgICB2YXIgbSA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAobSkge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfID0gR2UobSksIGYgPSBfLm5leHQoKTsgIWYuZG9uZTsgZiA9IF8ubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgeSA9IGYudmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBFcih5KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgbyA9IG8gPz8gW10sIGggaW5zdGFuY2VvZiAkdCA/IG8gPSBDdChDdChbXSwgU3QobykpLCBTdChoLmVycm9ycykpIDogby5wdXNoKGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIG4gPSB7IGVycm9yOiBoIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGYgJiYgIWYuZG9uZSAmJiAoYSA9IF8ucmV0dXJuKSAmJiBhLmNhbGwoXyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG8pXG4gICAgICAgIHRocm93IG5ldyAkdChvKTtcbiAgICB9XG4gIH0sIGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAodCAmJiB0ICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBFcih0KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAodCBpbnN0YW5jZW9mIGUpIHtcbiAgICAgICAgICBpZiAodC5jbG9zZWQgfHwgdC5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHQuX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChyID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IFtdKS5wdXNoKHQpO1xuICAgICAgfVxuICB9LCBlLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiByID09PSB0IHx8IEFycmF5LmlzQXJyYXkocikgJiYgci5pbmNsdWRlcyh0KTtcbiAgfSwgZS5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KHIpID8gKHIucHVzaCh0KSwgcikgOiByID8gW3IsIHRdIDogdDtcbiAgfSwgZS5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByID09PSB0ID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkocikgJiYga3QociwgdCk7XG4gIH0sIGUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgciAmJiBrdChyLCB0KSwgdCBpbnN0YW5jZW9mIGUgJiYgdC5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCBlLkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQgPSBuZXcgZSgpO1xuICAgIHJldHVybiB0LmNsb3NlZCA9ICEwLCB0O1xuICB9KCksIGU7XG59KCksIHBuID0gcHQuRU1QVFk7XG5mdW5jdGlvbiBfbihlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgcHQgfHwgZSAmJiBcImNsb3NlZFwiIGluIGUgJiYgVihlLnJlbW92ZSkgJiYgVihlLmFkZCkgJiYgVihlLnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIEVyKGUpIHtcbiAgVihlKSA/IGUoKSA6IGUudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBtbiA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCBmbiA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24oZSwgdCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICByW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIEN0KFtlLCB0XSwgU3QocikpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKGUpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24geW4oZSkge1xuICBmbi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IGU7XG4gIH0pO1xufVxuZnVuY3Rpb24gUHIoKSB7XG59XG5mdW5jdGlvbiB2dChlKSB7XG4gIGUoKTtcbn1cbnZhciB0ciA9IGZ1bmN0aW9uKGUpIHtcbiAga2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHZhciBuID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIG4uaXNTdG9wcGVkID0gITEsIHIgPyAobi5kZXN0aW5hdGlvbiA9IHIsIF9uKHIpICYmIHIuYWRkKG4pKSA6IG4uZGVzdGluYXRpb24gPSBHYSwgbjtcbiAgfVxuICByZXR1cm4gdC5jcmVhdGUgPSBmdW5jdGlvbihyLCBuLCBhKSB7XG4gICAgcmV0dXJuIG5ldyBadChyLCBuLCBhKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IocikpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCB0LnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQocik7XG4gIH0sIHQucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgdDtcbn0ocHQpLCBVYSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gR3QoZSwgdCkge1xuICByZXR1cm4gVWEuY2FsbChlLCB0KTtcbn1cbnZhciBqYSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHQ7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgci5uZXh0KHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICB5dChuKTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIHIuZXJyb3IodCk7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIHl0KG4pO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIHl0KHQpO1xuICB9LCBlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHQuY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICB0LmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgIHl0KHIpO1xuICAgICAgfVxuICB9LCBlO1xufSgpLCBadCA9IGZ1bmN0aW9uKGUpIHtcbiAga2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbiwgYSkge1xuICAgIHZhciBvID0gZS5jYWxsKHRoaXMpIHx8IHRoaXMsIHM7XG4gICAgaWYgKFYocikgfHwgIXIpXG4gICAgICBzID0ge1xuICAgICAgICBuZXh0OiByID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IG4gPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogYSA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbDtcbiAgICAgIG8gJiYgbW4udXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGwgPSBPYmplY3QuY3JlYXRlKHIpLCBsLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBvLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBzID0ge1xuICAgICAgICBuZXh0OiByLm5leHQgJiYgR3Qoci5uZXh0LCBsKSxcbiAgICAgICAgZXJyb3I6IHIuZXJyb3IgJiYgR3Qoci5lcnJvciwgbCksXG4gICAgICAgIGNvbXBsZXRlOiByLmNvbXBsZXRlICYmIEd0KHIuY29tcGxldGUsIGwpXG4gICAgICB9KSA6IHMgPSByO1xuICAgIH1cbiAgICByZXR1cm4gby5kZXN0aW5hdGlvbiA9IG5ldyBqYShzKSwgbztcbiAgfVxuICByZXR1cm4gdDtcbn0odHIpO1xuZnVuY3Rpb24geXQoZSkge1xuICB5bihlKTtcbn1cbmZ1bmN0aW9uICRhKGUpIHtcbiAgdGhyb3cgZTtcbn1cbnZhciBHYSA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogUHIsXG4gIGVycm9yOiAkYSxcbiAgY29tcGxldGU6IFByXG59LCByciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIFZhKGUpIHtcbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBxYShlKSB7XG4gIHJldHVybiBlLmxlbmd0aCA9PT0gMCA/IFZhIDogZS5sZW5ndGggPT09IDEgPyBlWzBdIDogZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBlLnJlZHVjZShmdW5jdGlvbihuLCBhKSB7XG4gICAgICByZXR1cm4gYShuKTtcbiAgICB9LCByKTtcbiAgfTtcbn1cbnZhciB3ZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0ICYmICh0aGlzLl9zdWJzY3JpYmUgPSB0KTtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IG5ldyBlKCk7XG4gICAgcmV0dXJuIHIuc291cmNlID0gdGhpcywgci5vcGVyYXRvciA9IHQsIHI7XG4gIH0sIGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICB2YXIgYSA9IHRoaXMsIG8gPSBIYSh0KSA/IHQgOiBuZXcgWnQodCwgciwgbik7XG4gICAgcmV0dXJuIHZ0KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMgPSBhLCBsID0gcy5vcGVyYXRvciwgYyA9IHMuc291cmNlO1xuICAgICAgby5hZGQobCA/IGwuY2FsbChvLCBjKSA6IGMgPyBhLl9zdWJzY3JpYmUobykgOiBhLl90cnlTdWJzY3JpYmUobykpO1xuICAgIH0pLCBvO1xuICB9LCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHQpO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIHQuZXJyb3Iocik7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24odCwgcikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICByZXR1cm4gciA9IFNyKHIpLCBuZXcgcihmdW5jdGlvbihhLCBvKSB7XG4gICAgICB2YXIgcyA9IG5ldyBadCh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdChsKTtcbiAgICAgICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgICAgICBvKGMpLCBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbyxcbiAgICAgICAgY29tcGxldGU6IGFcbiAgICAgIH0pO1xuICAgICAgbi5zdWJzY3JpYmUocyk7XG4gICAgfSk7XG4gIH0sIGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgcmV0dXJuIChyID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuc3Vic2NyaWJlKHQpO1xuICB9LCBlLnByb3RvdHlwZVtycl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgIHJldHVybiBxYSh0KSh0aGlzKTtcbiAgfSwgZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICByZXR1cm4gdCA9IFNyKHQpLCBuZXcgdChmdW5jdGlvbihuLCBhKSB7XG4gICAgICB2YXIgbztcbiAgICAgIHIuc3Vic2NyaWJlKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIG8gPSBzO1xuICAgICAgfSwgZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gYShzKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbihvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gbmV3IGUodCk7XG4gIH0sIGU7XG59KCk7XG5mdW5jdGlvbiBTcihlKSB7XG4gIHZhciB0O1xuICByZXR1cm4gKHQgPSBlID8/IG1uLlByb21pc2UpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gemEoZSkge1xuICByZXR1cm4gZSAmJiBWKGUubmV4dCkgJiYgVihlLmVycm9yKSAmJiBWKGUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gSGEoZSkge1xuICByZXR1cm4gZSAmJiBlIGluc3RhbmNlb2YgdHIgfHwgemEoZSkgJiYgX24oZSk7XG59XG5mdW5jdGlvbiBCYShlKSB7XG4gIHJldHVybiBWKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGlmdCk7XG59XG5mdW5jdGlvbiBZYShlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgaWYgKEJhKHQpKVxuICAgICAgcmV0dXJuIHQubGlmdChmdW5jdGlvbihyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGUociwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICB0aGlzLmVycm9yKG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBKYShlLCB0LCByLCBuLCBhKSB7XG4gIHJldHVybiBuZXcgV2EoZSwgdCwgciwgbiwgYSk7XG59XG52YXIgV2EgPSBmdW5jdGlvbihlKSB7XG4gIGtlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIGEsIG8sIHMsIGwpIHtcbiAgICB2YXIgYyA9IGUuY2FsbCh0aGlzLCByKSB8fCB0aGlzO1xuICAgIHJldHVybiBjLm9uRmluYWxpemUgPSBzLCBjLnNob3VsZFVuc3Vic2NyaWJlID0gbCwgYy5fbmV4dCA9IG4gPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICByLmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fbmV4dCwgYy5fZXJyb3IgPSBvID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbyh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgci5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2Vycm9yLCBjLl9jb21wbGV0ZSA9IGEgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEoKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgci5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2NvbXBsZXRlLCBjO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciBuID0gdGhpcy5jbG9zZWQ7XG4gICAgICBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhbiAmJiAoKHIgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCB8fCByLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgdDtcbn0odHIpLCBaYSA9IEZ0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgaG4gPSBmdW5jdGlvbihlKSB7XG4gIGtlKHQsIGUpO1xuICBmdW5jdGlvbiB0KCkge1xuICAgIHZhciByID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gITEsIHIuY3VycmVudE9ic2VydmVycyA9IG51bGwsIHIub2JzZXJ2ZXJzID0gW10sIHIuaXNTdG9wcGVkID0gITEsIHIuaGFzRXJyb3IgPSAhMSwgci50aHJvd25FcnJvciA9IG51bGwsIHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSBuZXcgQ3IodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIG4ub3BlcmF0b3IgPSByLCBuO1xuICB9LCB0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBaYSgpO1xuICB9LCB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICB2dChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhLCBvO1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uY3VycmVudE9ic2VydmVycyB8fCAobi5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShuLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIHMgPSBHZShuLmN1cnJlbnRPYnNlcnZlcnMpLCBsID0gcy5uZXh0KCk7ICFsLmRvbmU7IGwgPSBzLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGMgPSBsLnZhbHVlO1xuICAgICAgICAgICAgYy5uZXh0KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIGEgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGwgJiYgIWwuZG9uZSAmJiAobyA9IHMucmV0dXJuKSAmJiBvLmNhbGwocyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgdnQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5oYXNFcnJvciA9IG4uaXNTdG9wcGVkID0gITAsIG4udGhyb3duRXJyb3IgPSByO1xuICAgICAgICBmb3IgKHZhciBhID0gbi5vYnNlcnZlcnM7IGEubGVuZ3RoOyApXG4gICAgICAgICAgYS5zaGlmdCgpLmVycm9yKHIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICB2dChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChyLl90aHJvd0lmQ2xvc2VkKCksICFyLmlzU3RvcHBlZCkge1xuICAgICAgICByLmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciBuID0gci5vYnNlcnZlcnM7IG4ubGVuZ3RoOyApXG4gICAgICAgICAgbi5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByO1xuICAgICAgcmV0dXJuICgociA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgcik7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhyKSwgdGhpcy5faW5uZXJTdWJzY3JpYmUocik7XG4gIH0sIHQucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGEgPSB0aGlzLCBvID0gYS5oYXNFcnJvciwgcyA9IGEuaXNTdG9wcGVkLCBsID0gYS5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIG8gfHwgcyA/IHBuIDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGwucHVzaChyKSwgbmV3IHB0KGZ1bmN0aW9uKCkge1xuICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwga3QobCwgcik7XG4gICAgfSkpO1xuICB9LCB0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGEgPSBuLmhhc0Vycm9yLCBvID0gbi50aHJvd25FcnJvciwgcyA9IG4uaXNTdG9wcGVkO1xuICAgIGEgPyByLmVycm9yKG8pIDogcyAmJiByLmNvbXBsZXRlKCk7XG4gIH0sIHQucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gbmV3IHdlKCk7XG4gICAgcmV0dXJuIHIuc291cmNlID0gdGhpcywgcjtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIG5ldyBDcihyLCBuKTtcbiAgfSwgdDtcbn0od2UpLCBDciA9IGZ1bmN0aW9uKGUpIHtcbiAga2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHZhciBhID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuZGVzdGluYXRpb24gPSByLCBhLnNvdXJjZSA9IG4sIGE7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIGE7XG4gICAgKGEgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4ubmV4dCkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwIHx8IGEuY2FsbChuLCByKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIGE7XG4gICAgKGEgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uZXJyb3IpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIG47XG4gICAgKG4gPSAociA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuY29tcGxldGUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCB8fCBuLmNhbGwocik7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIGE7XG4gICAgcmV0dXJuIChhID0gKG4gPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5zdWJzY3JpYmUocikpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiBwbjtcbiAgfSwgdDtcbn0oaG4pLCBLYSA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgUWEgPSBmdW5jdGlvbihlKSB7XG4gIGtlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICByZXR1cm4gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0O1xufShwdCksIGtyID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24oZSwgdCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICByW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBDdChbZSwgdF0sIFN0KHIpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbChlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgWGEgPSBmdW5jdGlvbihlKSB7XG4gIGtlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzLCByLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLnNjaGVkdWxlciA9IHIsIGEud29yayA9IG4sIGEucGVuZGluZyA9ICExLCBhO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgYTtcbiAgICBpZiAobiA9PT0gdm9pZCAwICYmIChuID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IHI7XG4gICAgdmFyIG8gPSB0aGlzLmlkLCBzID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIG8gIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQocywgbywgbikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IG4sIHRoaXMuaWQgPSAoYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHMsIHRoaXMuaWQsIG4pLCB0aGlzO1xuICB9LCB0LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIGEpIHtcbiAgICByZXR1cm4gYSA9PT0gdm9pZCAwICYmIChhID0gMCksIGtyLnNldEludGVydmFsKHIuZmx1c2guYmluZChyLCB0aGlzKSwgYSk7XG4gIH0sIHQucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24ociwgbiwgYSkge1xuICAgIGlmIChhID09PSB2b2lkIDAgJiYgKGEgPSAwKSwgYSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGEgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiBuO1xuICAgIG4gIT0gbnVsbCAmJiBrci5jbGVhckludGVydmFsKG4pO1xuICB9LCB0LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBhID0gdGhpcy5fZXhlY3V0ZShyLCBuKTtcbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiBhO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCB0LnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgYSA9ICExLCBvO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsocik7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgYSA9ICEwLCBvID0gcyB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIG87XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gci5pZCwgYSA9IHIuc2NoZWR1bGVyLCBvID0gYS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIGt0KG8sIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB0O1xufShRYSksIEFyID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCwgcikge1xuICAgIHIgPT09IHZvaWQgMCAmJiAociA9IGUubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gdCwgdGhpcy5ub3cgPSByO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICByZXR1cm4gciA9PT0gdm9pZCAwICYmIChyID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgdCkuc2NoZWR1bGUobiwgcik7XG4gIH0sIGUubm93ID0gS2Eubm93LCBlO1xufSgpLCBlaSA9IGZ1bmN0aW9uKGUpIHtcbiAga2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IEFyLm5vdyk7XG4gICAgdmFyIGEgPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5hY3Rpb25zID0gW10sIGEuX2FjdGl2ZSA9ICExLCBhO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBuLnB1c2gocik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBhO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAoYSA9IHIuZXhlY3V0ZShyLnN0YXRlLCByLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKHIgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgYSkge1xuICAgICAgZm9yICg7IHIgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgci51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgYTtcbiAgICB9XG4gIH0sIHQ7XG59KEFyKSwgdGkgPSBuZXcgZWkoWGEpLCByaSA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIG5pKGUpIHtcbiAgcmV0dXJuIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZS50aGVuKTtcbn1cbmZ1bmN0aW9uIG9pKGUpIHtcbiAgcmV0dXJuIFYoZVtycl0pO1xufVxuZnVuY3Rpb24gYWkoZSkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgVihlID09IG51bGwgPyB2b2lkIDAgOiBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiBpaShlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGUgIT09IG51bGwgJiYgdHlwZW9mIGUgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgZSArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24gc2koKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgY2kgPSBzaSgpO1xuZnVuY3Rpb24gbGkoZSkge1xuICByZXR1cm4gVihlID09IG51bGwgPyB2b2lkIDAgOiBlW2NpXSk7XG59XG5mdW5jdGlvbiB1aShlKSB7XG4gIHJldHVybiB4YSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuLCBhLCBvO1xuICAgIHJldHVybiBkbih0aGlzLCBmdW5jdGlvbihzKSB7XG4gICAgICBzd2l0Y2ggKHMubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHIgPSBlLmdldFJlYWRlcigpLCBzLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIHMubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCBPZShyLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIG4gPSBzLnNlbnQoKSwgYSA9IG4udmFsdWUsIG8gPSBuLmRvbmUsIG8gPyBbNCwgT2Uodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIHMuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgT2UoYSldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gcy5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIHIucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZGkoZSkge1xuICByZXR1cm4gVihlID09IG51bGwgPyB2b2lkIDAgOiBlLmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBwaShlKSB7XG4gIGlmIChlIGluc3RhbmNlb2Ygd2UpXG4gICAgcmV0dXJuIGU7XG4gIGlmIChlICE9IG51bGwpIHtcbiAgICBpZiAob2koZSkpXG4gICAgICByZXR1cm4gX2koZSk7XG4gICAgaWYgKHJpKGUpKVxuICAgICAgcmV0dXJuIG1pKGUpO1xuICAgIGlmIChuaShlKSlcbiAgICAgIHJldHVybiBmaShlKTtcbiAgICBpZiAoYWkoZSkpXG4gICAgICByZXR1cm4gZ24oZSk7XG4gICAgaWYgKGxpKGUpKVxuICAgICAgcmV0dXJuIHlpKGUpO1xuICAgIGlmIChkaShlKSlcbiAgICAgIHJldHVybiBoaShlKTtcbiAgfVxuICB0aHJvdyBpaShlKTtcbn1cbmZ1bmN0aW9uIF9pKGUpIHtcbiAgcmV0dXJuIG5ldyB3ZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBlW3JyXSgpO1xuICAgIGlmIChWKHIuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiByLnN1YnNjcmliZSh0KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gbWkoZSkge1xuICByZXR1cm4gbmV3IHdlKGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKHZhciByID0gMDsgciA8IGUubGVuZ3RoICYmICF0LmNsb3NlZDsgcisrKVxuICAgICAgdC5uZXh0KGVbcl0pO1xuICAgIHQuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaShlKSB7XG4gIHJldHVybiBuZXcgd2UoZnVuY3Rpb24odCkge1xuICAgIGUudGhlbihmdW5jdGlvbihyKSB7XG4gICAgICB0LmNsb3NlZCB8fCAodC5uZXh0KHIpLCB0LmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIHJldHVybiB0LmVycm9yKHIpO1xuICAgIH0pLnRoZW4obnVsbCwgeW4pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHlpKGUpIHtcbiAgcmV0dXJuIG5ldyB3ZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGEgPSBHZShlKSwgbyA9IGEubmV4dCgpOyAhby5kb25lOyBvID0gYS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIHMgPSBvLnZhbHVlO1xuICAgICAgICBpZiAodC5uZXh0KHMpLCB0LmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAobCkge1xuICAgICAgciA9IHsgZXJyb3I6IGwgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbyAmJiAhby5kb25lICYmIChuID0gYS5yZXR1cm4pICYmIG4uY2FsbChhKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ24oZSkge1xuICByZXR1cm4gbmV3IHdlKGZ1bmN0aW9uKHQpIHtcbiAgICBnaShlLCB0KS5jYXRjaChmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBoaShlKSB7XG4gIHJldHVybiBnbih1aShlKSk7XG59XG5mdW5jdGlvbiBnaShlLCB0KSB7XG4gIHZhciByLCBuLCBhLCBvO1xuICByZXR1cm4gRGEodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzLCBsO1xuICAgIHJldHVybiBkbih0aGlzLCBmdW5jdGlvbihjKSB7XG4gICAgICBzd2l0Y2ggKGMubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGMudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCByID0gT2EoZSksIGMubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCByLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IGMuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAocyA9IG4udmFsdWUsIHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGMubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGwgPSBjLnNlbnQoKSwgYSA9IHsgZXJyb3I6IGwgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBjLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKG8gPSByLnJldHVybikgPyBbNCwgby5jYWxsKHIpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGMuc2VudCgpLCBjLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiB0LmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiB3aShlLCB0LCByLCBuLCBhKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBhID09PSB2b2lkIDAgJiYgKGEgPSAhMSk7XG4gIHZhciBvID0gdC5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICByKCksIGEgPyBlLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmIChlLmFkZChvKSwgIWEpXG4gICAgcmV0dXJuIG87XG59XG5mdW5jdGlvbiB2aShlLCB0KSB7XG4gIHZhciByID0gVihlKSA/IGUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgbiA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gYS5lcnJvcihyKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IHdlKG4pO1xufVxudmFyIGJpID0gRnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gRWkoZSwgdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBhID0gITEsIG87XG4gICAgZS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24ocykge1xuICAgICAgICBvID0gcywgYSA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBuLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBhID8gcihvKSA6IG4obmV3IGJpKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFBpKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihlKTtcbn1cbnZhciBTaSA9IEZ0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBudWxsKSwgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSByO1xuICB9O1xufSk7XG5mdW5jdGlvbiBDaShlLCB0KSB7XG4gIHZhciByID0gUGkoZSkgPyB7IGZpcnN0OiBlIH0gOiB0eXBlb2YgZSA9PSBcIm51bWJlclwiID8geyBlYWNoOiBlIH0gOiBlLCBuID0gci5maXJzdCwgYSA9IHIuZWFjaCwgbyA9IHIud2l0aCwgcyA9IG8gPT09IHZvaWQgMCA/IGtpIDogbywgbCA9IHIuc2NoZWR1bGVyLCBjID0gbCA9PT0gdm9pZCAwID8gdGkgOiBsLCB1ID0gci5tZXRhLCBkID0gdSA9PT0gdm9pZCAwID8gbnVsbCA6IHU7XG4gIGlmIChuID09IG51bGwgJiYgYSA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIFlhKGZ1bmN0aW9uKG0sIF8pIHtcbiAgICB2YXIgZiwgeSwgaCA9IG51bGwsIHYgPSAwLCBTID0gZnVuY3Rpb24odykge1xuICAgICAgeSA9IHdpKF8sIGMsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGYudW5zdWJzY3JpYmUoKSwgcGkocyh7XG4gICAgICAgICAgICBtZXRhOiBkLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiBoLFxuICAgICAgICAgICAgc2VlbjogdlxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoXyk7XG4gICAgICAgIH0gY2F0Y2ggKGIpIHtcbiAgICAgICAgICBfLmVycm9yKGIpO1xuICAgICAgICB9XG4gICAgICB9LCB3KTtcbiAgICB9O1xuICAgIGYgPSBtLnN1YnNjcmliZShKYShfLCBmdW5jdGlvbih3KSB7XG4gICAgICB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCB2KyssIF8ubmV4dChoID0gdyksIGEgPiAwICYmIFMoYSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgeSAhPSBudWxsICYmIHkuY2xvc2VkIHx8IHkgPT0gbnVsbCB8fCB5LnVuc3Vic2NyaWJlKCksIGggPSBudWxsO1xuICAgIH0pKSwgIXYgJiYgUyhuICE9IG51bGwgPyB0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gbiA6ICtuIC0gYy5ub3coKSA6IGEpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGtpKGUpIHtcbiAgdGhyb3cgbmV3IFNpKGUpO1xufVxuY2xhc3MgbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiB0IH0sIHRoaXMuX3N1YmplY3QubmV4dCh0KSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAodCwgcikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IHQsIGVyck1zZzogciB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKHQpO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodCkgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IHQsIHRoaXMuc3Vic2NyaWJlID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHQodGhpcy5fY3VycmVudCksIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgX3QodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCByID0ge1xuICAgICAgICBmaXJzdDogdC50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiB2aSgoKSA9PiBuZXcgRXJyb3IodC50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gRWkodGhpcy5fc3ViamVjdC5waXBlKENpKHIpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IGhuKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IElyID0geiQxLmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSksIEFpID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59LCBJaSA9IChlKSA9PiBBaVtlXSwgVnQgPSB7fSwgd24gPSBhc3luYyAoZSkgPT4ge1xuICBpZiAoVnRbZV0pXG4gICAgcmV0dXJuIFZ0W2VdO1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBlKSkudGhlbigobikgPT4gbi5qc29uKCkpLCByID0gSXIucGFyc2UodC5lbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIFZ0W2VdID0gciwgcjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIElyLlZhbHVlcy5wcm9kO1xuICB9XG59O1xuZnVuY3Rpb24gX3QoZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke2V9YCk7XG59XG5jb25zdCBNdCA9IChlLCB0KSA9PiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbcl0pID0+ICF0LmluY2x1ZGVzKHIpKSksICQgPSAoKSA9PiB7XG4gIGlmICghKHR5cGVvZiB3aW5kb3cgPiBcInVcIikpXG4gICAgcmV0dXJuIHdpbmRvdztcbn0sIEt0ID0gbmV3IG50KCksIFRyID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCIsIFRpID0gMywgUmkgPSAzLCBOaSA9IDFlMywgeyBsb2dfXzogaHQgfSA9IEkoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgRmkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGh0KFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0sIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBodChcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIiksIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpLCAodCA9ICQoKSkgPT0gbnVsbCB8fCB0LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHIgPSAkKCkpID09IG51bGwgfHwgci5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KHQsIHIsIG4pIHtcbiAgICBjb25zdCBhID0ge1xuICAgICAgZXZlbnROYW1lOiB0LFxuICAgICAgcHJvcGVydGllczogciB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBuIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IGEudGltZXN0YW1wLCB0aGlzLnF1ZXVlLnB1c2goYSksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCksIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IChyID0gKHQgPSAkKCkpID09IG51bGwgPyB2b2lkIDAgOiB0LmxvY2FsU3RvcmFnZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2V0SXRlbShUcik7XG4gICAgICBuICYmICh0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShuKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICB2YXIgdDtcbiAgICAodCA9ICQoKSkgPT0gbnVsbCB8fCB0LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFRyLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3QgdCA9ICQoKTtcbiAgICB0ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQgJiYgKHRoaXMuYmF0Y2hUaW1lb3V0ID0gdC5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCBOaSkpO1xuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICB2YXIgdDtcbiAgICB0aGlzLmJhdGNoVGltZW91dCAmJiAoKHQgPSAkKCkpID09IG51bGwgfHwgdC5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwpLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAhbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCB8fCAodGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMCwgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSkpO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCB0ID0gS3QuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIXQpIHtcbiAgICAgIGh0KFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIFJpKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IHtcbiAgICAgICAgZXZlbnRzOiByLm1hcCgobCkgPT4gKHtcbiAgICAgICAgICBldmVudF9uYW1lOiBsLmV2ZW50TmFtZSxcbiAgICAgICAgICBkZXZpY2VfdG9rZW46IHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi50LFxuICAgICAgICAgICAgLi4ubC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbm9uY2U6IGwubm9uY2UsXG4gICAgICAgICAgICBkYXRldGltZTogbC5kYXRldGltZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbC50aW1lc3RhbXAsXG4gICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogbC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiB0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAuLi5sLnByb3BlcnRpZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICAgfSwgYSA9IElpKHQuZW52aXJvbm1lbnQpLCBvID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGEpO1xuICAgICAgKGF3YWl0IGZldGNoKG8udG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkobiksXG4gICAgICAgIGtlZXBhbGl2ZTogITBcbiAgICAgICAgLy8gVG8gc2VuZCBldmVudHMgZXZlbiBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZFxuICAgICAgfSkpLm9rID8gKHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHIubGVuZ3RoKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSkgOiB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgIGh0KFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBuKSwgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChyKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2godCkge1xuICAgIHQuZm9yRWFjaCgobikgPT4ge1xuICAgICAgbi5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCByID0gdC5maWx0ZXIoKG4pID0+IG4uYXR0ZW1wdENvdW50IDwgVGkpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHQubGVuZ3RoKSwgdGhpcy5xdWV1ZSA9IFsuLi5yLCAuLi50aGlzLnF1ZXVlXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIHZhciB0LCByO1xuICAgICh0ID0gJCgpKSA9PSBudWxsIHx8IHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAociA9ICQoKSkgPT0gbnVsbCB8fCByLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lciksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IG5yID0gbmV3IEZpKCksIGcgPSAoZSwgdCwgcikgPT4ge1xuICBuci5hZGRFdmVudChlLCB0LCByKTtcbn0sIE1pID0gKCkgPT4ge1xuICBuci5wcm9jZXNzUXVldWUoKTtcbn0sIHZuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGVlKGUucmVhc29uKTtcbiAgZyhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogZS5yZWFzb25cbiAgfSk7XG59LCBibiA9IChlKSA9PiB7XG4gIHZhciByLCBuO1xuICBjb25zdCB0ID0gZWUoZS5lcnJvcik7XG4gIGcoXCJ1bmNhdWdodF9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiAociA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiByLm5hbWUsXG4gICAgZXJyb3Jfc3RhY2s6IChuID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IG4uc3RhY2ssXG4gICAgZmlsZV9uYW1lOiBlLmZpbGVuYW1lLFxuICAgIGxpbmVfbnVtYmVyOiBlLmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBlLmNvbG5vXG4gIH0pO1xufTtcbmxldCBBdCA9IG51bGw7XG5jb25zdCBMaSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPiBcInVcIikgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEF0ID0gKGF3YWl0IGltcG9ydCgnLi9saWZlY3ljbGUtQmpRLTdHTG0tIX57MDAzfX4uanMnKSkuZGVmYXVsdCwgQXQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcGFnZS1saWZlY3ljbGU6XCIsIGUpLCBudWxsO1xuICB9XG59LCBFbiA9IChlKSA9PiB7XG4gIGcoXCJwYWdlX2xpZmVjeWNsZV9zdGF0ZV9jaGFuZ2VcIiwge1xuICAgIG9sZF9zdGF0ZTogZS5vbGRTdGF0ZSxcbiAgICBuZXdfc3RhdGU6IGUubmV3U3RhdGVcbiAgfSksIChlLm5ld1N0YXRlID09PSBcImhpZGRlblwiIHx8IGUubmV3U3RhdGUgPT09IFwicGFzc2l2ZVwiKSAmJiBuci5wcm9jZXNzUXVldWUoKTtcbn0sIERpID0gYXN5bmMgKCkgPT4ge1xuICB2YXIgdCwgcjtcbiAgKHQgPSAkKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgYm4pLCAociA9ICQoKSkgPT0gbnVsbCB8fCByLmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgdm4pO1xuICBjb25zdCBlID0gYXdhaXQgTGkoKTtcbiAgZSAmJiBlLmFkZEV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLCBFbik7XG59LCB4aSA9IGFzeW5jICgpID0+IHtcbiAgdmFyIGUsIHQ7XG4gIChlID0gJCgpKSA9PSBudWxsIHx8IGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGJuKSwgKHQgPSAkKCkpID09IG51bGwgfHwgdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIHZuKSwgJCgpICYmIEF0ICYmIEF0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLCBFbik7XG59LCBPaSA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIFVpID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIGppID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgTHQgPSBhc3luYyAoZSkgPT4ge1xuICBmb3IgKGxldCByID0gMDsgciA8IDEwOyByKyspXG4gICAgUnIoKSB8fCBhd2FpdCBEdCg1MDApO1xuICBpZiAoIVJyKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKGUpO1xufSwgJGkgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgTHQoZSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHIuZWxlbWVudHModCksXG4gICAgc3RyaXBlOiByXG4gIH07XG59LCBHaSA9IGFzeW5jIChlLCB0LCByLCBuLCBhKSA9PiB7XG4gIGNvbnN0IG8gPSBhd2FpdCBMdChlKSwgcyA9IGppW3IudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gby5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHMsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHQsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogITAsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6ICEwLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXVxuICB9KTtcbn0sIER0ID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIHNldFRpbWVvdXQodCwgZSk7XG59KSwgUnIgPSAoKSA9PiBcIlN0cmlwZVwiIGluIHdpbmRvdywgVmkgPSBhc3luYyAoZSkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgdHJ5IHtcbiAgICBlLm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCBuKSwgdChuKTtcbiAgICB9KSwgZS5vbihcInRva2VuXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCBuKTtcbiAgICB9KSwgZS5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICByKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByKG4pO1xuICB9XG59KSwgcWkgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoIWUuc3RyaXBlX3BrIHx8ICFlLmNsaWVudF9zZWNyZXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgY29uc3QgbiA9IGF3YWl0IChhd2FpdCBMdChlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKG4uZXJyb3IpXG4gICAgdGhyb3cgdC5jb21wbGV0ZShcImZhaWxcIiksIG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7bi5lcnJvci5tZXNzYWdlID8/IFwidW5rbm93blwifWApO1xuICByZXR1cm4gdC5jb21wbGV0ZShcInN1Y2Nlc3NcIiksIG47XG59LCB6aSA9IGFzeW5jIChlKSA9PiB7XG4gIHZhciBhLCBvLCBzLCBsO1xuICBjb25zdCByID0gYXdhaXQgKGF3YWl0IEx0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogZS5zdHJpcGVfcG1faWRcbiAgfSksIG4gPSAoYSA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBhLnN0YXR1cztcbiAgaWYgKG4gPT09IFwic3VjY2VlZGVkXCIpXG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBlLnN0cmlwZV9wbV9pZCksIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIHIuc2V0dXBJbnRlbnQpO1xuICBlbHNlIHRocm93IG4gPT09IFwiY2FuY2VsZWRcIiA/IG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSA6IG5ldyBFcnJvcihcbiAgICBgJHsoKG8gPSByLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogby5tZXNzYWdlKSA/PyAoKGwgPSAocyA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBzLmxhc3Rfc2V0dXBfZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBsLm1lc3NhZ2UpID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgKTtcbn07XG52YXIgSGkgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PSBcIm9iamVjdFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmID09IFwib2JqZWN0XCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyA9PSBcIm9iamVjdFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCA9PSBcIm9iamVjdFwiID8gZ2xvYmFsIDoge30sIE5lID0gXCIxLjkuMFwiLCBOciA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKC0oLispKT8kLztcbmZ1bmN0aW9uIEJpKGUpIHtcbiAgdmFyIHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbZV0pLCByID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgbiA9IGUubWF0Y2goTnIpO1xuICBpZiAoIW4pXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH07XG4gIHZhciBhID0ge1xuICAgIG1ham9yOiArblsxXSxcbiAgICBtaW5vcjogK25bMl0sXG4gICAgcGF0Y2g6ICtuWzNdLFxuICAgIHByZXJlbGVhc2U6IG5bNF1cbiAgfTtcbiAgaWYgKGEucHJlcmVsZWFzZSAhPSBudWxsKVxuICAgIHJldHVybiBmdW5jdGlvbihjKSB7XG4gICAgICByZXR1cm4gYyA9PT0gZTtcbiAgICB9O1xuICBmdW5jdGlvbiBvKGwpIHtcbiAgICByZXR1cm4gci5hZGQobCksICExO1xuICB9XG4gIGZ1bmN0aW9uIHMobCkge1xuICAgIHJldHVybiB0LmFkZChsKSwgITA7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGMpIHtcbiAgICBpZiAodC5oYXMoYykpXG4gICAgICByZXR1cm4gITA7XG4gICAgaWYgKHIuaGFzKGMpKVxuICAgICAgcmV0dXJuICExO1xuICAgIHZhciB1ID0gYy5tYXRjaChOcik7XG4gICAgaWYgKCF1KVxuICAgICAgcmV0dXJuIG8oYyk7XG4gICAgdmFyIGQgPSB7XG4gICAgICBtYWpvcjogK3VbMV0sXG4gICAgICBtaW5vcjogK3VbMl0sXG4gICAgICBwYXRjaDogK3VbM10sXG4gICAgICBwcmVyZWxlYXNlOiB1WzRdXG4gICAgfTtcbiAgICByZXR1cm4gZC5wcmVyZWxlYXNlICE9IG51bGwgfHwgYS5tYWpvciAhPT0gZC5tYWpvciA/IG8oYykgOiBhLm1ham9yID09PSAwID8gYS5taW5vciA9PT0gZC5taW5vciAmJiBhLnBhdGNoIDw9IGQucGF0Y2ggPyBzKGMpIDogbyhjKSA6IGEubWlub3IgPD0gZC5taW5vciA/IHMoYykgOiBvKGMpO1xuICB9O1xufVxudmFyIFlpID0gQmkoTmUpLCBKaSA9IE5lLnNwbGl0KFwiLlwiKVswXSwgc3QgPSBTeW1ib2wuZm9yKFwib3BlbnRlbGVtZXRyeS5qcy5hcGkuXCIgKyBKaSksIGN0ID0gSGk7XG5mdW5jdGlvbiBvcihlLCB0LCByLCBuKSB7XG4gIHZhciBhO1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAhMSk7XG4gIHZhciBvID0gY3Rbc3RdID0gKGEgPSBjdFtzdF0pICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiB7XG4gICAgdmVyc2lvbjogTmVcbiAgfTtcbiAgaWYgKCFuICYmIG9bZV0pIHtcbiAgICB2YXIgcyA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogQXR0ZW1wdGVkIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gb2YgQVBJOiBcIiArIGUpO1xuICAgIHJldHVybiByLmVycm9yKHMuc3RhY2sgfHwgcy5tZXNzYWdlKSwgITE7XG4gIH1cbiAgaWYgKG8udmVyc2lvbiAhPT0gTmUpIHtcbiAgICB2YXIgcyA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0cmF0aW9uIG9mIHZlcnNpb24gdlwiICsgby52ZXJzaW9uICsgXCIgZm9yIFwiICsgZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgTmUpO1xuICAgIHJldHVybiByLmVycm9yKHMuc3RhY2sgfHwgcy5tZXNzYWdlKSwgITE7XG4gIH1cbiAgcmV0dXJuIG9bZV0gPSB0LCByLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBOZSArIFwiLlwiKSwgITA7XG59XG5mdW5jdGlvbiBsdChlKSB7XG4gIHZhciB0LCByLCBuID0gKHQgPSBjdFtzdF0pID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQudmVyc2lvbjtcbiAgaWYgKCEoIW4gfHwgIVlpKG4pKSlcbiAgICByZXR1cm4gKHIgPSBjdFtzdF0pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJbZV07XG59XG5mdW5jdGlvbiBhcihlLCB0KSB7XG4gIHQuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFVucmVnaXN0ZXJpbmcgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIE5lICsgXCIuXCIpO1xuICB2YXIgciA9IGN0W3N0XTtcbiAgciAmJiBkZWxldGUgcltlXTtcbn1cbnZhciBXaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChsKSB7XG4gICAgcyA9IHsgZXJyb3I6IGwgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufSwgWmkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBvOyBuIDwgYTsgbisrKVxuICAgIChvIHx8ICEobiBpbiB0KSkgJiYgKG8gfHwgKG8gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIG9bbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KG8gfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgS2kgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0aGlzLl9uYW1lc3BhY2UgPSB0Lm5hbWVzcGFjZSB8fCBcIkRpYWdDb21wb25lbnRMb2dnZXJcIjtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFplKFwiZGVidWdcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBaZShcImVycm9yXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBaZShcImluZm9cIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFplKFwid2FyblwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLnZlcmJvc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gWmUoXCJ2ZXJib3NlXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gWmUoZSwgdCwgcikge1xuICB2YXIgbiA9IGx0KFwiZGlhZ1wiKTtcbiAgaWYgKG4pXG4gICAgcmV0dXJuIHIudW5zaGlmdCh0KSwgbltlXS5hcHBseShuLCBaaShbXSwgV2kociksICExKSk7XG59XG52YXIgWDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLkVSUk9SID0gMzBdID0gXCJFUlJPUlwiLCBlW2UuV0FSTiA9IDUwXSA9IFwiV0FSTlwiLCBlW2UuSU5GTyA9IDYwXSA9IFwiSU5GT1wiLCBlW2UuREVCVUcgPSA3MF0gPSBcIkRFQlVHXCIsIGVbZS5WRVJCT1NFID0gODBdID0gXCJWRVJCT1NFXCIsIGVbZS5BTEwgPSA5OTk5XSA9IFwiQUxMXCI7XG59KShYIHx8IChYID0ge30pKTtcbmZ1bmN0aW9uIFFpKGUsIHQpIHtcbiAgZSA8IFguTk9ORSA/IGUgPSBYLk5PTkUgOiBlID4gWC5BTEwgJiYgKGUgPSBYLkFMTCksIHQgPSB0IHx8IHt9O1xuICBmdW5jdGlvbiByKG4sIGEpIHtcbiAgICB2YXIgbyA9IHRbbl07XG4gICAgcmV0dXJuIHR5cGVvZiBvID09IFwiZnVuY3Rpb25cIiAmJiBlID49IGEgPyBvLmJpbmQodCkgOiBmdW5jdGlvbigpIHtcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgZXJyb3I6IHIoXCJlcnJvclwiLCBYLkVSUk9SKSxcbiAgICB3YXJuOiByKFwid2FyblwiLCBYLldBUk4pLFxuICAgIGluZm86IHIoXCJpbmZvXCIsIFguSU5GTyksXG4gICAgZGVidWc6IHIoXCJkZWJ1Z1wiLCBYLkRFQlVHKSxcbiAgICB2ZXJib3NlOiByKFwidmVyYm9zZVwiLCBYLlZFUkJPU0UpXG4gIH07XG59XG52YXIgWGkgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgYSwgbyA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEoYSA9IG4ubmV4dCgpKS5kb25lOyApIG8ucHVzaChhLnZhbHVlKTtcbiAgfSBjYXRjaCAobCkge1xuICAgIHMgPSB7IGVycm9yOiBsIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGEgJiYgIWEuZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn0sIGVzID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgbzsgbiA8IGE7IG4rKylcbiAgICAobyB8fCAhKG4gaW4gdCkpICYmIChvIHx8IChvID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBvW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChvIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIHRzID0gXCJkaWFnXCIsIEl0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICBmdW5jdGlvbiB0KGEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZvciAodmFyIG8gPSBbXSwgcyA9IDA7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspXG4gICAgICAgICAgICBvW3NdID0gYXJndW1lbnRzW3NdO1xuICAgICAgICAgIHZhciBsID0gbHQoXCJkaWFnXCIpO1xuICAgICAgICAgIGlmIChsKVxuICAgICAgICAgICAgcmV0dXJuIGxbYV0uYXBwbHkobCwgZXMoW10sIFhpKG8pLCAhMSkpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gZnVuY3Rpb24oYSwgbykge1xuICAgICAgICB2YXIgcywgbCwgYztcbiAgICAgICAgaWYgKG8gPT09IHZvaWQgMCAmJiAobyA9IHsgbG9nTGV2ZWw6IFguSU5GTyB9KSwgYSA9PT0gcikge1xuICAgICAgICAgIHZhciB1ID0gbmV3IEVycm9yKFwiQ2Fubm90IHVzZSBkaWFnIGFzIHRoZSBsb2dnZXIgZm9yIGl0c2VsZi4gUGxlYXNlIHVzZSBhIERpYWdMb2dnZXIgaW1wbGVtZW50YXRpb24gbGlrZSBDb25zb2xlRGlhZ0xvZ2dlciBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvblwiKTtcbiAgICAgICAgICByZXR1cm4gci5lcnJvcigocyA9IHUuc3RhY2spICE9PSBudWxsICYmIHMgIT09IHZvaWQgMCA/IHMgOiB1Lm1lc3NhZ2UpLCAhMTtcbiAgICAgICAgfVxuICAgICAgICB0eXBlb2YgbyA9PSBcIm51bWJlclwiICYmIChvID0ge1xuICAgICAgICAgIGxvZ0xldmVsOiBvXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZCA9IGx0KFwiZGlhZ1wiKSwgbSA9IFFpKChsID0gby5sb2dMZXZlbCkgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IFguSU5GTywgYSk7XG4gICAgICAgIGlmIChkICYmICFvLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgdmFyIF8gPSAoYyA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogXCI8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+XCI7XG4gICAgICAgICAgZC53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBiZSBvdmVyd3JpdHRlbiBmcm9tIFwiICsgXyksIG0ud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIF8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcihcImRpYWdcIiwgbSwgciwgITApO1xuICAgICAgfTtcbiAgICAgIHIuc2V0TG9nZ2VyID0gbiwgci5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGFyKHRzLCByKTtcbiAgICAgIH0sIHIuY3JlYXRlQ29tcG9uZW50TG9nZ2VyID0gZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gbmV3IEtpKGEpO1xuICAgICAgfSwgci52ZXJib3NlID0gdChcInZlcmJvc2VcIiksIHIuZGVidWcgPSB0KFwiZGVidWdcIiksIHIuaW5mbyA9IHQoXCJpbmZvXCIpLCByLndhcm4gPSB0KFwid2FyblwiKSwgci5lcnJvciA9IHQoXCJlcnJvclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGUuaW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gcnMoZSkge1xuICByZXR1cm4gU3ltYm9sLmZvcihlKTtcbn1cbnZhciBucyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICByLl9jdXJyZW50Q29udGV4dCA9IHQgPyBuZXcgTWFwKHQpIDogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgci5nZXRWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHIuX2N1cnJlbnRDb250ZXh0LmdldChuKTtcbiAgICAgIH0sIHIuc2V0VmFsdWUgPSBmdW5jdGlvbihuLCBhKSB7XG4gICAgICAgIHZhciBvID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gby5fY3VycmVudENvbnRleHQuc2V0KG4sIGEpLCBvO1xuICAgICAgfSwgci5kZWxldGVWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdmFyIGEgPSBuZXcgZShyLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHJldHVybiBhLl9jdXJyZW50Q29udGV4dC5kZWxldGUobiksIGE7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfSgpXG4pLCBvcyA9IG5ldyBucygpLCBhcyA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChsKSB7XG4gICAgcyA9IHsgZXJyb3I6IGwgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufSwgaXMgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBvOyBuIDwgYTsgbisrKVxuICAgIChvIHx8ICEobiBpbiB0KSkgJiYgKG8gfHwgKG8gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIG9bbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KG8gfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgc3MgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG9zO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBhID0gW10sIG8gPSAzOyBvIDwgYXJndW1lbnRzLmxlbmd0aDsgbysrKVxuICAgICAgICBhW28gLSAzXSA9IGFyZ3VtZW50c1tvXTtcbiAgICAgIHJldHVybiByLmNhbGwuYXBwbHkociwgaXMoW25dLCBhcyhhKSwgITEpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlO1xuICB9KClcbiksIGNzID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGwpIHtcbiAgICBzID0geyBlcnJvcjogbCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCBscyA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIG87IG4gPCBhOyBuKyspXG4gICAgKG8gfHwgIShuIGluIHQpKSAmJiAobyB8fCAobyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgb1tuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQobyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBxdCA9IFwiY29udGV4dFwiLCB1cyA9IG5ldyBzcygpLCBpciA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBvcihxdCwgdCwgSXQuaW5zdGFuY2UoKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5hY3RpdmUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgZm9yICh2YXIgYSwgbyA9IFtdLCBzID0gMzsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKylcbiAgICAgICAgb1tzIC0gM10gPSBhcmd1bWVudHNbc107XG4gICAgICByZXR1cm4gKGEgPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KGEsIGxzKFt0LCByLCBuXSwgY3MobyksICExKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmJpbmQodCwgcik7XG4gICAgfSwgZS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbHQocXQpIHx8IHVzO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpLCBhcihxdCwgSXQuaW5zdGFuY2UoKSk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBRdDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLlNBTVBMRUQgPSAxXSA9IFwiU0FNUExFRFwiO1xufSkoUXQgfHwgKFF0ID0ge30pKTtcbnZhciBQbiA9IFwiMDAwMDAwMDAwMDAwMDAwMFwiLCBTbiA9IFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIiwgZHMgPSB7XG4gIHRyYWNlSWQ6IFNuLFxuICBzcGFuSWQ6IFBuLFxuICB0cmFjZUZsYWdzOiBRdC5OT05FXG59LCBvdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IGRzKSwgdGhpcy5fc3BhbkNvbnRleHQgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS51cGRhdGVOYW1lID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24odCkge1xuICAgIH0sIGUucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfSwgZS5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24odCwgcikge1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgc3IgPSBycyhcIk9wZW5UZWxlbWV0cnkgQ29udGV4dCBLZXkgU1BBTlwiKTtcbmZ1bmN0aW9uIGNyKGUpIHtcbiAgcmV0dXJuIGUuZ2V0VmFsdWUoc3IpIHx8IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIHBzKCkge1xuICByZXR1cm4gY3IoaXIuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG5mdW5jdGlvbiBscihlLCB0KSB7XG4gIHJldHVybiBlLnNldFZhbHVlKHNyLCB0KTtcbn1cbmZ1bmN0aW9uIF9zKGUpIHtcbiAgcmV0dXJuIGUuZGVsZXRlVmFsdWUoc3IpO1xufVxuZnVuY3Rpb24gbXMoZSwgdCkge1xuICByZXR1cm4gbHIoZSwgbmV3IG90KHQpKTtcbn1cbmZ1bmN0aW9uIENuKGUpIHtcbiAgdmFyIHQ7XG4gIHJldHVybiAodCA9IGNyKGUpKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnNwYW5Db250ZXh0KCk7XG59XG52YXIgZnMgPSAvXihbMC05YS1mXXszMn0pJC9pLCB5cyA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24gaHMoZSkge1xuICByZXR1cm4gZnMudGVzdChlKSAmJiBlICE9PSBTbjtcbn1cbmZ1bmN0aW9uIGdzKGUpIHtcbiAgcmV0dXJuIHlzLnRlc3QoZSkgJiYgZSAhPT0gUG47XG59XG5mdW5jdGlvbiBrbihlKSB7XG4gIHJldHVybiBocyhlLnRyYWNlSWQpICYmIGdzKGUuc3BhbklkKTtcbn1cbmZ1bmN0aW9uIHdzKGUpIHtcbiAgcmV0dXJuIG5ldyBvdChlKTtcbn1cbnZhciB6dCA9IGlyLmdldEluc3RhbmNlKCksIEFuID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBuID09PSB2b2lkIDAgJiYgKG4gPSB6dC5hY3RpdmUoKSk7XG4gICAgICB2YXIgYSA9ICEhKHIgIT0gbnVsbCAmJiByLnJvb3QpO1xuICAgICAgaWYgKGEpXG4gICAgICAgIHJldHVybiBuZXcgb3QoKTtcbiAgICAgIHZhciBvID0gbiAmJiBDbihuKTtcbiAgICAgIHJldHVybiB2cyhvKSAmJiBrbihvKSA/IG5ldyBvdChvKSA6IG5ldyBvdCgpO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIGEpIHtcbiAgICAgIHZhciBvLCBzLCBsO1xuICAgICAgaWYgKCEoYXJndW1lbnRzLmxlbmd0aCA8IDIpKSB7XG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyBsID0gciA6IGFyZ3VtZW50cy5sZW5ndGggPT09IDMgPyAobyA9IHIsIGwgPSBuKSA6IChvID0gciwgcyA9IG4sIGwgPSBhKTtcbiAgICAgICAgdmFyIGMgPSBzID8/IHp0LmFjdGl2ZSgpLCB1ID0gdGhpcy5zdGFydFNwYW4odCwgbywgYyksIGQgPSBscihjLCB1KTtcbiAgICAgICAgcmV0dXJuIHp0LndpdGgoZCwgbCwgdm9pZCAwLCB1KTtcbiAgICAgIH1cbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiB2cyhlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBlLnNwYW5JZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlSWQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZS50cmFjZUZsYWdzID09IFwibnVtYmVyXCI7XG59XG52YXIgYnMgPSBuZXcgQW4oKSwgRXMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0LCByLCBuLCBhKSB7XG4gICAgICB0aGlzLl9wcm92aWRlciA9IHQsIHRoaXMubmFtZSA9IHIsIHRoaXMudmVyc2lvbiA9IG4sIHRoaXMub3B0aW9ucyA9IGE7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIGEpIHtcbiAgICAgIHZhciBvID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShvLnN0YXJ0QWN0aXZlU3BhbiwgbywgYXJndW1lbnRzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0VHJhY2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fZGVsZWdhdGUpXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgIHZhciB0ID0gdGhpcy5fcHJvdmlkZXIuZ2V0RGVsZWdhdGVUcmFjZXIodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICByZXR1cm4gdCA/ICh0aGlzLl9kZWxlZ2F0ZSA9IHQsIHRoaXMuX2RlbGVnYXRlKSA6IGJzO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgUHMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHJldHVybiBuZXcgQW4oKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFNzID0gbmV3IFBzKCksIEZyID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgYTtcbiAgICAgIHJldHVybiAoYSA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIodCwgciwgbikpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiBuZXcgRXModGhpcywgdCwgciwgbik7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0O1xuICAgICAgcmV0dXJuICh0ID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBTcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX2RlbGVnYXRlID0gdDtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZVRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHZhciBhO1xuICAgICAgcmV0dXJuIChhID0gdGhpcy5fZGVsZWdhdGUpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGEuZ2V0VHJhY2VyKHQsIHIsIG4pO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgdXQ7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuSU5URVJOQUwgPSAwXSA9IFwiSU5URVJOQUxcIiwgZVtlLlNFUlZFUiA9IDFdID0gXCJTRVJWRVJcIiwgZVtlLkNMSUVOVCA9IDJdID0gXCJDTElFTlRcIiwgZVtlLlBST0RVQ0VSID0gM10gPSBcIlBST0RVQ0VSXCIsIGVbZS5DT05TVU1FUiA9IDRdID0gXCJDT05TVU1FUlwiO1xufSkodXQgfHwgKHV0ID0ge30pKTtcbnZhciBDZTtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5VTlNFVCA9IDBdID0gXCJVTlNFVFwiLCBlW2UuT0sgPSAxXSA9IFwiT0tcIiwgZVtlLkVSUk9SID0gMl0gPSBcIkVSUk9SXCI7XG59KShDZSB8fCAoQ2UgPSB7fSkpO1xudmFyIFVlID0gaXIuZ2V0SW5zdGFuY2UoKSwgSHQgPSBcInRyYWNlXCIsIENzID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IEZyKCksIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gd3MsIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0ga24sIHRoaXMuZGVsZXRlU3BhbiA9IF9zLCB0aGlzLmdldFNwYW4gPSBjciwgdGhpcy5nZXRBY3RpdmVTcGFuID0gcHMsIHRoaXMuZ2V0U3BhbkNvbnRleHQgPSBDbiwgdGhpcy5zZXRTcGFuID0gbHIsIHRoaXMuc2V0U3BhbkNvbnRleHQgPSBtcztcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgciA9IG9yKEh0LCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLCBJdC5pbnN0YW5jZSgpKTtcbiAgICAgIHJldHVybiByICYmIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUodCksIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBsdChIdCkgfHwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcih0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICBhcihIdCwgSXQuaW5zdGFuY2UoKSksIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgRnIoKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFZlID0gQ3MuZ2V0SW5zdGFuY2UoKTtcbmNvbnN0IGtzID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IFZlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIGEgPSBVZS5hY3RpdmUoKSwgbyA9IG4uc3RhcnRTcGFuKFxuICAgIGBjZGUuJHt0LnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiB1dC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgLi4uZS50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUudHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KHQucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIGFcbiAgKTtcbiAgcmV0dXJuIFVlLndpdGgoVmUuc2V0U3BhbihhLCBvKSwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgcigpO1xuICAgICAgcmV0dXJuIG8uc2V0U3RhdHVzKHsgY29kZTogQ2UuT0sgfSksIHM7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgdGhyb3cgby5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBDZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogcyBpbnN0YW5jZW9mIEVycm9yID8gcy5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pLCBzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBvLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59LCBndCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBWZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBuID0gVWUuYWN0aXZlKCksIGEgPSByLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke2Uuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiB1dC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogZS52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnJlZmVycmVyLFxuICAgICAgICAuLi5lLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IGUucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgblxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IG8gPSBhd2FpdCB0KCk7XG4gICAgcmV0dXJuIGEuc2V0U3RhdHVzKHsgY29kZTogQ2UuT0sgfSksIG87XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICBjb25zdCBzID0gbyBpbnN0YW5jZW9mIEVycm9yID8gby5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgYS5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogQ2UuRVJST1IsXG4gICAgICBtZXNzYWdlOiBzXG4gICAgfSksIG87XG4gIH0gZmluYWxseSB7XG4gICAgYS5lbmQoKTtcbiAgfVxufTtcbmNsYXNzIEluIGV4dGVuZHMgYm8ge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgY29uc3QgciA9IGAke3QubWVzc2FnZX1gO1xuICAgIHN1cGVyKHIpLCB0aGlzLnJlc3BvbnNlID0gdDtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgWSA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiBrcyhlLCB0LCBhc3luYyAoKSA9PiB7XG4gIG4gJiYgZyhuLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgYSA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgaWYgKElzKGEpKSB7XG4gICAgY29uc3QgbyA9IG5hdmlnYXRvci5jb25uZWN0aW9uO1xuICAgIHRocm93IGcoXCJjZGVfcmVzcG9uc2VfZXJyb3JcIiwge1xuICAgICAgZXJyb3JfbWVzc2FnZTogYS5tZXNzYWdlLFxuICAgICAgbWVzc2FnZV90eXBlOiB0LnR5cGUsXG4gICAgICB1c2VyX2FnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICAgb25saW5lOiBuYXZpZ2F0b3Iub25MaW5lLFxuICAgICAgaGFzX2ZvY3VzOiBkb2N1bWVudC5oYXNGb2N1cygpLFxuICAgICAgaHJlZjogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICBkb2N1bWVudF92aXNpYmlsaXR5X3N0YXRlOiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUsXG4gICAgICBjb25uZWN0aW9uX2Rvd25saW5rOiBvID09IG51bGwgPyB2b2lkIDAgOiBvLmRvd25saW5rLFxuICAgICAgY29ubmVjdGlvbl9lZmZlY3RpdmVfdHlwZTogbyA9PSBudWxsID8gdm9pZCAwIDogby5lZmZlY3RpdmVUeXBlLFxuICAgICAgY29ubmVjdGlvbl9ydHQ6IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ucnR0LFxuICAgICAgY29ubmVjdGlvbl9zYXZlX2RhdGE6IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2F2ZURhdGFcbiAgICB9KSwgbmV3IEluKGEpO1xuICB9XG4gIGlmICghQXMoYSwgcikpIHtcbiAgICBjb25zdCBvID0gci5zYWZlUGFyc2UoYSk7XG4gICAgdGhyb3cgby5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByLCBcIkFjdHVhbDpcIiwgYSksIG8uZXJyb3IpO1xuICB9XG4gIHJldHVybiBuICYmIGcobiwge1xuICAgIC4uLmFcbiAgfSksIGE7XG59KSwgQXMgPSAoZSwgdCkgPT4gdC5zYWZlUGFyc2UoZSkuc3VjY2VzcywgSXMgPSAoZSkgPT4gb2Euc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIFRzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHQgfSwgb24pLCBNID0gYXN5bmMgKGUpID0+IGF3YWl0IFkoZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIGFuKSwgb2UgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgWShcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIGxuLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCBUbiA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBZKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiB0IH0sXG4gIGdhLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgUnMgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgciA9IGF3YWl0IFkoZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogdCB9LCBsbik7XG4gIHJldHVybiBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnJcbiAgfSksIHI7XG59LCBPID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIFdvLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIE5zID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiB0IH0sXG4gIHNuLFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIEZzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogdCB9LFxuICBKbyxcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgTXMgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgVHMoZSwge1xuICAgIHNlY3VyZV90b2tlbjogdCxcbiAgICBwcm9tb3Rpb25fY29kZTogclxuICB9KSwgYSA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgobCkgPT4gbC5jdXJyZW5jeSkpO1xuICBpZiAoYS5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2Euc2l6ZX1gKTtcbiAgY29uc3QgbyA9IGEudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIHMgPSBGYShuLnByZXZpZXcuaW52b2ljZXMubWFwKChsKSA9PiBsLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBvLFxuICAgIGFtb3VudEF0b206IHNcbiAgfTtcbn0sIGJlID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMCwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSAmJiAhbiAmJiAobiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikpO1xuICAgIGNvbnN0IGEgPSBhd2FpdCBNcyhlLCB0LCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBhLmFtb3VudEF0b20sIGN1cnJlbmN5OiBhLmN1cnJlbmN5IH07XG4gIH1cbn0sIFJuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKGUuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGUudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBZKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHQgfSwgSG8pXG4gICAgKVxuICApO1xufSwgTXIgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgWShcbiAgZSxcbiAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogdCB9LFxuICBpdCxcbiAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiksIExzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoZSwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHQgfSwgc24sIFwic2V0dXBfY2hlY2tvdXRcIiksIHVyID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoZSwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHQgfSwgaXQsIFwicGVyZm9ybV9jaGVja291dFwiKSwgTm4gPSAxZTMsIERzID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgY29uc29sZS5sb2codCk7XG4gIGNvbnN0IG8gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMCxcbiAgICB0aW1lb3V0OiBObixcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSkucHJvbWlzZSwgcyA9IGF3YWl0IFkobywgeyB0eXBlOiByIH0sIG4pO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBzKSwgcztcbn0sIHh0ID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoXG4gIGUsXG4gIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIHZhLFxuICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiksIEZuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IFkoXG4gICAgICBlLFxuICAgICAgeyB0eXBlOiBcImdldF9zdGFuZGFyZGl6ZWRfZXJyb3JfY29kZVwiLCBwYXlsb2FkOiB7IG1lc3NhZ2U6IHQgfSB9LFxuICAgICAgd2FcbiAgICApKS5lcnJvcl9jb2RlO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGdldFN0YW5kYXJkaXplZEVycm9yQ29kZTpcIiwgZWUocikpLCBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufSwgeHMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgWShcbiAgZSxcbiAgeyB0eXBlOiBcInNldF91c2VyX2RldmljZV90b2tlblwiLCBwYXlsb2FkOiB7IGRldmljZV90b2tlbjogdCB9IH0sXG4gIGJhXG4pLCBPcyA9IGFzeW5jIChlKSA9PiB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8ICFlKSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IHsgdHlwZTogXCJwaW5nXCIgfSwgciA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgICBpZiAociAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHQpLCAhMTtcbiAgfVxufSwgVXMgPSAoZSwgdCkgPT4gISFlICYmIHQsIE1uID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCBMbiA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIiwgYXQgPSAzMiwganMgPSAxNiwgRG4gPSAxMCwgTHIgPSAyODE0NzQ5NzY3MTA2NTU7XG52YXIgRmU7XG4oZnVuY3Rpb24oZSkge1xuICBlLkJhc2UzMkluY29ycmVjdEVuY29kaW5nID0gXCJCMzJfRU5DX0lOVkFMSURcIiwgZS5EZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlciA9IFwiREVDX1RJTUVfQ0hBUlwiLCBlLkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCIsIGUuRW5jb2RlVGltZU5lZ2F0aXZlID0gXCJFTkNfVElNRV9ORUdcIiwgZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiLCBlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCIsIGUuUFJOR0RldGVjdEZhaWx1cmUgPSBcIlBSTkdfREVURUNUXCIsIGUuVUxJREludmFsaWQgPSBcIlVMSURfSU5WQUxJRFwiLCBlLlVuZXhwZWN0ZWQgPSBcIlVORVhQRUNURURcIiwgZS5VVUlESW52YWxpZCA9IFwiVVVJRF9JTlZBTElEXCI7XG59KShGZSB8fCAoRmUgPSB7fSkpO1xuY2xhc3MgWGUgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHQsIHIpIHtcbiAgICBzdXBlcihgJHtyfSAoJHt0fSlgKSwgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIiwgdGhpcy5jb2RlID0gdDtcbiAgfVxufVxuZnVuY3Rpb24gJHMoZSkge1xuICBsZXQgdCA9IE1hdGguZmxvb3IoZSgpICogYXQpO1xuICByZXR1cm4gdCA9PT0gYXQgJiYgKHQgPSBhdCAtIDEpLCBMbi5jaGFyQXQodCk7XG59XG5mdW5jdGlvbiBHcyhlKSB7XG4gIGNvbnN0IHQgPSBWcygpLCByID0gdCAmJiAodC5jcnlwdG8gfHwgdC5tc0NyeXB0bykgfHwgbnVsbDtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5nZXRSYW5kb21WYWx1ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHIuZ2V0UmFuZG9tVmFsdWVzKG4pLCBuWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2YgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucmFuZG9tQnl0ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4gci5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDI1NTtcbiAgdGhyb3cgbmV3IFhlKEZlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIFZzKCkge1xuICByZXR1cm4gSHMoKSA/IHNlbGYgOiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsIDwgXCJ1XCIgPyBnbG9iYWwgOiB0eXBlb2YgZ2xvYmFsVGhpcyA8IFwidVwiID8gZ2xvYmFsVGhpcyA6IG51bGw7XG59XG5mdW5jdGlvbiBxcyhlLCB0KSB7XG4gIGxldCByID0gXCJcIjtcbiAgZm9yICg7IGUgPiAwOyBlLS0pXG4gICAgciA9ICRzKHQpICsgcjtcbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiB6cyhlLCB0ID0gRG4pIHtcbiAgaWYgKGlzTmFOKGUpKVxuICAgIHRocm93IG5ldyBYZShGZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7ZX1gKTtcbiAgaWYgKGUgPiBMcilcbiAgICB0aHJvdyBuZXcgWGUoRmUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7THJ9OiAke2V9YCk7XG4gIGlmIChlIDwgMClcbiAgICB0aHJvdyBuZXcgWGUoRmUuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke2V9YCk7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGUpID09PSAhMSlcbiAgICB0aHJvdyBuZXcgWGUoRmUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7ZX1gKTtcbiAgbGV0IHIsIG4gPSBcIlwiO1xuICBmb3IgKGxldCBhID0gdDsgYSA+IDA7IGEtLSlcbiAgICByID0gZSAlIGF0LCBuID0gTG4uY2hhckF0KHIpICsgbiwgZSA9IChlIC0gcikgLyBhdDtcbiAgcmV0dXJuIG47XG59XG5mdW5jdGlvbiBIcygpIHtcbiAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA8IFwidVwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbmZ1bmN0aW9uIEJzKGUsIHQpIHtcbiAgY29uc3QgciA9IEdzKCksIG4gPSBEYXRlLm5vdygpO1xuICByZXR1cm4genMobiwgRG4pICsgcXMoanMsIHIpO1xufVxuY29uc3QgeG4gPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIiwgT24gPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKHIpID0+IHIuaW5jbHVkZXMoeG4pKTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIGUuc3BsaXQoXCI9XCIpWzFdO1xuICBjb25zdCB0ID0gQnMoKTtcbiAgcmV0dXJuIFlzKHQpLCB0O1xufSwgWXMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIHQuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpICsgMSksIGRvY3VtZW50LmNvb2tpZSA9IGAke3hufT0ke2V9OyBwYXRoPS87IGV4cGlyZXM9JHt0LnRvVVRDU3RyaW5nKCl9YDtcbn0sIEpzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGEgPSBXci5wYXJzZShyKTtcbiAgICAgIEFycmF5LmlzQXJyYXkobikgPyB0W2FdID0gbiA6IEFycmF5LmlzQXJyYXkobi5fZXJyb3JzKSAmJiAodFthXSA9IG4uX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgdDtcbn0sIGogPSAoZSwgdCkgPT4gQXJyYXkuZnJvbShlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChhLCBvKSA9PiB7XG4gIGNvbnN0IHMgPSBvLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgaWYgKCFzKSByZXR1cm4gYTtcbiAgY29uc3QgbCA9IG8udHlwZSA9PT0gXCJjaGVja2JveFwiID8gby5jaGVja2VkIDogby52YWx1ZTtcbiAgcmV0dXJuIHsgLi4uYSwgW3NdOiBsIH07XG59LCB7fSksIFdzID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gVm8ucGFyc2UoZSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCBlLCB0KSwgdDtcbiAgfVxufSwgWnMgPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSB2NCgpLnNwbGl0KFwiLVwiKVswXTtcbiAgcmV0dXJuIHtcbiAgICBmaXJzdE5hbWU6IGB4eF8ke2V9YCxcbiAgICBsYXN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGVtYWlsOiBgeHhfJHtlfUBlbWFpbC5jb21gLFxuICAgIHppcENvZGU6IGB4eF8ke2V9YCxcbiAgICBjb3VudHJ5OiBcIlVTXCJcbiAgfTtcbn0sIEggPSAoZSkgPT4gKHtcbiAgbGluZTE6IGVbcC5MSU5FMV0sXG4gIGxpbmUyOiBlW3AuTElORTJdLFxuICBsaW5lMzogZVtwLkxJTkUzXSxcbiAgY2l0eTogZVtwLkNJVFldLFxuICBzdGF0ZTogZVtwLlNUQVRFXSxcbiAgY291bnRyeTogZVtwLkNPVU5UUlldLFxuICB6aXBfY29kZTogZVtwLlpJUF9DT0RFXVxufSksIFEgPSAoZSwgdCkgPT4ge1xuICBpZiAodC5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcylcbiAgICByZXR1cm4ge1xuICAgICAgbGluZTE6IGVbcC5TSElQUElOR19MSU5FMV0sXG4gICAgICBsaW5lMjogZVtwLlNISVBQSU5HX0xJTkUyXSxcbiAgICAgIGxpbmUzOiBlW3AuU0hJUFBJTkdfTElORTNdLFxuICAgICAgY2l0eTogZVtwLlNISVBQSU5HX0NJVFldLFxuICAgICAgc3RhdGU6IGVbcC5TSElQUElOR19TVEFURV0sXG4gICAgICBjb3VudHJ5OiBlW3AuU0hJUFBJTkdfQ09VTlRSWV0sXG4gICAgICB6aXBfY29kZTogZVtwLlNISVBQSU5HX1pJUF9DT0RFXVxuICAgIH07XG59LCBPdCA9IChlLCB0KSA9PiBbZSwgdF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpLCBLcyA9ICh7IHdpZHRoOiBlLCBoZWlnaHQ6IHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7ZSA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke3QgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlLW91dDtcbn1cbi5mcmFtZSwgI2FkeWVuLWNvbnRhaW5lciwgI2FkeWVuLWNvbnRhaW5lciA+ICoge1xuICBtYXgtd2lkdGg6ICR7ZSA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke3QgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiBub25lO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmAsIFFzID0gKHsgd2lkdGg6IGUsIGhlaWdodDogdCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHtlID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7dCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlLW91dDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBib3gtc2hhZG93OiAwIDEwcHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1zZWxlY3Rvci1jb250ZW50IHtcbiAgcGFkZGluZzogMjRweDtcbiAgbWF4LWhlaWdodDogY2FsYygke3QgPz8gXCI2MDBweFwifSAtIDQ4cHgpO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLmJhbmstc2VsZWN0b3ItaGVhZGVyIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBjb2xvcjogIzFhMWExYTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJhbmstbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTJweDtcbn1cbi5iYW5rLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxNnB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTVlNWU1O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cbi5iYW5rLWl0ZW06aG92ZXIge1xuICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1pdGVtOmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cbi5iYW5rLWxvZ28ge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U5ZWNlZjtcbn1cbi5iYW5rLWxvZ28tcGxhY2Vob2xkZXIge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGNvbG9yOiAjNmM3NTdkO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmJhbmstaW5mbyB7XG4gIGZsZXg6IDE7XG59XG4uYmFuay1kaXNwbGF5LW5hbWUge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMWExYTFhO1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG4uYmFuay1uYW1lIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6ICM2Yzc1N2Q7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYCwgVXQgPSAoZSwgdCkgPT4ge1xuICBjb25zdCB7IGlkOiByLCB0aXRsZTogbiwgd2lkdGg6IGEsIGhlaWdodDogbywgbmFtZTogcyB9ID0gdCA/PyB7fSwgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgbC5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtLcyh7IHdpZHRoOiBhLCBoZWlnaHQ6IG8gfSl9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7ZX1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCIke3IgPz8gXCJ0aHJlZS1kcy1pZnJhbWVcIn1cIiB0aXRsZT1cIiR7biA/PyBcIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIn1cIiBhbGxvdz1cInBheW1lbnRcIiBuYW1lPVwiJHtzID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHUgPSBjLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICB1LmFwcGVuZENoaWxkKGwuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgZCA9IHUucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIG0gPSB1LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyksIHsgaG9zdDogYywgaWZyYW1lOiBkLCBjYW5jZWxCdXR0b246IG0gfTtcbn0sIFVuID0gKGUsIHQpID0+IHtcbiAgY29uc3QgeyB3aWR0aDogciwgaGVpZ2h0OiBuLCB0aXRsZTogYSB9ID0gdCA/PyB7fTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvLCBzKSA9PiB7XG4gICAgY29uc3QgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKSwgYyA9IGUubWFwKCh5LCBoKSA9PiB7XG4gICAgICBjb25zdCB2ID0geS5yZXNvdXJjZXMubG9nb191cmwgPyBgPGltZyBzcmM9XCIke3kucmVzb3VyY2VzLmxvZ29fdXJsfVwiIGFsdD1cIiR7eS5kaXNwbGF5X25hbWV9XCIgY2xhc3M9XCJiYW5rLWxvZ29cIiAvPmAgOiBgPGRpdiBjbGFzcz1cImJhbmstbG9nby1wbGFjZWhvbGRlclwiPiR7eS5kaXNwbGF5X25hbWUuc3Vic3RyaW5nKDAsIDIpLnRvVXBwZXJDYXNlKCl9PC9kaXY+YDtcbiAgICAgIHJldHVybiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWl0ZW1cIiBkYXRhLWJhbmstaW5kZXg9XCIke2h9XCI+XG4gICAgICAgICAgJHt2fVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWluZm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWRpc3BsYXktbmFtZVwiPiR7eS5kaXNwbGF5X25hbWV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1uYW1lXCI+JHt5LmJhbmtfbmFtZX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gICAgbC5pbm5lckhUTUwgPSBgXG4gICAgICA8c3R5bGU+XG4gICAgICAgICR7UXMoeyB3aWR0aDogciwgaGVpZ2h0OiBuIH0pfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWhlYWRlclwiPiR7YSA/PyBcIlNlbGVjdCB5b3VyIGJhbmtcIn08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWxpc3RcIj5cbiAgICAgICAgICAgICAgJHtjfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICBjb25zdCB1ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgZCA9IHUuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gICAgZC5hcHBlbmRDaGlsZChsLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gICAgY29uc3QgbSA9IGQucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpLCBfID0gZC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJhbmstaXRlbVwiKSwgZiA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodSk7XG4gICAgfTtcbiAgICBtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBmKCksIHMobmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpKTtcbiAgICB9KSwgXy5mb3JFYWNoKCh5LCBoKSA9PiB7XG4gICAgICB5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGYoKSwgbyhlW2hdKTtcbiAgICAgIH0pO1xuICAgIH0pLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHUpO1xuICB9KTtcbn0sIGp0ID0gKGUsIHQpID0+IHtcbiAgY29uc3QgeyB3aWR0aDogciwgaGVpZ2h0OiBuLCBiYXNlVXJsOiBhIH0gPSB0ID8/IHt9LCBvID0gbmV3IFVSTChgYXBwL2RpcmVjdF9kZWJpdC9taWNyb19kZXBvc2l0Lz90eXBlPSR7ZX1gLCBhKS50b1N0cmluZygpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGwpID0+IHtcbiAgICBjb25zdCBjID0gVXQobywgeyB3aWR0aDogciwgaGVpZ2h0OiBuLCB0aXRsZTogXCJNaWNybyBEZXBvc2l0IEZvcm1cIiB9KSwgdSA9ICgpID0+IHtcbiAgICAgIGMuaG9zdC5yZW1vdmUoKTtcbiAgICB9LCBkID0gKCkgPT4ge1xuICAgICAgdSgpLCBsKG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIikpO1xuICAgIH0sIG0gPSAodikgPT4ge1xuICAgICAgdSgpLCB2LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgJiYgdi5wYXlsb2FkID8gXCJlcnJvclwiIGluIHYucGF5bG9hZCA/IGwobmV3IEVycm9yKHYucGF5bG9hZC5lcnJvcikpIDogcyh2LnBheWxvYWQpIDogbChuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gZmFpbGVkXCIpKTtcbiAgICB9O1xuICAgIGMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkKTtcbiAgICBjb25zdCBfID0gZHIoXG4gICAgICBjLmlmcmFtZSxcbiAgICAgIG0sXG4gICAgICBuZXcgVVJMKGEpLm9yaWdpbixcbiAgICAgIFwibWljcm8tZGVwb3NpdC1zdGF0dXNcIixcbiAgICAgIG5hXG4gICAgKSwgZiA9ICgpID0+IHtcbiAgICAgIGMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkKSwgY2xlYXJJbnRlcnZhbChfKTtcbiAgICB9LCB5ID0gZCwgaCA9ICgpID0+IHtcbiAgICAgIGYoKSwgeSgpO1xuICAgIH07XG4gICAgYy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGQpLCBjLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaCk7XG4gIH0pO1xufTtcbmZ1bmN0aW9uIGRyKGUsIHQsIHIsIG4sIGEpIHtcbiAgY29uc3QgbyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbCA9IGF3YWl0IERzKGUsIHIsIG4sIGEpO1xuICAgICAgbCAmJiAoY2xlYXJJbnRlcnZhbChzKSwgdChsKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgfVxuICB9O1xuICBvKCk7XG4gIGNvbnN0IHMgPSBzZXRJbnRlcnZhbChvLCBObik7XG4gIHJldHVybiBzO1xufVxuZnVuY3Rpb24gam4oe1xuICBlbGVtZW50czogZSxcbiAgcG9sbGluZ0ludGVydmFsOiB0LFxuICByZXNvbHZlOiByXG59KSB7XG4gIGNvbnN0IG4gPSAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0KSwgZS5ob3N0LnJlbW92ZSgpLCByKHsgc3RhdHVzOiBULkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgcmV0dXJuIGUuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKSwgKCkgPT4ge1xuICAgIGUuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKTtcbiAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIEVlKGUpIHtcbiAgY29uc3QgeyB1cmw6IHQsIGJhc2VVcmw6IHIsIGZyYW1lV2lkdGg6IG4sIGZyYW1lSGVpZ2h0OiBhLCBmcmFtZVRpdGxlOiBvIH0gPSBlLCBzID0gVXQodCwgeyB3aWR0aDogbiwgaGVpZ2h0OiBhLCB0aXRsZTogbyB9KTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChsKSA9PiB7XG4gICAgY29uc3QgYyA9IChtKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKSwgbChtKSwgZCA9PSBudWxsIHx8IGQoKTtcbiAgICB9LCB1ID0gZHIoXG4gICAgICBzLmlmcmFtZSxcbiAgICAgIGMsXG4gICAgICBuZXcgVVJMKHIpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBYclxuICAgICksIGQgPSBqbih7XG4gICAgICBlbGVtZW50czogcyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogdSxcbiAgICAgIHJlc29sdmU6IGxcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCAkbiA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBFZShlKTtcbiAgaWYgKHQuc3RhdHVzID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQuc3RhdHVzID09PSBULkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiB0LnN0YXR1cyAhPT0gVC5TVUNDRVNTICYmIF90KHQuc3RhdHVzKSwge1xuICAgIGhyZWY6IHQuaHJlZlxuICB9O1xufSwgWHMgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gd2luZG93Lm9wZW4odCwgXCJfYmxhbmtcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHI7XG59LCBHbiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IGEgfSA9IEkoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobywgcykgPT4ge1xuICAgIGNvbnN0IGwgPSBYcyhlLCBuKSwgYyA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBGcyh0LCByKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGMpLCBsLmNsb3NlKCksIG8oeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGwuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBhKGVlKHUpKSwgY2xlYXJJbnRlcnZhbChjKSwgcyhlZSh1KSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59LCBsZSA9ICgpID0+IHtcbiAgY29uc3QgZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzIDogW25hdmlnYXRvci5sYW5ndWFnZV07XG4gIGxldCB0ID0gZSA9PSBudWxsID8gdm9pZCAwIDogZVswXTtcbiAgcmV0dXJuIHQgJiYgKHQgPSB0LnNwbGl0KFwiLVwiKVswXSksIHQ7XG59LCB7IGxvZ19fOiBlYywgZXJyX186IHRjIH0gPSBJKFwiY29tbW9uLWNjXCIpLCByYyA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGU6IGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3M6IHQsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzOiByLFxuICBwYXltZW50X21ldGhvZDogblxufSkgPT4ge1xuICBjb25zdCBhID0ge307XG4gIHJldHVybiBuID09PSBcImFjaFwiICYmIChhW3AuRklSU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSksIGFbcC5MQVNUX05BTUVdID0geiQxLnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pKSwgZSAmJiAoYVtwLlpJUF9DT0RFXSA9IEEpLCB0ICYmIChhW3AuTElORTFdID0gQSwgYVtwLkNJVFldID0gQSwgYVtwLlNUQVRFXSA9IEEsIGFbcC5DT1VOVFJZXSA9IEEsIGFbcC5aSVBfQ09ERV0gPSBBKSwgciAmJiAoYVtwLlNISVBQSU5HX0xJTkUxXSA9IEEsIGFbcC5TSElQUElOR19DSVRZXSA9IEEsIGFbcC5TSElQUElOR19TVEFURV0gPSBBLCBhW3AuU0hJUFBJTkdfQ09VTlRSWV0gPSBBLCBhW3AuU0hJUFBJTkdfWklQX0NPREVdID0gQSksIE9iamVjdC5rZXlzKGEpLmxlbmd0aCA9PT0gMCA/ICRlIDogJGUuZXh0ZW5kKGEpO1xufSwgbmMgPSAoZSwgdCwgciA9IHt9KSA9PiB7XG4gIGlmIChyKSB7XG4gICAgZWMoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIGNvbnN0IG8gPSBPYmplY3Qua2V5cyhyKTtcbiAgICBmb3IgKGxldCBzID0gMDsgcyA8IG8ubGVuZ3RoOyBzKyspIHtcbiAgICAgIGNvbnN0IGwgPSBvW3NdLCBjID0gcltsXTtcbiAgICAgIGVbbF0gfHwgKGVbbF0gPSBjKTtcbiAgICB9XG4gIH1cbiAgZVtwLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10gPSAhIWVbcC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddLCBlW3AuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSAmJiAoZVtwLlNISVBQSU5HX0xJTkUxXSA9IGVbcC5MSU5FMV0sIGVbcC5TSElQUElOR19MSU5FMl0gPSBlW3AuTElORTJdLCBlW3AuU0hJUFBJTkdfTElORTNdID0gZVtwLkxJTkUzXSwgZVtwLlNISVBQSU5HX0NJVFldID0gZVtwLkNJVFldLCBlW3AuU0hJUFBJTkdfU1RBVEVdID0gZVtwLlNUQVRFXSwgZVtwLlNISVBQSU5HX0NPVU5UUlldID0gZVtwLkNPVU5UUlldLCBlW3AuU0hJUFBJTkdfWklQX0NPREVdID0gZVtwLlpJUF9DT0RFXSk7XG4gIGNvbnN0IGEgPSByYyhyKS5zYWZlUGFyc2UoZSk7XG4gIGlmICghYS5zdWNjZXNzKSB7XG4gICAgY29uc3QgbyA9IGEuZXJyb3IuZm9ybWF0KCksIHMgPSBKcyhvKSwgbCA9IE9iamVjdC5rZXlzKHMpO1xuICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbC5sZW5ndGg7IGMrKykge1xuICAgICAgY29uc3QgdSA9IGxbY10sIGQgPSBzW3VdO1xuICAgICAgdCh1LCBkLCB1KTtcbiAgICB9XG4gICAgdGhyb3cgdGMoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBzKSwgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gYS5kYXRhO1xufSwgeyBsb2dfXzogb2MsIGVycl9fOiBhYyB9ID0gSShcImNvbW1vbi1jY1wiKSwgcSA9IG5jLCBWbiA9IChlLCB0KSA9PiB7XG4gIGZvciAoY29uc3QgciBvZiBlKVxuICAgIGlmIChyLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgci5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBhID0gUXIuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWEuc3VjY2VzcylcbiAgICAgICAgICBhYyhgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG8gPSBhLmRhdGE7XG4gICAgICAgICAgdChvLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBvYyhgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoci5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgeyBsb2dfXzogdXUsIGVycl9fOiBxbiB9ID0gSShcImNvbW1vblwiKSwgbXQgPSAoZSkgPT4ge1xuICBpZiAoZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IGUucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59LCB6ID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gdC5zYWZlUGFyc2Uobikuc3VjY2Vzcyk7XG4gIGlmICghcilcbiAgICB0aHJvdyBxbihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOlwiLCBlKSwgbmV3IEVycm9yKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxcIik7XG4gIHJldHVybiB0LnBhcnNlKHIpO1xufSwgcHIgPSAoZSwgdCkgPT4gKHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiBlLmVtYWlsLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBlLmxhc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBIKGUpLFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUShlLCB0KVxufSksIHVlID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogdCB9ID0gSShlLmxvZ1ByZWZpeCksIHIgPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSBtdChlLmNvbmZpcm1SZXN1bHQpO1xuICBpZiAoci5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHQoXCJTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uXCIpLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBhd2FpdCBOcyhlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBtX2lkOiBuLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSkgfTtcbiAge1xuICAgIGlmIChlLnVzZVBheUZpcnN0Rmxvdykge1xuICAgICAgaWYgKHQoXCJVc2luZyBwYXktZmlyc3QgZmxvdy4uLlwiKSwgIWUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgcW4oXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBlLmNvbmZpcm1SZXN1bHQpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBlLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGEgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7IHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl9hZGRyZXNzOiBIKGUucmVxdWlyZWRGb3JtRmllbGRzKSxcbiAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEoZS5yZXF1aXJlZEZvcm1GaWVsZHMsIHIuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogci5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHIuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogZS5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9O1xuICAgIHJldHVybiB0KFwiRG9pbmcgY2hlY2tvdXQuLi5cIiwgYSksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IHVyKGUuYW55Q2RlQ29ubmVjdGlvbiwgYSkgfTtcbiAgfVxufSwgVSA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIiwgXCJhZHllblwiLCBcInBheXBhbFwiLCBcInBvY2t5dFwiLCBcImxvb3BcIl0pO1xuVS5FbnVtLnN0cmlwZTtcbmNvbnN0IHpuID0gKHtcbiAgc2NyaXB0SWQ6IGUsXG4gIHNyYzogdCxcbiAgY2hlY2tMb2FkZWRGbjogclxufSkgPT4ge1xuICBjb25zdCBuID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGEsIG8pID0+IHtcbiAgICBsZXQgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgcy5zcmMgPSB0LCBzLmlkID0gZSwgcy5hc3luYyA9ICEwO1xuICAgIGNvbnN0IGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICByKCkgPyBhKCkgOiBsID8gcyA9IGwgOiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImxvYWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgbi5hYm9ydCgpLCBhKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImVycm9yXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIG4uYWJvcnQoKSwgbyhcIkZhaWxlZCB0byBsb2FkIHRoZSBzY3JpcHRcIik7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn0sIEJlID0gKHtcbiAgZ2F0ZXdheTogZSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQ6IHQsXG4gIG1lcmNoYW50TmFtZTogcixcbiAgbWVyY2hhbnRJZDogbixcbiAgaW5pdGlhbFByZXZpZXc6IGEsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IG8sXG4gIHByZWZpbGw6IHNcbn0pID0+IHtcbiAgdmFyIG0sIF87XG4gIGNvbnN0IGwgPSAoKG0gPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYW1vdW50QXRvbSkgPz8gKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYW1vdW50QXRvbSkgPz8gMCwgYyA9IE1hdGgubWF4KGwgLyAxMDAsIDApLCB1ID0gKCgoXyA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogXy5jdXJyZW5jeSkgPz8gKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY3VycmVuY3kpID8/IGEuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGQgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6ICEwLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5OiBlLFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6ICEwLFxuICAgIHNoaXBwaW5nQWRkcmVzc1JlcXVpcmVkOiBzLmNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gUFJPRCBlbnYgd2lsbCBuZWVkIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiBuID8/IFwiXCIsXG4gICAgICBtZXJjaGFudE5hbWU6IHJcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IG8gIT0gbnVsbCAmJiBvLnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogYy50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gbyAhPSBudWxsICYmIG8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB0eXBlb2Ygby5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB7IC4uLmQsIC4uLm8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QoZCkgfSA6IHsgLi4uZCwgLi4uby5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIF9yID0gKCkgPT4gem4oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+IHtcbiAgICB2YXIgZSwgdDtcbiAgICByZXR1cm4gISEoKHQgPSAoZSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBlLnBheW1lbnRzKSAhPSBudWxsICYmIHQuYXBpKTtcbiAgfVxufSk7XG5sZXQgQnQgPSBudWxsO1xuY29uc3QgbXIgPSBhc3luYyAoZSkgPT4gYXdhaXQgd24oZSkgPT09IFwicHJvZFwiID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgWWUgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgbXIoZSk7XG4gIHJldHVybiBCdCA9PT0gbnVsbCAmJiAoQnQgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiByLFxuICAgIG1lcmNoYW50SW5mbzogdC5tZXJjaGFudEluZm9cbiAgfSkpLCBCdDtcbn0sIEplID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gdCA/IGVuLnBhcnNlKHQpIDogbnVsbDtcbn0sIGZyID0gKGUsIHQpID0+IHtcbiAgdmFyIG8sIHMsIGwsIGM7XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgbiA9IChzID0gKG8gPSB0LnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogby5pbmZvKSA9PSBudWxsID8gdm9pZCAwIDogcy5iaWxsaW5nQWRkcmVzcywgYSA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICBpZiAobikge1xuICAgIGNvbnN0IFt1LCAuLi5kXSA9ICgoYyA9IChsID0gbi5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBtID0gZC5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgcltwLkVNQUlMXSA9IHJbcC5FTUFJTF0gfHwgdC5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbcC5MSU5FMV0gPSByW3AuTElORTFdIHx8IG4uYWRkcmVzczEgfHwgXCJcIiwgcltwLkxJTkUyXSA9IHJbcC5MSU5FMl0gfHwgbi5hZGRyZXNzMiB8fCBcIlwiLCByW3AuTElORTNdID0gcltwLkxJTkUzXSB8fCBuLmFkZHJlc3MzIHx8IFwiXCIsIHJbcC5DSVRZXSA9IHJbcC5DSVRZXSB8fCBuLmxvY2FsaXR5IHx8IFwiXCIsIHJbcC5TVEFURV0gPSByW3AuU1RBVEVdIHx8IG4uYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCIsIHJbcC5DT1VOVFJZXSA9IHJbcC5DT1VOVFJZXSB8fCBuLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgcltwLlpJUF9DT0RFXSA9IHJbcC5aSVBfQ09ERV0gfHwgbi5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBfID0gcltwLkZJUlNUX05BTUVdIHx8IHUgfHwgXCJcIiwgZiA9IHJbcC5MQVNUX05BTUVdIHx8IG0gfHwgXCJcIjtcbiAgICBfIHx8IGYgPyAocltwLkZJUlNUX05BTUVdID0gXywgcltwLkxBU1RfTkFNRV0gPSBmKSA6IChyW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbcC5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIGEgJiYgKHJbcC5TSElQUElOR19MSU5FMV0gPSByW3AuU0hJUFBJTkdfTElORTFdIHx8IGEuYWRkcmVzczEgfHwgXCJcIiwgcltwLlNISVBQSU5HX0xJTkUyXSA9IHJbcC5TSElQUElOR19MSU5FMl0gfHwgYS5hZGRyZXNzMiB8fCBcIlwiLCByW3AuU0hJUFBJTkdfTElORTNdID0gcltwLlNISVBQSU5HX0xJTkUzXSB8fCBhLmFkZHJlc3MzIHx8IFwiXCIsIHJbcC5TSElQUElOR19DSVRZXSA9IHJbcC5TSElQUElOR19DSVRZXSB8fCBhLmxvY2FsaXR5IHx8IFwiXCIsIHJbcC5TSElQUElOR19aSVBfQ09ERV0gPSByW3AuU0hJUFBJTkdfWklQX0NPREVdIHx8IGEucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCIsIHJbcC5TSElQUElOR19TVEFURV0gPSByW3AuU0hJUFBJTkdfU1RBVEVdIHx8IGEuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCIsIHJbcC5TSElQUElOR19DT1VOVFJZXSA9IHJbcC5TSElQUElOR19DT1VOVFJZXSB8fCBhLmNvdW50cnlDb2RlIHx8IFwiVVNcIiksIHI7XG59LCB7IGxvZ19fOiBQZSwgZXJyX186IGljIH0gPSBJKFwiYXd4LWJhY3NcIiksIHNjID0gQihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgQywgRDtcbiAgICBjb25zdCBvID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBhd2FpdCBNKHMpLCBjID0gYS52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIjtcbiAgICBsZXQgdSA9IG51bGw7XG4gICAgaWYgKGMgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBQZShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICB1ID0gYXdhaXQganQoXCJiYWNzX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSksIFBlKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBQZShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGQgPSBhd2FpdCBvZShzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG9bcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogb1twLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogb1twLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogSChvKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBRKG8sIGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGxlKClcbiAgICB9KSwgbSA9IEplKGQpLCBfID0gbSA9PSBudWxsID8gdm9pZCAwIDogbS5jb25zZW50X2lkLCBmID0gbSA9PSBudWxsID8gdm9pZCAwIDogbS5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHk7XG4gICAgaWYgKGMgPT09IFwidHJ1ZWxheWVyXCIgJiYgZiAmJiBmLmxlbmd0aCA+PSAxKSB7XG4gICAgICBQZShcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgeSA9IGF3YWl0IFVuKGYsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSksIFBlKGBCYW5rIHNlbGVjdGVkOiAke3kuZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IFBlKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGggPSBIKG8pLCB2ID0ge1xuICAgICAgdHlwZTogXCJiYWNzX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgYmFjc19kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gVHJ1ZUxheWVyXG4gICAgICAgIGJhbmtfbmFtZTogeSA9PSBudWxsID8gdm9pZCAwIDogeS5iYW5rX25hbWUsXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBvd25lcl9uYW1lOiBPdChvW3AuRklSU1RfTkFNRV0sIG9bcC5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG9bcC5FTUFJTF0sXG4gICAgICAgIGNvdW50cnlfY29kZTogb1twLkNPVU5UUlldLFxuICAgICAgICBhY2NvdW50X251bWJlcjogdSA9PSBudWxsID8gdm9pZCAwIDogdS5hY2NvdW50X251bWJlcixcbiAgICAgICAgc29ydF9jb2RlOiB1ID09IG51bGwgPyB2b2lkIDAgOiB1LnNvcnRfY29kZSxcbiAgICAgICAgYWRkcmVzczogeyAuLi5oLCB0b3duOiBoLmNpdHksIHBvc3Rjb2RlOiBoLnppcF9jb2RlIH1cbiAgICAgIH1cbiAgICB9LCB3ID0gKEQgPSAoQyA9IChhd2FpdCBPKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogYyxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHZcbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogQy5maW5kKFxuICAgICAgKGspID0+IGsudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogRC5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHcpIHtcbiAgICAgIFBlKFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzOiBrIH0gPSBhd2FpdCBFZSh7XG4gICAgICAgIHVybDogdyxcbiAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoUGUoYOKVsCBCQUNTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtrfV1gKSwgayA9PT0gVC5DQU5DRUxMRUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIGlmIChrID09PSBULkZBSUxVUkUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgYiA9IGF3YWl0IE8ocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBfXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB1ZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBzLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogYixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaykge1xuICAgICAgdGhyb3cgaWMoXCJCQUNTIHBheW1lbnQgZXJyb3JcIiwgayksIGcoXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBrXG4gICAgICB9KSwgbmV3IEVycm9yKChrID09IG51bGwgPyB2b2lkIDAgOiBrLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IEtlLCBlcnJfXzogY2MgfSA9IEkoXCJhd3gtZWZ0XCIpLCBsYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIFMsIHc7XG4gICAgY29uc3QgbyA9IHEociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYXdhaXQgTShzKSwgYyA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgdSA9IG51bGw7XG4gICAgaWYgKGMgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBLZShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICB1ID0gYXdhaXQganQoXCJlZnRfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI0NTBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybFxuICAgICAgICB9KSwgS2UoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IEtlKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZCA9IGF3YWl0IG9lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBIKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEobywgbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogbGUoKVxuICAgIH0pLCBtID0gSmUoZCksIF8gPSBtID09IG51bGwgPyB2b2lkIDAgOiBtLmNvbnNlbnRfaWQsIGYgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgb3duZXJfbmFtZTogT3Qob1twLkZJUlNUX05BTUVdLCBvW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgICAvLyBNaWNyb2RlcG9zaXRcbiAgICAgICAgaW5zdGl0dXRpb25fbnVtYmVyOiB1ID09IG51bGwgPyB2b2lkIDAgOiB1Lmluc3RpdHV0aW9uX251bWJlcixcbiAgICAgICAgdHJhbnNpdF9udW1iZXI6IHUgPT0gbnVsbCA/IHZvaWQgMCA6IHUudHJhbnNpdF9udW1iZXIsXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiB1ID09IG51bGwgPyB2b2lkIDAgOiB1LmFjY291bnRfbnVtYmVyXG4gICAgICAgIC8vIG1hbmRhdGVfdmVyc2lvbjogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgIH1cbiAgICB9LCBoID0gKHcgPSAoUyA9IChhd2FpdCBPKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogYyxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGZcbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogUy5maW5kKFxuICAgICAgKGIpID0+IGIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogdy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKGgpIHtcbiAgICAgIEtlKFwiRUZUIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXM6IGIgfSA9IGF3YWl0IEVlKHtcbiAgICAgICAgdXJsOiBoLFxuICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJFRlQgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgaWYgKEtlKGDilbAgRUZUIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtifV1gKSwgYiA9PT0gVC5DQU5DRUxMRUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVGVCB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKGIgPT09IFQuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHYgPSBhd2FpdCBPKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogX1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWVmdFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBzLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogdixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYikge1xuICAgICAgdGhyb3cgY2MoXCJFRlQgcGF5bWVudCBlcnJvclwiLCBiKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGJcbiAgICAgIH0pLCBuZXcgRXJyb3IoKGIgPT0gbnVsbCA/IHZvaWQgMCA6IGIubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogU2UsIGVycl9fOiB1YyB9ID0gSShcImF3eC1zZXBhXCIpLCBkYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHcsIGI7XG4gICAgY29uc3QgbyA9IHEociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYXdhaXQgTShzKSwgYyA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwidHJ1ZWxheWVyXCI7XG4gICAgbGV0IHUgPSBudWxsO1xuICAgIGlmIChjID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgU2UoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdSA9IGF3YWl0IGp0KFwic2VwYV9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjMwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pLCBTZShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgU2UoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkID0gYXdhaXQgb2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG9bcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG9bcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IEgobyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUShvLCBsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBsZSgpXG4gICAgfSksIG0gPSBKZShkKSwgXyA9IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uY29uc2VudF9pZCwgZiA9IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCB5O1xuICAgIGlmIChjID09PSBcInRydWVsYXllclwiICYmIGYgJiYgZi5sZW5ndGggPj0gMSkge1xuICAgICAgU2UoXCJNdWx0aXBsZSBiYW5rcyBhdmFpbGFibGUsIHNob3dpbmcgYmFuayBzZWxlY3Rvci4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHkgPSBhd2FpdCBVbihmLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pLCBTZShgQmFuayBzZWxlY3RlZDogJHt5LmRpc3BsYXlfbmFtZX1gKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBTZShcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB2ID0gKGIgPSAodyA9IChhd2FpdCBPKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogYyxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFfZGlyZWN0X2RlYml0XCIsXG4gICAgICAgICAgc2VwYV9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vIHRydWVsYXllclxuICAgICAgICAgICAgYmFua19uYW1lOiB5ID09IG51bGwgPyB2b2lkIDAgOiB5LmJhbmtfbmFtZSxcbiAgICAgICAgICAgIGNvdW50cnlfY29kZTogb1twLkNPVU5UUlldLFxuICAgICAgICAgICAgLy8gbWljcm9kZXBvc2l0XG4gICAgICAgICAgICBvd25lcl9uYW1lOiBPdChvW3AuRklSU1RfTkFNRV0sIG9bcC5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgICAgICAgaWJhbjogdSA9PSBudWxsID8gdm9pZCAwIDogdS5pYmFuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IHcuZmluZChcbiAgICAgIChDKSA9PiBDLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGIucmVkaXJlY3RfdXJsO1xuICAgIGlmICh2KSB7XG4gICAgICBTZShcIlNFUEEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogQyB9ID0gYXdhaXQgRWUoe1xuICAgICAgICB1cmw6IHYsXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIlNFUEEgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgaWYgKFNlKGDilbAgU0VQQSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7Q31dYCksIEMgPT09IFQuQ0FOQ0VMTEVEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAoQyA9PT0gVC5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IFMgPSBhd2FpdCBPKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogX1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LXNlcGFcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogcyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG8sXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IFMsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgIHRocm93IHVjKFwiU0VQQSBwYXltZW50IGVycm9yXCIsIEMpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogQ1xuICAgICAgfSksIG5ldyBFcnJvcigoQyA9PSBudWxsID8gdm9pZCAwIDogQy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBwYywgZXJyX186IHlyIH0gPSBJKFwiYWlyd2FsbGV4LWNjXCIpLCBfYyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSksIG1jID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IF9jLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCByID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWA7XG4gICAgdGhyb3cgeXIobiksIG5ldyBFcnJvcihyKTtcbiAgfVxuICByZXR1cm4gdC5kYXRhO1xufSwgSG4gPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgZmMgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBuZXcgVVJMKGUgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInBheW1lbnRfaW50ZW50X2lkXCIpO1xuICAgIGlmICghdClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGludGVudCBJRCBmb3VuZCBpbiBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIHBjKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke3R9XWApLCB0O1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgciA9IFwiRXJyb3IgdmVyaWZ5aW5nIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyB5cihyLCBgUmVzdWx0aW5nIFVSTDogJHtlfS5cbkVycm9yOiAke2VlKHQpfWApLCBuZXcgRXJyb3Iocik7XG4gIH1cbn0sIEJuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IG1jKHQpLCBuID0gYXdhaXQgJG4oeyB1cmw6IHJbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogZSB9KSwgYSA9IGZjKG4uaHJlZiA/PyBcIlwiKSwgbyA9IHJbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChvICE9PSBhKSB7XG4gICAgY29uc3QgbCA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgYyA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHthfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke299KS5gO1xuICAgIHRocm93IHlyKGMpLCBuZXcgRXJyb3IobCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGEsXG4gICAgICBjb25zZW50X2lkOiByW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCBZbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgSm4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIGhyID0gKCkgPT4gem4oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvblxufSksIGdyID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgbiA9IHQuYmlsbGluZ0NvbnRhY3QsIGEgPSB0LnNoaXBwaW5nQ29udGFjdCwgbyA9IHsgLi4uZSB9O1xuICBpZiAociB8fCBuIHx8IGEpIHtcbiAgICBvW3AuRU1BSUxdID0gb1twLkVNQUlMXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5lbWFpbEFkZHJlc3MpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmVtYWlsQWRkcmVzcykgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBvW3AuQ09VTlRSWV0gPSBvW3AuQ09VTlRSWV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY291bnRyeUNvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmNvdW50cnlDb2RlKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBvW3AuWklQX0NPREVdID0gb1twLlpJUF9DT0RFXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5wb3N0YWxDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5wb3N0YWxDb2RlKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgcyA9IG9bcC5GSVJTVF9OQU1FXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5naXZlbk5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmdpdmVuTmFtZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZ2l2ZW5OYW1lKSB8fCBcIlwiLCBsID0gb1twLkxBU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZmFtaWx5TmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZmFtaWx5TmFtZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZmFtaWx5TmFtZSkgfHwgXCJcIjtcbiAgICBzIHx8IGwgPyAob1twLkZJUlNUX05BTUVdID0gcywgb1twLkxBU1RfTkFNRV0gPSBsKSA6IChvW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIG9bcC5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIG87XG59O1xueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IHljID0gKHtcbiAgdG90YWw6IGUsXG4gIHByZWZpbGw6IHRcbn0pID0+IHtcbiAgdmFyIG47XG4gIGlmICh0Lm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7dC50b2tlbn1gLCBNbikudG9TdHJpbmcoKVxuICAgIH07XG4gIGNvbnN0IHIgPSAobiA9IHQubGluZV9pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IG5bMF07XG4gIGlmIChyKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiAociA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsX2NvdW50KSA/PyB2b2lkIDAsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHt0LnRva2VufWBcbiAgICB9O1xufSwgaGMgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIHZhciBsLCBjO1xuICBjb25zdCBhID0gKCgobCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogbC5jdXJyZW5jeSkgPz8gKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY3VycmVuY3kpID8/IHQuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIHMgPSAoKCgoYyA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogYy5hbW91bnRBdG9tKSA/PyAodCA9PSBudWxsID8gdm9pZCAwIDogdC5hbW91bnRBdG9tKSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGU6IGEsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5sYWJlbCkgPz8gbiA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlICE9IG51bGwgJiYgZS5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IHNcbiAgICB9XG4gIH07XG59LCB3ciA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiB0LFxuICBwcmVmaWxsOiByLFxuICBkZWZhdWx0TGFiZWw6IG5cbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGU6IGEsIHRvdGFsOiBvIH0gPSBoYyh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgICBpbml0aWFsUHJldmlldzogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIGRlZmF1bHRMYWJlbDogblxuICB9KTtcbiAgbGV0IHMgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGU6IGEsXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1xuICAgICAgXCJlbWFpbFwiLFxuICAgICAgLi4uci5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyA/IFtcInBvc3RhbEFkZHJlc3NcIl0gOiBbXVxuICAgIF0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgIF0sXG4gICAgdG90YWw6IG8sXG4gICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IHljKHtcbiAgICAgIHRvdGFsOiBvLFxuICAgICAgcHJlZmlsbDogclxuICAgIH0pXG4gIH07XG4gIHJldHVybiBlICE9IG51bGwgJiYgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ICYmICh0eXBlb2YgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHMgPSB7XG4gICAgLi4ucyxcbiAgICAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocylcbiAgfSA6IHMgPSB7IC4uLnMsIC4uLmUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9KSwgcztcbn0sIGdjID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pLCB3YyA9IHokMS5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pLCB7IGxvZ19fOiBxZSwgZXJyX186IGR0IH0gPSBJKFwiYWR5ZW4tY2NcIiksIHZjID0geiQxLm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogZ2MsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHokMS5zdHJpbmcoKVxufSksIFduID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBiYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSB2Yy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IGR0KGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWApLCBuZXcgRXJyb3IoV24pO1xuICByZXR1cm4gdC5kYXRhO1xufSwgRWMgPSAoZSkgPT4gSlNPTi5wYXJzZShlKSwgRHIgPSAoKSA9PiBcIkFkeWVuV2ViXCIgaW4gd2luZG93ICYmIFwiQWR5ZW5DaGVja291dFwiIGluIHdpbmRvdy5BZHllbldlYiwgUGMgPSBhc3luYyAoKSA9PiB7XG4gIHFlKFwiV2FpdGluZyBmb3IgQWR5ZW4gU0RLIHRvIGxvYWQuLi5cIik7XG4gIGZvciAobGV0IGUgPSAwOyBlIDwgMTA7IGUrKylcbiAgICBEcigpIHx8IGF3YWl0IER0KDUwMCk7XG4gIGlmICghRHIoKSlcbiAgICB0aHJvdyBkdChcIkFkeWVuIFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCBuZXcgRXJyb3IoV24pO1xuICByZXR1cm4gcWUoXCJBZHllbiBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKSwgd2luZG93LkFkeWVuV2ViLkFkeWVuQ2hlY2tvdXQ7XG59LCBTYyA9IChlKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVyczogdCwgbG9jYWxlOiByLCBjb3VudHJ5Q29kZTogbiwgY29tcG9uZW50OiBhLCBob3N0OiBvLCBjYW5jZWxCdXR0b246IHMgfSA9IGUsIGwgPSBFYyh0W1wib3AtYWR5ZW4tYWN0aW9uXCJdKTtcbiAgcmV0dXJuIHFlKGBSdW5uaW5nIEFkeWVuIDNEUyBmbG93IGZvciBhY3Rpb24gdHlwZTogJHtsLnR5cGV9YCksIG5ldyBQcm9taXNlKChjKSA9PiB7XG4gICAgY29uc3QgdSA9ICgpID0+IHtcbiAgICAgIHFlKFwiQ2xlYW5pbmcgdXAgQWR5ZW4gM0RTIGZsb3dcIiksIHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIF8pLCBvLnJlbW92ZSgpO1xuICAgIH0sIGQgPSAoeSkgPT4ge1xuICAgICAgZHQoXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFJlc3VsdDpcIiwgeSksIGMoeyBzdGF0dXM6IFQuRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCBtID0gKHkpID0+IHtcbiAgICAgIGR0KFwiQWR5ZW4gZXJyb3I6XCIsIHkpLCBjKHsgc3RhdHVzOiBULkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgXyA9ICgpID0+IHtcbiAgICAgIGMoeyBzdGF0dXM6IFQuQ0FOQ0VMTEVELCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgcy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgXyk7XG4gICAgY29uc3QgZiA9ICh5LCBoLCB2KSA9PiB7XG4gICAgICBvLnJlbW92ZSgpLCBjKHsgc3RhdHVzOiBULlNVQ0NFU1MsIGFkZGl0aW9uYWxEZXRhaWxzOiB5LCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgUGMoKS50aGVuKFxuICAgICAgKHkpID0+IHkoe1xuICAgICAgICBjbGllbnRLZXk6IHRbXCJvcC1hZHllbi1jbGllbnQta2V5XCJdLFxuICAgICAgICBlbnZpcm9ubWVudDogdFtcIm9wLWFkeWVuLWVudmlyb25tZW50XCJdLFxuICAgICAgICBsb2NhbGU6IHIsXG4gICAgICAgIGNvdW50cnlDb2RlOiBuLFxuICAgICAgICBvbkFkZGl0aW9uYWxEZXRhaWxzOiBmLFxuICAgICAgICBvblBheW1lbnRGYWlsZWQ6IGQsXG4gICAgICAgIG9uRXJyb3I6IG1cbiAgICAgIH0pXG4gICAgKS50aGVuKCh5KSA9PiB7XG4gICAgICB5LmNyZWF0ZUZyb21BY3Rpb24obCwgeyBjaGFsbGVuZ2VXaW5kb3dTaXplOiBcIjAzXCIgfSkubW91bnQoYSk7XG4gICAgfSk7XG4gIH0pO1xufSwgQ2MgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2UsIHIgPSBlID8/IHQsIG4gPSB3Yy5zYWZlUGFyc2Uocik7XG4gIHJldHVybiBuLnN1Y2Nlc3MgPyAocWUoYFJlc29sdmVkIGxvY2FsZTogJHtuLmRhdGF9YCksIG4uZGF0YSkgOiAoZHQoYFJlc29sdmVkIGludmFsaWQgbG9jYWxlOiAke3J9LiBEZWZhdWx0aW5nIHRvIGVuLVVTLmApLCBcImVuLVVTXCIpO1xufSwgWm4gPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1hZHllbi1hY3Rpb25cIl0pICE9PSB2b2lkIDAsIEtuID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IGJjKHQpLCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgYS5pZCA9IFwiYWR5ZW4tY29udGFpbmVyXCI7XG4gIGNvbnN0IHsgaG9zdDogbywgaWZyYW1lOiBzLCBjYW5jZWxCdXR0b246IGwgfSA9IFV0KFwiaHR0cDovL2V4YW1wbGUuY29tXCIpO1xuICBzLnJlcGxhY2VXaXRoKGEpO1xuICBjb25zdCBjID0gYXdhaXQgU2Moe1xuICAgIGhlYWRlcnM6IG4sXG4gICAgbG9jYWxlOiBDYyhyKSxcbiAgICBjb3VudHJ5Q29kZTogZSxcbiAgICBjb21wb25lbnQ6IGEsXG4gICAgaG9zdDogbyxcbiAgICBjYW5jZWxCdXR0b246IGxcbiAgfSk7XG4gIGlmIChjLmNsZWFudXAoKSwgYy5zdGF0dXMgPT09IFQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgaWYgKGMuc3RhdHVzID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGMuc3RhdHVzID09PSBULlNVQ0NFU1MpIHtcbiAgICBpZiAoIWMuYWRkaXRpb25hbERldGFpbHMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgcmV0dXJuIHFlKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIiksIHtcbiAgICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICAgIGFkZGl0aW9uYWxfZGV0YWlsczogYy5hZGRpdGlvbmFsRGV0YWlscy5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlXG4gICAgX3QoYy5zdGF0dXMpO1xufSwgUW4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgWG4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgeyBsb2dfXzoga2MgfSA9IEkoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gQWMoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgeHQodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uYVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIEljKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IGUucGF5bWVudCwgbyA9IGdyKHQubm9uQ2RlRm9ybUlucHV0cywgYSksIHMgPSBxKFxuICAgICAgbyxcbiAgICAgIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIGF3YWl0IG9lKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHNbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogc1twLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogc1twLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogSChzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBRKFxuICAgICAgICBzLFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgIClcbiAgICB9KTtcbiAgICBjb25zdCBsID0gYXdhaXQgTyh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBicm93c2VyX2luZm86IGhvKCksXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGEudG9rZW4pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoa2MoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKSwgISgobiA9IChyID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCB1ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHUpLCB1ZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHMsXG4gICAgICBjb25maXJtUmVzdWx0OiBsLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChhKSB7XG4gICAgY29uc3QgbyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KG8pLCBhO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBldCwgZXJyX186IGVvIH0gPSBJKFwiYWR5ZW4tYXBwbGUtcGF5XCIpLCBUYyA9IHZlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBRbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKGV0KFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBocigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGV0KFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAoZXQoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGV0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE0ocyksIGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGJlKHMsIGwudG9rZW4sIGMsIHZvaWQgMCksIGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgTi5hZHllbkFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgZW8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBSYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHk7XG4gICAgY29uc3QgbyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBRbiksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcywgaW5pdGlhbFByZXZpZXc6IGwgfSA9IG4sIGMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBNKGMpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIG0gPSB3cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGwsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnVcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6ICh5ID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCBfID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBtKSwgZiA9IHtcbiAgICAgIHNlc3Npb246IF8sXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogby5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogZCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGEsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICByZXR1cm4gZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBNdCh1LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSksIG5ldyBQcm9taXNlKChoLCB2KSA9PiB7XG4gICAgICBjb25zdCBTID0gKCkgPT4ge1xuICAgICAgICBldChcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgXy5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAodykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IEFjKHcsIGYpO1xuICAgICAgICB9IGNhdGNoIChiKSB7XG4gICAgICAgICAgdihiKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdyA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5tLnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odyk7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAodykgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgSWModywgZik7XG4gICAgICAgICAgaChiKTtcbiAgICAgICAgfSBjYXRjaCAoYikge1xuICAgICAgICAgIHYoYik7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25jYW5jZWwgPSBTLCBfLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IGVvKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgeyBsb2dfXzogc2UsIGVycl9fOiBEZSB9ID0gSShcImFkeWVuLWdvb2dsZS1wYXlcIiksIE5jID0gdmUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBtLCBfO1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFhuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBzZShcIkdvb2dsZSBQYXkgQ1BNXCIsIG4pO1xuICAgIGNvbnN0IGEgPSBuLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBEZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHI7XG4gICAgaWYgKHNlKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgX3IoKSwgISgoXyA9IChtID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0ucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIERlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgbXIoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIWEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBEZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgc2UoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE0ocyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGYgPSBCZSh7XG4gICAgICAgIHByZWZpbGw6IGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeSA9IGF3YWl0IFllKGUuYmFzZVVybCwgZiksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCB5LmlzUmVhZHlUb1BheShmKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIHNlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoZikge1xuICAgICAgcmV0dXJuIERlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZiksIHI7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGJlKHMsIGwudG9rZW4sIGMsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTi5hZHllbkdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIERlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIHkpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIEZjID0gQihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgeSwgaCwgdiwgUywgdywgYiwgQywgRDtcbiAgICBzZShcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFhuKSwgeyBpbml0aWFsUHJldmlldzogcywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbCB9ID0gYSwgYyA9IG8ubWV0YWRhdGE7XG4gICAgaWYgKCFjLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCB1ID0gZS5hbnlDZGVDb25uZWN0aW9uLCBkID0gYXdhaXQgTSh1KSwgbSA9IEJlKHtcbiAgICAgIHByZWZpbGw6IGQsXG4gICAgICBnYXRld2F5OiBcImFkeWVuXCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogYy5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogYy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogYy5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGxcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG8ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBNdChkLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBsXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IGF3YWl0IFllKGUuYmFzZVVybCwgbSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGsgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YShtKTtcbiAgICAgIHNlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgayk7XG4gICAgICBjb25zdCBKID0gZnIociwgayksIEwgPSBxKFxuICAgICAgICBKLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYSA9PSBudWxsID8gdm9pZCAwIDogYS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAoZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLkxcbiAgICAgIH0pLCAhKCh5ID0gKGYgPSBrLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS50b2tlbikpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgZGUgPSBhd2FpdCBvZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IExbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBMW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IExbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogSChMKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEoTCwgZC5jaGVja291dF9zZXR0aW5ncylcbiAgICAgIH0pLCBBZSA9IEplKGRlKTtcbiAgICAgIHNlKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgQWUpO1xuICAgICAgbGV0IFcgPSBhd2FpdCBPKHUsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBkLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIGJyb3dzZXJfaW5mbzogaG8oKSxcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46ICh2ID0gKGggPSBrLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaC50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogdi50b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIFcpO1xuICAgICAgbGV0IGhlID0gKHcgPSAoUyA9IFcucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogU1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHcuaWQ7XG4gICAgICBjb25zdCBMZSA9IChiID0gVy5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBiLmZpbmQoKFdlKSA9PiBXZS50eXBlID09PSBcImFkeWVuLTNkc1wiKTtcbiAgICAgIGlmIChMZSAmJiBMZS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgc2UoXCJBZHllbiAzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBMZSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBXZSB9ID0gYXdhaXQgRWUoe1xuICAgICAgICAgIHVybDogTGUucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNlKGDilbAgQWR5ZW4gM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtXZX1dYCksIFdlID09PSBULkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKFdlID09PSBULkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoTGUgJiYgIWhlICYmIChXID0gYXdhaXQgTyh1LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZC50b2tlbixcbiAgICAgICAgdGhlaXJfcG1faWQ6IExlLnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyXG4gICAgICAgIH1cbiAgICAgIH0pLCBzZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlIGFmdGVyIDNEU1wiLCBXKSwgaGUgPSAoRCA9IChDID0gVy5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBDWzBdKSA9PSBudWxsID8gdm9pZCAwIDogRC5pZCksICFoZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCBtZXRob2QgSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gdWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBMLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBXLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChrKSB7XG4gICAgICB0aHJvdyBEZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBrKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBrXG4gICAgICB9KSwgbmV3IEVycm9yKChrID09IG51bGwgPyB2b2lkIDAgOiBrLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IFFlLCBlcnJfXzogTWMgfSA9IEkoXCJhd3gtYWNoXCIpLCBMYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHYsIFM7XG4gICAgY29uc3QgbyA9IHEociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYXdhaXQgTShzKSwgYyA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgdSA9IG51bGw7XG4gICAgaWYgKGMgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBRZShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICB1ID0gYXdhaXQganQoXCJhY2hfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI0MDBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybFxuICAgICAgICB9KSwgUWUoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IFFlKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZCA9IGF3YWl0IG9lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBIKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEobywgbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogbGUoKVxuICAgIH0pLCBtID0gSmUoZCksIF8gPSBtID09IG51bGwgPyB2b2lkIDAgOiBtLmNvbnNlbnRfaWQsIHkgPSAoUyA9ICh2ID0gKGF3YWl0IE8ocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBfLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBjLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYWNoX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgICAgIGFjaF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vcGxhaWQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgICAgIG93bmVyX25hbWU6IE90KG9bcC5GSVJTVF9OQU1FXSwgb1twLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG9bcC5FTUFJTF0sXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGFjY291bnRfbnVtYmVyOiB1ID09IG51bGwgPyB2b2lkIDAgOiB1LmFjY291bnRfbnVtYmVyLFxuICAgICAgICAgICAgYWJhX3JvdXRpbmdfbnVtYmVyOiB1ID09IG51bGwgPyB2b2lkIDAgOiB1LmFiYV9yb3V0aW5nX251bWJlclxuICAgICAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiAnMS4wJyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogdi5maW5kKFxuICAgICAgKHcpID0+IHcudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogUy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHkpIHtcbiAgICAgIFFlKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogdyB9ID0gYXdhaXQgRWUoe1xuICAgICAgICB1cmw6IHksXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFDSCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoUWUoYOKVsCBQbGFpZCB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7d31dYCksIHcgPT09IFQuQ0FOQ0VMTEVEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKHcgPT09IFQuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgaCA9IGF3YWl0IE8ocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBfXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB1ZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYWNoXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBoLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh3KSB7XG4gICAgICB0aHJvdyBNYyhcIkFDSCBwYXltZW50IGVycm9yXCIsIHcpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogd1xuICAgICAgfSksIG5ldyBFcnJvcigodyA9PSBudWxsID8gdm9pZCAwIDogdy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBidCB9ID0gSShcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBEYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCB4dCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiB4YyhlLCB0KSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBidChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgRWUoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogdC5iYXNlVXJsXG4gIH0pO1xuICBpZiAoYnQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IFQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IE8odC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBidChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24gT2MoZSwgdCkge1xuICB2YXIgciwgbiwgYSwgbywgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBsID0gZS5wYXltZW50LCBjID0gZ3IodC5ub25DZGVGb3JtSW5wdXRzLCBsKSwgdSA9IHEoXG4gICAgICBjLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBfID0gKGF3YWl0IG9lKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogSCh1KSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBRKFxuICAgICAgICB1LFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogbGUoKVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIV8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCBmID0gYXdhaXQgTyh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkobC50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBidChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGYpO1xuICAgIGxldCB5ID0gKG4gPSAociA9IGYucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQ7XG4gICAgY29uc3QgaCA9IChhID0gZi5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBhLmZpbmQoXG4gICAgICAoUykgPT4gUy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKGggIT0gbnVsbCAmJiBoLnJlZGlyZWN0X3VybCAmJiBoLmNvbnNlbnRfaWQgJiYgaC50aGVpcl9wbV9pZCAmJiAoZiA9IGF3YWl0IHhjKGgsIHQpLCB5ID0gKHMgPSAobyA9IGYucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogb1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaWQpLCAheSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IHYgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQodiksIHVlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHUsXG4gICAgICBjb25maXJtUmVzdWx0OiBmLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChsKSB7XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGMpLCBsO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiB0dCwgZXJyX186IHRvIH0gPSBJKFwiYXd4LWFwcGxlLXBheVwiKSwgVWMgPSB2ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFluKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAodHQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGhyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gdHQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICh0dChcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gdHQoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYXdhaXQgTShzKSwgYyA9IGwubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgYmUocywgbC50b2tlbiwgYywgdm9pZCAwKSwgZCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBOLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgdG8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgamMgPSBCKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgWW4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBsIH0gPSBuLCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTShjKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBtID0gd3Ioe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBsLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgbSksIGYgPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IG8ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogTXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgdikgPT4ge1xuICAgICAgY29uc3QgUyA9ICgpID0+IHtcbiAgICAgICAgdHQoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCB2KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub25jYW5jZWwgPSBTLCBfLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgRGModywgZik7XG4gICAgICAgIH0gY2F0Y2ggKGIpIHtcbiAgICAgICAgICB2KGIpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB3ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLm0udG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBfLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih3KTtcbiAgICAgIH0sIF8ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGIgPSBhd2FpdCBPYyh3LCBmKTtcbiAgICAgICAgICBoKGIpO1xuICAgICAgICB9IGNhdGNoIChiKSB7XG4gICAgICAgICAgdihiKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyB0byhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IG5lLCBlcnJfXzogeGUgfSA9IEkoXCJhd3gtZ29vZ2xlLXBheVwiKSwgJGMgPSB2ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgdmFyIG0sIF87XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEpuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBuZShcIkdvb2dsZSBQYXkgQ1BNXCIsIG4pO1xuICAgIGNvbnN0IGEgPSBuLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiB4ZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHI7XG4gICAgaWYgKG5lKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgX3IoKSwgISgoXyA9IChtID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0ucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIHhlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgbXIoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIWEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiB4ZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgbmUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE0ocyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGYgPSBCZSh7XG4gICAgICAgIHByZWZpbGw6IGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeSA9IGF3YWl0IFllKGUuYmFzZVVybCwgZiksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCB5LmlzUmVhZHlUb1BheShmKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIG5lKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoZikge1xuICAgICAgcmV0dXJuIHhlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZiksIHI7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGJlKHMsIGwudG9rZW4sIGMsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTi5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICB4ZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgR2MgPSBCKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBmLCB5LCBoLCB2LCBTLCB3LCBiO1xuICAgIG5lKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSm4pLCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBsIH0gPSBhLCBjID0gby5tZXRhZGF0YTtcbiAgICBpZiAoIWMucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBtID0gQmUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogYy5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogYy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogYy5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGxcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG8ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBNdChkLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBsXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IGF3YWl0IFllKGUuYmFzZVVybCwgbSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IEMgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YShtKTtcbiAgICAgIG5lKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgQyk7XG4gICAgICBjb25zdCBEID0gZnIociwgQyksIGsgPSBxKFxuICAgICAgICBELFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYSA9PSBudWxsID8gdm9pZCAwIDogYS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBuZShcIl9fX1wiLCBrKSwgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLmtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgSiA9ICh5ID0gKGYgPSBDLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS50b2tlbjtcbiAgICAgIGlmICghSilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBMID0gYXdhaXQgb2UodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBrW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZToga1twLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBrW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IEgoayksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBRKGssIGQuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogbGUoKVxuICAgICAgfSksIHRlID0gSmUoTCk7XG4gICAgICBuZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHRlKTtcbiAgICAgIGxldCBkZSA9IGF3YWl0IE8odSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHRlID09IG51bGwgPyB2b2lkIDAgOiB0ZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG5lKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgZGUpO1xuICAgICAgbGV0IEFlID0gKHYgPSAoaCA9IGRlLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGhbMF0pID09IG51bGwgPyB2b2lkIDAgOiB2LmlkO1xuICAgICAgY29uc3QgVyA9IChTID0gZGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogUy5maW5kKFxuICAgICAgICAoaGUpID0+IGhlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKFcgJiYgVy5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgbmUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBXKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IGhlIH0gPSBhd2FpdCBFZSh7XG4gICAgICAgICAgdXJsOiBXLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChuZShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7aGV9XWApLCBoZSA9PT0gVC5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChoZSA9PT0gVC5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKFcgJiYgIUFlICYmIChkZSA9IGF3YWl0IE8odSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBXLnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBXLmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIG5lKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgZGUpLCBBZSA9IChiID0gKHcgPSBkZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB3WzBdKSA9PSBudWxsID8gdm9pZCAwIDogYi5pZCksICFBZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gdWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogayxcbiAgICAgICAgY29uZmlybVJlc3VsdDogZGUsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgIHRocm93IHhlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIEMpLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IENcbiAgICAgIH0pLCBuZXcgRXJyb3IoKEMgPT0gbnVsbCA/IHZvaWQgMCA6IEMubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgcm8gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBubyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5hc3luYyBmdW5jdGlvbiBWYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCB4dCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uYVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHFjKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IGUucGF5bWVudCwgbyA9IGdyKHQubm9uQ2RlRm9ybUlucHV0cywgYSksIHMgPSBxKG8sIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCBvZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IEgocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUShcbiAgICAgICAgcyxcbiAgICAgICAgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGxlKClcbiAgICB9KTtcbiAgICBjb25zdCBsID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoYS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgYyA9IGF3YWl0IE8odC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGxcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChyID0gYy5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCB1ZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGMsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobyksIGE7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IEV0LCBlcnJfXzogb28gfSA9IEkoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCB6YyA9IHZlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHJvKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoRXQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGhyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gRXQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIEV0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE0ocyksIGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGJlKHMsIGwudG9rZW4sIGMsIHZvaWQgMCksIGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgTi5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIG9vKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IF9cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBIYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHk7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgbCA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBybyksIGMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBNKGMpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIG0gPSB3cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IG8sXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgbSksIGYgPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHQubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIHYpID0+IHtcbiAgICAgIF8ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIEV0KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgdihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKFMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBWYyhTLCBmKTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIHYodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IFMgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IG0udG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oUyk7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoUykgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgcWMoUywgZik7XG4gICAgICAgICAgaCh3KTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIHYodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgb28oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBSZSwgZXJyX186IHJ0IH0gPSBJKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIEJjID0gdmUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBkLCBtO1xuICAgIFJlKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBubyk7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgUmUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gcnQoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChSZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IF9yKCksICEoKG0gPSAoZCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBkLnBheW1lbnRzKSAhPSBudWxsICYmIG0uYXBpKSlcbiAgICAgIHJldHVybiBydChcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgUmUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0obyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBCZSh7XG4gICAgICAgIHByZWZpbGw6IHMsXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgZiA9IGF3YWl0IFllKGUuYmFzZVVybCwgXyksIHsgcmVzdWx0OiB5IH0gPSBhd2FpdCBmLmlzUmVhZHlUb1BheShfKTtcbiAgICAgIGlmICgheSlcbiAgICAgICAgcmV0dXJuIFJlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIHJ0KFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgXyksIHI7XG4gICAgfVxuICAgIGNvbnN0IGwgPSBzLm1vZGUgPT09IFwic2V0dXBcIiwgYyA9IGF3YWl0IGJlKG8sIHMudG9rZW4sIGwsIHZvaWQgMCksIHUgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTi5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGNcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBydChcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBmKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGZcbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoZiA9PSBudWxsID8gdm9pZCAwIDogZi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBZYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGYsIHksIGgsIHY7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gYSwgYyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBubykubWV0YWRhdGEsIHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBtID0gQmUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogYy5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogYy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogYy5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogbyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHIucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBkLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCBZZShlLmJhc2VVcmwsIG0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBTID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEobSk7XG4gICAgICBSZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIFMpO1xuICAgICAgY29uc3QgdyA9IGZyKHQsIFMpLCBiID0gcSh3LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uYlxuICAgICAgfSk7XG4gICAgICBjb25zdCBDID0gKHkgPSAoZiA9IFMucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuO1xuICAgICAgaWYgKCFDKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IEQgPSBhd2FpdCBvZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGJbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBiW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGJbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogSChiKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEoYiwgZC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBsZSgpXG4gICAgICB9KTtcbiAgICAgIFJlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIEQpO1xuICAgICAgY29uc3QgayA9IGF3YWl0IE8odSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShDKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgodiA9IChoID0gay5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogdi5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIHVlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBiLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBrLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChTKSB7XG4gICAgICB0aHJvdyBydChcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBTKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBTXG4gICAgICB9KSwgbmV3IEVycm9yKChTID09IG51bGwgPyB2b2lkIDAgOiBTLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IEpjLCBlcnJfXzogYW8gfSA9IEkoXCJwb2NreXQtY2NcIiksIFdjID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgWmMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gV2Muc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBhbyhuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBpbyA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gSmMoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3R9XWApLCB0O1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgciA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IGFvKHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7ZWUodCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgWHQgPSAoZSwgdCkgPT4gbmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KHQpLCBLYyA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBRYyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBaYyh0KSwgbiA9IGF3YWl0ICRuKHsgdXJsOiByW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBpbyhuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogcltcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IHJbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogd3QsIGVycl9fOiBYYyB9ID0gSShcImN5YnMtZnJhbWVcIiksIGVsID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gIHIubmFtZSA9IFwiY2FyZGluYWxfY29sbGVjdGlvbl9pZnJhbWVcIiwgci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCIsIHIuc3R5bGUud2lkdGggPSBcIjEwcHhcIiwgci5zdHlsZS5oZWlnaHQgPSBcIjEwcHhcIjtcbiAgY29uc3QgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICBuLmFjdGlvbiA9IGUsIG4ubWV0aG9kID0gXCJQT1NUXCIsIG4udGFyZ2V0ID0gci5uYW1lO1xuICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICByZXR1cm4gYS50eXBlID0gXCJoaWRkZW5cIiwgYS5uYW1lID0gXCJKV1RcIiwgYS52YWx1ZSA9IHQsIG4uYXBwZW5kQ2hpbGQoYSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobiksIHsgZm9ybTogbiwgZGV0YWNoOiAoKSA9PiB7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyKSwgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChuKTtcbiAgfSB9O1xufSwgdGwgPSBhc3luYyAoZSkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgY29uc3QgeyBwb3N0VXJsOiBuLCBhY2Nlc3NUb2tlbjogYSB9ID0gZSwgbyA9IG5ldyBVUkwobikub3JpZ2luLCB7IGZvcm06IHMsIGRldGFjaDogbCB9ID0gZWwobiwgYSk7XG4gIHd0KFwiQXR0YWNoZWQgZGV2aWNlIGRhdGEgY29sbGVjdG9yXCIpO1xuICBjb25zdCBjID0gKGQpID0+IHtcbiAgICBpZiAoZC5vcmlnaW4gIT09IG8pXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgbSA9IEpTT04ucGFyc2UoZC5kYXRhKTtcbiAgICBpZiAod3QoXCJSZWNlaXZlZCBldmVudCBmcm9tIGRldmljZSBkYXRhIGNvbGxlY3RvcjpcIiwgbSksIG0uTWVzc2FnZVR5cGUgPT09IFwicHJvZmlsZS5jb21wbGV0ZWRcIikge1xuICAgICAgdChtKSwgdSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSwgdSA9ICgpID0+IHtcbiAgICBsKCksIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBjKTtcbiAgfTtcbiAgdHJ5IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgYyksIHd0KFwiQXR0YWNoZWQgbGlzdGVuZXIgdG8gd2luZG93XCIpLCBzLnN1Ym1pdCgpLCB3dChcIlN1Ym1pdHRlZCBmb3JtXCIpO1xuICB9IGNhdGNoIChkKSB7XG4gICAgWGMoXCJFcnJvciBzdWJtaXR0aW5nIGZvcm06XCIsIGQpLCB1KCksIHIoZCk7XG4gIH1cbn0pLCBybCA9IChlKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsOiB0LCBhY2Nlc3NUb2tlbjogciwgbWVyY2hhbnREYXRhOiBuLCBpZnJhbWU6IGEsIGhvc3Q6IG8gfSA9IGUsIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgcy5hY3Rpb24gPSB0LCBzLm1ldGhvZCA9IFwiUE9TVFwiLCBzLnRhcmdldCA9IGEubmFtZTtcbiAgY29uc3QgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgbC50eXBlID0gXCJoaWRkZW5cIiwgbC5uYW1lID0gXCJKV1RcIiwgbC52YWx1ZSA9IHI7XG4gIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIHJldHVybiBjLnR5cGUgPSBcImhpZGRlblwiLCBjLm5hbWUgPSBcIk1EXCIsIGMudmFsdWUgPSBuLCBzLmFwcGVuZENoaWxkKGwpLCBzLmFwcGVuZENoaWxkKGMpLCBvLmFwcGVuZENoaWxkKHMpLCBzO1xufSwgeyBsb2dfXzogamUsIGVycl9fOiBzbyB9ID0gSShcImN5YnNcIiksIGNvID0geiQxLm9iamVjdCh7XG4gIHN0ZXBfdXBfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGFjY2Vzc190b2tlbjogeiQxLnN0cmluZygpLFxuICBkZF91cmw6IHgoeiQxLnN0cmluZygpKSxcbiAgZGRfdG9rZW46IHgoeiQxLnN0cmluZygpKSxcbiAgbWVyY2hhbnRfZGF0YTogeiQxLnN0cmluZygpXG59KSwgbmwgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG9sID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGNvLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgc28oYEN5YmVyc291cmNlIDNEUyBpcyByZXF1aXJlZCBidXQgdXNlciBhY3Rpb24gaXMgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCksIG5ldyBFcnJvcihubCk7XG4gIHJldHVybiB0LmRhdGE7XG59LCBhbCA9IChlKSA9PiBlLnR5cGUgPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiLCBpbCA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsOiB0LCBhY2Nlc3NUb2tlbjogciwgbWVyY2hhbnREYXRhOiBuLCBpZnJhbWU6IGEsIGhvc3Q6IG8sIGNhbmNlbEJ1dHRvbjogcyB9ID0gZSwgbCA9IG5ldyBVUkwodCkub3JpZ2luO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGMpID0+IHtcbiAgICBjb25zdCB1ID0gKCkgPT4ge1xuICAgICAgamUoXCJDbGVhbmluZyB1cCBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKSwgcy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZCksIG8ucmVtb3ZlKCk7XG4gICAgfSwgZCA9ICgpID0+IHtcbiAgICAgIGplKFwiQ3liZXJzb3VyY2UgM0RTIGNhbmNlbGxlZFwiKSwgYyh7IHN0YXR1czogVC5DQU5DRUxMRUQsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgXyA9IGRyKGEsIChoKSA9PiB7XG4gICAgICBqZShcIkN5YmVyc291cmNlIDNEUyBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6XCIsIGgpLCBjKHsgc3RhdHVzOiBoLnN0YXR1cywgY2xlYW51cDogdSB9KSwgZigpO1xuICAgIH0sIGwsIFwicGluZy0zZHMtc3RhdHVzXCIsIFhyKSwgZiA9IGpuKHtcbiAgICAgIGVsZW1lbnRzOiB7IGhvc3Q6IG8sIGlmcmFtZTogYSwgY2FuY2VsQnV0dG9uOiBzIH0sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IF8sXG4gICAgICByZXNvbHZlOiAoaCkgPT4ge1xuICAgICAgICBjKHsgc3RhdHVzOiBoLnN0YXR1cywgY2xlYW51cDogdSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkKSwgcmwoe1xuICAgICAgc3RlcFVwVXJsOiB0LFxuICAgICAgYWNjZXNzVG9rZW46IHIsXG4gICAgICBtZXJjaGFudERhdGE6IG4sXG4gICAgICBpZnJhbWU6IGEsXG4gICAgICBob3N0OiBvXG4gICAgfSkuc3VibWl0KCk7XG4gIH0pO1xufSwgbG8gPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB0ID0gb2woZSksIHsgc3RlcF91cF91cmw6IHIsIGFjY2Vzc190b2tlbjogbiwgZGRfdXJsOiBhLCBkZF90b2tlbjogbywgbWVyY2hhbnRfZGF0YTogcyB9ID0gdDtcbiAgaWYgKGEgJiYgbykge1xuICAgIGNvbnN0IG0gPSBhd2FpdCB0bCh7XG4gICAgICBwb3N0VXJsOiBhLFxuICAgICAgYWNjZXNzVG9rZW46IG9cbiAgICB9KTtcbiAgICBqZShcIkRldmljZSBkYXRhIGNvbGxlY3Rpb24gY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBtLlN0YXR1cyk7XG4gIH0gZWxzZVxuICAgIHNvKFwiTm8gZGV2aWNlIGRhdGEgY29sbGVjdGlvbiBVUkwgb3IgdG9rZW4gcHJvdmlkZWRcIik7XG4gIGNvbnN0IHsgaG9zdDogbCwgaWZyYW1lOiBjLCBjYW5jZWxCdXR0b246IHUgfSA9IFV0KFwiXCIsIHsgbmFtZTogXCJjYXJkaW5hbF9hdXRoX2lmcmFtZVwiIH0pO1xuICBqZShcIlJ1bm5pbmcgQ3liZXJzb3VyY2UgM0RTIGZsb3dcIik7XG4gIGNvbnN0IGQgPSBhd2FpdCBpbCh7XG4gICAgc3RlcFVwVXJsOiByLFxuICAgIGFjY2Vzc1Rva2VuOiBuLFxuICAgIG1lcmNoYW50RGF0YTogcyxcbiAgICBpZnJhbWU6IGMsXG4gICAgaG9zdDogbCxcbiAgICBjYW5jZWxCdXR0b246IHVcbiAgfSk7XG4gIGlmIChkLmNsZWFudXAoKSwgZC5zdGF0dXMgPT09IFQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgaWYgKGQuc3RhdHVzID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGQuc3RhdHVzID09PSBULlNVQ0NFU1MpIHtcbiAgICBqZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlXG4gICAgX3QoZC5zdGF0dXMpO1xufSwgeyBsb2dfXzogeHIgfSA9IEkoXCJzdHJpcGUtY2NcIiksIHNsID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgdW8gPSBhc3luYyAoZSkgPT4ge1xuICBnKFwiM2RzX3N0cmlwZV9yZWRpcmVjdFwiLCB7XG4gICAgLi4uZVxuICB9KSwgeHIoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7ZS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IHppKGUpLCBnKFwiM2RzX3N0cmlwZV9jb21wbGV0ZVwiKSwgeHIoXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59LCBjbCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBzbC5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIDNEUyBtZXRhZGF0YSBoYXMgdW5leHBlY3RlZCBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodC5lcnJvci5lcnJvcnMpfWApO1xuICByZXR1cm4ge1xuICAgIHN0cmlwZV9wazogdC5kYXRhLnN0cmlwZV9wayxcbiAgICBjbGllbnRfc2VjcmV0OiB0LmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHQuZGF0YS5zdHJpcGVfcG1faWRcbiAgfTtcbn0sIGxsID0gNCwgeyBsb2dfXzogTWUsIGVycl9fOiBUdCB9ID0gSShcInVuaWZpZWQtY2NcIiksIHVsID0gYXN5bmMgKHtcbiAgY29udGV4dDogZSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICBub25DZGVGb3JtSW5wdXRzOiByLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IGFcbn0pID0+IHtcbiAgTWUoXCLilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHQgfSk7XG4gIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICBNZShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtzLm1vZGV9XWApO1xuICBjb25zdCBsID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGMgPSB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBsLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGluIHRoZSBjaGVja291dCBhdHRlbXB0IGxvZ3NcbiAgICAgIGRldmljZVRva2VuOiBPbigpXG4gICAgfSxcbiAgICB1c2VfdW5pZmllZF9jY19mbG93OiAhMCxcbiAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHtcbiAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0sXG4gICAgcGF5bWVudF9yb3V0ZV9pZDogYS5wYXltZW50Um91dGVJZFxuICB9O1xuICBUdChhLCBjKSwgTWUoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBQYXJ0aWFsIFBNcyBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgY29uc3QgdSA9IGF3YWl0IFJuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICB9KTtcbiAgVm4odSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBkID0gYXdhaXQgVG4obywgYyk7XG4gIGlmIChNZShcIuKUnCBzdGFydFBmIHJlc3VsdFwiLCBkKSwgZC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgIHJldHVybiBwbyhzLm1vZGUsIGQpO1xuICBpZiAoIWQuY2hlY2tvdXRfYXR0ZW1wdF9pZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBhdHRlbXB0IElEIGZyb20gUEYgcmVzdWx0XCIpO1xuICByZXR1cm4gZGwoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgcHJlZmlsbDogcyxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zOiBjLFxuICAgIGFueUNkZUNvbm5lY3Rpb246IG8sXG4gICAgc3RhcnRQZlJlc3VsdDogZCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogZC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufSwgZGwgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dDogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGEsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogbyxcbiAgICBzdGFydFBmUmVzdWx0OiBzLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBsXG4gIH0gPSBlO1xuICBsZXQgYyA9IHM7XG4gIGZvciAobGV0IHUgPSAwOyB1IDwgbGw7IHUrKykge1xuICAgIE1lKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7dX1gKSwgZyhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogdSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb246IGQgfSA9IG1sKGMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gYXdhaXQgcGwodC5iYXNlVXJsLCBkLCByLCBuKTtcbiAgICAgIGEuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmEuZXh0cmFfbWV0YWRhdGEsXG4gICAgICAgIC4uLm0ubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgICAgfSwgTWUoXCLilJwgTmV3IGV4dHJhIG1ldGFkYXRhXCIsIGEuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIGNvbnN0IF8gPSBlZShtKTtcbiAgICAgIFR0KGDilJwgRXJyb3IgaW4gcnVubmluZyB1c2VyIGFjdGlvbiBpbiBpdGVyYXRpb24gJHt1fS4gQ29udGludWluZyB0byBjb25maXJtIHN0ZXAuLi5gLCBfKSwgZyhcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBfLCBpdGVyYXRpb246IHUgfSk7XG4gICAgfVxuICAgIGlmIChjID0gYXdhaXQgTyhvLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBsLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBhLmV4dHJhX21ldGFkYXRhXG4gICAgfSksIE1lKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7dX0pYCwgYyksIGMuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHJldHVybiBwbyhyLm1vZGUsIGMpO1xuICB9XG4gIHRocm93IGcoXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYy5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogY1xuICB9KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn0sIHBsID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHQuX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodC50eXBlID09PSBcInN0cmlwZV8zZHNcIilcbiAgICAgIHJldHVybiBhd2FpdCB1byhjbCh0KSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoSG4odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYXdhaXQgQm4oZSwgdCkgfSB9O1xuICAgIGlmIChabih0KSlcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGF3YWl0IEtuKFxuICAgICAgICBuW3AuQ09VTlRSWV0sXG4gICAgICAgIHQsXG4gICAgICAgIHIubG9jYWxlXG4gICAgICApIH0gfTtcbiAgICBpZiAoYWwodCkpXG4gICAgICByZXR1cm4gYXdhaXQgbG8odCksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoX2wodCkpXG4gICAgICByZXR1cm4gYXdhaXQgbW8oeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt0XSB9LCBlKSwgeyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xufSwgX2wgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBfbyhbZV0pLCAhMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBtbCA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gICAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIGNvbnN0IHQgPSBFYS5zYWZlUGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBUdChcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKSwgVHQoXCJQYXJzaW5nIGVycm9yXCIsIHQuZXJyb3IpLCBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdC5kYXRhXG4gIH07XG59LCBwbyA9IChlLCB0KSA9PiB7XG4gIHZhciByO1xuICBpZiAoZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgY29uc3QgbiA9IHQuY2NfcG1faWQgPz8gKChyID0gdC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdLmlkKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IG5cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufSwgeyBsb2dfXzogRiwgZXJyX186IE9yIH0gPSBJKFwiY29tbW9uLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBmbCA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGYsIHk7XG4gICAgRihcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0IH0pO1xuICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICAgIGcoXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLnQsXG4gICAgICBwcmVmaWxsOiBzXG4gICAgfSk7XG4gICAgY29uc3QgbCA9ICgoZiA9IHMuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzKSA9PSBudWxsID8gdm9pZCAwIDogZi51bmlmaWVkX2NjKSA/PyAwO1xuICAgIEYoYOKUnCBVbmlmaWVkIENDIHJvbGxvdXQ6ICR7TWF0aC5yb3VuZChsICogMTAwKX0lYCk7XG4gICAgY29uc3QgYyA9IE1hdGgucmFuZG9tKCksIHUgPSBjIDwgbCwgZCA9IHtcbiAgICAgIHJvbGw6IGMsXG4gICAgICB1bmlmaWVkQ0NSb2xsb3V0UmF0aW86IGwsXG4gICAgICB1c2VVbmlmaWVkQ0NGbG93OiB1XG4gICAgfTtcbiAgICBpZiAodSlcbiAgICAgIHJldHVybiBGKGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtjfSB2cyAke2x9KWApLCBnKFwidW5pZmllZF9jY19mbG93X3BpY2tlZFwiLCBkKSwgdWwoe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICB9KTtcbiAgICBGKGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke2N9IHZzICR7bH0pYCksIGcoXCJsZWdhY3lfY2NfZmxvd19waWNrZWRcIiwgZCksIEYoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgICBjb25zdCBtID0gcShcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHMuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubVxuICAgIH0pO1xuICAgIGNvbnN0IF8gPSB7XG4gICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBtLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9LFxuICAgICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogITEsXG4gICAgICBwYXltZW50X3JvdXRlX2lkOiBhLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGxlKClcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBGKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IFJuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKFZuKGgsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgRihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtzLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IExzKG8sIF8pO1xuICAgICAgICByZXR1cm4gRihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke3YucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB2IH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBGKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IE1yKG8sIF8pO1xuICAgICAgICByZXR1cm4gRihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogdiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIGlmIChoIGluc3RhbmNlb2YgSW4gJiYgaC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBGKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgRihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBoLnJlc3BvbnNlLmhlYWRlcnMpLCBnKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAuLi50LFxuICAgICAgICAgIC4uLmgucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdiA9IGgucmVzcG9uc2UuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiIGluIHYgJiYgKF8uZXhpc3RpbmdfY2NfcG1faWQgPSB2W1wib3AtZXhpc3RpbmctY2MtcG0taWRcIl0sIEYoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtfLmV4aXN0aW5nX2NjX3BtX2lkfWApKTtcbiAgICAgICAgY29uc3QgUyA9IEtjKGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmIChTKSB7XG4gICAgICAgICAgRihcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBMID0gYXdhaXQgUWMoZS5iYXNlVXJsLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIF8uZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gTDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSG4oaC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIEYoXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgTCA9IGF3YWl0IEJuKGUuYmFzZVVybCwgaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBfLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IEw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFpuKGgucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBGKFwi4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBMID0gYXdhaXQgS24oXG4gICAgICAgICAgICByW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICBoLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBzLmxvY2FsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgXy5leHRyYV9tZXRhZGF0YS5hZHllbiA9IEw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQyA9IGF3YWl0IFRuKG8sIF8pO1xuICAgICAgICBGKFwi4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIEMpO1xuICAgICAgICBjb25zdCBEID0gQy5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZChcbiAgICAgICAgICAoTCkgPT4gTC50eXBlID09PSBcImN5YmVyc291cmNlX3BheWVyX2F1dGhcIlxuICAgICAgICApO1xuICAgICAgICBpZiAoRCkge1xuICAgICAgICAgIEYoXCLilJwgQ3liZXJzb3VyY2UgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQ3liZXJzb3VyY2UgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IEwgPSBjby5wYXJzZShEKSwgdGUgPSBhd2FpdCBsbyh7XG4gICAgICAgICAgICAuLi5MLFxuICAgICAgICAgICAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IFwiXCIsXG4gICAgICAgICAgICBfdW5pZmllZF9jY19wY2NzX2lkOiBcIlwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXy5leHRyYV9tZXRhZGF0YS5jeWJlcnNvdXJjZSA9IHRlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGsgPSAoKHkgPSBoLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiB5W1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICAhUyAmJiAhRCA/IGsgPyAoRihcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IHVvKHlsKEMpKSkgOiAoRihcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IG1vKEMsIGUuYmFzZVVybCkpIDogRihcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpO1xuICAgICAgICBjb25zdCBKID0gQy5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgRihg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtKfV1gKTtcbiAgICAgICAgICBjb25zdCBMID0gYXdhaXQgTyhvLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogSlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIEYoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgTCk7XG4gICAgICAgICAgY29uc3QgdGUgPSBtdChMKTtcbiAgICAgICAgICByZXR1cm4gRihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke3RlLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogdGUgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBGKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke2sgPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgTCA9IGF3YWl0IE1yKG8sIHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogSixcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IGtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gRihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogTCB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBPcihcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgT3IoaCksIGg7XG4gICAgfVxuICB9XG4pLCB5bCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gT2kucGFyc2UodCk7XG59LCBobCA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgX28gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiBobC5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gQm8ucGFyc2UodCk7XG59LCBtbyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBfbyhlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChyLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIEYoXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKSwgZyhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgRihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke3IucmVkaXJlY3RfdXJsfV1gKSwgZyhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4uclxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IEVlKHsgdXJsOiByLnJlZGlyZWN0X3VybCwgYmFzZVVybDogdCB9KTtcbiAgaWYgKEYoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBnKFwiM2RzX2NhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBULkZBSUxVUkUpXG4gICAgdGhyb3cgZyhcIjNkc19mYWlsdXJlXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgZyhcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufSwgZ2wgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IFosIGVycl9fOiB3bCB9ID0gSShcImxvb3AtY3J5cHRvXCIpLCB2bCA9IHZlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICBaKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCB0ID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGdsKTtcbiAgICBaKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIFooXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSByLm1vZGUgPT09IFwic2V0dXBcIiwgYSA9IGF3YWl0IHh0KGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICB9KSwgbyA9IGF3YWl0IGJlKFxuICAgICAgZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgci50b2tlbixcbiAgICAgIG4sXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghbiAmJiAhdC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhyLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtyLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke3QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIWEgfHwgIWEubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBzID0gYS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgbCA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGMgPSBzLm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudDtcbiAgICBjb25zdCB1ID0gcy5hbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aDtcbiAgICBsZXQgZDtcbiAgICBuID8gKGQgPSAwLCBsID0gTWF0aC5tYXgobCwgYykpIDogKGQgPSAobyA/IG8uYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZSwgYyA9IE1hdGgubWF4KGMsIGQpLCBsID0gTWF0aC5tYXgobCwgYykpO1xuICAgIGNvbnN0IG0gPSBkLCBfID0gdjQoKSwgZiA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IG0sXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBsLFxuICAgICAgY3VzdG9tZXJSZWZJZDogXyxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGMsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoOiB1XG4gICAgfSwgeSA9IHtcbiAgICAgIGFwaVRva2VuOiB0Lm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiB0Lm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IHQubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogdC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiBmLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IHlcbiAgICB9O1xuICB9XG4pLCBibCA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgWihcIlJ1bm5pbmcgTG9vcCBmbG93Li4uXCIpLCBaKFwiY29udGV4dFwiLCBlKSwgWihcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCB0KSwgWihcIm5vbkNkZUZvcm1JbnB1dHNcIiwgciksIFooXCJmbG93Q2FsbGJhY2tzXCIsIG4pLCBaKFwiY3VzdG9tUGFyYW1zXCIsIGEpO1xuICAgIGNvbnN0IG8gPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgWihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtvLm1vZGV9XWApO1xuICAgIGNvbnN0IHMgPSBxKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgby5jaGVja291dF9zZXR0aW5nc1xuICAgICksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBvLm1vZGUgIT09IFwic2V0dXBcIiwgdSA9IHByKHMsIG8uY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgdGhyb3cgZyhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBhKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICBjb25zdCBkID0gYXdhaXQgb2UoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAuLi51LFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBjLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBjID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBvLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogby5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IHNbcC5QUk9NT1RJT05fQ09ERV1cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogbGUoKVxuICAgIH0pLCBtID0gYXdhaXQgTyhsLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IG8udG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogYS5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCxcbiAgICAgIC8vIE5PVEU6IHdlIGRvIGhhdmUgdGhlIGNoZWNrb3V0IGF0dGVtcHQgaWQgaGVyZSBldmVuIGlmIGl0cyBhIHNldHVwLCBidXQgZm9yIG5vdyB3ZSBkb24ndCBpbmNsdWRlIGl0XG4gICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY2hlY2tvdXQgYXR0ZW1wdCBzdXBwb3J0IGZvciBzZXR1cCBpbnRlbnRzLlxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYyA/IGQuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBhLmN1c3RvbWVyLFxuICAgICAgICBsb29wX3BheW1lbnRfbWV0aG9kOiBhLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogYS5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKFooYENvbmZpcm0gcmVzdWx0OiAke219YCksIG8ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBaKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgWihcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBtKTtcbiAgICAgIGNvbnN0IF8gPSBtdChtKTtcbiAgICAgIHJldHVybiBaKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFooXCJEb2luZyBjaGVja291dC4uLlwiKSwgIW0ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IHdsKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgbSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IG0ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBJZSwgZXJyX186IEVsIH0gPSBJKFwicGF5cGFsXCIpLCBmbyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHsgY2xpZW50X2lkOiB6JDEuc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIFBsID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZm8pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IE4ucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBTbCA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIEllKFwiUnVubmluZyBQYXlQYWwgZmxvdy4uLlwiKTtcbiAgICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pLCB7IGlzQW5vbnltb3VzOiBsLCB1c2VSZWRpcmVjdEZsb3c6IGMgfSA9IGEuc2V0dGluZ3MgPz8ge307XG4gICAgICBJZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCB1ID0gZm8ucGFyc2Uocik7XG4gICAgICBJZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCBkID0gcSh0LCBuLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5sID8gWnMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucy5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSksIG0gPSBwcihkLCBzLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIEllKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgICBjb25zdCBfID0gdjQoKSwgZiA9ICExLCB5ID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBmLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGYgPyB7XG4gICAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgICB9IDogdm9pZCAwLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6IGMsXG4gICAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IF9cbiAgICAgICAgfSxcbiAgICAgICAgLi4ubVxuICAgICAgfSwgaCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgdiA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoeSkpLCBTID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgICByOiB2XG4gICAgICB9KSwgdyA9IGAke2h9PyR7Uy50b1N0cmluZygpfWA7XG4gICAgICBpZiAoYylcbiAgICAgICAgdGhyb3cgSWUoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdywgYXdhaXQgRHQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIGNvbnN0IGIgPSBhd2FpdCBHbihcbiAgICAgICAgXCJQYXlQYWxcIixcbiAgICAgICAgbyxcbiAgICAgICAgXyxcbiAgICAgICAgd1xuICAgICAgKTtcbiAgICAgIEllKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIGIpO1xuICAgICAgY29uc3QgQyA9IFh0KGIuaHJlZiwgXCJjYXR0XCIpLCBEID0gWHQoYi5ocmVmLCBcImFwcHJvdmFsX3Nlc3Npb25faWRcIiksIGsgPSBhd2FpdCBPKG8sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBmID8gQyA6IHZvaWQgMCxcbiAgICAgICAgdGhlaXJfcG1faWQ6IGYgPyBEIDogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBJZShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBrKSwgdWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwicGF5cGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IG8sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBkLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBrLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKG8pIHtcbiAgICAgIHRocm93IEVsKFwiUGF5UGFsIHBheW1lbnQgZXJyb3JcIiwgbyksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IHBheW1lbnRfbWV0aG9kOiBcInBheXBhbFwiLCBlcnJvcjogbyB9KSwgbmV3IEVycm9yKChvID09IG51bGwgPyB2b2lkIDAgOiBvLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IHBlLCBlcnJfXzogVXIgfSA9IEkoXCJwb2NreXQtcGF5cGFsXCIpLCB5byA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgQ2wgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB5byk7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IE4ucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBrbCA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGssIEo7XG4gICAgcGUoXCJSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTShvKTtcbiAgICBwZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgY29uc3QgbCA9IHlvLnBhcnNlKHQpO1xuICAgIHBlKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCBjID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncywgdSA9IHEoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBjID09IG51bGwgPyB2b2lkIDAgOiBjLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICksIGQgPSBwcih1LCBzLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBwZShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cy5tb2RlfWApO1xuICAgIGNvbnN0IG0gPSB2NCgpLCBfID0gcy5tb2RlICE9PSBcInNldHVwXCIsIGYgPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBsLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGwsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IF8sXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IF8gPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISEoKGsgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzKSAhPSBudWxsICYmIGsudXNlUmVkaXJlY3RGbG93KSxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IG1cbiAgICAgIH0sXG4gICAgICAuLi5kXG4gICAgfSwgeSA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgaCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZikpLCB2ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogcy50b2tlbixcbiAgICAgIHI6IGhcbiAgICB9KSwgUyA9IGAke3l9PyR7di50b1N0cmluZygpfWA7XG4gICAgaWYgKChKID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncykgIT0gbnVsbCAmJiBKLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IHBlKFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFMsIGF3YWl0IER0KDIwICogMWUzKSwgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcGUoXCJTdGFydGluZyBwb3B1cCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHBlKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IHcgPSBhd2FpdCBHbihcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBvLFxuICAgICAgbSxcbiAgICAgIFNcbiAgICApO1xuICAgIHBlKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHcpO1xuICAgIGNvbnN0IGIgPSBpbyh3LmhyZWYpLCBDID0gWHQody5ocmVmLCBcImNhdHRcIik7XG4gICAgaWYgKCFDKVxuICAgICAgdGhyb3cgVXIoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIHcuaHJlZiksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTFwiKTtcbiAgICBwZShgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHtifWApO1xuICAgIGNvbnN0IEQgPSBhd2FpdCBPKG8sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBiLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogXyA/IEMgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAocGUoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgRCksIHMubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogRC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoIUQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBVcihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIEQpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBELnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxuKSwganIgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogRywgZXJyX186IEFsIH0gPSBJKFwic3RyaXBlLWxpbmtcIiksIElsID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIFRsID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIFJsID0gdmUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSBlLmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBHKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIElsKTtcbiAgICBHKFwiU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBvID0gYXdhaXQgTShhKSwgcyA9IG8ubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIEcoXCJDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGJlKGEsIG8udG9rZW4sIHMsIHZvaWQgMCksIHsgZWxlbWVudHM6IGMsIHN0cmlwZTogdSB9ID0gYXdhaXQgJGkobi5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBsLmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICBHKFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBkID0gYy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KSwgbSA9ICgpID0+IHtcbiAgICAgIGQubW91bnQoYCMke2pyfWApO1xuICAgIH0sIF8gPSAoKSA9PiB7XG4gICAgICBkLnVubW91bnQoKTtcbiAgICB9O1xuICAgIHJldHVybiByICE9IG51bGwgJiYgci5kb05vdE1vdW50T25Jbml0ID8gRyhcIk5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlcIikgOiAoRyhcIk1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLlwiKSwgbSgpKSwgZC5vbihcImNsaWNrXCIsIGFzeW5jIChmKSA9PiB7XG4gICAgICBpZiAoRyhcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpLCByICE9IG51bGwgJiYgci5vdmVycmlkZUxpbmtTdWJtaXQgJiYgIWF3YWl0IHIub3ZlcnJpZGVMaW5rU3VibWl0KCkpIHtcbiAgICAgICAgRyhcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZi5yZXNvbHZlKCk7XG4gICAgfSksIGQub24oXCJjb25maXJtXCIsIGFzeW5jIChmKSA9PiB7XG4gICAgICBHKFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBmKTtcbiAgICAgIGNvbnN0IHkgPSBhd2FpdCB1LmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50czogYyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBmLmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgeS5lcnJvciA/IChBbChcImVycm9yXCIsIHkuZXJyb3IpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoeS5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKSkgOiAoRyhcInBheW1lbnRNZXRob2RcIiwgeS5wYXltZW50TWV0aG9kKSwgTi5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHkucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IG0sXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBfLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgTWwoanIpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgTmwgPSBCKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIEcoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0obyk7XG4gICAgRyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgbCA9IEZsKHIsIGEuc3RyaXBlUE0pLCBjID0gcShsLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5jXG4gICAgfSksIEcoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgdSA9IGF3YWl0IG9lKG8sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBhLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IEgoYyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUShjLCBzLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBsZSgpXG4gICAgfSk7XG4gICAgRyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBtID0gVGwucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBpZiAocy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEcoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgXyA9IGF3YWl0IE8obywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBtXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBtdChfKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBHKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBfID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBjW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogY1twLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IEgoYyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEoYywgcy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgdXIobywgXykgfTtcbiAgICB9XG4gIH1cbiksIEZsID0gKGUsIHQpID0+IHtcbiAgdmFyIGMsIHUsIGQsIG0sIF87XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLmFdID0gKCh1ID0gKGMgPSB0LmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYy50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBvID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJbcC5FTUFJTF0gPSByW3AuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgoZCA9IHQubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGQuZW1haWwpIHx8IHQuYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltwLlpJUF9DT0RFXSA9IHJbcC5aSVBfQ09ERV0gfHwgKChtID0gdC5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IG0ucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgcltwLkNPVU5UUlldID0gcltwLkNPVU5UUlldIHx8ICgoXyA9IHQuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfLmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgcyA9IHJbcC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiXCIsIGwgPSByW3AuTEFTVF9OQU1FXSB8fCBvIHx8IFwiXCI7XG4gIHJldHVybiBzIHx8IGwgPyAocltwLkZJUlNUX05BTUVdID0gcywgcltwLkxBU1RfTkFNRV0gPSBsKSA6IChyW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbcC5MQVNUX05BTUVdID0gXCJcIiksIEcoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgciksIHI7XG59LCBNbCA9IChlKSA9PiBuZXcgUHJvbWlzZSgodCkgPT4ge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNvbnN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICBuID8gdChuKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShyKTtcbiAgfTtcbiAgcigpO1xufSksIHsgbG9nX186IEssIGVycl9fOiBMbCB9ID0gSShcInN0cmlwZS1wclwiKSwgRGwgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHhsID0gdmUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIEsoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCByID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIERsKTtcbiAgICBLKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBNKG4pLCBvID0gYS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgSyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgYmUobiwgYS50b2tlbiwgbywgdm9pZCAwKSwgbCA9IGF3YWl0IEdpKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgb1xuICAgICk7XG4gICAgSyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGwuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAoYyA9PT0gbnVsbClcbiAgICAgIHJldHVybiBMbChcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgSyhcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBjKTtcbiAgICBjb25zdCB1ID0gKGQsIG0pID0+IE4uc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBtID09IG51bGwgPyB2b2lkIDAgOiBtLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogbCxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGMuYXBwbGVQYXksIGdvb2dsZVBheTogYy5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBsLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgT2wgPSBCKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGEsXG4gICAgaW5pdFJlc3VsdDogb1xuICB9KSA9PiB7XG4gICAgaWYgKEsoXCJSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpLCBhLnByb3ZpZGVyICE9PSB0LnByb3ZpZGVyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHthLnByb3ZpZGVyfSwgZ290ICR7dC5wcm92aWRlcn1gKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gby5wcjtcbiAgICBpZiAoYSAhPSBudWxsICYmIGEub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgeSA9IGEub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIEsoXCJPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoXCIsIHkpO1xuICAgICAgY29uc3QgaCA9IHR5cGVvZiB5LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT0gXCJmdW5jdGlvblwiID8geS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHt9KSA6IHkuYXBwbGVQYXlQYXltZW50UmVxdWVzdDtcbiAgICAgIGpsKGwsIHkuYW1vdW50LCB5LnBlbmRpbmcsIGgsIHkubGFiZWwpO1xuICAgIH1cbiAgICBLKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGwuc2hvdygpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBWaShsKTtcbiAgICBLKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCBjKSwgSyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgdSA9IFVsKHIsIGMpLCBkID0gcSh1LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5kXG4gICAgfSksIEsoXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiLCBkKTtcbiAgICBjb25zdCBtID0gYXdhaXQgUnMocywge1xuICAgICAgZmllbGRzOiBkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0XG4gICAgfSksIF8gPSAkbChtKTtcbiAgICBLKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgcWkoXywgYyk7XG4gICAgY29uc3QgZiA9IGF3YWl0IE0ocyk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBLKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgeSA9IGF3YWl0IE8ocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IG10KHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEsoXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgeSA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBkW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogZFtwLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBkW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9hZGRyZXNzOiBIKGQpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBRKGQsIGYuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogZFtwLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZi5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZi5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IHVyKHMsIHkpIH07XG4gICAgfVxuICB9XG4pLCBVbCA9IChlLCB0KSA9PiB7XG4gIHZhciBkLCBtLCBfLCBmO1xuICBjb25zdCByID0geyAuLi5lIH0sIFtuLCAuLi5hXSA9ICgobSA9IChkID0gdC5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBkLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0uc3BsaXQoL1xccysvKSkgPz8gW10sIG8gPSBhLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgcyA9IChmID0gKF8gPSB0LnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBfLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IGYuYWRkcmVzcywgbCA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICByW3AuRU1BSUxdID0gcltwLkVNQUlMXSB8fCB0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5wb3N0YWxfY29kZSkgfHwgKGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCByW3AuQ09VTlRSWV0gPSByW3AuQ09VTlRSWV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY291bnRyeSkgfHwgKGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBjID0gcltwLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgdSA9IHJbcC5MQVNUX05BTUVdIHx8IG8gfHwgXCJcIjtcbiAgcmV0dXJuIGMgfHwgdSA/IChyW3AuRklSU1RfTkFNRV0gPSBjLCByW3AuTEFTVF9OQU1FXSA9IHUpIDogKHJbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltwLkxBU1RfTkFNRV0gPSBcIlwiKSwgSyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIGpsID0gKGUsIHQsIHIsIG4sIGEpID0+IHtcbiAgZS51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBhID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IHJcbiAgICB9LFxuICAgIGN1cnJlbmN5OiB0LmN1cnJlbmN5LFxuICAgIC8vIFN0cmlwZSdzIGFwcGxlUGF5IG9wdGlvbiBvbmx5IHN1cHBvcnRzICdyZWN1cnJpbmdQYXltZW50UmVxdWVzdCcgfCAnZGVmZXJyZWRQYXltZW50UmVxdWVzdCcgfCAnYXV0b21hdGljUmVsb2FkUGF5bWVudFJlcXVlc3QnIG9mIG5hdGl2ZSBBcHBsZVBheSBwYXltZW50IHJlcXVlc3RcbiAgICAvLyBXZSdyZSBhY2NlcHRpbmcgbmF0aXZlIFBheW1lbnQgUmVxdWVzdCBoZXJlIGZvciBtb3JlIGNvbW1vbiB0eXBpbmcuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHN0cmlwZSBkbyBub3QgZXhwZWN0IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCAkbCA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBVaS5wYXJzZShlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCBtZSA9IChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBlLmZpbHRlcigoYSkgPT4ge1xuICAgIGNvbnN0IG8gPSByID09PSB2b2lkIDAgPyAhMCA6IGEucHJvY2Vzc29yX25hbWUgPT09IHIsIHMgPSBhLnByb3ZpZGVyID09PSB0O1xuICAgIHJldHVybiBvICYmIHM7XG4gIH0pO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKTtcbiAgcmV0dXJuIG4ubGVuZ3RoICE9PSAxICYmIChjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKSwgZyhcIm1vcmVfdGhhbl9vbmVfY3BtX2ZvdW5kXCIsIHtcbiAgICBwcm92aWRlcjogdCxcbiAgICBwcm9jZXNzb3I6IHIsXG4gICAgY3BtczogZVxuICB9KSksIG5bMF07XG59LCBOID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IGZsXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IHhsLFxuICAgIHJ1bjogT2xcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IFJsLFxuICAgIHJ1bjogTmxcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIGluaXQ6IENsLFxuICAgIHJ1bjoga2xcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IFBsLFxuICAgIHJ1bjogU2xcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6ICRjLFxuICAgIHJ1bjogR2NcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBVYyxcbiAgICBydW46IGpjXG4gIH0sXG4gIGFpcndhbGxleEFDSDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogTGNcbiAgfSxcbiAgYWlyd2FsbGV4RUZUOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBsY1xuICB9LFxuICBhaXJ3YWxsZXhCQUNTOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBzY1xuICB9LFxuICBhaXJ3YWxsZXhTRVBBOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBkY1xuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiB2bCxcbiAgICBydW46IGJsXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogemMsXG4gICAgcnVuOiBIY1xuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBCYyxcbiAgICBydW46IFljXG4gIH0sXG4gIGFkeWVuR29vZ2xlUGF5OiB7XG4gICAgaW5pdDogTmMsXG4gICAgcnVuOiBGY1xuICB9LFxuICBhZHllbkFwcGxlUGF5OiB7XG4gICAgaW5pdDogVGMsXG4gICAgcnVuOiBSY1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSwgeyBsb2dfXzogR2wsIGVycl9fOiBWbCB9ID0gSShcImluaXQtZmxvd3NcIiksIGFlID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IG5ldyBudCgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAobikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHIuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBhID0gYXdhaXQgdChuKTtcbiAgICAgICAgR2woYOKclCAke2V9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgYSksIHIuc2V0KGEpO1xuICAgICAgfSBjYXRjaCAoYSkge1xuICAgICAgICBWbChg8J2ZrSAke2V9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBlZShhKSwgXCJEZXRhaWxzOlwiLCBhKSwgci50aHJvdyhhLCBlZShhKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgcWwgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSkpO1xufSwgemwgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogYWUoXCJTdHJpcGUgUFJcIiwgTi5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogYWUoXCJTdHJpcGUgTGlua1wiLCBOLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiBhZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgTi5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogYWUoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgTi5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiBhZShcIkxvb3BcIiwgTi5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiBhZShcIlBheVBhbFwiLCBOLnBheXBhbC5pbml0KSxcbiAgLy8gUG9ja3l0IFBheVBhbFxuICBwb2NreXRQYXlwYWw6IGFlKFwiUG9ja3l0IFBheVBhbFwiLCBOLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBhZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIE4uYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBhZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgTi5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KSxcbiAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gIGFkeWVuR29vZ2xlUGF5OiBhZShcIkFkeWVuIEdvb2dsZVBheVwiLCBOLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAvLyBBZHllbiBBcHBsZVBheVxuICBhZHllbkFwcGxlUGF5OiBhZShcIkFkeWVuIEFwcGxlUGF5XCIsIE4uYWR5ZW5BcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IEhsIH0gPSBJKFwiZm9ybS1jYWxsYmFja3NcIiksIGllID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgJHIgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogaWUsXG4gIG9uQmx1cjogaWUsXG4gIG9uQ2hhbmdlOiBpZSxcbiAgb25Mb2FkOiBpZSxcbiAgb25Mb2FkRXJyb3I6IGllLFxuICBvblZhbGlkYXRpb25FcnJvcjogaWUsXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBpZSxcbiAgb25DaGVja291dFN1Y2Nlc3M6IGllLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IGllLFxuICBvbkNoZWNrb3V0RXJyb3I6IGllLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogaWVcbn0pLCBmZSA9IGNsYXNzIGZlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAodCkgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gZmUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSBOYShyLCBuID8/IGZlLk5PT1AsIEhsKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW3JdID0gYTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IGZlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG5mZS5OT09QID0gKCkgPT4ge1xufSwgZmUuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHQgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKCRyLmtleW9mKCkuZW51bSkuZm9yRWFjaCgocikgPT4ge1xuICAgIHRbcl0gPSBmZS5OT09QO1xuICB9KSwgdDtcbn0sIGZlLmZyb21PYmplY3QgPSAodCkgPT4ge1xuICBjb25zdCByID0gbmV3IGZlKCk7XG4gIHJldHVybiByLnNldENhbGxiYWNrcygkci5wYXJzZSh0KSksIHI7XG59O1xubGV0IGVyID0gZmU7XG5mdW5jdGlvbiBCbCgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlID0gJCgpLCB0ID0gZTtcbiAgICBpZiAodCAhPSBudWxsICYmIHQubmV4dCB8fCB0ICE9IG51bGwgJiYgdC5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKVxuICAgICAgcmV0dXJuIFwibmV4dGpzXCI7XG4gICAgY29uc3QgciA9IGU7XG4gICAgaWYgKHIgIT0gbnVsbCAmJiByLl9fTlVYVF9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19udXh0XCIpKVxuICAgICAgcmV0dXJuIFwibnV4dFwiO1xuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgoYSkgPT4gYS5pbmNsdWRlcyhcInJlYWN0XCIpKSB8fCBBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKGEpID0+IGEuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpXG4gICAgICByZXR1cm4gXCJyZWFjdFwiO1xuICAgIGNvbnN0IG4gPSBlO1xuICAgIHJldHVybiBuICE9IG51bGwgJiYgbi5WdWUgfHwgbiAhPSBudWxsICYmIG4uX19WVUVfXyA/IFwidnVlXCIgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpID8gXCJhbmd1bGFyXCIgOiBcInZhbmlsbGFcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5mdW5jdGlvbiBZbChlKSB7XG4gIHZhciB0LCByLCBuO1xuICB0cnkge1xuICAgIHN3aXRjaCAoZSkge1xuICAgICAgY2FzZSBcInJlYWN0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcIm5leHRqc1wiOiB7XG4gICAgICAgIGNvbnN0IG8gPSAkKCk7XG4gICAgICAgIHJldHVybiAoKHQgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLm5leHQpID09IG51bGwgPyB2b2lkIDAgOiB0LnZlcnNpb24pIHx8ICgociA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uX19ORVhUX0RBVEFfXykgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYnVpbGRJZCkgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcInZ1ZVwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJhbmd1bGFyXCI6IHtcbiAgICAgICAgY29uc3QgYSA9IChuID0gJCgpKSA9PSBudWxsID8gdm9pZCAwIDogbi5kb2N1bWVudCwgbyA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIG8gPyBvLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gSmwoKSB7XG4gIGNvbnN0IGUgPSBCbCgpLCB0ID0gWWwoZSk7XG4gIHJldHVybiB7IGZyYW1ld29yazogZSwgdmVyc2lvbjogdCB9O1xufVxuY29uc3QgaG8gPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uaGVpZ2h0IDogbnVsbCwgdCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi53aWR0aCA6IG51bGwsIHIgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uY29sb3JEZXB0aCA6IG51bGwsIG4gPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IuamF2YUVuYWJsZWQoKSA6ICExLCBhID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGwsIG8gPSBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcIjtcbiAgbGV0IHMgPSBudWxsO1xuICB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciAmJiAocyA9IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgPyB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIDogd2luZG93Lm5hdmlnYXRvci5icm93c2VyTGFuZ3VhZ2UpO1xuICBjb25zdCBsID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4ge1xuICAgIGNvbG9yX2RlcHRoOiByLFxuICAgIGphdmFfZW5hYmxlZDogbixcbiAgICBqYXZhc2NyaXB0X2VuYWJsZWQ6ICEwLFxuICAgIGxhbmd1YWdlOiBzLFxuICAgIHNjcmVlbl9oZWlnaHQ6IGUsXG4gICAgc2NyZWVuX3dpZHRoOiB0LFxuICAgIHRpbWVfem9uZV9vZmZzZXQ6IGwsXG4gICAgdXNlcl9hZ2VudDogYSxcbiAgICBhY2NlcHRfaGVhZGVyOiBvXG4gIH07XG59O1xudmFyIFIgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5jYXJkID0gXCJjYXJkXCIsIGUucG9ja3l0UGF5cGFsID0gXCJwb2NreXQtcGF5cGFsXCIsIGUuYXBwbGVQYXkgPSBcImFwcGxlLXBheVwiLCBlLmdvb2dsZVBheSA9IFwiZ29vZ2xlLXBheVwiLCBlLmxvb3BDcnlwdG8gPSBcImxvb3AtY3J5cHRvXCIsIGUucGF5cGFsID0gXCJwYXlwYWxcIiwgZS5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIGUuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgZS5hZHllbkdvb2dsZVBheSA9IFwiYWR5ZW4tZ29vZ2xlLXBheVwiLCBlLmFkeWVuQXBwbGVQYXkgPSBcImFkeWVuLWFwcGxlLXBheVwiLCBlLmFpcndhbGxleEFDSCA9IFwiYWlyd2FsbGV4LWFjaFwiLCBlLmFpcndhbGxleEVGVCA9IFwiYWlyd2FsbGV4LWVmdFwiLCBlLmFpcndhbGxleEJBQ1MgPSBcImFpcndhbGxleC1iYWNzXCIsIGUuYWlyd2FsbGV4U0VQQSA9IFwiYWlyd2FsbGV4LXNlcGFcIiwgZSkpKFIgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oUik7XG52YXIgVGUgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5BQ0ggPSBcImFjaFwiLCBlLkVGVCA9IFwiZWZ0XCIsIGUuQkFDUyA9IFwiYmFjc1wiLCBlLlNFUEEgPSBcInNlcGFcIiwgZS5BUFBMRV9QQVkgPSBcImFwcGxlX3BheVwiLCBlLkNSRURJVF9DQVJEID0gXCJjcmVkaXRfY2FyZFwiLCBlLkdPT0dMRV9QQVkgPSBcImdvb2dsZV9wYXlcIiwgZS5TVFJJUEVfTElOSyA9IFwic3RyaXBlX2xpbmtcIiwgZS5DUllQVE8gPSBcImNyeXB0b1wiLCBlLlBBWVBBTCA9IFwicGF5cGFsXCIsIGUpKShUZSB8fCB7fSk7XG5jb25zdCBHciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbZS5haXJ3YWxsZXhBcHBsZVBheSwgZS5hdXRob3JpemVOZXRBcHBsZVBheSwgZS5hZHllbkFwcGxlUGF5XSwgciA9IFtdO1xuICB0LmZvckVhY2goKGEpID0+IHtcbiAgICBjb25zdCBvID0gYS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgbyAhPSBudWxsICYmIG8uaXNBdmFpbGFibGUgJiYgci5wdXNoKG8pO1xuICB9KTtcbiAgY29uc3QgbiA9IGUuc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gbiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUgJiYgbi5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXkgJiYgci5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgc3RhcnRGbG93OiAobykgPT4gbi5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyA9PSBudWxsID8gdm9pZCAwIDogby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSlcbiAgfSksIHtcbiAgICBwcm9jZXNzb3JzOiByLm1hcCgoYSkgPT4gYS5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiByLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBXbChyLCBhKVxuICB9O1xufSwgVnIgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gW2UuYWlyd2FsbGV4R29vZ2xlUGF5LCBlLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgZS5hZHllbkdvb2dsZVBheV0sIHIgPSBbXTtcbiAgdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgY29uc3QgbyA9IGEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIG8gIT0gbnVsbCAmJiBvLmlzQXZhaWxhYmxlICYmIHIucHVzaChvKTtcbiAgfSk7XG4gIGNvbnN0IG4gPSBlLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlICYmIG4uYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSAmJiByLnB1c2goe1xuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChvKSA9PiBuLnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyA9PSBudWxsID8gdm9pZCAwIDogby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSlcbiAgfSksIHtcbiAgICBwcm9jZXNzb3JzOiByLm1hcCgoYSkgPT4gYS5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiByLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBabChyLCBhKVxuICB9O1xufSwgV2wgPSAoZSwgdCkgPT4ge1xuICBpZiAodCAhPSBudWxsICYmIHQucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgbiA9IGUuZmluZCgoYSkgPT4gYS5wcm9jZXNzb3IgPT09IHQucHJvY2Vzc29yKTtcbiAgICBpZiAobiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUpXG4gICAgICByZXR1cm4gbi5zdGFydEZsb3codCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQXBwbGUgUGF5IHByb2Nlc3NvciAke3QucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gbi5pc0F2YWlsYWJsZSk7XG4gIGlmIChyKVxuICAgIHJldHVybiByLnN0YXJ0Rmxvdyh0KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59LCBabCA9IChlLCB0KSA9PiB7XG4gIGlmICh0ICE9IG51bGwgJiYgdC5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChhKSA9PiBhLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke3QucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gbi5pc0F2YWlsYWJsZSk7XG4gIGlmIChyKVxuICAgIHJldHVybiByLnN0YXJ0Rmxvdyh0KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEdvb2dsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufSwgS2wgPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIHsgbG9nX186IFl0LCBlcnJfXzogUWwgfSA9IEkoXCJ0cmFjZXJcIiksIFhsID0gKGUsIHQpID0+IHtcbiAgdHJ5IHtcbiAgICBldShlLCB0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIFFsKGBFcnJvciBpbml0aWFsaXppbmcgdHJhY2VyOiAke3J9YCk7XG4gIH1cbn07XG5sZXQgcXI7XG5jb25zdCBldSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpXG4gICAgcmV0dXJuO1xuICBjb25zdCByID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LWdXVXJyMXdfLSF+ezAwNH1+LmpzJyksIHsgQ29uc29sZVNwYW5FeHBvcnRlcjogbiwgU2ltcGxlU3BhblByb2Nlc3NvcjogYSwgV2ViVHJhY2VyUHJvdmlkZXI6IG8gfSA9IHIsIHMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtRDcwR2ttbXUtIX57MDA3fX4uanMnKSwgeyBGZXRjaEluc3RydW1lbnRhdGlvbjogbCB9ID0gcywgYyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1Ca3lhaXpVTS0hfnswMGN9fi5qcycpLCB7IFpvbmVDb250ZXh0TWFuYWdlcjogdSB9ID0gYywgZCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1pMW1BeXRvRC0hfnswMGR9fi5qcycpLCB7IHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9uczogbSB9ID0gZCwgXyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1XTnlUUjA4Mi0hfnswMGZ9fi5qcycpLCB7IFJlc291cmNlOiBmIH0gPSBfLCB5ID0gYXdhaXQgaW1wb3J0KCcuL2RldGVjdC1yZXNvdXJjZXMtQzBQa1FNUkUtIX57MDBpfX4uanMnKS50aGVuKChBZSkgPT4gQWUuZCksIHsgZGV0ZWN0UmVzb3VyY2VzU3luYzogaCB9ID0geSwgdiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1ESFkzVW84cC0hfnswMGx9fi5qcycpLCB7IE9UTFBUcmFjZUV4cG9ydGVyOiBTIH0gPSB2LCB3ID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUhaV0dmMXh3LSF+ezAwbn1+LmpzJyksIHsgQjNQcm9wYWdhdG9yOiBiLCBCM0luamVjdEVuY29kaW5nOiBDIH0gPSB3LCBEID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LURfNmNvNUI4LSF+ezAwMX1+LmpzJyksIHsgQmF0Y2hTcGFuUHJvY2Vzc29yOiBrIH0gPSBEO1xuICBZdChgSW5pdGlhbGl6aW5nIHRyYWNlciB3aXRoIHZlcnNpb24gJHtlfSBhbmQgYmFzZVVybCAke3R9YCk7XG4gIGNvbnN0IEogPSB0dSh0KTtcbiAgWXQoYFVzaW5nIGNvbGxlY3RvciBVUkwgJHtKfWApO1xuICBjb25zdCBMID0gbmV3IFMoeyB1cmw6IEogfSksIHRlID0ge1xuICAgIFwic2VydmljZS52ZXJzaW9uXCI6IGUsXG4gICAgXCJzZXJ2aWNlLm5hbWVcIjogXCJvanNcIlxuICB9O1xuICByZXR1cm4gbmV3IG8oe1xuICAgIHJlc291cmNlOiBuZXcgZih0ZSkubWVyZ2UoaCgpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IGEobmV3IG4oKSksXG4gICAgICBuZXcgayhMLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KS5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyB1KCksXG4gICAgcHJvcGFnYXRvcjogbmV3IGIoeyBpbmplY3RFbmNvZGluZzogQy5NVUxUSV9IRUFERVIgfSlcbiAgfSksIG0oe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBsKHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJsczogWy8uKi9dLFxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gYWxsIFVSTHNcbiAgICAgICAgLy8gRXhjbHVkZSBBZHllbiBVUkxzIC0gdGhleSBkbyBub3QgYWxsb3cgT1BUSU9OUyByZXF1ZXN0c1xuICAgICAgICAvLyBBbHNvIGV4Y2x1ZGUgbG9vcGNyeXB0by54eXpcbiAgICAgICAgaWdub3JlVXJsczogWy9eaHR0cHM6XFwvXFwvKC4qXFwuKT9hZHllblxcLmNvbS8sIC9eaHR0cHM6XFwvXFwvKC4qXFwuKT9sb29wY3J5cHRvXFwueHl6L11cbiAgICAgIH0pXG4gICAgXVxuICB9KSwgcXIgPSBWZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBZdChcIlRyYWNlciBpbml0aWFsaXplZFwiKSwgcXI7XG59LCB0dSA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuZXcgVVJMKGUpLmhvc3RuYW1lO1xuICByZXR1cm4gdCA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIgPyBcImh0dHBzOi8vb3RlbC5vcGVucGF5c2FuZGJveC5jb20vdjEvdHJhY2VzXCIgOiB0ID09PSBcImNkZS5nZXRvcGVucGF5LmNvbVwiID8gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCIgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDMxOS92MS90cmFjZXNcIjtcbn07XG5jbGFzcyBydSB7XG4gIGNvbnN0cnVjdG9yKHQsIHIsIG4sIGEpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAobykgPT4ge1xuICAgICAgaWYgKCFvLnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh6cihvLm9yaWdpbikgIT09IHpyKHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIG8uZGF0YSA9PSBcIm9iamVjdFwiICYmIG8uZGF0YS5wZW5wYWwgfHwgdHlwZW9mIG8uZGF0YSA9PSBcIm9iamVjdFwiICYmIG8uZGF0YS5zb3VyY2UgJiYgby5kYXRhLnNvdXJjZSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIilcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IHMgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyA9IFdzKEpTT04ucGFyc2Uoby5kYXRhKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQocykpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBjLCBwYXlsb2FkOiB1IH0gPSBzLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhjLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihjLCB1LmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHUub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGMsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2NdID0gby5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKG8pID0+IG8uZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhby5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIG8uZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIG8pLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMoby5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgbyksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQoby5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHQsIHRoaXMuYmFzZVVybCA9IHIsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBhO1xuICB9XG59XG5jb25zdCB6ciA9IChlKSA9PiBuZXcgVVJMKGUpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIG51KGUsIHQpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiB0XG4gIH0pLnByb21pc2UsIGEgPSBhd2FpdCBPcyhuKTtcbiAgaWYgKCFVcyhuLCBhKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3Mgb3Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHQsIHIpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldCh0LCByKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHQgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgYXUgPSAoZSwgdCwgcikgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSBlO1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGEpID0+IHtcbiAgICBpZiAoYS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IG8gPSBhLmxvYWRlZFZhbHVlLCBzID0gby5pc0F2YWlsYWJsZSAmJiBvLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgbCA9IG8uaXNBdmFpbGFibGUgJiYgby5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBjID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBzLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIHMgJiYgSHIoXCJhcHBsZV9wYXlcIiwgbywgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogbCxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBsICYmIEhyKFwiZ29vZ2xlX3BheVwiLCBvLCB0LCByLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChjKTtcbiAgICB9XG4gIH0pO1xufSwgSHIgPSAoZSwgdCwgciwgbiwgYSkgPT4gTi5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiByLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKHIuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZSksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IGooci5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBlLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogdFxufSksIEJyID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogX2UsIGVycl9fOiByZSB9ID0gSShcIm9wLWZvcm1cIiksIHllID0gY2xhc3MgeWUge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgdmFyIGE7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9ICExLCB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBudCgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgbnQoKSwgdGhpcy5jb250ZXh0ID0gbmV3IG50KCksIHRoaXMuaW5pdEZsb3dzID0gemwoKSwgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbyA9IFZlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIHMgPSBvLnN0YXJ0U3BhbihcImZvcm0uaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGtpbmQ6IHV0LkNMSUVOVCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBVZS53aXRoKFZlLnNldFNwYW4oVWUuYWN0aXZlKCksIHMpLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbCA9IHRoaXMuY3JlYXRlRWxlbWVudChnZS5DREVfQlJJREdFKTtcbiAgICAgICAgICBsLm5vZGUuaWQgPSBcIl9fb3BfaW50ZXJuYWxfY2RlX2JyaWRnZVwiLCBsLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiLCBPYmplY3QuYXNzaWduKGwubm9kZS5zdHlsZSwge1xuICAgICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICAgIHBhZGRpbmc6IFwiMHB4XCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgICAgfSksIGwubW91bnQoXCJib2R5XCIpLCBfZShcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpLCBfZShcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBfZShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgICBjb25zdCBjID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogQnJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfZShcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJ3YWl0aW5nX2Zvcl9jZGVfY29ubmVjdGlvblwiKSwgX2UoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgdSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc3RhcnRTcGFuKFwiY2RlLmNvbm5lY3RcIiwgdm9pZCAwLCBVZS5hY3RpdmUoKSksIGQgPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogQnJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB1ID09IG51bGwgfHwgdS5lbmQoKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJjZGVfY29ubmVjdGVkXCIpLCBfZShcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgYXdhaXQgeHMoZCwgdGhpcy5kZXZpY2VUb2tlbiksIF9lKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IG0gPSB5ZS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICBjLFxuICAgICAgICAgICAgZCxcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmNvbnRleHQuc2V0KG0pLCBhdSh0aGlzLmluaXRGbG93cywgbSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgX2UoXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IHFsKHRoaXMuaW5pdEZsb3dzLCBtLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChjLnRvdGFsQW1vdW50QXRvbXMsIGMuY3VycmVuY3kpLCBfZShcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpLCBzID09IG51bGwgfHwgcy5zZXRTdGF0dXMoeyBjb2RlOiBDZS5PSyB9KSwgZyhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgY29uc3QgYyA9IGVlKGwpO1xuICAgICAgICAgIHMgPT0gbnVsbCB8fCBzLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBDZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGNcbiAgICAgICAgICB9KSwgcmUoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGMpLCBnKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBjXG4gICAgICAgICAgfSksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IoYyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcyA9PSBudWxsIHx8IHMuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChvKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IG8sIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgIXMgfHwgcy50eXBlID09PSBnZS5DREVfQlJJREdFIHx8IChzLm5vZGUuc3R5bGUuaGVpZ2h0ID0gbyk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKG8pID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC5zZXQobyksIGcoXCJjZGVfbG9hZGVkXCIpKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKG8pID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IobyksIG8pLCBnKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogb1xuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChvLCBzID0ge30pID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJjcmVhdGVFbGVtZW50XCIpLCAhdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBsID0gRW8ucGFyc2UobyksIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCB1ID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHMpO1xuICAgICAgYy5uYW1lID0gYCR7bH0tZWxlbWVudGA7XG4gICAgICBjb25zdCBkID0gbmV3IFVSTChgL2FwcC92MS8ke2MubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gZC5zZWFyY2ggPSB1LnRvU3RyaW5nKCksIGMuc3JjID0gZC5ocmVmLCBjLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBjLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUobCwgYyk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChvLCBzKSA9PiB7XG4gICAgICBjb25zdCBsID0ge1xuICAgICAgICB0eXBlOiBvLFxuICAgICAgICBub2RlOiBzLFxuICAgICAgICBtb3VudDogKGMpID0+IHtcbiAgICAgICAgICB2YXIgdTtcbiAgICAgICAgICAodSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYykpID09IG51bGwgfHwgdS5hcHBlbmRDaGlsZChzKSwgZyhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IG9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBsLnR5cGUsIG5vZGU6IGwubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbZ2UuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW2dlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbZ2UuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtnZS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgW2dlLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tvXSA9IGwsIGw7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKG8pID0+IHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBzLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIG8uc3R5bGVzICYmIHMuYXBwZW5kKFwic3R5bGVzXCIsIEtsKG8uc3R5bGVzKSksIHMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIHM7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKG8pID0+IGd0KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCBudShvLm5vZGUpO1xuICAgICAgICBzLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihvLnR5cGUsIHMpLCAhdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIG8udHlwZSA9PT0gZ2UuQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KHMpO1xuICAgICAgfVxuICAgICkuY2F0Y2goKHMpID0+IHJlKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBzKSksIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSBhc3luYyAobykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIHJlKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9ICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcyA9IGF3YWl0IGd0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcInN1Ym1pdF9jYXJkXCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBvID09IG51bGwgPyB2b2lkIDAgOiBvLnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnKFwic3VibWl0X2NhcmRcIiwgeyAuLi5vIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJzdWJtaXRDYXJkXCIpO1xuICAgICAgICAgICAgY29uc3QgbCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghbClcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIGF3YWl0IE4uY29tbW9uQ0MucnVuKHtcbiAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBwYXltZW50Um91dGVJZDogbyA9PSBudWxsID8gdm9pZCAwIDogby5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIHRocm93IHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IGd0KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLFxuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHNcIik7XG4gICAgICAgIGNvbnN0IG8gPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgIGlmICghbylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogcywgaXNBdmFpbGFibGU6IGwgfSA9IEdyKFxuICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICksIHsgcHJvY2Vzc29yczogYywgaXNBdmFpbGFibGU6IHUgfSA9IFZyKFxuICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICksIGQgPSB0aGlzLmluaXRGbG93cy5wYXlwYWwucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpLCBtID0gKGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuaXNBdmFpbGFibGUpID8/ICExLCBfID0gby5jaGVja291dFBheW1lbnRNZXRob2RzLnNvbWUoXG4gICAgICAgICAgKHcpID0+IHcucHJvY2Vzc29yX25hbWUgPT09IFwicG9ja3l0XCIgJiYgdy5wcm92aWRlciA9PT0gXCJwYXlwYWxcIlxuICAgICAgICApLCBmID0gdGhpcy5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCksIHkgPSAoZiA9PSBudWxsID8gdm9pZCAwIDogZi5pc0F2YWlsYWJsZSkgPz8gITEsIGggPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogUi5jYXJkLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogITBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIuYXBwbGVQYXksXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBzLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIuZ29vZ2xlUGF5LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogYyxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLnBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IG0gPyBbVS5FbnVtLnBheXBhbF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBtXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLnBvY2t5dFBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IF8gPyBbVS5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBfXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLmxvb3BDcnlwdG8sXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiB5ID8gW1UuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IHlcbiAgICAgICAgICB9XG4gICAgICAgIF0sIHYgPSB7XG4gICAgICAgICAgcGF5cGFsOiBSLnBheXBhbCxcbiAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IFIuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBSLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogUi5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IFIuYXV0aG9yaXplbmV0QXBwbGVQYXksXG4gICAgICAgICAgYWR5ZW5Hb29nbGVQYXk6IFIuYWR5ZW5Hb29nbGVQYXksXG4gICAgICAgICAgYWR5ZW5BcHBsZVBheTogUi5hZHllbkFwcGxlUGF5XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBbLi4uT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW3csIGJdKSA9PiB7XG4gICAgICAgICAgY29uc3QgQyA9IGIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiB2W3ddID8/IHcsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiAoQyA9PSBudWxsID8gdm9pZCAwIDogQy5pc0F2YWlsYWJsZSkgPz8gITFcbiAgICAgICAgICB9O1xuICAgICAgICB9KSwgLi4uaF07XG4gICAgICB9XG4gICAgKSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gYXN5bmMgKG8sIHMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICByZShcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGwgPSBhd2FpdCBndChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwgeyBtZXRob2Q6IG8sIHNldHRpbmdzOiBzIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZW5lcmFsU3VibWl0XCIpO1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghYylcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIHN3aXRjaCAobykge1xuICAgICAgICAgICAgICBjYXNlIFIuY2FyZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRDYXJkKHMpO1xuICAgICAgICAgICAgICBjYXNlIFIucG9ja3l0UGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBOLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGMuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgVGUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBzIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gTi5wYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBjLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFRlLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooYy5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogcyB9LFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5sb29wQ3J5cHRvOlxuICAgICAgICAgICAgICAgIHJldHVybiBOLmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBjLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5hcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93OiB1IH0gPSBHcih0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93OiB1IH0gPSBWcih0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgcmUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgcmUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIHJlKFxuICAgICAgICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICByZShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hZHllbkdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICByZShcbiAgICAgICAgICAgICAgICAgICAgXCJhZHllbi1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmFkeWVuQXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5BcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICByZShcbiAgICAgICAgICAgICAgICAgICAgXCJhZHllbi1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4QUNIOlxuICAgICAgICAgICAgICAgIHJldHVybiBOLmFpcndhbGxleEFDSC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGMuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgVGUuQUNILFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhFRlQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE4uYWlyd2FsbGV4RUZULnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgYy5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBUZS5FRlQsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGMuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLmFpcndhbGxleEJBQ1M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE4uYWlyd2FsbGV4QkFDUy5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGMuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgVGUuQkFDUyxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooYy5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4U0VQQTpcbiAgICAgICAgICAgICAgICByZXR1cm4gTi5haXJ3YWxsZXhTRVBBLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgYy5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBUZS5TRVBBLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgX3Qobyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgbDtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgbDtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdFdpdGggPSB0aGlzLmdlbmVyYWxTdWJtaXQsIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICB2YXIgbztcbiAgICAgIF9lKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIiksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIiksIHRoaXMuaXNEZXN0cm95ZWQgPSAhMDtcbiAgICAgIGZvciAoY29uc3QgcyBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgcyAmJiBzLm5vZGUucmVtb3ZlKCk7XG4gICAgICAobyA9ICQoKSkgPT0gbnVsbCB8fCBvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB4aSgpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCBnKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAobykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhvKTtcbiAgICB9LCB5ZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuMTFcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gdC5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnQsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBlci5mcm9tT2JqZWN0KHQpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHQuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgb3UoKSwgdGhpcy5kZXZpY2VUb2tlbiA9IE9uKCksIERpKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcms6IHIsIHZlcnNpb246IG4gfSA9IEpsKCk7XG4gICAgd24odGhpcy5iYXNlVXJsKS50aGVuKChvKSA9PiB7XG4gICAgICBpZiAoIUt0LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudDogbyxcbiAgICAgICAgICBmcmFtZXdvcms6IHIsXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogbixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIEt0LnNldChzKTtcbiAgICAgIH1cbiAgICB9KSwgZyhcImZvcm1faW5pdFwiKSwgY29uc29sZS5sb2coXCJPSlMgVkVSU0lPTlwiLCB0aGlzLm9qc1ZlcnNpb24pLCB0LmFsbG93VHJhY2luZyA9PT0gITAgJiYgWGwodGhpcy5vanNWZXJzaW9uLCB0aGlzLmJhc2VVcmwpLCB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBydSh0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KSwgKGEgPSAkKCkpID09IG51bGwgfHwgYS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbiAgY2hlY2tWYWxpZEZvcm1JbnN0YW5jZSh0ID0gXCJ1bmtub3duXCIpIHtcbiAgICBjb25zdCByID0geWUuZ2V0SW5zdGFuY2UoKSwgbiA9IHtcbiAgICAgIGNhbGxlcjogdCxcbiAgICAgIHRoaXNGb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgY3VycmVudEZvcm1JZDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZm9ybUlkKSB8fCBcIm5vLWN1cnJlbnQtaW5zdGFuY2VcIixcbiAgICAgIGlzRGVzdHJveWVkOiB0aGlzLmlzRGVzdHJveWVkLFxuICAgICAgY2hlY2tvdXRUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbi5zdWJzdHJpbmcoMCwgMTApICsgXCIuLi5cIlxuICAgIH0sIGEgPSBgXG4gICAgICBbV2FybmluZ10gSW52YWxpZCBmb3JtIGluc3RhbmNlIGRldGVjdGVkLlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UgYXJlIHN0aWxsIHVzaW5nIGFuIG9sZCBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBmb3JtIGFuZCBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgRGVidWcgSW5mbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgLSBjYWxsZXI6ICR7dH1cbiAgICAgIC0gY2FsbGVyX2Zvcm1faWQ6ICR7bi50aGlzRm9ybUlkfVxuICAgICAgLSBjdXJyZW50X2FjdGl2ZV9mb3JtX2lkOiAke24uY3VycmVudEZvcm1JZH1cbiAgICAgIC0gaXNfZGVzdHJveWVkOiAke24uaXNEZXN0cm95ZWR9XG4gICAgICAtIGNoZWNrb3V0X3Rva2VuOiAke24uY2hlY2tvdXRUb2tlbn1cbiAgICBgO1xuICAgIHJldHVybiB0aGlzLmlzRGVzdHJveWVkID8gKHJlKGEpLCBnKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBhIH0pLCAhMSkgOiAhciB8fCByLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgPyAocmUoYSksIGcoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGEgfSksICExKSA6ICEwO1xuICB9XG59O1xueWUub2pzRmxvd3MgPSBOLCB5ZS5hc3NpZ25Bc1NpbmdsZXRvbiA9ICh0KSA9PiB7XG4gIGlmICh5ZS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gdDtcbn0sIHllLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCB5ZS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHQsIHIsIG4sIGEpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTCh0LmJhc2VVcmwgPz8gTW4pLm9yaWdpbixcbiAgZm9ybURpdjogYSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IHIuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHQuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiB0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvblxufSk7XG5sZXQgWXIgPSB5ZTtcblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChZci5nZXRJbnN0YW5jZSgpKSB7XG4gICAgWXIuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2FwcGxlUGF5UmVzdWx0LCBzZXRBcHBsZVBheVJlc3VsdF0gPSB1c2VTdGF0ZShNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUpO1xuICBjb25zdCBbZ29vZ2xlUGF5UmVzdWx0LCBzZXRHb29nbGVQYXlSZXN1bHRdID0gdXNlU3RhdGUoTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvb3BDb25maWcsIHNldExvb3BDb25maWddID0gdXNlU3RhdGUoTE9PUF9MT0FESU5HKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICAgIGlmIChvcEZvcm0pIHtcbiAgICAgICAgY29uc3QgYXBwbGVQYXlSZXN1bHQyID0gZ2V0QXBwbGVQYXlQcm9jZXNzb3JzKG9wRm9ybS5pbml0Rmxvd3MpO1xuICAgICAgICBzZXRBcHBsZVBheVJlc3VsdChhcHBsZVBheVJlc3VsdDIpO1xuICAgICAgICBjb25zdCBnb29nbGVQYXlSZXN1bHQyID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0R29vZ2xlUGF5UmVzdWx0KGdvb2dsZVBheVJlc3VsdDIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBZci5nZXRJbnN0YW5jZSgpID8/IG5ldyBZcih7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIGFsbG93VHJhY2luZzogcHJvcHMuYWxsb3dUcmFjaW5nID8/IGZhbHNlLFxuICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBwcm9wcy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24sXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogYXBwbGVQYXlSZXN1bHQsXG4gICAgZ29vZ2xlUGF5OiBnb29nbGVQYXlSZXN1bHQsXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5leHBvcnQgeyBDZSBhcyBDLCBFcyBhcyBFLCBGciBhcyBGLCBJdCBhcyBJLCBQbiBhcyBQLCBRdCBhcyBRLCBTbiBhcyBTLCBVZSBhcyBVLCBWZSBhcyBWLCBYLCBvciBhcyBhLCBhciBhcyBiLCBDYXJkQ3ZjRWxlbWVudCBhcyBjLCBkcyBhcyBkLCBDYXJkRWxlbWVudCBhcyBlLCBDYXJkRXhwaXJ5RWxlbWVudCBhcyBmLCBncyBhcyBnLCBocyBhcyBoLCBpciBhcyBpLCBDYXJkTnVtYmVyRWxlbWVudCBhcyBqLCBrbiBhcyBrLCBsdCBhcyBsLCBFbGVtZW50c0Zvcm0gYXMgbSwgRmllbGROYW1lIGFzIG4sIG9zIGFzIG8sIEVudmlyb25tZW50IGFzIHAsIFBheUluRmFpbGVkIGFzIHEsIHJzIGFzIHIsIFBheUluU3RhdGUgYXMgcywgU3VibWl0TWV0aG9kcyBhcyB0LCB1dCBhcyB1LCB1c2VPcGVuUGF5RWxlbWVudHMgYXMgdiwgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIGFzIHcgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGtCQUFBQSxVQUFzQjtBQUMvQixTQUFTLEtBQUtDLFNBQVc7QUFDekIsT0FBT0MsUUFBVztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxPQUFBQyxJQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsaUJBQUFDLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLFVBQUFDLElBQVEsV0FBQUMsSUFBUyxhQUFBQyxVQUFpQjtBQUVoRixTQUFTQyxHQUFTQyxHQUFRQyxHQUFXO0FBQ25DLE1BQUlDLElBQWlCLE9BQU87QUFDNUIsRUFBQUEsSUFBaUJBLEVBQWVGLEdBQVFDLENBQVMsSUFBSUQsRUFBTyxZQUFZQztBQUMxRTtBQUNBLFNBQVNFLEdBQVNILEdBQVFJLEdBQUk7QUFDNUIsRUFBSUEsTUFBTyxXQUNUQSxJQUFLSixFQUFPO0FBR2QsTUFBSUssSUFBb0IsTUFBTTtBQUM5QixFQUFBQSxLQUFxQkEsRUFBa0JMLEdBQVFJLENBQUU7QUFDbkQ7QUFFQSxJQUFJRSxLQUFjLDJCQUFZO0FBQzVCLE1BQUlDLElBQWlCLFNBQXVCQyxHQUFHQyxHQUFHO0FBQ2hELFdBQUFGLElBQWlCLE9BQU8sa0JBQWtCO0FBQUEsTUFDeEMsV0FBVyxDQUFDO0FBQUEsSUFDZCxhQUFhLFNBQVMsU0FBVUMsR0FBR0MsR0FBRztBQUNwQyxNQUFBRCxFQUFFLFlBQVlDO0FBQUEsSUFDaEIsS0FBSyxTQUFVRCxHQUFHQyxHQUFHO0FBQ25CLGVBQVNDLEtBQUtEO0FBQ1osUUFBSSxPQUFPLFVBQVUsZUFBZSxLQUFLQSxH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QTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQXlCdkUsS0FBSyxPQUFPO0FBQUEsZ0JBQ1gsS0FBSyxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxlQVFiLEtBQUssT0FBTztBQUFBLGdCQUNYLEtBQUssT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBZ0J6QkMsS0FBSyxDQUFDLEVBQUUsT0FBTyxHQUFHLFFBQVEsRUFBRSxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUF5QnRCLEtBQUssT0FBTztBQUFBLGdCQUNYLEtBQUssT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQVVQLEtBQUssT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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QyxDQUFDO0FBRXpDLFFBQU1DLElBQWdCO0FBQUEsSUFDcEIsUUFBUXZCLEVBQU87QUFBQSxJQUNmLFlBQVlBLEVBQU87QUFBQSxJQUNuQixVQUFVTTtBQUFBLElBQ1YsV0FBV0U7QUFBQSxJQUNYLFFBQUFKO0FBQUE7QUFBQSxJQUVBLFNBQVM7QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxNQUNYLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxZQUFZTTtBQUFBLElBQ1osV0FBQUk7QUFBQSxJQUNBLE1BQU1GO0FBQUEsRUFDUjtBQUNBLFNBQXVCLGdCQUFBdG1CLEdBQUlnbkIsSUFBVSxFQUFFLFVBQVVwQixJQUF1QyxnQkFBQTVsQixHQUFJekIsR0FBZ0IsVUFBVSxFQUFFLE9BQU9xbkIsR0FBc0IsVUFBMEIsZ0JBQUE1bEIsR0FBSSxPQUFPLEVBQUUsSUFBSXdsQixJQUFhLFdBQVc1bUIsRUFBTSxXQUFXLFVBQVVBLEVBQU0sU0FBU3FvQixDQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBb0IsZ0JBQUFqbkIsR0FBSWduQixJQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOVQsR0FDTUQsS0FBMEIsQ0FBQ3JCLE9BQ3hCO0FBQUEsRUFDTCxRQUFRQSxFQUFPO0FBQUEsRUFDZixZQUFZQSxFQUFPLGVBQWU7QUFBQSxFQUNsQyxVQUFVQSxFQUFPO0FBQUEsRUFDakIscUJBQXFCQSxFQUFPO0FBQUEsRUFDNUIsZ0JBQWdCQSxFQUFPO0FBQUEsRUFDdkIsU0FBU0EsRUFBTztBQUNsQjsiLAogICJuYW1lcyI6IFsiY29ubmVjdFRvQ2hpbGQiLCAieiQxIiwgImNoYWxrIiwgInY0IiwgImpzeCIsICJGcmFnbWVudCIsICJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAidXNlRWZmZWN0IiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiZm4iLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJCYXNlRWxlbWVudHNTdHlsZSIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQVdYQmFuayIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiRUZURm9ybURhdGEiLCAiQkFDU0Zvcm1EYXRhIiwgIlNFUEFGb3JtRGF0YSIsICJBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlQWRkcmVzcyIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQiLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5IiwgInRvIiwgImZyb20iLCAicGFjayIsICJsIiwgIl9fYXdhaXQiLCAiX19hc3luY0dlbmVyYXRvciIsICJxIiwgImF3YWl0UmV0dXJuIiwgImEiLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJhcnJSZW1vdmUiLCAiYXJyIiwgIml0ZW0iLCAiaW5kZXgiLCAiU3Vic2NyaXB0aW9uIiwgImluaXRpYWxUZWFyZG93biIsICJlXzEiLCAiX2EiLCAiZV8yIiwgIl9iIiwgIl9wYXJlbnRhZ2UiLCAiX3BhcmVudGFnZV8xIiwgIl9fdmFsdWVzIiwgIl9wYXJlbnRhZ2VfMV8xIiwgInBhcmVudF8xIiwgImVfMV8xIiwgImluaXRpYWxGaW5hbGl6ZXIiLCAiZSIsICJfZmluYWxpemVycyIsICJfZmluYWxpemVyc18xIiwgIl9maW5hbGl6ZXJzXzFfMSIsICJmaW5hbGl6ZXIiLCAiZXhlY0ZpbmFsaXplciIsICJfX3NwcmVhZEFycmF5IiwgIl9fcmVhZCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgImRlbGVnYXRlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiX2JpbmQiLCAiYmluZCIsICJmbiIsICJ0aGlzQXJnIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImNvbnRleHRfMSIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgImkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgInokMSIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyQxIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJzYWZlV2luZG93IiwgImNvbnRleHQiLCAiYmF0Y2giLCAiYmF0Y2hQYXlsb2FkIiwgImNvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAia2V5IiwgImZpZWxkTmFtZSIsICJGaWVsZE5hbWVFbnVtIiwgImxvZ19fIiwgImVycl9fJDEiLCAiY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEiLCAicmVxdWlyZV96aXBfY29kZSIsICJyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzIiwgInJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzIiwgInBheW1lbnRfbWV0aG9kIiwgImNvbmRpdGlvbmFsRmllbGRzIiwgIkZpZWxkTmFtZSIsICJSZXF1aXJlZFN0cmluZyIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAib25WYWxpZGF0aW9uRXJyb3IiLCAiZGVmYXVsdEZpZWxkVmFsdWVzIiwgImtleXMiLCAicmVzdWx0IiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAiaXNzdWVLZXlzIiwgIlBheW1lbnRQcm9jZXNzb3IiLCAiQVdYX0xPQURJTkciLCAiQWR5ZW5FbnZpcm9ubWVudCIsICJudWxsT3JVbmRlZk9yJDEiLCAiRW52aXJvbm1lbnQiLCAiRW52aXJvbm1lbnQyIiwgIlBheUluRmFpbGVkIiwgIlBheUluRmFpbGVkMiIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIkxPT1BfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUiLCAiZ2V0QXBwbGVQYXlQcm9jZXNzb3JzIiwgImluaXRGbG93cyIsICJhcHBsZVBheUluaXRGbG93cyIsICJhcHBsZVBheUluaXRSZXN1bHRzIiwgImZsb3ciLCAiZmxvd1ZhbHVlIiwgInN0cmlwZVBSRmxvd1Jlc3VsdCIsICJjdXN0b21QYXJhbXMiLCAic3RhcnRBcHBsZVBheUZsb3ciLCAiZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyIsICJnb29nbGVQYXlJbml0Rmxvd3MiLCAiZ29vZ2xlUGF5SW5pdFJlc3VsdHMiLCAic3RhcnRHb29nbGVQYXlGbG93IiwgImluaXRSZXN1bHRzIiwgImF2YWlsYWJsZUZsb3ciLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgIkVsZW1lbnRzQ29udGV4dCIsICJjcmVhdGVDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJ1c2VDb250ZXh0IiwgIkVsZW1lbnRGcmFtZSIsICJwcm9wcyIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgInVzZVN0YXRlIiwgImlmcmFtZVJlZiIsICJ1c2VSZWYiLCAiZWxlbWVudFN0eWxlIiwgInVzZU1lbW8iLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAidXNlRWZmZWN0IiwgImpzeCIsICJ1cmwiLCAiQ2FyZEVsZW1lbnQiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkNhcmRDdmNFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50IiwgImdvIiwgIndvIiwgInZvIiwgInIiLCAibiIsICJhIiwgIm8iLCAicyIsICJibyIsICJBIiwgIkUiLCAicCIsICJXciIsICJaciIsICJLciIsICJRciIsICJnZSIsICJFbyIsICJSdCIsICJQbyIsICJOdCIsICJjZSIsICJTbyIsICJDbyIsICJrbyIsICJBbyIsICJJbyIsICJUbyIsICJSbyIsICJObyIsICJGbyIsICJNbyIsICJMbyIsICJEbyIsICIkZSIsICJ4byIsICJPbyIsICJVbyIsICJqbyIsICIkbyIsICJHbyIsICJWbyIsICJpdCIsICJxbyIsICJ6byIsICJIbyIsICJUIiwgIlhyIiwgIkJvIiwgIllvIiwgImVuIiwgIkpvIiwgIldvIiwgIlpvIiwgIktvIiwgIlFvIiwgIlhvIiwgImVhIiwgInRhIiwgInJhIiwgIm5hIiwgIlAiLCAib2EiLCAidG4iLCAicm4iLCAiYWEiLCAiaWEiLCAiSGUiLCAic2EiLCAiY2EiLCAibm4iLCAibGEiLCAidWEiLCAiZGEiLCAidnIiLCAib24iLCAiYnIiLCAiYW4iLCAicGEiLCAiUHQiLCAic24iLCAibWEiLCAiZmEiLCAieWEiLCAiY24iLCAiaGEiLCAibG4iLCAiZ2EiLCAid2EiLCAidmEiLCAiYmEiLCAiRWEiLCAiUGEiLCAiU2EiLCAiQ2EiLCAia2EiLCAiQWEiLCAiSnQiLCAiSWEiLCAiVGEiLCAiUmEiLCAiZWUiLCAiTmEiLCAiRmEiLCAidW4iLCAiTWEiLCAiTGEiLCAiQiIsICJnIiwgIk1pIiwgImwiLCAiRm4iLCAidmUiLCAiSSIsICJjaGFsayIsICJXdCIsICJrZSIsICJEYSIsICJtIiwgImMiLCAiZG4iLCAiR2UiLCAiU3QiLCAiQ3QiLCAiT2UiLCAieGEiLCAiZiIsICJ5IiwgImgiLCAidiIsICJTIiwgIl8iLCAiT2EiLCAiViIsICJGdCIsICIkdCIsICJrdCIsICJwdCIsICJFciIsICJwbiIsICJfbiIsICJtbiIsICJ5biIsICJQciIsICJ2dCIsICJ0ciIsICJHYSIsICJadCIsICJVYSIsICJHdCIsICJqYSIsICJ5dCIsICIkYSIsICJyciIsICJWYSIsICJxYSIsICJ3ZSIsICJIYSIsICJTciIsICJ6YSIsICJCYSIsICJZYSIsICJKYSIsICJXYSIsICJaYSIsICJobiIsICJDciIsICJLYSIsICJRYSIsICJrciIsICJYYSIsICJBciIsICJlaSIsICJ0aSIsICJyaSIsICJuaSIsICJvaSIsICJhaSIsICJpaSIsICJzaSIsICJjaSIsICJsaSIsICJ1aSIsICJkaSIsICJwaSIsICJtaSIsICJmaSIsICJnbiIsICJ5aSIsICJoaSIsICJnaSIsICJ3aSIsICJ2aSIsICJiaSIsICJFaSIsICJQaSIsICJTaSIsICJDaSIsICJraSIsICJ3IiwgImIiLCAibnQiLCAiX3QiLCAiSXIiLCAiQWkiLCAiSWkiLCAiVnQiLCAid24iLCAiTXQiLCAiJCIsICJLdCIsICJUciIsICJUaSIsICJSaSIsICJOaSIsICJodCIsICJGaSIsICJuciIsICJ2biIsICJibiIsICJ0IiwgIkF0IiwgIkxpIiwgIkVuIiwgIkRpIiwgInhpIiwgIk9pIiwgIlVpIiwgImppIiwgIkx0IiwgIlJyIiwgIkR0IiwgIiRpIiwgIkdpIiwgIlZpIiwgInFpIiwgInppIiwgIkhpIiwgIk5lIiwgIk5yIiwgIkJpIiwgInUiLCAiZCIsICJZaSIsICJKaSIsICJzdCIsICJjdCIsICJvciIsICJsdCIsICJhciIsICJXaSIsICJaaSIsICJLaSIsICJaZSIsICJYIiwgIlFpIiwgIlhpIiwgImVzIiwgInRzIiwgIkl0IiwgInJzIiwgIm5zIiwgIm9zIiwgImFzIiwgImlzIiwgInNzIiwgImNzIiwgImxzIiwgInF0IiwgInVzIiwgImlyIiwgIlF0IiwgIlBuIiwgIlNuIiwgImRzIiwgIm90IiwgInNyIiwgImNyIiwgInBzIiwgImxyIiwgIl9zIiwgIm1zIiwgIkNuIiwgImZzIiwgInlzIiwgImhzIiwgImdzIiwgImtuIiwgIndzIiwgInp0IiwgIkFuIiwgInZzIiwgImJzIiwgIkVzIiwgIlBzIiwgIlNzIiwgIkZyIiwgInV0IiwgIkNlIiwgIlVlIiwgIkh0IiwgIkNzIiwgIlZlIiwgImtzIiwgImd0IiwgIkluIiwgIlkiLCAiSXMiLCAiQXMiLCAiVHMiLCAiTSIsICJvZSIsICJUbiIsICJScyIsICJPIiwgIk5zIiwgIkZzIiwgIk1zIiwgImJlIiwgIlJuIiwgIk1yIiwgIkxzIiwgInVyIiwgIk5uIiwgIkRzIiwgImNvbm5lY3RUb0NoaWxkIiwgInh0IiwgInhzIiwgIk9zIiwgIlVzIiwgIk1uIiwgIkxuIiwgImF0IiwgImpzIiwgIkRuIiwgIkxyIiwgIkZlIiwgIlhlIiwgIiRzIiwgIkdzIiwgIlZzIiwgIkhzIiwgInFzIiwgInpzIiwgIkJzIiwgInhuIiwgIk9uIiwgIllzIiwgIkpzIiwgImoiLCAiV3MiLCAiWnMiLCAiSCIsICJRIiwgIk90IiwgIktzIiwgIlFzIiwgIlV0IiwgIlVuIiwgImp0IiwgImRyIiwgImpuIiwgIkVlIiwgIiRuIiwgIlhzIiwgIkduIiwgImxlIiwgImVjIiwgInRjIiwgInJjIiwgIm5jIiwgIm9jIiwgImFjIiwgInEiLCAiVm4iLCAidXUiLCAicW4iLCAibXQiLCAieiIsICJwciIsICJ1ZSIsICJVIiwgInpuIiwgIkJlIiwgIl9yIiwgIkJ0IiwgIm1yIiwgIlllIiwgIkplIiwgImZyIiwgIlBlIiwgImljIiwgInNjIiwgIkMiLCAiRCIsICJrIiwgIktlIiwgImNjIiwgImxjIiwgIlNlIiwgInVjIiwgImRjIiwgInBjIiwgInlyIiwgIm1jIiwgIkhuIiwgImZjIiwgIkJuIiwgIlluIiwgIkpuIiwgImhyIiwgImdyIiwgInljIiwgImhjIiwgIndyIiwgImdjIiwgIndjIiwgInFlIiwgImR0IiwgInZjIiwgIlduIiwgImJjIiwgIkVjIiwgIkRyIiwgIlBjIiwgIlNjIiwgIkNjIiwgIlpuIiwgIktuIiwgIlFuIiwgIlhuIiwgImtjIiwgIkFjIiwgIkljIiwgImhvIiwgImV0IiwgImVvIiwgIlRjIiwgIk4iLCAiUmMiLCAic2UiLCAiRGUiLCAiTmMiLCAiRmMiLCAiSiIsICJMIiwgImRlIiwgIkFlIiwgIlciLCAiaGUiLCAiTGUiLCAiV2UiLCAiUWUiLCAiTWMiLCAiTGMiLCAiYnQiLCAiRGMiLCAieGMiLCAiT2MiLCAidHQiLCAidG8iLCAiVWMiLCAiamMiLCAibmUiLCAieGUiLCAiJGMiLCAiR2MiLCAidGUiLCAicm8iLCAibm8iLCAiVmMiLCAicWMiLCAiRXQiLCAib28iLCAiemMiLCAiSGMiLCAiUmUiLCAicnQiLCAiQmMiLCAiWWMiLCAiSmMiLCAiYW8iLCAiV2MiLCAiWmMiLCAiaW8iLCAiWHQiLCAiS2MiLCAiUWMiLCAid3QiLCAiWGMiLCAiZWwiLCAidGwiLCAicmwiLCAiamUiLCAic28iLCAiY28iLCAibmwiLCAib2wiLCAiYWwiLCAiaWwiLCAibG8iLCAieHIiLCAic2wiLCAidW8iLCAiY2wiLCAibGwiLCAiTWUiLCAiVHQiLCAidWwiLCAicG8iLCAiZGwiLCAibWwiLCAicGwiLCAiX2wiLCAibW8iLCAiX28iLCAiRiIsICJPciIsICJmbCIsICJ5bCIsICJobCIsICJnbCIsICJaIiwgIndsIiwgInZsIiwgImJsIiwgIkllIiwgIkVsIiwgImZvIiwgIlBsIiwgIlNsIiwgInBlIiwgIlVyIiwgInlvIiwgIkNsIiwgImtsIiwgImpyIiwgIkciLCAiQWwiLCAiSWwiLCAiVGwiLCAiUmwiLCAiTWwiLCAiTmwiLCAiRmwiLCAiSyIsICJMbCIsICJEbCIsICJ4bCIsICJtZSIsICJPbCIsICJqbCIsICJVbCIsICIkbCIsICJHbCIsICJWbCIsICJhZSIsICJxbCIsICJ6bCIsICJIbCIsICJpZSIsICIkciIsICJmZSIsICJlciIsICJCbCIsICJZbCIsICJKbCIsICJSIiwgIlRlIiwgIkdyIiwgIldsIiwgIlZyIiwgIlpsIiwgIktsIiwgIll0IiwgIlFsIiwgIlhsIiwgImV1IiwgInFyIiwgInR1IiwgInJ1IiwgInpyIiwgIm51IiwgIm91IiwgImF1IiwgIkhyIiwgIkJyIiwgIl9lIiwgInJlIiwgInllIiwgIllyIiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJmb3JtQ2FsbGJhY2tzIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAiYXBwbGVQYXlSZXN1bHQiLCAic2V0QXBwbGVQYXlSZXN1bHQiLCAiZ29vZ2xlUGF5UmVzdWx0IiwgInNldEdvb2dsZVBheVJlc3VsdCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImFwcGxlUGF5UmVzdWx0MiIsICJnb29nbGVQYXlSZXN1bHQyIiwgImZvcm0iLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAiRnJhZ21lbnQiLCAiY2hpbGRyZW5Qcm9wcyJdCn0K
|
|
9446
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA1fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCB7IHogYXMgeiQxIH0gZnJvbSAnem9kJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsganN4LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8sIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyQxKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBQbGVhc2UgZmlsbCBpbiB0aGlzIGZpZWxkYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiTElORTFcIl0gPSBcImxpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJMSU5FMlwiXSA9IFwibGluZTJcIjtcbiAgRmllbGROYW1lMltcIkxJTkUzXCJdID0gXCJsaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfTElORTFcIl0gPSBcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19MSU5FMlwiXSA9IFwic2hpcHBpbmdBZGRyZXNzTGluZTJcIjtcbiAgRmllbGROYW1lMltcIlNISVBQSU5HX0xJTkUzXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfQ0lUWVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzQ2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU0hJUFBJTkdfU1RBVEVcIl0gPSBcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19DT1VOVFJZXCJdID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJTSElQUElOR19aSVBfQ09ERVwiXSA9IFwic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXCJdID0gXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0RFX0JSSURHRVwiXSA9IFwiY2RlLWJyaWRnZVwiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEuZW51bShbXCJjYXJkXCIsIFwiY2FyZC1udW1iZXJcIiwgXCJjYXJkLWV4cGlyeVwiLCBcImNhcmQtY3ZjXCIsIFwiY2RlLWJyaWRnZVwiXSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgQmFzZUVsZW1lbnRzU3R5bGUgPSB6JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nLFxuICBwbGFjZWhvbGRlclN0eWxlOiB6JDEub2JqZWN0KHtcbiAgICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gICAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHokMS5vYmplY3Qoe1xuICAgIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICAgIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gICAgY3ZjOiBPcHRpb25hbFN0cmluZ1xuICB9KS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIFRoZSBjYXJkIGljb24gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjYXJkIG51bWJlciBpbnB1dCBmaWVsZFxuICAgKiBJdCB3b24ndCBhZmZlY3QgYWZ0ZXIgdGhlIGljb24gY2hhbmdlZCB0byBjYXJkIGJyYW5kIGFmdGVyIHRoZSB1c2VyIGlucHV0IHRoZSBjYXJkIG51bWJlclxuICAgKi9cbiAgaWNvbjogeiQxLm9iamVjdCh7XG4gICAgY29sb3I6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuQmFzZUVsZW1lbnRzU3R5bGUuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBPcHRpb25hbFN0cmluZyxcbiAgcGxhY2Vob2xkZXI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbkJhc2VFbGVtZW50c1N0eWxlLmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogT3B0aW9uYWxTdHJpbmcsXG4gIHBsYWNlaG9sZGVyOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHokMS5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZy5lbWFpbCh7IG1lc3NhZ2U6IFwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiIH0pLFxuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsaW5lMVwiIC8qIExJTkUxICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxpbmUyXCIgLyogTElORTIgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGluZTNcIiAvKiBMSU5FMyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJpc1NoaXBwaW5nU2FtZUFzQmlsbGluZ1wiIC8qIElTX1NISVBQSU5HX1NBTUVfQVNfQklMTElORyAqL106IHokMS5jdXN0b20oKS5vcHRpb25hbCgpLmRlZmF1bHQodHJ1ZSksXG4gIFtcInNoaXBwaW5nQWRkcmVzc0xpbmUxXCIgLyogU0hJUFBJTkdfTElORTEgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTJcIiAvKiBTSElQUElOR19MSU5FMiAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiIC8qIFNISVBQSU5HX0xJTkUzICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiAvKiBTSElQUElOR19DSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1N0YXRlXCIgLyogU0hJUFBJTkdfU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzQ291bnRyeVwiIC8qIFNISVBQSU5HX0NPVU5UUlkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic2hpcHBpbmdBZGRyZXNzWmlwQ29kZVwiIC8qIFNISVBQSU5HX1pJUF9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcImxpbmUxXCIgLyogTElORTEgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBbXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIgLyogU0hJUFBJTkdfQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NaaXBDb2RlXCIgLyogU0hJUFBJTkdfWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgW1wic2hpcHBpbmdBZGRyZXNzTGluZTFcIiAvKiBTSElQUElOR19MSU5FMSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NDaXR5XCIgLyogU0hJUFBJTkdfQ0lUWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJzaGlwcGluZ0FkZHJlc3NTdGF0ZVwiIC8qIFNISVBQSU5HX1NUQVRFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc0NvdW50cnlcIiAvKiBTSElQUElOR19DT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiAvKiBTSElQUElOR19aSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZyxcbiAgcGF5bWVudFJvdXRlSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRNZXRob2RJZDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9tZXRob2RfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFXWEJhbmsgPSB6JDEub2JqZWN0KHtcbiAgYmFua19uYW1lOiB6JDEuc3RyaW5nKCksXG4gIGRpc3BsYXlfbmFtZTogeiQxLnN0cmluZygpLFxuICByZXNvdXJjZXM6IHokMS5vYmplY3Qoe1xuICAgIGxvZ29fdXJsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgYXZhaWxhYmxlX2JhbmtzOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KEFXWEJhbmspKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSksXG4gIHBvc3RfY2hlY2tvdXRfcmVkaXJlY3RfdG86IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpXG59KTtcbmNvbnN0IEVGVEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uTnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIHRyYW5zaXROdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBFRlRGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEJBQ1NGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBzb3J0Q29kZTogeiQxLnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IEJBQ1NGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFNFUEFGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFNFUEFGb3JtRGF0YS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEFDSE1pY3JvRGVwb3NpdEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGFjY291bnRfbnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFiYV9yb3V0aW5nX251bWJlcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEVGVE1pY3JvRGVwb3NpdEZvcm1EYXRhID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uX251bWJlcjogeiQxLnN0cmluZygpLFxuICB0cmFuc2l0X251bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEJBQ1NNaWNyb0RlcG9zaXRGb3JtRGF0YSA9IHokMS5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpLFxuICBzb3J0X2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBTRVBBTWljcm9EZXBvc2l0Rm9ybURhdGEgPSB6JDEub2JqZWN0KHtcbiAgaWJhbjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogeiQxLnVuaW9uKFtcbiAgICBBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSxcbiAgICBCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEsXG4gICAgU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhLFxuICAgIHokMS5vYmplY3QoeyBlcnJvcjogeiQxLnN0cmluZygpIH0pXG4gIF0pLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xueiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShJbnZvaWNlTWluaW1hbCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPcih6JDEuYXJyYXkoeiQxLnN0cmluZygpKSksXG4gIHBheW1lbnRfbWV0aG9kX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogeiQxLmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKSxcbiAgcmV0dXJuX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBzdWNjZXNzX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IENvbXBsZXRlQWRkcmVzcyA9IHokMS5vYmplY3Qoe1xuICBsaW5lMTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGxpbmUyOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTM6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjaXR5OiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIHppcF9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogQ29tcGxldGVBZGRyZXNzLm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfcm91dGVfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcyxcbiAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IENvbXBsZXRlQWRkcmVzcy5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFByaWNlUXR5ID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQ2FydEluZm8gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgdXNlX3VuaWZpZWRfY2NfZmxvdzogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGV2ZW50czogeiQxLmFycmF5KFxuICAgIHokMS5vYmplY3Qoe1xuICAgICAgZXZlbnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnokMS5hbnkoKS5vcHRpb25hbCgpO1xueiQxLm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe30pO1xueiQxLm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6JDEuc3RyaW5nKCksXG4gIF91bmlmaWVkX2NjX3BjY3NfaWQ6IHokMS5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoeiQxLmFueSgpKTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5hcnJheShab2RGaWVsZEVycm9yKTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbiwgZXJyb3JMb2dnZXIpID0+IHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7Y2hhbGsuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5mdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xudmFyIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcblxudmFyIHRpbWVvdXRQcm92aWRlciA9IHtcbiAgICBzZXRUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuXG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuXG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyKSk7XG5cbnZhciBhc3luY1NjaGVkdWxlciA9IG5ldyBBc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbik7XG5cbnZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cblxuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGluaXQpO1xufVxuXG52YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbnokMS5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cbmNvbnN0IGdldFdpbmRvd1NhZmUgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICByZXR1cm4gd2luZG93O1xufTtcblxuY29uc3QgbWV0cmljc1B1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG5jb25zdCBNRVRSSUNTX1FVRVVFX0tFWSA9IFwib3BfbWV0cmljc19xdWV1ZVwiO1xuY29uc3QgTUFYX1JFVFJZX0FUVEVNUFRTID0gMztcbmNvbnN0IEJBVENIX1NJWkUgPSAzO1xuY29uc3QgQkFUQ0hfSU5URVJWQUxfTVMgPSAxZTM7XG5jb25zdCB7IGxvZ19fOiBsb2dfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBNZXRyaWNzUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwO1xuICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18kMShcIk5ldHdvcmsgb2ZmbGluZSwgbWV0cmljcyB3aWxsIGJlIHF1ZXVlZFwiKTtcbiAgICAgIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfTtcbiAgICB0aGlzLm9ubGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18kMShcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIik7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIH07XG4gICAgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpO1xuICAgIGdldFdpbmRvd1NhZmUoKT8uYWRkRXZlbnRMaXN0ZW5lcihcIm9ubGluZVwiLCB0aGlzLm9ubGluZUxpc3RlbmVyKTtcbiAgfVxuICBhZGRFdmVudChldmVudE5hbWUsIHByb3BlcnRpZXMsIGNvbnRleHRQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudE5hbWUsXG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgY29udGV4dFByb3BlcnRpZXM6IGNvbnRleHRQcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IGV2ZW50LnRpbWVzdGFtcDtcbiAgICB0aGlzLnF1ZXVlLnB1c2goZXZlbnQpO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgdGhpcy5zY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG4gIGxvYWRRdWV1ZUZyb21TdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdG9yZWRRdWV1ZSA9IGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlPy5nZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZKTtcbiAgICAgIGlmIChzdG9yZWRRdWV1ZSkge1xuICAgICAgICB0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShzdG9yZWRRdWV1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LmxvY2FsU3RvcmFnZS5zZXRJdGVtKE1FVFJJQ1NfUVVFVUVfS0VZLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3Qgc2FmZVdpbmRvdyA9IGdldFdpbmRvd1NhZmUoKTtcbiAgICBpZiAoc2FmZVdpbmRvdyAmJiBuYXZpZ2F0b3Iub25MaW5lICYmICF0aGlzLnByb2Nlc3NpbmdRdWV1ZSAmJiB0aGlzLnF1ZXVlLmxlbmd0aCA+IDAgJiYgIXRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IHNhZmVXaW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgIH0sIEJBVENIX0lOVEVSVkFMX01TKTtcbiAgICB9XG4gIH1cbiAgY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCkge1xuICAgIGlmICh0aGlzLmJhdGNoVGltZW91dCkge1xuICAgICAgZ2V0V2luZG93U2FmZSgpPy5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpO1xuICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICBpZiAoIW5hdmlnYXRvci5vbkxpbmUgfHwgdGhpcy5wcm9jZXNzaW5nUXVldWUgfHwgdGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSB0cnVlO1xuICAgIHRoaXMuc2VuZEJhdGNoKCkuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgc2VuZEJhdGNoKCkge1xuICAgIGlmICh0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRleHQgPSBtZXRyaWNzUHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKHZvaWQgMCk7XG4gICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICBsb2dfXyQxKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZCksXG4gICAgICAgIGtlZXBhbGl2ZTogdHJ1ZVxuICAgICAgICAvLyBUbyBzZW5kIGV2ZW50cyBldmVuIGlmIHRoZSBwYWdlIGlzIHVubG9hZGVkXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShiYXRjaC5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNhdmVRdWV1ZVRvU3RvcmFnZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChiYXRjaCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ19fJDEoXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxubmV3IE1ldHJpY3NRdWV1ZSgpO1xuXG56JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgeyBsb2dfXywgZXJyX186IGVycl9fJDEgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiY29tbW9uLWNjXCIpO1xuY29uc3QgY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEgPSAoe1xuICByZXF1aXJlX3ppcF9jb2RlLFxuICByZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzLFxuICByZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyxcbiAgcGF5bWVudF9tZXRob2Rcbn0pID0+IHtcbiAgY29uc3QgY29uZGl0aW9uYWxGaWVsZHMgPSB7fTtcbiAgaWYgKHBheW1lbnRfbWV0aG9kID09PSBcImFjaFwiKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0geiQxLnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0geiQxLnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pO1xuICB9XG4gIGlmIChyZXF1aXJlX3ppcF9jb2RlKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IFJlcXVpcmVkU3RyaW5nO1xuICB9XG4gIGlmIChyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLkxJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzKSB7XG4gICAgY29uZGl0aW9uYWxGaWVsZHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUxXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19DSVRZXSA9IFJlcXVpcmVkU3RyaW5nO1xuICAgIGNvbmRpdGlvbmFsRmllbGRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBSZXF1aXJlZFN0cmluZztcbiAgICBjb25kaXRpb25hbEZpZWxkc1tGaWVsZE5hbWUuU0hJUFBJTkdfWklQX0NPREVdID0gUmVxdWlyZWRTdHJpbmc7XG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKGNvbmRpdGlvbmFsRmllbGRzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUmVxdWlyZWRGb3JtRmllbGRzO1xuICB9XG4gIHJldHVybiBSZXF1aXJlZEZvcm1GaWVsZHMuZXh0ZW5kKGNvbmRpdGlvbmFsRmllbGRzKTtcbn07XG5jb25zdCB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHMgPSAobm9uQ2RlRm9ybUlucHV0cywgb25WYWxpZGF0aW9uRXJyb3IsIGRlZmF1bHRGaWVsZFZhbHVlcyA9IHt9KSA9PiB7XG4gIGlmIChkZWZhdWx0RmllbGRWYWx1ZXMpIHtcbiAgICBsb2dfXyhgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkoZGVmYXVsdEZpZWxkVmFsdWVzKX1gKTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGVmYXVsdEZpZWxkVmFsdWVzKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRGaWVsZFZhbHVlc1trZXldO1xuICAgICAgaWYgKCFub25DZGVGb3JtSW5wdXRzW2tleV0pIHtcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0c1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10gPSAhIW5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR107XG4gIGlmIChub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddKSB7XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfTElORTFdID0gbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuTElORTFdO1xuICAgIG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLlNISVBQSU5HX0xJTkUyXSA9IG5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxJTkUyXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19MSU5FM10gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5MSU5FM107XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ0lUWV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DSVRZXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19TVEFURV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TVEFURV07XG4gICAgbm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuU0hJUFBJTkdfQ09VTlRSWV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXTtcbiAgICBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5TSElQUElOR19aSVBfQ09ERV0gPSBub25DZGVGb3JtSW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV07XG4gIH1cbiAgY29uc3QgdmFsaWRhdGlvblNjaGVtYSA9IGNyZWF0ZUR5bmFtaWNWYWxpZGF0aW9uU2NoZW1hKGRlZmF1bHRGaWVsZFZhbHVlcyk7XG4gIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRpb25TY2hlbWEuc2FmZVBhcnNlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gcmVzdWx0LmVycm9yLmZvcm1hdCgpO1xuICAgIGNvbnN0IGlzc3VlcyA9IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZChmb3JtYXR0ZWQpO1xuICAgIGNvbnN0IGlzc3VlS2V5cyA9IE9iamVjdC5rZXlzKGlzc3Vlcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpc3N1ZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGlzc3VlS2V5c1tpXTtcbiAgICAgIGNvbnN0IGVycm9ycyA9IGlzc3Vlc1tmaWVsZE5hbWVdO1xuICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvcnMsIGZpZWxkTmFtZSk7XG4gICAgfVxuICAgIGVycl9fJDEoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBpc3N1ZXMpO1xuICAgIHRocm93IG5ldyBFcnJvcihcIkFsbW9zdCB0aGVyZSEgSnVzdCBhIGZldyB0aGluZ3MgaGlnaGxpZ2h0ZWQgYWJvdmUgdG8gZml4IGJlZm9yZSB5b3UgY2FuIHN1Ym1pdC5cIik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5kYXRhO1xufTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIiwgXCJhZHllblwiLCBcInBheXBhbFwiLCBcInBvY2t5dFwiLCBcImxvb3BcIl0pO1xuKHtcbiAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuY29uc3QgQVdYX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufTtcblxueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxuY29uc3QgQWR5ZW5FbnZpcm9ubWVudCA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKTtcbnokMS5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pO1xueiQxLm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogQWR5ZW5FbnZpcm9ubWVudCxcbiAgXCJvcC1hZHllbi1hY3Rpb25cIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFkeWVuXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgc3RlcF91cF91cmw6IHokMS5zdHJpbmcoKSxcbiAgYWNjZXNzX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGRkX3VybDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGRkX3Rva2VuOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWVyY2hhbnRfZGF0YTogeiQxLnN0cmluZygpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcblxueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogeiQxLnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogeiQxLnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnZhciBFbnZpcm9ubWVudCA9IC8qIEBfX1BVUkVfXyAqLyAoKEVudmlyb25tZW50MikgPT4ge1xuICBFbnZpcm9ubWVudDJbXCJMb2NhbFwiXSA9IFwibG9jYWxcIjtcbiAgRW52aXJvbm1lbnQyW1wiRGV2ZWxvcG1lbnRcIl0gPSBcImRldmVsb3BtZW50XCI7XG4gIEVudmlyb25tZW50MltcIlN0YWdpbmdcIl0gPSBcInN0YWdpbmdcIjtcbiAgRW52aXJvbm1lbnQyW1wiRGVtb1wiXSA9IFwiZGVtb1wiO1xuICBFbnZpcm9ubWVudDJbXCJQcm9kdWN0aW9uXCJdID0gXCJwcm9kdWN0aW9uXCI7XG4gIHJldHVybiBFbnZpcm9ubWVudDI7XG59KShFbnZpcm9ubWVudCB8fCB7fSk7XG52YXIgUGF5SW5GYWlsZWQgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJbkZhaWxlZDIpID0+IHtcbiAgUGF5SW5GYWlsZWQyW1wiTUVUSE9EX0NSRUFUSU9OX0ZBSUxFRFwiXSA9IFwibWV0aG9kQ3JlYXRpb25GYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiSU5TVUZGSUNJRU5UX0JBTEFOQ0VcIl0gPSBcImluc3VmZmljaWVudEJhbGFuY2VcIjtcbiAgUGF5SW5GYWlsZWQyW1wiSU5TVUZGSUNJRU5UX0FVVEhPUklaQVRJT05cIl0gPSBcImluc3VmZmljaWVudEF1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5GYWlsZWQyW1wiU0lHTkVEX01FU1NBR0VfUkVRVUlSRURcIl0gPSBcInNpZ25lZE1lc3NhZ2VSZXF1aXJlZFwiO1xuICBQYXlJbkZhaWxlZDJbXCJDVVNUT01FUl9DUkVBVElPTl9GQUlMRURcIl0gPSBcImN1c3RvbWVyQ3JlYXRpb25GYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiUEFZTUVOVF9GQUlMRURcIl0gPSBcInBheW1lbnRGYWlsZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiVFJBTlNBQ1RJT05fRkFJTEVEXCJdID0gXCJ0cmFuc2FjdGlvbkZhaWxlZFwiO1xuICByZXR1cm4gUGF5SW5GYWlsZWQyO1xufSkoUGF5SW5GYWlsZWQgfHwge30pO1xudmFyIFBheUluU3RhdGUgPSAvKiBAX19QVVJFX18gKi8gKChQYXlJblN0YXRlMikgPT4ge1xuICBQYXlJblN0YXRlMltcIklETEVcIl0gPSBcImlkbGVcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0JBTEFOQ0VcIl0gPSBcImNvbmZpcm1pbmdCYWxhbmNlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJjb25maXJtaW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlVQREFUSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcInVwZGF0aW5nQXV0aG9yaXphdGlvblwiO1xuICBQYXlJblN0YXRlMltcIlNJR05JTkdfTUVTU0FHRVwiXSA9IFwic2lnbmluZ01lc3NhZ2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDUkVBVElOR19DVVNUT01FUlwiXSA9IFwiY3JlYXRpbmdDdXN0b21lclwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRfTUVUSE9EXCJdID0gXCJjcmVhdGluZ1BheW1lbnRNZXRob2RcIjtcbiAgUGF5SW5TdGF0ZTJbXCJQUk9DRVNTSU5HX1BBWU1FTlRcIl0gPSBcInByb2Nlc3NpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfUEFZTUVOVFwiXSA9IFwiY3JlYXRpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19QQVlNRU5UXCJdID0gXCJjb25maXJtaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTVBMRVRFXCJdID0gXCJjb21wbGV0ZVwiO1xuICBQYXlJblN0YXRlMltcIkFVVEhPUklaRURcIl0gPSBcImF1dGhvcml6ZWRcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbmNvbnN0IExPT1BfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIGNvbmZpZzogbnVsbCxcbiAgd2lkZ2V0OiBudWxsXG59O1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7IGNsaWVudF9pZDogeiQxLnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiY2FyZFwiXSA9IFwiY2FyZFwiO1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFwcGxlUGF5XCJdID0gXCJhcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJnb29nbGVQYXlcIl0gPSBcImdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICBTdWJtaXRNZXRob2RzMltcInBheXBhbFwiXSA9IFwicGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWR5ZW5Hb29nbGVQYXlcIl0gPSBcImFkeWVuLWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhZHllbkFwcGxlUGF5XCJdID0gXCJhZHllbi1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBQ0hcIl0gPSBcImFpcndhbGxleC1hY2hcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhFRlRcIl0gPSBcImFpcndhbGxleC1lZnRcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhCQUNTXCJdID0gXCJhaXJ3YWxsZXgtYmFjc1wiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleFNFUEFcIl0gPSBcImFpcndhbGxleC1zZXBhXCI7XG4gIHJldHVybiBTdWJtaXRNZXRob2RzMjtcbn0pKFN1Ym1pdE1ldGhvZHMgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oU3VibWl0TWV0aG9kcyk7XG5cbmNvbnN0IE1PQklMRV9XQUxMRVRfTE9BRElOR19TVEFURSA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHByb2Nlc3NvcnM6IFtdLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuY29uc3QgZ2V0QXBwbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBhcHBsZVBheUluaXRGbG93cyA9IFtpbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXksIGluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheSwgaW5pdEZsb3dzLmFkeWVuQXBwbGVQYXldO1xuICBjb25zdCBhcHBsZVBheUluaXRSZXN1bHRzID0gW107XG4gIGFwcGxlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKGZsb3dWYWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc3RyaXBlUFJGbG93UmVzdWx0ID0gaW5pdEZsb3dzLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgaWYgKHN0cmlwZVBSRmxvd1Jlc3VsdD8uaXNBdmFpbGFibGUpIHtcbiAgICBjb25zdCBpc0FwcGxlUGF5QXZhaWxhYmxlID0gc3RyaXBlUFJGbG93UmVzdWx0LmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheTtcbiAgICBpZiAoaXNBcHBsZVBheUF2YWlsYWJsZSkge1xuICAgICAgYXBwbGVQYXlJbml0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgICAgICAgc3RhcnRGbG93OiAoY3VzdG9tUGFyYW1zKSA9PiBzdHJpcGVQUkZsb3dSZXN1bHQuc3RhcnRGbG93KFwiYXBwbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGFwcGxlUGF5SW5pdFJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiBhcHBsZVBheUluaXRSZXN1bHRzLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHtcbiAgICAgIHJldHVybiBzdGFydEFwcGxlUGF5RmxvdyhhcHBsZVBheUluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBnZXRHb29nbGVQYXlQcm9jZXNzb3JzID0gKGluaXRGbG93cykgPT4ge1xuICBjb25zdCBnb29nbGVQYXlJbml0Rmxvd3MgPSBbaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheSwgaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgaW5pdEZsb3dzLmFkeWVuR29vZ2xlUGF5XTtcbiAgY29uc3QgZ29vZ2xlUGF5SW5pdFJlc3VsdHMgPSBbXTtcbiAgZ29vZ2xlUGF5SW5pdEZsb3dzLmZvckVhY2goKGZsb3cpID0+IHtcbiAgICBjb25zdCBmbG93VmFsdWUgPSBmbG93LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICBpZiAoZmxvd1ZhbHVlPy5pc0F2YWlsYWJsZSkge1xuICAgICAgZ29vZ2xlUGF5SW5pdFJlc3VsdHMucHVzaChmbG93VmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHN0cmlwZVBSRmxvd1Jlc3VsdCA9IGluaXRGbG93cy5zdHJpcGVQUi5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gIGlmIChzdHJpcGVQUkZsb3dSZXN1bHQ/LmlzQXZhaWxhYmxlKSB7XG4gICAgY29uc3QgaXNHb29nbGVQYXlBdmFpbGFibGUgPSBzdHJpcGVQUkZsb3dSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICBpZiAoaXNHb29nbGVQYXlBdmFpbGFibGUpIHtcbiAgICAgIGdvb2dsZVBheUluaXRSZXN1bHRzLnB1c2goe1xuICAgICAgICBpc0F2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICAgICAgICBzdGFydEZsb3c6IChjdXN0b21QYXJhbXMpID0+IHN0cmlwZVBSRmxvd1Jlc3VsdC5zdGFydEZsb3coXCJnb29nbGVfcGF5XCIsIHtcbiAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjdXN0b21QYXJhbXM/Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHByb2Nlc3NvcnM6IGdvb2dsZVBheUluaXRSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yKSxcbiAgICBpc0F2YWlsYWJsZTogZ29vZ2xlUGF5SW5pdFJlc3VsdHMubGVuZ3RoID4gMCxcbiAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgIHN0YXJ0RmxvdzogKGN1c3RvbVBhcmFtcykgPT4ge1xuICAgICAgcmV0dXJuIHN0YXJ0R29vZ2xlUGF5Rmxvdyhnb29nbGVQYXlJbml0UmVzdWx0cywgY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBcHBsZVBheUZsb3cgPSAoaW5pdFJlc3VsdHMsIGN1c3RvbVBhcmFtcykgPT4ge1xuICBpZiAoY3VzdG9tUGFyYW1zPy5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBmbG93ID0gaW5pdFJlc3VsdHMuZmluZCgocmVzdWx0KSA9PiByZXN1bHQucHJvY2Vzc29yID09PSBjdXN0b21QYXJhbXMucHJvY2Vzc29yKTtcbiAgICBpZiAoZmxvdz8uaXNBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBmbG93LnN0YXJ0RmxvdyhjdXN0b21QYXJhbXMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBBcHBsZSBQYXkgcHJvY2Vzc29yICR7Y3VzdG9tUGFyYW1zLnByb2Nlc3Nvcn0gaXMgbm90IGF2YWlsYWJsZWApO1xuICB9XG4gIGNvbnN0IGF2YWlsYWJsZUZsb3cgPSBpbml0UmVzdWx0cy5maW5kKChyZXN1bHQpID0+IHJlc3VsdC5pc0F2YWlsYWJsZSk7XG4gIGlmIChhdmFpbGFibGVGbG93KSB7XG4gICAgcmV0dXJuIGF2YWlsYWJsZUZsb3cuc3RhcnRGbG93KGN1c3RvbVBhcmFtcyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuY29uc3Qgc3RhcnRHb29nbGVQYXlGbG93ID0gKGluaXRSZXN1bHRzLCBjdXN0b21QYXJhbXMpID0+IHtcbiAgaWYgKGN1c3RvbVBhcmFtcz8ucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgZmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LnByb2Nlc3NvciA9PT0gY3VzdG9tUGFyYW1zLnByb2Nlc3Nvcik7XG4gICAgaWYgKGZsb3c/LmlzQXZhaWxhYmxlKSB7XG4gICAgICByZXR1cm4gZmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgR29vZ2xlIFBheSBwcm9jZXNzb3IgJHtjdXN0b21QYXJhbXMucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgYXZhaWxhYmxlRmxvdyA9IGluaXRSZXN1bHRzLmZpbmQoKHJlc3VsdCkgPT4gcmVzdWx0LmlzQXZhaWxhYmxlKTtcbiAgaWYgKGF2YWlsYWJsZUZsb3cpIHtcbiAgICByZXR1cm4gYXZhaWxhYmxlRmxvdy5zdGFydEZsb3coY3VzdG9tUGFyYW1zKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhdmFpbGFibGUgR29vZ2xlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59O1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvYCwgYmFzZVVybCk7XG4gIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZztcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiB1cmwudG9TdHJpbmcoKSxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmZ1bmN0aW9uIGdvKGUsIHQpIHtcbiAgdmFyIHIgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHIgPyByKGUsIHQpIDogZS5fX3Byb3RvX18gPSB0O1xufVxuZnVuY3Rpb24gd28oZSwgdCkge1xuICB0ID09PSB2b2lkIDAgJiYgKHQgPSBlLmNvbnN0cnVjdG9yKTtcbiAgdmFyIHIgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgciAmJiByKGUsIHQpO1xufVxudmFyIHZvID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICByZXR1cm4gZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGEsIG8pIHtcbiAgICAgIGEuX19wcm90b19fID0gbztcbiAgICB9IHx8IGZ1bmN0aW9uKGEsIG8pIHtcbiAgICAgIGZvciAodmFyIHMgaW4gbylcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHMpICYmIChhW3NdID0gb1tzXSk7XG4gICAgfSwgZShyLCBuKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKHQsIHIpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgICB9XG4gICAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChuLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0oKSwgYm8gPSBmdW5jdGlvbihlKSB7XG4gIHZvKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IHRoaXMuY29uc3RydWN0b3IsIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIGdvKG8sIGEucHJvdG90eXBlKSwgd28obyksIG87XG4gIH1cbiAgcmV0dXJuIHQ7XG59KEVycm9yKTtcbmNvbnN0IEEgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiUGxlYXNlIGZpbGwgaW4gdGhpcyBmaWVsZFwiIH0pLCBFID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBEID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xudmFyIHAgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgZS5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIGUuUEhPTkUgPSBcInBob25lXCIsIGUuRU1BSUwgPSBcImVtYWlsXCIsIGUuTElORTEgPSBcImxpbmUxXCIsIGUuTElORTIgPSBcImxpbmUyXCIsIGUuTElORTMgPSBcImxpbmUzXCIsIGUuQ0lUWSA9IFwiY2l0eVwiLCBlLlNUQVRFID0gXCJzdGF0ZVwiLCBlLkNPVU5UUlkgPSBcImNvdW50cnlcIiwgZS5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCBlLlNISVBQSU5HX0xJTkUxID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMVwiLCBlLlNISVBQSU5HX0xJTkUyID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lMlwiLCBlLlNISVBQSU5HX0xJTkUzID0gXCJzaGlwcGluZ0FkZHJlc3NMaW5lM1wiLCBlLlNISVBQSU5HX0NJVFkgPSBcInNoaXBwaW5nQWRkcmVzc0NpdHlcIiwgZS5TSElQUElOR19TVEFURSA9IFwic2hpcHBpbmdBZGRyZXNzU3RhdGVcIiwgZS5TSElQUElOR19DT1VOVFJZID0gXCJzaGlwcGluZ0FkZHJlc3NDb3VudHJ5XCIsIGUuU0hJUFBJTkdfWklQX0NPREUgPSBcInNoaXBwaW5nQWRkcmVzc1ppcENvZGVcIiwgZS5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkcgPSBcImlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nXCIsIGUuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgZSkpKHAgfHwge30pO1xuY29uc3QgV3IgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciBaciA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCBlKSkoWnIgfHwge30pO1xuY29uc3QgS3IgPSB6JDEubmF0aXZlRW51bShaciksIFFyID0geiQxLnVuaW9uKFtXciwgS3JdKTtcbnZhciBnZSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkNBUkQgPSBcImNhcmRcIiwgZS5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgZS5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgZS5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgZS5DREVfQlJJREdFID0gXCJjZGUtYnJpZGdlXCIsIGUpKShnZSB8fCB7fSk7XG5jb25zdCBFbyA9IHokMS5lbnVtKFtcImNhcmRcIiwgXCJjYXJkLW51bWJlclwiLCBcImNhcmQtZXhwaXJ5XCIsIFwiY2FyZC1jdmNcIiwgXCJjZGUtYnJpZGdlXCJdKSwgUnQgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IEQoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IEQoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgUG8gPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSksIE50ID0geiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogRSxcbiAgY29sb3I6IEUsXG4gIGZvbnRGYW1pbHk6IEUsXG4gIGZvbnRTaXplOiBFLFxuICBmb250V2VpZ2h0OiBFLFxuICBtYXJnaW46IEUsXG4gIHBhZGRpbmc6IEUsXG4gIGxldHRlclNwYWNpbmc6IEUsXG4gIGxpbmVIZWlnaHQ6IEUsXG4gIGhpZGVJY29uOiBFLFxuICBwbGFjZWhvbGRlclN0eWxlOiB6JDEub2JqZWN0KHtcbiAgICBjb2xvcjogRSxcbiAgICBmb250U2l6ZTogRSxcbiAgICBmb250V2VpZ2h0OiBFLFxuICAgIGZvbnRGYW1pbHk6IEUsXG4gICAgbGV0dGVyU3BhY2luZzogRSxcbiAgICBsaW5lSGVpZ2h0OiBFXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuTnQuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBFLFxuICBwbGFjZWhvbGRlcjogeiQxLm9iamVjdCh7XG4gICAgY2FyZE51bWJlcjogRSxcbiAgICBleHBpcnk6IEUsXG4gICAgY3ZjOiBFXG4gIH0pLm9wdGlvbmFsKClcbn0pO1xuTnQuZXh0ZW5kKHtcbiAgZGlzYWJsZUF1dG9GaWxsOiBFLFxuICBwbGFjZWhvbGRlcjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKlxuICAgKiBUaGUgY2FyZCBpY29uIGF0IHRoZSBzdGFydCBvZiB0aGUgY2FyZCBudW1iZXIgaW5wdXQgZmllbGRcbiAgICogSXQgd29uJ3QgYWZmZWN0IGFmdGVyIHRoZSBpY29uIGNoYW5nZWQgdG8gY2FyZCBicmFuZCBhZnRlciB0aGUgdXNlciBpbnB1dCB0aGUgY2FyZCBudW1iZXJcbiAgICovXG4gIGljb246IHokMS5vYmplY3Qoe1xuICAgIGNvbG9yOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxuICB9KS5vcHRpb25hbCgpXG59KTtcbk50LmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogRSxcbiAgcGxhY2Vob2xkZXI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbk50LmV4dGVuZCh7XG4gIGRpc2FibGVBdXRvRmlsbDogRSxcbiAgcGxhY2Vob2xkZXI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IGNlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIFNvID0gY2UuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIENvID0geiQxLm9iamVjdCh7IHR5cGU6IFNvIH0pLCBrbyA9IGNlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgQW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZToga28sXG4gIGVsZW1lbnRUeXBlOiBLcixcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpLFxuICBvYmZ1c2NhdGVkVmFsdWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgSW8gPSBjZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgVG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW8sXG4gIG1lc3NhZ2U6IEEsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBSbyA9IGNlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIE5vID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFJvLFxuICBlbGVtZW50VHlwZTogUXIsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBGbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChjZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogQVxufSksIE1vID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGNlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBBLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBFLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoUnQpXG59KSwgTG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoY2UuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBEbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChjZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksICRlID0geiQxLm9iamVjdCh7XG4gIGVtYWlsOiBBLmVtYWlsKHsgbWVzc2FnZTogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzXCIgfSksXG4gIGZpcnN0TmFtZTogQSxcbiAgbGFzdE5hbWU6IEEsXG4gIHByb21vdGlvbkNvZGU6IEUsXG4gIGxpbmUxOiBFLFxuICBsaW5lMjogRSxcbiAgbGluZTM6IEUsXG4gIGNpdHk6IEUsXG4gIHN0YXRlOiBFLFxuICBjb3VudHJ5OiBBLFxuICB6aXBDb2RlOiBFLFxuICBpc1NoaXBwaW5nU2FtZUFzQmlsbGluZzogeiQxLmN1c3RvbSgpLm9wdGlvbmFsKCkuZGVmYXVsdCghMCksXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUxOiBFLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMjogRSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTM6IEUsXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IEUsXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBFLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBFLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBFXG59KSwgeG8gPSB6JDEub2JqZWN0KHtcbiAgZW1haWw6IEEuZW1haWwoeyBtZXNzYWdlOiBcIlBsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIiB9KSxcbiAgZmlyc3ROYW1lOiBFLFxuICBsYXN0TmFtZTogRSxcbiAgcHJvbW90aW9uQ29kZTogRSxcbiAgbGluZTE6IEUsXG4gIGxpbmUyOiBFLFxuICBsaW5lMzogRSxcbiAgY2l0eTogRSxcbiAgc3RhdGU6IEUsXG4gIGNvdW50cnk6IEEsXG4gIHppcENvZGU6IEUsXG4gIGlzU2hpcHBpbmdTYW1lQXNCaWxsaW5nOiB6JDEuY3VzdG9tKCkub3B0aW9uYWwoKS5kZWZhdWx0KCEwKSxcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IEUsXG4gIHNoaXBwaW5nQWRkcmVzc0xpbmUyOiBFLFxuICBzaGlwcGluZ0FkZHJlc3NMaW5lMzogRSxcbiAgc2hpcHBpbmdBZGRyZXNzQ2l0eTogRSxcbiAgc2hpcHBpbmdBZGRyZXNzU3RhdGU6IEUsXG4gIHNoaXBwaW5nQWRkcmVzc0NvdW50cnk6IEUsXG4gIHNoaXBwaW5nQWRkcmVzc1ppcENvZGU6IEVcbn0pO1xueiQxLm9iamVjdCh7XG4gIGxpbmUxOiBBLFxuICBjaXR5OiBBLFxuICBzdGF0ZTogQSxcbiAgY291bnRyeTogQVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzQ291bnRyeTogQSxcbiAgc2hpcHBpbmdBZGRyZXNzWmlwQ29kZTogQVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2hpcHBpbmdBZGRyZXNzTGluZTE6IEEsXG4gIHNoaXBwaW5nQWRkcmVzc0NpdHk6IEEsXG4gIHNoaXBwaW5nQWRkcmVzc1N0YXRlOiBBLFxuICBzaGlwcGluZ0FkZHJlc3NDb3VudHJ5OiBBLFxuICBzaGlwcGluZ0FkZHJlc3NaaXBDb2RlOiBBXG59KTtcbmNvbnN0IE9vID0gY2UuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgVW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogT28sXG4gIHNlc3Npb25JZDogQSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBSdCxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBFLFxuICBwYXltZW50Um91dGVJZDogRVxufSkuZXh0ZW5kKCRlLnNoYXBlKSwgam8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoY2UuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgJG8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoY2UuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRNZXRob2RJZDogRVxufSksIEdvID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBDbyxcbiAgQW8sXG4gIFRvLFxuICBObyxcbiAgRm8sXG4gIE1vLFxuICBVbyxcbiAgam8sXG4gICRvLFxuICBMbyxcbiAgRG9cbl0pLCBWbyA9IHokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBHbyxcbiAgbm9uY2U6IEEsXG4gIGZvcm1JZDogQSxcbiAgZWxlbWVudElkOiBBXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IEFcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IEQoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBEKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBpdCA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9tZXRob2RfaWQ6IEQoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yc191c2VkOiBEKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSksIHFvID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCB6byA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkocW8pXG59KSwgSG8gPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMCkgfSksXG4gIHpvXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBSdCxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogJGUsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IEQoeiQxLnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBEKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFJ0LFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiAkZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcm91dGVfaWQ6IEQoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IEQoeiQxLnN0cmluZygpKVxufSk7XG52YXIgVCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgZS5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIGUuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgZSkpKFQgfHwge30pO1xuY29uc3QgWHIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBCbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIFlvID0geiQxLm9iamVjdCh7XG4gIGJhbmtfbmFtZTogeiQxLnN0cmluZygpLFxuICBkaXNwbGF5X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgcmVzb3VyY2VzOiB6JDEub2JqZWN0KHtcbiAgICBsb2dvX3VybDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbiAgfSlcbn0pLCBlbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogRCh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogRCh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBEKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogRCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGF2YWlsYWJsZV9iYW5rczogRCh6JDEuYXJyYXkoWW8pKVxufSksIEpvID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBXbyA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQbyksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBEKGl0KSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBEKHokMS5hcnJheShlbikpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBEKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IEQoaXQpXG59KSwgWm8gPSB6JDEub2JqZWN0KHtcbiAgaW5zdGl0dXRpb25OdW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgdHJhbnNpdE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50TnVtYmVyOiB6JDEuc3RyaW5nKCksXG4gIGFjY291bnRUeXBlOiB6JDEuZW51bShbXCJwZXJzb25hbFwiLCBcImJ1c2luZXNzXCJdKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIsIFwiZmFpbHVyZVwiXSksXG4gIHBheWxvYWQ6IFpvLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgS28gPSB6JDEub2JqZWN0KHtcbiAgc29ydENvZGU6IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudE51bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50VHlwZTogeiQxLmVudW0oW1wicGVyc29uYWxcIiwgXCJidXNpbmVzc1wiXSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiLCBcImZhaWx1cmVcIl0pLFxuICBwYXlsb2FkOiBLby5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFFvID0geiQxLm9iamVjdCh7XG4gIGliYW46IHokMS5zdHJpbmcoKSxcbiAgYWNjb3VudFR5cGU6IHokMS5lbnVtKFtcInBlcnNvbmFsXCIsIFwiYnVzaW5lc3NcIl0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogUW8ub3B0aW9uYWwoKVxufSk7XG5jb25zdCBYbyA9IHokMS5vYmplY3Qoe1xuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpLFxuICBhYmFfcm91dGluZ19udW1iZXI6IHokMS5zdHJpbmcoKVxufSksIGVhID0geiQxLm9iamVjdCh7XG4gIGluc3RpdHV0aW9uX251bWJlcjogeiQxLnN0cmluZygpLFxuICB0cmFuc2l0X251bWJlcjogeiQxLnN0cmluZygpLFxuICBhY2NvdW50X251bWJlcjogeiQxLnN0cmluZygpXG59KSwgdGEgPSB6JDEub2JqZWN0KHtcbiAgYWNjb3VudF9udW1iZXI6IHokMS5zdHJpbmcoKSxcbiAgc29ydF9jb2RlOiB6JDEuc3RyaW5nKClcbn0pLCByYSA9IHokMS5vYmplY3Qoe1xuICBpYmFuOiB6JDEuc3RyaW5nKClcbn0pLCBuYSA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiwgXCJmYWlsdXJlXCJdKSxcbiAgcGF5bG9hZDogeiQxLnVuaW9uKFtcbiAgICBYbyxcbiAgICBlYSxcbiAgICB0YSxcbiAgICByYSxcbiAgICB6JDEub2JqZWN0KHsgZXJyb3I6IHokMS5zdHJpbmcoKSB9KVxuICBdKS5vcHRpb25hbCgpXG59KSwgUCA9IChlKSA9PiB6JDEubnVsbGFibGUoZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IG9hID0geiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IHRuID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBQKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBQKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBQKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogUCh6JDEubnVtYmVyKCkpXG59KSwgcm4gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IFAoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBQKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBhYSA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLCBpYSA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBQKGFhKVxufSksIEhlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHNhID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCBjYSA9IHokMS5vYmplY3Qoe1xuICBpZDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBQKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IFAoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoc2EpLFxuICB0cmlhbF9zdGFydDogUCh6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IFAoeiQxLnN0cmluZygpKVxufSksIG5uID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCBsYSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KG5uKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIHVhID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogdG5cbn0pLCBkYSA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheSh1YSksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogUCh6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KGxhKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShubilcbn0pLCB2ciA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoY2EpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KGRhKSxcbiAgcHJvY2Vzc29yc191c2VkOiBQKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKSxcbiAgcGF5bWVudF9tZXRob2RfaWQ6IFAoeiQxLnN0cmluZygpKVxufSksIG9uID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IHZyLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IFAodnIpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkodG4pXG59KSwgYnIgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogUCh6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zZXR0aW5nczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShybiksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBpYSxcbiAgc3Vic19wcmV2aWV3OiBQKG9uKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoSGUpLFxuICByZXR1cm5fdXJsOiBQKHokMS5zdHJpbmcoKSksXG4gIHN1Y2Nlc3NfdXJsOiBQKHokMS5zdHJpbmcoKSksXG4gIGZpbmFsX2ZlYXR1cmVfcm9sbG91dF9zZXR0aW5nczogUCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBhbiA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKGJyLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoYnIuc2hhcGUpXG5dKSwgcGEgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KSwgX2EgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFthbiwgcGEsIF9hXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB0ID0geiQxLm9iamVjdCh7XG4gIGxpbmUxOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbGluZTI6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsaW5lMzogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNpdHk6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGNvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgemlwX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfYWRkcmVzczogUHQsXG4gIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFB0Lm9wdGlvbmFsKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShybiksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBIZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IFAoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogUCh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IHNuID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBtYSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkobWEpO1xuY29uc3QgZmEgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IFB0LFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUHQub3B0aW9uYWwoKVxufSksIHlhID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBjbiA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoeWEpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgaGEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogSGUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBjbi5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChmYS5zaGFwZSkuZXh0ZW5kKGhhLnNoYXBlKTtcbmNvbnN0IGxuID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogUCh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IHhvLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IEhlLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogJGUsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBIZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgdXNlX3VuaWZpZWRfY2NfZmxvdzogUCh6JDEuYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBjbi5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFAoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBnYSA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IFAoaXQpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IFAoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBQKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBQKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IFAoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IFAoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogUCh6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogUCh6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBQKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogUCh6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBQKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBQKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogUCh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IFAoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogUCh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBQKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IHdhID0geiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IEhlLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBQKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgdmEgPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IFAoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgYmEgPSB6JDEub2JqZWN0KHt9KSwgRWEgPSB6JDEub2JqZWN0KHtcbiAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogeiQxLnN0cmluZygpXG59KS5jYXRjaGFsbCh6JDEuYW55KCkpLCBQYSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIFNhID0geiQxLmFycmF5KFBhKSwgQ2EgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwga2EgPSB6JDEuYXJyYXkoQ2EpLCBBYSA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgSnQgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIEFhW3RdID8/IGU7XG59LCBJYSA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKGUpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgVGEgPSAoZSkgPT4gZS5sZW5ndGggPT09IDEgPyBKdChlWzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGDigKIgJHtKdChyLm1zZyl9YCkuam9pbihgXG5gKX1gLCBSYSA9IChlKSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKChyKSA9PiBgLSAke3IucGF0aC5qb2luKFwiL1wiKX06ICR7ci5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgZWUgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChJYShlLm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCB0ID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIFNhLnNhZmVQYXJzZSh0KS5zdWNjZXNzID8gVGEodCkgOiBrYS5zYWZlUGFyc2UodCkuc3VjY2VzcyA/IFJhKHQpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7ZS5tZXNzYWdlfWApLCBlLm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIEp0KGUubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgZSA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSk7XG4gICAgfSBjYXRjaCAodCkge1xuICAgICAgcmV0dXJuIHQgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiBlICsgXCJcIjtcbn0sIE5hID0gKGUsIHQsIHIpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHQoLi4ubik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICByKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtlfSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBGYSA9IChlKSA9PiBlLnJlZHVjZSgodCwgcikgPT4gdCArIHIsIDApLCB1biA9IChlKSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKSwgZS5yZXR1cm5WYWx1ZSA9ICEwO1xufSwgTWEgPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIHVuKTtcbn0sIExhID0gKCkgPT4ge1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCB1bik7XG59LCBCID0gKGUpID0+IHtcbiAgbGV0IHQgPSAhMTtcbiAgcmV0dXJuIGFzeW5jIChyKSA9PiB7XG4gICAgdmFyIG4sIGE7XG4gICAgaWYgKHQpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIlNraXBwaW5nIHN1Ym1pc3Npb24gYmVjYXVzZSBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ID0gITA7XG4gICAgdHJ5IHtcbiAgICAgIHIuY29udGV4dC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24gJiYgTWEoKSwgKGEgPSAobiA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IGEuY2FsbChuKSwgZyhcImNoZWNrb3V0X3N0YXJ0ZWRcIiwge1xuICAgICAgICBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG8gPSBhd2FpdCBlKHIpO1xuICAgICAgaWYgKGcoXCJjaGVja291dF9zdWNjZXNzXCIsIHtcbiAgICAgICAgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgLi4ub1xuICAgICAgfSksIE1pKCksIG8ubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhvLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICBlbHNlIGlmIChvLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBvLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgby5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBvLnJlc3VsdC5jdXN0b21lcl9pZCxcbiAgICAgICAgICBvLnJlc3VsdC5wcm9jZXNzb3JzX3VzZWQgPz8gW10sXG4gICAgICAgICAgby5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQgPz8gXCJcIlxuICAgICAgICApO1xuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBtb2RlOiAke299YCk7XG4gICAgfSBjYXRjaCAobykge1xuICAgICAgdCA9ICExO1xuICAgICAgY29uc3QgcyA9IGVlKG8pLCBsID0gYXdhaXQgRm4oci5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHMpO1xuICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IocywgbCksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2QsIGVycm9yTWVzc2FnZTogcywgZXJyb3JDb2RlOiBsLCBlcnJvcjogbyB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdCA9ICExLCByLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uICYmIExhKCk7XG4gICAgfVxuICB9O1xufSwgdmUgPSAoZSkgPT4gYXN5bmMgKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IHsgZXJyX186IG4gfSA9IEkoXCJpbml0LWVycm9yLWNhdGNoZXJcIiksIGEgPSBlZShyKSwgbyA9IGF3YWl0IEZuKHQuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBhKTtcbiAgICByZXR1cm4gbihvLCBhLCByKSwgZyhcImluaXRfZmxvd19lcnJvclwiLCB7IGVycm9yTWVzc2FnZTogYSwgZXJyb3JDb2RlOiBvLCBlcnJvcjogciB9KSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogYSwgZXJyb3JDb2RlOiBvLCBpc0xvYWRpbmc6ICExIH07XG4gIH1cbn0sIEkgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coYCR7Y2hhbGsuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9LCByID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS53YXJuKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtlfWApfVx0YCwgLi4ubik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nOiB0LFxuICAgIGVycjogcixcbiAgICBsb2dfXzogdCxcbiAgICBlcnJfXzogclxuICB9O1xufTtcbnZhciBXdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgcmV0dXJuIFd0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24ociwgbikge1xuICAgIHIuX19wcm90b19fID0gbjtcbiAgfSB8fCBmdW5jdGlvbihyLCBuKSB7XG4gICAgZm9yICh2YXIgYSBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgYSkgJiYgKHJbYV0gPSBuW2FdKTtcbiAgfSwgV3QoZSwgdCk7XG59O1xuZnVuY3Rpb24ga2UoZSwgdCkge1xuICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiICYmIHQgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcodCkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBXdChlLCB0KTtcbiAgZnVuY3Rpb24gcigpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZTtcbiAgfVxuICBlLnByb3RvdHlwZSA9IHQgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHQpIDogKHIucHJvdG90eXBlID0gdC5wcm90b3R5cGUsIG5ldyByKCkpO1xufVxuZnVuY3Rpb24gRGEoZSwgdCwgciwgbikge1xuICBmdW5jdGlvbiBhKG8pIHtcbiAgICByZXR1cm4gbyBpbnN0YW5jZW9mIHIgPyBvIDogbmV3IHIoZnVuY3Rpb24ocykge1xuICAgICAgcyhvKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChyIHx8IChyID0gUHJvbWlzZSkpKGZ1bmN0aW9uKG8sIHMpIHtcbiAgICBmdW5jdGlvbiBsKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi5uZXh0KGQpKTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgcyhtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4udGhyb3coZCkpO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBzKG0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGQpIHtcbiAgICAgIGQuZG9uZSA/IG8oZC52YWx1ZSkgOiBhKGQudmFsdWUpLnRoZW4obCwgYyk7XG4gICAgfVxuICAgIHUoKG4gPSBuLmFwcGx5KGUsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkbihlLCB0KSB7XG4gIHZhciByID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKG9bMF0gJiAxKSB0aHJvdyBvWzFdO1xuICAgIHJldHVybiBvWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBhLCBvLCBzID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gcy5uZXh0ID0gbCgwKSwgcy50aHJvdyA9IGwoMSksIHMucmV0dXJuID0gbCgyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKHNbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgcztcbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBjKFt1LCBkXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IHMgJiYgKHMgPSAwLCB1WzBdICYmIChyID0gMCkpLCByOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIGEgJiYgKG8gPSB1WzBdICYgMiA/IGEucmV0dXJuIDogdVswXSA/IGEudGhyb3cgfHwgKChvID0gYS5yZXR1cm4pICYmIG8uY2FsbChhKSwgMCkgOiBhLm5leHQpICYmICEobyA9IG8uY2FsbChhLCB1WzFdKSkuZG9uZSkgcmV0dXJuIG87XG4gICAgICBzd2l0Y2ggKGEgPSAwLCBvICYmICh1ID0gW3VbMF0gJiAyLCBvLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgbyA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gci5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgci5sYWJlbCsrLCBhID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSByLm9wcy5wb3AoKSwgci50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChvID0gci50cnlzLCAhKG8gPSBvLmxlbmd0aCA+IDAgJiYgb1tvLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFvIHx8IHVbMV0gPiBvWzBdICYmIHVbMV0gPCBvWzNdKSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgci5sYWJlbCA8IG9bMV0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBvWzFdLCBvID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobyAmJiByLmxhYmVsIDwgb1syXSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IG9bMl0sIHIub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgb1syXSAmJiByLm9wcy5wb3AoKSwgci50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IHQuY2FsbChlLCByKTtcbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICB1ID0gWzYsIGRdLCBhID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IG8gPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBHZShlKSB7XG4gIHZhciB0ID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCByID0gdCAmJiBlW3RdLCBuID0gMDtcbiAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gIGlmIChlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGUgJiYgbiA+PSBlLmxlbmd0aCAmJiAoZSA9IHZvaWQgMCksIHsgdmFsdWU6IGUgJiYgZVtuKytdLCBkb25lOiAhZSB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcih0ID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gU3QoZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGwpIHtcbiAgICBzID0geyBlcnJvcjogbCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59XG5mdW5jdGlvbiBDdChlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBvOyBuIDwgYTsgbisrKVxuICAgIChvIHx8ICEobiBpbiB0KSkgJiYgKG8gfHwgKG8gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIG9bbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KG8gfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufVxuZnVuY3Rpb24gT2UoZSkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIE9lID8gKHRoaXMudiA9IGUsIHRoaXMpIDogbmV3IE9lKGUpO1xufVxuZnVuY3Rpb24geGEoZSwgdCwgcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IHIuYXBwbHkoZSwgdCB8fCBbXSksIGEsIG8gPSBbXTtcbiAgcmV0dXJuIGEgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBsKFwibmV4dFwiKSwgbChcInRocm93XCIpLCBsKFwicmV0dXJuXCIsIHMpLCBhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBhO1xuICBmdW5jdGlvbiBzKGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oeSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh5KS50aGVuKGYsIG0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbChmLCB5KSB7XG4gICAgbltmXSAmJiAoYVtmXSA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LCBTKSB7XG4gICAgICAgIG8ucHVzaChbZiwgaCwgdiwgU10pID4gMSB8fCBjKGYsIGgpO1xuICAgICAgfSk7XG4gICAgfSwgeSAmJiAoYVtmXSA9IHkoYVtmXSkpKTtcbiAgfVxuICBmdW5jdGlvbiBjKGYsIHkpIHtcbiAgICB0cnkge1xuICAgICAgdShuW2ZdKHkpKTtcbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICBfKG9bMF1bM10sIGgpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1KGYpIHtcbiAgICBmLnZhbHVlIGluc3RhbmNlb2YgT2UgPyBQcm9taXNlLnJlc29sdmUoZi52YWx1ZS52KS50aGVuKGQsIG0pIDogXyhvWzBdWzJdLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBkKGYpIHtcbiAgICBjKFwibmV4dFwiLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBtKGYpIHtcbiAgICBjKFwidGhyb3dcIiwgZik7XG4gIH1cbiAgZnVuY3Rpb24gXyhmLCB5KSB7XG4gICAgZih5KSwgby5zaGlmdCgpLCBvLmxlbmd0aCAmJiBjKG9bMF1bMF0sIG9bMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBPYShlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciB0ID0gZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIHI7XG4gIHJldHVybiB0ID8gdC5jYWxsKGUpIDogKGUgPSB0eXBlb2YgR2UgPT0gXCJmdW5jdGlvblwiID8gR2UoZSkgOiBlW1N5bWJvbC5pdGVyYXRvcl0oKSwgciA9IHt9LCBuKFwibmV4dFwiKSwgbihcInRocm93XCIpLCBuKFwicmV0dXJuXCIpLCByW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCByKTtcbiAgZnVuY3Rpb24gbihvKSB7XG4gICAgcltvXSA9IGVbb10gJiYgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGwsIGMpIHtcbiAgICAgICAgcyA9IGVbb10ocyksIGEobCwgYywgcy5kb25lLCBzLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYShvLCBzLCBsLCBjKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKGMpLnRoZW4oZnVuY3Rpb24odSkge1xuICAgICAgbyh7IHZhbHVlOiB1LCBkb25lOiBsIH0pO1xuICAgIH0sIHMpO1xuICB9XG59XG5mdW5jdGlvbiBWKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIEZ0KGUpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihuKSB7XG4gICAgRXJyb3IuY2FsbChuKSwgbi5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCByID0gZSh0KTtcbiAgcmV0dXJuIHIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCByLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHIsIHI7XG59XG52YXIgJHQgPSBGdChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gciA/IHIubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIHIubWFwKGZ1bmN0aW9uKG4sIGEpIHtcbiAgICAgIHJldHVybiBhICsgMSArIFwiKSBcIiArIG4udG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSByO1xuICB9O1xufSk7XG5mdW5jdGlvbiBrdChlLCB0KSB7XG4gIGlmIChlKSB7XG4gICAgdmFyIHIgPSBlLmluZGV4T2YodCk7XG4gICAgMCA8PSByICYmIGUuc3BsaWNlKHIsIDEpO1xuICB9XG59XG52YXIgcHQgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSB0LCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCwgciwgbiwgYSwgbztcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIHMgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAocylcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkocykpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGwgPSBHZShzKSwgYyA9IGwubmV4dCgpOyAhYy5kb25lOyBjID0gbC5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBjLnZhbHVlO1xuICAgICAgICAgICAgICB1LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICB0ID0geyBlcnJvcjogaCB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKHIgPSBsLnJldHVybikgJiYgci5jYWxsKGwpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKHQpIHRocm93IHQuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcy5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgZCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKFYoZCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZCgpO1xuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgbyA9IGggaW5zdGFuY2VvZiAkdCA/IGguZXJyb3JzIDogW2hdO1xuICAgICAgICB9XG4gICAgICB2YXIgbSA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAobSkge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBfID0gR2UobSksIGYgPSBfLm5leHQoKTsgIWYuZG9uZTsgZiA9IF8ubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgeSA9IGYudmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBFcih5KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgbyA9IG8gPz8gW10sIGggaW5zdGFuY2VvZiAkdCA/IG8gPSBDdChDdChbXSwgU3QobykpLCBTdChoLmVycm9ycykpIDogby5wdXNoKGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIG4gPSB7IGVycm9yOiBoIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGYgJiYgIWYuZG9uZSAmJiAoYSA9IF8ucmV0dXJuKSAmJiBhLmNhbGwoXyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG8pXG4gICAgICAgIHRocm93IG5ldyAkdChvKTtcbiAgICB9XG4gIH0sIGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAodCAmJiB0ICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBFcih0KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAodCBpbnN0YW5jZW9mIGUpIHtcbiAgICAgICAgICBpZiAodC5jbG9zZWQgfHwgdC5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHQuX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChyID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IFtdKS5wdXNoKHQpO1xuICAgICAgfVxuICB9LCBlLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiByID09PSB0IHx8IEFycmF5LmlzQXJyYXkocikgJiYgci5pbmNsdWRlcyh0KTtcbiAgfSwgZS5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KHIpID8gKHIucHVzaCh0KSwgcikgOiByID8gW3IsIHRdIDogdDtcbiAgfSwgZS5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByID09PSB0ID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkocikgJiYga3QociwgdCk7XG4gIH0sIGUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgciAmJiBrdChyLCB0KSwgdCBpbnN0YW5jZW9mIGUgJiYgdC5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCBlLkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQgPSBuZXcgZSgpO1xuICAgIHJldHVybiB0LmNsb3NlZCA9ICEwLCB0O1xuICB9KCksIGU7XG59KCksIHBuID0gcHQuRU1QVFk7XG5mdW5jdGlvbiBfbihlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgcHQgfHwgZSAmJiBcImNsb3NlZFwiIGluIGUgJiYgVihlLnJlbW92ZSkgJiYgVihlLmFkZCkgJiYgVihlLnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIEVyKGUpIHtcbiAgVihlKSA/IGUoKSA6IGUudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBtbiA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCBmbiA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24oZSwgdCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICByW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIEN0KFtlLCB0XSwgU3QocikpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKGUpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24geW4oZSkge1xuICBmbi5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IGU7XG4gIH0pO1xufVxuZnVuY3Rpb24gUHIoKSB7XG59XG5mdW5jdGlvbiB2dChlKSB7XG4gIGUoKTtcbn1cbnZhciB0ciA9IGZ1bmN0aW9uKGUpIHtcbiAga2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHZhciBuID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIG4uaXNTdG9wcGVkID0gITEsIHIgPyAobi5kZXN0aW5hdGlvbiA9IHIsIF9uKHIpICYmIHIuYWRkKG4pKSA6IG4uZGVzdGluYXRpb24gPSBHYSwgbjtcbiAgfVxuICByZXR1cm4gdC5jcmVhdGUgPSBmdW5jdGlvbihyLCBuLCBhKSB7XG4gICAgcmV0dXJuIG5ldyBadChyLCBuLCBhKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IocikpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCB0LnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQocik7XG4gIH0sIHQucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgdDtcbn0ocHQpLCBVYSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gR3QoZSwgdCkge1xuICByZXR1cm4gVWEuY2FsbChlLCB0KTtcbn1cbnZhciBqYSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHQ7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgci5uZXh0KHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICB5dChuKTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIHIuZXJyb3IodCk7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIHl0KG4pO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIHl0KHQpO1xuICB9LCBlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHQuY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICB0LmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgIHl0KHIpO1xuICAgICAgfVxuICB9LCBlO1xufSgpLCBadCA9IGZ1bmN0aW9uKGUpIHtcbiAga2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbiwgYSkge1xuICAgIHZhciBvID0gZS5jYWxsKHRoaXMpIHx8IHRoaXMsIHM7XG4gICAgaWYgKFYocikgfHwgIXIpXG4gICAgICBzID0ge1xuICAgICAgICBuZXh0OiByID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IG4gPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogYSA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbDtcbiAgICAgIG8gJiYgbW4udXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGwgPSBPYmplY3QuY3JlYXRlKHIpLCBsLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBvLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBzID0ge1xuICAgICAgICBuZXh0OiByLm5leHQgJiYgR3Qoci5uZXh0LCBsKSxcbiAgICAgICAgZXJyb3I6IHIuZXJyb3IgJiYgR3Qoci5lcnJvciwgbCksXG4gICAgICAgIGNvbXBsZXRlOiByLmNvbXBsZXRlICYmIEd0KHIuY29tcGxldGUsIGwpXG4gICAgICB9KSA6IHMgPSByO1xuICAgIH1cbiAgICByZXR1cm4gby5kZXN0aW5hdGlvbiA9IG5ldyBqYShzKSwgbztcbiAgfVxuICByZXR1cm4gdDtcbn0odHIpO1xuZnVuY3Rpb24geXQoZSkge1xuICB5bihlKTtcbn1cbmZ1bmN0aW9uICRhKGUpIHtcbiAgdGhyb3cgZTtcbn1cbnZhciBHYSA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogUHIsXG4gIGVycm9yOiAkYSxcbiAgY29tcGxldGU6IFByXG59LCByciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIFZhKGUpIHtcbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBxYShlKSB7XG4gIHJldHVybiBlLmxlbmd0aCA9PT0gMCA/IFZhIDogZS5sZW5ndGggPT09IDEgPyBlWzBdIDogZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBlLnJlZHVjZShmdW5jdGlvbihuLCBhKSB7XG4gICAgICByZXR1cm4gYShuKTtcbiAgICB9LCByKTtcbiAgfTtcbn1cbnZhciB3ZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0ICYmICh0aGlzLl9zdWJzY3JpYmUgPSB0KTtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IG5ldyBlKCk7XG4gICAgcmV0dXJuIHIuc291cmNlID0gdGhpcywgci5vcGVyYXRvciA9IHQsIHI7XG4gIH0sIGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICB2YXIgYSA9IHRoaXMsIG8gPSBIYSh0KSA/IHQgOiBuZXcgWnQodCwgciwgbik7XG4gICAgcmV0dXJuIHZ0KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMgPSBhLCBsID0gcy5vcGVyYXRvciwgYyA9IHMuc291cmNlO1xuICAgICAgby5hZGQobCA/IGwuY2FsbChvLCBjKSA6IGMgPyBhLl9zdWJzY3JpYmUobykgOiBhLl90cnlTdWJzY3JpYmUobykpO1xuICAgIH0pLCBvO1xuICB9LCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHQpO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIHQuZXJyb3Iocik7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24odCwgcikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICByZXR1cm4gciA9IFNyKHIpLCBuZXcgcihmdW5jdGlvbihhLCBvKSB7XG4gICAgICB2YXIgcyA9IG5ldyBadCh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGwpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdChsKTtcbiAgICAgICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgICAgICBvKGMpLCBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbyxcbiAgICAgICAgY29tcGxldGU6IGFcbiAgICAgIH0pO1xuICAgICAgbi5zdWJzY3JpYmUocyk7XG4gICAgfSk7XG4gIH0sIGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgcmV0dXJuIChyID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuc3Vic2NyaWJlKHQpO1xuICB9LCBlLnByb3RvdHlwZVtycl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgIHJldHVybiBxYSh0KSh0aGlzKTtcbiAgfSwgZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICByZXR1cm4gdCA9IFNyKHQpLCBuZXcgdChmdW5jdGlvbihuLCBhKSB7XG4gICAgICB2YXIgbztcbiAgICAgIHIuc3Vic2NyaWJlKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIG8gPSBzO1xuICAgICAgfSwgZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gYShzKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbihvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gbmV3IGUodCk7XG4gIH0sIGU7XG59KCk7XG5mdW5jdGlvbiBTcihlKSB7XG4gIHZhciB0O1xuICByZXR1cm4gKHQgPSBlID8/IG1uLlByb21pc2UpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gemEoZSkge1xuICByZXR1cm4gZSAmJiBWKGUubmV4dCkgJiYgVihlLmVycm9yKSAmJiBWKGUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gSGEoZSkge1xuICByZXR1cm4gZSAmJiBlIGluc3RhbmNlb2YgdHIgfHwgemEoZSkgJiYgX24oZSk7XG59XG5mdW5jdGlvbiBCYShlKSB7XG4gIHJldHVybiBWKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGlmdCk7XG59XG5mdW5jdGlvbiBZYShlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgaWYgKEJhKHQpKVxuICAgICAgcmV0dXJuIHQubGlmdChmdW5jdGlvbihyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGUociwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICB0aGlzLmVycm9yKG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBKYShlLCB0LCByLCBuLCBhKSB7XG4gIHJldHVybiBuZXcgV2EoZSwgdCwgciwgbiwgYSk7XG59XG52YXIgV2EgPSBmdW5jdGlvbihlKSB7XG4gIGtlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIGEsIG8sIHMsIGwpIHtcbiAgICB2YXIgYyA9IGUuY2FsbCh0aGlzLCByKSB8fCB0aGlzO1xuICAgIHJldHVybiBjLm9uRmluYWxpemUgPSBzLCBjLnNob3VsZFVuc3Vic2NyaWJlID0gbCwgYy5fbmV4dCA9IG4gPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICByLmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fbmV4dCwgYy5fZXJyb3IgPSBvID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbyh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgci5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2Vycm9yLCBjLl9jb21wbGV0ZSA9IGEgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEoKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgci5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2NvbXBsZXRlLCBjO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciBuID0gdGhpcy5jbG9zZWQ7XG4gICAgICBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhbiAmJiAoKHIgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCB8fCByLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgdDtcbn0odHIpLCBaYSA9IEZ0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgaG4gPSBmdW5jdGlvbihlKSB7XG4gIGtlKHQsIGUpO1xuICBmdW5jdGlvbiB0KCkge1xuICAgIHZhciByID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gITEsIHIuY3VycmVudE9ic2VydmVycyA9IG51bGwsIHIub2JzZXJ2ZXJzID0gW10sIHIuaXNTdG9wcGVkID0gITEsIHIuaGFzRXJyb3IgPSAhMSwgci50aHJvd25FcnJvciA9IG51bGwsIHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSBuZXcgQ3IodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIG4ub3BlcmF0b3IgPSByLCBuO1xuICB9LCB0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBaYSgpO1xuICB9LCB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICB2dChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhLCBvO1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uY3VycmVudE9ic2VydmVycyB8fCAobi5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShuLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIHMgPSBHZShuLmN1cnJlbnRPYnNlcnZlcnMpLCBsID0gcy5uZXh0KCk7ICFsLmRvbmU7IGwgPSBzLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGMgPSBsLnZhbHVlO1xuICAgICAgICAgICAgYy5uZXh0KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIGEgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGwgJiYgIWwuZG9uZSAmJiAobyA9IHMucmV0dXJuKSAmJiBvLmNhbGwocyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgdnQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5oYXNFcnJvciA9IG4uaXNTdG9wcGVkID0gITAsIG4udGhyb3duRXJyb3IgPSByO1xuICAgICAgICBmb3IgKHZhciBhID0gbi5vYnNlcnZlcnM7IGEubGVuZ3RoOyApXG4gICAgICAgICAgYS5zaGlmdCgpLmVycm9yKHIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICB2dChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChyLl90aHJvd0lmQ2xvc2VkKCksICFyLmlzU3RvcHBlZCkge1xuICAgICAgICByLmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciBuID0gci5vYnNlcnZlcnM7IG4ubGVuZ3RoOyApXG4gICAgICAgICAgbi5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByO1xuICAgICAgcmV0dXJuICgociA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgcik7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhyKSwgdGhpcy5faW5uZXJTdWJzY3JpYmUocik7XG4gIH0sIHQucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGEgPSB0aGlzLCBvID0gYS5oYXNFcnJvciwgcyA9IGEuaXNTdG9wcGVkLCBsID0gYS5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIG8gfHwgcyA/IHBuIDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGwucHVzaChyKSwgbmV3IHB0KGZ1bmN0aW9uKCkge1xuICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwga3QobCwgcik7XG4gICAgfSkpO1xuICB9LCB0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGEgPSBuLmhhc0Vycm9yLCBvID0gbi50aHJvd25FcnJvciwgcyA9IG4uaXNTdG9wcGVkO1xuICAgIGEgPyByLmVycm9yKG8pIDogcyAmJiByLmNvbXBsZXRlKCk7XG4gIH0sIHQucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gbmV3IHdlKCk7XG4gICAgcmV0dXJuIHIuc291cmNlID0gdGhpcywgcjtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIG5ldyBDcihyLCBuKTtcbiAgfSwgdDtcbn0od2UpLCBDciA9IGZ1bmN0aW9uKGUpIHtcbiAga2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHZhciBhID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuZGVzdGluYXRpb24gPSByLCBhLnNvdXJjZSA9IG4sIGE7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIGE7XG4gICAgKGEgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4ubmV4dCkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwIHx8IGEuY2FsbChuLCByKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIGE7XG4gICAgKGEgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uZXJyb3IpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIG47XG4gICAgKG4gPSAociA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuY29tcGxldGUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCB8fCBuLmNhbGwocik7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIGE7XG4gICAgcmV0dXJuIChhID0gKG4gPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5zdWJzY3JpYmUocikpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiBwbjtcbiAgfSwgdDtcbn0oaG4pLCBLYSA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgUWEgPSBmdW5jdGlvbihlKSB7XG4gIGtlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICByZXR1cm4gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0O1xufShwdCksIGtyID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24oZSwgdCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICByW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBDdChbZSwgdF0sIFN0KHIpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbChlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgWGEgPSBmdW5jdGlvbihlKSB7XG4gIGtlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgYSA9IGUuY2FsbCh0aGlzLCByLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLnNjaGVkdWxlciA9IHIsIGEud29yayA9IG4sIGEucGVuZGluZyA9ICExLCBhO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgYTtcbiAgICBpZiAobiA9PT0gdm9pZCAwICYmIChuID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IHI7XG4gICAgdmFyIG8gPSB0aGlzLmlkLCBzID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIG8gIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQocywgbywgbikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IG4sIHRoaXMuaWQgPSAoYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiB0aGlzLnJlcXVlc3RBc3luY0lkKHMsIHRoaXMuaWQsIG4pLCB0aGlzO1xuICB9LCB0LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIGEpIHtcbiAgICByZXR1cm4gYSA9PT0gdm9pZCAwICYmIChhID0gMCksIGtyLnNldEludGVydmFsKHIuZmx1c2guYmluZChyLCB0aGlzKSwgYSk7XG4gIH0sIHQucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24ociwgbiwgYSkge1xuICAgIGlmIChhID09PSB2b2lkIDAgJiYgKGEgPSAwKSwgYSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGEgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiBuO1xuICAgIG4gIT0gbnVsbCAmJiBrci5jbGVhckludGVydmFsKG4pO1xuICB9LCB0LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBhID0gdGhpcy5fZXhlY3V0ZShyLCBuKTtcbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiBhO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCB0LnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgYSA9ICExLCBvO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsocik7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgYSA9ICEwLCBvID0gcyB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIG87XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gci5pZCwgYSA9IHIuc2NoZWR1bGVyLCBvID0gYS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIGt0KG8sIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB0O1xufShRYSksIEFyID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCwgcikge1xuICAgIHIgPT09IHZvaWQgMCAmJiAociA9IGUubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gdCwgdGhpcy5ub3cgPSByO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICByZXR1cm4gciA9PT0gdm9pZCAwICYmIChyID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgdCkuc2NoZWR1bGUobiwgcik7XG4gIH0sIGUubm93ID0gS2Eubm93LCBlO1xufSgpLCBlaSA9IGZ1bmN0aW9uKGUpIHtcbiAga2UodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IEFyLm5vdyk7XG4gICAgdmFyIGEgPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5hY3Rpb25zID0gW10sIGEuX2FjdGl2ZSA9ICExLCBhO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBuLnB1c2gocik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBhO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAoYSA9IHIuZXhlY3V0ZShyLnN0YXRlLCByLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKHIgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgYSkge1xuICAgICAgZm9yICg7IHIgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgci51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgYTtcbiAgICB9XG4gIH0sIHQ7XG59KEFyKSwgdGkgPSBuZXcgZWkoWGEpLCByaSA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIG5pKGUpIHtcbiAgcmV0dXJuIFYoZSA9PSBudWxsID8gdm9pZCAwIDogZS50aGVuKTtcbn1cbmZ1bmN0aW9uIG9pKGUpIHtcbiAgcmV0dXJuIFYoZVtycl0pO1xufVxuZnVuY3Rpb24gYWkoZSkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgVihlID09IG51bGwgPyB2b2lkIDAgOiBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiBpaShlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGUgIT09IG51bGwgJiYgdHlwZW9mIGUgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgZSArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24gc2koKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgY2kgPSBzaSgpO1xuZnVuY3Rpb24gbGkoZSkge1xuICByZXR1cm4gVihlID09IG51bGwgPyB2b2lkIDAgOiBlW2NpXSk7XG59XG5mdW5jdGlvbiB1aShlKSB7XG4gIHJldHVybiB4YSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuLCBhLCBvO1xuICAgIHJldHVybiBkbih0aGlzLCBmdW5jdGlvbihzKSB7XG4gICAgICBzd2l0Y2ggKHMubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHIgPSBlLmdldFJlYWRlcigpLCBzLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIHMubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCBPZShyLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIG4gPSBzLnNlbnQoKSwgYSA9IG4udmFsdWUsIG8gPSBuLmRvbmUsIG8gPyBbNCwgT2Uodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIHMuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgT2UoYSldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gcy5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIHIucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZGkoZSkge1xuICByZXR1cm4gVihlID09IG51bGwgPyB2b2lkIDAgOiBlLmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBwaShlKSB7XG4gIGlmIChlIGluc3RhbmNlb2Ygd2UpXG4gICAgcmV0dXJuIGU7XG4gIGlmIChlICE9IG51bGwpIHtcbiAgICBpZiAob2koZSkpXG4gICAgICByZXR1cm4gX2koZSk7XG4gICAgaWYgKHJpKGUpKVxuICAgICAgcmV0dXJuIG1pKGUpO1xuICAgIGlmIChuaShlKSlcbiAgICAgIHJldHVybiBmaShlKTtcbiAgICBpZiAoYWkoZSkpXG4gICAgICByZXR1cm4gZ24oZSk7XG4gICAgaWYgKGxpKGUpKVxuICAgICAgcmV0dXJuIHlpKGUpO1xuICAgIGlmIChkaShlKSlcbiAgICAgIHJldHVybiBoaShlKTtcbiAgfVxuICB0aHJvdyBpaShlKTtcbn1cbmZ1bmN0aW9uIF9pKGUpIHtcbiAgcmV0dXJuIG5ldyB3ZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBlW3JyXSgpO1xuICAgIGlmIChWKHIuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiByLnN1YnNjcmliZSh0KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gbWkoZSkge1xuICByZXR1cm4gbmV3IHdlKGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKHZhciByID0gMDsgciA8IGUubGVuZ3RoICYmICF0LmNsb3NlZDsgcisrKVxuICAgICAgdC5uZXh0KGVbcl0pO1xuICAgIHQuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaShlKSB7XG4gIHJldHVybiBuZXcgd2UoZnVuY3Rpb24odCkge1xuICAgIGUudGhlbihmdW5jdGlvbihyKSB7XG4gICAgICB0LmNsb3NlZCB8fCAodC5uZXh0KHIpLCB0LmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIHJldHVybiB0LmVycm9yKHIpO1xuICAgIH0pLnRoZW4obnVsbCwgeW4pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHlpKGUpIHtcbiAgcmV0dXJuIG5ldyB3ZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGEgPSBHZShlKSwgbyA9IGEubmV4dCgpOyAhby5kb25lOyBvID0gYS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIHMgPSBvLnZhbHVlO1xuICAgICAgICBpZiAodC5uZXh0KHMpLCB0LmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAobCkge1xuICAgICAgciA9IHsgZXJyb3I6IGwgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbyAmJiAhby5kb25lICYmIChuID0gYS5yZXR1cm4pICYmIG4uY2FsbChhKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ24oZSkge1xuICByZXR1cm4gbmV3IHdlKGZ1bmN0aW9uKHQpIHtcbiAgICBnaShlLCB0KS5jYXRjaChmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBoaShlKSB7XG4gIHJldHVybiBnbih1aShlKSk7XG59XG5mdW5jdGlvbiBnaShlLCB0KSB7XG4gIHZhciByLCBuLCBhLCBvO1xuICByZXR1cm4gRGEodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzLCBsO1xuICAgIHJldHVybiBkbih0aGlzLCBmdW5jdGlvbihjKSB7XG4gICAgICBzd2l0Y2ggKGMubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGMudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCByID0gT2EoZSksIGMubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCByLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IGMuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAocyA9IG4udmFsdWUsIHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGMubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGwgPSBjLnNlbnQoKSwgYSA9IHsgZXJyb3I6IGwgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBjLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKG8gPSByLnJldHVybikgPyBbNCwgby5jYWxsKHIpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGMuc2VudCgpLCBjLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiB0LmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiB3aShlLCB0LCByLCBuLCBhKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBhID09PSB2b2lkIDAgJiYgKGEgPSAhMSk7XG4gIHZhciBvID0gdC5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICByKCksIGEgPyBlLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmIChlLmFkZChvKSwgIWEpXG4gICAgcmV0dXJuIG87XG59XG5mdW5jdGlvbiB2aShlLCB0KSB7XG4gIHZhciByID0gVihlKSA/IGUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgbiA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gYS5lcnJvcihyKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IHdlKG4pO1xufVxudmFyIGJpID0gRnQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gRWkoZSwgdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBhID0gITEsIG87XG4gICAgZS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24ocykge1xuICAgICAgICBvID0gcywgYSA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBuLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBhID8gcihvKSA6IG4obmV3IGJpKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFBpKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihlKTtcbn1cbnZhciBTaSA9IEZ0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBudWxsKSwgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSByO1xuICB9O1xufSk7XG5mdW5jdGlvbiBDaShlLCB0KSB7XG4gIHZhciByID0gUGkoZSkgPyB7IGZpcnN0OiBlIH0gOiB0eXBlb2YgZSA9PSBcIm51bWJlclwiID8geyBlYWNoOiBlIH0gOiBlLCBuID0gci5maXJzdCwgYSA9IHIuZWFjaCwgbyA9IHIud2l0aCwgcyA9IG8gPT09IHZvaWQgMCA/IGtpIDogbywgbCA9IHIuc2NoZWR1bGVyLCBjID0gbCA9PT0gdm9pZCAwID8gdGkgOiBsLCB1ID0gci5tZXRhLCBkID0gdSA9PT0gdm9pZCAwID8gbnVsbCA6IHU7XG4gIGlmIChuID09IG51bGwgJiYgYSA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIFlhKGZ1bmN0aW9uKG0sIF8pIHtcbiAgICB2YXIgZiwgeSwgaCA9IG51bGwsIHYgPSAwLCBTID0gZnVuY3Rpb24odykge1xuICAgICAgeSA9IHdpKF8sIGMsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGYudW5zdWJzY3JpYmUoKSwgcGkocyh7XG4gICAgICAgICAgICBtZXRhOiBkLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiBoLFxuICAgICAgICAgICAgc2VlbjogdlxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoXyk7XG4gICAgICAgIH0gY2F0Y2ggKGIpIHtcbiAgICAgICAgICBfLmVycm9yKGIpO1xuICAgICAgICB9XG4gICAgICB9LCB3KTtcbiAgICB9O1xuICAgIGYgPSBtLnN1YnNjcmliZShKYShfLCBmdW5jdGlvbih3KSB7XG4gICAgICB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCB2KyssIF8ubmV4dChoID0gdyksIGEgPiAwICYmIFMoYSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgeSAhPSBudWxsICYmIHkuY2xvc2VkIHx8IHkgPT0gbnVsbCB8fCB5LnVuc3Vic2NyaWJlKCksIGggPSBudWxsO1xuICAgIH0pKSwgIXYgJiYgUyhuICE9IG51bGwgPyB0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gbiA6ICtuIC0gYy5ub3coKSA6IGEpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGtpKGUpIHtcbiAgdGhyb3cgbmV3IFNpKGUpO1xufVxuY2xhc3MgbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiB0IH0sIHRoaXMuX3N1YmplY3QubmV4dCh0KSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAodCwgcikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IHQsIGVyck1zZzogciB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKHQpO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodCkgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IHQsIHRoaXMuc3Vic2NyaWJlID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHQodGhpcy5fY3VycmVudCksIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgX3QodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCByID0ge1xuICAgICAgICBmaXJzdDogdC50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiB2aSgoKSA9PiBuZXcgRXJyb3IodC50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gRWkodGhpcy5fc3ViamVjdC5waXBlKENpKHIpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IGhuKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IElyID0geiQxLmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSksIEFpID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59LCBJaSA9IChlKSA9PiBBaVtlXSwgVnQgPSB7fSwgd24gPSBhc3luYyAoZSkgPT4ge1xuICBpZiAoVnRbZV0pXG4gICAgcmV0dXJuIFZ0W2VdO1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBlKSkudGhlbigobikgPT4gbi5qc29uKCkpLCByID0gSXIucGFyc2UodC5lbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIFZ0W2VdID0gciwgcjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIElyLlZhbHVlcy5wcm9kO1xuICB9XG59O1xuZnVuY3Rpb24gX3QoZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke2V9YCk7XG59XG5jb25zdCBNdCA9IChlLCB0KSA9PiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbcl0pID0+ICF0LmluY2x1ZGVzKHIpKSksICQgPSAoKSA9PiB7XG4gIGlmICghKHR5cGVvZiB3aW5kb3cgPiBcInVcIikpXG4gICAgcmV0dXJuIHdpbmRvdztcbn0sIEt0ID0gbmV3IG50KCksIFRyID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCIsIFRpID0gMywgUmkgPSAzLCBOaSA9IDFlMywgeyBsb2dfXzogaHQgfSA9IEkoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgRmkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGh0KFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0sIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBodChcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIiksIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpLCAodCA9ICQoKSkgPT0gbnVsbCB8fCB0LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHIgPSAkKCkpID09IG51bGwgfHwgci5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KHQsIHIsIG4pIHtcbiAgICBjb25zdCBhID0ge1xuICAgICAgZXZlbnROYW1lOiB0LFxuICAgICAgcHJvcGVydGllczogciB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBuIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IGEudGltZXN0YW1wLCB0aGlzLnF1ZXVlLnB1c2goYSksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCksIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IChyID0gKHQgPSAkKCkpID09IG51bGwgPyB2b2lkIDAgOiB0LmxvY2FsU3RvcmFnZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2V0SXRlbShUcik7XG4gICAgICBuICYmICh0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShuKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICB2YXIgdDtcbiAgICAodCA9ICQoKSkgPT0gbnVsbCB8fCB0LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFRyLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3QgdCA9ICQoKTtcbiAgICB0ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQgJiYgKHRoaXMuYmF0Y2hUaW1lb3V0ID0gdC5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCBOaSkpO1xuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICB2YXIgdDtcbiAgICB0aGlzLmJhdGNoVGltZW91dCAmJiAoKHQgPSAkKCkpID09IG51bGwgfHwgdC5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwpLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAhbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCB8fCAodGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMCwgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSkpO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCB0ID0gS3QuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIXQpIHtcbiAgICAgIGh0KFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIFJpKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IHtcbiAgICAgICAgZXZlbnRzOiByLm1hcCgobCkgPT4gKHtcbiAgICAgICAgICBldmVudF9uYW1lOiBsLmV2ZW50TmFtZSxcbiAgICAgICAgICBkZXZpY2VfdG9rZW46IHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi50LFxuICAgICAgICAgICAgLi4ubC5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbm9uY2U6IGwubm9uY2UsXG4gICAgICAgICAgICBkYXRldGltZTogbC5kYXRldGltZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbC50aW1lc3RhbXAsXG4gICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogbC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiB0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAuLi5sLnByb3BlcnRpZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICAgfSwgYSA9IElpKHQuZW52aXJvbm1lbnQpLCBvID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIGEpO1xuICAgICAgKGF3YWl0IGZldGNoKG8udG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkobiksXG4gICAgICAgIGtlZXBhbGl2ZTogITBcbiAgICAgICAgLy8gVG8gc2VuZCBldmVudHMgZXZlbiBpZiB0aGUgcGFnZSBpcyB1bmxvYWRlZFxuICAgICAgfSkpLm9rID8gKHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHIubGVuZ3RoKSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKSkgOiB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKHIpO1xuICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgIGh0KFwiRXJyb3Igc2VuZGluZyBtZXRyaWNzIGJhdGNoOlwiLCBuKSwgdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChyKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRmFpbGVkQmF0Y2godCkge1xuICAgIHQuZm9yRWFjaCgobikgPT4ge1xuICAgICAgbi5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCByID0gdC5maWx0ZXIoKG4pID0+IG4uYXR0ZW1wdENvdW50IDwgVGkpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKHQubGVuZ3RoKSwgdGhpcy5xdWV1ZSA9IFsuLi5yLCAuLi50aGlzLnF1ZXVlXSwgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgfVxuICBjbGVhbnVwKCkge1xuICAgIHZhciB0LCByO1xuICAgICh0ID0gJCgpKSA9PSBudWxsIHx8IHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm9mZmxpbmVcIiwgdGhpcy5vZmZsaW5lTGlzdGVuZXIpLCAociA9ICQoKSkgPT0gbnVsbCB8fCByLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lciksIHRoaXMuY2FuY2VsQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbn1cbmNvbnN0IG5yID0gbmV3IEZpKCksIGcgPSAoZSwgdCwgcikgPT4ge1xuICBuci5hZGRFdmVudChlLCB0LCByKTtcbn0sIE1pID0gKCkgPT4ge1xuICBuci5wcm9jZXNzUXVldWUoKTtcbn0sIHZuID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGVlKGUucmVhc29uKTtcbiAgZyhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogZS5yZWFzb25cbiAgfSk7XG59LCBibiA9IChlKSA9PiB7XG4gIHZhciByLCBuO1xuICBjb25zdCB0ID0gZWUoZS5lcnJvcik7XG4gIGcoXCJ1bmNhdWdodF9lcnJvclwiLCB7XG4gICAgZXJyb3JfbWVzc2FnZTogdCxcbiAgICBlcnJvcl9uYW1lOiAociA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiByLm5hbWUsXG4gICAgZXJyb3Jfc3RhY2s6IChuID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IG4uc3RhY2ssXG4gICAgZmlsZV9uYW1lOiBlLmZpbGVuYW1lLFxuICAgIGxpbmVfbnVtYmVyOiBlLmxpbmVubyxcbiAgICBjb2x1bW5fbnVtYmVyOiBlLmNvbG5vXG4gIH0pO1xufTtcbmxldCBBdCA9IG51bGw7XG5jb25zdCBMaSA9IGFzeW5jICgpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPiBcInVcIikgcmV0dXJuIG51bGw7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEF0ID0gKGF3YWl0IGltcG9ydCgnLi9saWZlY3ljbGUtQmpRLTdHTG0tIX57MDAzfX4uanMnKSkuZGVmYXVsdCwgQXQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIGxvYWQgcGFnZS1saWZlY3ljbGU6XCIsIGUpLCBudWxsO1xuICB9XG59LCBFbiA9IChlKSA9PiB7XG4gIGcoXCJwYWdlX2xpZmVjeWNsZV9zdGF0ZV9jaGFuZ2VcIiwge1xuICAgIG9sZF9zdGF0ZTogZS5vbGRTdGF0ZSxcbiAgICBuZXdfc3RhdGU6IGUubmV3U3RhdGVcbiAgfSksIChlLm5ld1N0YXRlID09PSBcImhpZGRlblwiIHx8IGUubmV3U3RhdGUgPT09IFwicGFzc2l2ZVwiKSAmJiBuci5wcm9jZXNzUXVldWUoKTtcbn0sIERpID0gYXN5bmMgKCkgPT4ge1xuICB2YXIgdCwgcjtcbiAgKHQgPSAkKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgYm4pLCAociA9ICQoKSkgPT0gbnVsbCB8fCByLmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgdm4pO1xuICBjb25zdCBlID0gYXdhaXQgTGkoKTtcbiAgZSAmJiBlLmFkZEV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLCBFbik7XG59LCB4aSA9IGFzeW5jICgpID0+IHtcbiAgdmFyIGUsIHQ7XG4gIChlID0gJCgpKSA9PSBudWxsIHx8IGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIGJuKSwgKHQgPSAkKCkpID09IG51bGwgfHwgdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIHZuKSwgJCgpICYmIEF0ICYmIEF0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdGF0ZWNoYW5nZVwiLCBFbik7XG59LCBPaSA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIFVpID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIGppID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgTHQgPSBhc3luYyAoZSkgPT4ge1xuICBmb3IgKGxldCByID0gMDsgciA8IDEwOyByKyspXG4gICAgUnIoKSB8fCBhd2FpdCBEdCg1MDApO1xuICBpZiAoIVJyKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKGUpO1xufSwgJGkgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgTHQoZSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHIuZWxlbWVudHModCksXG4gICAgc3RyaXBlOiByXG4gIH07XG59LCBHaSA9IGFzeW5jIChlLCB0LCByLCBuLCBhKSA9PiB7XG4gIGNvbnN0IG8gPSBhd2FpdCBMdChlKSwgcyA9IGppW3IudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gby5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHMsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHQsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogITAsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6ICEwLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXVxuICB9KTtcbn0sIER0ID0gKGUpID0+IG5ldyBQcm9taXNlKCh0KSA9PiB7XG4gIHNldFRpbWVvdXQodCwgZSk7XG59KSwgUnIgPSAoKSA9PiBcIlN0cmlwZVwiIGluIHdpbmRvdywgVmkgPSBhc3luYyAoZSkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgdHJ5IHtcbiAgICBlLm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCBuKSwgdChuKTtcbiAgICB9KSwgZS5vbihcInRva2VuXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCBuKTtcbiAgICB9KSwgZS5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICByKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICByKG4pO1xuICB9XG59KSwgcWkgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAoIWUuc3RyaXBlX3BrIHx8ICFlLmNsaWVudF9zZWNyZXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgY29uc3QgbiA9IGF3YWl0IChhd2FpdCBMdChlLnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAoZS5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKG4uZXJyb3IpXG4gICAgdGhyb3cgdC5jb21wbGV0ZShcImZhaWxcIiksIG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7bi5lcnJvci5tZXNzYWdlID8/IFwidW5rbm93blwifWApO1xuICByZXR1cm4gdC5jb21wbGV0ZShcInN1Y2Nlc3NcIiksIG47XG59LCB6aSA9IGFzeW5jIChlKSA9PiB7XG4gIHZhciBhLCBvLCBzLCBsO1xuICBjb25zdCByID0gYXdhaXQgKGF3YWl0IEx0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogZS5zdHJpcGVfcG1faWRcbiAgfSksIG4gPSAoYSA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBhLnN0YXR1cztcbiAgaWYgKG4gPT09IFwic3VjY2VlZGVkXCIpXG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCBlLnN0cmlwZV9wbV9pZCksIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIHIuc2V0dXBJbnRlbnQpO1xuICBlbHNlIHRocm93IG4gPT09IFwiY2FuY2VsZWRcIiA/IG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSA6IG5ldyBFcnJvcihcbiAgICBgJHsoKG8gPSByLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogby5tZXNzYWdlKSA/PyAoKGwgPSAocyA9IHIuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBzLmxhc3Rfc2V0dXBfZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBsLm1lc3NhZ2UpID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgKTtcbn07XG52YXIgSGkgPSB0eXBlb2YgZ2xvYmFsVGhpcyA9PSBcIm9iamVjdFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmID09IFwib2JqZWN0XCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyA9PSBcIm9iamVjdFwiID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCA9PSBcIm9iamVjdFwiID8gZ2xvYmFsIDoge30sIE5lID0gXCIxLjkuMFwiLCBOciA9IC9eKFxcZCspXFwuKFxcZCspXFwuKFxcZCspKC0oLispKT8kLztcbmZ1bmN0aW9uIEJpKGUpIHtcbiAgdmFyIHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbZV0pLCByID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgbiA9IGUubWF0Y2goTnIpO1xuICBpZiAoIW4pXG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH07XG4gIHZhciBhID0ge1xuICAgIG1ham9yOiArblsxXSxcbiAgICBtaW5vcjogK25bMl0sXG4gICAgcGF0Y2g6ICtuWzNdLFxuICAgIHByZXJlbGVhc2U6IG5bNF1cbiAgfTtcbiAgaWYgKGEucHJlcmVsZWFzZSAhPSBudWxsKVxuICAgIHJldHVybiBmdW5jdGlvbihjKSB7XG4gICAgICByZXR1cm4gYyA9PT0gZTtcbiAgICB9O1xuICBmdW5jdGlvbiBvKGwpIHtcbiAgICByZXR1cm4gci5hZGQobCksICExO1xuICB9XG4gIGZ1bmN0aW9uIHMobCkge1xuICAgIHJldHVybiB0LmFkZChsKSwgITA7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKGMpIHtcbiAgICBpZiAodC5oYXMoYykpXG4gICAgICByZXR1cm4gITA7XG4gICAgaWYgKHIuaGFzKGMpKVxuICAgICAgcmV0dXJuICExO1xuICAgIHZhciB1ID0gYy5tYXRjaChOcik7XG4gICAgaWYgKCF1KVxuICAgICAgcmV0dXJuIG8oYyk7XG4gICAgdmFyIGQgPSB7XG4gICAgICBtYWpvcjogK3VbMV0sXG4gICAgICBtaW5vcjogK3VbMl0sXG4gICAgICBwYXRjaDogK3VbM10sXG4gICAgICBwcmVyZWxlYXNlOiB1WzRdXG4gICAgfTtcbiAgICByZXR1cm4gZC5wcmVyZWxlYXNlICE9IG51bGwgfHwgYS5tYWpvciAhPT0gZC5tYWpvciA/IG8oYykgOiBhLm1ham9yID09PSAwID8gYS5taW5vciA9PT0gZC5taW5vciAmJiBhLnBhdGNoIDw9IGQucGF0Y2ggPyBzKGMpIDogbyhjKSA6IGEubWlub3IgPD0gZC5taW5vciA/IHMoYykgOiBvKGMpO1xuICB9O1xufVxudmFyIFlpID0gQmkoTmUpLCBKaSA9IE5lLnNwbGl0KFwiLlwiKVswXSwgc3QgPSBTeW1ib2wuZm9yKFwib3BlbnRlbGVtZXRyeS5qcy5hcGkuXCIgKyBKaSksIGN0ID0gSGk7XG5mdW5jdGlvbiBvcihlLCB0LCByLCBuKSB7XG4gIHZhciBhO1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAhMSk7XG4gIHZhciBvID0gY3Rbc3RdID0gKGEgPSBjdFtzdF0pICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiB7XG4gICAgdmVyc2lvbjogTmVcbiAgfTtcbiAgaWYgKCFuICYmIG9bZV0pIHtcbiAgICB2YXIgcyA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogQXR0ZW1wdGVkIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gb2YgQVBJOiBcIiArIGUpO1xuICAgIHJldHVybiByLmVycm9yKHMuc3RhY2sgfHwgcy5tZXNzYWdlKSwgITE7XG4gIH1cbiAgaWYgKG8udmVyc2lvbiAhPT0gTmUpIHtcbiAgICB2YXIgcyA9IG5ldyBFcnJvcihcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0cmF0aW9uIG9mIHZlcnNpb24gdlwiICsgby52ZXJzaW9uICsgXCIgZm9yIFwiICsgZSArIFwiIGRvZXMgbm90IG1hdGNoIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBBUEkgdlwiICsgTmUpO1xuICAgIHJldHVybiByLmVycm9yKHMuc3RhY2sgfHwgcy5tZXNzYWdlKSwgITE7XG4gIH1cbiAgcmV0dXJuIG9bZV0gPSB0LCByLmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBSZWdpc3RlcmVkIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBOZSArIFwiLlwiKSwgITA7XG59XG5mdW5jdGlvbiBsdChlKSB7XG4gIHZhciB0LCByLCBuID0gKHQgPSBjdFtzdF0pID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQudmVyc2lvbjtcbiAgaWYgKCEoIW4gfHwgIVlpKG4pKSlcbiAgICByZXR1cm4gKHIgPSBjdFtzdF0pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJbZV07XG59XG5mdW5jdGlvbiBhcihlLCB0KSB7XG4gIHQuZGVidWcoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFVucmVnaXN0ZXJpbmcgYSBnbG9iYWwgZm9yIFwiICsgZSArIFwiIHZcIiArIE5lICsgXCIuXCIpO1xuICB2YXIgciA9IGN0W3N0XTtcbiAgciAmJiBkZWxldGUgcltlXTtcbn1cbnZhciBXaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChsKSB7XG4gICAgcyA9IHsgZXJyb3I6IGwgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufSwgWmkgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBvOyBuIDwgYTsgbisrKVxuICAgIChvIHx8ICEobiBpbiB0KSkgJiYgKG8gfHwgKG8gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIG9bbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KG8gfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgS2kgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0aGlzLl9uYW1lc3BhY2UgPSB0Lm5hbWVzcGFjZSB8fCBcIkRpYWdDb21wb25lbnRMb2dnZXJcIjtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmRlYnVnID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFplKFwiZGVidWdcIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBaZShcImVycm9yXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUuaW5mbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBaZShcImluZm9cIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS53YXJuID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIFplKFwid2FyblwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLnZlcmJvc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gWmUoXCJ2ZXJib3NlXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gWmUoZSwgdCwgcikge1xuICB2YXIgbiA9IGx0KFwiZGlhZ1wiKTtcbiAgaWYgKG4pXG4gICAgcmV0dXJuIHIudW5zaGlmdCh0KSwgbltlXS5hcHBseShuLCBaaShbXSwgV2kociksICExKSk7XG59XG52YXIgWDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLkVSUk9SID0gMzBdID0gXCJFUlJPUlwiLCBlW2UuV0FSTiA9IDUwXSA9IFwiV0FSTlwiLCBlW2UuSU5GTyA9IDYwXSA9IFwiSU5GT1wiLCBlW2UuREVCVUcgPSA3MF0gPSBcIkRFQlVHXCIsIGVbZS5WRVJCT1NFID0gODBdID0gXCJWRVJCT1NFXCIsIGVbZS5BTEwgPSA5OTk5XSA9IFwiQUxMXCI7XG59KShYIHx8IChYID0ge30pKTtcbmZ1bmN0aW9uIFFpKGUsIHQpIHtcbiAgZSA8IFguTk9ORSA/IGUgPSBYLk5PTkUgOiBlID4gWC5BTEwgJiYgKGUgPSBYLkFMTCksIHQgPSB0IHx8IHt9O1xuICBmdW5jdGlvbiByKG4sIGEpIHtcbiAgICB2YXIgbyA9IHRbbl07XG4gICAgcmV0dXJuIHR5cGVvZiBvID09IFwiZnVuY3Rpb25cIiAmJiBlID49IGEgPyBvLmJpbmQodCkgOiBmdW5jdGlvbigpIHtcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgZXJyb3I6IHIoXCJlcnJvclwiLCBYLkVSUk9SKSxcbiAgICB3YXJuOiByKFwid2FyblwiLCBYLldBUk4pLFxuICAgIGluZm86IHIoXCJpbmZvXCIsIFguSU5GTyksXG4gICAgZGVidWc6IHIoXCJkZWJ1Z1wiLCBYLkRFQlVHKSxcbiAgICB2ZXJib3NlOiByKFwidmVyYm9zZVwiLCBYLlZFUkJPU0UpXG4gIH07XG59XG52YXIgWGkgPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgYSwgbyA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEoYSA9IG4ubmV4dCgpKS5kb25lOyApIG8ucHVzaChhLnZhbHVlKTtcbiAgfSBjYXRjaCAobCkge1xuICAgIHMgPSB7IGVycm9yOiBsIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGEgJiYgIWEuZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbztcbn0sIGVzID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGEgPSB0Lmxlbmd0aCwgbzsgbiA8IGE7IG4rKylcbiAgICAobyB8fCAhKG4gaW4gdCkpICYmIChvIHx8IChvID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBvW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChvIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIHRzID0gXCJkaWFnXCIsIEl0ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICBmdW5jdGlvbiB0KGEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZvciAodmFyIG8gPSBbXSwgcyA9IDA7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspXG4gICAgICAgICAgICBvW3NdID0gYXJndW1lbnRzW3NdO1xuICAgICAgICAgIHZhciBsID0gbHQoXCJkaWFnXCIpO1xuICAgICAgICAgIGlmIChsKVxuICAgICAgICAgICAgcmV0dXJuIGxbYV0uYXBwbHkobCwgZXMoW10sIFhpKG8pLCAhMSkpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gZnVuY3Rpb24oYSwgbykge1xuICAgICAgICB2YXIgcywgbCwgYztcbiAgICAgICAgaWYgKG8gPT09IHZvaWQgMCAmJiAobyA9IHsgbG9nTGV2ZWw6IFguSU5GTyB9KSwgYSA9PT0gcikge1xuICAgICAgICAgIHZhciB1ID0gbmV3IEVycm9yKFwiQ2Fubm90IHVzZSBkaWFnIGFzIHRoZSBsb2dnZXIgZm9yIGl0c2VsZi4gUGxlYXNlIHVzZSBhIERpYWdMb2dnZXIgaW1wbGVtZW50YXRpb24gbGlrZSBDb25zb2xlRGlhZ0xvZ2dlciBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvblwiKTtcbiAgICAgICAgICByZXR1cm4gci5lcnJvcigocyA9IHUuc3RhY2spICE9PSBudWxsICYmIHMgIT09IHZvaWQgMCA/IHMgOiB1Lm1lc3NhZ2UpLCAhMTtcbiAgICAgICAgfVxuICAgICAgICB0eXBlb2YgbyA9PSBcIm51bWJlclwiICYmIChvID0ge1xuICAgICAgICAgIGxvZ0xldmVsOiBvXG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgZCA9IGx0KFwiZGlhZ1wiKSwgbSA9IFFpKChsID0gby5sb2dMZXZlbCkgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IFguSU5GTywgYSk7XG4gICAgICAgIGlmIChkICYmICFvLnN1cHByZXNzT3ZlcnJpZGVNZXNzYWdlKSB7XG4gICAgICAgICAgdmFyIF8gPSAoYyA9IG5ldyBFcnJvcigpLnN0YWNrKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogXCI8ZmFpbGVkIHRvIGdlbmVyYXRlIHN0YWNrdHJhY2U+XCI7XG4gICAgICAgICAgZC53YXJuKFwiQ3VycmVudCBsb2dnZXIgd2lsbCBiZSBvdmVyd3JpdHRlbiBmcm9tIFwiICsgXyksIG0ud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgb3ZlcndyaXRlIG9uZSBhbHJlYWR5IHJlZ2lzdGVyZWQgZnJvbSBcIiArIF8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcihcImRpYWdcIiwgbSwgciwgITApO1xuICAgICAgfTtcbiAgICAgIHIuc2V0TG9nZ2VyID0gbiwgci5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGFyKHRzLCByKTtcbiAgICAgIH0sIHIuY3JlYXRlQ29tcG9uZW50TG9nZ2VyID0gZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gbmV3IEtpKGEpO1xuICAgICAgfSwgci52ZXJib3NlID0gdChcInZlcmJvc2VcIiksIHIuZGVidWcgPSB0KFwiZGVidWdcIiksIHIuaW5mbyA9IHQoXCJpbmZvXCIpLCByLndhcm4gPSB0KFwid2FyblwiKSwgci5lcnJvciA9IHQoXCJlcnJvclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGUuaW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gcnMoZSkge1xuICByZXR1cm4gU3ltYm9sLmZvcihlKTtcbn1cbnZhciBucyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICByLl9jdXJyZW50Q29udGV4dCA9IHQgPyBuZXcgTWFwKHQpIDogLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgci5nZXRWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIHIuX2N1cnJlbnRDb250ZXh0LmdldChuKTtcbiAgICAgIH0sIHIuc2V0VmFsdWUgPSBmdW5jdGlvbihuLCBhKSB7XG4gICAgICAgIHZhciBvID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gby5fY3VycmVudENvbnRleHQuc2V0KG4sIGEpLCBvO1xuICAgICAgfSwgci5kZWxldGVWYWx1ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgdmFyIGEgPSBuZXcgZShyLl9jdXJyZW50Q29udGV4dCk7XG4gICAgICAgIHJldHVybiBhLl9jdXJyZW50Q29udGV4dC5kZWxldGUobiksIGE7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfSgpXG4pLCBvcyA9IG5ldyBucygpLCBhcyA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBhLCBvID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShhID0gbi5uZXh0KCkpLmRvbmU7ICkgby5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChsKSB7XG4gICAgcyA9IHsgZXJyb3I6IGwgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBvO1xufSwgaXMgPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHQubGVuZ3RoLCBvOyBuIDwgYTsgbisrKVxuICAgIChvIHx8ICEobiBpbiB0KSkgJiYgKG8gfHwgKG8gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIG9bbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KG8gfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgc3MgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG9zO1xuICAgIH0sIGUucHJvdG90eXBlLndpdGggPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBmb3IgKHZhciBhID0gW10sIG8gPSAzOyBvIDwgYXJndW1lbnRzLmxlbmd0aDsgbysrKVxuICAgICAgICBhW28gLSAzXSA9IGFyZ3VtZW50c1tvXTtcbiAgICAgIHJldHVybiByLmNhbGwuYXBwbHkociwgaXMoW25dLCBhcyhhKSwgITEpKTtcbiAgICB9LCBlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlO1xuICB9KClcbiksIGNzID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIGEsIG8gPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBvLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGwpIHtcbiAgICBzID0geyBlcnJvcjogbCB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG87XG59LCBscyA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gdC5sZW5ndGgsIG87IG4gPCBhOyBuKyspXG4gICAgKG8gfHwgIShuIGluIHQpKSAmJiAobyB8fCAobyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgb1tuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQobyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBxdCA9IFwiY29udGV4dFwiLCB1cyA9IG5ldyBzcygpLCBpciA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlIHx8ICh0aGlzLl9pbnN0YW5jZSA9IG5ldyBlKCkpLCB0aGlzLl9pbnN0YW5jZTtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRHbG9iYWxDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiBvcihxdCwgdCwgSXQuaW5zdGFuY2UoKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYWN0aXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5hY3RpdmUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgZm9yICh2YXIgYSwgbyA9IFtdLCBzID0gMzsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKylcbiAgICAgICAgb1tzIC0gM10gPSBhcmd1bWVudHNbc107XG4gICAgICByZXR1cm4gKGEgPSB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpKS53aXRoLmFwcGx5KGEsIGxzKFt0LCByLCBuXSwgY3MobyksICExKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmJpbmQodCwgcik7XG4gICAgfSwgZS5wcm90b3R5cGUuX2dldENvbnRleHRNYW5hZ2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbHQocXQpIHx8IHVzO1xuICAgIH0sIGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuZGlzYWJsZSgpLCBhcihxdCwgSXQuaW5zdGFuY2UoKSk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBRdDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT05FID0gMF0gPSBcIk5PTkVcIiwgZVtlLlNBTVBMRUQgPSAxXSA9IFwiU0FNUExFRFwiO1xufSkoUXQgfHwgKFF0ID0ge30pKTtcbnZhciBQbiA9IFwiMDAwMDAwMDAwMDAwMDAwMFwiLCBTbiA9IFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIiwgZHMgPSB7XG4gIHRyYWNlSWQ6IFNuLFxuICBzcGFuSWQ6IFBuLFxuICB0cmFjZUZsYWdzOiBRdC5OT05FXG59LCBvdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHQgPT09IHZvaWQgMCAmJiAodCA9IGRzKSwgdGhpcy5fc3BhbkNvbnRleHQgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3BhbkNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zcGFuQ29udGV4dDtcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRBdHRyaWJ1dGVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkRXZlbnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRMaW5rID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXRTdGF0dXMgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS51cGRhdGVOYW1lID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24odCkge1xuICAgIH0sIGUucHJvdG90eXBlLmlzUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gITE7XG4gICAgfSwgZS5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24odCwgcikge1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgc3IgPSBycyhcIk9wZW5UZWxlbWV0cnkgQ29udGV4dCBLZXkgU1BBTlwiKTtcbmZ1bmN0aW9uIGNyKGUpIHtcbiAgcmV0dXJuIGUuZ2V0VmFsdWUoc3IpIHx8IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIHBzKCkge1xuICByZXR1cm4gY3IoaXIuZ2V0SW5zdGFuY2UoKS5hY3RpdmUoKSk7XG59XG5mdW5jdGlvbiBscihlLCB0KSB7XG4gIHJldHVybiBlLnNldFZhbHVlKHNyLCB0KTtcbn1cbmZ1bmN0aW9uIF9zKGUpIHtcbiAgcmV0dXJuIGUuZGVsZXRlVmFsdWUoc3IpO1xufVxuZnVuY3Rpb24gbXMoZSwgdCkge1xuICByZXR1cm4gbHIoZSwgbmV3IG90KHQpKTtcbn1cbmZ1bmN0aW9uIENuKGUpIHtcbiAgdmFyIHQ7XG4gIHJldHVybiAodCA9IGNyKGUpKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnNwYW5Db250ZXh0KCk7XG59XG52YXIgZnMgPSAvXihbMC05YS1mXXszMn0pJC9pLCB5cyA9IC9eWzAtOWEtZl17MTZ9JC9pO1xuZnVuY3Rpb24gaHMoZSkge1xuICByZXR1cm4gZnMudGVzdChlKSAmJiBlICE9PSBTbjtcbn1cbmZ1bmN0aW9uIGdzKGUpIHtcbiAgcmV0dXJuIHlzLnRlc3QoZSkgJiYgZSAhPT0gUG47XG59XG5mdW5jdGlvbiBrbihlKSB7XG4gIHJldHVybiBocyhlLnRyYWNlSWQpICYmIGdzKGUuc3BhbklkKTtcbn1cbmZ1bmN0aW9uIHdzKGUpIHtcbiAgcmV0dXJuIG5ldyBvdChlKTtcbn1cbnZhciB6dCA9IGlyLmdldEluc3RhbmNlKCksIEFuID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICBuID09PSB2b2lkIDAgJiYgKG4gPSB6dC5hY3RpdmUoKSk7XG4gICAgICB2YXIgYSA9ICEhKHIgIT0gbnVsbCAmJiByLnJvb3QpO1xuICAgICAgaWYgKGEpXG4gICAgICAgIHJldHVybiBuZXcgb3QoKTtcbiAgICAgIHZhciBvID0gbiAmJiBDbihuKTtcbiAgICAgIHJldHVybiB2cyhvKSAmJiBrbihvKSA/IG5ldyBvdChvKSA6IG5ldyBvdCgpO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIGEpIHtcbiAgICAgIHZhciBvLCBzLCBsO1xuICAgICAgaWYgKCEoYXJndW1lbnRzLmxlbmd0aCA8IDIpKSB7XG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDIgPyBsID0gciA6IGFyZ3VtZW50cy5sZW5ndGggPT09IDMgPyAobyA9IHIsIGwgPSBuKSA6IChvID0gciwgcyA9IG4sIGwgPSBhKTtcbiAgICAgICAgdmFyIGMgPSBzID8/IHp0LmFjdGl2ZSgpLCB1ID0gdGhpcy5zdGFydFNwYW4odCwgbywgYyksIGQgPSBscihjLCB1KTtcbiAgICAgICAgcmV0dXJuIHp0LndpdGgoZCwgbCwgdm9pZCAwLCB1KTtcbiAgICAgIH1cbiAgICB9LCBlO1xuICB9KClcbik7XG5mdW5jdGlvbiB2cyhlKSB7XG4gIHJldHVybiB0eXBlb2YgZSA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBlLnNwYW5JZCA9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBlLnRyYWNlSWQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZS50cmFjZUZsYWdzID09IFwibnVtYmVyXCI7XG59XG52YXIgYnMgPSBuZXcgQW4oKSwgRXMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0LCByLCBuLCBhKSB7XG4gICAgICB0aGlzLl9wcm92aWRlciA9IHQsIHRoaXMubmFtZSA9IHIsIHRoaXMudmVyc2lvbiA9IG4sIHRoaXMub3B0aW9ucyA9IGE7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zdGFydFNwYW4gPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2VyKCkuc3RhcnRTcGFuKHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLnN0YXJ0QWN0aXZlU3BhbiA9IGZ1bmN0aW9uKHQsIHIsIG4sIGEpIHtcbiAgICAgIHZhciBvID0gdGhpcy5fZ2V0VHJhY2VyKCk7XG4gICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShvLnN0YXJ0QWN0aXZlU3BhbiwgbywgYXJndW1lbnRzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0VHJhY2VyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fZGVsZWdhdGUpXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWxlZ2F0ZTtcbiAgICAgIHZhciB0ID0gdGhpcy5fcHJvdmlkZXIuZ2V0RGVsZWdhdGVUcmFjZXIodGhpcy5uYW1lLCB0aGlzLnZlcnNpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICByZXR1cm4gdCA/ICh0aGlzLl9kZWxlZ2F0ZSA9IHQsIHRoaXMuX2RlbGVnYXRlKSA6IGJzO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgUHMgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmdldFRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHJldHVybiBuZXcgQW4oKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFNzID0gbmV3IFBzKCksIEZyID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgYTtcbiAgICAgIHJldHVybiAoYSA9IHRoaXMuZ2V0RGVsZWdhdGVUcmFjZXIodCwgciwgbikpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiBuZXcgRXModGhpcywgdCwgciwgbik7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0O1xuICAgICAgcmV0dXJuICh0ID0gdGhpcy5fZGVsZWdhdGUpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBTcztcbiAgICB9LCBlLnByb3RvdHlwZS5zZXREZWxlZ2F0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX2RlbGVnYXRlID0gdDtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZVRyYWNlciA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIHZhciBhO1xuICAgICAgcmV0dXJuIChhID0gdGhpcy5fZGVsZWdhdGUpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGEuZ2V0VHJhY2VyKHQsIHIsIG4pO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgdXQ7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuSU5URVJOQUwgPSAwXSA9IFwiSU5URVJOQUxcIiwgZVtlLlNFUlZFUiA9IDFdID0gXCJTRVJWRVJcIiwgZVtlLkNMSUVOVCA9IDJdID0gXCJDTElFTlRcIiwgZVtlLlBST0RVQ0VSID0gM10gPSBcIlBST0RVQ0VSXCIsIGVbZS5DT05TVU1FUiA9IDRdID0gXCJDT05TVU1FUlwiO1xufSkodXQgfHwgKHV0ID0ge30pKTtcbnZhciBDZTtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5VTlNFVCA9IDBdID0gXCJVTlNFVFwiLCBlW2UuT0sgPSAxXSA9IFwiT0tcIiwgZVtlLkVSUk9SID0gMl0gPSBcIkVSUk9SXCI7XG59KShDZSB8fCAoQ2UgPSB7fSkpO1xudmFyIFVlID0gaXIuZ2V0SW5zdGFuY2UoKSwgSHQgPSBcInRyYWNlXCIsIENzID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IEZyKCksIHRoaXMud3JhcFNwYW5Db250ZXh0ID0gd3MsIHRoaXMuaXNTcGFuQ29udGV4dFZhbGlkID0ga24sIHRoaXMuZGVsZXRlU3BhbiA9IF9zLCB0aGlzLmdldFNwYW4gPSBjciwgdGhpcy5nZXRBY3RpdmVTcGFuID0gcHMsIHRoaXMuZ2V0U3BhbkNvbnRleHQgPSBDbiwgdGhpcy5zZXRTcGFuID0gbHIsIHRoaXMuc2V0U3BhbkNvbnRleHQgPSBtcztcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsVHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgciA9IG9yKEh0LCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLCBJdC5pbnN0YW5jZSgpKTtcbiAgICAgIHJldHVybiByICYmIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIuc2V0RGVsZWdhdGUodCksIHI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyUHJvdmlkZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBsdChIdCkgfHwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlcjtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFjZXJQcm92aWRlcigpLmdldFRyYWNlcih0LCByKTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICBhcihIdCwgSXQuaW5zdGFuY2UoKSksIHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXIgPSBuZXcgRnIoKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFZlID0gQ3MuZ2V0SW5zdGFuY2UoKTtcbmNvbnN0IGtzID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IFZlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIGEgPSBVZS5hY3RpdmUoKSwgbyA9IG4uc3RhcnRTcGFuKFxuICAgIGBjZGUuJHt0LnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiB1dC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgLi4uZS50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUudHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KHQucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIGFcbiAgKTtcbiAgcmV0dXJuIFVlLndpdGgoVmUuc2V0U3BhbihhLCBvKSwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgcigpO1xuICAgICAgcmV0dXJuIG8uc2V0U3RhdHVzKHsgY29kZTogQ2UuT0sgfSksIHM7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgdGhyb3cgby5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBDZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogcyBpbnN0YW5jZW9mIEVycm9yID8gcy5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pLCBzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBvLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59LCBndCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBWZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBuID0gVWUuYWN0aXZlKCksIGEgPSByLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke2Uuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiB1dC5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogZS52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnJlZmVycmVyLFxuICAgICAgICAuLi5lLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IGUucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgblxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IG8gPSBhd2FpdCB0KCk7XG4gICAgcmV0dXJuIGEuc2V0U3RhdHVzKHsgY29kZTogQ2UuT0sgfSksIG87XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICBjb25zdCBzID0gbyBpbnN0YW5jZW9mIEVycm9yID8gby5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgYS5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogQ2UuRVJST1IsXG4gICAgICBtZXNzYWdlOiBzXG4gICAgfSksIG87XG4gIH0gZmluYWxseSB7XG4gICAgYS5lbmQoKTtcbiAgfVxufTtcbmNsYXNzIEluIGV4dGVuZHMgYm8ge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgY29uc3QgciA9IGAke3QubWVzc2FnZX1gO1xuICAgIHN1cGVyKHIpLCB0aGlzLnJlc3BvbnNlID0gdDtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgWSA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiBrcyhlLCB0LCBhc3luYyAoKSA9PiB7XG4gIG4gJiYgZyhuLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgYSA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgaWYgKElzKGEpKSB7XG4gICAgY29uc3QgbyA9IG5hdmlnYXRvci5jb25uZWN0aW9uO1xuICAgIHRocm93IGcoXCJjZGVfcmVzcG9uc2VfZXJyb3JcIiwge1xuICAgICAgZXJyb3JfbWVzc2FnZTogYS5tZXNzYWdlLFxuICAgICAgbWVzc2FnZV90eXBlOiB0LnR5cGUsXG4gICAgICB1c2VyX2FnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LFxuICAgICAgb25saW5lOiBuYXZpZ2F0b3Iub25MaW5lLFxuICAgICAgaGFzX2ZvY3VzOiBkb2N1bWVudC5oYXNGb2N1cygpLFxuICAgICAgaHJlZjogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICBkb2N1bWVudF92aXNpYmlsaXR5X3N0YXRlOiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUsXG4gICAgICBjb25uZWN0aW9uX2Rvd25saW5rOiBvID09IG51bGwgPyB2b2lkIDAgOiBvLmRvd25saW5rLFxuICAgICAgY29ubmVjdGlvbl9lZmZlY3RpdmVfdHlwZTogbyA9PSBudWxsID8gdm9pZCAwIDogby5lZmZlY3RpdmVUeXBlLFxuICAgICAgY29ubmVjdGlvbl9ydHQ6IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ucnR0LFxuICAgICAgY29ubmVjdGlvbl9zYXZlX2RhdGE6IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2F2ZURhdGFcbiAgICB9KSwgbmV3IEluKGEpO1xuICB9XG4gIGlmICghQXMoYSwgcikpIHtcbiAgICBjb25zdCBvID0gci5zYWZlUGFyc2UoYSk7XG4gICAgdGhyb3cgby5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByLCBcIkFjdHVhbDpcIiwgYSksIG8uZXJyb3IpO1xuICB9XG4gIHJldHVybiBuICYmIGcobiwge1xuICAgIC4uLmFcbiAgfSksIGE7XG59KSwgQXMgPSAoZSwgdCkgPT4gdC5zYWZlUGFyc2UoZSkuc3VjY2VzcywgSXMgPSAoZSkgPT4gb2Euc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIFRzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHQgfSwgb24pLCBNID0gYXN5bmMgKGUpID0+IGF3YWl0IFkoZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIGFuKSwgb2UgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgWShcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIGxuLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCBUbiA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBZKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiB0IH0sXG4gIGdhLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgUnMgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgciA9IGF3YWl0IFkoZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogdCB9LCBsbik7XG4gIHJldHVybiBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnJcbiAgfSksIHI7XG59LCBPID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIFdvLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIE5zID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiB0IH0sXG4gIHNuLFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIEZzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogdCB9LFxuICBKbyxcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgTXMgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgVHMoZSwge1xuICAgIHNlY3VyZV90b2tlbjogdCxcbiAgICBwcm9tb3Rpb25fY29kZTogclxuICB9KSwgYSA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgobCkgPT4gbC5jdXJyZW5jeSkpO1xuICBpZiAoYS5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2Euc2l6ZX1gKTtcbiAgY29uc3QgbyA9IGEudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIHMgPSBGYShuLnByZXZpZXcuaW52b2ljZXMubWFwKChsKSA9PiBsLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBvLFxuICAgIGFtb3VudEF0b206IHNcbiAgfTtcbn0sIGJlID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMCwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInByb21vQ29kZVwiKSAmJiAhbiAmJiAobiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJwcm9tb0NvZGVcIikpO1xuICAgIGNvbnN0IGEgPSBhd2FpdCBNcyhlLCB0LCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBhLmFtb3VudEF0b20sIGN1cnJlbmN5OiBhLmN1cnJlbmN5IH07XG4gIH1cbn0sIFJuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKGUuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGUudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBZKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHQgfSwgSG8pXG4gICAgKVxuICApO1xufSwgTXIgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgWShcbiAgZSxcbiAgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogdCB9LFxuICBpdCxcbiAgXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCJcbiksIExzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoZSwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHQgfSwgc24sIFwic2V0dXBfY2hlY2tvdXRcIiksIHVyID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoZSwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHQgfSwgaXQsIFwicGVyZm9ybV9jaGVja291dFwiKSwgTm4gPSAxZTMsIERzID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgY29uc29sZS5sb2codCk7XG4gIGNvbnN0IG8gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMCxcbiAgICB0aW1lb3V0OiBObixcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSkucHJvbWlzZSwgcyA9IGF3YWl0IFkobywgeyB0eXBlOiByIH0sIG4pO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBzKSwgcztcbn0sIHh0ID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFkoXG4gIGUsXG4gIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIHZhLFxuICBcInByZXBhcmVfcGF5bWVudF9mbG93XCJcbiksIEZuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IFkoXG4gICAgICBlLFxuICAgICAgeyB0eXBlOiBcImdldF9zdGFuZGFyZGl6ZWRfZXJyb3JfY29kZVwiLCBwYXlsb2FkOiB7IG1lc3NhZ2U6IHQgfSB9LFxuICAgICAgd2FcbiAgICApKS5lcnJvcl9jb2RlO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGdldFN0YW5kYXJkaXplZEVycm9yQ29kZTpcIiwgZWUocikpLCBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufSwgeHMgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgWShcbiAgZSxcbiAgeyB0eXBlOiBcInNldF91c2VyX2RldmljZV90b2tlblwiLCBwYXlsb2FkOiB7IGRldmljZV90b2tlbjogdCB9IH0sXG4gIGJhXG4pLCBPcyA9IGFzeW5jIChlKSA9PiB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8ICFlKSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IHsgdHlwZTogXCJwaW5nXCIgfSwgciA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgICBpZiAociAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHQpLCAhMTtcbiAgfVxufSwgVXMgPSAoZSwgdCkgPT4gISFlICYmIHQsIE1uID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCBMbiA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIiwgYXQgPSAzMiwganMgPSAxNiwgRG4gPSAxMCwgTHIgPSAyODE0NzQ5NzY3MTA2NTU7XG52YXIgRmU7XG4oZnVuY3Rpb24oZSkge1xuICBlLkJhc2UzMkluY29ycmVjdEVuY29kaW5nID0gXCJCMzJfRU5DX0lOVkFMSURcIiwgZS5EZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlciA9IFwiREVDX1RJTUVfQ0hBUlwiLCBlLkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCIsIGUuRW5jb2RlVGltZU5lZ2F0aXZlID0gXCJFTkNfVElNRV9ORUdcIiwgZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiLCBlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCIsIGUuUFJOR0RldGVjdEZhaWx1cmUgPSBcIlBSTkdfREVURUNUXCIsIGUuVUxJREludmFsaWQgPSBcIlVMSURfSU5WQUxJRFwiLCBlLlVuZXhwZWN0ZWQgPSBcIlVORVhQRUNURURcIiwgZS5VVUlESW52YWxpZCA9IFwiVVVJRF9JTlZBTElEXCI7XG59KShGZSB8fCAoRmUgPSB7fSkpO1xuY2xhc3MgWGUgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHQsIHIpIHtcbiAgICBzdXBlcihgJHtyfSAoJHt0fSlgKSwgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIiwgdGhpcy5jb2RlID0gdDtcbiAgfVxufVxuZnVuY3Rpb24gJHMoZSkge1xuICBsZXQgdCA9IE1hdGguZmxvb3IoZSgpICogYXQpO1xuICByZXR1cm4gdCA9PT0gYXQgJiYgKHQgPSBhdCAtIDEpLCBMbi5jaGFyQXQodCk7XG59XG5mdW5jdGlvbiBHcyhlKSB7XG4gIGNvbnN0IHQgPSBWcygpLCByID0gdCAmJiAodC5jcnlwdG8gfHwgdC5tc0NyeXB0bykgfHwgbnVsbDtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5nZXRSYW5kb21WYWx1ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHIuZ2V0UmFuZG9tVmFsdWVzKG4pLCBuWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2YgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucmFuZG9tQnl0ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4gci5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDI1NTtcbiAgdGhyb3cgbmV3IFhlKEZlLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIFZzKCkge1xuICByZXR1cm4gSHMoKSA/IHNlbGYgOiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsIDwgXCJ1XCIgPyBnbG9iYWwgOiB0eXBlb2YgZ2xvYmFsVGhpcyA8IFwidVwiID8gZ2xvYmFsVGhpcyA6IG51bGw7XG59XG5mdW5jdGlvbiBxcyhlLCB0KSB7XG4gIGxldCByID0gXCJcIjtcbiAgZm9yICg7IGUgPiAwOyBlLS0pXG4gICAgciA9ICRzKHQpICsgcjtcbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiB6cyhlLCB0ID0gRG4pIHtcbiAgaWYgKGlzTmFOKGUpKVxuICAgIHRocm93IG5ldyBYZShGZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7ZX1gKTtcbiAgaWYgKGUgPiBMcilcbiAgICB0aHJvdyBuZXcgWGUoRmUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7THJ9OiAke2V9YCk7XG4gIGlmIChlIDwgMClcbiAgICB0aHJvdyBuZXcgWGUoRmUuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke2V9YCk7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGUpID09PSAhMSlcbiAgICB0aHJvdyBuZXcgWGUoRmUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7ZX1gKTtcbiAgbGV0IHIsIG4gPSBcIlwiO1xuICBmb3IgKGxldCBhID0gdDsgYSA+IDA7IGEtLSlcbiAgICByID0gZSAlIGF0LCBuID0gTG4uY2hhckF0KHIpICsgbiwgZSA9IChlIC0gcikgLyBhdDtcbiAgcmV0dXJuIG47XG59XG5mdW5jdGlvbiBIcygpIHtcbiAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA8IFwidVwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbmZ1bmN0aW9uIEJzKGUsIHQpIHtcbiAgY29uc3QgciA9IEdzKCksIG4gPSBEYXRlLm5vdygpO1xuICByZXR1cm4genMobiwgRG4pICsgcXMoanMsIHIpO1xufVxuY29uc3QgeG4gPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIiwgT24gPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKHIpID0+IHIuaW5jbHVkZXMoeG4pKTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIGUuc3BsaXQoXCI9XCIpWzFdO1xuICBjb25zdCB0ID0gQnMoKTtcbiAgcmV0dXJuIFlzKHQpLCB0O1xufSwgWXMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIHQuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpICsgMSksIGRvY3VtZW50LmNvb2tpZSA9IGAke3hufT0ke2V9OyBwYXRoPS87IGV4cGlyZXM9JHt0LnRvVVRDU3RyaW5nKCl9YDtcbn0sIEpzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGEgPSBXci5wYXJzZShyKTtcbiAgICAgIEFycmF5LmlzQXJyYXkobikgPyB0W2FdID0gbiA6IEFycmF5LmlzQXJyYXkobi5fZXJyb3JzKSAmJiAodFthXSA9IG4uX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgdDtcbn0sIGogPSAoZSwgdCkgPT4gQXJyYXkuZnJvbShlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChhLCBvKSA9PiB7XG4gIGNvbnN0IHMgPSBvLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgaWYgKCFzKSByZXR1cm4gYTtcbiAgY29uc3QgbCA9IG8udHlwZSA9PT0gXCJjaGVja2JveFwiID8gby5jaGVja2VkIDogby52YWx1ZTtcbiAgcmV0dXJuIHsgLi4uYSwgW3NdOiBsIH07XG59LCB7fSksIFdzID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gVm8ucGFyc2UoZSk7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCBlLCB0KSwgdDtcbiAgfVxufSwgWnMgPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSB2NCgpLnNwbGl0KFwiLVwiKVswXTtcbiAgcmV0dXJuIHtcbiAgICBmaXJzdE5hbWU6IGB4eF8ke2V9YCxcbiAgICBsYXN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGVtYWlsOiBgeHhfJHtlfUBlbWFpbC5jb21gLFxuICAgIHppcENvZGU6IGB4eF8ke2V9YCxcbiAgICBjb3VudHJ5OiBcIlVTXCJcbiAgfTtcbn0sIEggPSAoZSkgPT4gKHtcbiAgbGluZTE6IGVbcC5MSU5FMV0sXG4gIGxpbmUyOiBlW3AuTElORTJdLFxuICBsaW5lMzogZVtwLkxJTkUzXSxcbiAgY2l0eTogZVtwLkNJVFldLFxuICBzdGF0ZTogZVtwLlNUQVRFXSxcbiAgY291bnRyeTogZVtwLkNPVU5UUlldLFxuICB6aXBfY29kZTogZVtwLlpJUF9DT0RFXVxufSksIFEgPSAoZSwgdCkgPT4ge1xuICBpZiAodC5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcylcbiAgICByZXR1cm4ge1xuICAgICAgbGluZTE6IGVbcC5TSElQUElOR19MSU5FMV0sXG4gICAgICBsaW5lMjogZVtwLlNISVBQSU5HX0xJTkUyXSxcbiAgICAgIGxpbmUzOiBlW3AuU0hJUFBJTkdfTElORTNdLFxuICAgICAgY2l0eTogZVtwLlNISVBQSU5HX0NJVFldLFxuICAgICAgc3RhdGU6IGVbcC5TSElQUElOR19TVEFURV0sXG4gICAgICBjb3VudHJ5OiBlW3AuU0hJUFBJTkdfQ09VTlRSWV0sXG4gICAgICB6aXBfY29kZTogZVtwLlNISVBQSU5HX1pJUF9DT0RFXVxuICAgIH07XG59LCBPdCA9IChlLCB0KSA9PiBbZSwgdF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpLCBLcyA9ICh7IHdpZHRoOiBlLCBoZWlnaHQ6IHQgfSkgPT4gYFxuQGtleWZyYW1lcyBmYWRlSW4ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICB9XG59XG5cbi5vdmVybGF5IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHotaW5kZXg6IDIxNDc0ODM2NDggIWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbi5jb250YWluZXIge1xuICBtYXgtd2lkdGg6ICR7ZSA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke3QgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlLW91dDtcbn1cbi5mcmFtZSwgI2FkeWVuLWNvbnRhaW5lciwgI2FkeWVuLWNvbnRhaW5lciA+ICoge1xuICBtYXgtd2lkdGg6ICR7ZSA/PyBcIjUwMHB4XCJ9O1xuICBtYXgtaGVpZ2h0OiAke3QgPz8gXCI2MDBweFwifTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOiBub25lO1xufVxuLmNhbmNlbC1idXR0b24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMXJlbTtcbiAgY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdG9wOiAtMS41cmVtO1xuICBwYWRkaW5nOiAwO1xuICByaWdodDogMDtcbn1cbmAsIFFzID0gKHsgd2lkdGg6IGUsIGhlaWdodDogdCB9KSA9PiBgXG5Aa2V5ZnJhbWVzIGZhZGVJbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbn1cblxuLm92ZXJsYXkge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgei1pbmRleDogMjE0NzQ4MzY0OCAhaW1wb3J0YW50O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuLmNvbnRhaW5lciB7XG4gIG1heC13aWR0aDogJHtlID8/IFwiNTAwcHhcIn07XG4gIG1heC1oZWlnaHQ6ICR7dCA/PyBcIjYwMHB4XCJ9O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYW5pbWF0aW9uOiBmYWRlSW4gMC4zcyBlYXNlLW91dDtcbiAgYm9yZGVyLXJhZGl1czogOHB4O1xuICBib3gtc2hhZG93OiAwIDEwcHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1zZWxlY3Rvci1jb250ZW50IHtcbiAgcGFkZGluZzogMjRweDtcbiAgbWF4LWhlaWdodDogY2FsYygke3QgPz8gXCI2MDBweFwifSAtIDQ4cHgpO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuLmJhbmstc2VsZWN0b3ItaGVhZGVyIHtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBjb2xvcjogIzFhMWExYTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmJhbmstbGlzdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMTJweDtcbn1cbi5iYW5rLWl0ZW0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAxNnB4O1xuICBib3JkZXI6IDJweCBzb2xpZCAjZTVlNWU1O1xuICBib3JkZXItcmFkaXVzOiA4cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbn1cbi5iYW5rLWl0ZW06aG92ZXIge1xuICBib3JkZXItY29sb3I6ICMzYjgyZjY7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmOGZhZmM7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG59XG4uYmFuay1pdGVtOmFjdGl2ZSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cbi5iYW5rLWxvZ28ge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gIG1hcmdpbi1yaWdodDogMTZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjlmYTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2U5ZWNlZjtcbn1cbi5iYW5rLWxvZ28tcGxhY2Vob2xkZXIge1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBib3JkZXItcmFkaXVzOiA2cHg7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlOWVjZWY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBtYXJnaW4tcmlnaHQ6IDE2cHg7XG4gIGNvbG9yOiAjNmM3NTdkO1xuICBmb250LXNpemU6IDAuODc1cmVtO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuLmJhbmstaW5mbyB7XG4gIGZsZXg6IDE7XG59XG4uYmFuay1kaXNwbGF5LW5hbWUge1xuICBmb250LXNpemU6IDFyZW07XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjMWExYTFhO1xuICBtYXJnaW4tYm90dG9tOiAycHg7XG59XG4uYmFuay1uYW1lIHtcbiAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgY29sb3I6ICM2Yzc1N2Q7XG59XG4uY2FuY2VsLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBjb2xvcjogI2ZmZjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0b3A6IC0xLjVyZW07XG4gIHBhZGRpbmc6IDA7XG4gIHJpZ2h0OiAwO1xufVxuYCwgVXQgPSAoZSwgdCkgPT4ge1xuICBjb25zdCB7IGlkOiByLCB0aXRsZTogbiwgd2lkdGg6IGEsIGhlaWdodDogbywgbmFtZTogcyB9ID0gdCA/PyB7fSwgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgbC5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtLcyh7IHdpZHRoOiBhLCBoZWlnaHQ6IG8gfSl9XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7ZX1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCIke3IgPz8gXCJ0aHJlZS1kcy1pZnJhbWVcIn1cIiB0aXRsZT1cIiR7biA/PyBcIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIn1cIiBhbGxvdz1cInBheW1lbnRcIiBuYW1lPVwiJHtzID8/IFwidGhyZWUtZHMtaWZyYW1lXCJ9XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHUgPSBjLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICB1LmFwcGVuZENoaWxkKGwuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgZCA9IHUucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIG0gPSB1LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyksIHsgaG9zdDogYywgaWZyYW1lOiBkLCBjYW5jZWxCdXR0b246IG0gfTtcbn0sIFVuID0gKGUsIHQpID0+IHtcbiAgY29uc3QgeyB3aWR0aDogciwgaGVpZ2h0OiBuLCB0aXRsZTogYSB9ID0gdCA/PyB7fTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvLCBzKSA9PiB7XG4gICAgY29uc3QgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKSwgYyA9IGUubWFwKCh5LCBoKSA9PiB7XG4gICAgICBjb25zdCB2ID0geS5yZXNvdXJjZXMubG9nb191cmwgPyBgPGltZyBzcmM9XCIke3kucmVzb3VyY2VzLmxvZ29fdXJsfVwiIGFsdD1cIiR7eS5kaXNwbGF5X25hbWV9XCIgY2xhc3M9XCJiYW5rLWxvZ29cIiAvPmAgOiBgPGRpdiBjbGFzcz1cImJhbmstbG9nby1wbGFjZWhvbGRlclwiPiR7eS5kaXNwbGF5X25hbWUuc3Vic3RyaW5nKDAsIDIpLnRvVXBwZXJDYXNlKCl9PC9kaXY+YDtcbiAgICAgIHJldHVybiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWl0ZW1cIiBkYXRhLWJhbmstaW5kZXg9XCIke2h9XCI+XG4gICAgICAgICAgJHt2fVxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWluZm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWRpc3BsYXktbmFtZVwiPiR7eS5kaXNwbGF5X25hbWV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFuay1uYW1lXCI+JHt5LmJhbmtfbmFtZX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICBgO1xuICAgIH0pLmpvaW4oXCJcIik7XG4gICAgbC5pbm5lckhUTUwgPSBgXG4gICAgICA8c3R5bGU+XG4gICAgICAgICR7UXMoeyB3aWR0aDogciwgaGVpZ2h0OiBuIH0pfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLXNlbGVjdG9yLWhlYWRlclwiPiR7YSA/PyBcIlNlbGVjdCB5b3VyIGJhbmtcIn08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYW5rLWxpc3RcIj5cbiAgICAgICAgICAgICAgJHtjfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgICBjb25zdCB1ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgZCA9IHUuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gICAgZC5hcHBlbmRDaGlsZChsLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gICAgY29uc3QgbSA9IGQucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpLCBfID0gZC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJhbmstaXRlbVwiKSwgZiA9ICgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodSk7XG4gICAgfTtcbiAgICBtLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBmKCksIHMobmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpKTtcbiAgICB9KSwgXy5mb3JFYWNoKCh5LCBoKSA9PiB7XG4gICAgICB5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGYoKSwgbyhlW2hdKTtcbiAgICAgIH0pO1xuICAgIH0pLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHUpO1xuICB9KTtcbn0sIGp0ID0gKGUsIHQpID0+IHtcbiAgY29uc3QgeyB3aWR0aDogciwgaGVpZ2h0OiBuLCBiYXNlVXJsOiBhIH0gPSB0ID8/IHt9LCBvID0gbmV3IFVSTChgYXBwL2RpcmVjdF9kZWJpdC9taWNyb19kZXBvc2l0Lz90eXBlPSR7ZX1gLCBhKS50b1N0cmluZygpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGwpID0+IHtcbiAgICBjb25zdCBjID0gVXQobywgeyB3aWR0aDogciwgaGVpZ2h0OiBuLCB0aXRsZTogXCJNaWNybyBEZXBvc2l0IEZvcm1cIiB9KSwgdSA9ICgpID0+IHtcbiAgICAgIGMuaG9zdC5yZW1vdmUoKTtcbiAgICB9LCBkID0gKCkgPT4ge1xuICAgICAgdSgpLCBsKG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIikpO1xuICAgIH0sIG0gPSAodikgPT4ge1xuICAgICAgdSgpLCB2LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgJiYgdi5wYXlsb2FkID8gXCJlcnJvclwiIGluIHYucGF5bG9hZCA/IGwobmV3IEVycm9yKHYucGF5bG9hZC5lcnJvcikpIDogcyh2LnBheWxvYWQpIDogbChuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gZmFpbGVkXCIpKTtcbiAgICB9O1xuICAgIGMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkKTtcbiAgICBjb25zdCBfID0gZHIoXG4gICAgICBjLmlmcmFtZSxcbiAgICAgIG0sXG4gICAgICBuZXcgVVJMKGEpLm9yaWdpbixcbiAgICAgIFwibWljcm8tZGVwb3NpdC1zdGF0dXNcIixcbiAgICAgIG5hXG4gICAgKSwgZiA9ICgpID0+IHtcbiAgICAgIGMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkKSwgY2xlYXJJbnRlcnZhbChfKTtcbiAgICB9LCB5ID0gZCwgaCA9ICgpID0+IHtcbiAgICAgIGYoKSwgeSgpO1xuICAgIH07XG4gICAgYy5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGQpLCBjLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaCk7XG4gIH0pO1xufTtcbmZ1bmN0aW9uIGRyKGUsIHQsIHIsIG4sIGEpIHtcbiAgY29uc3QgbyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbCA9IGF3YWl0IERzKGUsIHIsIG4sIGEpO1xuICAgICAgbCAmJiAoY2xlYXJJbnRlcnZhbChzKSwgdChsKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgfVxuICB9O1xuICBvKCk7XG4gIGNvbnN0IHMgPSBzZXRJbnRlcnZhbChvLCBObik7XG4gIHJldHVybiBzO1xufVxuZnVuY3Rpb24gam4oe1xuICBlbGVtZW50czogZSxcbiAgcG9sbGluZ0ludGVydmFsOiB0LFxuICByZXNvbHZlOiByXG59KSB7XG4gIGNvbnN0IG4gPSAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0KSwgZS5ob3N0LnJlbW92ZSgpLCByKHsgc3RhdHVzOiBULkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgcmV0dXJuIGUuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKSwgKCkgPT4ge1xuICAgIGUuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKTtcbiAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIEVlKGUpIHtcbiAgY29uc3QgeyB1cmw6IHQsIGJhc2VVcmw6IHIsIGZyYW1lV2lkdGg6IG4sIGZyYW1lSGVpZ2h0OiBhLCBmcmFtZVRpdGxlOiBvIH0gPSBlLCBzID0gVXQodCwgeyB3aWR0aDogbiwgaGVpZ2h0OiBhLCB0aXRsZTogbyB9KTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChsKSA9PiB7XG4gICAgY29uc3QgYyA9IChtKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKSwgbChtKSwgZCA9PSBudWxsIHx8IGQoKTtcbiAgICB9LCB1ID0gZHIoXG4gICAgICBzLmlmcmFtZSxcbiAgICAgIGMsXG4gICAgICBuZXcgVVJMKHIpLm9yaWdpbixcbiAgICAgIFwicGluZy0zZHMtc3RhdHVzXCIsXG4gICAgICBYclxuICAgICksIGQgPSBqbih7XG4gICAgICBlbGVtZW50czogcyxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogdSxcbiAgICAgIHJlc29sdmU6IGxcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCAkbiA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBFZShlKTtcbiAgaWYgKHQuc3RhdHVzID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQuc3RhdHVzID09PSBULkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiB0LnN0YXR1cyAhPT0gVC5TVUNDRVNTICYmIF90KHQuc3RhdHVzKSwge1xuICAgIGhyZWY6IHQuaHJlZlxuICB9O1xufSwgWHMgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gd2luZG93Lm9wZW4odCwgXCJfYmxhbmtcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHI7XG59LCBHbiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IGEgfSA9IEkoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobywgcykgPT4ge1xuICAgIGNvbnN0IGwgPSBYcyhlLCBuKSwgYyA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBGcyh0LCByKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGMpLCBsLmNsb3NlKCksIG8oeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGwuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBhKGVlKHUpKSwgY2xlYXJJbnRlcnZhbChjKSwgcyhlZSh1KSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59LCBsZSA9ICgpID0+IHtcbiAgY29uc3QgZSA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzIDogW25hdmlnYXRvci5sYW5ndWFnZV07XG4gIGxldCB0ID0gZSA9PSBudWxsID8gdm9pZCAwIDogZVswXTtcbiAgcmV0dXJuIHQgJiYgKHQgPSB0LnNwbGl0KFwiLVwiKVswXSksIHQ7XG59LCB7IGxvZ19fOiBlYywgZXJyX186IHRjIH0gPSBJKFwiY29tbW9uLWNjXCIpLCByYyA9ICh7XG4gIHJlcXVpcmVfemlwX2NvZGU6IGUsXG4gIHJlcXVpcmVfZnVsbF9iaWxsaW5nX2FkZHJlc3M6IHQsXG4gIHJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzOiByLFxuICBwYXltZW50X21ldGhvZDogblxufSkgPT4ge1xuICBjb25zdCBhID0ge307XG4gIHJldHVybiBuID09PSBcImFjaFwiICYmIChhW3AuRklSU1RfTkFNRV0gPSB6JDEuc3RyaW5nKCkubWluKDIsIHsgbWVzc2FnZTogXCJNaW5pbXVtIGxlbmd0aCBpcyAyXCIgfSksIGFbcC5MQVNUX05BTUVdID0geiQxLnN0cmluZygpLm1pbigyLCB7IG1lc3NhZ2U6IFwiTWluaW11bSBsZW5ndGggaXMgMlwiIH0pKSwgZSAmJiAoYVtwLlpJUF9DT0RFXSA9IEEpLCB0ICYmIChhW3AuTElORTFdID0gQSwgYVtwLkNJVFldID0gQSwgYVtwLlNUQVRFXSA9IEEsIGFbcC5DT1VOVFJZXSA9IEEsIGFbcC5aSVBfQ09ERV0gPSBBKSwgciAmJiAoYVtwLlNISVBQSU5HX0xJTkUxXSA9IEEsIGFbcC5TSElQUElOR19DSVRZXSA9IEEsIGFbcC5TSElQUElOR19TVEFURV0gPSBBLCBhW3AuU0hJUFBJTkdfQ09VTlRSWV0gPSBBLCBhW3AuU0hJUFBJTkdfWklQX0NPREVdID0gQSksIE9iamVjdC5rZXlzKGEpLmxlbmd0aCA9PT0gMCA/ICRlIDogJGUuZXh0ZW5kKGEpO1xufSwgbmMgPSAoZSwgdCwgciA9IHt9KSA9PiB7XG4gIGlmIChyKSB7XG4gICAgZWMoYFJlY2VpdmVkIGRlZmF1bHQgZmllbGQgdmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHIpfWApO1xuICAgIGNvbnN0IG8gPSBPYmplY3Qua2V5cyhyKTtcbiAgICBmb3IgKGxldCBzID0gMDsgcyA8IG8ubGVuZ3RoOyBzKyspIHtcbiAgICAgIGNvbnN0IGwgPSBvW3NdLCBjID0gcltsXTtcbiAgICAgIGVbbF0gfHwgKGVbbF0gPSBjKTtcbiAgICB9XG4gIH1cbiAgZVtwLklTX1NISVBQSU5HX1NBTUVfQVNfQklMTElOR10gPSAhIWVbcC5JU19TSElQUElOR19TQU1FX0FTX0JJTExJTkddLCBlW3AuSVNfU0hJUFBJTkdfU0FNRV9BU19CSUxMSU5HXSAmJiAoZVtwLlNISVBQSU5HX0xJTkUxXSA9IGVbcC5MSU5FMV0sIGVbcC5TSElQUElOR19MSU5FMl0gPSBlW3AuTElORTJdLCBlW3AuU0hJUFBJTkdfTElORTNdID0gZVtwLkxJTkUzXSwgZVtwLlNISVBQSU5HX0NJVFldID0gZVtwLkNJVFldLCBlW3AuU0hJUFBJTkdfU1RBVEVdID0gZVtwLlNUQVRFXSwgZVtwLlNISVBQSU5HX0NPVU5UUlldID0gZVtwLkNPVU5UUlldLCBlW3AuU0hJUFBJTkdfWklQX0NPREVdID0gZVtwLlpJUF9DT0RFXSk7XG4gIGNvbnN0IGEgPSByYyhyKS5zYWZlUGFyc2UoZSk7XG4gIGlmICghYS5zdWNjZXNzKSB7XG4gICAgY29uc3QgbyA9IGEuZXJyb3IuZm9ybWF0KCksIHMgPSBKcyhvKSwgbCA9IE9iamVjdC5rZXlzKHMpO1xuICAgIGZvciAobGV0IGMgPSAwOyBjIDwgbC5sZW5ndGg7IGMrKykge1xuICAgICAgY29uc3QgdSA9IGxbY10sIGQgPSBzW3VdO1xuICAgICAgdCh1LCBkLCB1KTtcbiAgICB9XG4gICAgdGhyb3cgdGMoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBzKSwgbmV3IEVycm9yKFwiQWxtb3N0IHRoZXJlISBKdXN0IGEgZmV3IHRoaW5ncyBoaWdobGlnaHRlZCBhYm92ZSB0byBmaXggYmVmb3JlIHlvdSBjYW4gc3VibWl0LlwiKTtcbiAgfVxuICByZXR1cm4gYS5kYXRhO1xufSwgeyBsb2dfXzogb2MsIGVycl9fOiBhYyB9ID0gSShcImNvbW1vbi1jY1wiKSwgcSA9IG5jLCBWbiA9IChlLCB0KSA9PiB7XG4gIGZvciAoY29uc3QgciBvZiBlKVxuICAgIGlmIChyLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgci5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBhID0gUXIuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWEuc3VjY2VzcylcbiAgICAgICAgICBhYyhgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG8gPSBhLmRhdGE7XG4gICAgICAgICAgdChvLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBvYyhgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoci5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgeyBsb2dfXzogdXUsIGVycl9fOiBxbiB9ID0gSShcImNvbW1vblwiKSwgbXQgPSAoZSkgPT4ge1xuICBpZiAoZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IGUucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59LCB6ID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gdC5zYWZlUGFyc2Uobikuc3VjY2Vzcyk7XG4gIGlmICghcilcbiAgICB0aHJvdyBxbihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsLiBBbGwgbW9kZWxzOlwiLCBlKSwgbmV3IEVycm9yKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWxcIik7XG4gIHJldHVybiB0LnBhcnNlKHIpO1xufSwgcHIgPSAoZSwgdCkgPT4gKHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiBlLmVtYWlsLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBlLmxhc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiBIKGUpLFxuICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUShlLCB0KVxufSksIHVlID0gYXN5bmMgKGUpID0+IHtcbiAgY29uc3QgeyBsb2dfXzogdCB9ID0gSShlLmxvZ1ByZWZpeCksIHIgPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSBtdChlLmNvbmZpcm1SZXN1bHQpO1xuICBpZiAoci5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHQoXCJTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kLi4uXCIpLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBhd2FpdCBOcyhlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBtX2lkOiBuLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSkgfTtcbiAge1xuICAgIGlmIChlLnVzZVBheUZpcnN0Rmxvdykge1xuICAgICAgaWYgKHQoXCJVc2luZyBwYXktZmlyc3QgZmxvdy4uLlwiKSwgIWUuY29uZmlybVJlc3VsdC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgcW4oXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBlLmNvbmZpcm1SZXN1bHQpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBlLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGEgPSB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBwYXltZW50X2lucHV0OiB7IHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl9hZGRyZXNzOiBIKGUucmVxdWlyZWRGb3JtRmllbGRzKSxcbiAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEoZS5yZXF1aXJlZEZvcm1GaWVsZHMsIHIuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogci5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHIuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogZS5jaGVja291dFBheW1lbnRNZXRob2RcbiAgICB9O1xuICAgIHJldHVybiB0KFwiRG9pbmcgY2hlY2tvdXQuLi5cIiwgYSksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IHVyKGUuYW55Q2RlQ29ubmVjdGlvbiwgYSkgfTtcbiAgfVxufSwgVSA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIiwgXCJhZHllblwiLCBcInBheXBhbFwiLCBcInBvY2t5dFwiLCBcImxvb3BcIl0pO1xuVS5FbnVtLnN0cmlwZTtcbmNvbnN0IHpuID0gKHtcbiAgc2NyaXB0SWQ6IGUsXG4gIHNyYzogdCxcbiAgY2hlY2tMb2FkZWRGbjogclxufSkgPT4ge1xuICBjb25zdCBuID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGEsIG8pID0+IHtcbiAgICBsZXQgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgcy5zcmMgPSB0LCBzLmlkID0gZSwgcy5hc3luYyA9ICEwO1xuICAgIGNvbnN0IGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICByKCkgPyBhKCkgOiBsID8gcyA9IGwgOiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImxvYWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgbi5hYm9ydCgpLCBhKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImVycm9yXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIG4uYWJvcnQoKSwgbyhcIkZhaWxlZCB0byBsb2FkIHRoZSBzY3JpcHRcIik7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn0sIEJlID0gKHtcbiAgZ2F0ZXdheTogZSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQ6IHQsXG4gIG1lcmNoYW50TmFtZTogcixcbiAgbWVyY2hhbnRJZDogbixcbiAgaW5pdGlhbFByZXZpZXc6IGEsXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IG8sXG4gIHByZWZpbGw6IHNcbn0pID0+IHtcbiAgdmFyIG0sIF87XG4gIGNvbnN0IGwgPSAoKG0gPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYW1vdW50QXRvbSkgPz8gKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYW1vdW50QXRvbSkgPz8gMCwgYyA9IE1hdGgubWF4KGwgLyAxMDAsIDApLCB1ID0gKCgoXyA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogXy5jdXJyZW5jeSkgPz8gKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY3VycmVuY3kpID8/IGEuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIGQgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6ICEwLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5OiBlLFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6ICEwLFxuICAgIHNoaXBwaW5nQWRkcmVzc1JlcXVpcmVkOiBzLmNoZWNrb3V0X3NldHRpbmdzLnJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gUFJPRCBlbnYgd2lsbCBuZWVkIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiBuID8/IFwiXCIsXG4gICAgICBtZXJjaGFudE5hbWU6IHJcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IG8gIT0gbnVsbCAmJiBvLnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogYy50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gbyAhPSBudWxsICYmIG8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB0eXBlb2Ygby5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB7IC4uLmQsIC4uLm8uZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QoZCkgfSA6IHsgLi4uZCwgLi4uby5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIF9yID0gKCkgPT4gem4oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2dvb2dsZV9wYXlfc2RrXCIsXG4gIHNyYzogXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+IHtcbiAgICB2YXIgZSwgdDtcbiAgICByZXR1cm4gISEoKHQgPSAoZSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBlLnBheW1lbnRzKSAhPSBudWxsICYmIHQuYXBpKTtcbiAgfVxufSk7XG5sZXQgQnQgPSBudWxsO1xuY29uc3QgbXIgPSBhc3luYyAoZSkgPT4gYXdhaXQgd24oZSkgPT09IFwicHJvZFwiID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgWWUgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgbXIoZSk7XG4gIHJldHVybiBCdCA9PT0gbnVsbCAmJiAoQnQgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiByLFxuICAgIG1lcmNoYW50SW5mbzogdC5tZXJjaGFudEluZm9cbiAgfSkpLCBCdDtcbn0sIEplID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gdCA/IGVuLnBhcnNlKHQpIDogbnVsbDtcbn0sIGZyID0gKGUsIHQpID0+IHtcbiAgdmFyIG8sIHMsIGwsIGM7XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgbiA9IChzID0gKG8gPSB0LnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogby5pbmZvKSA9PSBudWxsID8gdm9pZCAwIDogcy5iaWxsaW5nQWRkcmVzcywgYSA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICBpZiAobikge1xuICAgIGNvbnN0IFt1LCAuLi5kXSA9ICgoYyA9IChsID0gbi5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBtID0gZC5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgcltwLkVNQUlMXSA9IHJbcC5FTUFJTF0gfHwgdC5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbcC5MSU5FMV0gPSByW3AuTElORTFdIHx8IG4uYWRkcmVzczEgfHwgXCJcIiwgcltwLkxJTkUyXSA9IHJbcC5MSU5FMl0gfHwgbi5hZGRyZXNzMiB8fCBcIlwiLCByW3AuTElORTNdID0gcltwLkxJTkUzXSB8fCBuLmFkZHJlc3MzIHx8IFwiXCIsIHJbcC5DSVRZXSA9IHJbcC5DSVRZXSB8fCBuLmxvY2FsaXR5IHx8IFwiXCIsIHJbcC5TVEFURV0gPSByW3AuU1RBVEVdIHx8IG4uYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCIsIHJbcC5DT1VOVFJZXSA9IHJbcC5DT1VOVFJZXSB8fCBuLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgcltwLlpJUF9DT0RFXSA9IHJbcC5aSVBfQ09ERV0gfHwgbi5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIjtcbiAgICBjb25zdCBfID0gcltwLkZJUlNUX05BTUVdIHx8IHUgfHwgXCJcIiwgZiA9IHJbcC5MQVNUX05BTUVdIHx8IG0gfHwgXCJcIjtcbiAgICBfIHx8IGYgPyAocltwLkZJUlNUX05BTUVdID0gXywgcltwLkxBU1RfTkFNRV0gPSBmKSA6IChyW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbcC5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIGEgJiYgKHJbcC5TSElQUElOR19MSU5FMV0gPSByW3AuU0hJUFBJTkdfTElORTFdIHx8IGEuYWRkcmVzczEgfHwgXCJcIiwgcltwLlNISVBQSU5HX0xJTkUyXSA9IHJbcC5TSElQUElOR19MSU5FMl0gfHwgYS5hZGRyZXNzMiB8fCBcIlwiLCByW3AuU0hJUFBJTkdfTElORTNdID0gcltwLlNISVBQSU5HX0xJTkUzXSB8fCBhLmFkZHJlc3MzIHx8IFwiXCIsIHJbcC5TSElQUElOR19DSVRZXSA9IHJbcC5TSElQUElOR19DSVRZXSB8fCBhLmxvY2FsaXR5IHx8IFwiXCIsIHJbcC5TSElQUElOR19aSVBfQ09ERV0gPSByW3AuU0hJUFBJTkdfWklQX0NPREVdIHx8IGEucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCIsIHJbcC5TSElQUElOR19TVEFURV0gPSByW3AuU0hJUFBJTkdfU1RBVEVdIHx8IGEuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCIsIHJbcC5TSElQUElOR19DT1VOVFJZXSA9IHJbcC5TSElQUElOR19DT1VOVFJZXSB8fCBhLmNvdW50cnlDb2RlIHx8IFwiVVNcIiksIHI7XG59LCB7IGxvZ19fOiBQZSwgZXJyX186IGljIH0gPSBJKFwiYXd4LWJhY3NcIiksIHNjID0gQihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgQywgeDtcbiAgICBjb25zdCBvID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGwgPSBhd2FpdCBNKHMpLCBjID0gYS52ZXJpZmljYXRpb25NZXRob2QgPz8gXCJ0cnVlbGF5ZXJcIjtcbiAgICBsZXQgdSA9IG51bGw7XG4gICAgaWYgKGMgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBQZShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICB1ID0gYXdhaXQganQoXCJiYWNzX2RpcmVjdF9kZWJpdFwiLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMzUwcHhcIixcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSksIFBlKFwiTWljcm8gZGVwb3NpdCBkYXRhIGNvbGxlY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBQZShcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIiksIG5ldyBFcnJvcihcIk1pY3JvIGRlcG9zaXQgZm9ybSBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGQgPSBhd2FpdCBvZShzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IG9bcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogb1twLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogb1twLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogSChvKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBRKG8sIGwuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGxlKClcbiAgICB9KSwgbSA9IEplKGQpLCBfID0gbSA9PSBudWxsID8gdm9pZCAwIDogbS5jb25zZW50X2lkLCBmID0gbSA9PSBudWxsID8gdm9pZCAwIDogbS5hdmFpbGFibGVfYmFua3M7XG4gICAgbGV0IHk7XG4gICAgaWYgKGMgPT09IFwidHJ1ZWxheWVyXCIgJiYgZiAmJiBmLmxlbmd0aCA+PSAxKSB7XG4gICAgICBQZShcIk11bHRpcGxlIGJhbmtzIGF2YWlsYWJsZSwgc2hvd2luZyBiYW5rIHNlbGVjdG9yLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgeSA9IGF3YWl0IFVuKGYsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MDBweFwiLFxuICAgICAgICAgIHRpdGxlOiBcIlNlbGVjdCBiYW5rXCJcbiAgICAgICAgfSksIFBlKGBCYW5rIHNlbGVjdGVkOiAke3kuZGlzcGxheV9uYW1lfWApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IFBlKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJCYW5rIHNlbGVjdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGggPSBIKG8pLCB2ID0ge1xuICAgICAgdHlwZTogXCJiYWNzX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgYmFjc19kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gVHJ1ZUxheWVyXG4gICAgICAgIGJhbmtfbmFtZTogeSA9PSBudWxsID8gdm9pZCAwIDogeS5iYW5rX25hbWUsXG4gICAgICAgIC8vIE1pY3JvZGVwb3NpdFxuICAgICAgICBvd25lcl9uYW1lOiBPdChvW3AuRklSU1RfTkFNRV0sIG9bcC5MQVNUX05BTUVdKSxcbiAgICAgICAgb3duZXJfZW1haWw6IG9bcC5FTUFJTF0sXG4gICAgICAgIGNvdW50cnlfY29kZTogb1twLkNPVU5UUlldLFxuICAgICAgICBhY2NvdW50X251bWJlcjogdSA9PSBudWxsID8gdm9pZCAwIDogdS5hY2NvdW50X251bWJlcixcbiAgICAgICAgc29ydF9jb2RlOiB1ID09IG51bGwgPyB2b2lkIDAgOiB1LnNvcnRfY29kZSxcbiAgICAgICAgYWRkcmVzczogeyAuLi5oLCB0b3duOiBoLmNpdHksIHBvc3Rjb2RlOiBoLnppcF9jb2RlIH1cbiAgICAgIH1cbiAgICB9LCB3ID0gKHggPSAoQyA9IChhd2FpdCBPKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogYyxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHZcbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogQy5maW5kKFxuICAgICAgKGspID0+IGsudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogeC5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHcpIHtcbiAgICAgIFBlKFwiQkFDUyB2ZXJpZmljYXRpb24gcmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiKTtcbiAgICAgIGNvbnN0IHsgc3RhdHVzOiBrIH0gPSBhd2FpdCBFZSh7XG4gICAgICAgIHVybDogdyxcbiAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgICBmcmFtZVdpZHRoOiBcIjUwMHB4XCIsXG4gICAgICAgIGZyYW1lSGVpZ2h0OiBcIjcwMHB4XCIsXG4gICAgICAgIGZyYW1lVGl0bGU6IFwiQkFDUyB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoUGUoYOKVsCBCQUNTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtrfV1gKSwgayA9PT0gVC5DQU5DRUxMRUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgIGlmIChrID09PSBULkZBSUxVUkUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJBQ1MgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgYiA9IGF3YWl0IE8ocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBfXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB1ZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYmFjc1wiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBzLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogYixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaykge1xuICAgICAgdGhyb3cgaWMoXCJCQUNTIHBheW1lbnQgZXJyb3JcIiwgayksIGcoXCJjaGVja291dF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBrXG4gICAgICB9KSwgbmV3IEVycm9yKChrID09IG51bGwgPyB2b2lkIDAgOiBrLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IEtlLCBlcnJfXzogY2MgfSA9IEkoXCJhd3gtZWZ0XCIpLCBsYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIFMsIHc7XG4gICAgY29uc3QgbyA9IHEociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYXdhaXQgTShzKSwgYyA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgdSA9IG51bGw7XG4gICAgaWYgKGMgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBLZShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICB1ID0gYXdhaXQganQoXCJlZnRfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI0NTBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybFxuICAgICAgICB9KSwgS2UoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IEtlKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZCA9IGF3YWl0IG9lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBIKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEobywgbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogbGUoKVxuICAgIH0pLCBtID0gSmUoZCksIF8gPSBtID09IG51bGwgPyB2b2lkIDAgOiBtLmNvbnNlbnRfaWQsIGYgPSB7XG4gICAgICB0eXBlOiBcImVmdF9kaXJlY3RfZGViaXRcIixcbiAgICAgIGVmdF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgLy8gUGxhaWRcbiAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgb3duZXJfbmFtZTogT3Qob1twLkZJUlNUX05BTUVdLCBvW3AuTEFTVF9OQU1FXSksXG4gICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgICAvLyBNaWNyb2RlcG9zaXRcbiAgICAgICAgaW5zdGl0dXRpb25fbnVtYmVyOiB1ID09IG51bGwgPyB2b2lkIDAgOiB1Lmluc3RpdHV0aW9uX251bWJlcixcbiAgICAgICAgdHJhbnNpdF9udW1iZXI6IHUgPT0gbnVsbCA/IHZvaWQgMCA6IHUudHJhbnNpdF9udW1iZXIsXG4gICAgICAgIGFjY291bnRfbnVtYmVyOiB1ID09IG51bGwgPyB2b2lkIDAgOiB1LmFjY291bnRfbnVtYmVyXG4gICAgICAgIC8vIG1hbmRhdGVfdmVyc2lvbjogdW5kZWZpbmVkIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgIH1cbiAgICB9LCBoID0gKHcgPSAoUyA9IChhd2FpdCBPKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogYyxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IGZcbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogUy5maW5kKFxuICAgICAgKGIpID0+IGIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogdy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKGgpIHtcbiAgICAgIEtlKFwiRUZUIHZlcmlmaWNhdGlvbiByZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIpO1xuICAgICAgY29uc3QgeyBzdGF0dXM6IGIgfSA9IGF3YWl0IEVlKHtcbiAgICAgICAgdXJsOiBoLFxuICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICAgIGZyYW1lV2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgZnJhbWVIZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgZnJhbWVUaXRsZTogXCJFRlQgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgaWYgKEtlKGDilbAgRUZUIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtifV1gKSwgYiA9PT0gVC5DQU5DRUxMRUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVGVCB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKGIgPT09IFQuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRUZUIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IHYgPSBhd2FpdCBPKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogX1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWVmdFwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBzLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogbyxcbiAgICAgICAgY29uZmlybVJlc3VsdDogdixcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYikge1xuICAgICAgdGhyb3cgY2MoXCJFRlQgcGF5bWVudCBlcnJvclwiLCBiKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGJcbiAgICAgIH0pLCBuZXcgRXJyb3IoKGIgPT0gbnVsbCA/IHZvaWQgMCA6IGIubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogU2UsIGVycl9fOiB1YyB9ID0gSShcImF3eC1zZXBhXCIpLCBkYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHcsIGI7XG4gICAgY29uc3QgbyA9IHEociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYXdhaXQgTShzKSwgYyA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwidHJ1ZWxheWVyXCI7XG4gICAgbGV0IHUgPSBudWxsO1xuICAgIGlmIChjID09PSBcIm1pY3JvX2RlcG9zaXRcIikge1xuICAgICAgU2UoXCJNaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiBzZWxlY3RlZCwgc2hvd2luZyBmb3JtLi4uXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdSA9IGF3YWl0IGp0KFwic2VwYV9kaXJlY3RfZGViaXRcIiwge1xuICAgICAgICAgIHdpZHRoOiBcIjQ1MHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjMwMHB4XCIsXG4gICAgICAgICAgYmFzZVVybDogZS5iYXNlVXJsXG4gICAgICAgIH0pLCBTZShcIk1pY3JvIGRlcG9zaXQgZGF0YSBjb2xsZWN0ZWRcIik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgU2UoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCJNaWNybyBkZXBvc2l0IGZvcm0gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBkID0gYXdhaXQgb2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IG9bcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IG9bcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IEgobyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUShvLCBsLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBsZSgpXG4gICAgfSksIG0gPSBKZShkKSwgXyA9IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uY29uc2VudF9pZCwgZiA9IG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0uYXZhaWxhYmxlX2JhbmtzO1xuICAgIGxldCB5O1xuICAgIGlmIChjID09PSBcInRydWVsYXllclwiICYmIGYgJiYgZi5sZW5ndGggPj0gMSkge1xuICAgICAgU2UoXCJNdWx0aXBsZSBiYW5rcyBhdmFpbGFibGUsIHNob3dpbmcgYmFuayBzZWxlY3Rvci4uLlwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHkgPSBhd2FpdCBVbihmLCB7XG4gICAgICAgICAgd2lkdGg6IFwiNDUwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTAwcHhcIixcbiAgICAgICAgICB0aXRsZTogXCJTZWxlY3QgYmFua1wiXG4gICAgICAgIH0pLCBTZShgQmFuayBzZWxlY3RlZDogJHt5LmRpc3BsYXlfbmFtZX1gKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aHJvdyBTZShcIkJhbmsgc2VsZWN0aW9uIGNhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiQmFuayBzZWxlY3Rpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB2ID0gKGIgPSAodyA9IChhd2FpdCBPKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgdmVyaWZpY2F0aW9uX21ldGhvZDogYyxcbiAgICAgICAgZGlyZWN0X2RlYml0X2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcInNlcGFfZGlyZWN0X2RlYml0XCIsXG4gICAgICAgICAgc2VwYV9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vIHRydWVsYXllclxuICAgICAgICAgICAgYmFua19uYW1lOiB5ID09IG51bGwgPyB2b2lkIDAgOiB5LmJhbmtfbmFtZSxcbiAgICAgICAgICAgIGNvdW50cnlfY29kZTogb1twLkNPVU5UUlldLFxuICAgICAgICAgICAgLy8gbWljcm9kZXBvc2l0XG4gICAgICAgICAgICBvd25lcl9uYW1lOiBPdChvW3AuRklSU1RfTkFNRV0sIG9bcC5MQVNUX05BTUVdKSxcbiAgICAgICAgICAgIG93bmVyX2VtYWlsOiBvW3AuRU1BSUxdLFxuICAgICAgICAgICAgaWJhbjogdSA9PSBudWxsID8gdm9pZCAwIDogdS5pYmFuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IHcuZmluZChcbiAgICAgIChDKSA9PiBDLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGIucmVkaXJlY3RfdXJsO1xuICAgIGlmICh2KSB7XG4gICAgICBTZShcIlNFUEEgdmVyaWZpY2F0aW9uIHJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogQyB9ID0gYXdhaXQgRWUoe1xuICAgICAgICB1cmw6IHYsXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIlNFUEEgdmVyaWZpY2F0aW9uXCJcbiAgICAgIH0pO1xuICAgICAgaWYgKFNlKGDilbAgU0VQQSB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7Q31dYCksIEMgPT09IFQuQ0FOQ0VMTEVEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICBpZiAoQyA9PT0gVC5GQUlMVVJFKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTRVBBIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgfVxuICAgIGNvbnN0IFMgPSBhd2FpdCBPKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogX1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LXNlcGFcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogcyxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IG8sXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IFMsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgIHRocm93IHVjKFwiU0VQQSBwYXltZW50IGVycm9yXCIsIEMpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogQ1xuICAgICAgfSksIG5ldyBFcnJvcigoQyA9PSBudWxsID8gdm9pZCAwIDogQy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBwYywgZXJyX186IHlyIH0gPSBJKFwiYWlyd2FsbGV4LWNjXCIpLCBfYyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSksIG1jID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IF9jLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCByID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYEFpcndhbGxleCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWA7XG4gICAgdGhyb3cgeXIobiksIG5ldyBFcnJvcihyKTtcbiAgfVxuICByZXR1cm4gdC5kYXRhO1xufSwgSG4gPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgZmMgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBuZXcgVVJMKGUgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInBheW1lbnRfaW50ZW50X2lkXCIpO1xuICAgIGlmICghdClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGludGVudCBJRCBmb3VuZCBpbiBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIHBjKGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke3R9XWApLCB0O1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgciA9IFwiRXJyb3IgdmVyaWZ5aW5nIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyB5cihyLCBgUmVzdWx0aW5nIFVSTDogJHtlfS5cbkVycm9yOiAke2VlKHQpfWApLCBuZXcgRXJyb3Iocik7XG4gIH1cbn0sIEJuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IG1jKHQpLCBuID0gYXdhaXQgJG4oeyB1cmw6IHJbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogZSB9KSwgYSA9IGZjKG4uaHJlZiA/PyBcIlwiKSwgbyA9IHJbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChvICE9PSBhKSB7XG4gICAgY29uc3QgbCA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgYyA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHthfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke299KS5gO1xuICAgIHRocm93IHlyKGMpLCBuZXcgRXJyb3IobCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGEsXG4gICAgICBjb25zZW50X2lkOiByW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCBZbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgSm4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIGhyID0gKCkgPT4gem4oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvblxufSksIGdyID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgbiA9IHQuYmlsbGluZ0NvbnRhY3QsIGEgPSB0LnNoaXBwaW5nQ29udGFjdCwgbyA9IHsgLi4uZSB9O1xuICBpZiAociB8fCBuIHx8IGEpIHtcbiAgICBvW3AuRU1BSUxdID0gb1twLkVNQUlMXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5lbWFpbEFkZHJlc3MpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmVtYWlsQWRkcmVzcykgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBvW3AuQ09VTlRSWV0gPSBvW3AuQ09VTlRSWV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY291bnRyeUNvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmNvdW50cnlDb2RlKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBvW3AuWklQX0NPREVdID0gb1twLlpJUF9DT0RFXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5wb3N0YWxDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5wb3N0YWxDb2RlKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgcyA9IG9bcC5GSVJTVF9OQU1FXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5naXZlbk5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmdpdmVuTmFtZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZ2l2ZW5OYW1lKSB8fCBcIlwiLCBsID0gb1twLkxBU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZmFtaWx5TmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZmFtaWx5TmFtZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZmFtaWx5TmFtZSkgfHwgXCJcIjtcbiAgICBzIHx8IGwgPyAob1twLkZJUlNUX05BTUVdID0gcywgb1twLkxBU1RfTkFNRV0gPSBsKSA6IChvW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIG9bcC5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIG87XG59O1xueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IHljID0gKHtcbiAgdG90YWw6IGUsXG4gIHByZWZpbGw6IHRcbn0pID0+IHtcbiAgdmFyIG47XG4gIGlmICh0Lm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7dC50b2tlbn1gLCBNbikudG9TdHJpbmcoKVxuICAgIH07XG4gIGNvbnN0IHIgPSAobiA9IHQubGluZV9pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IG5bMF07XG4gIGlmIChyKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiAociA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsX2NvdW50KSA/PyB2b2lkIDAsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHt0LnRva2VufWBcbiAgICB9O1xufSwgaGMgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIHZhciBsLCBjO1xuICBjb25zdCBhID0gKCgobCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogbC5jdXJyZW5jeSkgPz8gKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY3VycmVuY3kpID8/IHQuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIHMgPSAoKCgoYyA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogYy5hbW91bnRBdG9tKSA/PyAodCA9PSBudWxsID8gdm9pZCAwIDogdC5hbW91bnRBdG9tKSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGU6IGEsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5sYWJlbCkgPz8gbiA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlICE9IG51bGwgJiYgZS5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IHNcbiAgICB9XG4gIH07XG59LCB3ciA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiB0LFxuICBwcmVmaWxsOiByLFxuICBkZWZhdWx0TGFiZWw6IG5cbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGU6IGEsIHRvdGFsOiBvIH0gPSBoYyh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgICBpbml0aWFsUHJldmlldzogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIGRlZmF1bHRMYWJlbDogblxuICB9KTtcbiAgbGV0IHMgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGU6IGEsXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1xuICAgICAgXCJlbWFpbFwiLFxuICAgICAgLi4uci5jaGVja291dF9zZXR0aW5ncy5yZXF1aXJlX2Z1bGxfc2hpcHBpbmdfYWRkcmVzcyA/IFtcInBvc3RhbEFkZHJlc3NcIl0gOiBbXVxuICAgIF0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgIF0sXG4gICAgdG90YWw6IG8sXG4gICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IHljKHtcbiAgICAgIHRvdGFsOiBvLFxuICAgICAgcHJlZmlsbDogclxuICAgIH0pXG4gIH07XG4gIHJldHVybiBlICE9IG51bGwgJiYgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ICYmICh0eXBlb2YgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHMgPSB7XG4gICAgLi4ucyxcbiAgICAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocylcbiAgfSA6IHMgPSB7IC4uLnMsIC4uLmUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9KSwgcztcbn0sIGdjID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pLCB3YyA9IHokMS5lbnVtKFtcbiAgXCJhclwiLFxuICBcImJnLUJHXCIsXG4gIFwiY2EtRVNcIixcbiAgXCJjcy1DWlwiLFxuICBcImRhLURLXCIsXG4gIFwiZGUtREVcIixcbiAgXCJlbC1HUlwiLFxuICBcImVuLVVTXCIsXG4gIFwiZXMtRVNcIixcbiAgXCJldC1FRVwiLFxuICBcImZpLUZJXCIsXG4gIFwiZnItRlJcIixcbiAgXCJoci1IUlwiLFxuICBcImh1LUhVXCIsXG4gIFwiaXMtSVNcIixcbiAgXCJpdC1JVFwiLFxuICBcImphLUpQXCIsXG4gIFwia28tS1JcIixcbiAgXCJsdC1MVFwiLFxuICBcImx2LUxWXCIsXG4gIFwibmwtTkxcIixcbiAgXCJuby1OT1wiLFxuICBcInBsLVBMXCIsXG4gIFwicHQtQlJcIixcbiAgXCJwdC1QVFwiLFxuICBcInJvLVJPXCIsXG4gIFwicnUtUlVcIixcbiAgXCJzay1TS1wiLFxuICBcInNsLVNJXCIsXG4gIFwic3YtU0VcIixcbiAgXCJ6aC1DTlwiLFxuICBcInpoLVRXXCJcbl0pLCB7IGxvZ19fOiBxZSwgZXJyX186IGR0IH0gPSBJKFwiYWR5ZW4tY2NcIiksIHZjID0geiQxLm9iamVjdCh7XG4gIFwib3AtYWNjb3VudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tY2xpZW50LWtleVwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWR5ZW4tZW52aXJvbm1lbnRcIjogZ2MsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHokMS5zdHJpbmcoKVxufSksIFduID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBiYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSB2Yy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IGR0KGBBZHllbiAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KGUpfWApLCBuZXcgRXJyb3IoV24pO1xuICByZXR1cm4gdC5kYXRhO1xufSwgRWMgPSAoZSkgPT4gSlNPTi5wYXJzZShlKSwgRHIgPSAoKSA9PiBcIkFkeWVuV2ViXCIgaW4gd2luZG93ICYmIFwiQWR5ZW5DaGVja291dFwiIGluIHdpbmRvdy5BZHllbldlYiwgUGMgPSBhc3luYyAoKSA9PiB7XG4gIHFlKFwiV2FpdGluZyBmb3IgQWR5ZW4gU0RLIHRvIGxvYWQuLi5cIik7XG4gIGZvciAobGV0IGUgPSAwOyBlIDwgMTA7IGUrKylcbiAgICBEcigpIHx8IGF3YWl0IER0KDUwMCk7XG4gIGlmICghRHIoKSlcbiAgICB0aHJvdyBkdChcIkFkeWVuIFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCBuZXcgRXJyb3IoV24pO1xuICByZXR1cm4gcWUoXCJBZHllbiBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKSwgd2luZG93LkFkeWVuV2ViLkFkeWVuQ2hlY2tvdXQ7XG59LCBTYyA9IChlKSA9PiB7XG4gIGNvbnN0IHsgaGVhZGVyczogdCwgbG9jYWxlOiByLCBjb3VudHJ5Q29kZTogbiwgY29tcG9uZW50OiBhLCBob3N0OiBvLCBjYW5jZWxCdXR0b246IHMgfSA9IGUsIGwgPSBFYyh0W1wib3AtYWR5ZW4tYWN0aW9uXCJdKTtcbiAgcmV0dXJuIHFlKGBSdW5uaW5nIEFkeWVuIDNEUyBmbG93IGZvciBhY3Rpb24gdHlwZTogJHtsLnR5cGV9YCksIG5ldyBQcm9taXNlKChjKSA9PiB7XG4gICAgY29uc3QgdSA9ICgpID0+IHtcbiAgICAgIHFlKFwiQ2xlYW5pbmcgdXAgQWR5ZW4gM0RTIGZsb3dcIiksIHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIF8pLCBvLnJlbW92ZSgpO1xuICAgIH0sIGQgPSAoeSkgPT4ge1xuICAgICAgZHQoXCJBdXRoZW50aWNhdGlvbiBmYWlsZWQuIFJlc3VsdDpcIiwgeSksIGMoeyBzdGF0dXM6IFQuRkFJTFVSRSwgY2xlYW51cDogdSB9KTtcbiAgICB9LCBtID0gKHkpID0+IHtcbiAgICAgIGR0KFwiQWR5ZW4gZXJyb3I6XCIsIHkpLCBjKHsgc3RhdHVzOiBULkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgXyA9ICgpID0+IHtcbiAgICAgIGMoeyBzdGF0dXM6IFQuQ0FOQ0VMTEVELCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgcy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgXyk7XG4gICAgY29uc3QgZiA9ICh5LCBoLCB2KSA9PiB7XG4gICAgICBvLnJlbW92ZSgpLCBjKHsgc3RhdHVzOiBULlNVQ0NFU1MsIGFkZGl0aW9uYWxEZXRhaWxzOiB5LCBjbGVhbnVwOiB1IH0pO1xuICAgIH07XG4gICAgUGMoKS50aGVuKFxuICAgICAgKHkpID0+IHkoe1xuICAgICAgICBjbGllbnRLZXk6IHRbXCJvcC1hZHllbi1jbGllbnQta2V5XCJdLFxuICAgICAgICBlbnZpcm9ubWVudDogdFtcIm9wLWFkeWVuLWVudmlyb25tZW50XCJdLFxuICAgICAgICBsb2NhbGU6IHIsXG4gICAgICAgIGNvdW50cnlDb2RlOiBuLFxuICAgICAgICBvbkFkZGl0aW9uYWxEZXRhaWxzOiBmLFxuICAgICAgICBvblBheW1lbnRGYWlsZWQ6IGQsXG4gICAgICAgIG9uRXJyb3I6IG1cbiAgICAgIH0pXG4gICAgKS50aGVuKCh5KSA9PiB7XG4gICAgICB5LmNyZWF0ZUZyb21BY3Rpb24obCwgeyBjaGFsbGVuZ2VXaW5kb3dTaXplOiBcIjAzXCIgfSkubW91bnQoYSk7XG4gICAgfSk7XG4gIH0pO1xufSwgQ2MgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXNbMF0gOiBuYXZpZ2F0b3IubGFuZ3VhZ2UsIHIgPSBlID8/IHQsIG4gPSB3Yy5zYWZlUGFyc2Uocik7XG4gIHJldHVybiBuLnN1Y2Nlc3MgPyAocWUoYFJlc29sdmVkIGxvY2FsZTogJHtuLmRhdGF9YCksIG4uZGF0YSkgOiAoZHQoYFJlc29sdmVkIGludmFsaWQgbG9jYWxlOiAke3J9LiBEZWZhdWx0aW5nIHRvIGVuLVVTLmApLCBcImVuLVVTXCIpO1xufSwgWm4gPSAoZSkgPT4gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGVbXCJvcC1hZHllbi1hY3Rpb25cIl0pICE9PSB2b2lkIDAsIEtuID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IGJjKHQpLCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgYS5pZCA9IFwiYWR5ZW4tY29udGFpbmVyXCI7XG4gIGNvbnN0IHsgaG9zdDogbywgaWZyYW1lOiBzLCBjYW5jZWxCdXR0b246IGwgfSA9IFV0KFwiaHR0cDovL2V4YW1wbGUuY29tXCIpO1xuICBzLnJlcGxhY2VXaXRoKGEpO1xuICBjb25zdCBjID0gYXdhaXQgU2Moe1xuICAgIGhlYWRlcnM6IG4sXG4gICAgbG9jYWxlOiBDYyhyKSxcbiAgICBjb3VudHJ5Q29kZTogZSxcbiAgICBjb21wb25lbnQ6IGEsXG4gICAgaG9zdDogbyxcbiAgICBjYW5jZWxCdXR0b246IGxcbiAgfSk7XG4gIGlmIChjLmNsZWFudXAoKSwgYy5zdGF0dXMgPT09IFQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgaWYgKGMuc3RhdHVzID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGMuc3RhdHVzID09PSBULlNVQ0NFU1MpIHtcbiAgICBpZiAoIWMuYWRkaXRpb25hbERldGFpbHMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZCBidXQgbm8gYWRkaXRpb25hbCBkZXRhaWxzIHdlcmUgcmV0dXJuZWRcIik7XG4gICAgcmV0dXJuIHFlKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcIiksIHtcbiAgICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICAgIGFkZGl0aW9uYWxfZGV0YWlsczogYy5hZGRpdGlvbmFsRGV0YWlscy5kYXRhXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlXG4gICAgX3QoYy5zdGF0dXMpO1xufSwgUW4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhZHllblwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgWG4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWR5ZW5cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgeyBsb2dfXzoga2MgfSA9IEkoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gQWMoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgeHQodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uYVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIEljKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IGUucGF5bWVudCwgbyA9IGdyKHQubm9uQ2RlRm9ybUlucHV0cywgYSksIHMgPSBxKFxuICAgICAgbyxcbiAgICAgIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB0LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIGF3YWl0IG9lKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHNbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogc1twLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogc1twLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogSChzKSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBRKFxuICAgICAgICBzLFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgIClcbiAgICB9KTtcbiAgICBjb25zdCBsID0gYXdhaXQgTyh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBicm93c2VyX2luZm86IGhvKCksXG4gICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGEudG9rZW4pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoa2MoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKSwgISgobiA9IChyID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCB1ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHUpLCB1ZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHMsXG4gICAgICBjb25maXJtUmVzdWx0OiBsLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChhKSB7XG4gICAgY29uc3QgbyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KG8pLCBhO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiBldCwgZXJyX186IGVvIH0gPSBJKFwiYWR5ZW4tYXBwbGUtcGF5XCIpLCBUYyA9IHZlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYWR5ZW4sXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBRbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKGV0KFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBocigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGV0KFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAoZXQoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGV0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE0ocyksIGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGJlKHMsIGwudG9rZW4sIGMsIHZvaWQgMCksIGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgTi5hZHllbkFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgZW8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBSYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHk7XG4gICAgY29uc3QgbyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBRbiksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcywgaW5pdGlhbFByZXZpZXc6IGwgfSA9IG4sIGMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBNKGMpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIG0gPSB3cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGwsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnVcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6ICh5ID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCBfID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBtKSwgZiA9IHtcbiAgICAgIHNlc3Npb246IF8sXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogby5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogZCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGEsXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICByZXR1cm4gZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBNdCh1LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSksIG5ldyBQcm9taXNlKChoLCB2KSA9PiB7XG4gICAgICBjb25zdCBTID0gKCkgPT4ge1xuICAgICAgICBldChcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgXy5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAodykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IEFjKHcsIGYpO1xuICAgICAgICB9IGNhdGNoIChiKSB7XG4gICAgICAgICAgdihiKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdyA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5tLnRvdGFsIH1cbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odyk7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAodykgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBiID0gYXdhaXQgSWModywgZik7XG4gICAgICAgICAgaChiKTtcbiAgICAgICAgfSBjYXRjaCAoYikge1xuICAgICAgICAgIHYoYik7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25jYW5jZWwgPSBTLCBfLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IGVvKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgeyBsb2dfXzogc2UsIGVycl9fOiBEZSB9ID0gSShcImFkeWVuLWdvb2dsZS1wYXlcIiksIE5jID0gdmUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBtLCBfO1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5hZHllbixcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFhuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBzZShcIkdvb2dsZSBQYXkgQ1BNXCIsIG4pO1xuICAgIGNvbnN0IGEgPSBuLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBEZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHI7XG4gICAgaWYgKHNlKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgX3IoKSwgISgoXyA9IChtID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0ucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIERlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgbXIoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIWEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBEZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgc2UoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE0ocyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGYgPSBCZSh7XG4gICAgICAgIHByZWZpbGw6IGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeSA9IGF3YWl0IFllKGUuYmFzZVVybCwgZiksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCB5LmlzUmVhZHlUb1BheShmKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIHNlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoZikge1xuICAgICAgcmV0dXJuIERlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZiksIHI7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGJlKHMsIGwudG9rZW4sIGMsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTi5hZHllbkdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIERlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIHkpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoKHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFkeWVuLFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIEZjID0gQihcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgeSwgaCwgdiwgUywgdywgYiwgQywgeDtcbiAgICBzZShcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFhuKSwgeyBpbml0aWFsUHJldmlldzogcywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbCB9ID0gYSwgYyA9IG8ubWV0YWRhdGE7XG4gICAgaWYgKCFjLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCB1ID0gZS5hbnlDZGVDb25uZWN0aW9uLCBkID0gYXdhaXQgTSh1KSwgbSA9IEJlKHtcbiAgICAgIHByZWZpbGw6IGQsXG4gICAgICBnYXRld2F5OiBcImFkeWVuXCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogYy5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogYy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogYy5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGxcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG8ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBNdChkLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBsXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IGF3YWl0IFllKGUuYmFzZVVybCwgbSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGsgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YShtKTtcbiAgICAgIHNlKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgayk7XG4gICAgICBjb25zdCBKID0gZnIociwgayksIEwgPSBxKFxuICAgICAgICBKLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYSA9PSBudWxsID8gdm9pZCAwIDogYS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBpZiAoZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLkxcbiAgICAgIH0pLCAhKCh5ID0gKGYgPSBrLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS50b2tlbikpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgZGUgPSBhd2FpdCBvZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IExbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBMW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IExbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogSChMKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEoTCwgZC5jaGVja291dF9zZXR0aW5ncylcbiAgICAgIH0pLCBBZSA9IEplKGRlKTtcbiAgICAgIHNlKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgQWUpO1xuICAgICAgbGV0IFcgPSBhd2FpdCBPKHUsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBkLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIGJyb3dzZXJfaW5mbzogaG8oKSxcbiAgICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YToge1xuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46ICh2ID0gKGggPSBrLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaC50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogdi50b2tlblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzZShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIFcpO1xuICAgICAgbGV0IGhlID0gKHcgPSAoUyA9IFcucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogU1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHcuaWQ7XG4gICAgICBjb25zdCBMZSA9IChiID0gVy5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBiLmZpbmQoKFdlKSA9PiBXZS50eXBlID09PSBcImFkeWVuLTNkc1wiKTtcbiAgICAgIGlmIChMZSAmJiBMZS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgc2UoXCJBZHllbiAzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBMZSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBXZSB9ID0gYXdhaXQgRWUoe1xuICAgICAgICAgIHVybDogTGUucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHNlKGDilbAgQWR5ZW4gM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtXZX1dYCksIFdlID09PSBULkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKFdlID09PSBULkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoTGUgJiYgIWhlICYmIChXID0gYXdhaXQgTyh1LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZC50b2tlbixcbiAgICAgICAgdGhlaXJfcG1faWQ6IExlLnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyXG4gICAgICAgIH1cbiAgICAgIH0pLCBzZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlIGFmdGVyIDNEU1wiLCBXKSwgaGUgPSAoeCA9IChDID0gVy5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBDWzBdKSA9PSBudWxsID8gdm9pZCAwIDogeC5pZCksICFoZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCBtZXRob2QgSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gdWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYWR5ZW4tZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBMLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBXLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChrKSB7XG4gICAgICB0aHJvdyBEZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBrKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBrXG4gICAgICB9KSwgbmV3IEVycm9yKChrID09IG51bGwgPyB2b2lkIDAgOiBrLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IFFlLCBlcnJfXzogTWMgfSA9IEkoXCJhd3gtYWNoXCIpLCBMYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHYsIFM7XG4gICAgY29uc3QgbyA9IHEociwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYXdhaXQgTShzKSwgYyA9IGEudmVyaWZpY2F0aW9uTWV0aG9kID8/IFwicGxhaWRcIjtcbiAgICBsZXQgdSA9IG51bGw7XG4gICAgaWYgKGMgPT09IFwibWljcm9fZGVwb3NpdFwiKSB7XG4gICAgICBRZShcIk1pY3JvIGRlcG9zaXQgdmVyaWZpY2F0aW9uIHNlbGVjdGVkLCBzaG93aW5nIGZvcm0uLi5cIik7XG4gICAgICB0cnkge1xuICAgICAgICB1ID0gYXdhaXQganQoXCJhY2hfZGlyZWN0X2RlYml0XCIsIHtcbiAgICAgICAgICB3aWR0aDogXCI0NTBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI0MDBweFwiLFxuICAgICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybFxuICAgICAgICB9KSwgUWUoXCJNaWNybyBkZXBvc2l0IGRhdGEgY29sbGVjdGVkXCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IFFlKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiTWljcm8gZGVwb3NpdCBmb3JtIGNhbmNlbGxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZCA9IGF3YWl0IG9lKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogb1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBvW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBvW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiBIKG8pLFxuICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEobywgbC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogbGUoKVxuICAgIH0pLCBtID0gSmUoZCksIF8gPSBtID09IG51bGwgPyB2b2lkIDAgOiBtLmNvbnNlbnRfaWQsIHkgPSAoUyA9ICh2ID0gKGF3YWl0IE8ocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBfLFxuICAgICAgICB2ZXJpZmljYXRpb25fbWV0aG9kOiBjLFxuICAgICAgICBkaXJlY3RfZGViaXRfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYWNoX2RpcmVjdF9kZWJpdFwiLFxuICAgICAgICAgIGFjaF9kaXJlY3RfZGViaXQ6IHtcbiAgICAgICAgICAgIC8vcGxhaWQgdmVyaWZpY2F0aW9uIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICAgICAgYnVzaW5lc3NfYWNjb3VudDogYS5pc0J1c2luZXNzQWNjb3VudCA/PyAhMSxcbiAgICAgICAgICAgIG93bmVyX25hbWU6IE90KG9bcC5GSVJTVF9OQU1FXSwgb1twLkxBU1RfTkFNRV0pLFxuICAgICAgICAgICAgb3duZXJfZW1haWw6IG9bcC5FTUFJTF0sXG4gICAgICAgICAgICAvL0FDSCBtaWNybyBkZXBvc2l0IHZlcmlmaWNhdGlvbiByZXF1aXJlZCBmaWVsZHNcbiAgICAgICAgICAgIGFjY291bnRfbnVtYmVyOiB1ID09IG51bGwgPyB2b2lkIDAgOiB1LmFjY291bnRfbnVtYmVyLFxuICAgICAgICAgICAgYWJhX3JvdXRpbmdfbnVtYmVyOiB1ID09IG51bGwgPyB2b2lkIDAgOiB1LmFiYV9yb3V0aW5nX251bWJlclxuICAgICAgICAgICAgLy8gbWFuZGF0ZV92ZXJzaW9uOiAnMS4wJyxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogdi5maW5kKFxuICAgICAgKHcpID0+IHcudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApKSA9PSBudWxsID8gdm9pZCAwIDogUy5yZWRpcmVjdF91cmw7XG4gICAgaWYgKHkpIHtcbiAgICAgIFFlKFwiUGxhaWQgdmVyaWZpY2F0aW9uIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIik7XG4gICAgICBjb25zdCB7IHN0YXR1czogdyB9ID0gYXdhaXQgRWUoe1xuICAgICAgICB1cmw6IHksXG4gICAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgICAgZnJhbWVXaWR0aDogXCI1MDBweFwiLFxuICAgICAgICBmcmFtZUhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICBmcmFtZVRpdGxlOiBcIkFDSCB2ZXJpZmljYXRpb25cIlxuICAgICAgfSk7XG4gICAgICBpZiAoUWUoYOKVsCBQbGFpZCB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7d31dYCksIHcgPT09IFQuQ0FOQ0VMTEVEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGFpZCB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgaWYgKHcgPT09IFQuRkFJTFVSRSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxhaWQgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICB9XG4gICAgY29uc3QgaCA9IGF3YWl0IE8ocywge1xuICAgICAgc2VjdXJlX3Rva2VuOiBsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBfXG4gICAgICB9XG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB1ZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYWNoXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHMsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBvLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBoLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoICh3KSB7XG4gICAgICB0aHJvdyBNYyhcIkFDSCBwYXltZW50IGVycm9yXCIsIHcpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogd1xuICAgICAgfSksIG5ldyBFcnJvcigodyA9PSBudWxsID8gdm9pZCAwIDogdy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBidCB9ID0gSShcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBEYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCB4dCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLmFcbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiB4YyhlLCB0KSB7XG4gIGlmICghZS5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBidChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIGUpO1xuICBjb25zdCB7IHN0YXR1czogciB9ID0gYXdhaXQgRWUoe1xuICAgIHVybDogZS5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogdC5iYXNlVXJsXG4gIH0pO1xuICBpZiAoYnQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IFQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IE8odC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiB0LnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogZS50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBidChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24gT2MoZSwgdCkge1xuICB2YXIgciwgbiwgYSwgbywgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBsID0gZS5wYXltZW50LCBjID0gZ3IodC5ub25DZGVGb3JtSW5wdXRzLCBsKSwgdSA9IHEoXG4gICAgICBjLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBfID0gKGF3YWl0IG9lKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogSCh1KSxcbiAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBRKFxuICAgICAgICB1LFxuICAgICAgICB0LnByZWZpbGwuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICAgICksXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogbGUoKVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0uY29uc2VudF9pZDtcbiAgICBpZiAoIV8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGxldCBmID0gYXdhaXQgTyh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogdC5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogXyxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkobC50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBidChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGYpO1xuICAgIGxldCB5ID0gKG4gPSAociA9IGYucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG4uaWQ7XG4gICAgY29uc3QgaCA9IChhID0gZi5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBhLmZpbmQoXG4gICAgICAoUykgPT4gUy50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKGggIT0gbnVsbCAmJiBoLnJlZGlyZWN0X3VybCAmJiBoLmNvbnNlbnRfaWQgJiYgaC50aGVpcl9wbV9pZCAmJiAoZiA9IGF3YWl0IHhjKGgsIHQpLCB5ID0gKHMgPSAobyA9IGYucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogb1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaWQpLCAheSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IHYgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQodiksIHVlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhd3gtYXBwbGVwYXlcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb246IHQuY29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IHUsXG4gICAgICBjb25maXJtUmVzdWx0OiBmLFxuICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgIH0pO1xuICB9IGNhdGNoIChsKSB7XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGMpLCBsO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiB0dCwgZXJyX186IHRvIH0gPSBJKFwiYXd4LWFwcGxlLXBheVwiKSwgVWMgPSB2ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFluKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAodHQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGhyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gdHQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICh0dChcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gdHQoXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHI7XG4gICAgaWYgKCFuLm1ldGFkYXRhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gYXdhaXQgTShzKSwgYyA9IGwubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgYmUocywgbC50b2tlbiwgYywgdm9pZCAwKSwgZCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBOLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5tLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgdG8oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgdC5nZXQub25DaGVja291dEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgamMgPSBCKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgWW4pLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBsIH0gPSBuLCBjID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTShjKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBtID0gd3Ioe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBsLFxuICAgICAgcHJlZmlsbDoge1xuICAgICAgICAuLi51XG4gICAgICB9LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgbSksIGYgPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IG8ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIGcoXCJhcHBsZV9wYXlfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIHByb2Nlc3Nvcl9uYW1lOiB0LnByb2Nlc3Nvcl9uYW1lLFxuICAgICAgcHJlZmlsbDogTXQodSwgW1wiYnJhbmRcIl0pLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pLCBuZXcgUHJvbWlzZSgoaCwgdikgPT4ge1xuICAgICAgY29uc3QgUyA9ICgpID0+IHtcbiAgICAgICAgdHQoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCB2KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIF8ub25jYW5jZWwgPSBTLCBfLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgRGModywgZik7XG4gICAgICAgIH0gY2F0Y2ggKGIpIHtcbiAgICAgICAgICB2KGIpO1xuICAgICAgICB9XG4gICAgICB9LCBfLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB3ID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLm0udG90YWwgfVxuICAgICAgICB9O1xuICAgICAgICBfLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbih3KTtcbiAgICAgIH0sIF8ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICh3KSA9PiB7XG4gICAgICAgIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9hdXRob3JpemVkXCIpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGIgPSBhd2FpdCBPYyh3LCBmKTtcbiAgICAgICAgICBoKGIpO1xuICAgICAgICB9IGNhdGNoIChiKSB7XG4gICAgICAgICAgdihiKTtcbiAgICAgICAgfVxuICAgICAgfSwgXy5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChoKSA9PiB7XG4gICAgICB0aHJvdyB0byhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBnKFwiYXBwbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaFxuICAgICAgfSksIGg7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IG5lLCBlcnJfXzogeGUgfSA9IEkoXCJhd3gtZ29vZ2xlLXBheVwiKSwgJGMgPSB2ZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgdmFyIG0sIF87XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEpuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBuZShcIkdvb2dsZSBQYXkgQ1BNXCIsIG4pO1xuICAgIGNvbnN0IGEgPSBuLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiB4ZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHI7XG4gICAgaWYgKG5lKFwiTG9hZGluZyBHb29nbGUgUGF5IHNjcmlwdFwiKSwgYXdhaXQgX3IoKSwgISgoXyA9IChtID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0ucGF5bWVudHMpICE9IG51bGwgJiYgXy5hcGkpKVxuICAgICAgcmV0dXJuIHhlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgcjtcbiAgICBpZiAoYXdhaXQgbXIoZS5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIWEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiB4ZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHI7XG4gICAgbmUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE0ocyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGYgPSBCZSh7XG4gICAgICAgIHByZWZpbGw6IGwsXG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeSA9IGF3YWl0IFllKGUuYmFzZVVybCwgZiksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCB5LmlzUmVhZHlUb1BheShmKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIG5lKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoZikge1xuICAgICAgcmV0dXJuIHhlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgZiksIHI7XG4gICAgfVxuICAgIGNvbnN0IGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGJlKHMsIGwudG9rZW4sIGMsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTi5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICB4ZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IFUuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgR2MgPSBCKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBmLCB5LCBoLCB2LCBTLCB3LCBiO1xuICAgIG5lKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG8gPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgSm4pLCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBsIH0gPSBhLCBjID0gby5tZXRhZGF0YTtcbiAgICBpZiAoIWMucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBtID0gQmUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogYy5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogYy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogYy5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGxcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IG8ucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBNdChkLCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBsXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IGF3YWl0IFllKGUuYmFzZVVybCwgbSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IEMgPSBhd2FpdCBfLmxvYWRQYXltZW50RGF0YShtKTtcbiAgICAgIG5lKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgQyk7XG4gICAgICBjb25zdCB4ID0gZnIociwgQyksIGsgPSBxKFxuICAgICAgICB4LFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYSA9PSBudWxsID8gdm9pZCAwIDogYS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICk7XG4gICAgICBuZShcIl9fX1wiLCBrKSwgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAgIC4uLmtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgSiA9ICh5ID0gKGYgPSBDLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS50b2tlbjtcbiAgICAgIGlmICghSilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBMID0gYXdhaXQgb2UodSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBrW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZToga1twLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBrW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IEgoayksXG4gICAgICAgIG5ld19jdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBRKGssIGQuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogbGUoKVxuICAgICAgfSksIHRlID0gSmUoTCk7XG4gICAgICBuZShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHRlKTtcbiAgICAgIGxldCBkZSA9IGF3YWl0IE8odSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHRlID09IG51bGwgPyB2b2lkIDAgOiB0ZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG5lKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgZGUpO1xuICAgICAgbGV0IEFlID0gKHYgPSAoaCA9IGRlLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGhbMF0pID09IG51bGwgPyB2b2lkIDAgOiB2LmlkO1xuICAgICAgY29uc3QgVyA9IChTID0gZGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogUy5maW5kKFxuICAgICAgICAoaGUpID0+IGhlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKFcgJiYgVy5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgbmUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBXKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IGhlIH0gPSBhd2FpdCBFZSh7XG4gICAgICAgICAgdXJsOiBXLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChuZShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7aGV9XWApLCBoZSA9PT0gVC5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChoZSA9PT0gVC5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKFcgJiYgIUFlICYmIChkZSA9IGF3YWl0IE8odSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBXLnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBXLmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIG5lKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgZGUpLCBBZSA9IChiID0gKHcgPSBkZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB3WzBdKSA9PSBudWxsID8gdm9pZCAwIDogYi5pZCksICFBZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gdWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB1LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogayxcbiAgICAgICAgY29uZmlybVJlc3VsdDogZGUsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgIHRocm93IHhlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIEMpLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IENcbiAgICAgIH0pLCBuZXcgRXJyb3IoKEMgPT0gbnVsbCA/IHZvaWQgMCA6IEMubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgcm8gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBubyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5hc3luYyBmdW5jdGlvbiBWYyhlLCB0KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCB4dCh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4uYVxuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHFjKGUsIHQpIHtcbiAgdmFyIHIsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IGUucGF5bWVudCwgbyA9IGdyKHQubm9uQ2RlRm9ybUlucHV0cywgYSksIHMgPSBxKG8sIHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uc1xuICAgIH0pLCBhd2FpdCBvZSh0LmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IEgocyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUShcbiAgICAgICAgcyxcbiAgICAgICAgdC5wcmVmaWxsLmNoZWNrb3V0X3NldHRpbmdzXG4gICAgICApLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGxlKClcbiAgICB9KTtcbiAgICBjb25zdCBsID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoYS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgYyA9IGF3YWl0IE8odC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGxcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChyID0gYy5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCB1ZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGMsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobyksIGE7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IEV0LCBlcnJfXzogb28gfSA9IEkoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCB6YyA9IHZlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHJvKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAoRXQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IGhyKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gRXQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIEV0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgbCA9IGF3YWl0IE0ocyksIGMgPSBsLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGJlKHMsIGwudG9rZW4sIGMsIHZvaWQgMCksIGQgPSBhc3luYyAobSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgTi5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIG9vKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IF9cbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBIYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHk7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbiwgbCA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBybyksIGMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBNKGMpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIG0gPSB3cih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IG8sXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgZGVmYXVsdExhYmVsOiAoeSA9IGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KTtcbiAgICBnKFwiYXBwbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogdC5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgXyA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgbSksIGYgPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHQubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiBlLmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKGgsIHYpID0+IHtcbiAgICAgIF8ub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIEV0KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgdihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIF8ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKFMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBWYyhTLCBmKTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIHYodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IFMgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IG0udG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgXy5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oUyk7XG4gICAgICB9LCBfLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoUykgPT4ge1xuICAgICAgICBnKFwiYXBwbGVfcGF5X3BheW1lbnRfYXV0aG9yaXplZFwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgcWMoUywgZik7XG4gICAgICAgICAgaCh3KTtcbiAgICAgICAgfSBjYXRjaCAodykge1xuICAgICAgICAgIHYodyk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoaCkgPT4ge1xuICAgICAgdGhyb3cgb28oXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBoKSwgZyhcImFwcGxlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGhcbiAgICAgIH0pLCBoO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBSZSwgZXJyX186IHJ0IH0gPSBJKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIEJjID0gdmUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHZhciBkLCBtO1xuICAgIFJlKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBubyk7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgUmUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gcnQoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCByO1xuICAgIGlmIChSZShcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IF9yKCksICEoKG0gPSAoZCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBkLnBheW1lbnRzKSAhPSBudWxsICYmIG0uYXBpKSlcbiAgICAgIHJldHVybiBydChcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgUmUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0obyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBCZSh7XG4gICAgICAgIHByZWZpbGw6IHMsXG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgZiA9IGF3YWl0IFllKGUuYmFzZVVybCwgXyksIHsgcmVzdWx0OiB5IH0gPSBhd2FpdCBmLmlzUmVhZHlUb1BheShfKTtcbiAgICAgIGlmICgheSlcbiAgICAgICAgcmV0dXJuIFJlKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHI7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgcmV0dXJuIHJ0KFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgXyksIHI7XG4gICAgfVxuICAgIGNvbnN0IGwgPSBzLm1vZGUgPT09IFwic2V0dXBcIiwgYyA9IGF3YWl0IGJlKG8sIHMudG9rZW4sIGwsIHZvaWQgMCksIHUgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgTi5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5fLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGNcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBydChcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBmKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IGZcbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoZiA9PSBudWxsID8gdm9pZCAwIDogZi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBVLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBZYyA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGYsIHksIGgsIHY7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogbywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gYSwgYyA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBubykubWV0YWRhdGEsIHUgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGQgPSBhd2FpdCBNKHUpLCBtID0gQmUoe1xuICAgICAgcHJlZmlsbDogZCxcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogYy5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogYy5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogYy5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogbyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KTtcbiAgICBnKFwiZ29vZ2xlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHIucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBkLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IF8gPSBhd2FpdCBZZShlLmJhc2VVcmwsIG0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBTID0gYXdhaXQgXy5sb2FkUGF5bWVudERhdGEobSk7XG4gICAgICBSZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIFMpO1xuICAgICAgY29uc3QgdyA9IGZyKHQsIFMpLCBiID0gcSh3LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uYlxuICAgICAgfSk7XG4gICAgICBjb25zdCBDID0gKHkgPSAoZiA9IFMucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuO1xuICAgICAgaWYgKCFDKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IHggPSBhd2FpdCBvZSh1LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGJbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBiW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGJbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczogSChiKSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEoYiwgZC5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBsZSgpXG4gICAgICB9KTtcbiAgICAgIFJlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHgpO1xuICAgICAgY29uc3QgayA9IGF3YWl0IE8odSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShDKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgodiA9IChoID0gay5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBoWzBdKSA9PSBudWxsID8gdm9pZCAwIDogdi5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIHVlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBiLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBrLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChTKSB7XG4gICAgICB0aHJvdyBydChcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBTKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBTXG4gICAgICB9KSwgbmV3IEVycm9yKChTID09IG51bGwgPyB2b2lkIDAgOiBTLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IEpjLCBlcnJfXzogYW8gfSA9IEkoXCJwb2NreXQtY2NcIiksIFdjID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgWmMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gV2Muc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBhbyhuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBpbyA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gSmMoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3R9XWApLCB0O1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgciA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IGFvKHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7ZWUodCl9YCksIG5ldyBFcnJvcihyKTtcbiAgfVxufSwgWHQgPSAoZSwgdCkgPT4gbmV3IFVSTChlKS5zZWFyY2hQYXJhbXMuZ2V0KHQpLCBLYyA9IChlKSA9PiAoZSA9PSBudWxsID8gdm9pZCAwIDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBRYyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBaYyh0KSwgbiA9IGF3YWl0ICRuKHsgdXJsOiByW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IGUgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBpbyhuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogcltcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IHJbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogd3QsIGVycl9fOiBYYyB9ID0gSShcImN5YnMtZnJhbWVcIiksIGVsID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gIHIubmFtZSA9IFwiY2FyZGluYWxfY29sbGVjdGlvbl9pZnJhbWVcIiwgci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCIsIHIuc3R5bGUud2lkdGggPSBcIjEwcHhcIiwgci5zdHlsZS5oZWlnaHQgPSBcIjEwcHhcIjtcbiAgY29uc3QgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJmb3JtXCIpO1xuICBuLmFjdGlvbiA9IGUsIG4ubWV0aG9kID0gXCJQT1NUXCIsIG4udGFyZ2V0ID0gci5uYW1lO1xuICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICByZXR1cm4gYS50eXBlID0gXCJoaWRkZW5cIiwgYS5uYW1lID0gXCJKV1RcIiwgYS52YWx1ZSA9IHQsIG4uYXBwZW5kQ2hpbGQoYSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobiksIHsgZm9ybTogbiwgZGV0YWNoOiAoKSA9PiB7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyKSwgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChuKTtcbiAgfSB9O1xufSwgdGwgPSBhc3luYyAoZSkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgY29uc3QgeyBwb3N0VXJsOiBuLCBhY2Nlc3NUb2tlbjogYSB9ID0gZSwgbyA9IG5ldyBVUkwobikub3JpZ2luLCB7IGZvcm06IHMsIGRldGFjaDogbCB9ID0gZWwobiwgYSk7XG4gIHd0KFwiQXR0YWNoZWQgZGV2aWNlIGRhdGEgY29sbGVjdG9yXCIpO1xuICBjb25zdCBjID0gKGQpID0+IHtcbiAgICBpZiAoZC5vcmlnaW4gIT09IG8pXG4gICAgICByZXR1cm47XG4gICAgY29uc3QgbSA9IEpTT04ucGFyc2UoZC5kYXRhKTtcbiAgICBpZiAod3QoXCJSZWNlaXZlZCBldmVudCBmcm9tIGRldmljZSBkYXRhIGNvbGxlY3RvcjpcIiwgbSksIG0uTWVzc2FnZVR5cGUgPT09IFwicHJvZmlsZS5jb21wbGV0ZWRcIikge1xuICAgICAgdChtKSwgdSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSwgdSA9ICgpID0+IHtcbiAgICBsKCksIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBjKTtcbiAgfTtcbiAgdHJ5IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgYyksIHd0KFwiQXR0YWNoZWQgbGlzdGVuZXIgdG8gd2luZG93XCIpLCBzLnN1Ym1pdCgpLCB3dChcIlN1Ym1pdHRlZCBmb3JtXCIpO1xuICB9IGNhdGNoIChkKSB7XG4gICAgWGMoXCJFcnJvciBzdWJtaXR0aW5nIGZvcm06XCIsIGQpLCB1KCksIHIoZCk7XG4gIH1cbn0pLCBybCA9IChlKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsOiB0LCBhY2Nlc3NUb2tlbjogciwgbWVyY2hhbnREYXRhOiBuLCBpZnJhbWU6IGEsIGhvc3Q6IG8gfSA9IGUsIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgcy5hY3Rpb24gPSB0LCBzLm1ldGhvZCA9IFwiUE9TVFwiLCBzLnRhcmdldCA9IGEubmFtZTtcbiAgY29uc3QgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgbC50eXBlID0gXCJoaWRkZW5cIiwgbC5uYW1lID0gXCJKV1RcIiwgbC52YWx1ZSA9IHI7XG4gIGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gIHJldHVybiBjLnR5cGUgPSBcImhpZGRlblwiLCBjLm5hbWUgPSBcIk1EXCIsIGMudmFsdWUgPSBuLCBzLmFwcGVuZENoaWxkKGwpLCBzLmFwcGVuZENoaWxkKGMpLCBvLmFwcGVuZENoaWxkKHMpLCBzO1xufSwgeyBsb2dfXzogamUsIGVycl9fOiBzbyB9ID0gSShcImN5YnNcIiksIGNvID0geiQxLm9iamVjdCh7XG4gIHN0ZXBfdXBfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGFjY2Vzc190b2tlbjogeiQxLnN0cmluZygpLFxuICBkZF91cmw6IEQoeiQxLnN0cmluZygpKSxcbiAgZGRfdG9rZW46IEQoeiQxLnN0cmluZygpKSxcbiAgbWVyY2hhbnRfZGF0YTogeiQxLnN0cmluZygpXG59KSwgbmwgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG9sID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGNvLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgc28oYEN5YmVyc291cmNlIDNEUyBpcyByZXF1aXJlZCBidXQgdXNlciBhY3Rpb24gaXMgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCksIG5ldyBFcnJvcihubCk7XG4gIHJldHVybiB0LmRhdGE7XG59LCBhbCA9IChlKSA9PiBlLnR5cGUgPT09IFwiY3liZXJzb3VyY2VfcGF5ZXJfYXV0aFwiLCBpbCA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHsgc3RlcFVwVXJsOiB0LCBhY2Nlc3NUb2tlbjogciwgbWVyY2hhbnREYXRhOiBuLCBpZnJhbWU6IGEsIGhvc3Q6IG8sIGNhbmNlbEJ1dHRvbjogcyB9ID0gZSwgbCA9IG5ldyBVUkwodCkub3JpZ2luO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGMpID0+IHtcbiAgICBjb25zdCB1ID0gKCkgPT4ge1xuICAgICAgamUoXCJDbGVhbmluZyB1cCBDeWJlcnNvdXJjZSAzRFMgZmxvd1wiKSwgcy5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZCksIG8ucmVtb3ZlKCk7XG4gICAgfSwgZCA9ICgpID0+IHtcbiAgICAgIGplKFwiQ3liZXJzb3VyY2UgM0RTIGNhbmNlbGxlZFwiKSwgYyh7IHN0YXR1czogVC5DQU5DRUxMRUQsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgXyA9IGRyKGEsIChoKSA9PiB7XG4gICAgICBqZShcIkN5YmVyc291cmNlIDNEUyBjb21wbGV0ZWQgd2l0aCBzdGF0dXM6XCIsIGgpLCBjKHsgc3RhdHVzOiBoLnN0YXR1cywgY2xlYW51cDogdSB9KSwgZigpO1xuICAgIH0sIGwsIFwicGluZy0zZHMtc3RhdHVzXCIsIFhyKSwgZiA9IGpuKHtcbiAgICAgIGVsZW1lbnRzOiB7IGhvc3Q6IG8sIGlmcmFtZTogYSwgY2FuY2VsQnV0dG9uOiBzIH0sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IF8sXG4gICAgICByZXNvbHZlOiAoaCkgPT4ge1xuICAgICAgICBjKHsgc3RhdHVzOiBoLnN0YXR1cywgY2xlYW51cDogdSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkKSwgcmwoe1xuICAgICAgc3RlcFVwVXJsOiB0LFxuICAgICAgYWNjZXNzVG9rZW46IHIsXG4gICAgICBtZXJjaGFudERhdGE6IG4sXG4gICAgICBpZnJhbWU6IGEsXG4gICAgICBob3N0OiBvXG4gICAgfSkuc3VibWl0KCk7XG4gIH0pO1xufSwgbG8gPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB0ID0gb2woZSksIHsgc3RlcF91cF91cmw6IHIsIGFjY2Vzc190b2tlbjogbiwgZGRfdXJsOiBhLCBkZF90b2tlbjogbywgbWVyY2hhbnRfZGF0YTogcyB9ID0gdDtcbiAgaWYgKGEgJiYgbykge1xuICAgIGNvbnN0IG0gPSBhd2FpdCB0bCh7XG4gICAgICBwb3N0VXJsOiBhLFxuICAgICAgYWNjZXNzVG9rZW46IG9cbiAgICB9KTtcbiAgICBqZShcIkRldmljZSBkYXRhIGNvbGxlY3Rpb24gY29tcGxldGVkIHdpdGggc3RhdHVzOlwiLCBtLlN0YXR1cyk7XG4gIH0gZWxzZVxuICAgIHNvKFwiTm8gZGV2aWNlIGRhdGEgY29sbGVjdGlvbiBVUkwgb3IgdG9rZW4gcHJvdmlkZWRcIik7XG4gIGNvbnN0IHsgaG9zdDogbCwgaWZyYW1lOiBjLCBjYW5jZWxCdXR0b246IHUgfSA9IFV0KFwiXCIsIHsgbmFtZTogXCJjYXJkaW5hbF9hdXRoX2lmcmFtZVwiIH0pO1xuICBqZShcIlJ1bm5pbmcgQ3liZXJzb3VyY2UgM0RTIGZsb3dcIik7XG4gIGNvbnN0IGQgPSBhd2FpdCBpbCh7XG4gICAgc3RlcFVwVXJsOiByLFxuICAgIGFjY2Vzc1Rva2VuOiBuLFxuICAgIG1lcmNoYW50RGF0YTogcyxcbiAgICBpZnJhbWU6IGMsXG4gICAgaG9zdDogbCxcbiAgICBjYW5jZWxCdXR0b246IHVcbiAgfSk7XG4gIGlmIChkLmNsZWFudXAoKSwgZC5zdGF0dXMgPT09IFQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgaWYgKGQuc3RhdHVzID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGQuc3RhdHVzID09PSBULlNVQ0NFU1MpIHtcbiAgICBqZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlXG4gICAgX3QoZC5zdGF0dXMpO1xufSwgeyBsb2dfXzogeHIgfSA9IEkoXCJzdHJpcGUtY2NcIiksIHNsID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwgdW8gPSBhc3luYyAoZSkgPT4ge1xuICBnKFwiM2RzX3N0cmlwZV9yZWRpcmVjdFwiLCB7XG4gICAgLi4uZVxuICB9KSwgeHIoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7ZS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IHppKGUpLCBnKFwiM2RzX3N0cmlwZV9jb21wbGV0ZVwiKSwgeHIoXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59LCBjbCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBzbC5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKVxuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaXBlIDNEUyBtZXRhZGF0YSBoYXMgdW5leHBlY3RlZCBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodC5lcnJvci5lcnJvcnMpfWApO1xuICByZXR1cm4ge1xuICAgIHN0cmlwZV9wazogdC5kYXRhLnN0cmlwZV9wayxcbiAgICBjbGllbnRfc2VjcmV0OiB0LmRhdGEuY2xpZW50X3NlY3JldCxcbiAgICBzdHJpcGVfcG1faWQ6IHQuZGF0YS5zdHJpcGVfcG1faWRcbiAgfTtcbn0sIGxsID0gNCwgeyBsb2dfXzogTWUsIGVycl9fOiBUdCB9ID0gSShcInVuaWZpZWQtY2NcIiksIHVsID0gYXN5bmMgKHtcbiAgY29udGV4dDogZSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICBub25DZGVGb3JtSW5wdXRzOiByLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IGFcbn0pID0+IHtcbiAgTWUoXCLilJwgUnVubmluZyB1bmlmaWVkIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHQgfSk7XG4gIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICBNZShg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtzLm1vZGV9XWApO1xuICBjb25zdCBsID0gcShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGMgPSB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBsLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXG4gICAgICAvLyBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGluIHRoZSBjaGVja291dCBhdHRlbXB0IGxvZ3NcbiAgICAgIGRldmljZVRva2VuOiBPbigpXG4gICAgfSxcbiAgICB1c2VfdW5pZmllZF9jY19mbG93OiAhMCxcbiAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHtcbiAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgIH0sXG4gICAgcGF5bWVudF9yb3V0ZV9pZDogYS5wYXltZW50Um91dGVJZFxuICB9O1xuICBUdChhLCBjKSwgTWUoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBQYXJ0aWFsIFBNcyBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgY29uc3QgdSA9IGF3YWl0IFJuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICB9KTtcbiAgVm4odSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICBjb25zdCBkID0gYXdhaXQgVG4obywgYyk7XG4gIGlmIChNZShcIuKUnCBzdGFydFBmIHJlc3VsdFwiLCBkKSwgZC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgIHJldHVybiBwbyhzLm1vZGUsIGQpO1xuICBpZiAoIWQuY2hlY2tvdXRfYXR0ZW1wdF9pZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBjaGVja291dCBhdHRlbXB0IElEIGZyb20gUEYgcmVzdWx0XCIpO1xuICByZXR1cm4gZGwoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgcHJlZmlsbDogcyxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zOiBjLFxuICAgIGFueUNkZUNvbm5lY3Rpb246IG8sXG4gICAgc3RhcnRQZlJlc3VsdDogZCxcbiAgICBjaGVja291dEF0dGVtcHRJZDogZC5jaGVja291dF9hdHRlbXB0X2lkXG4gIH0pO1xufSwgZGwgPSBhc3luYyAoZSkgPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dDogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGEsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogbyxcbiAgICBzdGFydFBmUmVzdWx0OiBzLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBsXG4gIH0gPSBlO1xuICBsZXQgYyA9IHM7XG4gIGZvciAobGV0IHUgPSAwOyB1IDwgbGw7IHUrKykge1xuICAgIE1lKGDilJwgUnVubmluZyBjb25maXJtIGxvb3AgaXRlcmF0aW9uICR7dX1gKSwgZyhcInVuaWZpZWRfY2NfY29uZmlybV9sb29wX2l0ZXJhdGlvblwiLCB7IGl0ZXJhdGlvbjogdSB9KTtcbiAgICBjb25zdCB7IHVzZXJBY3Rpb246IGQgfSA9IG1sKGMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtID0gYXdhaXQgcGwodC5iYXNlVXJsLCBkLCByLCBuKTtcbiAgICAgIGEuZXh0cmFfbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLmEuZXh0cmFfbWV0YWRhdGEsXG4gICAgICAgIC4uLm0ubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgICAgfSwgTWUoXCLilJwgTmV3IGV4dHJhIG1ldGFkYXRhXCIsIGEuZXh0cmFfbWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIGNvbnN0IF8gPSBlZShtKTtcbiAgICAgIFR0KGDilJwgRXJyb3IgaW4gcnVubmluZyB1c2VyIGFjdGlvbiBpbiBpdGVyYXRpb24gJHt1fS4gQ29udGludWluZyB0byBjb25maXJtIHN0ZXAuLi5gLCBfKSwgZyhcInVuaWZpZWRfY2NfdXNlcl9hY3Rpb25fZXJyb3JcIiwgeyBlcnJvcl9tZXNzYWdlOiBfLCBpdGVyYXRpb246IHUgfSk7XG4gICAgfVxuICAgIGlmIChjID0gYXdhaXQgTyhvLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBsLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBhLmV4dHJhX21ldGFkYXRhXG4gICAgfSksIE1lKGDilJwgY29uZmlybVBmIHJlc3VsdCAoaXRlcmF0aW9uICR7dX0pYCwgYyksIGMuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHJldHVybiBwbyhyLm1vZGUsIGMpO1xuICB9XG4gIHRocm93IGcoXCJ1bmlmaWVkX2NjX3VuZXhwZWN0ZWRfYnJhbmNoXCIsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYy5jaGVja291dF9hdHRlbXB0X2lkLFxuICAgIGNvbmZpcm1QRlJlc3VsdDogY1xuICB9KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZXJyb3IsIHBsZWFzZSB0cnkgYW5vdGhlciBwYXltZW50IG1ldGhvZFwiKTtcbn0sIHBsID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHQuX3VuaWZpZWRfY2NfYWN0aW9uX25hbWUgPT09IFwiM0RTX1JFUVVJUkVEXCIpIHtcbiAgICBpZiAodC50eXBlID09PSBcInN0cmlwZV8zZHNcIilcbiAgICAgIHJldHVybiBhd2FpdCB1byhjbCh0KSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoSG4odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFpcndhbGxleDogYXdhaXQgQm4oZSwgdCkgfSB9O1xuICAgIGlmIChabih0KSlcbiAgICAgIHJldHVybiB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHsgYWR5ZW46IGF3YWl0IEtuKFxuICAgICAgICBuW3AuQ09VTlRSWV0sXG4gICAgICAgIHQsXG4gICAgICAgIHIubG9jYWxlXG4gICAgICApIH0gfTtcbiAgICBpZiAoYWwodCkpXG4gICAgICByZXR1cm4gYXdhaXQgbG8odCksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICBpZiAoX2wodCkpXG4gICAgICByZXR1cm4gYXdhaXQgbW8oeyByZXF1aXJlZF91c2VyX2FjdGlvbnM6IFt0XSB9LCBlKSwgeyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7fSB9O1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIDNEUyB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgfSBlbHNlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVpcmVkIHVzZXIgYWN0aW9uOiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xufSwgX2wgPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBfbyhbZV0pLCAhMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuICExO1xuICB9XG59LCBtbCA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykge1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPT09IDApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gICAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCA+IDEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBtdWx0aXBsZSByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyByZXF1aXJlZCB1c2VyIGFjdGlvbnNcIik7XG4gIGNvbnN0IHQgPSBFYS5zYWZlUGFyc2UoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBUdChcIlVzZXIgYWN0aW9uIHJhdyBwYXlsb2FkXCIsIGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKSwgVHQoXCJQYXJzaW5nIGVycm9yXCIsIHQuZXJyb3IpLCBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBzY2hlbWEgb2YgdXNlciBhY3Rpb24gcGF5bG9hZCBpcyBub3QgdmFsaWRcIik7XG4gIHJldHVybiB7XG4gICAgdXNlckFjdGlvbjogdC5kYXRhXG4gIH07XG59LCBwbyA9IChlLCB0KSA9PiB7XG4gIHZhciByO1xuICBpZiAoZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgY29uc3QgbiA9IHQuY2NfcG1faWQgPz8gKChyID0gdC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdLmlkKTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlOiBubyBDQyBQTSBJRCBvciBwYXltZW50X21ldGhvZHMgZm91bmQgaW4gUEYgcmVzdWx0XCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IG5cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICghdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gY2hlY2tvdXQgc3VjY2VzcyByZXNwb25zZSBmcm9tIHN0YXJ0UEZcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogdC5jaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxufSwgeyBsb2dfXzogRiwgZXJyX186IE9yIH0gPSBJKFwiY29tbW9uLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBmbCA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGYsIHk7XG4gICAgRihcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0IH0pO1xuICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pO1xuICAgIGcoXCJjb21tb25fY2NfZmxvd19zdGFydGVkXCIsIHtcbiAgICAgIC4uLnQsXG4gICAgICBwcmVmaWxsOiBzXG4gICAgfSk7XG4gICAgY29uc3QgbCA9ICgoZiA9IHMuZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzKSA9PSBudWxsID8gdm9pZCAwIDogZi51bmlmaWVkX2NjKSA/PyAwO1xuICAgIEYoYOKUnCBVbmlmaWVkIENDIHJvbGxvdXQ6ICR7TWF0aC5yb3VuZChsICogMTAwKX0lYCk7XG4gICAgY29uc3QgYyA9IE1hdGgucmFuZG9tKCksIHUgPSBjIDwgbCwgZCA9IHtcbiAgICAgIHJvbGw6IGMsXG4gICAgICB1bmlmaWVkQ0NSb2xsb3V0UmF0aW86IGwsXG4gICAgICB1c2VVbmlmaWVkQ0NGbG93OiB1XG4gICAgfTtcbiAgICBpZiAodSlcbiAgICAgIHJldHVybiBGKGDilJwgUGlja2VkIHVuaWZpZWQgQ0MgZmxvdyAoJHtjfSB2cyAke2x9KWApLCBnKFwidW5pZmllZF9jY19mbG93X3BpY2tlZFwiLCBkKSwgdWwoe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICB9KTtcbiAgICBGKGDilJwgUGlja2VkIGxlZ2FjeSBDQyBmbG93ICgke2N9IHZzICR7bH0pYCksIGcoXCJsZWdhY3lfY2NfZmxvd19waWNrZWRcIiwgZCksIEYoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgICBjb25zdCBtID0gcShcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHMuY2hlY2tvdXRfc2V0dGluZ3NcbiAgICApO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4ubVxuICAgIH0pO1xuICAgIGNvbnN0IF8gPSB7XG4gICAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBtLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHtcbiAgICAgICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICB9LFxuICAgICAgdXNlX3VuaWZpZWRfY2NfZmxvdzogITEsXG4gICAgICBwYXltZW50X3JvdXRlX2lkOiBhLnBheW1lbnRSb3V0ZUlkLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IGxlKClcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBGKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IFJuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKFZuKGgsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgcy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgRihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtzLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IExzKG8sIF8pO1xuICAgICAgICByZXR1cm4gRihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke3YucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB2IH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBGKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtlLmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgdiA9IGF3YWl0IE1yKG8sIF8pO1xuICAgICAgICByZXR1cm4gRihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogdiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIGlmIChoIGluc3RhbmNlb2YgSW4gJiYgaC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBGKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgRihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBoLnJlc3BvbnNlLmhlYWRlcnMpLCBnKFwiM2RzX3JlcXVpcmVkXCIsIHtcbiAgICAgICAgICAuLi50LFxuICAgICAgICAgIC4uLmgucmVzcG9uc2UuaGVhZGVyc1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdiA9IGgucmVzcG9uc2UuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgXCJvcC1leGlzdGluZy1jYy1wbS1pZFwiIGluIHYgJiYgKF8uZXhpc3RpbmdfY2NfcG1faWQgPSB2W1wib3AtZXhpc3RpbmctY2MtcG0taWRcIl0sIEYoYOKUnCBFeGlzdGluZyBDQyBQTSBJRDogJHtfLmV4aXN0aW5nX2NjX3BtX2lkfWApKTtcbiAgICAgICAgY29uc3QgUyA9IEtjKGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmIChTKSB7XG4gICAgICAgICAgRihcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBMID0gYXdhaXQgUWMoZS5iYXNlVXJsLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIF8uZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gTDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSG4oaC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIEYoXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgTCA9IGF3YWl0IEJuKGUuYmFzZVVybCwgaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBfLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IEw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFpuKGgucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBGKFwi4pScIEFkeWVuIDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFkeWVuIDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBMID0gYXdhaXQgS24oXG4gICAgICAgICAgICByW3AuQ09VTlRSWV0sXG4gICAgICAgICAgICBoLnJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICAgICAgICBzLmxvY2FsZVxuICAgICAgICAgICk7XG4gICAgICAgICAgXy5leHRyYV9tZXRhZGF0YS5hZHllbiA9IEw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQyA9IGF3YWl0IFRuKG8sIF8pO1xuICAgICAgICBGKFwi4pScIFN0YXJ0IHBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIEMpO1xuICAgICAgICBjb25zdCB4ID0gQy5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZChcbiAgICAgICAgICAoTCkgPT4gTC50eXBlID09PSBcImN5YmVyc291cmNlX3BheWVyX2F1dGhcIlxuICAgICAgICApO1xuICAgICAgICBpZiAoeCkge1xuICAgICAgICAgIEYoXCLilJwgQ3liZXJzb3VyY2UgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQ3liZXJzb3VyY2UgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IEwgPSBjby5wYXJzZSh4KSwgdGUgPSBhd2FpdCBsbyh7XG4gICAgICAgICAgICAuLi5MLFxuICAgICAgICAgICAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IFwiXCIsXG4gICAgICAgICAgICBfdW5pZmllZF9jY19wY2NzX2lkOiBcIlwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXy5leHRyYV9tZXRhZGF0YS5jeWJlcnNvdXJjZSA9IHRlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGsgPSAoKHkgPSBoLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiB5W1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICAhUyAmJiAheCA/IGsgPyAoRihcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IHVvKHlsKEMpKSkgOiAoRihcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IG1vKEMsIGUuYmFzZVVybCkpIDogRihcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpO1xuICAgICAgICBjb25zdCBKID0gQy5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgRihg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHtKfV1gKTtcbiAgICAgICAgICBjb25zdCBMID0gYXdhaXQgTyhvLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogSlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIEYoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgTCk7XG4gICAgICAgICAgY29uc3QgdGUgPSBtdChMKTtcbiAgICAgICAgICByZXR1cm4gRihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke3RlLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogdGUgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBGKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke2sgPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgTCA9IGF3YWl0IE1yKG8sIHtcbiAgICAgICAgICAgIC4uLl8sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogSixcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IGtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gRihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogTCB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBPcihcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgT3IoaCksIGg7XG4gICAgfVxuICB9XG4pLCB5bCA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChyKSA9PiByLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gT2kucGFyc2UodCk7XG59LCBobCA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgX28gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5maW5kKChyKSA9PiBobC5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgaWYgKCF0KVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbW1vbiAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gQm8ucGFyc2UodCk7XG59LCBtbyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBfbyhlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gIGlmIChyLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIEYoXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKSwgZyhcIjNkc19jb21wbGV0ZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgRihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke3IucmVkaXJlY3RfdXJsfV1gKSwgZyhcIjNkc19yZWRpcmVjdFwiLCB7XG4gICAgLi4uclxuICB9KTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IEVlKHsgdXJsOiByLnJlZGlyZWN0X3VybCwgYmFzZVVybDogdCB9KTtcbiAgaWYgKEYoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBULkNBTkNFTExFRClcbiAgICB0aHJvdyBnKFwiM2RzX2NhbmNlbGxlZFwiKSwgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBULkZBSUxVUkUpXG4gICAgdGhyb3cgZyhcIjNkc19mYWlsdXJlXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgZyhcImNvbW1vbl8zZHNfY29tcGxldGVkXCIpO1xufSwgZ2wgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICBzdXBwb3J0ZWRfY3VycmVuY2llczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gICAgZW52aXJvbm1lbnQ6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IFosIGVycl9fOiB3bCB9ID0gSShcImxvb3AtY3J5cHRvXCIpLCB2bCA9IHZlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlIH0pID0+IHtcbiAgICBaKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCB0ID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGdsKTtcbiAgICBaKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCksIFooXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbiksIG4gPSByLm1vZGUgPT09IFwic2V0dXBcIiwgYSA9IGF3YWl0IHh0KGUuYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICB9KSwgbyA9IGF3YWl0IGJlKFxuICAgICAgZS5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgci50b2tlbixcbiAgICAgIG4sXG4gICAgICB2b2lkIDBcbiAgICApO1xuICAgIGlmICghbiAmJiAhdC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llcy5pbmNsdWRlcyhyLmN1cnJlbmN5KSlcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ3VycmVuY3kgJHtyLmN1cnJlbmN5fSBub3QgZW5hYmxlZCBmb3IgTG9vcC4gRW5hYmxlZCBjdXJyZW5jaWVzOiAke3QubWV0YWRhdGEuc3VwcG9ydGVkX2N1cnJlbmNpZXN9YFxuICAgICAgKTtcbiAgICBpZiAoIWEgfHwgIWEubmV4dF9hY3Rpb25fbWV0YWRhdGEpXG4gICAgICB0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBmZXRjaCBuZWNlc3Nhcnkgc2V0dXAgZGF0YSBmb3IgTG9vcFwiKTtcbiAgICBjb25zdCBzID0gYS5uZXh0X2FjdGlvbl9tZXRhZGF0YTtcbiAgICBsZXQgbCA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGMgPSBzLm1pbl9hdXRob3JpemF0aW9uX2Ftb3VudDtcbiAgICBjb25zdCB1ID0gcy5hbGxvd19jdXN0b21lcl90b19jaG9vc2VfYXV0aDtcbiAgICBsZXQgZDtcbiAgICBuID8gKGQgPSAwLCBsID0gTWF0aC5tYXgobCwgYykpIDogKGQgPSAobyA/IG8uYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZSwgYyA9IE1hdGgubWF4KGMsIGQpLCBsID0gTWF0aC5tYXgobCwgYykpO1xuICAgIGNvbnN0IG0gPSBkLCBfID0gdjQoKSwgZiA9IHtcbiAgICAgIHBheW1lbnRVc2RBbW91bnQ6IG0sXG4gICAgICBzdWdnZXN0ZWRBdXRob3JpemF0aW9uVXNkQW1vdW50OiBsLFxuICAgICAgY3VzdG9tZXJSZWZJZDogXyxcbiAgICAgIG1pbkF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGMsXG4gICAgICBhbGxvd0N1c3RvbWVyVG9DaG9vc2VBdXRoOiB1XG4gICAgfSwgeSA9IHtcbiAgICAgIGFwaVRva2VuOiB0Lm1ldGFkYXRhLmFwaV90b2tlbixcbiAgICAgIGVudGl0eUlkOiB0Lm1ldGFkYXRhLmVudGl0eV9pZCxcbiAgICAgIG1lcmNoYW50SWQ6IHQubWV0YWRhdGEubWVyY2hhbnRfaWQsXG4gICAgICBlbnZpcm9ubWVudDogdC5tZXRhZGF0YS5lbnZpcm9ubWVudFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHdpZGdldFByb3BzOiBmLFxuICAgICAgaW5pdExvb3BDb25uZWN0UHJvcHM6IHlcbiAgICB9O1xuICB9XG4pLCBibCA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgWihcIlJ1bm5pbmcgTG9vcCBmbG93Li4uXCIpLCBaKFwiY29udGV4dFwiLCBlKSwgWihcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCB0KSwgWihcIm5vbkNkZUZvcm1JbnB1dHNcIiwgciksIFooXCJmbG93Q2FsbGJhY2tzXCIsIG4pLCBaKFwiY3VzdG9tUGFyYW1zXCIsIGEpO1xuICAgIGNvbnN0IG8gPSBhd2FpdCBNKGUuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgWihg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtvLm1vZGV9XWApO1xuICAgIGNvbnN0IHMgPSBxKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgby5jaGVja291dF9zZXR0aW5nc1xuICAgICksIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBvLm1vZGUgIT09IFwic2V0dXBcIiwgdSA9IHByKHMsIG8uY2hlY2tvdXRfc2V0dGluZ3MpO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGlmICghYS5zdWNjZXNzKVxuICAgICAgdGhyb3cgZyhcImxvb3BfcGF5X2Zsb3dfZmFpbHVyZVwiLCBhKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLiBTdWNjZXNzIGlzIG5vdCB0cnVlLlwiKTtcbiAgICBjb25zdCBkID0gYXdhaXQgb2UoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAuLi51LFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBjLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBjID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBvLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogby5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IHNbcC5QUk9NT1RJT05fQ09ERV1cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogbGUoKVxuICAgIH0pLCBtID0gYXdhaXQgTyhsLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IG8udG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogYS5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCxcbiAgICAgIC8vIE5PVEU6IHdlIGRvIGhhdmUgdGhlIGNoZWNrb3V0IGF0dGVtcHQgaWQgaGVyZSBldmVuIGlmIGl0cyBhIHNldHVwLCBidXQgZm9yIG5vdyB3ZSBkb24ndCBpbmNsdWRlIGl0XG4gICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY2hlY2tvdXQgYXR0ZW1wdCBzdXBwb3J0IGZvciBzZXR1cCBpbnRlbnRzLlxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYyA/IGQuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBhLmN1c3RvbWVyLFxuICAgICAgICBsb29wX3BheW1lbnRfbWV0aG9kOiBhLnBheW1lbnRNZXRob2QsXG4gICAgICAgIGxvb3Bfc3VjY2VzczogYS5zdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKFooYENvbmZpcm0gcmVzdWx0OiAke219YCksIG8ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBaKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKSwgWihcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBtKTtcbiAgICAgIGNvbnN0IF8gPSBtdChtKTtcbiAgICAgIHJldHVybiBaKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFooXCJEb2luZyBjaGVja291dC4uLlwiKSwgIW0ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IHdsKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgbSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgICByZXN1bHQ6IG0ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4pLCB7IGxvZ19fOiBJZSwgZXJyX186IEVsIH0gPSBJKFwicGF5cGFsXCIpLCBmbyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHsgY2xpZW50X2lkOiB6JDEuc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIFBsID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSB6KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZm8pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IE4ucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBTbCA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIEllKFwiUnVubmluZyBQYXlQYWwgZmxvdy4uLlwiKTtcbiAgICAgIGNvbnN0IG8gPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKG8pLCB7IGlzQW5vbnltb3VzOiBsLCB1c2VSZWRpcmVjdEZsb3c6IGMgfSA9IGEuc2V0dGluZ3MgPz8ge307XG4gICAgICBJZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgICBjb25zdCB1ID0gZm8ucGFyc2Uocik7XG4gICAgICBJZShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgICBjb25zdCBkID0gcSh0LCBuLmdldC5vblZhbGlkYXRpb25FcnJvciwge1xuICAgICAgICAuLi5sID8gWnMoKSA6IHZvaWQgMCxcbiAgICAgICAgLi4ucy5jaGVja291dF9zZXR0aW5nc1xuICAgICAgfSksIG0gPSBwcihkLCBzLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICAgIEllKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgICBjb25zdCBfID0gdjQoKSwgZiA9ICExLCB5ID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBmLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGYgPyB7XG4gICAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgICB9IDogdm9pZCAwLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6IGMsXG4gICAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IF9cbiAgICAgICAgfSxcbiAgICAgICAgLi4ubVxuICAgICAgfSwgaCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgdiA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoeSkpLCBTID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgICByOiB2XG4gICAgICB9KSwgdyA9IGAke2h9PyR7Uy50b1N0cmluZygpfWA7XG4gICAgICBpZiAoYylcbiAgICAgICAgdGhyb3cgSWUoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdywgYXdhaXQgRHQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIGNvbnN0IGIgPSBhd2FpdCBHbihcbiAgICAgICAgXCJQYXlQYWxcIixcbiAgICAgICAgbyxcbiAgICAgICAgXyxcbiAgICAgICAgd1xuICAgICAgKTtcbiAgICAgIEllKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIGIpO1xuICAgICAgY29uc3QgQyA9IFh0KGIuaHJlZiwgXCJjYXR0XCIpLCB4ID0gWHQoYi5ocmVmLCBcImFwcHJvdmFsX3Nlc3Npb25faWRcIiksIGsgPSBhd2FpdCBPKG8sIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBmID8gQyA6IHZvaWQgMCxcbiAgICAgICAgdGhlaXJfcG1faWQ6IGYgPyB4IDogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBJZShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBrKSwgdWUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwicGF5cGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IG8sXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBkLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBrLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKG8pIHtcbiAgICAgIHRocm93IEVsKFwiUGF5UGFsIHBheW1lbnQgZXJyb3JcIiwgbyksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IHBheW1lbnRfbWV0aG9kOiBcInBheXBhbFwiLCBlcnJvcjogbyB9KSwgbmV3IEVycm9yKChvID09IG51bGwgPyB2b2lkIDAgOiBvLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IHBlLCBlcnJfXzogVXIgfSA9IEkoXCJwb2NreXQtcGF5cGFsXCIpLCB5byA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgQ2wgPSBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgY29uc3QgciA9IHooZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB5byk7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2NreXQgUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IE4ucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCBrbCA9IEIoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGssIEo7XG4gICAgcGUoXCJSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTShvKTtcbiAgICBwZShcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgY29uc3QgbCA9IHlvLnBhcnNlKHQpO1xuICAgIHBlKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCBjID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncywgdSA9IHEoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBjID09IG51bGwgPyB2b2lkIDAgOiBjLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICksIGQgPSBwcih1LCBzLmNoZWNrb3V0X3NldHRpbmdzKTtcbiAgICBwZShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cy5tb2RlfWApO1xuICAgIGNvbnN0IG0gPSB2NCgpLCBfID0gcy5tb2RlICE9PSBcInNldHVwXCIsIGYgPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBsLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGwsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IF8sXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IF8gPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISEoKGsgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzKSAhPSBudWxsICYmIGsudXNlUmVkaXJlY3RGbG93KSxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IG1cbiAgICAgIH0sXG4gICAgICAuLi5kXG4gICAgfSwgeSA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgaCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZikpLCB2ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogcy50b2tlbixcbiAgICAgIHI6IGhcbiAgICB9KSwgUyA9IGAke3l9PyR7di50b1N0cmluZygpfWA7XG4gICAgaWYgKChKID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncykgIT0gbnVsbCAmJiBKLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IHBlKFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFMsIGF3YWl0IER0KDIwICogMWUzKSwgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcGUoXCJTdGFydGluZyBwb3B1cCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHBlKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IHcgPSBhd2FpdCBHbihcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBvLFxuICAgICAgbSxcbiAgICAgIFNcbiAgICApO1xuICAgIHBlKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHcpO1xuICAgIGNvbnN0IGIgPSBpbyh3LmhyZWYpLCBDID0gWHQody5ocmVmLCBcImNhdHRcIik7XG4gICAgaWYgKCFDKVxuICAgICAgdGhyb3cgVXIoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIHcuaHJlZiksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTFwiKTtcbiAgICBwZShgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHtifWApO1xuICAgIGNvbnN0IHggPSBhd2FpdCBPKG8sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBiLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogXyA/IEMgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAocGUoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgeCksIHMubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogeC5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoIXgucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBVcihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIHgpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiB4LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxuKSwganIgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogRywgZXJyX186IEFsIH0gPSBJKFwic3RyaXBlLWxpbmtcIiksIElsID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIFRsID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIFJsID0gdmUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSBlLmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBHKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIElsKTtcbiAgICBHKFwiU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBhID0gZS5hbnlDZGVDb25uZWN0aW9uLCBvID0gYXdhaXQgTShhKSwgcyA9IG8ubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIEcoXCJDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGJlKGEsIG8udG9rZW4sIHMsIHZvaWQgMCksIHsgZWxlbWVudHM6IGMsIHN0cmlwZTogdSB9ID0gYXdhaXQgJGkobi5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBsLmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICBHKFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBkID0gYy5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KSwgbSA9ICgpID0+IHtcbiAgICAgIGQubW91bnQoYCMke2pyfWApO1xuICAgIH0sIF8gPSAoKSA9PiB7XG4gICAgICBkLnVubW91bnQoKTtcbiAgICB9O1xuICAgIHJldHVybiByICE9IG51bGwgJiYgci5kb05vdE1vdW50T25Jbml0ID8gRyhcIk5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlcIikgOiAoRyhcIk1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLlwiKSwgbSgpKSwgZC5vbihcImNsaWNrXCIsIGFzeW5jIChmKSA9PiB7XG4gICAgICBpZiAoRyhcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpLCByICE9IG51bGwgJiYgci5vdmVycmlkZUxpbmtTdWJtaXQgJiYgIWF3YWl0IHIub3ZlcnJpZGVMaW5rU3VibWl0KCkpIHtcbiAgICAgICAgRyhcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZi5yZXNvbHZlKCk7XG4gICAgfSksIGQub24oXCJjb25maXJtXCIsIGFzeW5jIChmKSA9PiB7XG4gICAgICBHKFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBmKTtcbiAgICAgIGNvbnN0IHkgPSBhd2FpdCB1LmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50czogYyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBmLmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgeS5lcnJvciA/IChBbChcImVycm9yXCIsIHkuZXJyb3IpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoeS5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKSkgOiAoRyhcInBheW1lbnRNZXRob2RcIiwgeS5wYXltZW50TWV0aG9kKSwgTi5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHkucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IG0sXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBfLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgTWwoanIpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgTmwgPSBCKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIEcoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE0obyk7XG4gICAgRyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgbCA9IEZsKHIsIGEuc3RyaXBlUE0pLCBjID0gcShsLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5jXG4gICAgfSksIEcoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgdSA9IGF3YWl0IG9lKG8sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBhLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IEgoYyksXG4gICAgICBuZXdfY3VzdG9tZXJfc2hpcHBpbmdfYWRkcmVzczogUShjLCBzLmNoZWNrb3V0X3NldHRpbmdzKSxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiBsZSgpXG4gICAgfSk7XG4gICAgRyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBtID0gVGwucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBpZiAocy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEcoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgXyA9IGF3YWl0IE8obywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBtXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBtdChfKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBHKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBfID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBjW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogY1twLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2FkZHJlc3M6IEgoYyksXG4gICAgICAgIGN1c3RvbWVyX3NoaXBwaW5nX2FkZHJlc3M6IFEoYywgcy5jaGVja291dF9zZXR0aW5ncyksXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgdXIobywgXykgfTtcbiAgICB9XG4gIH1cbiksIEZsID0gKGUsIHQpID0+IHtcbiAgdmFyIGMsIHUsIGQsIG0sIF87XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLmFdID0gKCh1ID0gKGMgPSB0LmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYy50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBvID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJbcC5FTUFJTF0gPSByW3AuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgoZCA9IHQubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGQuZW1haWwpIHx8IHQuYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgcltwLlpJUF9DT0RFXSA9IHJbcC5aSVBfQ09ERV0gfHwgKChtID0gdC5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IG0ucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgcltwLkNPVU5UUlldID0gcltwLkNPVU5UUlldIHx8ICgoXyA9IHQuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfLmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgcyA9IHJbcC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiXCIsIGwgPSByW3AuTEFTVF9OQU1FXSB8fCBvIHx8IFwiXCI7XG4gIHJldHVybiBzIHx8IGwgPyAocltwLkZJUlNUX05BTUVdID0gcywgcltwLkxBU1RfTkFNRV0gPSBsKSA6IChyW3AuRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbcC5MQVNUX05BTUVdID0gXCJcIiksIEcoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgciksIHI7XG59LCBNbCA9IChlKSA9PiBuZXcgUHJvbWlzZSgodCkgPT4ge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNvbnN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICBuID8gdChuKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShyKTtcbiAgfTtcbiAgcigpO1xufSksIHsgbG9nX186IEssIGVycl9fOiBMbCB9ID0gSShcInN0cmlwZS1wclwiKSwgRGwgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHhsID0gdmUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIEsoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCByID0geihlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIERsKTtcbiAgICBLKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBNKG4pLCBvID0gYS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgSyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgYmUobiwgYS50b2tlbiwgbywgdm9pZCAwKSwgbCA9IGF3YWl0IEdpKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgb1xuICAgICk7XG4gICAgSyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGwuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAoYyA9PT0gbnVsbClcbiAgICAgIHJldHVybiBMbChcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgSyhcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBjKTtcbiAgICBjb25zdCB1ID0gKGQsIG0pID0+IE4uc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBtID09IG51bGwgPyB2b2lkIDAgOiBtLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBVLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogbCxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGMuYXBwbGVQYXksIGdvb2dsZVBheTogYy5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBsLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgT2wgPSBCKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGEsXG4gICAgaW5pdFJlc3VsdDogb1xuICB9KSA9PiB7XG4gICAgaWYgKEsoXCJSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpLCBhLnByb3ZpZGVyICE9PSB0LnByb3ZpZGVyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHthLnByb3ZpZGVyfSwgZ290ICR7dC5wcm92aWRlcn1gKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBsID0gby5wcjtcbiAgICBpZiAoYSAhPSBudWxsICYmIGEub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgeSA9IGEub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIEsoXCJPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoXCIsIHkpO1xuICAgICAgY29uc3QgaCA9IHR5cGVvZiB5LmFwcGxlUGF5UGF5bWVudFJlcXVlc3QgPT0gXCJmdW5jdGlvblwiID8geS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KHt9KSA6IHkuYXBwbGVQYXlQYXltZW50UmVxdWVzdDtcbiAgICAgIGpsKGwsIHkuYW1vdW50LCB5LnBlbmRpbmcsIGgsIHkubGFiZWwpO1xuICAgIH1cbiAgICBLKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGwuc2hvdygpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBWaShsKTtcbiAgICBLKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCBjKSwgSyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgdSA9IFVsKHIsIGMpLCBkID0gcSh1LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5kXG4gICAgfSksIEsoXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiLCBkKTtcbiAgICBjb25zdCBtID0gYXdhaXQgUnMocywge1xuICAgICAgZmllbGRzOiBkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0XG4gICAgfSksIF8gPSAkbChtKTtcbiAgICBLKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgcWkoXywgYyk7XG4gICAgY29uc3QgZiA9IGF3YWl0IE0ocyk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBLKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgeSA9IGF3YWl0IE8ocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IG10KHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEsoXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgeSA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBkW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogZFtwLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBkW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl9hZGRyZXNzOiBIKGQpLFxuICAgICAgICBjdXN0b21lcl9zaGlwcGluZ19hZGRyZXNzOiBRKGQsIGYuY2hlY2tvdXRfc2V0dGluZ3MpLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogZFtwLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZi5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZi5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IHVyKHMsIHkpIH07XG4gICAgfVxuICB9XG4pLCBVbCA9IChlLCB0KSA9PiB7XG4gIHZhciBkLCBtLCBfLCBmO1xuICBjb25zdCByID0geyAuLi5lIH0sIFtuLCAuLi5hXSA9ICgobSA9IChkID0gdC5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBkLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0uc3BsaXQoL1xccysvKSkgPz8gW10sIG8gPSBhLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgcyA9IChmID0gKF8gPSB0LnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBfLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IGYuYWRkcmVzcywgbCA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICByW3AuRU1BSUxdID0gcltwLkVNQUlMXSB8fCB0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW3AuWklQX0NPREVdID0gcltwLlpJUF9DT0RFXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5wb3N0YWxfY29kZSkgfHwgKGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCByW3AuQ09VTlRSWV0gPSByW3AuQ09VTlRSWV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY291bnRyeSkgfHwgKGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBjID0gcltwLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgdSA9IHJbcC5MQVNUX05BTUVdIHx8IG8gfHwgXCJcIjtcbiAgcmV0dXJuIGMgfHwgdSA/IChyW3AuRklSU1RfTkFNRV0gPSBjLCByW3AuTEFTVF9OQU1FXSA9IHUpIDogKHJbcC5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgcltwLkxBU1RfTkFNRV0gPSBcIlwiKSwgSyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIGpsID0gKGUsIHQsIHIsIG4sIGEpID0+IHtcbiAgZS51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBhID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IHJcbiAgICB9LFxuICAgIGN1cnJlbmN5OiB0LmN1cnJlbmN5LFxuICAgIC8vIFN0cmlwZSdzIGFwcGxlUGF5IG9wdGlvbiBvbmx5IHN1cHBvcnRzICdyZWN1cnJpbmdQYXltZW50UmVxdWVzdCcgfCAnZGVmZXJyZWRQYXltZW50UmVxdWVzdCcgfCAnYXV0b21hdGljUmVsb2FkUGF5bWVudFJlcXVlc3QnIG9mIG5hdGl2ZSBBcHBsZVBheSBwYXltZW50IHJlcXVlc3RcbiAgICAvLyBXZSdyZSBhY2NlcHRpbmcgbmF0aXZlIFBheW1lbnQgUmVxdWVzdCBoZXJlIGZvciBtb3JlIGNvbW1vbiB0eXBpbmcuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHN0cmlwZSBkbyBub3QgZXhwZWN0IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCAkbCA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBVaS5wYXJzZShlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCBtZSA9IChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBlLmZpbHRlcigoYSkgPT4ge1xuICAgIGNvbnN0IG8gPSByID09PSB2b2lkIDAgPyAhMCA6IGEucHJvY2Vzc29yX25hbWUgPT09IHIsIHMgPSBhLnByb3ZpZGVyID09PSB0O1xuICAgIHJldHVybiBvICYmIHM7XG4gIH0pO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKTtcbiAgcmV0dXJuIG4ubGVuZ3RoICE9PSAxICYmIChjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIGNvbnNvbGUud2FybihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHt0fScgYW5kIHByb2Nlc3NvciAnJHtyfSdgKSwgZyhcIm1vcmVfdGhhbl9vbmVfY3BtX2ZvdW5kXCIsIHtcbiAgICBwcm92aWRlcjogdCxcbiAgICBwcm9jZXNzb3I6IHIsXG4gICAgY3BtczogZVxuICB9KSksIG5bMF07XG59LCBOID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IGZsXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IHhsLFxuICAgIHJ1bjogT2xcbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IFJsLFxuICAgIHJ1bjogTmxcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIGluaXQ6IENsLFxuICAgIHJ1bjoga2xcbiAgfSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDoge1xuICAgIGluaXQ6IFBsLFxuICAgIHJ1bjogU2xcbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6ICRjLFxuICAgIHJ1bjogR2NcbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBVYyxcbiAgICBydW46IGpjXG4gIH0sXG4gIGFpcndhbGxleEFDSDoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogTGNcbiAgfSxcbiAgYWlyd2FsbGV4RUZUOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBsY1xuICB9LFxuICBhaXJ3YWxsZXhCQUNTOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBzY1xuICB9LFxuICBhaXJ3YWxsZXhTRVBBOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBkY1xuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiB2bCxcbiAgICBydW46IGJsXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogemMsXG4gICAgcnVuOiBIY1xuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBCYyxcbiAgICBydW46IFljXG4gIH0sXG4gIGFkeWVuR29vZ2xlUGF5OiB7XG4gICAgaW5pdDogTmMsXG4gICAgcnVuOiBGY1xuICB9LFxuICBhZHllbkFwcGxlUGF5OiB7XG4gICAgaW5pdDogVGMsXG4gICAgcnVuOiBSY1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSwgeyBsb2dfXzogR2wsIGVycl9fOiBWbCB9ID0gSShcImluaXQtZmxvd3NcIiksIGFlID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IG5ldyBudCgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAobikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHIuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBhID0gYXdhaXQgdChuKTtcbiAgICAgICAgR2woYOKclCAke2V9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgYSksIHIuc2V0KGEpO1xuICAgICAgfSBjYXRjaCAoYSkge1xuICAgICAgICBWbChg8J2ZrSAke2V9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBlZShhKSwgXCJEZXRhaWxzOlwiLCBhKSwgci50aHJvdyhhLCBlZShhKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgcWwgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSkpO1xufSwgemwgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogYWUoXCJTdHJpcGUgUFJcIiwgTi5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogYWUoXCJTdHJpcGUgTGlua1wiLCBOLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiBhZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgTi5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogYWUoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgTi5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiBhZShcIkxvb3BcIiwgTi5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiBhZShcIlBheVBhbFwiLCBOLnBheXBhbC5pbml0KSxcbiAgLy8gUG9ja3l0IFBheVBhbFxuICBwb2NreXRQYXlwYWw6IGFlKFwiUG9ja3l0IFBheVBhbFwiLCBOLnBvY2t5dFBheXBhbC5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBhZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIE4uYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBhZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgTi5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KSxcbiAgLy8gQWR5ZW4gR29vZ2xlUGF5XG4gIGFkeWVuR29vZ2xlUGF5OiBhZShcIkFkeWVuIEdvb2dsZVBheVwiLCBOLmFkeWVuR29vZ2xlUGF5LmluaXQpLFxuICAvLyBBZHllbiBBcHBsZVBheVxuICBhZHllbkFwcGxlUGF5OiBhZShcIkFkeWVuIEFwcGxlUGF5XCIsIE4uYWR5ZW5BcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IEhsIH0gPSBJKFwiZm9ybS1jYWxsYmFja3NcIiksIGllID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgJHIgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogaWUsXG4gIG9uQmx1cjogaWUsXG4gIG9uQ2hhbmdlOiBpZSxcbiAgb25Mb2FkOiBpZSxcbiAgb25Mb2FkRXJyb3I6IGllLFxuICBvblZhbGlkYXRpb25FcnJvcjogaWUsXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBpZSxcbiAgb25DaGVja291dFN1Y2Nlc3M6IGllLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IGllLFxuICBvbkNoZWNrb3V0RXJyb3I6IGllLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogaWVcbn0pLCBmZSA9IGNsYXNzIGZlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAodCkgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gZmUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSBOYShyLCBuID8/IGZlLk5PT1AsIEhsKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW3JdID0gYTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IGZlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG5mZS5OT09QID0gKCkgPT4ge1xufSwgZmUuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHQgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKCRyLmtleW9mKCkuZW51bSkuZm9yRWFjaCgocikgPT4ge1xuICAgIHRbcl0gPSBmZS5OT09QO1xuICB9KSwgdDtcbn0sIGZlLmZyb21PYmplY3QgPSAodCkgPT4ge1xuICBjb25zdCByID0gbmV3IGZlKCk7XG4gIHJldHVybiByLnNldENhbGxiYWNrcygkci5wYXJzZSh0KSksIHI7XG59O1xubGV0IGVyID0gZmU7XG5mdW5jdGlvbiBCbCgpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlID0gJCgpLCB0ID0gZTtcbiAgICBpZiAodCAhPSBudWxsICYmIHQubmV4dCB8fCB0ICE9IG51bGwgJiYgdC5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKVxuICAgICAgcmV0dXJuIFwibmV4dGpzXCI7XG4gICAgY29uc3QgciA9IGU7XG4gICAgaWYgKHIgIT0gbnVsbCAmJiByLl9fTlVYVF9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19udXh0XCIpKVxuICAgICAgcmV0dXJuIFwibnV4dFwiO1xuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgoYSkgPT4gYS5pbmNsdWRlcyhcInJlYWN0XCIpKSB8fCBBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKGEpID0+IGEuX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpXG4gICAgICByZXR1cm4gXCJyZWFjdFwiO1xuICAgIGNvbnN0IG4gPSBlO1xuICAgIHJldHVybiBuICE9IG51bGwgJiYgbi5WdWUgfHwgbiAhPSBudWxsICYmIG4uX19WVUVfXyA/IFwidnVlXCIgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpID8gXCJhbmd1bGFyXCIgOiBcInZhbmlsbGFcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5mdW5jdGlvbiBZbChlKSB7XG4gIHZhciB0LCByLCBuO1xuICB0cnkge1xuICAgIHN3aXRjaCAoZSkge1xuICAgICAgY2FzZSBcInJlYWN0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcIm5leHRqc1wiOiB7XG4gICAgICAgIGNvbnN0IG8gPSAkKCk7XG4gICAgICAgIHJldHVybiAoKHQgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLm5leHQpID09IG51bGwgPyB2b2lkIDAgOiB0LnZlcnNpb24pIHx8ICgociA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uX19ORVhUX0RBVEFfXykgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYnVpbGRJZCkgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcInZ1ZVwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJhbmd1bGFyXCI6IHtcbiAgICAgICAgY29uc3QgYSA9IChuID0gJCgpKSA9PSBudWxsID8gdm9pZCAwIDogbi5kb2N1bWVudCwgbyA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIG8gPyBvLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gSmwoKSB7XG4gIGNvbnN0IGUgPSBCbCgpLCB0ID0gWWwoZSk7XG4gIHJldHVybiB7IGZyYW1ld29yazogZSwgdmVyc2lvbjogdCB9O1xufVxuY29uc3QgaG8gPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uaGVpZ2h0IDogbnVsbCwgdCA9IHdpbmRvdyAmJiB3aW5kb3cuc2NyZWVuID8gd2luZG93LnNjcmVlbi53aWR0aCA6IG51bGwsIHIgPSB3aW5kb3cgJiYgd2luZG93LnNjcmVlbiA/IHdpbmRvdy5zY3JlZW4uY29sb3JEZXB0aCA6IG51bGwsIG4gPSB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciA/IHdpbmRvdy5uYXZpZ2F0b3IuamF2YUVuYWJsZWQoKSA6ICExLCBhID0gd2luZG93ICYmIHdpbmRvdy5uYXZpZ2F0b3IgPyB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGwsIG8gPSBcInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjhcIjtcbiAgbGV0IHMgPSBudWxsO1xuICB3aW5kb3cgJiYgd2luZG93Lm5hdmlnYXRvciAmJiAocyA9IHdpbmRvdy5uYXZpZ2F0b3IubGFuZ3VhZ2UgPyB3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlIDogd2luZG93Lm5hdmlnYXRvci5icm93c2VyTGFuZ3VhZ2UpO1xuICBjb25zdCBsID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4ge1xuICAgIGNvbG9yX2RlcHRoOiByLFxuICAgIGphdmFfZW5hYmxlZDogbixcbiAgICBqYXZhc2NyaXB0X2VuYWJsZWQ6ICEwLFxuICAgIGxhbmd1YWdlOiBzLFxuICAgIHNjcmVlbl9oZWlnaHQ6IGUsXG4gICAgc2NyZWVuX3dpZHRoOiB0LFxuICAgIHRpbWVfem9uZV9vZmZzZXQ6IGwsXG4gICAgdXNlcl9hZ2VudDogYSxcbiAgICBhY2NlcHRfaGVhZGVyOiBvXG4gIH07XG59O1xudmFyIFIgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5jYXJkID0gXCJjYXJkXCIsIGUucG9ja3l0UGF5cGFsID0gXCJwb2NreXQtcGF5cGFsXCIsIGUuYXBwbGVQYXkgPSBcImFwcGxlLXBheVwiLCBlLmdvb2dsZVBheSA9IFwiZ29vZ2xlLXBheVwiLCBlLmxvb3BDcnlwdG8gPSBcImxvb3AtY3J5cHRvXCIsIGUucGF5cGFsID0gXCJwYXlwYWxcIiwgZS5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIGUuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIGUuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgZS5hZHllbkdvb2dsZVBheSA9IFwiYWR5ZW4tZ29vZ2xlLXBheVwiLCBlLmFkeWVuQXBwbGVQYXkgPSBcImFkeWVuLWFwcGxlLXBheVwiLCBlLmFpcndhbGxleEFDSCA9IFwiYWlyd2FsbGV4LWFjaFwiLCBlLmFpcndhbGxleEVGVCA9IFwiYWlyd2FsbGV4LWVmdFwiLCBlLmFpcndhbGxleEJBQ1MgPSBcImFpcndhbGxleC1iYWNzXCIsIGUuYWlyd2FsbGV4U0VQQSA9IFwiYWlyd2FsbGV4LXNlcGFcIiwgZSkpKFIgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oUik7XG52YXIgVGUgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5BQ0ggPSBcImFjaFwiLCBlLkVGVCA9IFwiZWZ0XCIsIGUuQkFDUyA9IFwiYmFjc1wiLCBlLlNFUEEgPSBcInNlcGFcIiwgZS5BUFBMRV9QQVkgPSBcImFwcGxlX3BheVwiLCBlLkNSRURJVF9DQVJEID0gXCJjcmVkaXRfY2FyZFwiLCBlLkdPT0dMRV9QQVkgPSBcImdvb2dsZV9wYXlcIiwgZS5TVFJJUEVfTElOSyA9IFwic3RyaXBlX2xpbmtcIiwgZS5DUllQVE8gPSBcImNyeXB0b1wiLCBlLlBBWVBBTCA9IFwicGF5cGFsXCIsIGUpKShUZSB8fCB7fSk7XG5jb25zdCBHciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBbZS5haXJ3YWxsZXhBcHBsZVBheSwgZS5hdXRob3JpemVOZXRBcHBsZVBheSwgZS5hZHllbkFwcGxlUGF5XSwgciA9IFtdO1xuICB0LmZvckVhY2goKGEpID0+IHtcbiAgICBjb25zdCBvID0gYS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgbyAhPSBudWxsICYmIG8uaXNBdmFpbGFibGUgJiYgci5wdXNoKG8pO1xuICB9KTtcbiAgY29uc3QgbiA9IGUuc3RyaXBlUFIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICByZXR1cm4gbiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUgJiYgbi5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXkgJiYgci5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBwcm9jZXNzb3I6IFUuRW51bS5zdHJpcGUsXG4gICAgc3RhcnRGbG93OiAobykgPT4gbi5zdGFydEZsb3coXCJhcHBsZV9wYXlcIiwge1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyA9PSBudWxsID8gdm9pZCAwIDogby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSlcbiAgfSksIHtcbiAgICBwcm9jZXNzb3JzOiByLm1hcCgoYSkgPT4gYS5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiByLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBXbChyLCBhKVxuICB9O1xufSwgVnIgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gW2UuYWlyd2FsbGV4R29vZ2xlUGF5LCBlLmF1dGhvcml6ZU5ldEdvb2dsZVBheSwgZS5hZHllbkdvb2dsZVBheV0sIHIgPSBbXTtcbiAgdC5mb3JFYWNoKChhKSA9PiB7XG4gICAgY29uc3QgbyA9IGEucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgIG8gIT0gbnVsbCAmJiBvLmlzQXZhaWxhYmxlICYmIHIucHVzaChvKTtcbiAgfSk7XG4gIGNvbnN0IG4gPSBlLnN0cmlwZVBSLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLmlzQXZhaWxhYmxlICYmIG4uYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSAmJiByLnB1c2goe1xuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIHByb2Nlc3NvcjogVS5FbnVtLnN0cmlwZSxcbiAgICBzdGFydEZsb3c6IChvKSA9PiBuLnN0YXJ0RmxvdyhcImdvb2dsZV9wYXlcIiwge1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyA9PSBudWxsID8gdm9pZCAwIDogby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSlcbiAgfSksIHtcbiAgICBwcm9jZXNzb3JzOiByLm1hcCgoYSkgPT4gYS5wcm9jZXNzb3IpLFxuICAgIGlzQXZhaWxhYmxlOiByLmxlbmd0aCA+IDAsXG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBzdGFydEZsb3c6IChhKSA9PiBabChyLCBhKVxuICB9O1xufSwgV2wgPSAoZSwgdCkgPT4ge1xuICBpZiAodCAhPSBudWxsICYmIHQucHJvY2Vzc29yKSB7XG4gICAgY29uc3QgbiA9IGUuZmluZCgoYSkgPT4gYS5wcm9jZXNzb3IgPT09IHQucHJvY2Vzc29yKTtcbiAgICBpZiAobiAhPSBudWxsICYmIG4uaXNBdmFpbGFibGUpXG4gICAgICByZXR1cm4gbi5zdGFydEZsb3codCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTcGVjaWZpZWQgQXBwbGUgUGF5IHByb2Nlc3NvciAke3QucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gbi5pc0F2YWlsYWJsZSk7XG4gIGlmIChyKVxuICAgIHJldHVybiByLnN0YXJ0Rmxvdyh0KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEFwcGxlIFBheSBwcm9jZXNzb3IgZm91bmRcIik7XG59LCBabCA9IChlLCB0KSA9PiB7XG4gIGlmICh0ICE9IG51bGwgJiYgdC5wcm9jZXNzb3IpIHtcbiAgICBjb25zdCBuID0gZS5maW5kKChhKSA9PiBhLnByb2Nlc3NvciA9PT0gdC5wcm9jZXNzb3IpO1xuICAgIGlmIChuICE9IG51bGwgJiYgbi5pc0F2YWlsYWJsZSlcbiAgICAgIHJldHVybiBuLnN0YXJ0Rmxvdyh0KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNwZWNpZmllZCBHb29nbGUgUGF5IHByb2Nlc3NvciAke3QucHJvY2Vzc29yfSBpcyBub3QgYXZhaWxhYmxlYCk7XG4gIH1cbiAgY29uc3QgciA9IGUuZmluZCgobikgPT4gbi5pc0F2YWlsYWJsZSk7XG4gIGlmIChyKVxuICAgIHJldHVybiByLnN0YXJ0Rmxvdyh0KTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm8gYXZhaWxhYmxlIEdvb2dsZSBQYXkgcHJvY2Vzc29yIGZvdW5kXCIpO1xufSwgS2wgPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIHsgbG9nX186IFl0LCBlcnJfXzogUWwgfSA9IEkoXCJ0cmFjZXJcIiksIFhsID0gKGUsIHQpID0+IHtcbiAgdHJ5IHtcbiAgICBldShlLCB0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIFFsKGBFcnJvciBpbml0aWFsaXppbmcgdHJhY2VyOiAke3J9YCk7XG4gIH1cbn07XG5sZXQgcXI7XG5jb25zdCBldSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID4gXCJ1XCIpXG4gICAgcmV0dXJuO1xuICBjb25zdCByID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUR1QzdHd0RiLSF+ezAwNH1+LmpzJyksIHsgQ29uc29sZVNwYW5FeHBvcnRlcjogbiwgU2ltcGxlU3BhblByb2Nlc3NvcjogYSwgV2ViVHJhY2VyUHJvdmlkZXI6IG8gfSA9IHIsIHMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQ3JSd2IwWnUtIX57MDA3fX4uanMnKSwgeyBGZXRjaEluc3RydW1lbnRhdGlvbjogbCB9ID0gcywgYyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC13QlZkTUg2ZS0hfnswMGN9fi5qcycpLCB7IFpvbmVDb250ZXh0TWFuYWdlcjogdSB9ID0gYywgZCA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1DZTJIMnlMNC0hfnswMGR9fi5qcycpLCB7IHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9uczogbSB9ID0gZCwgXyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1Ec21LSWw0RS0hfnswMGZ9fi5qcycpLCB7IFJlc291cmNlOiBmIH0gPSBfLCB5ID0gYXdhaXQgaW1wb3J0KCcuL2RldGVjdC1yZXNvdXJjZXMtUkwzUHU4NkktIX57MDBpfX4uanMnKS50aGVuKChBZSkgPT4gQWUuZCksIHsgZGV0ZWN0UmVzb3VyY2VzU3luYzogaCB9ID0geSwgdiA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1Cci1QQjdPVS0hfnswMGx9fi5qcycpLCB7IE9UTFBUcmFjZUV4cG9ydGVyOiBTIH0gPSB2LCB3ID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LURrVWhsTDRZLSF+ezAwbn1+LmpzJyksIHsgQjNQcm9wYWdhdG9yOiBiLCBCM0luamVjdEVuY29kaW5nOiBDIH0gPSB3LCB4ID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUJ1TWQteVhELSF+ezAwMX1+LmpzJyksIHsgQmF0Y2hTcGFuUHJvY2Vzc29yOiBrIH0gPSB4O1xuICBZdChgSW5pdGlhbGl6aW5nIHRyYWNlciB3aXRoIHZlcnNpb24gJHtlfSBhbmQgYmFzZVVybCAke3R9YCk7XG4gIGNvbnN0IEogPSB0dSh0KTtcbiAgWXQoYFVzaW5nIGNvbGxlY3RvciBVUkwgJHtKfWApO1xuICBjb25zdCBMID0gbmV3IFMoeyB1cmw6IEogfSksIHRlID0ge1xuICAgIFwic2VydmljZS52ZXJzaW9uXCI6IGUsXG4gICAgXCJzZXJ2aWNlLm5hbWVcIjogXCJvanNcIlxuICB9O1xuICByZXR1cm4gbmV3IG8oe1xuICAgIHJlc291cmNlOiBuZXcgZih0ZSkubWVyZ2UoaCgpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IGEobmV3IG4oKSksXG4gICAgICBuZXcgayhMLCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KS5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyB1KCksXG4gICAgcHJvcGFnYXRvcjogbmV3IGIoeyBpbmplY3RFbmNvZGluZzogQy5NVUxUSV9IRUFERVIgfSlcbiAgfSksIG0oe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBsKHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJsczogWy8uKi9dLFxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gYWxsIFVSTHNcbiAgICAgICAgLy8gRXhjbHVkZSBBZHllbiBVUkxzIC0gdGhleSBkbyBub3QgYWxsb3cgT1BUSU9OUyByZXF1ZXN0c1xuICAgICAgICAvLyBBbHNvIGV4Y2x1ZGUgbG9vcGNyeXB0by54eXpcbiAgICAgICAgaWdub3JlVXJsczogWy9eaHR0cHM6XFwvXFwvKC4qXFwuKT9hZHllblxcLmNvbS8sIC9eaHR0cHM6XFwvXFwvKC4qXFwuKT9sb29wY3J5cHRvXFwueHl6L11cbiAgICAgIH0pXG4gICAgXVxuICB9KSwgcXIgPSBWZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBZdChcIlRyYWNlciBpbml0aWFsaXplZFwiKSwgcXI7XG59LCB0dSA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuZXcgVVJMKGUpLmhvc3RuYW1lO1xuICByZXR1cm4gdCA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIgPyBcImh0dHBzOi8vb3RlbC5vcGVucGF5c2FuZGJveC5jb20vdjEvdHJhY2VzXCIgOiB0ID09PSBcImNkZS5nZXRvcGVucGF5LmNvbVwiID8gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCIgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDMxOS92MS90cmFjZXNcIjtcbn07XG5jbGFzcyBydSB7XG4gIGNvbnN0cnVjdG9yKHQsIHIsIG4sIGEpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAobykgPT4ge1xuICAgICAgaWYgKCFvLnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh6cihvLm9yaWdpbikgIT09IHpyKHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIG8uZGF0YSA9PSBcIm9iamVjdFwiICYmIG8uZGF0YS5wZW5wYWwgfHwgdHlwZW9mIG8uZGF0YSA9PSBcIm9iamVjdFwiICYmIG8uZGF0YS5zb3VyY2UgJiYgby5kYXRhLnNvdXJjZSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIilcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IHMgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyA9IFdzKEpTT04ucGFyc2Uoby5kYXRhKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQocykpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBjLCBwYXlsb2FkOiB1IH0gPSBzLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhjLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihjLCB1LmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHUub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGMsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2NdID0gby5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKG8pID0+IG8uZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhby5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIG8uZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIG8pLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMoby5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgbyksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQoby5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHQsIHRoaXMuYmFzZVVybCA9IHIsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBhO1xuICB9XG59XG5jb25zdCB6ciA9IChlKSA9PiBuZXcgVVJMKGUpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIG51KGUsIHQpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiB0XG4gIH0pLnByb21pc2UsIGEgPSBhd2FpdCBPcyhuKTtcbiAgaWYgKCFVcyhuLCBhKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3Mgb3Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHQsIHIpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldCh0LCByKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHQgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgYXUgPSAoZSwgdCwgcikgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSBlO1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGEpID0+IHtcbiAgICBpZiAoYS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IG8gPSBhLmxvYWRlZFZhbHVlLCBzID0gby5pc0F2YWlsYWJsZSAmJiBvLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgbCA9IG8uaXNBdmFpbGFibGUgJiYgby5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBjID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBzLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIHMgJiYgSHIoXCJhcHBsZV9wYXlcIiwgbywgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogbCxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBsICYmIEhyKFwiZ29vZ2xlX3BheVwiLCBvLCB0LCByLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChjKTtcbiAgICB9XG4gIH0pO1xufSwgSHIgPSAoZSwgdCwgciwgbiwgYSkgPT4gTi5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiByLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKHIuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZSksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IGooci5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBlLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogdFxufSksIEJyID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogX2UsIGVycl9fOiByZSB9ID0gSShcIm9wLWZvcm1cIiksIHllID0gY2xhc3MgeWUge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgdmFyIGE7XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9ICExLCB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBudCgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgbnQoKSwgdGhpcy5jb250ZXh0ID0gbmV3IG50KCksIHRoaXMuaW5pdEZsb3dzID0gemwoKSwgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbyA9IFZlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIHMgPSBvLnN0YXJ0U3BhbihcImZvcm0uaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGtpbmQ6IHV0LkNMSUVOVCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIFwib2pzLmZvcm1JZFwiOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICBcIm9qcy52ZXJzaW9uXCI6IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5iYXNlX3VybFwiOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgXCJvanMucmVmZXJyZXJcIjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBVZS53aXRoKFZlLnNldFNwYW4oVWUuYWN0aXZlKCksIHMpLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbCA9IHRoaXMuY3JlYXRlRWxlbWVudChnZS5DREVfQlJJREdFKTtcbiAgICAgICAgICBsLm5vZGUuaWQgPSBcIl9fb3BfaW50ZXJuYWxfY2RlX2JyaWRnZVwiLCBsLm5vZGUuYXJpYUhpZGRlbiA9IFwidHJ1ZVwiLCBPYmplY3QuYXNzaWduKGwubm9kZS5zdHlsZSwge1xuICAgICAgICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgICAgICAgIG1hcmdpbjogXCIwcHhcIixcbiAgICAgICAgICAgIHBhZGRpbmc6IFwiMHB4XCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxcHhcIixcbiAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcIm5vbmVcIixcbiAgICAgICAgICAgIHVzZXJTZWxlY3Q6IFwibm9uZVwiXG4gICAgICAgICAgfSksIGwubW91bnQoXCJib2R5XCIpLCBfZShcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpLCBfZShcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBfZShcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgICBjb25zdCBjID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogQnJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfZShcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJ3YWl0aW5nX2Zvcl9jZGVfY29ubmVjdGlvblwiKSwgX2UoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgdSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc3RhcnRTcGFuKFwiY2RlLmNvbm5lY3RcIiwgdm9pZCAwLCBVZS5hY3RpdmUoKSksIGQgPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogQnJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB1ID09IG51bGwgfHwgdS5lbmQoKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJjZGVfY29ubmVjdGVkXCIpLCBfZShcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgYXdhaXQgeHMoZCwgdGhpcy5kZXZpY2VUb2tlbiksIF9lKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IG0gPSB5ZS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICBjLFxuICAgICAgICAgICAgZCxcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmNvbnRleHQuc2V0KG0pLCBhdSh0aGlzLmluaXRGbG93cywgbSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgX2UoXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IHFsKHRoaXMuaW5pdEZsb3dzLCBtLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChjLnRvdGFsQW1vdW50QXRvbXMsIGMuY3VycmVuY3kpLCBfZShcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpLCBzID09IG51bGwgfHwgcy5zZXRTdGF0dXMoeyBjb2RlOiBDZS5PSyB9KSwgZyhcImZvcm1fbG9hZGVkXCIpO1xuICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgY29uc3QgYyA9IGVlKGwpO1xuICAgICAgICAgIHMgPT0gbnVsbCB8fCBzLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBDZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGNcbiAgICAgICAgICB9KSwgcmUoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGMpLCBnKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBjXG4gICAgICAgICAgfSksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IoYyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcyA9PSBudWxsIHx8IHMuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChvKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IG8sIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgIXMgfHwgcy50eXBlID09PSBnZS5DREVfQlJJREdFIHx8IChzLm5vZGUuc3R5bGUuaGVpZ2h0ID0gbyk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKG8pID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC5zZXQobyksIGcoXCJjZGVfbG9hZGVkXCIpKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKG8pID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IobyksIG8pLCBnKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogb1xuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChvLCBzID0ge30pID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJjcmVhdGVFbGVtZW50XCIpLCAhdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBsID0gRW8ucGFyc2UobyksIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCB1ID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHMpO1xuICAgICAgYy5uYW1lID0gYCR7bH0tZWxlbWVudGA7XG4gICAgICBjb25zdCBkID0gbmV3IFVSTChgL2FwcC92MS8ke2MubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gZC5zZWFyY2ggPSB1LnRvU3RyaW5nKCksIGMuc3JjID0gZC5ocmVmLCBjLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBjLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUobCwgYyk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChvLCBzKSA9PiB7XG4gICAgICBjb25zdCBsID0ge1xuICAgICAgICB0eXBlOiBvLFxuICAgICAgICBub2RlOiBzLFxuICAgICAgICBtb3VudDogKGMpID0+IHtcbiAgICAgICAgICB2YXIgdTtcbiAgICAgICAgICAodSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYykpID09IG51bGwgfHwgdS5hcHBlbmRDaGlsZChzKSwgZyhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IG9cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBsLnR5cGUsIG5vZGU6IGwubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbZ2UuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW2dlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbZ2UuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtnZS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgW2dlLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tvXSA9IGwsIGw7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKG8pID0+IHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBzLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIG8uc3R5bGVzICYmIHMuYXBwZW5kKFwic3R5bGVzXCIsIEtsKG8uc3R5bGVzKSksIHMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIHM7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKG8pID0+IGd0KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCBudShvLm5vZGUpO1xuICAgICAgICBzLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihvLnR5cGUsIHMpLCAhdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIG8udHlwZSA9PT0gZ2UuQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KHMpO1xuICAgICAgfVxuICAgICkuY2F0Y2goKHMpID0+IHJlKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBzKSksIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSBhc3luYyAobykgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIHJlKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9ICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcyA9IGF3YWl0IGd0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcInN1Ym1pdF9jYXJkXCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBvID09IG51bGwgPyB2b2lkIDAgOiBvLnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnKFwic3VibWl0X2NhcmRcIiwgeyAuLi5vIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJzdWJtaXRDYXJkXCIpO1xuICAgICAgICAgICAgY29uc3QgbCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghbClcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIGF3YWl0IE4uY29tbW9uQ0MucnVuKHtcbiAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGoobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBwYXltZW50Um91dGVJZDogbyA9PSBudWxsID8gdm9pZCAwIDogby5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIHRocm93IHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IGd0KFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLFxuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHNcIik7XG4gICAgICAgIGNvbnN0IG8gPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgIGlmICghbylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIGNvbnN0IHsgcHJvY2Vzc29yczogcywgaXNBdmFpbGFibGU6IGwgfSA9IEdyKFxuICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICksIHsgcHJvY2Vzc29yczogYywgaXNBdmFpbGFibGU6IHUgfSA9IFZyKFxuICAgICAgICAgIHRoaXMuaW5pdEZsb3dzXG4gICAgICAgICksIGQgPSB0aGlzLmluaXRGbG93cy5wYXlwYWwucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpLCBtID0gKGQgPT0gbnVsbCA/IHZvaWQgMCA6IGQuaXNBdmFpbGFibGUpID8/ICExLCBfID0gby5jaGVja291dFBheW1lbnRNZXRob2RzLnNvbWUoXG4gICAgICAgICAgKHcpID0+IHcucHJvY2Vzc29yX25hbWUgPT09IFwicG9ja3l0XCIgJiYgdy5wcm92aWRlciA9PT0gXCJwYXlwYWxcIlxuICAgICAgICApLCBmID0gdGhpcy5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCksIHkgPSAoZiA9PSBudWxsID8gdm9pZCAwIDogZi5pc0F2YWlsYWJsZSkgPz8gITEsIGggPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogUi5jYXJkLFxuICAgICAgICAgICAgcHJvY2Vzc29yczogW10sXG4gICAgICAgICAgICBpc0F2YWlsYWJsZTogITBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIuYXBwbGVQYXksXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBzLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IGxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFIuZ29vZ2xlUGF5LFxuICAgICAgICAgICAgcHJvY2Vzc29yczogYyxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLnBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IG0gPyBbVS5FbnVtLnBheXBhbF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBtXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLnBvY2t5dFBheXBhbCxcbiAgICAgICAgICAgIHByb2Nlc3NvcnM6IF8gPyBbVS5FbnVtLnBvY2t5dF0gOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiBfXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBSLmxvb3BDcnlwdG8sXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiB5ID8gW1UuRW51bS5sb29wXSA6IFtdLFxuICAgICAgICAgICAgaXNBdmFpbGFibGU6IHlcbiAgICAgICAgICB9XG4gICAgICAgIF0sIHYgPSB7XG4gICAgICAgICAgcGF5cGFsOiBSLnBheXBhbCxcbiAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IFIuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBSLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogUi5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IFIuYXV0aG9yaXplbmV0QXBwbGVQYXksXG4gICAgICAgICAgYWR5ZW5Hb29nbGVQYXk6IFIuYWR5ZW5Hb29nbGVQYXksXG4gICAgICAgICAgYWR5ZW5BcHBsZVBheTogUi5hZHllbkFwcGxlUGF5XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBbLi4uT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW3csIGJdKSA9PiB7XG4gICAgICAgICAgY29uc3QgQyA9IGIucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiB2W3ddID8/IHcsXG4gICAgICAgICAgICBwcm9jZXNzb3JzOiBbXSxcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlOiAoQyA9PSBudWxsID8gdm9pZCAwIDogQy5pc0F2YWlsYWJsZSkgPz8gITFcbiAgICAgICAgICB9O1xuICAgICAgICB9KSwgLi4uaF07XG4gICAgICB9XG4gICAgKSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gYXN5bmMgKG8sIHMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICByZShcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGwgPSBhd2FpdCBndChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwgeyBtZXRob2Q6IG8sIHNldHRpbmdzOiBzIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZW5lcmFsU3VibWl0XCIpO1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghYylcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIHN3aXRjaCAobykge1xuICAgICAgICAgICAgICBjYXNlIFIuY2FyZDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRDYXJkKHMpO1xuICAgICAgICAgICAgICBjYXNlIFIucG9ja3l0UGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBOLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGMuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgVGUuUEFZUEFMLFxuICAgICAgICAgICAgICAgICAgICBcInBvY2t5dFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBzIH0sXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLnBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gTi5wYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBjLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFRlLlBBWVBBTCxcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooYy5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogcyB9LFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5sb29wQ3J5cHRvOlxuICAgICAgICAgICAgICAgIHJldHVybiBOLmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG1lKFxuICAgICAgICAgICAgICAgICAgICBjLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5hcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93OiB1IH0gPSBHcih0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRGbG93OiB1IH0gPSBWcih0aGlzLmluaXRGbG93cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgcmUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgcmUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIHJlKFxuICAgICAgICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICByZShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgUi5hZHllbkdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hZHllbkdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICByZShcbiAgICAgICAgICAgICAgICAgICAgXCJhZHllbi1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBSLmFkeWVuQXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWR5ZW5BcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICByZShcbiAgICAgICAgICAgICAgICAgICAgXCJhZHllbi1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4QUNIOlxuICAgICAgICAgICAgICAgIHJldHVybiBOLmFpcndhbGxleEFDSC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGMuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgVGUuQUNILFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgUi5haXJ3YWxsZXhFRlQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE4uYWlyd2FsbGV4RUZULnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgYy5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBUZS5FRlQsXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBqKGMuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHMsXG4gICAgICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSBSLmFpcndhbGxleEJBQ1M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE4uYWlyd2FsbGV4QkFDUy5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbWUoXG4gICAgICAgICAgICAgICAgICAgIGMuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgVGUuQkFDUyxcbiAgICAgICAgICAgICAgICAgICAgXCJhaXJ3YWxsZXhcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGooYy5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlIFIuYWlyd2FsbGV4U0VQQTpcbiAgICAgICAgICAgICAgICByZXR1cm4gTi5haXJ3YWxsZXhTRVBBLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBjLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBtZShcbiAgICAgICAgICAgICAgICAgICAgYy5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBUZS5TRVBBLFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogaihjLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgX3Qobyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgbDtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgbDtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdFdpdGggPSB0aGlzLmdlbmVyYWxTdWJtaXQsIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICB2YXIgbztcbiAgICAgIF9lKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIiksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIiksIHRoaXMuaXNEZXN0cm95ZWQgPSAhMDtcbiAgICAgIGZvciAoY29uc3QgcyBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgcyAmJiBzLm5vZGUucmVtb3ZlKCk7XG4gICAgICAobyA9ICQoKSkgPT0gbnVsbCB8fCBvLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB4aSgpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCBnKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAobykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhvKTtcbiAgICB9LCB5ZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjUuMTJcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gdC5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnQsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBlci5mcm9tT2JqZWN0KHQpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHQuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgb3UoKSwgdGhpcy5kZXZpY2VUb2tlbiA9IE9uKCksIERpKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcms6IHIsIHZlcnNpb246IG4gfSA9IEpsKCk7XG4gICAgd24odGhpcy5iYXNlVXJsKS50aGVuKChvKSA9PiB7XG4gICAgICBpZiAoIUt0LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudDogbyxcbiAgICAgICAgICBmcmFtZXdvcms6IHIsXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogbixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIEt0LnNldChzKTtcbiAgICAgIH1cbiAgICB9KSwgZyhcImZvcm1faW5pdFwiKSwgY29uc29sZS5sb2coXCJPSlMgVkVSU0lPTlwiLCB0aGlzLm9qc1ZlcnNpb24pLCB0LmFsbG93VHJhY2luZyA9PT0gITAgJiYgWGwodGhpcy5vanNWZXJzaW9uLCB0aGlzLmJhc2VVcmwpLCB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBydSh0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KSwgKGEgPSAkKCkpID09IG51bGwgfHwgYS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbiAgY2hlY2tWYWxpZEZvcm1JbnN0YW5jZSh0ID0gXCJ1bmtub3duXCIpIHtcbiAgICBjb25zdCByID0geWUuZ2V0SW5zdGFuY2UoKSwgbiA9IHtcbiAgICAgIGNhbGxlcjogdCxcbiAgICAgIHRoaXNGb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgY3VycmVudEZvcm1JZDogKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZm9ybUlkKSB8fCBcIm5vLWN1cnJlbnQtaW5zdGFuY2VcIixcbiAgICAgIGlzRGVzdHJveWVkOiB0aGlzLmlzRGVzdHJveWVkLFxuICAgICAgY2hlY2tvdXRUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbi5zdWJzdHJpbmcoMCwgMTApICsgXCIuLi5cIlxuICAgIH0sIGEgPSBgXG4gICAgICBbV2FybmluZ10gSW52YWxpZCBmb3JtIGluc3RhbmNlIGRldGVjdGVkLlxuICAgICAgSXQgbG9va3MgbGlrZSB5b3UgYXJlIHN0aWxsIHVzaW5nIGFuIG9sZCBpbnN0YW5jZSB0aGF0IGhhcyBiZWVuIGRlc3Ryb3llZC5cbiAgICAgIFBsZWFzZSBtYWtlIHN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBmb3JtIGFuZCBjbGVhbnVwIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgICAgRGVidWcgSW5mbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgLSBjYWxsZXI6ICR7dH1cbiAgICAgIC0gY2FsbGVyX2Zvcm1faWQ6ICR7bi50aGlzRm9ybUlkfVxuICAgICAgLSBjdXJyZW50X2FjdGl2ZV9mb3JtX2lkOiAke24uY3VycmVudEZvcm1JZH1cbiAgICAgIC0gaXNfZGVzdHJveWVkOiAke24uaXNEZXN0cm95ZWR9XG4gICAgICAtIGNoZWNrb3V0X3Rva2VuOiAke24uY2hlY2tvdXRUb2tlbn1cbiAgICBgO1xuICAgIHJldHVybiB0aGlzLmlzRGVzdHJveWVkID8gKHJlKGEpLCBnKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBhIH0pLCAhMSkgOiAhciB8fCByLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgPyAocmUoYSksIGcoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IGEgfSksICExKSA6ICEwO1xuICB9XG59O1xueWUub2pzRmxvd3MgPSBOLCB5ZS5hc3NpZ25Bc1NpbmdsZXRvbiA9ICh0KSA9PiB7XG4gIGlmICh5ZS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gdDtcbn0sIHllLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCB5ZS5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHQsIHIsIG4sIGEpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTCh0LmJhc2VVcmwgPz8gTW4pLm9yaWdpbixcbiAgZm9ybURpdjogYSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IHIuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHQuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fSxcbiAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiB0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvblxufSk7XG5sZXQgWXIgPSB5ZTtcblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChZci5nZXRJbnN0YW5jZSgpKSB7XG4gICAgWXIuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2FwcGxlUGF5UmVzdWx0LCBzZXRBcHBsZVBheVJlc3VsdF0gPSB1c2VTdGF0ZShNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUpO1xuICBjb25zdCBbZ29vZ2xlUGF5UmVzdWx0LCBzZXRHb29nbGVQYXlSZXN1bHRdID0gdXNlU3RhdGUoTU9CSUxFX1dBTExFVF9MT0FESU5HX1NUQVRFKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvb3BDb25maWcsIHNldExvb3BDb25maWddID0gdXNlU3RhdGUoTE9PUF9MT0FESU5HKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICAgIGlmIChvcEZvcm0pIHtcbiAgICAgICAgY29uc3QgYXBwbGVQYXlSZXN1bHQyID0gZ2V0QXBwbGVQYXlQcm9jZXNzb3JzKG9wRm9ybS5pbml0Rmxvd3MpO1xuICAgICAgICBzZXRBcHBsZVBheVJlc3VsdChhcHBsZVBheVJlc3VsdDIpO1xuICAgICAgICBjb25zdCBnb29nbGVQYXlSZXN1bHQyID0gZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyhvcEZvcm0uaW5pdEZsb3dzKTtcbiAgICAgICAgc2V0R29vZ2xlUGF5UmVzdWx0KGdvb2dsZVBheVJlc3VsdDIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBZci5nZXRJbnN0YW5jZSgpID8/IG5ldyBZcih7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIGFsbG93VHJhY2luZzogcHJvcHMuYWxsb3dUcmFjaW5nID8/IGZhbHNlLFxuICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBwcm9wcy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24sXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogYXBwbGVQYXlSZXN1bHQsXG4gICAgZ29vZ2xlUGF5OiBnb29nbGVQYXlSZXN1bHQsXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleCxcbiAgICBsb29wOiBsb29wQ29uZmlnXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5leHBvcnQgeyBDZSBhcyBDLCBFcyBhcyBFLCBGciBhcyBGLCBJdCBhcyBJLCBQbiBhcyBQLCBRdCBhcyBRLCBTbiBhcyBTLCBVZSBhcyBVLCBWZSBhcyBWLCBYLCBvciBhcyBhLCBhciBhcyBiLCBDYXJkQ3ZjRWxlbWVudCBhcyBjLCBkcyBhcyBkLCBDYXJkRWxlbWVudCBhcyBlLCBDYXJkRXhwaXJ5RWxlbWVudCBhcyBmLCBncyBhcyBnLCBocyBhcyBoLCBpciBhcyBpLCBDYXJkTnVtYmVyRWxlbWVudCBhcyBqLCBrbiBhcyBrLCBsdCBhcyBsLCBFbGVtZW50c0Zvcm0gYXMgbSwgRmllbGROYW1lIGFzIG4sIG9zIGFzIG8sIEVudmlyb25tZW50IGFzIHAsIFBheUluRmFpbGVkIGFzIHEsIHJzIGFzIHIsIFBheUluU3RhdGUgYXMgcywgU3VibWl0TWV0aG9kcyBhcyB0LCB1dCBhcyB1LCB1c2VPcGVuUGF5RWxlbWVudHMgYXMgdiwgdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIGFzIHcgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGtCQUFBQSxVQUFzQjtBQUMvQixTQUFTLEtBQUtDLFNBQVc7QUFDekIsT0FBT0MsUUFBVztBQUNsQixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxPQUFBQyxJQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsaUJBQUFDLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLFVBQUFDLElBQVEsV0FBQUMsSUFBUyxhQUFBQyxVQUFpQjtBQUVoRixTQUFTQyxHQUFTQyxHQUFRQyxHQUFXO0FBQ25DLE1BQUlDLElBQWlCLE9BQU87QUFDNUIsRUFBQUEsSUFBaUJBLEVBQWVGLEdBQVFDLENBQVMsSUFBSUQsRUFBTyxZQUFZQztBQUMxRTtBQUNBLFNBQVNFLEdBQVNILEdBQVFJLEdBQUk7QUFDNUIsRUFBSUEsTUFBTyxXQUNUQSxJQUFLSixFQUFPO0FBR2QsTUFBSUssSUFBb0IsTUFBTTtBQUM5QixF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VSxFQUFFLE9BQU9xbkIsR0FBc0IsVUFBMEIsZ0JBQUE1bEIsR0FBSSxPQUFPLEVBQUUsSUFBSXdsQixJQUFhLFdBQVc1bUIsRUFBTSxXQUFXLFVBQVVBLEVBQU0sU0FBU3FvQixDQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBb0IsZ0JBQUFqbkIsR0FBSWduQixJQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOVQsR0FDTUQsS0FBMEIsQ0FBQ3JCLE9BQ3hCO0FBQUEsRUFDTCxRQUFRQSxFQUFPO0FBQUEsRUFDZixZQUFZQSxFQUFPLGVBQWU7QUFBQSxFQUNsQyxVQUFVQSxFQUFPO0FBQUEsRUFDakIscUJBQXFCQSxFQUFPO0FBQUEsRUFDNUIsZ0JBQWdCQSxFQUFPO0FBQUEsRUFDdkIsU0FBU0EsRUFBTztBQUNsQjsiLAogICJuYW1lcyI6IFsiY29ubmVjdFRvQ2hpbGQiLCAieiQxIiwgImNoYWxrIiwgInY0IiwgImpzeCIsICJGcmFnbWVudCIsICJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAidXNlRWZmZWN0IiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiZm4iLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJCYXNlRWxlbWVudHNTdHlsZSIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQVdYQmFuayIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiRUZURm9ybURhdGEiLCAiQkFDU0Zvcm1EYXRhIiwgIlNFUEFGb3JtRGF0YSIsICJBQ0hNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJFRlRNaWNyb0RlcG9zaXRGb3JtRGF0YSIsICJCQUNTTWljcm9EZXBvc2l0Rm9ybURhdGEiLCAiU0VQQU1pY3JvRGVwb3NpdEZvcm1EYXRhIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlQWRkcmVzcyIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgImV4dGVuZFN0YXRpY3MiLCAiX19leHRlbmRzIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJyZXN1bHQiLCAiX19nZW5lcmF0b3IiLCAiYm9keSIsICJfIiwgInQiLCAiZiIsICJ5IiwgImciLCAidmVyYiIsICJuIiwgInYiLCAib3AiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX3JlYWQiLCAiciIsICJhciIsICJfX3NwcmVhZEFycmF5IiwgInRvIiwgImZyb20iLCAicGFjayIsICJsIiwgIl9fYXdhaXQiLCAiX19hc3luY0dlbmVyYXRvciIsICJxIiwgImF3YWl0UmV0dXJuIiwgImEiLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJhcnJSZW1vdmUiLCAiYXJyIiwgIml0ZW0iLCAiaW5kZXgiLCAiU3Vic2NyaXB0aW9uIiwgImluaXRpYWxUZWFyZG93biIsICJlXzEiLCAiX2EiLCAiZV8yIiwgIl9iIiwgIl9wYXJlbnRhZ2UiLCAiX3BhcmVudGFnZV8xIiwgIl9fdmFsdWVzIiwgIl9wYXJlbnRhZ2VfMV8xIiwgInBhcmVudF8xIiwgImVfMV8xIiwgImluaXRpYWxGaW5hbGl6ZXIiLCAiZSIsICJfZmluYWxpemVycyIsICJfZmluYWxpemVyc18xIiwgIl9maW5hbGl6ZXJzXzFfMSIsICJmaW5hbGl6ZXIiLCAiZXhlY0ZpbmFsaXplciIsICJfX3NwcmVhZEFycmF5IiwgIl9fcmVhZCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgImRlbGVnYXRlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiX2JpbmQiLCAiYmluZCIsICJmbiIsICJ0aGlzQXJnIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImNvbnRleHRfMSIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgImkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgInokMSIsICJjb25udG9CYXNlVXJscyIsICJnZXRDb25udG9VcmwiLCAiZW52IiwgImdldFdpbmRvd1NhZmUiLCAibWV0cmljc1B1Ymxpc2hlciIsICJNRVRSSUNTX1FVRVVFX0tFWSIsICJNQVhfUkVUUllfQVRURU1QVFMiLCAiQkFUQ0hfU0laRSIsICJCQVRDSF9JTlRFUlZBTF9NUyIsICJsb2dfXyQxIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJzYWZlV2luZG93IiwgImNvbnRleHQiLCAiYmF0Y2giLCAiYmF0Y2hQYXlsb2FkIiwgImNvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAia2V5IiwgImZpZWxkTmFtZSIsICJGaWVsZE5hbWVFbnVtIiwgImxvZ19fIiwgImVycl9fJDEiLCAiY3JlYXRlRHluYW1pY1ZhbGlkYXRpb25TY2hlbWEiLCAicmVxdWlyZV96aXBfY29kZSIsICJyZXF1aXJlX2Z1bGxfYmlsbGluZ19hZGRyZXNzIiwgInJlcXVpcmVfZnVsbF9zaGlwcGluZ19hZGRyZXNzIiwgInBheW1lbnRfbWV0aG9kIiwgImNvbmRpdGlvbmFsRmllbGRzIiwgIkZpZWxkTmFtZSIsICJSZXF1aXJlZFN0cmluZyIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAidmFsaWRhdGVOb25DZGVGb3JtRmllbGRzIiwgIm5vbkNkZUZvcm1JbnB1dHMiLCAib25WYWxpZGF0aW9uRXJyb3IiLCAiZGVmYXVsdEZpZWxkVmFsdWVzIiwgImtleXMiLCAicmVzdWx0IiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAiaXNzdWVLZXlzIiwgIlBheW1lbnRQcm9jZXNzb3IiLCAiQVdYX0xPQURJTkciLCAiQWR5ZW5FbnZpcm9ubWVudCIsICJudWxsT3JVbmRlZk9yJDEiLCAiRW52aXJvbm1lbnQiLCAiRW52aXJvbm1lbnQyIiwgIlBheUluRmFpbGVkIiwgIlBheUluRmFpbGVkMiIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIkxPT1BfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJNT0JJTEVfV0FMTEVUX0xPQURJTkdfU1RBVEUiLCAiZ2V0QXBwbGVQYXlQcm9jZXNzb3JzIiwgImluaXRGbG93cyIsICJhcHBsZVBheUluaXRGbG93cyIsICJhcHBsZVBheUluaXRSZXN1bHRzIiwgImZsb3ciLCAiZmxvd1ZhbHVlIiwgInN0cmlwZVBSRmxvd1Jlc3VsdCIsICJjdXN0b21QYXJhbXMiLCAic3RhcnRBcHBsZVBheUZsb3ciLCAiZ2V0R29vZ2xlUGF5UHJvY2Vzc29ycyIsICJnb29nbGVQYXlJbml0Rmxvd3MiLCAiZ29vZ2xlUGF5SW5pdFJlc3VsdHMiLCAic3RhcnRHb29nbGVQYXlGbG93IiwgImluaXRSZXN1bHRzIiwgImF2YWlsYWJsZUZsb3ciLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgIkVsZW1lbnRzQ29udGV4dCIsICJjcmVhdGVDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJ1c2VDb250ZXh0IiwgIkVsZW1lbnRGcmFtZSIsICJwcm9wcyIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgInVzZVN0YXRlIiwgImlmcmFtZVJlZiIsICJ1c2VSZWYiLCAiZWxlbWVudFN0eWxlIiwgInVzZU1lbW8iLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAidXNlRWZmZWN0IiwgImpzeCIsICJ1cmwiLCAiQ2FyZEVsZW1lbnQiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkNhcmRDdmNFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50IiwgImdvIiwgIndvIiwgInZvIiwgInIiLCAibiIsICJhIiwgIm8iLCAicyIsICJibyIsICJBIiwgIkUiLCAiRCIsICJwIiwgIldyIiwgIlpyIiwgIktyIiwgIlFyIiwgImdlIiwgIkVvIiwgIlJ0IiwgIlBvIiwgIk50IiwgImNlIiwgIlNvIiwgIkNvIiwgImtvIiwgIkFvIiwgIklvIiwgIlRvIiwgIlJvIiwgIk5vIiwgIkZvIiwgIk1vIiwgIkxvIiwgIkRvIiwgIiRlIiwgInhvIiwgIk9vIiwgIlVvIiwgImpvIiwgIiRvIiwgIkdvIiwgIlZvIiwgIml0IiwgInFvIiwgInpvIiwgIkhvIiwgIlQiLCAiWHIiLCAiQm8iLCAiWW8iLCAiZW4iLCAiSm8iLCAiV28iLCAiWm8iLCAiS28iLCAiUW8iLCAiWG8iLCAiZWEiLCAidGEiLCAicmEiLCAibmEiLCAiUCIsICJvYSIsICJ0biIsICJybiIsICJhYSIsICJpYSIsICJIZSIsICJzYSIsICJjYSIsICJubiIsICJsYSIsICJ1YSIsICJkYSIsICJ2ciIsICJvbiIsICJiciIsICJhbiIsICJwYSIsICJQdCIsICJzbiIsICJtYSIsICJmYSIsICJ5YSIsICJjbiIsICJoYSIsICJsbiIsICJnYSIsICJ3YSIsICJ2YSIsICJiYSIsICJFYSIsICJQYSIsICJTYSIsICJDYSIsICJrYSIsICJBYSIsICJKdCIsICJJYSIsICJUYSIsICJSYSIsICJlZSIsICJOYSIsICJGYSIsICJ1biIsICJNYSIsICJMYSIsICJCIiwgImciLCAiTWkiLCAibCIsICJGbiIsICJ2ZSIsICJJIiwgImNoYWxrIiwgIld0IiwgImtlIiwgIkRhIiwgIm0iLCAiYyIsICJkbiIsICJHZSIsICJTdCIsICJDdCIsICJPZSIsICJ4YSIsICJmIiwgInkiLCAiaCIsICJ2IiwgIlMiLCAiXyIsICJPYSIsICJWIiwgIkZ0IiwgIiR0IiwgImt0IiwgInB0IiwgIkVyIiwgInBuIiwgIl9uIiwgIm1uIiwgInluIiwgIlByIiwgInZ0IiwgInRyIiwgIkdhIiwgIlp0IiwgIlVhIiwgIkd0IiwgImphIiwgInl0IiwgIiRhIiwgInJyIiwgIlZhIiwgInFhIiwgIndlIiwgIkhhIiwgIlNyIiwgInphIiwgIkJhIiwgIllhIiwgIkphIiwgIldhIiwgIlphIiwgImhuIiwgIkNyIiwgIkthIiwgIlFhIiwgImtyIiwgIlhhIiwgIkFyIiwgImVpIiwgInRpIiwgInJpIiwgIm5pIiwgIm9pIiwgImFpIiwgImlpIiwgInNpIiwgImNpIiwgImxpIiwgInVpIiwgImRpIiwgInBpIiwgIm1pIiwgImZpIiwgImduIiwgInlpIiwgImhpIiwgImdpIiwgIndpIiwgInZpIiwgImJpIiwgIkVpIiwgIlBpIiwgIlNpIiwgIkNpIiwgImtpIiwgInciLCAiYiIsICJudCIsICJfdCIsICJJciIsICJBaSIsICJJaSIsICJWdCIsICJ3biIsICJNdCIsICIkIiwgIkt0IiwgIlRyIiwgIlRpIiwgIlJpIiwgIk5pIiwgImh0IiwgIkZpIiwgIm5yIiwgInZuIiwgImJuIiwgInQiLCAiQXQiLCAiTGkiLCAiRW4iLCAiRGkiLCAieGkiLCAiT2kiLCAiVWkiLCAiamkiLCAiTHQiLCAiUnIiLCAiRHQiLCAiJGkiLCAiR2kiLCAiVmkiLCAicWkiLCAiemkiLCAiSGkiLCAiTmUiLCAiTnIiLCAiQmkiLCAidSIsICJkIiwgIllpIiwgIkppIiwgInN0IiwgImN0IiwgIm9yIiwgImx0IiwgImFyIiwgIldpIiwgIlppIiwgIktpIiwgIlplIiwgIlgiLCAiUWkiLCAiWGkiLCAiZXMiLCAidHMiLCAiSXQiLCAicnMiLCAibnMiLCAib3MiLCAiYXMiLCAiaXMiLCAic3MiLCAiY3MiLCAibHMiLCAicXQiLCAidXMiLCAiaXIiLCAiUXQiLCAiUG4iLCAiU24iLCAiZHMiLCAib3QiLCAic3IiLCAiY3IiLCAicHMiLCAibHIiLCAiX3MiLCAibXMiLCAiQ24iLCAiZnMiLCAieXMiLCAiaHMiLCAiZ3MiLCAia24iLCAid3MiLCAienQiLCAiQW4iLCAidnMiLCAiYnMiLCAiRXMiLCAiUHMiLCAiU3MiLCAiRnIiLCAidXQiLCAiQ2UiLCAiVWUiLCAiSHQiLCAiQ3MiLCAiVmUiLCAia3MiLCAiZ3QiLCAiSW4iLCAiWSIsICJJcyIsICJBcyIsICJUcyIsICJNIiwgIm9lIiwgIlRuIiwgIlJzIiwgIk8iLCAiTnMiLCAiRnMiLCAiTXMiLCAiYmUiLCAiUm4iLCAiTXIiLCAiTHMiLCAidXIiLCAiTm4iLCAiRHMiLCAiY29ubmVjdFRvQ2hpbGQiLCAieHQiLCAieHMiLCAiT3MiLCAiVXMiLCAiTW4iLCAiTG4iLCAiYXQiLCAianMiLCAiRG4iLCAiTHIiLCAiRmUiLCAiWGUiLCAiJHMiLCAiR3MiLCAiVnMiLCAiSHMiLCAicXMiLCAienMiLCAiQnMiLCAieG4iLCAiT24iLCAiWXMiLCAiSnMiLCAiaiIsICJXcyIsICJacyIsICJIIiwgIlEiLCAiT3QiLCAiS3MiLCAiUXMiLCAiVXQiLCAiVW4iLCAianQiLCAiZHIiLCAiam4iLCAiRWUiLCAiJG4iLCAiWHMiLCAiR24iLCAibGUiLCAiZWMiLCAidGMiLCAicmMiLCAibmMiLCAib2MiLCAiYWMiLCAicSIsICJWbiIsICJ1dSIsICJxbiIsICJtdCIsICJ6IiwgInByIiwgInVlIiwgIlUiLCAiem4iLCAiQmUiLCAiX3IiLCAiQnQiLCAibXIiLCAiWWUiLCAiSmUiLCAiZnIiLCAiUGUiLCAiaWMiLCAic2MiLCAiQyIsICJrIiwgIktlIiwgImNjIiwgImxjIiwgIlNlIiwgInVjIiwgImRjIiwgInBjIiwgInlyIiwgIm1jIiwgIkhuIiwgImZjIiwgIkJuIiwgIlluIiwgIkpuIiwgImhyIiwgImdyIiwgInljIiwgImhjIiwgIndyIiwgImdjIiwgIndjIiwgInFlIiwgImR0IiwgInZjIiwgIlduIiwgImJjIiwgIkVjIiwgIkRyIiwgIlBjIiwgIlNjIiwgIkNjIiwgIlpuIiwgIktuIiwgIlFuIiwgIlhuIiwgImtjIiwgIkFjIiwgIkljIiwgImhvIiwgImV0IiwgImVvIiwgIlRjIiwgIk4iLCAiUmMiLCAic2UiLCAiRGUiLCAiTmMiLCAiRmMiLCAiSiIsICJMIiwgImRlIiwgIkFlIiwgIlciLCAiaGUiLCAiTGUiLCAiV2UiLCAiUWUiLCAiTWMiLCAiTGMiLCAiYnQiLCAiRGMiLCAieGMiLCAiT2MiLCAidHQiLCAidG8iLCAiVWMiLCAiamMiLCAibmUiLCAieGUiLCAiJGMiLCAiR2MiLCAidGUiLCAicm8iLCAibm8iLCAiVmMiLCAicWMiLCAiRXQiLCAib28iLCAiemMiLCAiSGMiLCAiUmUiLCAicnQiLCAiQmMiLCAiWWMiLCAiSmMiLCAiYW8iLCAiV2MiLCAiWmMiLCAiaW8iLCAiWHQiLCAiS2MiLCAiUWMiLCAid3QiLCAiWGMiLCAiZWwiLCAidGwiLCAicmwiLCAiamUiLCAic28iLCAiY28iLCAibmwiLCAib2wiLCAiYWwiLCAiaWwiLCAibG8iLCAieHIiLCAic2wiLCAidW8iLCAiY2wiLCAibGwiLCAiTWUiLCAiVHQiLCAidWwiLCAicG8iLCAiZGwiLCAibWwiLCAicGwiLCAiX2wiLCAibW8iLCAiX28iLCAiRiIsICJPciIsICJmbCIsICJ5bCIsICJobCIsICJnbCIsICJaIiwgIndsIiwgInZsIiwgImJsIiwgIkllIiwgIkVsIiwgImZvIiwgIlBsIiwgIlNsIiwgInBlIiwgIlVyIiwgInlvIiwgIkNsIiwgImtsIiwgImpyIiwgIkciLCAiQWwiLCAiSWwiLCAiVGwiLCAiUmwiLCAiTWwiLCAiTmwiLCAiRmwiLCAiSyIsICJMbCIsICJEbCIsICJ4bCIsICJtZSIsICJPbCIsICJqbCIsICJVbCIsICIkbCIsICJHbCIsICJWbCIsICJhZSIsICJxbCIsICJ6bCIsICJIbCIsICJpZSIsICIkciIsICJmZSIsICJlciIsICJCbCIsICJZbCIsICJKbCIsICJSIiwgIlRlIiwgIkdyIiwgIldsIiwgIlZyIiwgIlpsIiwgIktsIiwgIll0IiwgIlFsIiwgIlhsIiwgImV1IiwgInFyIiwgInR1IiwgInJ1IiwgInpyIiwgIm51IiwgIm91IiwgImF1IiwgIkhyIiwgIkJyIiwgIl9lIiwgInJlIiwgInllIiwgIllyIiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJmb3JtQ2FsbGJhY2tzIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAiYXBwbGVQYXlSZXN1bHQiLCAic2V0QXBwbGVQYXlSZXN1bHQiLCAiZ29vZ2xlUGF5UmVzdWx0IiwgInNldEdvb2dsZVBheVJlc3VsdCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJsb29wQ29uZmlnIiwgInNldExvb3BDb25maWciLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImFwcGxlUGF5UmVzdWx0MiIsICJnb29nbGVQYXlSZXN1bHQyIiwgImZvcm0iLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAiRnJhZ21lbnQiLCAiY2hpbGRyZW5Qcm9wcyJdCn0K
|