@getopenpay/openpay-js-react 0.2.12 → 0.2.13-alpha.000ac44

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/index.js CHANGED
@@ -67,7 +67,7 @@ ${t.message}`), t.message);
67
67
  };
68
68
  var V = /* @__PURE__ */ ((t) => (t.pockytPaypal = "pockyt-paypal", t.airwallexGooglePay = "airwallex-google-pay", t.airwallexApplePay = "airwallex-apple-pay", t.authorizenetGooglePay = "authorizenet-google-pay", t.authorizenetApplePay = "authorizenet-apple-pay", t))(V || {});
69
69
  e.nativeEnum(V);
70
- const T = e.string().trim().min(1, { message: "Cannot be blank" }), k = e.string().trim().optional(), F = (t) => e.nullable(t.optional());
70
+ const j = e.string().trim().min(1, { message: "Cannot be blank" }), k = e.string().trim().optional(), U = (t) => e.nullable(t.optional());
71
71
  var p = /* @__PURE__ */ ((t) => (t.FIRST_NAME = "firstName", t.LAST_NAME = "lastName", t.EMAIL = "email", t.ZIP_CODE = "zipCode", t.CITY = "city", t.STATE = "state", t.COUNTRY = "country", t.ADDRESS = "address", t.PHONE = "phone", t.PROMOTION_CODE = "promotionCode", t))(p || {});
72
72
  const Bt = e.nativeEnum(p);
73
73
  var Jt = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(Jt || {});
@@ -75,8 +75,8 @@ const Wt = e.nativeEnum(Jt), Xt = e.union([Bt, Wt]);
75
75
  var be = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(be || {});
76
76
  const or = e.nativeEnum(be), Ve = e.object({
77
77
  provider: e.string(),
78
- processor_name: F(e.string()),
79
- metadata: F(e.record(e.string(), e.any()))
78
+ processor_name: U(e.string()),
79
+ metadata: U(e.record(e.string(), e.any()))
80
80
  }), ar = e.object({
81
81
  id: e.string()
82
82
  });
@@ -124,7 +124,7 @@ const Z = e.enum([
124
124
  errors: e.array(e.string()).optional()
125
125
  }), ur = Z.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), dr = e.object({
126
126
  type: ur,
127
- message: T,
127
+ message: j,
128
128
  headers: e.record(e.string(), e.string()).optional()
129
129
  }), pr = Z.extract(["VALIDATION_ERROR"]), mr = e.object({
130
130
  type: pr,
@@ -132,10 +132,10 @@ const Z = e.enum([
132
132
  errors: e.array(e.string())
133
133
  }), yr = e.object({
134
134
  type: e.literal(Z.enum.LAYOUT),
135
- height: T
135
+ height: j
136
136
  }), _r = e.object({
137
137
  type: e.literal(Z.enum.LOADED),
138
- sessionId: T,
138
+ sessionId: j,
139
139
  totalAmountAtoms: e.number(),
140
140
  currency: k,
141
141
  checkoutPaymentMethods: e.array(Ve)
@@ -147,39 +147,39 @@ const Z = e.enum([
147
147
  }), fr = e.object({
148
148
  type: e.literal(Z.enum.SETUP_PAYMENT_METHOD_SUCCESS),
149
149
  paymentMethodId: e.string()
150
- }), Ie = e.object({
151
- firstName: T,
152
- lastName: T,
153
- email: T,
154
- zipCode: T,
155
- country: T,
150
+ }), xe = e.object({
151
+ firstName: j,
152
+ lastName: j,
153
+ email: j,
154
+ zipCode: j,
155
+ country: j,
156
156
  promotionCode: k
157
157
  }), gr = e.object({
158
158
  firstName: k,
159
159
  lastName: k,
160
- email: T,
161
- zipCode: T,
162
- country: T,
160
+ email: j,
161
+ zipCode: j,
162
+ country: j,
163
163
  promotionCode: k,
164
164
  address: k,
165
165
  city: k,
166
166
  state: k
167
167
  }), br = Z.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), wr = e.object({
168
168
  type: br,
169
- sessionId: T,
169
+ sessionId: j,
170
170
  checkoutPaymentMethod: Ve,
171
171
  paymentFlowMetadata: e.any().optional(),
172
172
  doNotUseLegacyCCFlow: e.boolean().optional(),
173
173
  existingCCPMId: k
174
- }).extend(Ie.shape), vr = e.object({
174
+ }).extend(xe.shape), vr = e.object({
175
175
  type: e.literal(Z.enum.TOKENIZE_SUCCESS),
176
176
  isReadyForCheckout: e.boolean()
177
- }), Er = e.object({
177
+ }), Pr = e.object({
178
178
  type: e.literal(Z.enum.CHECKOUT_SUCCESS),
179
179
  invoiceUrls: e.array(e.string()),
180
180
  subscriptionIds: e.array(e.string()),
181
181
  customerId: e.string()
182
- }), Pr = e.discriminatedUnion("type", [
182
+ }), Er = e.discriminatedUnion("type", [
183
183
  sr,
184
184
  lr,
185
185
  dr,
@@ -188,21 +188,21 @@ const Z = e.enum([
188
188
  _r,
189
189
  wr,
190
190
  vr,
191
- Er,
191
+ Pr,
192
192
  hr,
193
193
  fr
194
194
  ]), Cr = e.object({
195
- payload: Pr,
196
- nonce: T,
197
- formId: T,
198
- elementId: T
195
+ payload: Er,
196
+ nonce: j,
197
+ formId: j,
198
+ elementId: j
199
199
  });
200
200
  e.object({
201
201
  amountAtom: e.number(),
202
202
  /**
203
203
  * The three-letter ISO 4217 currency code for the payment.
204
204
  */
205
- currency: T
205
+ currency: j
206
206
  });
207
207
  e.enum(["apple_pay", "google_pay"]);
208
208
  e.object({
@@ -211,10 +211,10 @@ e.object({
211
211
  });
212
212
  e.object({
213
213
  secure_token: e.string(),
214
- existing_cc_pm_id: F(e.string()),
215
- their_pm_id: F(e.string()),
216
- checkout_attempt_id: F(e.string()),
217
- processor_specific_metadata: F(e.record(e.string(), e.any()))
214
+ existing_cc_pm_id: U(e.string()),
215
+ their_pm_id: U(e.string()),
216
+ checkout_attempt_id: U(e.string()),
217
+ processor_specific_metadata: U(e.record(e.string(), e.any()))
218
218
  });
219
219
  const ht = e.object({
220
220
  invoice_urls: e.array(e.string()),
@@ -238,14 +238,14 @@ const Sr = e.object({
238
238
  e.object({
239
239
  session_id: e.string(),
240
240
  checkout_payment_method: Ve,
241
- non_cde_form_fields: Ie,
241
+ non_cde_form_fields: xe,
242
242
  do_not_use_legacy_cc_flow: e.boolean().optional(),
243
- existing_cc_pm_id: F(e.string())
243
+ existing_cc_pm_id: U(e.string())
244
244
  });
245
245
  e.object({
246
246
  session_id: e.string(),
247
247
  checkout_payment_method: Ve,
248
- non_cde_form_fields: Ie,
248
+ non_cde_form_fields: xe,
249
249
  extra_metadata: e.record(e.string(), e.any()).optional()
250
250
  });
251
251
  var K = /* @__PURE__ */ ((t) => (t.SUCCESS = "success", t.FAILURE = "failure", t.CANCELLED = "cancelled", t))(K || {});
@@ -269,19 +269,19 @@ const Or = e.object({
269
269
  their_pm_id: e.string().optional()
270
270
  }), Qt = e.object({
271
271
  type: e.string(),
272
- redirect_url: F(e.string()),
273
- initial_intent_id: F(e.string()),
274
- consent_id: F(e.string()),
275
- their_pm_id: F(e.string()),
276
- payment_session: F(e.record(e.string(), e.any()))
272
+ redirect_url: U(e.string()),
273
+ initial_intent_id: U(e.string()),
274
+ consent_id: U(e.string()),
275
+ their_pm_id: U(e.string()),
276
+ payment_session: U(e.record(e.string(), e.any()))
277
277
  }), xr = e.discriminatedUnion("present", [
278
278
  e.object({ present: e.literal(!0), href: e.string() }),
279
279
  e.object({ present: e.literal(!1) })
280
280
  ]), Rr = e.object({
281
281
  payment_methods: e.array(ar),
282
- pay_first_success_response: F(ht),
283
- required_user_actions: F(e.array(Qt))
284
- }), Tr = (t) => {
282
+ pay_first_success_response: U(ht),
283
+ required_user_actions: U(e.array(Qt))
284
+ }), jr = (t) => {
285
285
  const r = {};
286
286
  return Object.entries(t).forEach(([n, o]) => {
287
287
  try {
@@ -291,7 +291,7 @@ const Or = e.object({
291
291
  return;
292
292
  }
293
293
  }), r;
294
- }, jr = e.object({
294
+ }, Tr = e.object({
295
295
  stripe_pk: e.string(),
296
296
  client_secret: e.string(),
297
297
  stripe_pm_id: e.string()
@@ -304,8 +304,8 @@ const Or = e.object({
304
304
  brl: "brl"
305
305
  }, Ge = async (t) => {
306
306
  for (let r = 0; r < 10; r++)
307
- Et() || await en(500);
308
- if (!Et())
307
+ Pt() || await en(500);
308
+ if (!Pt())
309
309
  throw console.log("Stripe JS not found."), new Error("Stripe JS not found.");
310
310
  return new Stripe(t);
311
311
  }, Dr = async (t, r) => {
@@ -332,7 +332,7 @@ const Or = e.object({
332
332
  });
333
333
  }, en = (t) => new Promise((r) => {
334
334
  setTimeout(r, t);
335
- }), Et = () => "Stripe" in window, Ur = async (t) => new Promise((r, n) => {
335
+ }), Pt = () => "Stripe" in window, Ur = async (t) => new Promise((r, n) => {
336
336
  try {
337
337
  t.on("paymentmethod", async (o) => {
338
338
  console.log("paymentmethod EVT:: ", o), r(o);
@@ -363,7 +363,7 @@ const Or = e.object({
363
363
  else throw s === "canceled" ? new Error("Payment cancelled, please click Submit again to pay") : new Error(
364
364
  `${((n = i.error) == null ? void 0 : n.message) ?? ((a = (o = i.setupIntent) == null ? void 0 : o.last_setup_error) == null ? void 0 : a.message) ?? "Payment failed, please click submit again to pay."}`
365
365
  );
366
- }, qr = (t) => JSON.stringify(t), oe = (t, r) => Array.from(t.querySelectorAll("[data-opid]") ?? []).reduce((n, o) => {
366
+ }, qr = (t) => JSON.stringify(t), re = (t, r) => Array.from(t.querySelectorAll("[data-opid]") ?? []).reduce((n, o) => {
367
367
  const a = o.getAttribute("data-opid");
368
368
  return a ? { ...n, [a]: o.value } : n;
369
369
  }, {}), $r = (t) => {
@@ -409,7 +409,7 @@ const tn = e.object({
409
409
  }), Kr = e.record(e.string(), e.any()), Hr = e.object({
410
410
  name: e.string(),
411
411
  settings: g(Kr)
412
- }), Oe = e.object({
412
+ }), Pe = e.object({
413
413
  provider: e.string(),
414
414
  processor_name: g(e.string()),
415
415
  metadata: g(e.record(e.string(), e.any()))
@@ -441,12 +441,12 @@ const tn = e.object({
441
441
  tax_amount_atom: e.number(),
442
442
  total_amount_atom: e.number(),
443
443
  total_discount_amount_atoms: e.array(rn)
444
- }), Pt = e.object({
444
+ }), Et = e.object({
445
445
  created: e.array(Br),
446
446
  invoices: e.array(Xr)
447
447
  }), on = e.object({
448
- preview: Pt,
449
- preview_post_trial: g(Pt),
448
+ preview: Et,
449
+ preview_post_trial: g(Et),
450
450
  coupons: e.array(tn)
451
451
  }), Ct = e.object({
452
452
  status: e.literal("open"),
@@ -458,7 +458,7 @@ const tn = e.object({
458
458
  brand: Hr,
459
459
  subs_preview: g(on),
460
460
  // Null in setup mode
461
- methods_available: e.array(Oe)
461
+ methods_available: e.array(Pe)
462
462
  }), an = e.discriminatedUnion("mode", [
463
463
  e.object({
464
464
  mode: e.literal("setup"),
@@ -496,7 +496,7 @@ e.object({
496
496
  line_items: e.array(nn),
497
497
  total_amount_atom: e.number().int(),
498
498
  cancel_at_end: e.boolean(),
499
- checkout_payment_method: Oe,
499
+ checkout_payment_method: Pe,
500
500
  promotion_code: e.string().optional(),
501
501
  do_not_use_legacy_cc_flow: e.boolean().optional(),
502
502
  use_confirmed_pm_id: g(e.string())
@@ -532,7 +532,7 @@ const no = e.object({
532
532
  });
533
533
  e.object({
534
534
  payment_provider: e.string(),
535
- checkout_payment_method: Oe,
535
+ checkout_payment_method: Pe,
536
536
  existing_cc_pm_id: e.string().optional(),
537
537
  their_existing_pm_id: e.string().optional(),
538
538
  use_pay_first_flow: e.boolean().optional(),
@@ -544,12 +544,12 @@ const cn = e.object({
544
544
  });
545
545
  e.object({
546
546
  fields: gr,
547
- checkoutPaymentMethod: Oe
547
+ checkoutPaymentMethod: Pe
548
548
  });
549
549
  e.object({
550
550
  session_id: e.string(),
551
- non_cde_form_fields: Ie,
552
- checkout_payment_method: Oe,
551
+ non_cde_form_fields: xe,
552
+ checkout_payment_method: Pe,
553
553
  extra_metadata: e.record(e.string(), e.any())
554
554
  // This is optional in CDE, but not in OJS moving forward
555
555
  });
@@ -573,7 +573,7 @@ e.object({
573
573
  phone_number: g(e.string()),
574
574
  update_processor_customer: g(e.boolean())
575
575
  });
576
- const so = e.object({
576
+ e.object({
577
577
  id: e.string(),
578
578
  email: g(e.string()),
579
579
  first_name: g(e.string()),
@@ -585,8 +585,15 @@ const so = e.object({
585
585
  e.object({
586
586
  message: e.string()
587
587
  });
588
- const co = e.object({
588
+ const so = e.object({
589
589
  error_code: e.string()
590
+ });
591
+ e.object({
592
+ checkout_payment_method: Pe,
593
+ processor_specific_metadata: e.record(e.any()).optional()
594
+ });
595
+ const co = e.object({
596
+ next_action_metadata: g(e.record(e.any()))
590
597
  }), lo = (t) => t.reduce((r, n) => r + n, 0);
591
598
  function uo(t, r) {
592
599
  var n = Object.setPrototypeOf;
@@ -646,11 +653,11 @@ const D = async (t, r, n) => {
646
653
  throw a.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", n, "Actual:", o), a.error);
647
654
  }
648
655
  return o;
649
- }, _o = (t, r) => r.safeParse(t).success, ho = (t) => Yr.safeParse(t).success, fo = async (t, r) => await D(t, { type: "get_checkout_preview", payload: r }, on), L = async (t) => await D(t, { type: "get_prefill", payload: {} }, an), xe = async (t, r) => await D(t, { type: "v2_start_payment_flow", payload: r }, cn), go = async (t, r) => await D(t, { type: "start_payment_flow_for_cc", payload: r }, io), bo = async (t, r) => await D(t, { type: "start_payment_flow_for_pr", payload: r }, cn), Q = async (t, r) => await D(t, { type: "confirm_payment_flow", payload: r }, Rr), wo = async (t, r) => await D(t, { type: "finalize_setup_payment_method", payload: r }, sn), vo = async (t, r) => await D(
656
+ }, _o = (t, r) => r.safeParse(t).success, ho = (t) => Yr.safeParse(t).success, fo = async (t, r) => await D(t, { type: "get_checkout_preview", payload: r }, on), L = async (t) => await D(t, { type: "get_prefill", payload: {} }, an), Re = async (t, r) => await D(t, { type: "v2_start_payment_flow", payload: r }, cn), go = async (t, r) => await D(t, { type: "start_payment_flow_for_cc", payload: r }, io), bo = async (t, r) => await D(t, { type: "start_payment_flow_for_pr", payload: r }, cn), Q = async (t, r) => await D(t, { type: "confirm_payment_flow", payload: r }, Rr), wo = async (t, r) => await D(t, { type: "finalize_setup_payment_method", payload: r }, sn), vo = async (t, r) => await D(
650
657
  t,
651
658
  { type: "check_if_popup_window_verified", payload: r },
652
659
  xr
653
- ), Eo = async (t, r, n) => {
660
+ ), Po = async (t, r, n) => {
654
661
  const o = await fo(t, {
655
662
  secure_token: r,
656
663
  promotion_code: n
@@ -667,10 +674,10 @@ const D = async (t, r, n) => {
667
674
  return { amountAtom: 0, currency: "usd" };
668
675
  {
669
676
  o = o || void 0;
670
- const a = await Eo(t, r, o);
677
+ const a = await Po(t, r, o);
671
678
  return { amountAtom: a.amountAtom, currency: a.currency };
672
679
  }
673
- }, Po = async (t, r) => {
680
+ }, Eo = async (t, r) => {
674
681
  if (t.size === 0)
675
682
  throw new Error("No CDE connections found");
676
683
  return await Promise.all(
@@ -694,12 +701,12 @@ const D = async (t, r, n) => {
694
701
  // TODO: use with proper childOrigin
695
702
  }).promise, o = await D(n, { type: "ping-3ds-status" }, Ir);
696
703
  return console.log("🟢 CDE connection successful! Stopping polling... Result:", o), o;
697
- }, dn = async (t, r) => await D(t, { type: "update_checkout_customer", payload: r }, so), pn = async (t, r) => {
704
+ }, dn = async (t, r) => await D(t, { type: "prepare_payment_flow", payload: r }, co), pn = async (t, r) => {
698
705
  try {
699
706
  return (await D(
700
707
  t,
701
708
  { type: "get_standardized_error_code", payload: { message: r } },
702
- co
709
+ so
703
710
  )).error_code;
704
711
  } catch (n) {
705
712
  return console.error("[cde-client] Error during getStandardizedErrorCode:", X(n)), "PAYMENT_FAILED_GENERIC";
@@ -727,7 +734,7 @@ const se = (t) => async (r) => {
727
734
  const i = X(a), s = await pn(r.context.anyCdeConnection, i);
728
735
  r.formCallbacks.get.onCheckoutError(i, s);
729
736
  }
730
- }, Pe = (t) => async (r) => {
737
+ }, Ce = (t) => async (r) => {
731
738
  try {
732
739
  return await t(r);
733
740
  } catch (n) {
@@ -795,9 +802,9 @@ const se = (t) => async (r) => {
795
802
  for (const [a, i] of Object.entries(n))
796
803
  t[a] || (t[a] = i);
797
804
  }
798
- const o = Ie.safeParse(t);
805
+ const o = xe.safeParse(t);
799
806
  if (!o.success) {
800
- const a = o.error.format(), i = Tr(a);
807
+ const a = o.error.format(), i = jr(a);
801
808
  for (const [s, c] of Object.entries(i))
802
809
  r(s, c, s);
803
810
  throw yn("Got validation errors in non-CDE form fields", i), new Error("Got validation errors in non-CDE form fields");
@@ -825,7 +832,7 @@ const se = (t) => async (r) => {
825
832
  e.object({
826
833
  our_existing_pm_id: e.string()
827
834
  })
828
- ).length(1), To = Pe(
835
+ ).length(1), jo = Ce(
829
836
  async ({ context: t, formCallbacks: r }) => {
830
837
  const n = t.customInitParams.stripeLink;
831
838
  O("Checking if there are any CPMs for Stripe Link...");
@@ -870,7 +877,7 @@ const se = (t) => async (r) => {
870
877
  f.error ? (Oo("error", f.error), r.get.onCheckoutError(f.error.message ?? "Stripe Link unknown error")) : (O("paymentMethod", f.paymentMethod), R.stripeLink.run({
871
878
  context: t,
872
879
  checkoutPaymentMethod: o,
873
- nonCdeFormInputs: oe(t.formDiv),
880
+ nonCdeFormInputs: re(t.formDiv),
874
881
  formCallbacks: r,
875
882
  customParams: { stripePM: f.paymentMethod },
876
883
  initResult: { isAvailable: !0 }
@@ -884,7 +891,7 @@ const se = (t) => async (r) => {
884
891
  }
885
892
  };
886
893
  }
887
- ), jo = se(
894
+ ), To = se(
888
895
  async ({
889
896
  context: t,
890
897
  checkoutPaymentMethod: r,
@@ -897,7 +904,7 @@ const se = (t) => async (r) => {
897
904
  O("Merging PM fields with form fields...");
898
905
  const s = Mo(n, a.stripePM), c = ce(s, o.get.onValidationError);
899
906
  O("Starting payment flow...");
900
- const l = await xe(i, {
907
+ const l = await Re(i, {
901
908
  payment_provider: r.provider,
902
909
  checkout_payment_method: r,
903
910
  their_existing_pm_id: a.stripePM.id,
@@ -1113,7 +1120,7 @@ Error: ${X(r)}`), new Error(n);
1113
1120
  processor_account_name: e.string(),
1114
1121
  google_pay_merchant_id: e.string().nullish()
1115
1122
  })
1116
- }), { log__: C, err__: At } = A("common-cc"), { log__: It } = A("stripe-cc");
1123
+ }), { log__: E, err__: At } = A("common-cc"), { log__: It } = A("stripe-cc");
1117
1124
  e.array(
1118
1125
  e.object({
1119
1126
  our_existing_pm_id: e.string()
@@ -1128,9 +1135,9 @@ const ea = se(
1128
1135
  customParams: a
1129
1136
  }) => {
1130
1137
  var i;
1131
- C("├ Running common CC flow...", { checkoutPaymentMethod: r });
1138
+ E("├ Running common CC flow...", { checkoutPaymentMethod: r });
1132
1139
  const s = t.anyCdeConnection, c = await L(s);
1133
- C(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
1140
+ E(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
1134
1141
  const l = ce(n, o.get.onValidationError), u = {
1135
1142
  session_id: t.elementsSessionId,
1136
1143
  checkout_payment_method: r,
@@ -1138,55 +1145,55 @@ const ea = se(
1138
1145
  extra_metadata: {}
1139
1146
  };
1140
1147
  try {
1141
- C(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
1142
- const d = await Po(a.currentCdeConnections, {
1148
+ E(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
1149
+ const d = await Eo(a.currentCdeConnections, {
1143
1150
  session_id: t.elementsSessionId
1144
1151
  });
1145
1152
  if (Io(d, o.get.onValidationError), c.mode === "setup") {
1146
- C(`├ Setting up payment method in CDE [Token: ${c.token}]`);
1153
+ E(`├ Setting up payment method in CDE [Token: ${c.token}]`);
1147
1154
  const _ = await Co(s, u);
1148
- return C(`╰ Setup completed successfully [PM ID: ${_.payment_method_id}]`), { mode: "setup", result: _ };
1155
+ return E(`╰ Setup completed successfully [PM ID: ${_.payment_method_id}]`), { mode: "setup", result: _ };
1149
1156
  } else {
1150
- C(`├ Initial checkout flow. Checking out card info in CDE [Session: ${t.elementsSessionId}]`);
1157
+ E(`├ Initial checkout flow. Checking out card info in CDE [Session: ${t.elementsSessionId}]`);
1151
1158
  const _ = await kt(s, u);
1152
- return C("╰ Checkout completed successfully."), { mode: "checkout", result: _ };
1159
+ return E("╰ Checkout completed successfully."), { mode: "checkout", result: _ };
1153
1160
  }
1154
1161
  } catch (d) {
1155
1162
  if (d instanceof ln && d.originalErrorMessage.includes("3DS_REQUIRED")) {
1156
- C("├ Card requires 3DS, starting non-legacy payment flow"), C("Received 3DS error response headers:", d.response.headers);
1163
+ E("├ Card requires 3DS, starting non-legacy payment flow"), E("Received 3DS error response headers:", d.response.headers);
1157
1164
  const _ = Ko(d.response.headers);
1158
1165
  if (_) {
1159
- C("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
1166
+ E("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
1160
1167
  const y = await Ho(t.baseUrl, d.response.headers);
1161
1168
  u.extra_metadata.pockyt = y;
1162
1169
  }
1163
1170
  if (Wo(d.response.headers)) {
1164
- C("├ Airwallex 3DS case detected. Going through Airwallex 3DS flow.");
1171
+ E("├ Airwallex 3DS case detected. Going through Airwallex 3DS flow.");
1165
1172
  const y = await Qo(t.baseUrl, d.response.headers);
1166
1173
  u.extra_metadata.airwallex = y;
1167
1174
  }
1168
1175
  const h = await go(s, u);
1169
- C("├ Payment flow result:", h);
1176
+ E("├ Payment flow result:", h);
1170
1177
  const m = ((i = d.response.headers) == null ? void 0 : i["op-should-use-new-flow"]) !== "true";
1171
- _ ? C("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : m ? (C("├ Using stripe 3DS flow"), await oa(h)) : (C("├ Using common 3DS flow"), await ra(h, t.baseUrl));
1178
+ _ ? E("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : m ? (E("├ Using stripe 3DS flow"), await oa(h)) : (E("├ Using common 3DS flow"), await ra(h, t.baseUrl));
1172
1179
  const f = h.cc_pm_id;
1173
1180
  if (c.mode === "setup") {
1174
- C(`├ Confirming payment flow [cc_pm_id: ${f}]`);
1181
+ E(`├ Confirming payment flow [cc_pm_id: ${f}]`);
1175
1182
  const y = await Q(s, {
1176
1183
  secure_token: c.token,
1177
1184
  existing_cc_pm_id: f
1178
1185
  });
1179
- C("├ Confirm payment flow result received Result:", y);
1180
- const E = Ye(y);
1181
- return C(`╰ Setup completed successfully [PM ID: ${E.payment_method_id}]`), { mode: "setup", result: E };
1186
+ E("├ Confirm payment flow result received Result:", y);
1187
+ const P = Ye(y);
1188
+ return E(`╰ Setup completed successfully [PM ID: ${P.payment_method_id}]`), { mode: "setup", result: P };
1182
1189
  } else {
1183
- C(`├ Checking out after 3DS flow [Flow: ${m ? "legacy" : "new"}]`);
1190
+ E(`├ Checking out after 3DS flow [Flow: ${m ? "legacy" : "new"}]`);
1184
1191
  const y = await kt(s, {
1185
1192
  ...u,
1186
1193
  existing_cc_pm_id: f,
1187
1194
  do_not_use_legacy_cc_flow: m
1188
1195
  });
1189
- return C("╰ Checkout completed successfully."), { mode: "checkout", result: y };
1196
+ return E("╰ Checkout completed successfully."), { mode: "checkout", result: y };
1190
1197
  }
1191
1198
  }
1192
1199
  throw At("╰ Error checking out card info in CDE"), At(d), d;
@@ -1196,7 +1203,7 @@ const ea = se(
1196
1203
  const r = t.required_user_actions.find((n) => n.type === "stripe_3ds");
1197
1204
  if (!r)
1198
1205
  throw new Error("No stripe 3DS action found");
1199
- return jr.parse(r);
1206
+ return Tr.parse(r);
1200
1207
  }, na = (t) => {
1201
1208
  const r = t.required_user_actions.find((n) => n.type === "airwallex_payment_consent");
1202
1209
  if (!r)
@@ -1205,12 +1212,12 @@ const ea = se(
1205
1212
  }, ra = async (t, r) => {
1206
1213
  const n = na(t);
1207
1214
  if (n.type === "airwallex_payment_consent" && n.redirect_url === "3DS_COMPLETE") {
1208
- C("├ Airwallex 3DS flow completed successfully");
1215
+ E("├ Airwallex 3DS flow completed successfully");
1209
1216
  return;
1210
1217
  }
1211
- C(`├ Using common 3DS flow [URL: ${n.redirect_url}]`);
1218
+ E(`├ Using common 3DS flow [URL: ${n.redirect_url}]`);
1212
1219
  const { status: o } = await He({ url: n.redirect_url, baseUrl: r });
1213
- if (C(`╰ 3DS verification completed [Status: ${o}]`), o === K.CANCELLED)
1220
+ if (E(`╰ 3DS verification completed [Status: ${o}]`), o === K.CANCELLED)
1214
1221
  throw new Error("3DS verification cancelled");
1215
1222
  if (o === K.FAILURE)
1216
1223
  throw new Error("3DS verification failed");
@@ -1225,7 +1232,7 @@ const { log__: N, err__: aa } = A("stripe-pr"), ia = e.object({
1225
1232
  metadata: e.object({
1226
1233
  stripe_pk: e.string()
1227
1234
  })
1228
- }), sa = Pe(
1235
+ }), sa = Ce(
1229
1236
  async ({ context: t, formCallbacks: r }) => {
1230
1237
  N("Checking if there are any CPMs for Stripe PR...");
1231
1238
  const n = ee(t.checkoutPaymentMethods, ia);
@@ -1246,7 +1253,7 @@ const { log__: N, err__: aa } = A("stripe-pr"), ia = e.object({
1246
1253
  const u = (d, _) => R.stripePR.run({
1247
1254
  context: t,
1248
1255
  checkoutPaymentMethod: Ue(t.checkoutPaymentMethods, d),
1249
- nonCdeFormInputs: oe(t.formDiv),
1256
+ nonCdeFormInputs: re(t.formDiv),
1250
1257
  formCallbacks: r,
1251
1258
  customParams: { provider: d, overridePaymentRequest: _ == null ? void 0 : _.overridePaymentRequest },
1252
1259
  initResult: {
@@ -1388,41 +1395,41 @@ const ma = se(
1388
1395
  frontend_token_for_redirect_flow: m
1389
1396
  },
1390
1397
  ...h
1391
- }, E = new URL("/app/pre-action/start/", t.baseUrl).toString(), w = btoa(JSON.stringify(y)), v = new URLSearchParams({
1398
+ }, P = new URL("/app/pre-action/start/", t.baseUrl).toString(), w = btoa(JSON.stringify(y)), v = new URLSearchParams({
1392
1399
  st: l.token,
1393
1400
  r: w
1394
- }), P = `${E}?${v.toString()}`;
1401
+ }), C = `${P}?${v.toString()}`;
1395
1402
  if ((s = a == null ? void 0 : a.settings) != null && s.useRedirectFlow)
1396
- throw J("Starting redirect mode for PayPal..."), window.location.href = P, await en(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
1403
+ throw J("Starting redirect mode for PayPal..."), window.location.href = C, await en(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
1397
1404
  J("Starting popup mode for PayPal..."), J("Opening paypal iframe...");
1398
1405
  const I = await qo(
1399
1406
  "PayPal",
1400
1407
  c,
1401
1408
  m,
1402
- P
1409
+ C
1403
1410
  );
1404
1411
  J("Paypal flow result", I);
1405
- const te = fn(I.href), M = Yo(I.href, "catt");
1412
+ const z = fn(I.href), M = Yo(I.href, "catt");
1406
1413
  if (!M)
1407
1414
  throw Ot("Checkout attempt ID not found in redirect URL:", I.href), new Error("Checkout attempt ID not found in redirect URL");
1408
- J(`Confirming payment flow using vault ID ${te}`);
1409
- const U = await Q(c, {
1415
+ J(`Confirming payment flow using vault ID ${z}`);
1416
+ const ae = await Q(c, {
1410
1417
  secure_token: l.token,
1411
- their_pm_id: te,
1418
+ their_pm_id: z,
1412
1419
  checkout_attempt_id: f ? M : void 0
1413
1420
  });
1414
- if (J("Confirm payment flow result", U), l.mode === "setup")
1421
+ if (J("Confirm payment flow result", ae), l.mode === "setup")
1415
1422
  return {
1416
1423
  mode: "setup",
1417
1424
  result: {
1418
- payment_method_id: U.payment_methods[0].id
1425
+ payment_method_id: ae.payment_methods[0].id
1419
1426
  }
1420
1427
  };
1421
- if (!U.pay_first_success_response)
1422
- throw Ot("Checkout failed, no pay-first success response:", U), new Error("Checkout failed, please try again with another payment method.");
1428
+ if (!ae.pay_first_success_response)
1429
+ throw Ot("Checkout failed, no pay-first success response:", ae), new Error("Checkout failed, please try again with another payment method.");
1423
1430
  return {
1424
1431
  mode: "checkout",
1425
- result: U.pay_first_success_response
1432
+ result: ae.pay_first_success_response
1426
1433
  };
1427
1434
  }
1428
1435
  ), Ze = ({
@@ -1489,7 +1496,7 @@ const vn = (t) => t === _t || t === window.location.origin ? "PRODUCTION" : "TES
1489
1496
  }, ya = (t) => {
1490
1497
  const r = t.required_user_actions.find((n) => n.type === "airwallex_payment_consent");
1491
1498
  return r ? Qt.parse(r) : null;
1492
- }, En = (t, r) => {
1499
+ }, Pn = (t, r) => {
1493
1500
  var n, o, a, i;
1494
1501
  const s = { ...t }, c = (o = (n = r.paymentMethodData) == null ? void 0 : n.info) == null ? void 0 : o.billingAddress;
1495
1502
  if (c) {
@@ -1497,7 +1504,7 @@ const vn = (t) => t === _t || t === window.location.origin ? "PRODUCTION" : "TES
1497
1504
  s[p.EMAIL] = s[p.EMAIL] || r.email || "op_unfilled@getopenpay.com", s[p.COUNTRY] = s[p.COUNTRY] || c.countryCode || "US", s[p.ADDRESS] = s[p.ADDRESS] || c.address1 || "", s[p.CITY] = s[p.CITY] || c.locality || "", s[p.ZIP_CODE] = s[p.ZIP_CODE] || c.postalCode || "00000", s[p.STATE] = s[p.STATE] || c.administrativeArea || "", s[p.FIRST_NAME] = s[p.FIRST_NAME] || l || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || d || "_OP_UNKNOWN";
1498
1505
  }
1499
1506
  return s;
1500
- }, { log__: G, err__: _e } = A("awx-google-pay"), _a = Pe(
1507
+ }, { log__: G, err__: _e } = A("awx-google-pay"), _a = Ce(
1501
1508
  async ({ context: t, formCallbacks: r }) => {
1502
1509
  var n, o;
1503
1510
  const a = {
@@ -1542,7 +1549,7 @@ const vn = (t) => t === _t || t === window.location.origin ? "PRODUCTION" : "TES
1542
1549
  R.airwallexGooglePay.run({
1543
1550
  context: t,
1544
1551
  checkoutPaymentMethod: i,
1545
- nonCdeFormInputs: oe(t.formDiv),
1552
+ nonCdeFormInputs: re(t.formDiv),
1546
1553
  formCallbacks: r,
1547
1554
  initResult: void 0,
1548
1555
  customParams: {
@@ -1574,37 +1581,37 @@ const vn = (t) => t === _t || t === window.location.origin ? "PRODUCTION" : "TES
1574
1581
  const h = ee(t.checkoutPaymentMethods, bn), { initialPreview: m, overridePaymentRequest: f } = a, y = h.metadata;
1575
1582
  if (!y.processor_account_id)
1576
1583
  throw new Error("No gateway merchant ID found in processor account");
1577
- const E = Ze({
1584
+ const P = Ze({
1578
1585
  gateway: "airwallex",
1579
1586
  gatewayMerchantId: y.processor_account_id,
1580
1587
  merchantName: y.processor_account_name,
1581
1588
  merchantId: y.google_pay_merchant_id ?? "",
1582
1589
  initialPreview: m,
1583
1590
  overridePaymentRequest: f
1584
- }), w = Be(t.baseUrl, E);
1591
+ }), w = Be(t.baseUrl, P);
1585
1592
  try {
1586
- const v = await w.loadPaymentData(E);
1593
+ const v = await w.loadPaymentData(P);
1587
1594
  G("Google Pay Payment data", v);
1588
- const P = t.anyCdeConnection, I = await L(P), te = En(n, v), M = ce(
1589
- te,
1595
+ const C = t.anyCdeConnection, I = await L(C), z = Pn(n, v), M = ce(
1596
+ z,
1590
1597
  o.get.onValidationError,
1591
1598
  a == null ? void 0 : a.defaultFieldValues
1592
- ), U = (s = (i = v.paymentMethodData) == null ? void 0 : i.tokenizationData) == null ? void 0 : s.token;
1593
- if (!U)
1599
+ ), ae = (s = (i = v.paymentMethodData) == null ? void 0 : i.tokenizationData) == null ? void 0 : s.token;
1600
+ if (!ae)
1594
1601
  throw new Error("No payment token received from Google Pay");
1595
- const Vn = await xe(P, {
1602
+ const Vn = await Re(C, {
1596
1603
  payment_provider: r.provider,
1597
1604
  checkout_payment_method: r,
1598
1605
  new_customer_email: M[p.EMAIL],
1599
1606
  new_customer_first_name: M[p.FIRST_NAME],
1600
1607
  new_customer_last_name: M[p.LAST_NAME],
1601
1608
  new_customer_address: {
1602
- postal_code: M[p.ZIP_CODE],
1603
- country_code: M[p.COUNTRY]
1609
+ zip_code: M[p.ZIP_CODE],
1610
+ country: M[p.COUNTRY]
1604
1611
  }
1605
1612
  }), et = ya(Vn);
1606
1613
  G("Start flow next actions", et);
1607
- let ue = await Q(P, {
1614
+ let ue = await Q(C, {
1608
1615
  secure_token: I.token,
1609
1616
  processor_specific_metadata: {
1610
1617
  payment_provider: r.provider,
@@ -1614,7 +1621,7 @@ const vn = (t) => t === _t || t === window.location.origin ? "PRODUCTION" : "TES
1614
1621
  type: "googlepay",
1615
1622
  googlepay: {
1616
1623
  payment_data_type: "encrypted_payment_token",
1617
- encrypted_payment_token: U
1624
+ encrypted_payment_token: ae
1618
1625
  }
1619
1626
  }
1620
1627
  }
@@ -1622,20 +1629,20 @@ const vn = (t) => t === _t || t === window.location.origin ? "PRODUCTION" : "TES
1622
1629
  G("[1st] Confirm payment flow response", ue);
1623
1630
  let tt = (l = (c = ue.payment_methods) == null ? void 0 : c[0]) == null ? void 0 : l.id;
1624
1631
  const de = (u = ue.required_user_actions) == null ? void 0 : u.find(
1625
- (ke) => ke.type === "airwallex_payment_consent"
1632
+ (Ae) => Ae.type === "airwallex_payment_consent"
1626
1633
  );
1627
1634
  if (de && de.redirect_url) {
1628
1635
  G("3DS Required, starting verification...", de);
1629
- const { status: ke } = await He({
1636
+ const { status: Ae } = await He({
1630
1637
  url: de.redirect_url,
1631
1638
  baseUrl: t.baseUrl
1632
1639
  });
1633
- if (G(`╰ 3DS verification completed [Status: ${ke}]`), ke === K.CANCELLED)
1640
+ if (G(`╰ 3DS verification completed [Status: ${Ae}]`), Ae === K.CANCELLED)
1634
1641
  throw new Error("3DS verification cancelled");
1635
- if (ke === K.FAILURE)
1642
+ if (Ae === K.FAILURE)
1636
1643
  throw new Error("3DS verification failed");
1637
1644
  }
1638
- if (de && !tt && (ue = await Q(P, {
1645
+ if (de && !tt && (ue = await Q(C, {
1639
1646
  secure_token: I.token,
1640
1647
  their_pm_id: de.their_pm_id,
1641
1648
  processor_specific_metadata: {
@@ -1646,7 +1653,7 @@ const vn = (t) => t === _t || t === window.location.origin ? "PRODUCTION" : "TES
1646
1653
  throw new Error("No PM ID found");
1647
1654
  return Ke({
1648
1655
  logPrefix: "awx-googlepay",
1649
- anyCdeConnection: P,
1656
+ anyCdeConnection: C,
1650
1657
  checkoutPaymentMethod: r,
1651
1658
  requiredFormFields: M,
1652
1659
  confirmResult: ue,
@@ -1656,7 +1663,7 @@ const vn = (t) => t === _t || t === window.location.origin ? "PRODUCTION" : "TES
1656
1663
  throw _e("Google Pay payment error", v), new Error((v == null ? void 0 : v.message) ?? "Unknown error");
1657
1664
  }
1658
1665
  }
1659
- ), Pn = () => new Promise((t, r) => {
1666
+ ), En = () => new Promise((t, r) => {
1660
1667
  const n = document.createElement("script");
1661
1668
  n.src = "https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js", n.crossOrigin = "anonymous", n.async = !0, n.onload = () => t(), n.onerror = () => r(new Error("Failed to load Apple Pay SDK")), document.body.appendChild(n);
1662
1669
  }), Cn = (t, r) => {
@@ -1738,12 +1745,8 @@ const vn = (t) => t === _t || t === window.location.origin ? "PRODUCTION" : "TES
1738
1745
  }, { log__: Me } = A("awx-apple-pay");
1739
1746
  async function wa(t, r) {
1740
1747
  try {
1741
- const n = (await xe(r.connection, {
1742
- payment_provider: r.checkoutPaymentMethod.provider,
1748
+ const n = (await dn(r.connection, {
1743
1749
  checkout_payment_method: r.checkoutPaymentMethod,
1744
- new_customer_email: r.nonCdeFormInputs[p.EMAIL],
1745
- new_customer_first_name: r.nonCdeFormInputs[p.FIRST_NAME],
1746
- new_customer_last_name: r.nonCdeFormInputs[p.LAST_NAME],
1747
1750
  processor_specific_metadata: {
1748
1751
  airwallex_payment_session: {
1749
1752
  validation_url: t.validationURL,
@@ -1751,12 +1754,10 @@ async function wa(t, r) {
1751
1754
  their_account_id: r.processorAccount.processor_account_id
1752
1755
  }
1753
1756
  }
1754
- })).required_user_actions[0], o = n.payment_session, a = n.consent_id;
1757
+ })).next_action_metadata, o = n == null ? void 0 : n.apple_pay_session;
1755
1758
  if (!o)
1756
1759
  throw new Error("No session data received from payment flow");
1757
- if (!a)
1758
- throw new Error("No consent ID received from payment flow");
1759
- return r.session.completeMerchantValidation(o), a;
1760
+ r.session.completeMerchantValidation(o);
1760
1761
  } catch (n) {
1761
1762
  throw r.session.abort(), n;
1762
1763
  }
@@ -1783,42 +1784,46 @@ async function va(t, r) {
1783
1784
  });
1784
1785
  return Me("[2nd] Confirm payment flow response", o), o;
1785
1786
  }
1786
- async function Ea(t, r, n) {
1787
- var o, a, i, s, c;
1787
+ async function Pa(t, r) {
1788
+ var n, o, a, i, s;
1788
1789
  try {
1789
- const l = t.payment, u = Cn(r.nonCdeFormInputs, l), d = ce(
1790
- u,
1790
+ const c = t.payment, l = Cn(r.nonCdeFormInputs, c), u = ce(
1791
+ l,
1791
1792
  r.formCallbacks.get.onValidationError,
1792
1793
  r.defaultFieldValues
1793
- );
1794
- await dn(r.connection, {
1795
- email: d[p.EMAIL],
1796
- first_name: d[p.FIRST_NAME],
1797
- last_name: d[p.LAST_NAME],
1798
- zip_code: d[p.ZIP_CODE],
1799
- country: d[p.COUNTRY],
1800
- update_processor_customer: !0
1801
- });
1794
+ ), d = (await Re(r.connection, {
1795
+ payment_provider: r.checkoutPaymentMethod.provider,
1796
+ checkout_payment_method: r.checkoutPaymentMethod,
1797
+ new_customer_email: u[p.EMAIL],
1798
+ new_customer_first_name: u[p.FIRST_NAME],
1799
+ new_customer_last_name: u[p.LAST_NAME],
1800
+ new_customer_address: {
1801
+ zip_code: u[p.ZIP_CODE],
1802
+ country: u[p.COUNTRY]
1803
+ }
1804
+ })).required_user_actions[0].consent_id;
1805
+ if (!d)
1806
+ throw new Error("No consent ID received from payment flow");
1802
1807
  let _ = await Q(r.connection, {
1803
1808
  secure_token: r.prefill.token,
1804
1809
  processor_specific_metadata: {
1805
1810
  payment_provider: r.checkoutPaymentMethod.provider,
1806
- airwallex_consent_id: n,
1811
+ airwallex_consent_id: d,
1807
1812
  airwallex_payment_method_data: {
1808
1813
  type: "applepay",
1809
1814
  applepay: {
1810
1815
  payment_data_type: "encrypted_payment_token",
1811
- encrypted_payment_token: JSON.stringify(l.token)
1816
+ encrypted_payment_token: JSON.stringify(c.token)
1812
1817
  }
1813
1818
  }
1814
1819
  }
1815
1820
  });
1816
1821
  Me("[1st] Confirm payment flow response", _);
1817
- let h = (a = (o = _.payment_methods) == null ? void 0 : o[0]) == null ? void 0 : a.id;
1818
- const m = (i = _.required_user_actions) == null ? void 0 : i.find(
1822
+ let h = (o = (n = _.payment_methods) == null ? void 0 : n[0]) == null ? void 0 : o.id;
1823
+ const m = (a = _.required_user_actions) == null ? void 0 : a.find(
1819
1824
  (y) => y.type === "airwallex_payment_consent"
1820
1825
  );
1821
- if (m != null && m.redirect_url && m.consent_id && m.their_pm_id && (_ = await va(m, r), h = (c = (s = _.payment_methods) == null ? void 0 : s[0]) == null ? void 0 : c.id), !h)
1826
+ if (m != null && m.redirect_url && m.consent_id && m.their_pm_id && (_ = await va(m, r), h = (s = (i = _.payment_methods) == null ? void 0 : i[0]) == null ? void 0 : s.id), !h)
1822
1827
  throw new Error("No PM ID found");
1823
1828
  const f = {
1824
1829
  status: ApplePaySession.STATUS_SUCCESS
@@ -1827,18 +1832,18 @@ async function Ea(t, r, n) {
1827
1832
  logPrefix: "awx-applepay",
1828
1833
  anyCdeConnection: r.connection,
1829
1834
  checkoutPaymentMethod: r.checkoutPaymentMethod,
1830
- requiredFormFields: d,
1835
+ requiredFormFields: u,
1831
1836
  confirmResult: _,
1832
1837
  usePayFirstFlow: !1
1833
1838
  });
1834
- } catch (l) {
1835
- const u = {
1839
+ } catch (c) {
1840
+ const l = {
1836
1841
  status: ApplePaySession.STATUS_FAILURE
1837
1842
  };
1838
- throw r.session.completePayment(u), l;
1843
+ throw r.session.completePayment(l), c;
1839
1844
  }
1840
1845
  }
1841
- const { log__: he, err__: lt } = A("awx-apple-pay"), Pa = Pe(
1846
+ const { log__: he, err__: lt } = A("awx-apple-pay"), Ea = Ce(
1842
1847
  async ({ context: t, formCallbacks: r }) => {
1843
1848
  const n = {
1844
1849
  processor: H.Enum.airwallex,
@@ -1851,7 +1856,7 @@ const { log__: he, err__: lt } = A("awx-apple-pay"), Pa = Pe(
1851
1856
  return n;
1852
1857
  he("Loading Apple Pay SDK...");
1853
1858
  try {
1854
- await Pn(), he("Apple Pay SDK loaded successfully");
1859
+ await En(), he("Apple Pay SDK loaded successfully");
1855
1860
  } catch (u) {
1856
1861
  return lt("Failed to load Apple Pay SDK", u), n;
1857
1862
  }
@@ -1866,7 +1871,7 @@ const { log__: he, err__: lt } = A("awx-apple-pay"), Pa = Pe(
1866
1871
  await R.airwallexApplePay.run({
1867
1872
  context: t,
1868
1873
  checkoutPaymentMethod: o,
1869
- nonCdeFormInputs: oe(t.formDiv),
1874
+ nonCdeFormInputs: re(t.formDiv),
1870
1875
  formCallbacks: r,
1871
1876
  customParams: {
1872
1877
  ...u,
@@ -1916,7 +1921,7 @@ const { log__: he, err__: lt } = A("awx-apple-pay"), Pa = Pe(
1916
1921
  prefill: d
1917
1922
  }),
1918
1923
  ...(c == null ? void 0 : c.applePayPaymentRequest) ?? {}
1919
- }, y = new ApplePaySession(3, f), E = {
1924
+ }, y = new ApplePaySession(3, f), P = {
1920
1925
  session: y,
1921
1926
  connection: t.anyCdeConnection,
1922
1927
  checkoutPaymentMethod: r,
@@ -1928,43 +1933,38 @@ const { log__: he, err__: lt } = A("awx-apple-pay"), Pa = Pe(
1928
1933
  formCallbacks: a,
1929
1934
  defaultFieldValues: o == null ? void 0 : o.defaultFieldValues
1930
1935
  };
1931
- let w;
1932
- return new Promise((v, P) => {
1933
- const I = () => {
1934
- he("Payment cancelled by user"), P(new Error("Payment cancelled by user"));
1935
- }, { cleanupCancelListener: te } = ba(I);
1936
- y.oncancel = I, y.onvalidatemerchant = async (M) => {
1936
+ return new Promise((w, v) => {
1937
+ const C = () => {
1938
+ he("Payment cancelled by user"), v(new Error("Payment cancelled by user"));
1939
+ }, { cleanupCancelListener: I } = ba(C);
1940
+ y.oncancel = C, y.onvalidatemerchant = async (z) => {
1937
1941
  try {
1938
- w = await wa(M, E);
1939
- } catch (U) {
1940
- P(U);
1942
+ await wa(z, P);
1943
+ } catch (M) {
1944
+ v(M);
1941
1945
  }
1942
1946
  }, y.onpaymentmethodselected = () => {
1943
- const M = {
1947
+ const z = {
1944
1948
  newTotal: { ...m }
1945
1949
  };
1946
- y.completePaymentMethodSelection(M);
1947
- }, y.onpaymentauthorized = async (M) => {
1950
+ y.completePaymentMethodSelection(z);
1951
+ }, y.onpaymentauthorized = async (z) => {
1948
1952
  try {
1949
- const U = await Ea(M, E, w);
1950
- te(), v(U);
1951
- } catch (U) {
1952
- P(U);
1953
+ const M = await Pa(z, P);
1954
+ I(), w(M);
1955
+ } catch (M) {
1956
+ v(M);
1953
1957
  }
1954
1958
  }, y.begin();
1955
- }).catch((v) => {
1956
- throw lt("Apple Pay payment error", v), v;
1959
+ }).catch((w) => {
1960
+ throw lt("Apple Pay payment error", w), w;
1957
1961
  });
1958
1962
  }
1959
1963
  );
1960
1964
  async function ka(t, r) {
1961
1965
  try {
1962
- const n = (await xe(r.connection, {
1963
- payment_provider: r.checkoutPaymentMethod.provider,
1966
+ const n = (await dn(r.connection, {
1964
1967
  checkout_payment_method: r.checkoutPaymentMethod,
1965
- new_customer_email: r.nonCdeFormInputs[p.EMAIL],
1966
- new_customer_first_name: r.nonCdeFormInputs[p.FIRST_NAME],
1967
- new_customer_last_name: r.nonCdeFormInputs[p.LAST_NAME],
1968
1968
  processor_specific_metadata: {
1969
1969
  apple_payment_session: {
1970
1970
  validation_url: t.validationURL,
@@ -1972,10 +1972,10 @@ async function ka(t, r) {
1972
1972
  their_account_id: r.processorAccount.processor_account_id
1973
1973
  }
1974
1974
  }
1975
- })).required_user_actions[0].payment_session;
1976
- if (!n)
1977
- throw new Error("No merchant session received from payment flow");
1978
- r.session.completeMerchantValidation(n);
1975
+ })).next_action_metadata, o = n == null ? void 0 : n.apple_pay_session;
1976
+ if (!o)
1977
+ throw new Error("No session data received from payment flow");
1978
+ r.session.completeMerchantValidation(o);
1979
1979
  } catch (n) {
1980
1980
  throw r.session.abort(), n;
1981
1981
  }
@@ -1984,13 +1984,16 @@ async function Sa(t, r) {
1984
1984
  var n, o;
1985
1985
  try {
1986
1986
  const a = t.payment, i = Cn(r.nonCdeFormInputs, a), s = ce(i, r.formCallbacks.get.onValidationError);
1987
- await dn(r.connection, {
1988
- email: s[p.EMAIL],
1989
- first_name: s[p.FIRST_NAME],
1990
- last_name: s[p.LAST_NAME],
1991
- zip_code: s[p.ZIP_CODE],
1992
- country: s[p.COUNTRY],
1993
- update_processor_customer: !0
1987
+ await Re(r.connection, {
1988
+ payment_provider: r.checkoutPaymentMethod.provider,
1989
+ checkout_payment_method: r.checkoutPaymentMethod,
1990
+ new_customer_email: s[p.EMAIL],
1991
+ new_customer_first_name: s[p.FIRST_NAME],
1992
+ new_customer_last_name: s[p.LAST_NAME],
1993
+ new_customer_address: {
1994
+ zip_code: s[p.ZIP_CODE],
1995
+ country: s[p.COUNTRY]
1996
+ }
1994
1997
  });
1995
1998
  const c = {
1996
1999
  dataDescriptor: "COMMON.APPLE.INAPP.PAYMENT",
@@ -2037,7 +2040,7 @@ const An = e.object({
2037
2040
  processor_account_name: e.string(),
2038
2041
  google_pay_merchant_id: e.string().nullish()
2039
2042
  })
2040
- }), { log__: Se, err__: ut } = A("authnet-applepay"), Aa = Pe(
2043
+ }), { log__: Ie, err__: ut } = A("authnet-applepay"), Aa = Ce(
2041
2044
  async ({ context: t, formCallbacks: r }) => {
2042
2045
  const n = {
2043
2046
  processor: H.Enum.authorize_net,
@@ -2048,16 +2051,16 @@ const An = e.object({
2048
2051
  }, o = ee(t.checkoutPaymentMethods, An);
2049
2052
  if (!o)
2050
2053
  return n;
2051
- Se("Loading Apple Pay SDK...");
2054
+ Ie("Loading Apple Pay SDK...");
2052
2055
  try {
2053
- await Pn(), Se("Apple Pay SDK loaded successfully");
2056
+ await En(), Ie("Apple Pay SDK loaded successfully");
2054
2057
  } catch (u) {
2055
2058
  return ut("Failed to load Apple Pay SDK", u), n;
2056
2059
  }
2057
2060
  if (!window.ApplePaySession || !ApplePaySession.canMakePayments())
2058
- return Se("Apple Pay is not available on this device/browser"), n;
2061
+ return Ie("Apple Pay is not available on this device/browser"), n;
2059
2062
  if (!await ApplePaySession.canMakePayments())
2060
- return Se("No active cards available for Apple Pay"), n;
2063
+ return Ie("No active cards available for Apple Pay"), n;
2061
2064
  if (!o.metadata.processor_account_id)
2062
2065
  throw new Error("No gateway merchant ID found in processor account");
2063
2066
  const a = t.anyCdeConnection, i = await L(a), s = i.mode === "setup", c = await Ee(a, i.token, s, void 0), l = async (u) => {
@@ -2065,7 +2068,7 @@ const An = e.object({
2065
2068
  await R.authorizeNetApplePay.run({
2066
2069
  context: t,
2067
2070
  checkoutPaymentMethod: o,
2068
- nonCdeFormInputs: oe(t.formDiv),
2071
+ nonCdeFormInputs: re(t.formDiv),
2069
2072
  formCallbacks: r,
2070
2073
  customParams: {
2071
2074
  ...u,
@@ -2110,7 +2113,7 @@ const An = e.object({
2110
2113
  prefill: h
2111
2114
  }),
2112
2115
  ...(c == null ? void 0 : c.applePayPaymentRequest) ?? {}
2113
- }, y = new ApplePaySession(3, f), E = {
2116
+ }, y = new ApplePaySession(3, f), P = {
2114
2117
  session: y,
2115
2118
  connection: t.anyCdeConnection,
2116
2119
  checkoutPaymentMethod: r,
@@ -2123,21 +2126,21 @@ const An = e.object({
2123
2126
  };
2124
2127
  return new Promise((w, v) => {
2125
2128
  y.oncancel = () => {
2126
- Se("Payment cancelled by user"), v(new Error("Payment cancelled by user"));
2127
- }, y.onvalidatemerchant = async (P) => {
2129
+ Ie("Payment cancelled by user"), v(new Error("Payment cancelled by user"));
2130
+ }, y.onvalidatemerchant = async (C) => {
2128
2131
  try {
2129
- await ka(P, E);
2132
+ await ka(C, P);
2130
2133
  } catch (I) {
2131
2134
  v(I);
2132
2135
  }
2133
2136
  }, y.onpaymentmethodselected = () => {
2134
- const P = {
2137
+ const C = {
2135
2138
  newTotal: f.total
2136
2139
  };
2137
- y.completePaymentMethodSelection(P);
2138
- }, y.onpaymentauthorized = async (P) => {
2140
+ y.completePaymentMethodSelection(C);
2141
+ }, y.onpaymentauthorized = async (C) => {
2139
2142
  try {
2140
- const I = await Sa(P, E);
2143
+ const I = await Sa(C, P);
2141
2144
  w(I);
2142
2145
  } catch (I) {
2143
2146
  v(I);
@@ -2147,7 +2150,7 @@ const An = e.object({
2147
2150
  throw ut("Apple Pay payment error", w), w;
2148
2151
  });
2149
2152
  }
2150
- ), { log__: me, err__: Ae } = A("authnet-googlepay"), Oa = Pe(
2153
+ ), { log__: me, err__: Oe } = A("authnet-googlepay"), Oa = Ce(
2151
2154
  async ({ context: t, formCallbacks: r }) => {
2152
2155
  var n, o;
2153
2156
  me("Initializing Authnet GooglePay flow");
@@ -2163,9 +2166,9 @@ const An = e.object({
2163
2166
  me("Google Pay CPM", i);
2164
2167
  const s = i.metadata;
2165
2168
  if (!s.processor_account_id)
2166
- return Ae("No gateway merchant ID found in processor account"), a;
2169
+ return Oe("No gateway merchant ID found in processor account"), a;
2167
2170
  if (me("Loading Google Pay SDK..."), await wn(), !((o = (n = window.google) == null ? void 0 : n.payments) != null && o.api))
2168
- return Ae("Google Pay SDK not loaded properly"), a;
2171
+ return Oe("Google Pay SDK not loaded properly"), a;
2169
2172
  me("Google Pay SDK loaded", window.google.payments);
2170
2173
  try {
2171
2174
  const h = Ze({
@@ -2184,14 +2187,14 @@ const An = e.object({
2184
2187
  if (!m)
2185
2188
  return me("Google Pay is not available for this user"), a;
2186
2189
  } catch (h) {
2187
- return Ae("Error checking Google Pay availability", h), a;
2190
+ return Oe("Error checking Google Pay availability", h), a;
2188
2191
  }
2189
2192
  const c = t.anyCdeConnection, l = await L(c), u = l.mode === "setup", d = await Ee(c, l.token, u, void 0), _ = async (h) => {
2190
2193
  try {
2191
2194
  R.authorizeNetGooglePay.run({
2192
2195
  context: t,
2193
2196
  checkoutPaymentMethod: i,
2194
- nonCdeFormInputs: oe(t.formDiv),
2197
+ nonCdeFormInputs: re(t.formDiv),
2195
2198
  formCallbacks: r,
2196
2199
  initResult: void 0,
2197
2200
  customParams: {
@@ -2200,7 +2203,7 @@ const An = e.object({
2200
2203
  }
2201
2204
  });
2202
2205
  } catch (m) {
2203
- Ae("Google Pay payment error", m), r.get.onCheckoutError((m == null ? void 0 : m.message) ?? "Unknown error");
2206
+ Oe("Google Pay payment error", m), r.get.onCheckoutError((m == null ? void 0 : m.message) ?? "Unknown error");
2204
2207
  }
2205
2208
  };
2206
2209
  return {
@@ -2230,43 +2233,43 @@ const An = e.object({
2230
2233
  try {
2231
2234
  const f = await m.loadPaymentData(h);
2232
2235
  me("Google Pay Payment data", f);
2233
- const y = t.anyCdeConnection, E = await L(y), w = En(r, f), v = ce(w, o.get.onValidationError), P = (s = (i = f.paymentMethodData) == null ? void 0 : i.tokenizationData) == null ? void 0 : s.token;
2234
- if (!P)
2236
+ const y = t.anyCdeConnection, P = await L(y), w = Pn(r, f), v = ce(w, o.get.onValidationError), C = (s = (i = f.paymentMethodData) == null ? void 0 : i.tokenizationData) == null ? void 0 : s.token;
2237
+ if (!C)
2235
2238
  throw new Error("No payment token received from Google Pay");
2236
- const I = await xe(y, {
2239
+ const I = await Re(y, {
2237
2240
  payment_provider: n.provider,
2238
2241
  checkout_payment_method: n,
2239
2242
  new_customer_email: v[p.EMAIL],
2240
2243
  new_customer_first_name: v[p.FIRST_NAME],
2241
2244
  new_customer_last_name: v[p.LAST_NAME],
2242
2245
  new_customer_address: {
2243
- postal_code: v[p.ZIP_CODE],
2244
- country_code: v[p.COUNTRY]
2246
+ zip_code: v[p.ZIP_CODE],
2247
+ country: v[p.COUNTRY]
2245
2248
  }
2246
2249
  });
2247
2250
  me("Start payment flow response", I);
2248
- const te = await Q(y, {
2249
- secure_token: E.token,
2251
+ const z = await Q(y, {
2252
+ secure_token: P.token,
2250
2253
  processor_specific_metadata: {
2251
2254
  payment_provider: n.provider,
2252
2255
  mobile_wallet_payment_data: {
2253
2256
  dataDescriptor: "COMMON.GOOGLE.INAPP.PAYMENT",
2254
- dataValue: window.btoa(P)
2257
+ dataValue: window.btoa(C)
2255
2258
  }
2256
2259
  }
2257
2260
  });
2258
- if (!((l = (c = te.payment_methods) == null ? void 0 : c[0]) != null && l.id))
2261
+ if (!((l = (c = z.payment_methods) == null ? void 0 : c[0]) != null && l.id))
2259
2262
  throw new Error("No PM ID found");
2260
2263
  return Ke({
2261
2264
  logPrefix: "authnet-googlepay",
2262
2265
  anyCdeConnection: y,
2263
2266
  checkoutPaymentMethod: n,
2264
2267
  requiredFormFields: v,
2265
- confirmResult: te,
2268
+ confirmResult: z,
2266
2269
  usePayFirstFlow: !1
2267
2270
  });
2268
2271
  } catch (f) {
2269
- throw Ae("Google Pay payment error", f), new Error((f == null ? void 0 : f.message) ?? "Unknown error");
2272
+ throw Oe("Google Pay payment error", f), new Error((f == null ? void 0 : f.message) ?? "Unknown error");
2270
2273
  }
2271
2274
  }
2272
2275
  ), Ue = (t, r, n) => {
@@ -2293,8 +2296,8 @@ const An = e.object({
2293
2296
  run: ca
2294
2297
  },
2295
2298
  stripeLink: {
2296
- init: To,
2297
- run: jo
2299
+ init: jo,
2300
+ run: To
2298
2301
  },
2299
2302
  // Pockyt
2300
2303
  pockytPaypal: {
@@ -2306,7 +2309,7 @@ const An = e.object({
2306
2309
  run: ha
2307
2310
  },
2308
2311
  airwallexApplePay: {
2309
- init: Pa,
2312
+ init: Ea,
2310
2313
  run: Ca
2311
2314
  },
2312
2315
  authorizeNetApplePay: {
@@ -2458,7 +2461,7 @@ function ze(t, r, n) {
2458
2461
  function we(t) {
2459
2462
  return this instanceof we ? (this.v = t, this) : new we(t);
2460
2463
  }
2461
- function Ta(t, r, n) {
2464
+ function ja(t, r, n) {
2462
2465
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
2463
2466
  var o = n.apply(t, r || []), a, i = [];
2464
2467
  return a = Object.create((typeof AsyncIterator == "function" ? AsyncIterator : Object).prototype), c("next"), c("throw"), c("return", s), a[Symbol.asyncIterator] = function() {
@@ -2471,8 +2474,8 @@ function Ta(t, r, n) {
2471
2474
  }
2472
2475
  function c(m, f) {
2473
2476
  o[m] && (a[m] = function(y) {
2474
- return new Promise(function(E, w) {
2475
- i.push([m, y, E, w]) > 1 || l(m, y);
2477
+ return new Promise(function(P, w) {
2478
+ i.push([m, y, P, w]) > 1 || l(m, y);
2476
2479
  });
2477
2480
  }, f && (a[m] = f(a[m])));
2478
2481
  }
@@ -2496,7 +2499,7 @@ function Ta(t, r, n) {
2496
2499
  m(f), i.shift(), i.length && l(i[0][0], i[0][1]);
2497
2500
  }
2498
2501
  }
2499
- function ja(t) {
2502
+ function Ta(t) {
2500
2503
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
2501
2504
  var r = t[Symbol.asyncIterator], n;
2502
2505
  return r ? r.call(t) : (t = typeof ve == "function" ? ve(t) : t[Symbol.iterator](), n = {}, o("next"), o("throw"), o("return"), n[Symbol.asyncIterator] = function() {
@@ -2539,7 +2542,7 @@ function qe(t, r) {
2539
2542
  0 <= n && t.splice(n, 1);
2540
2543
  }
2541
2544
  }
2542
- var Re = function() {
2545
+ var je = function() {
2543
2546
  function t(r) {
2544
2547
  this.initialTeardown = r, this.closed = !1, this._parentage = null, this._finalizers = null;
2545
2548
  }
@@ -2627,14 +2630,14 @@ var Re = function() {
2627
2630
  var r = new t();
2628
2631
  return r.closed = !0, r;
2629
2632
  }(), t;
2630
- }(), xn = Re.EMPTY;
2633
+ }(), xn = je.EMPTY;
2631
2634
  function Rn(t) {
2632
- return t instanceof Re || t && "closed" in t && x(t.remove) && x(t.add) && x(t.unsubscribe);
2635
+ return t instanceof je || t && "closed" in t && x(t.remove) && x(t.add) && x(t.unsubscribe);
2633
2636
  }
2634
2637
  function xt(t) {
2635
2638
  x(t) ? t() : t.unsubscribe();
2636
2639
  }
2637
- var Tn = {
2640
+ var jn = {
2638
2641
  onUnhandledError: null,
2639
2642
  onStoppedNotification: null,
2640
2643
  Promise: void 0,
@@ -2651,7 +2654,7 @@ var Tn = {
2651
2654
  },
2652
2655
  delegate: void 0
2653
2656
  };
2654
- function jn(t) {
2657
+ function Tn(t) {
2655
2658
  Ma.setTimeout(function() {
2656
2659
  throw t;
2657
2660
  });
@@ -2692,7 +2695,7 @@ var wt = function(t) {
2692
2695
  this.unsubscribe();
2693
2696
  }
2694
2697
  }, r;
2695
- }(Re), Na = Function.prototype.bind;
2698
+ }(je), Na = Function.prototype.bind;
2696
2699
  function it(t, r) {
2697
2700
  return Na.call(t, r);
2698
2701
  }
@@ -2706,7 +2709,7 @@ var Da = function() {
2706
2709
  try {
2707
2710
  n.next(r);
2708
2711
  } catch (o) {
2709
- je(o);
2712
+ Te(o);
2710
2713
  }
2711
2714
  }, t.prototype.error = function(r) {
2712
2715
  var n = this.partialObserver;
@@ -2714,17 +2717,17 @@ var Da = function() {
2714
2717
  try {
2715
2718
  n.error(r);
2716
2719
  } catch (o) {
2717
- je(o);
2720
+ Te(o);
2718
2721
  }
2719
2722
  else
2720
- je(r);
2723
+ Te(r);
2721
2724
  }, t.prototype.complete = function() {
2722
2725
  var r = this.partialObserver;
2723
2726
  if (r.complete)
2724
2727
  try {
2725
2728
  r.complete();
2726
2729
  } catch (n) {
2727
- je(n);
2730
+ Te(n);
2728
2731
  }
2729
2732
  }, t;
2730
2733
  }(), pt = function(t) {
@@ -2739,7 +2742,7 @@ var Da = function() {
2739
2742
  };
2740
2743
  else {
2741
2744
  var c;
2742
- i && Tn.useDeprecatedNextContext ? (c = Object.create(n), c.unsubscribe = function() {
2745
+ i && jn.useDeprecatedNextContext ? (c = Object.create(n), c.unsubscribe = function() {
2743
2746
  return i.unsubscribe();
2744
2747
  }, s = {
2745
2748
  next: n.next && it(n.next, c),
@@ -2751,8 +2754,8 @@ var Da = function() {
2751
2754
  }
2752
2755
  return r;
2753
2756
  }(wt);
2754
- function je(t) {
2755
- jn(t);
2757
+ function Te(t) {
2758
+ Tn(t);
2756
2759
  }
2757
2760
  function La(t) {
2758
2761
  throw t;
@@ -2775,7 +2778,7 @@ function za(t) {
2775
2778
  }, r);
2776
2779
  };
2777
2780
  }
2778
- var ae = function() {
2781
+ var oe = function() {
2779
2782
  function t(r) {
2780
2783
  r && (this._subscribe = r);
2781
2784
  }
@@ -2796,7 +2799,7 @@ var ae = function() {
2796
2799
  }
2797
2800
  }, t.prototype.forEach = function(r, n) {
2798
2801
  var o = this;
2799
- return n = Tt(n), new n(function(a, i) {
2802
+ return n = jt(n), new n(function(a, i) {
2800
2803
  var s = new pt({
2801
2804
  next: function(c) {
2802
2805
  try {
@@ -2821,7 +2824,7 @@ var ae = function() {
2821
2824
  return za(r)(this);
2822
2825
  }, t.prototype.toPromise = function(r) {
2823
2826
  var n = this;
2824
- return r = Tt(r), new r(function(o, a) {
2827
+ return r = jt(r), new r(function(o, a) {
2825
2828
  var i;
2826
2829
  n.subscribe(function(s) {
2827
2830
  return i = s;
@@ -2835,9 +2838,9 @@ var ae = function() {
2835
2838
  return new t(r);
2836
2839
  }, t;
2837
2840
  }();
2838
- function Tt(t) {
2841
+ function jt(t) {
2839
2842
  var r;
2840
- return (r = t ?? Tn.Promise) !== null && r !== void 0 ? r : Promise;
2843
+ return (r = t ?? jn.Promise) !== null && r !== void 0 ? r : Promise;
2841
2844
  }
2842
2845
  function qa(t) {
2843
2846
  return t && x(t.next) && x(t.error) && x(t.complete);
@@ -2910,7 +2913,7 @@ var Ka = function(t) {
2910
2913
  return n.closed = !1, n.currentObservers = null, n.observers = [], n.isStopped = !1, n.hasError = !1, n.thrownError = null, n;
2911
2914
  }
2912
2915
  return r.prototype.lift = function(n) {
2913
- var o = new jt(this, this);
2916
+ var o = new Tt(this, this);
2914
2917
  return o.operator = n, o;
2915
2918
  }, r.prototype._throwIfClosed = function() {
2916
2919
  if (this.closed)
@@ -2970,19 +2973,19 @@ var Ka = function(t) {
2970
2973
  return this._throwIfClosed(), this._checkFinalizedStatuses(n), this._innerSubscribe(n);
2971
2974
  }, r.prototype._innerSubscribe = function(n) {
2972
2975
  var o = this, a = this, i = a.hasError, s = a.isStopped, c = a.observers;
2973
- return i || s ? xn : (this.currentObservers = null, c.push(n), new Re(function() {
2976
+ return i || s ? xn : (this.currentObservers = null, c.push(n), new je(function() {
2974
2977
  o.currentObservers = null, qe(c, n);
2975
2978
  }));
2976
2979
  }, r.prototype._checkFinalizedStatuses = function(n) {
2977
2980
  var o = this, a = o.hasError, i = o.thrownError, s = o.isStopped;
2978
2981
  a ? n.error(i) : s && n.complete();
2979
2982
  }, r.prototype.asObservable = function() {
2980
- var n = new ae();
2983
+ var n = new oe();
2981
2984
  return n.source = this, n;
2982
2985
  }, r.create = function(n, o) {
2983
- return new jt(n, o);
2986
+ return new Tt(n, o);
2984
2987
  }, r;
2985
- }(ae), jt = function(t) {
2988
+ }(oe), Tt = function(t) {
2986
2989
  le(r, t);
2987
2990
  function r(n, o) {
2988
2991
  var a = t.call(this) || this;
@@ -3014,7 +3017,7 @@ var Ka = function(t) {
3014
3017
  return r.prototype.schedule = function(n, o) {
3015
3018
  return this;
3016
3019
  }, r;
3017
- }(Re), Mt = {
3020
+ }(je), Mt = {
3018
3021
  setInterval: function(t, r) {
3019
3022
  for (var n = [], o = 2; o < arguments.length; o++)
3020
3023
  n[o - 2] = arguments[o];
@@ -3121,7 +3124,7 @@ function ii(t) {
3121
3124
  return x(t == null ? void 0 : t[ai]);
3122
3125
  }
3123
3126
  function si(t) {
3124
- return Ta(this, arguments, function() {
3127
+ return ja(this, arguments, function() {
3125
3128
  var r, n, o, a;
3126
3129
  return On(this, function(i) {
3127
3130
  switch (i.label) {
@@ -3155,7 +3158,7 @@ function ci(t) {
3155
3158
  return x(t == null ? void 0 : t.getReader);
3156
3159
  }
3157
3160
  function li(t) {
3158
- if (t instanceof ae)
3161
+ if (t instanceof oe)
3159
3162
  return t;
3160
3163
  if (t != null) {
3161
3164
  if (ti(t))
@@ -3174,7 +3177,7 @@ function li(t) {
3174
3177
  throw ri(t);
3175
3178
  }
3176
3179
  function ui(t) {
3177
- return new ae(function(r) {
3180
+ return new oe(function(r) {
3178
3181
  var n = t[vt]();
3179
3182
  if (x(n.subscribe))
3180
3183
  return n.subscribe(r);
@@ -3182,23 +3185,23 @@ function ui(t) {
3182
3185
  });
3183
3186
  }
3184
3187
  function di(t) {
3185
- return new ae(function(r) {
3188
+ return new oe(function(r) {
3186
3189
  for (var n = 0; n < t.length && !r.closed; n++)
3187
3190
  r.next(t[n]);
3188
3191
  r.complete();
3189
3192
  });
3190
3193
  }
3191
3194
  function pi(t) {
3192
- return new ae(function(r) {
3195
+ return new oe(function(r) {
3193
3196
  t.then(function(n) {
3194
3197
  r.closed || (r.next(n), r.complete());
3195
3198
  }, function(n) {
3196
3199
  return r.error(n);
3197
- }).then(null, jn);
3200
+ }).then(null, Tn);
3198
3201
  });
3199
3202
  }
3200
3203
  function mi(t) {
3201
- return new ae(function(r) {
3204
+ return new oe(function(r) {
3202
3205
  var n, o;
3203
3206
  try {
3204
3207
  for (var a = ve(t), i = a.next(); !i.done; i = a.next()) {
@@ -3219,7 +3222,7 @@ function mi(t) {
3219
3222
  });
3220
3223
  }
3221
3224
  function Nn(t) {
3222
- return new ae(function(r) {
3225
+ return new oe(function(r) {
3223
3226
  _i(t, r).catch(function(n) {
3224
3227
  return r.error(n);
3225
3228
  });
@@ -3235,7 +3238,7 @@ function _i(t, r) {
3235
3238
  return On(this, function(l) {
3236
3239
  switch (l.label) {
3237
3240
  case 0:
3238
- l.trys.push([0, 5, 6, 11]), n = ja(t), l.label = 1;
3241
+ l.trys.push([0, 5, 6, 11]), n = Ta(t), l.label = 1;
3239
3242
  case 1:
3240
3243
  return [4, n.next()];
3241
3244
  case 2:
@@ -3280,7 +3283,7 @@ function fi(t, r) {
3280
3283
  }, o = function(a) {
3281
3284
  return a.error(n());
3282
3285
  };
3283
- return new ae(o);
3286
+ return new oe(o);
3284
3287
  }
3285
3288
  var gi = Je(function(t) {
3286
3289
  return function() {
@@ -3309,32 +3312,32 @@ var vi = Je(function(t) {
3309
3312
  r === void 0 && (r = null), t(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this.info = r;
3310
3313
  };
3311
3314
  });
3312
- function Ei(t, r) {
3313
- var n = wi(t) ? { first: t } : typeof t == "number" ? { each: t } : t, o = n.first, a = n.each, i = n.with, s = i === void 0 ? Pi : i, c = n.scheduler, l = c === void 0 ? Xa : c, u = n.meta, d = u === void 0 ? null : u;
3315
+ function Pi(t, r) {
3316
+ var n = wi(t) ? { first: t } : typeof t == "number" ? { each: t } : t, o = n.first, a = n.each, i = n.with, s = i === void 0 ? Ei : i, c = n.scheduler, l = c === void 0 ? Xa : c, u = n.meta, d = u === void 0 ? null : u;
3314
3317
  if (o == null && a == null)
3315
3318
  throw new TypeError("No timeout provided.");
3316
3319
  return Ga(function(_, h) {
3317
- var m, f, y = null, E = 0, w = function(v) {
3320
+ var m, f, y = null, P = 0, w = function(v) {
3318
3321
  f = hi(h, l, function() {
3319
3322
  try {
3320
3323
  m.unsubscribe(), li(s({
3321
3324
  meta: d,
3322
3325
  lastValue: y,
3323
- seen: E
3326
+ seen: P
3324
3327
  })).subscribe(h);
3325
- } catch (P) {
3326
- h.error(P);
3328
+ } catch (C) {
3329
+ h.error(C);
3327
3330
  }
3328
3331
  }, v);
3329
3332
  };
3330
3333
  m = _.subscribe(Ya(h, function(v) {
3331
- f == null || f.unsubscribe(), E++, h.next(y = v), a > 0 && w(a);
3334
+ f == null || f.unsubscribe(), P++, h.next(y = v), a > 0 && w(a);
3332
3335
  }, void 0, void 0, function() {
3333
3336
  f != null && f.closed || f == null || f.unsubscribe(), y = null;
3334
- })), !E && w(o != null ? typeof o == "number" ? o : +o - l.now() : a);
3337
+ })), !P && w(o != null ? typeof o == "number" ? o : +o - l.now() : a);
3335
3338
  });
3336
3339
  }
3337
- function Pi(t) {
3340
+ function Ei(t) {
3338
3341
  throw new vi(t);
3339
3342
  }
3340
3343
  class De {
@@ -3373,7 +3376,7 @@ class De {
3373
3376
  first: r.timeoutSec * 1e3,
3374
3377
  with: () => fi(() => new Error(r.timeoutErrMsg))
3375
3378
  };
3376
- return bi(this._subject.pipe(Ei(n)));
3379
+ return bi(this._subject.pipe(Pi(n)));
3377
3380
  }, this._current = { status: "initial", isSuccess: !1 }, this._subject = new Mn();
3378
3381
  }
3379
3382
  get current() {
@@ -3506,7 +3509,7 @@ async function Ri(t, r) {
3506
3509
  throw new Error("Got invalid CDE connection object");
3507
3510
  return n;
3508
3511
  }
3509
- class Ti {
3512
+ class ji {
3510
3513
  constructor() {
3511
3514
  this.connections = /* @__PURE__ */ new Map();
3512
3515
  }
@@ -3523,7 +3526,7 @@ class Ti {
3523
3526
  return this.connections;
3524
3527
  }
3525
3528
  }
3526
- const ji = (t, r, n) => {
3529
+ const Ti = (t, r, n) => {
3527
3530
  const { stripePR: o } = t;
3528
3531
  o.publisher.subscribe((a) => {
3529
3532
  if (a.isSuccess) {
@@ -3549,35 +3552,35 @@ const ji = (t, r, n) => {
3549
3552
  }, Ut = (t, r, n, o, a) => R.stripePR.run({
3550
3553
  context: n,
3551
3554
  checkoutPaymentMethod: Ue(n.checkoutPaymentMethods, t),
3552
- nonCdeFormInputs: oe(n.formDiv),
3555
+ nonCdeFormInputs: re(n.formDiv),
3553
3556
  formCallbacks: o,
3554
3557
  customParams: { provider: t, overridePaymentRequest: a == null ? void 0 : a.overridePaymentRequest },
3555
3558
  initResult: r
3556
- }), Ft = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: ne, err__: re } = A("op-form"), ge = class mt {
3559
+ }), Ft = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: te, err__: ne } = A("op-form"), ge = class mt {
3557
3560
  constructor(r) {
3558
3561
  this.cdeLoadEvent = new De(), this.anyCdeConn = new De(), this.context = new De(), this.initFlows = Ai(), this.startFormInit = async () => {
3559
3562
  try {
3560
- ne("Initializing OpenPay form:"), ne("├ Waiting for CDE load event...");
3563
+ te("Initializing OpenPay form:"), te("├ Waiting for CDE load event...");
3561
3564
  const n = await this.cdeLoadEvent.waitForLoad({
3562
3565
  timeoutSec: 120,
3563
3566
  timeoutErrMsg: Ft
3564
3567
  });
3565
- ne("├ CDE load event received"), ne("├ Waiting for CDE connection...");
3568
+ te("├ CDE load event received"), te("├ Waiting for CDE connection...");
3566
3569
  const o = await this.anyCdeConn.waitForLoad({
3567
3570
  timeoutSec: 120,
3568
3571
  timeoutErrMsg: Ft
3569
3572
  });
3570
- ne("├ CDE connection received"), ne("├ Creating OJS context, setting up handlers...");
3573
+ te("├ CDE connection received"), te("├ Creating OJS context, setting up handlers...");
3571
3574
  const a = mt.buildOjsFlowContext(
3572
3575
  this.config,
3573
3576
  n,
3574
3577
  o,
3575
3578
  this.getFormDiv()
3576
3579
  );
3577
- this.context.set(a), ji(this.initFlows, a, this.formCallbacks), ne("├ Starting OJS init flows..."), await Si(this.initFlows, a, this.formCallbacks), this.formCallbacks.get.onLoad(n.totalAmountAtoms, n.currency), ne("╰ Done initializing OJS flows.");
3580
+ this.context.set(a), Ti(this.initFlows, a, this.formCallbacks), te("├ Starting OJS init flows..."), await Si(this.initFlows, a, this.formCallbacks), this.formCallbacks.get.onLoad(n.totalAmountAtoms, n.currency), te("╰ Done initializing OJS flows.");
3578
3581
  } catch (n) {
3579
3582
  const o = X(n);
3580
- re("╰ Error initializing OP form:", o), this.formCallbacks.get.onLoadError(o);
3583
+ ne("╰ Error initializing OP form:", o), this.formCallbacks.get.onLoadError(o);
3581
3584
  }
3582
3585
  }, this.setFormHeight = (n) => {
3583
3586
  this.formProperties.height = n, this.registeredElements && Object.values(this.registeredElements).forEach((o) => {
@@ -3614,17 +3617,17 @@ const ji = (t, r, n) => {
3614
3617
  }, this.connectToElement = (n) => {
3615
3618
  Ri(n.node).then((o) => {
3616
3619
  this.connectionManager.addConnection(n.type, o), this.anyCdeConn.current.isSuccess || this.anyCdeConn.set(o);
3617
- }).catch((o) => re("[FORM] Error connecting to CDE iframe", o));
3620
+ }).catch((o) => ne("[FORM] Error connecting to CDE iframe", o));
3618
3621
  }, this.getFormDiv = () => document.querySelector(this.formTarget) ?? document.body, this.submitCard = () => {
3619
3622
  const n = this.context.getValueIfLoadedElse(null);
3620
3623
  if (!n) {
3621
- re("Please wait for the form to finish loading before submitting.");
3624
+ ne("Please wait for the form to finish loading before submitting.");
3622
3625
  return;
3623
3626
  }
3624
3627
  R.commonCC.run({
3625
3628
  context: n,
3626
3629
  checkoutPaymentMethod: Ue(n.checkoutPaymentMethods, "credit_card"),
3627
- nonCdeFormInputs: oe(n.formDiv),
3630
+ nonCdeFormInputs: re(n.formDiv),
3628
3631
  formCallbacks: this.formCallbacks,
3629
3632
  customParams: {
3630
3633
  currentCdeConnections: this.connectionManager.getAllConnections()
@@ -3634,7 +3637,7 @@ const ji = (t, r, n) => {
3634
3637
  });
3635
3638
  }, this.getAvailablePaymentMethods = () => {
3636
3639
  if (!this.context.getValueIfLoadedElse(null)) {
3637
- re("Please wait for the form to finish loading before getting available payment methods.");
3640
+ ne("Please wait for the form to finish loading before getting available payment methods.");
3638
3641
  return;
3639
3642
  }
3640
3643
  const n = {
@@ -3650,7 +3653,7 @@ const ji = (t, r, n) => {
3650
3653
  }, this.generalSubmit = (n, o) => {
3651
3654
  const a = this.context.getValueIfLoadedElse(null);
3652
3655
  if (!a) {
3653
- re("Please wait for the form to finish loading before submitting.");
3656
+ ne("Please wait for the form to finish loading before submitting.");
3654
3657
  return;
3655
3658
  }
3656
3659
  switch (n) {
@@ -3658,7 +3661,7 @@ const ji = (t, r, n) => {
3658
3661
  return R.pockytPaypal.run({
3659
3662
  context: a,
3660
3663
  checkoutPaymentMethod: Ue(a.checkoutPaymentMethods, "paypal", "pockyt"),
3661
- nonCdeFormInputs: oe(a.formDiv),
3664
+ nonCdeFormInputs: re(a.formDiv),
3662
3665
  formCallbacks: this.formCallbacks,
3663
3666
  customParams: { settings: o },
3664
3667
  initResult: void 0
@@ -3666,7 +3669,7 @@ const ji = (t, r, n) => {
3666
3669
  case V.airwallexGooglePay: {
3667
3670
  const i = this.initFlows.airwallexGooglePay.publisher.getValueIfLoadedElse(null);
3668
3671
  if (!i) {
3669
- re(
3672
+ ne(
3670
3673
  "airwallex-google-pay is not available. Please check the availability using 'getAvailablePaymentMethods()'"
3671
3674
  );
3672
3675
  return;
@@ -3676,7 +3679,7 @@ const ji = (t, r, n) => {
3676
3679
  case V.airwallexApplePay: {
3677
3680
  const i = this.initFlows.airwallexApplePay.publisher.getValueIfLoadedElse(null);
3678
3681
  if (!i) {
3679
- re(
3682
+ ne(
3680
3683
  "airwallex-apple-pay is not available. Please check the availability using 'getAvailablePaymentMethods()'"
3681
3684
  );
3682
3685
  return;
@@ -3686,7 +3689,7 @@ const ji = (t, r, n) => {
3686
3689
  case V.authorizenetGooglePay: {
3687
3690
  const i = this.initFlows.authorizeNetGooglePay.publisher.getValueIfLoadedElse(null);
3688
3691
  if (!i) {
3689
- re(
3692
+ ne(
3690
3693
  "authorize-net-google-pay is not available. Please check the availability using 'getAvailablePaymentMethods()'"
3691
3694
  );
3692
3695
  return;
@@ -3696,7 +3699,7 @@ const ji = (t, r, n) => {
3696
3699
  case V.authorizenetApplePay: {
3697
3700
  const i = this.initFlows.authorizeNetApplePay.publisher.getValueIfLoadedElse(null);
3698
3701
  if (!i) {
3699
- re(
3702
+ ne(
3700
3703
  "authorize-net-apple-pay is not available. Please check the availability using 'getAvailablePaymentMethods()'"
3701
3704
  );
3702
3705
  return;
@@ -3707,13 +3710,13 @@ const ji = (t, r, n) => {
3707
3710
  gt(n);
3708
3711
  }
3709
3712
  }, this.submit = this.submitCard, this.destroy = () => {
3710
- ne("Destroying OpenPay form...");
3713
+ te("Destroying OpenPay form...");
3711
3714
  for (const n of Object.values(this.registeredElements ?? {}))
3712
3715
  n && n.node.remove();
3713
3716
  window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.registeredElements = null, delete window.ojs;
3714
3717
  }, this.updateCallbacks = (n) => {
3715
3718
  this.formCallbacks.setCallbacks(n);
3716
- }, mt.assignAsSingleton(this), this.ojsVersion = "0.2.12", this.ojsReleaseVersion = "local_build", this.baseUrl = r.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...r, baseUrl: this.baseUrl }, this.formCallbacks = Oi.fromObject(r), this.registeredElements = null, this.formId = `opjs-form-${Kt()}`, this.referrer = window.location.origin, this.formTarget = r.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Ti(), this.eventHandler = new xi(this.formId, this.baseUrl, this.formCallbacks, {
3719
+ }, mt.assignAsSingleton(this), this.ojsVersion = "0.2.13", this.ojsReleaseVersion = "local_build", this.baseUrl = r.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...r, baseUrl: this.baseUrl }, this.formCallbacks = Oi.fromObject(r), this.registeredElements = null, this.formId = `opjs-form-${Kt()}`, this.referrer = window.location.origin, this.formTarget = r.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ji(), this.eventHandler = new xi(this.formId, this.baseUrl, this.formCallbacks, {
3717
3720
  setFormHeight: this.setFormHeight,
3718
3721
  onCdeLoaded: this.onCdeLoaded,
3719
3722
  onCdeLoadError: this.onCdeLoadError
@@ -3760,17 +3763,17 @@ const Di = (t, r, n) => (...o) => {
3760
3763
  };
3761
3764
  var Dn = /* @__PURE__ */ ((t) => (t.pockytPaypal = "pockyt-paypal", t.airwallexGooglePay = "airwallex-google-pay", t.airwallexApplePay = "airwallex-apple-pay", t.authorizenetGooglePay = "authorizenet-google-pay", t.authorizenetApplePay = "authorizenet-apple-pay", t))(Dn || {});
3762
3765
  e.nativeEnum(Dn);
3763
- const j = e.string().trim().min(1, { message: "Cannot be blank" }), S = e.string().trim().optional(), z = (t) => e.nullable(t.optional());
3766
+ const T = e.string().trim().min(1, { message: "Cannot be blank" }), S = e.string().trim().optional(), F = (t) => e.nullable(t.optional());
3764
3767
  var Ln = /* @__PURE__ */ ((t) => (t.FIRST_NAME = "firstName", t.LAST_NAME = "lastName", t.EMAIL = "email", t.ZIP_CODE = "zipCode", t.CITY = "city", t.STATE = "state", t.COUNTRY = "country", t.ADDRESS = "address", t.PHONE = "phone", t.PROMOTION_CODE = "promotionCode", t))(Ln || {});
3765
3768
  const Li = e.nativeEnum(Ln);
3766
3769
  var Un = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(Un || {});
3767
3770
  const Fn = e.nativeEnum(Un), Ui = e.union([Li, Fn]);
3768
- var Ce = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(Ce || {});
3769
- e.nativeEnum(Ce);
3771
+ var ke = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(ke || {});
3772
+ e.nativeEnum(ke);
3770
3773
  const We = e.object({
3771
3774
  provider: e.string(),
3772
- processor_name: z(e.string()),
3773
- metadata: z(e.record(e.string(), e.any()))
3775
+ processor_name: F(e.string()),
3776
+ metadata: F(e.record(e.string(), e.any()))
3774
3777
  }), Fi = e.object({
3775
3778
  id: e.string()
3776
3779
  });
@@ -3818,7 +3821,7 @@ const B = e.enum([
3818
3821
  errors: e.array(e.string()).optional()
3819
3822
  }), Gi = B.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Yi = e.object({
3820
3823
  type: Gi,
3821
- message: j,
3824
+ message: T,
3822
3825
  headers: e.record(e.string(), e.string()).optional()
3823
3826
  }), Ki = B.extract(["VALIDATION_ERROR"]), Hi = e.object({
3824
3827
  type: Ki,
@@ -3826,10 +3829,10 @@ const B = e.enum([
3826
3829
  errors: e.array(e.string())
3827
3830
  }), Zi = e.object({
3828
3831
  type: e.literal(B.enum.LAYOUT),
3829
- height: j
3832
+ height: T
3830
3833
  }), Bi = e.object({
3831
3834
  type: e.literal(B.enum.LOADED),
3832
- sessionId: j,
3835
+ sessionId: T,
3833
3836
  totalAmountAtoms: e.number(),
3834
3837
  currency: S,
3835
3838
  checkoutPaymentMethods: e.array(We)
@@ -3842,25 +3845,25 @@ const B = e.enum([
3842
3845
  type: e.literal(B.enum.SETUP_PAYMENT_METHOD_SUCCESS),
3843
3846
  paymentMethodId: e.string()
3844
3847
  }), Xe = e.object({
3845
- firstName: j,
3846
- lastName: j,
3847
- email: j,
3848
- zipCode: j,
3849
- country: j,
3848
+ firstName: T,
3849
+ lastName: T,
3850
+ email: T,
3851
+ zipCode: T,
3852
+ country: T,
3850
3853
  promotionCode: S
3851
3854
  }), Xi = e.object({
3852
3855
  firstName: S,
3853
3856
  lastName: S,
3854
- email: j,
3855
- zipCode: j,
3856
- country: j,
3857
+ email: T,
3858
+ zipCode: T,
3859
+ country: T,
3857
3860
  promotionCode: S,
3858
3861
  address: S,
3859
3862
  city: S,
3860
3863
  state: S
3861
3864
  }), Qi = B.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), es = e.object({
3862
3865
  type: Qi,
3863
- sessionId: j,
3866
+ sessionId: T,
3864
3867
  checkoutPaymentMethod: We,
3865
3868
  paymentFlowMetadata: e.any().optional(),
3866
3869
  doNotUseLegacyCCFlow: e.boolean().optional(),
@@ -3888,16 +3891,16 @@ const B = e.enum([
3888
3891
  ]);
3889
3892
  e.object({
3890
3893
  payload: rs,
3891
- nonce: j,
3892
- formId: j,
3893
- elementId: j
3894
+ nonce: T,
3895
+ formId: T,
3896
+ elementId: T
3894
3897
  });
3895
3898
  e.object({
3896
3899
  amountAtom: e.number(),
3897
3900
  /**
3898
3901
  * The three-letter ISO 4217 currency code for the payment.
3899
3902
  */
3900
- currency: j
3903
+ currency: T
3901
3904
  });
3902
3905
  e.enum(["apple_pay", "google_pay"]);
3903
3906
  e.object({
@@ -3906,10 +3909,10 @@ e.object({
3906
3909
  });
3907
3910
  e.object({
3908
3911
  secure_token: e.string(),
3909
- existing_cc_pm_id: z(e.string()),
3910
- their_pm_id: z(e.string()),
3911
- checkout_attempt_id: z(e.string()),
3912
- processor_specific_metadata: z(e.record(e.string(), e.any()))
3912
+ existing_cc_pm_id: F(e.string()),
3913
+ their_pm_id: F(e.string()),
3914
+ checkout_attempt_id: F(e.string()),
3915
+ processor_specific_metadata: F(e.record(e.string(), e.any()))
3913
3916
  });
3914
3917
  const os = e.object({
3915
3918
  invoice_urls: e.array(e.string()),
@@ -3936,7 +3939,7 @@ e.object({
3936
3939
  checkout_payment_method: We,
3937
3940
  non_cde_form_fields: Xe,
3938
3941
  do_not_use_legacy_cc_flow: e.boolean().optional(),
3939
- existing_cc_pm_id: z(e.string())
3942
+ existing_cc_pm_id: F(e.string())
3940
3943
  });
3941
3944
  e.object({
3942
3945
  session_id: e.string(),
@@ -3965,11 +3968,11 @@ e.object({
3965
3968
  });
3966
3969
  const ss = e.object({
3967
3970
  type: e.string(),
3968
- redirect_url: z(e.string()),
3969
- initial_intent_id: z(e.string()),
3970
- consent_id: z(e.string()),
3971
- their_pm_id: z(e.string()),
3972
- payment_session: z(e.record(e.string(), e.any()))
3971
+ redirect_url: F(e.string()),
3972
+ initial_intent_id: F(e.string()),
3973
+ consent_id: F(e.string()),
3974
+ their_pm_id: F(e.string()),
3975
+ payment_session: F(e.record(e.string(), e.any()))
3973
3976
  });
3974
3977
  e.discriminatedUnion("present", [
3975
3978
  e.object({ present: e.literal(!0), href: e.string() }),
@@ -3977,8 +3980,8 @@ e.discriminatedUnion("present", [
3977
3980
  ]);
3978
3981
  e.object({
3979
3982
  payment_methods: e.array(Fi),
3980
- pay_first_success_response: z(os),
3981
- required_user_actions: z(e.array(ss))
3983
+ pay_first_success_response: F(os),
3984
+ required_user_actions: F(e.array(ss))
3982
3985
  });
3983
3986
  e.object({
3984
3987
  stripe_pk: e.string(),
@@ -4017,7 +4020,7 @@ const zn = e.object({
4017
4020
  }), ls = e.record(e.string(), e.any()), us = e.object({
4018
4021
  name: e.string(),
4019
4022
  settings: b(ls)
4020
- }), Te = e.object({
4023
+ }), Se = e.object({
4021
4024
  provider: e.string(),
4022
4025
  processor_name: b(e.string()),
4023
4026
  metadata: b(e.record(e.string(), e.any()))
@@ -4066,7 +4069,7 @@ const zn = e.object({
4066
4069
  brand: us,
4067
4070
  subs_preview: b(hs),
4068
4071
  // Null in setup mode
4069
- methods_available: e.array(Te)
4072
+ methods_available: e.array(Se)
4070
4073
  }), fs = e.discriminatedUnion("mode", [
4071
4074
  e.object({
4072
4075
  mode: e.literal("setup"),
@@ -4104,7 +4107,7 @@ e.object({
4104
4107
  line_items: e.array(qn),
4105
4108
  total_amount_atom: e.number().int(),
4106
4109
  cancel_at_end: e.boolean(),
4107
- checkout_payment_method: Te,
4110
+ checkout_payment_method: Se,
4108
4111
  promotion_code: e.string().optional(),
4109
4112
  do_not_use_legacy_cc_flow: e.boolean().optional(),
4110
4113
  use_confirmed_pm_id: b(e.string())
@@ -4128,11 +4131,11 @@ const vs = e.object({
4128
4131
  new_customer_address: e.record(e.string(), e.any()).optional(),
4129
4132
  new_customer_first_name: e.string().optional(),
4130
4133
  new_customer_last_name: e.string().optional()
4131
- }), Es = e.object({
4134
+ }), Ps = e.object({
4132
4135
  price_id: e.string(),
4133
4136
  quantity: e.number().int()
4134
- }), Ps = e.object({
4135
- line_items: e.array(Es),
4137
+ }), Es = e.object({
4138
+ line_items: e.array(Ps),
4136
4139
  promotion_code: e.string().optional(),
4137
4140
  displayed_total_amount_atom: e.number().int()
4138
4141
  }), Cs = e.object({
@@ -4140,11 +4143,11 @@ const vs = e.object({
4140
4143
  });
4141
4144
  e.object({
4142
4145
  payment_provider: e.string(),
4143
- checkout_payment_method: Te,
4146
+ checkout_payment_method: Se,
4144
4147
  existing_cc_pm_id: e.string().optional(),
4145
4148
  their_existing_pm_id: e.string().optional(),
4146
4149
  use_pay_first_flow: e.boolean().optional(),
4147
- pay_first_flow_cart_info: Ps.optional()
4150
+ pay_first_flow_cart_info: Es.optional()
4148
4151
  }).extend(vs.shape).extend(Cs.shape);
4149
4152
  e.object({
4150
4153
  required_user_actions: e.array(e.record(e.string(), e.any())),
@@ -4152,12 +4155,12 @@ e.object({
4152
4155
  });
4153
4156
  e.object({
4154
4157
  fields: Xi,
4155
- checkoutPaymentMethod: Te
4158
+ checkoutPaymentMethod: Se
4156
4159
  });
4157
4160
  e.object({
4158
4161
  session_id: e.string(),
4159
4162
  non_cde_form_fields: Xe,
4160
- checkout_payment_method: Te,
4163
+ checkout_payment_method: Se,
4161
4164
  extra_metadata: e.record(e.string(), e.any())
4162
4165
  // This is optional in CDE, but not in OJS moving forward
4163
4166
  });
@@ -4196,6 +4199,13 @@ e.object({
4196
4199
  e.object({
4197
4200
  error_code: e.string()
4198
4201
  });
4202
+ e.object({
4203
+ checkout_payment_method: Se,
4204
+ processor_specific_metadata: e.record(e.any()).optional()
4205
+ });
4206
+ e.object({
4207
+ next_action_metadata: b(e.record(e.any()))
4208
+ });
4199
4209
  function ks(t, r) {
4200
4210
  var n = Object.setPrototypeOf;
4201
4211
  n ? n(t, r) : t.__proto__ = r;
@@ -4410,7 +4420,7 @@ const Rs = (t) => {
4410
4420
  onPaymentRequestLoad: t.onPaymentRequestLoad
4411
4421
  });
4412
4422
  return $e.getInstance() && ((n = $e.getInstance()) == null || n.updateCallbacks(r.get)), r.get;
4413
- }, Ts = (t) => {
4423
+ }, js = (t) => {
4414
4424
  const [r, n] = pe({
4415
4425
  apple_pay: Vt,
4416
4426
  google_pay: Vt
@@ -4422,15 +4432,15 @@ const Rs = (t) => {
4422
4432
  );
4423
4433
  return { paymentRequests: r, overridenOnPaymentRequestLoad: o };
4424
4434
  }, Yt = "op_ojs_form", qs = (t) => {
4425
- const [r, n] = pe(), [o, a] = pe(null), { paymentRequests: i, overridenOnPaymentRequestLoad: s } = Ts(t.onPaymentRequestLoad), [c, l] = pe(!1), [u, d] = pe(null), [_, h] = pe({
4435
+ const [r, n] = pe(), [o, a] = pe(null), { paymentRequests: i, overridenOnPaymentRequestLoad: s } = js(t.onPaymentRequestLoad), [c, l] = pe(!1), [u, d] = pe(null), [_, h] = pe({
4426
4436
  googlePay: $t,
4427
4437
  applePay: $t
4428
4438
  }), m = Rs({
4429
4439
  ...t,
4430
4440
  onPaymentRequestLoad: s,
4431
- onLoad: (y, E) => {
4441
+ onLoad: (y, P) => {
4432
4442
  var w;
4433
- l(!0), (w = t.onLoad) == null || w.call(t, y, E);
4443
+ l(!0), (w = t.onLoad) == null || w.call(t, y, P);
4434
4444
  }
4435
4445
  });
4436
4446
  if (st(() => {
@@ -4443,8 +4453,8 @@ const Rs = (t) => {
4443
4453
  ...m
4444
4454
  });
4445
4455
  n(y);
4446
- const E = js(y);
4447
- return a(E), y.initFlows.stripeLink.publisher.subscribe((w) => {
4456
+ const P = Ts(y);
4457
+ return a(P), y.initFlows.stripeLink.publisher.subscribe((w) => {
4448
4458
  w.isSuccess && w.loadedValue.isAvailable && d(w.loadedValue.controller);
4449
4459
  }), y.initFlows.airwallexGooglePay.publisher.subscribe((w) => {
4450
4460
  w.isSuccess && w.loadedValue.isAvailable && h((v) => ({
@@ -4480,7 +4490,7 @@ const Rs = (t) => {
4480
4490
  airwallex: _
4481
4491
  };
4482
4492
  return /* @__PURE__ */ Y(rt, { children: o ? /* @__PURE__ */ Y(Zt.Provider, { value: o, children: /* @__PURE__ */ Y("div", { id: Yt, className: t.className, children: t.children(f) }) }) : /* @__PURE__ */ Y(rt, {}) });
4483
- }, js = (t) => ({
4493
+ }, Ts = (t) => ({
4484
4494
  formId: t.formId,
4485
4495
  formHeight: t.formProperties.height,
4486
4496
  referrer: t.referrer,
@@ -4494,8 +4504,8 @@ const Rs = (t) => {
4494
4504
  height: i
4495
4505
  }), [i]), y = nt(() => {
4496
4506
  if (!s || !a) return "";
4497
- const E = new URLSearchParams();
4498
- return E.append("referer", a), E.append("styles", m), E.append("formId", o), E.append("secureToken", s), E.toString();
4507
+ const P = new URLSearchParams();
4508
+ return P.append("referer", a), P.append("styles", m), P.append("formId", o), P.append("secureToken", s), P.toString();
4499
4509
  }, [m, o, a, s]);
4500
4510
  return st(() => _(!0), []), st(() => {
4501
4511
  !h.current || !d || c(r, h.current);
@@ -4510,7 +4520,7 @@ const Rs = (t) => {
4510
4520
  ref: h
4511
4521
  }
4512
4522
  ) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */ Y("div", {}));
4513
- }, $s = ({ styles: t }) => /* @__PURE__ */ Y(Qe, { styles: t, elementType: Ce.CARD_CVC }), Vs = ({ styles: t }) => /* @__PURE__ */ Y(Qe, { styles: t, elementType: Ce.CARD }), Gs = ({ styles: t }) => /* @__PURE__ */ Y(Qe, { styles: t, elementType: Ce.CARD_EXPIRY }), Ys = ({ styles: t }) => /* @__PURE__ */ Y(Qe, { styles: t, elementType: Ce.CARD_NUMBER });
4523
+ }, $s = ({ styles: t }) => /* @__PURE__ */ Y(Qe, { styles: t, elementType: ke.CARD_CVC }), Vs = ({ styles: t }) => /* @__PURE__ */ Y(Qe, { styles: t, elementType: ke.CARD }), Gs = ({ styles: t }) => /* @__PURE__ */ Y(Qe, { styles: t, elementType: ke.CARD_EXPIRY }), Ys = ({ styles: t }) => /* @__PURE__ */ Y(Qe, { styles: t, elementType: ke.CARD_NUMBER });
4514
4524
  export {
4515
4525
  $s as CardCvcElement,
4516
4526
  Vs as CardElement,
@@ -4520,4 +4530,4 @@ export {
4520
4530
  Ln as FieldName,
4521
4531
  Zn as useOpenPayElements
4522
4532
  };
4523
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBFZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBaZSA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgZHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBwciA9IHokMS5hcnJheShkciksIG1yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHlyID0geiQxLmFycmF5KG1yKSwgZnIgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIFZlID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBmcltyXSA/PyB0O1xufSwgaHIgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIF9yID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gVmUodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7VmUoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgZ3IgPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIEsgPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChocih0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCByID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHByLnNhZmVQYXJzZShyKS5zdWNjZXNzID8gX3IocikgOiB5ci5zYWZlUGFyc2Uocikuc3VjY2VzcyA/IGdyKHIpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIFZlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgcmV0dXJuIHIgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIHdyID0gKHQsIHIsIGUpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHIoLi4ubik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyIHggPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgdC5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIHQuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgdC5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIHQuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgdCkpKHggfHwge30pO1xueiQxLm5hdGl2ZUVudW0oeCk7IGNvbnN0IE0gPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIFAgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIE4gPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG52YXIgcCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCB0LkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgdC5FTUFJTCA9IFwiZW1haWxcIiwgdC5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCB0LkNJVFkgPSBcImNpdHlcIiwgdC5TVEFURSA9IFwic3RhdGVcIiwgdC5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIHQuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCB0LlBIT05FID0gXCJwaG9uZVwiLCB0LlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIHQpKShwIHx8IHt9KTtcbmNvbnN0IEN0ID0geiQxLm5hdGl2ZUVudW0ocCk7XG52YXIgUHQgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgdCkpKFB0IHx8IHt9KTtcbmNvbnN0IFN0ID0geiQxLm5hdGl2ZUVudW0oUHQpLCBrdCA9IHokMS51bmlvbihbQ3QsIFN0XSk7XG52YXIgbGUgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEID0gXCJjYXJkXCIsIHQuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIHQuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIHQpKShsZSB8fCB7fSk7XG5jb25zdCBiciA9IHokMS5uYXRpdmVFbnVtKGxlKSwgTWUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IE4oeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IE4oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgdnIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogUCxcbiAgZXhwaXJ5OiBQLFxuICBjdmM6IFBcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogUCxcbiAgY29sb3I6IFAsXG4gIGZvbnRGYW1pbHk6IFAsXG4gIGZvbnRTaXplOiBQLFxuICBmb250V2VpZ2h0OiBQLFxuICBtYXJnaW46IFAsXG4gIHBhZGRpbmc6IFAsXG4gIGxldHRlclNwYWNpbmc6IFAsXG4gIGxpbmVIZWlnaHQ6IFAsXG4gIGhpZGVJY29uOiBQXG59KTtcbmNvbnN0IFYgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgRXIgPSBWLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBDciA9IHokMS5vYmplY3QoeyB0eXBlOiBFciB9KSwgUHIgPSBWLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgU3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogUHIsXG4gIGVsZW1lbnRUeXBlOiBTdCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwga3IgPSBWLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCBBciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBrcixcbiAgbWVzc2FnZTogTSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIElyID0gVi5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBSciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJcixcbiAgZWxlbWVudFR5cGU6IGt0LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgRnIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoVi5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogTVxufSksIE1yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFYuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IE0sXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFAsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShNZSlcbn0pLCBPciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChWLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgVHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoVi5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIF9lID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogTSxcbiAgbGFzdE5hbWU6IE0sXG4gIGVtYWlsOiBNLFxuICB6aXBDb2RlOiBNLFxuICBjb3VudHJ5OiBNLFxuICBwcm9tb3Rpb25Db2RlOiBQXG59KSwgRHIgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBQLFxuICBsYXN0TmFtZTogUCxcbiAgZW1haWw6IE0sXG4gIHppcENvZGU6IE0sXG4gIGNvdW50cnk6IE0sXG4gIHByb21vdGlvbkNvZGU6IFAsXG4gIGFkZHJlc3M6IFAsXG4gIGNpdHk6IFAsXG4gIHN0YXRlOiBQXG59KSwgTnIgPSBWLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIExyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IE5yLFxuICBzZXNzaW9uSWQ6IE0sXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogTWUsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogUFxufSkuZXh0ZW5kKF9lLnNoYXBlKSwgVXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoVi5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCBqciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChWLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgeHIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIENyLFxuICBTcixcbiAgQXIsXG4gIFJyLFxuICBGcixcbiAgTXIsXG4gIExyLFxuICBVcixcbiAganIsXG4gIE9yLFxuICBUclxuXSksICRyID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IHhyLFxuICBub25jZTogTSxcbiAgZm9ybUlkOiBNLFxuICBlbGVtZW50SWQ6IE1cbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogTVxufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IE4oeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IE4oeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogTih6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IE4oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IEplID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KSwgenIgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEdyID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6cilcbn0pLCBWciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgR3Jcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IE1lLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBfZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogTih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBNZSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogX2UsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnZhciB6ID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuU1VDQ0VTUyA9IFwic3VjY2Vzc1wiLCB0LkZBSUxVUkUgPSBcImZhaWx1cmVcIiwgdC5DQU5DRUxMRUQgPSBcImNhbmNlbGxlZFwiLCB0KSkoeiB8fCB7fSk7XG5jb25zdCBxciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcbiAgICBcInN1Y2Nlc3NcIixcbiAgICBcImZhaWx1cmVcIixcbiAgICBcImNhbmNlbGxlZFwiXG4gICAgLyogQ0FOQ0VMTEVEICovXG4gIF0pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IFlyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgQXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IE4oeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IE4oeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogTih6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTih6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IE4oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgS3IgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMCksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCExKSB9KVxuXSksIEhyID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KHZyKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IE4oSmUpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IE4oeiQxLmFycmF5KEF0KSlcbn0pLCBXciA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhID0gQ3QucGFyc2UoZSk7XG4gICAgICBBcnJheS5pc0FycmF5KG4pID8gclthXSA9IG4gOiBBcnJheS5pc0FycmF5KG4uX2Vycm9ycykgJiYgKHJbYV0gPSBuLl9lcnJvcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSksIHI7XG59LCBaciA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIEpyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIEJyID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgT2UgPSBhc3luYyAodCkgPT4ge1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgcnQoKSB8fCBhd2FpdCBJdCg1MDApO1xuICBpZiAoIXJ0KCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKHQpO1xufSwgUXIgPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gYXdhaXQgT2UodCk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IGUuZWxlbWVudHMociksXG4gICAgc3RyaXBlOiBlXG4gIH07XG59LCBYciA9IGFzeW5jICh0LCByLCBlLCBuLCBhKSA9PiB7XG4gIGNvbnN0IHMgPSBhd2FpdCBPZSh0KSwgaSA9IEJyW2UudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gcy5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IGksXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHIsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogITAsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6ICEwLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXVxuICB9KTtcbn0sIEl0ID0gKHQpID0+IG5ldyBQcm9taXNlKChyKSA9PiB7XG4gIHNldFRpbWVvdXQociwgdCk7XG59KSwgcnQgPSAoKSA9PiBcIlN0cmlwZVwiIGluIHdpbmRvdywgZW4gPSBhc3luYyAodCkgPT4gbmV3IFByb21pc2UoKHIsIGUpID0+IHtcbiAgdHJ5IHtcbiAgICB0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCBuKSwgcihuKTtcbiAgICB9KSwgdC5vbihcInRva2VuXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCBuKTtcbiAgICB9KSwgdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICBlKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBlKG4pO1xuICB9XG59KSwgdG4gPSBhc3luYyAodCwgcikgPT4ge1xuICBpZiAoIXQuc3RyaXBlX3BrIHx8ICF0LmNsaWVudF9zZWNyZXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgY29uc3QgbiA9IGF3YWl0IChhd2FpdCBPZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHIucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKG4uZXJyb3IpXG4gICAgdGhyb3cgci5jb21wbGV0ZShcImZhaWxcIiksIG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7bi5lcnJvci5tZXNzYWdlID8/IFwidW5rbm93blwifWApO1xuICByZXR1cm4gci5jb21wbGV0ZShcInN1Y2Nlc3NcIiksIG47XG59LCBybiA9IGFzeW5jICh0KSA9PiB7XG4gIHZhciBhLCBzLCBpLCBjO1xuICBjb25zdCBlID0gYXdhaXQgKGF3YWl0IE9lKHQuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cCh0LmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogdC5zdHJpcGVfcG1faWRcbiAgfSksIG4gPSAoYSA9IGUuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBhLnN0YXR1cztcbiAgaWYgKG4gPT09IFwic3VjY2VlZGVkXCIpXG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCB0LnN0cmlwZV9wbV9pZCksIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGUuc2V0dXBJbnRlbnQpO1xuICBlbHNlIHRocm93IG4gPT09IFwiY2FuY2VsZWRcIiA/IG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSA6IG5ldyBFcnJvcihcbiAgICBgJHsoKHMgPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogcy5tZXNzYWdlKSA/PyAoKGMgPSAoaSA9IGUuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBpLmxhc3Rfc2V0dXBfZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBjLm1lc3NhZ2UpID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgKTtcbn0sIG5uID0gKHQpID0+IEpTT04uc3RyaW5naWZ5KHQpLCBRID0gKHQsIHIpID0+IEFycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgoYSwgcykgPT4ge1xuICBjb25zdCBpID0gcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIHJldHVybiBpID8geyAuLi5hLCBbaV06IHMudmFsdWUgfSA6IGE7XG59LCB7fSksIG9uID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJHIucGFyc2UodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCB0LCByKSwgcjtcbiAgfVxufSwgYW4gPSBhc3luYyAodCkgPT4ge1xuICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCAhdCkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSB7IHR5cGU6IFwicGluZ1wiIH0sIGUgPSBhd2FpdCB0LnNlbmQocik7XG4gICAgaWYgKGUgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCByKSwgITE7XG4gIH1cbn0sIHNuID0gKHQsIHIpID0+ICEhdCAmJiByLCBnID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgY24gPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgUnQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IGcoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IGcoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IGcoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBnKHokMS5udW1iZXIoKSlcbn0pLCBGdCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogZyh6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIGxuID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIHVuID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IGcobG4pXG59KSwgZ2UgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IGcoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IGcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgZG4gPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSksIHBuID0geiQxLm9iamVjdCh7XG4gIGlkOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogZyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShkbiksXG4gIHRyaWFsX3N0YXJ0OiBnKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogZyh6JDEuc3RyaW5nKCkpXG59KSwgTXQgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSksIG1uID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoTXQpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KSwgeW4gPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBSdFxufSksIGZuID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KHluKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBnKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkobW4pLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KE10KVxufSksIG50ID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShwbiksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoZm4pXG59KSwgT3QgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogbnQsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogZyhudCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShSdClcbn0pLCBvdCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KEZ0KSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IHVuLFxuICBzdWJzX3ByZXZpZXc6IGcoT3QpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShnZSlcbn0pLCBUdCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKG90LnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQob3Quc2hhcGUpXG5dKSwgaG4gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KSwgX24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtUdCwgaG4sIF9uXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoRnQpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZ2UsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBnKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgRHQgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IGduID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShnbik7XG5jb25zdCB3biA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGJuID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCB2biA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoYm4pLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgRW4gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBnKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZ2UsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB2bi5vcHRpb25hbCgpXG59KS5leHRlbmQod24uc2hhcGUpLmV4dGVuZChFbi5zaGFwZSk7XG5jb25zdCBOdCA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGcoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBEcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBnZVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBfZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGdlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbmNvbnN0IENuID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IGcoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogZyh6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogZyh6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBnKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBnKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBnKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IGcoeiQxLmJvb2xlYW4oKSlcbn0pO1xuY29uc3QgUG4gPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IGcoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogZyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBTbiA9IHokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pLCBrbiA9ICh0KSA9PiB0LnJlZHVjZSgociwgZSkgPT4gciArIGUsIDApO1xuZnVuY3Rpb24gQW4odCwgcikge1xuICB2YXIgZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgZSA/IGUodCwgcikgOiB0Ll9fcHJvdG9fXyA9IHI7XG59XG5mdW5jdGlvbiBJbih0LCByKSB7XG4gIHIgPT09IHZvaWQgMCAmJiAociA9IHQuY29uc3RydWN0b3IpO1xuICB2YXIgZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBlICYmIGUodCwgcik7XG59XG52YXIgUm4gPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIHZhciB0ID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiB0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oYSwgcykge1xuICAgICAgYS5fX3Byb3RvX18gPSBzO1xuICAgIH0gfHwgZnVuY3Rpb24oYSwgcykge1xuICAgICAgZm9yICh2YXIgaSBpbiBzKVxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgaSkgJiYgKGFbaV0gPSBzW2ldKTtcbiAgICB9LCB0KGUsIG4pO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24ociwgZSkge1xuICAgIGlmICh0eXBlb2YgZSAhPSBcImZ1bmN0aW9uXCIgJiYgZSAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoZSkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgIHQociwgZSk7XG4gICAgZnVuY3Rpb24gbigpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSByO1xuICAgIH1cbiAgICByLnByb3RvdHlwZSA9IGUgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGUpIDogKG4ucHJvdG90eXBlID0gZS5wcm90b3R5cGUsIG5ldyBuKCkpO1xuICB9O1xufSgpLCBGbiA9IGZ1bmN0aW9uKHQpIHtcbiAgUm4ociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBhID0gdGhpcy5jb25zdHJ1Y3RvciwgcyA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBhLm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICB9KSwgQW4ocywgYS5wcm90b3R5cGUpLCBJbihzKSwgcztcbiAgfVxuICByZXR1cm4gcjtcbn0oRXJyb3IpO1xuY2xhc3MgTHQgZXh0ZW5kcyBGbiB7XG4gIGNvbnN0cnVjdG9yKHIpIHtcbiAgICBjb25zdCBlID0gYCR7ci5tZXNzYWdlfWA7XG4gICAgc3VwZXIoZSksIHRoaXMucmVzcG9uc2UgPSByO1xuICB9XG4gIGdldCBvcmlnaW5hbEVycm9yTWVzc2FnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNwb25zZS5tZXNzYWdlO1xuICB9XG59XG5jb25zdCBUID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IHQuc2VuZChyKTtcbiAgaWYgKE9uKG4pKVxuICAgIHRocm93IG5ldyBMdChuKTtcbiAgaWYgKCFNbihuLCBlKSkge1xuICAgIGNvbnN0IGEgPSBlLnNhZmVQYXJzZShuKTtcbiAgICB0aHJvdyBhLnN1Y2Nlc3MgPyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlXCIpIDogKGNvbnNvbGUuZXJyb3IoXCJPSlMgcXVlcnlBcGkgZ290IGEgc2NoZW1hIGVycm9yLiBFeHBlY3RlZCBzY2hlbWE6XCIsIGUsIFwiQWN0dWFsOlwiLCBuKSwgYS5lcnJvcik7XG4gIH1cbiAgcmV0dXJuIG47XG59LCBNbiA9ICh0LCByKSA9PiByLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBPbiA9ICh0KSA9PiBjbi5zYWZlUGFyc2UodCkuc3VjY2VzcywgVG4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiZ2V0X2NoZWNrb3V0X3ByZXZpZXdcIiwgcGF5bG9hZDogciB9LCBPdCksIEQgPSBhc3luYyAodCkgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiZ2V0X3ByZWZpbGxcIiwgcGF5bG9hZDoge30gfSwgVHQpLCB3ZSA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJ2Ml9zdGFydF9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogciB9LCBOdCksIERuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZDogciB9LCBDbiksIE5uID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogciB9LCBOdCksIEggPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogciB9LCBIciksIExuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHIgfSwgRHQpLCBVbiA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKFxuICB0LFxuICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQ6IHIgfSxcbiAgS3JcbiksIGpuID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IFRuKHQsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIsXG4gICAgcHJvbW90aW9uX2NvZGU6IGVcbiAgfSksIGEgPSBuZXcgU2V0KG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKGEuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHthLnNpemV9YCk7XG4gIGNvbnN0IHMgPSBhLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBpID0ga24obi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogcyxcbiAgICBhbW91bnRBdG9tOiBpXG4gIH07XG59LCBwZSA9IGFzeW5jICh0LCByLCBlLCBuKSA9PiB7XG4gIGlmIChlKVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICBuID0gbiB8fCB2b2lkIDA7XG4gICAgY29uc3QgYSA9IGF3YWl0IGpuKHQsIHIsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGEuYW1vdW50QXRvbSwgY3VycmVuY3k6IGEuY3VycmVuY3kgfTtcbiAgfVxufSwgeG4gPSBhc3luYyAodCwgcikgPT4ge1xuICBpZiAodC5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20odC52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IFQobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogciB9LCBWcilcbiAgICApXG4gICk7XG59LCBhdCA9IGFzeW5jICh0LCByKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IFQodCwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogciB9LCBKZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZSwgSlNPTi5zdHJpbmdpZnkoZSkpLCBlO1xuICB9XG59LCAkbiA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiByIH0sIER0KSwgQmUgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogciB9LCBKZSksIFV0ID0gMWUzLCB6biA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnNvbGUubG9nKHIpO1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogVXQsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIGEgPSBhd2FpdCBUKG4sIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBxcik7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIGEpLCBhO1xufSwganQgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwidXBkYXRlX2NoZWNrb3V0X2N1c3RvbWVyXCIsIHBheWxvYWQ6IHIgfSwgUG4pLCB4dCA9IGFzeW5jICh0LCByKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBUKFxuICAgICAgdCxcbiAgICAgIHsgdHlwZTogXCJnZXRfc3RhbmRhcmRpemVkX2Vycm9yX2NvZGVcIiwgcGF5bG9hZDogeyBtZXNzYWdlOiByIH0gfSxcbiAgICAgIFNuXG4gICAgKSkuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIEsoZSkpLCBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcbmZ1bmN0aW9uIFFlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3QgZWUgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBhID0gYXdhaXQgdChyKTtcbiAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhhLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoYS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBhLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGEucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGEucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7YX1gKTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IHMgPSBLKGEpLCBpID0gYXdhaXQgeHQoci5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHMpO1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHMsIGkpO1xuICB9XG59LCBtZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gUyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgYSA9IEsoZSksIHMgPSBhd2FpdCB4dChyLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgcmV0dXJuIG4ocywgYSwgZSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGEsIGVycm9yQ29kZTogcyB9O1xuICB9XG59LCBTID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke0VlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7RWUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtFZS5yZWQuYm9sZChcIm9qcy9cIil9JHtFZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IGVzLCBlcnJfXzogR24gfSA9IFMoXCJjb21tb25cIiksIFRlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgVyA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSB0LmZpbmQoKG4pID0+IHIuc2FmZVBhcnNlKG4pLnN1Y2Nlc3MpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgR24oXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgdCksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gci5wYXJzZShlKTtcbn0sIFZuID0gKHQpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogdC5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogdC56aXBDb2RlLFxuICAgIGNvdW50cnk6IHQuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdC5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHQubGFzdE5hbWVcbn0pLCBEZSA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IHIgfSA9IFModC5sb2dQcmVmaXgpLCBlID0gYXdhaXQgRCh0LmFueUNkZUNvbm5lY3Rpb24pLCBuID0gVGUodC5jb25maXJtUmVzdWx0KTtcbiAgaWYgKGUubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiByKFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgTG4odC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGUudG9rZW4sXG4gICAgICBwbV9pZDogbi5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICByKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogZS50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogdC5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogdC5yZXF1aXJlZEZvcm1GaWVsZHNbcC5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiB0LnJlcXVpcmVkRm9ybUZpZWxkc1twLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IHQucmVxdWlyZWRGb3JtRmllbGRzW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogZS5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IGUuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBCZSh0LmFueUNkZUNvbm5lY3Rpb24sIGEpIH07XG4gIH1cbn0sIHsgbG9nX186ICR0LCBlcnJfXzogenQgfSA9IFMoXCJjb21tb24tY2NcIiksIHRlID0gKHQsIHIsIGUpID0+IHtcbiAgaWYgKGUpIHtcbiAgICAkdChgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgZm9yIChjb25zdCBbYSwgc10gb2YgT2JqZWN0LmVudHJpZXMoZSkpXG4gICAgICB0W2FdIHx8ICh0W2FdID0gcyk7XG4gIH1cbiAgY29uc3QgbiA9IF9lLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFuLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBhID0gbi5lcnJvci5mb3JtYXQoKSwgcyA9IFdyKGEpO1xuICAgIGZvciAoY29uc3QgW2ksIGNdIG9mIE9iamVjdC5lbnRyaWVzKHMpKVxuICAgICAgcihpLCBjLCBpKTtcbiAgICB0aHJvdyB6dChcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIHMpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gbi5kYXRhO1xufSwgcW4gPSAodCwgcikgPT4ge1xuICBmb3IgKGNvbnN0IGUgb2YgdClcbiAgICBpZiAoZS5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IGUuZXJyb3JzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgYSA9IGt0LnNhZmVQYXJzZShuLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFhLnN1Y2Nlc3MpXG4gICAgICAgICAgenQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtuLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIG4pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzID0gYS5kYXRhO1xuICAgICAgICAgIHIocywgbi5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgJHQoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KGUuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIHN0ID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IEksIGVycl9fOiBZbiB9ID0gUyhcInN0cmlwZS1saW5rXCIpLCBLbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBIbiA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBXbiA9IG1lKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0gdC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgSShcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgbiA9IFcodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBLbik7XG4gICAgSShcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEQoYSksIGkgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBJKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBwZShhLCBzLnRva2VuLCBpLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBsLCBzdHJpcGU6IHUgfSA9IGF3YWl0IFFyKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgSShcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgZCA9IGwuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIHkgPSAoKSA9PiB7XG4gICAgICBkLm1vdW50KGAjJHtzdH1gKTtcbiAgICB9LCBoID0gKCkgPT4ge1xuICAgICAgZC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IEkoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKEkoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIHkoKSksIGQub24oXCJjbGlja1wiLCBhc3luYyAobSkgPT4ge1xuICAgICAgaWYgKEkoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIEkoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG0ucmVzb2x2ZSgpO1xuICAgIH0pLCBkLm9uKFwiY29uZmlybVwiLCBhc3luYyAobSkgPT4ge1xuICAgICAgSShcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgbSk7XG4gICAgICBjb25zdCBmID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogbS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGYuZXJyb3IgPyAoWW4oXCJlcnJvclwiLCBmLmVycm9yKSwgci5nZXQub25DaGVja291dEVycm9yKGYuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKEkoXCJwYXltZW50TWV0aG9kXCIsIGYucGF5bWVudE1ldGhvZCksIEYuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEodC5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiBmLnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogITAgfVxuICAgICAgfSkpO1xuICAgIH0pLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uOiB5LFxuICAgICAgICBkaXNtb3VudEJ1dHRvbjogaCxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IEJuKHN0KVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIFpuID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgSShcIlJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIEkoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IGkgPSBKbihlLCBhLnN0cmlwZVBNKSwgYyA9IHRlKGksIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBJKFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCB3ZShzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogYS5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogY1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBjW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBjW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiBjW3AuWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiBjW3AuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBJKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGwpO1xuICAgIGNvbnN0IGQgPSBIbi5wYXJzZShsLnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkLCB5ID0gYXdhaXQgRChzKTtcbiAgICBpZiAoeS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEkoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IEgocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHkudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBUZShoKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBJKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBoID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHkudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiByLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogY1twLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogY1twLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1twLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogeS5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogeS5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IEJlKHMsIGgpIH07XG4gICAgfVxuICB9XG4pLCBKbiA9ICh0LCByKSA9PiB7XG4gIHZhciBpLCBjLCBsLCB1LCBkO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtuLCAuLi5hXSA9ICgoYyA9IChpID0gci5iaWxsaW5nX2RldGFpbHMubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGEuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByZXR1cm4gZVtwLkZJUlNUX05BTUVdID0gZVtwLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW3AuTEFTVF9OQU1FXSA9IGVbcC5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW3AuRU1BSUxdID0gZVtwLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAoKGwgPSByLmxpbmspID09IG51bGwgPyB2b2lkIDAgOiBsLmVtYWlsKSB8fCByLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbcC5aSVBfQ09ERV0gPSBlW3AuWklQX0NPREVdIHx8ICgodSA9IHIuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB1LnBvc3RhbF9jb2RlKSB8fCBcIjAwMDAwXCIsIGVbcC5DT1VOVFJZXSA9IGVbcC5DT1VOVFJZXSB8fCAoKGQgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogZC5jb3VudHJ5KSB8fCBcIlVTXCIsIEkoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBCbiA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBjb25zdCBlID0gKCkgPT4ge1xuICAgIGNvbnN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtcbiAgICBuID8gcihuKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShlKTtcbiAgfTtcbiAgZSgpO1xufSksIFFuID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZXttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgWG4gPSAodCkgPT4ge1xuICBjb25zdCByID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICByLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke1FufVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3R9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG4gPSBlLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBuLmFwcGVuZENoaWxkKHIuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgYSA9IG4ucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIHMgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksIHsgaG9zdDogZSwgaWZyYW1lOiBhLCBjYW5jZWxCdXR0b246IHMgfTtcbn07XG5mdW5jdGlvbiBlbyh0LCByLCBlKSB7XG4gIGNvbnN0IG4gPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHMgPSBhd2FpdCB6bih0LCBlKTtcbiAgICAgIHMgJiYgKGNsZWFySW50ZXJ2YWwoYSksIHIocykpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgbigpO1xuICBjb25zdCBhID0gc2V0SW50ZXJ2YWwobiwgVXQpO1xuICByZXR1cm4gYTtcbn1cbmZ1bmN0aW9uIHRvKHtcbiAgZWxlbWVudHM6IHQsXG4gIHBvbGxpbmdJbnRlcnZhbDogcixcbiAgcmVzb2x2ZTogZVxufSkge1xuICBjb25zdCBuID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwociksIHQuaG9zdC5yZW1vdmUoKSwgZSh7IHN0YXR1czogei5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiB0LmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbiksICgpID0+IHtcbiAgICB0LmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBOZSh0KSB7XG4gIGNvbnN0IHsgdXJsOiByLCBiYXNlVXJsOiBlIH0gPSB0LCBuID0gWG4ocik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSkgPT4ge1xuICAgIGNvbnN0IHMgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG4uaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIGEobCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgaSA9IGVvKG4uaWZyYW1lLCBzLCBuZXcgVVJMKGUpLm9yaWdpbiksIGMgPSB0byh7XG4gICAgICBlbGVtZW50czogbixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogaSxcbiAgICAgIHJlc29sdmU6IGFcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBHdCA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBOZSh0KTtcbiAgaWYgKHIuc3RhdHVzID09PSB6LkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIuc3RhdHVzID09PSB6LkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiByLnN0YXR1cyAhPT0gei5TVUNDRVNTICYmIFFlKHIuc3RhdHVzKSwge1xuICAgIGhyZWY6IHIuaHJlZlxuICB9O1xufSwgcm8gPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gd2luZG93Lm9wZW4ociwgXCJfYmxhbmtcIik7XG4gIGlmICghZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIGU7XG59LCBubyA9IGFzeW5jICh0LCByLCBlLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IGEgfSA9IFMoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocywgaSkgPT4ge1xuICAgIGNvbnN0IGMgPSBybyh0LCBuKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBVbihyLCBlKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIHMoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0fSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBhKEsodSkpLCBjbGVhckludGVydmFsKGwpLCBpKEsodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogb28sIGVycl9fOiBWdCB9ID0gUyhcInBvY2t5dC1jY1wiKSwgYW8gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pLCBzbyA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBhby5zYWZlUGFyc2UodCk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IFZ0KG4pLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIHF0ID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBvbyhgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7cn1dYCksIHI7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBjb25zdCBlID0gXCJFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgVnQoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtLKHIpfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIGlvID0gKHQsIHIpID0+IG5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldChyKSwgY28gPSAodCkgPT4gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgbG8gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gc28ociksIG4gPSBhd2FpdCBHdCh7IHVybDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiB0IH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogcXQobi5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGVbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBlW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IHVvLCBlcnJfXzogWGUgfSA9IFMoXCJhaXJ3YWxsZXgtY2NcIiksIHBvID0geiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KSwgbW8gPSAodCkgPT4ge1xuICBjb25zdCByID0gcG8uc2FmZVBhcnNlKHQpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBYZShuKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCB5byA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBmbyA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gdW8oYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7cn1dYCksIHI7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBjb25zdCBlID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IFhlKGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7SyhyKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCBobyA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBtbyhyKSwgbiA9IGF3YWl0IEd0KHsgdXJsOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSksIGEgPSBmbyhuLmhyZWYgPz8gXCJcIiksIHMgPSBlW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAocyAhPT0gYSkge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7YX0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtzfSkuYDtcbiAgICB0aHJvdyBYZShsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBhLFxuICAgICAgY29uc2VudF9pZDogZVtcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgWXQgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEt0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCB7IGxvZ19fOiBDLCBlcnJfXzogaXQgfSA9IFMoXCJjb21tb24tY2NcIiksIHsgbG9nX186IGN0IH0gPSBTKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBfbyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB1O1xuICAgIEMoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogciB9KTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBpID0gYXdhaXQgRChzKTtcbiAgICBDKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2kubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IHRlKGUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgbCA9IHtcbiAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge31cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBDKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgZCA9IGF3YWl0IHhuKGEuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKHFuKGQsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgaS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgQyhg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHtpLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgeSA9IGF3YWl0ICRuKHMsIGwpO1xuICAgICAgICByZXR1cm4gQyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke3kucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB5IH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBDKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgeSA9IGF3YWl0IGF0KHMsIGwpO1xuICAgICAgICByZXR1cm4gQyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogeSB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIGlmIChkIGluc3RhbmNlb2YgTHQgJiYgZC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBDKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgQyhcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCB5ID0gY28oZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKHkpIHtcbiAgICAgICAgICBDKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBsbyh0LmJhc2VVcmwsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgbC5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmICh5byhkLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgQyhcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgaG8odC5iYXNlVXJsLCBkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gdztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtID0gYXdhaXQgRG4ocywgbCk7XG4gICAgICAgIEMoXCLilJwgUGF5bWVudCBmbG93IHJlc3VsdDpcIiwgbSk7XG4gICAgICAgIGNvbnN0IGYgPSAoKHUgPSBkLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiB1W1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICB5ID8gQyhcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogZiA/IChDKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgdm8obSkpIDogKEMoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBibyhtLCB0LmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgXyA9IG0uY2NfcG1faWQ7XG4gICAgICAgIGlmIChpLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIEMoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7X31dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IEgocywge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBpLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IF9cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBDKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIHcpO1xuICAgICAgICAgIGNvbnN0IEUgPSBUZSh3KTtcbiAgICAgICAgICByZXR1cm4gQyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke0UucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBFIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQyhg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHtmID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBhdChzLCB7XG4gICAgICAgICAgICAuLi5sLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IF8sXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiBmXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIEMoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHcgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgaXQoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIGl0KGQpLCBkO1xuICAgIH1cbiAgfVxuKSwgZ28gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIFpyLnBhcnNlKHIpO1xufSwgd28gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIFlyLnBhcnNlKHIpO1xufSwgYm8gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gd28odCk7XG4gIGlmIChlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiICYmIGUucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgQyhcIuKUnCBBaXJ3YWxsZXggM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgQyhg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IE5lKHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogciB9KTtcbiAgaWYgKEMoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSB6LkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IHouRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIHZvID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IGdvKHQpO1xuICBjdChg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtyLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgcm4ociksIGN0KFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgRyA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuRy5FbnVtLnN0cmlwZTtcbmNvbnN0IHsgbG9nX186IE8sIGVycl9fOiBFbyB9ID0gUyhcInN0cmlwZS1wclwiKSwgQ28gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIFBvID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIE8oXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCBlID0gVyh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIENvKTtcbiAgICBPKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBEKG4pLCBzID0gYS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgTyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBpID0gYXdhaXQgcGUobiwgYS50b2tlbiwgcywgdm9pZCAwKSwgYyA9IGF3YWl0IFhyKFxuICAgICAgZS5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBpLmFtb3VudEF0b20sXG4gICAgICBpLmN1cnJlbmN5LFxuICAgICAgc1xuICAgICk7XG4gICAgTyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBFbyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgTyhcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKGQsIHkpID0+IEYuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBRKHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiB5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBHLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogRy5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgU28gPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhLFxuICAgIGluaXRSZXN1bHQ6IHNcbiAgfSkgPT4ge1xuICAgIGlmIChPKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgYS5wcm92aWRlciAhPT0gci5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7YS5wcm92aWRlcn0sIGdvdCAke3IucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IHMucHI7XG4gICAgaWYgKGEgIT0gbnVsbCAmJiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IGYgPSBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBPKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBmKSwgQW8oYywgZi5hbW91bnQsIGYucGVuZGluZywgZi5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KTtcbiAgICB9XG4gICAgTyhcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgZW4oYyk7XG4gICAgTyhcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIE8oXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBrbyhlLCBsKSwgZCA9IHRlKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBPKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIiwgZCk7XG4gICAgY29uc3QgeSA9IGF3YWl0IE5uKGksIHtcbiAgICAgIGZpZWxkczogZCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogclxuICAgIH0pLCBoID0gSW8oeSk7XG4gICAgTyhcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IHRuKGgsIGwpO1xuICAgIGNvbnN0IG0gPSBhd2FpdCBEKGkpO1xuICAgIGlmIChtLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgTyhcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSBhd2FpdCBIKGksIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBUZShmKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBPKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IGYgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogZFtwLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IGRbcC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogZFtwLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGRbcC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGRbcC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGRbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IG0ubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IG0uYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBCZShpLCBmKSB9O1xuICAgIH1cbiAgfVxuKSwga28gPSAodCwgcikgPT4ge1xuICB2YXIgbCwgdSwgZCwgeTtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uYV0gPSAoKHUgPSAobCA9IHIucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDAsIGkgPSAoeSA9IChkID0gci5wYXltZW50TWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogZC5iaWxsaW5nX2RldGFpbHMpID09IG51bGwgPyB2b2lkIDAgOiB5LmFkZHJlc3MsIGMgPSByLnNoaXBwaW5nQWRkcmVzcztcbiAgcmV0dXJuIGVbcC5GSVJTVF9OQU1FXSA9IGVbcC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkxBU1RfTkFNRV0gPSBlW3AuTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkVNQUlMXSA9IGVbcC5FTUFJTF0gfHwgci5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtwLlpJUF9DT0RFXSA9IGVbcC5aSVBfQ09ERV0gfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkucG9zdGFsX2NvZGUpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgZVtwLkNPVU5UUlldID0gZVtwLkNPVU5UUlldIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmNvdW50cnkpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLmNvdW50cnkpIHx8IFwiVVNcIiwgTyhcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIEFvID0gKHQsIHIsIGUsIG4pID0+IHtcbiAgdC51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHIuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBlXG4gICAgfSxcbiAgICBjdXJyZW5jeTogci5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiBuXG4gIH0pO1xufSwgSW8gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gSnIucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgeyBsb2dfXzogcSwgZXJyX186IGx0IH0gPSBTKFwicG9ja3l0LXBheXBhbFwiKSwgUm8gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IEZvID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGssIEw7XG4gICAgcShcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBEKHMpO1xuICAgIHEoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBSby5wYXJzZShyKTtcbiAgICBxKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCBsID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncywgdSA9IHRlKFxuICAgICAgZSxcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBkID0gVm4odSk7XG4gICAgcShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7aS5tb2RlfWApO1xuICAgIGNvbnN0IHkgPSB2NCgpLCBoID0gaS5tb2RlICE9PSBcInNldHVwXCIsIG0gPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGMsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGgsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGggPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGkubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISEoKGsgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzKSAhPSBudWxsICYmIGsudXNlUmVkaXJlY3RGbG93KSxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IHlcbiAgICAgIH0sXG4gICAgICAuLi5kXG4gICAgfSwgZiA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIHQuYmFzZVVybCkudG9TdHJpbmcoKSwgXyA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkobSkpLCB3ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogaS50b2tlbixcbiAgICAgIHI6IF9cbiAgICB9KSwgRSA9IGAke2Z9PyR7dy50b1N0cmluZygpfWA7XG4gICAgaWYgKChMID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncykgIT0gbnVsbCAmJiBMLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IHEoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gRSwgYXdhaXQgSXQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBxKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBxKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IGIgPSBhd2FpdCBubyhcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBzLFxuICAgICAgeSxcbiAgICAgIEVcbiAgICApO1xuICAgIHEoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgYik7XG4gICAgY29uc3QgdiA9IHF0KGIuaHJlZiksIEEgPSBpbyhiLmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIUEpXG4gICAgICB0aHJvdyBsdChcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgYi5ocmVmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIHEoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7dn1gKTtcbiAgICBjb25zdCBVID0gYXdhaXQgSChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGkudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogdixcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGggPyBBIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKHEoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgVSksIGkubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogVS5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoIVUucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBsdChcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIFUpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBVLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxuKSwgTGUgPSAoe1xuICBnYXRld2F5OiB0LFxuICBnYXRld2F5TWVyY2hhbnRJZDogcixcbiAgbWVyY2hhbnROYW1lOiBlLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogYSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgcHJlZmlsbDogaVxufSkgPT4ge1xuICB2YXIgeSwgaDtcbiAgY29uc3QgYyA9ICgoeSA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogeS5hbW91bnRBdG9tKSA/PyAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChoID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBoLmN1cnJlbmN5KSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5jdXJyZW5jeSkgPz8gYS5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IHQsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogcyAhPSBudWxsICYmIHMucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBzICE9IG51bGwgJiYgcy5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHsgLi4uZCwgLi4ucy5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIEh0ID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsIGUuYXN5bmMgPSAhMCwgZS5vbmxvYWQgPSAoKSA9PiB0KCksIGUub25lcnJvciA9ICgpID0+IHIobmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgR29vZ2xlIFBheSBTREtcIikpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xufSk7XG5sZXQgJGUgPSBudWxsO1xuY29uc3QgV3QgPSAodCkgPT4gdCA9PT0gWmUgfHwgdCA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCIsIFVlID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IFd0KHQpO1xuICByZXR1cm4gJGUgPT09IG51bGwgJiYgKCRlID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICBlbnZpcm9ubWVudDogZSxcbiAgICBtZXJjaGFudEluZm86IHIubWVyY2hhbnRJbmZvXG4gIH0pKSwgJGU7XG59LCBNbyA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgcmV0dXJuIHIgPyBBdC5wYXJzZShyKSA6IG51bGw7XG59LCBadCA9ICh0LCByKSA9PiB7XG4gIHZhciBhLCBzLCBpLCBjO1xuICBjb25zdCBlID0geyAuLi50IH0sIG4gPSAocyA9IChhID0gci5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuaW5mbykgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYmlsbGluZ0FkZHJlc3M7XG4gIGlmIChuKSB7XG4gICAgY29uc3QgW2wsIC4uLnVdID0gKChjID0gKGkgPSBuLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBpLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIGQgPSB1LmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBlW3AuRU1BSUxdID0gZVtwLkVNQUlMXSB8fCByLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtwLkNPVU5UUlldID0gZVtwLkNPVU5UUlldIHx8IG4uY291bnRyeUNvZGUgfHwgXCJVU1wiLCBlW3AuQUREUkVTU10gPSBlW3AuQUREUkVTU10gfHwgbi5hZGRyZXNzMSB8fCBcIlwiLCBlW3AuQ0lUWV0gPSBlW3AuQ0lUWV0gfHwgbi5sb2NhbGl0eSB8fCBcIlwiLCBlW3AuWklQX0NPREVdID0gZVtwLlpJUF9DT0RFXSB8fCBuLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiLCBlW3AuU1RBVEVdID0gZVtwLlNUQVRFXSB8fCBuLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiLCBlW3AuRklSU1RfTkFNRV0gPSBlW3AuRklSU1RfTkFNRV0gfHwgbCB8fCBcIl9PUF9VTktOT1dOXCIsIGVbcC5MQVNUX05BTUVdID0gZVtwLkxBU1RfTkFNRV0gfHwgZCB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIH1cbiAgcmV0dXJuIGU7XG59LCB7IGxvZ19fOiAkLCBlcnJfXzogaWUgfSA9IFMoXCJhd3gtZ29vZ2xlLXBheVwiKSwgT28gPSBtZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSA9PiB7XG4gICAgdmFyIHksIGg7XG4gICAgY29uc3QgZSA9IHtcbiAgICAgIHByb2Nlc3NvcjogRy5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gVyh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEt0KTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gZTtcbiAgICAkKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgYSA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIGllKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgZTtcbiAgICBpZiAoJChcIkxvYWRpbmcgR29vZ2xlIFBheSBTREsuLi5cIiksIGF3YWl0IEh0KCksICEoKGggPSAoeSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiB5LnBheW1lbnRzKSAhPSBudWxsICYmIGguYXBpKSlcbiAgICAgIHJldHVybiBpZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIGU7XG4gICAgaWYgKFd0KHQuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gaWUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCBlO1xuICAgICQoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG0gPSBMZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeyByZXN1bHQ6IGYgfSA9IGF3YWl0IFVlKHQuYmFzZVVybCwgbSkuaXNSZWFkeVRvUGF5KFxuICAgICAgICBtXG4gICAgICApO1xuICAgICAgaWYgKCFmKVxuICAgICAgICByZXR1cm4gJChcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCBlO1xuICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgIHJldHVybiBpZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIG0pLCBlO1xuICAgIH1cbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRChpKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgcGUoaSwgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jIChtKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBGLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIGllKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGYpLCByLmdldC5vbkNoZWNrb3V0RXJyb3IoKGYgPT0gbnVsbCA/IHZvaWQgMCA6IGYubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogRy5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBUbyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB5LCBoLCBtLCBmLCBfLCB3LCBFO1xuICAgICQoXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IFcodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBLdCksIHsgaW5pdGlhbFByZXZpZXc6IGksIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IGEsIGwgPSBzLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9IExlKHtcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogaSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KSwgZCA9IFVlKHQuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGIgPSBhd2FpdCBkLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgICQoXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBiKTtcbiAgICAgIGNvbnN0IHYgPSB0LmFueUNkZUNvbm5lY3Rpb24sIEEgPSBhd2FpdCBEKHYpLCBVID0gWnQoZSwgYiksIGsgPSB0ZShcbiAgICAgICAgVSxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApLCBMID0gKGggPSAoeSA9IGIucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBoLnRva2VuO1xuICAgICAgaWYgKCFMKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IHVyID0gYXdhaXQgd2Uodiwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBrW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZToga1twLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBrW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICBwb3N0YWxfY29kZToga1twLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5X2NvZGU6IGtbcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwgdmUgPSBNbyh1cik7XG4gICAgICAkKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgdmUpO1xuICAgICAgbGV0IG5lID0gYXdhaXQgSCh2LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogQS50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogdmUgPT0gbnVsbCA/IHZvaWQgMCA6IHZlLmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IExcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJChcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG5lKTtcbiAgICAgIGxldCB4ZSA9IChmID0gKG0gPSBuZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBtWzBdKSA9PSBudWxsID8gdm9pZCAwIDogZi5pZDtcbiAgICAgIGNvbnN0IG9lID0gKF8gPSBuZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfLmZpbmQoXG4gICAgICAgICh5ZSkgPT4geWUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAob2UgJiYgb2UucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgICQoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBvZSk7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiB5ZSB9ID0gYXdhaXQgTmUoe1xuICAgICAgICAgIHVybDogb2UucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3llfV1gKSwgeWUgPT09IHouQ0FOQ0VMTEVEKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICBpZiAoeWUgPT09IHouRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChvZSAmJiAheGUgJiYgKG5lID0gYXdhaXQgSCh2LCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogQS50b2tlbixcbiAgICAgICAgdGhlaXJfcG1faWQ6IG9lLnRoZWlyX3BtX2lkLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBvZS5jb25zZW50X2lkXG4gICAgICAgIH1cbiAgICAgIH0pLCAkKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbmUpLCB4ZSA9IChFID0gKHcgPSBuZS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB3WzBdKSA9PSBudWxsID8gdm9pZCAwIDogRS5pZCksICF4ZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICByZXR1cm4gRGUoe1xuICAgICAgICBsb2dQcmVmaXg6IFwiYXd4LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB2LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogayxcbiAgICAgICAgY29uZmlybVJlc3VsdDogbmUsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGIpIHtcbiAgICAgIHRocm93IGllKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGIpLCBuZXcgRXJyb3IoKGIgPT0gbnVsbCA/IHZvaWQgMCA6IGIubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgSnQgPSAoKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgZS5zcmMgPSBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsIGUuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiLCBlLmFzeW5jID0gITAsIGUub25sb2FkID0gKCkgPT4gdCgpLCBlLm9uZXJyb3IgPSAoKSA9PiByKG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIikpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xufSksIEJ0ID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHIudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgbiA9IHIuYmlsbGluZ0NvbnRhY3QsIGEgPSByLnNoaXBwaW5nQ29udGFjdCwgcyA9IHsgLi4udCB9O1xuICByZXR1cm4gKGUgfHwgbiB8fCBhKSAmJiAoc1twLkVNQUlMXSA9IHNbcC5FTUFJTF0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgc1twLkNPVU5UUlldID0gc1twLkNPVU5UUlldIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgc1twLlpJUF9DT0RFXSA9IHNbcC5aSVBfQ09ERV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBzW3AuRklSU1RfTkFNRV0gPSBzW3AuRklSU1RfTkFNRV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmdpdmVuTmFtZSkgfHwgXCJfT1BfVU5LTk9XTlwiLCBzW3AuTEFTVF9OQU1FXSA9IHNbcC5MQVNUX05BTUVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmZhbWlseU5hbWUpIHx8IFwiX09QX1VOS05PV05cIiksIHM7XG59LCBEbyA9IHokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSksIE5vID0gKHQpID0+IERvLnNhZmVQYXJzZSh0KS5kYXRhLCBMbyA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBcIm1lc3NhZ2VcIixcbiAgICAoZSkgPT4ge1xuICAgICAgdmFyIGE7XG4gICAgICBjb25zdCBuID0gTm8oZSk7XG4gICAgICAoKGEgPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBhLm1lc3NhZ2VUeXBlKSA9PT0gXCJ3aW5kb3djbG9zaW5nXCIgJiYgKHQoKSwgci5hYm9ydCgpKTtcbiAgICB9LFxuICAgIHtcbiAgICAgIHNpZ25hbDogci5zaWduYWxcbiAgICB9XG4gICksIHtcbiAgICBjbGVhbnVwQ2FuY2VsTGlzdGVuZXI6ICgpID0+IHIuYWJvcnQoKVxuICB9O1xufSwgUXQgPSAoe1xuICB0b3RhbDogdCxcbiAgcHJlZmlsbDogclxufSkgPT4ge1xuICB2YXIgbjtcbiAgaWYgKHIubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogdC5hbW91bnQsXG4gICAgICAgIGxhYmVsOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIGJpbGxpbmcgcG9ydGFsIHVybFxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2RvY3VtZW50YXRpb24vcGFzc2tpdC9wa3JlY3VycmluZ3BheW1lbnRyZXF1ZXN0L21hbmFnZW1lbnR1cmwjRGlzY3Vzc2lvblxuICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSB1c2VkIHdoZW4gdXNlciByZW1vdmUgYSBjYXJkIGZyb20gdGhlaXIgQXBwbGVQYXkgd2FsbGV0LlxuICAgICAgLy8gQ3VycmVudHkgc2V0IHRvIGNoZWNrb3V0IHNlc3Npb24gdXJsIHRvIHNhdGlzZnkgQXBwbGVQYXkgdHlwZXNcbiAgICAgIG1hbmFnZW1lbnRVUkw6IG5ldyBVUkwoYC9wYXkvJHtyLnRva2VufWAsIFplKS50b1N0cmluZygpXG4gICAgfTtcbiAgY29uc3QgZSA9IChuID0gci5saW5lX2l0ZW1zKSA9PSBudWxsID8gdm9pZCAwIDogblswXTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZGVzY3JpcHRpb24pID8/IFwiXCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IHQuYW1vdW50LFxuICAgICAgICBsYWJlbDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZGVzY3JpcHRpb24pID8/IFwiXCIsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbFVuaXQ6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYmlsbGluZ19pbnRlcnZhbCxcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsQ291bnQ6IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmJpbGxpbmdfaW50ZXJ2YWxfY291bnQpID8/IHZvaWQgMCxcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgbWFuYWdlbWVudFVSTDogYGh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tL3BheS8ke3IudG9rZW59YFxuICAgIH07XG59LCBYdCA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHQsXG4gIGluaXRpYWxQcmV2aWV3OiByLFxuICBwcmVmaWxsOiBlLFxuICBkZWZhdWx0TGFiZWw6IG4gPSBcIlRvdGFsXCJcbn0pID0+IHtcbiAgdmFyIGMsIGw7XG4gIGNvbnN0IGEgPSAoKChjID0gdCA9PSBudWxsID8gdm9pZCAwIDogdC5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBjLmN1cnJlbmN5KSA/PyAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5jdXJyZW5jeSkgPz8gci5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgaSA9ICgoKChsID0gdCA9PSBudWxsID8gdm9pZCAwIDogdC5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBsLmFtb3VudEF0b20pID8/IChyID09IG51bGwgPyB2b2lkIDAgOiByLmFtb3VudEF0b20pID8/IDApIC8gMTAwKS50b0ZpeGVkKDIpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5Q29kZTogYSxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmxhYmVsKSA/PyBuID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IHQgIT0gbnVsbCAmJiB0LnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudDogaVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IFBlIH0gPSBTKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIFVvKHQsIHIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IHdlKHIuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogci5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHIubm9uQ2RlRm9ybUlucHV0c1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiByLm5vbkNkZUZvcm1JbnB1dHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHIubm9uQ2RlRm9ybUlucHV0c1twLkxBU1RfTkFNRV0sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiB0LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogci5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdLCBhID0gbi5wYXltZW50X3Nlc3Npb24sIHMgPSBuLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGlmICghcylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgcmV0dXJuIHIuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKSwgcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IHIuc2Vzc2lvbi5hYm9ydCgpLCBlO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBqbyh0LCByKSB7XG4gIGlmICghdC5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBQZShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIHQpO1xuICBjb25zdCB7IHN0YXR1czogZSB9ID0gYXdhaXQgTmUoe1xuICAgIHVybDogdC5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogci5iYXNlVXJsXG4gIH0pO1xuICBpZiAoUGUoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke2V9XWApLCBlID09PSB6LkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGUgPT09IHouRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IEgoci5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogdC50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB0LmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBQZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCBuO1xufVxuYXN5bmMgZnVuY3Rpb24geG8odCwgciwgZSkge1xuICB2YXIgbiwgYSwgcywgaSwgYztcbiAgdHJ5IHtcbiAgICBjb25zdCBsID0gdC5wYXltZW50LCB1ID0gQnQoci5ub25DZGVGb3JtSW5wdXRzLCBsKSwgZCA9IHRlKFxuICAgICAgdSxcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICByLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgYXdhaXQganQoci5jb25uZWN0aW9uLCB7XG4gICAgICBlbWFpbDogZFtwLkVNQUlMXSxcbiAgICAgIGZpcnN0X25hbWU6IGRbcC5GSVJTVF9OQU1FXSxcbiAgICAgIGxhc3RfbmFtZTogZFtwLkxBU1RfTkFNRV0sXG4gICAgICB6aXBfY29kZTogZFtwLlpJUF9DT0RFXSxcbiAgICAgIGNvdW50cnk6IGRbcC5DT1VOVFJZXSxcbiAgICAgIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6ICEwXG4gICAgfSk7XG4gICAgbGV0IHkgPSBhd2FpdCBIKHIuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShsLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIFBlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgeSk7XG4gICAgbGV0IGggPSAoYSA9IChuID0geS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdKSA9PSBudWxsID8gdm9pZCAwIDogYS5pZDtcbiAgICBjb25zdCBtID0gKHMgPSB5LnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZmluZChcbiAgICAgIChfKSA9PiBfLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAobSAhPSBudWxsICYmIG0ucmVkaXJlY3RfdXJsICYmIG0uY29uc2VudF9pZCAmJiBtLnRoZWlyX3BtX2lkICYmICh5ID0gYXdhaXQgam8obSwgciksIGggPSAoYyA9IChpID0geS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBpWzBdKSA9PSBudWxsID8gdm9pZCAwIDogYy5pZCksICFoKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgZiA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gci5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChmKSwgRGUoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogci5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogZCxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IHksXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGwpIHtcbiAgICBjb25zdCB1ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHIuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQodSksIGw7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IGNlLCBlcnJfXzogcWUgfSA9IFMoXCJhd3gtYXBwbGUtcGF5XCIpLCAkbyA9IG1lKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiBHLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBXKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgWXQpO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiBlO1xuICAgIGNlKFwiTG9hZGluZyBBcHBsZSBQYXkgU0RLLi4uXCIpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBKdCgpLCBjZShcIkFwcGxlIFBheSBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICB9IGNhdGNoICh5KSB7XG4gICAgICByZXR1cm4gcWUoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIsIHkpLCBlO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBjZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIGU7XG4gICAgaWYgKGNlKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBjZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgZTtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBEKGkpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBwZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKHkpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEYuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBxZShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCByLmdldC5vbkNoZWNrb3V0RXJyb3IoKGggPT0gbnVsbCA/IHZvaWQgMCA6IGgubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogRy5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCB6byA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBFO1xuICAgIGNvbnN0IHMgPSBXKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgWXQpLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGksIGluaXRpYWxQcmV2aWV3OiBjIH0gPSBuLCBsID0gdC5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgRChsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCB7IGN1cnJlbmN5Q29kZTogeSwgdG90YWw6IGggfSA9IFh0KHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGksXG4gICAgICBpbml0aWFsUHJldmlldzogYyxcbiAgICAgIGRlZmF1bHRMYWJlbDogKEUgPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogRS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSksIG0gPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB5LFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiXSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICAgIFwic3VwcG9ydHMzRFNcIixcbiAgICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0VNVlwiXG4gICAgICBdLFxuICAgICAgdG90YWw6IGgsXG4gICAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogUXQoe1xuICAgICAgICB0b3RhbDogaCxcbiAgICAgICAgcHJlZmlsbDogdVxuICAgICAgfSksXG4gICAgICAuLi4oaSA9PSBudWxsID8gdm9pZCAwIDogaS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSA/PyB7fVxuICAgIH0sIGYgPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIG0pLCBfID0ge1xuICAgICAgc2Vzc2lvbjogZixcbiAgICAgIGNvbm5lY3Rpb246IHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBzLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBkLFxuICAgICAgYmFzZVVybDogdC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogYSxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogbiA9PSBudWxsID8gdm9pZCAwIDogbi5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIGxldCB3O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoYiwgdikgPT4ge1xuICAgICAgY29uc3QgQSA9ICgpID0+IHtcbiAgICAgICAgY2UoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCB2KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfSwgeyBjbGVhbnVwQ2FuY2VsTGlzdGVuZXI6IFUgfSA9IExvKEEpO1xuICAgICAgZi5vbmNhbmNlbCA9IEEsIGYub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGspID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3ID0gYXdhaXQgVW8oaywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKEwpIHtcbiAgICAgICAgICB2KEwpO1xuICAgICAgICB9XG4gICAgICB9LCBmLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBrID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLmggfVxuICAgICAgICB9O1xuICAgICAgICBmLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihrKTtcbiAgICAgIH0sIGYub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChrKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgTCA9IGF3YWl0IHhvKGssIF8sIHcpO1xuICAgICAgICAgIFUoKSwgYihMKTtcbiAgICAgICAgfSBjYXRjaCAoTCkge1xuICAgICAgICAgIHYoTCk7XG4gICAgICAgIH1cbiAgICAgIH0sIGYuYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoYikgPT4ge1xuICAgICAgdGhyb3cgcWUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBiKSwgYjtcbiAgICB9KTtcbiAgfVxuKTtcbmFzeW5jIGZ1bmN0aW9uIEdvKHQsIHIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBhID0gKGF3YWl0IHdlKHIuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogci5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHIubm9uQ2RlRm9ybUlucHV0c1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiByLm5vbkNkZUZvcm1JbnB1dHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHIubm9uQ2RlRm9ybUlucHV0c1twLkxBU1RfTkFNRV0sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IHQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiByLnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0ucGF5bWVudF9zZXNzaW9uO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1lcmNoYW50IHNlc3Npb24gcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgci5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgci5zZXNzaW9uLmFib3J0KCksIGU7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIFZvKHQsIHIpIHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IHQucGF5bWVudCwgcyA9IEJ0KHIubm9uQ2RlRm9ybUlucHV0cywgYSksIGkgPSB0ZShzLCByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhd2FpdCBqdChyLmNvbm5lY3Rpb24sIHtcbiAgICAgIGVtYWlsOiBpW3AuRU1BSUxdLFxuICAgICAgZmlyc3RfbmFtZTogaVtwLkZJUlNUX05BTUVdLFxuICAgICAgbGFzdF9uYW1lOiBpW3AuTEFTVF9OQU1FXSxcbiAgICAgIHppcF9jb2RlOiBpW3AuWklQX0NPREVdLFxuICAgICAgY291bnRyeTogaVtwLkNPVU5UUlldLFxuICAgICAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogITBcbiAgICB9KTtcbiAgICBjb25zdCBjID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoYS50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgbCA9IGF3YWl0IEgoci5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChlID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBlWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiByLnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCBEZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogci5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogaSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGwsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBzID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHIuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocyksIGE7XG4gIH1cbn1cbmNvbnN0IGVyID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgdHIgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCB7IGxvZ19fOiBmZSwgZXJyX186IFllIH0gPSBTKFwiYXV0aG5ldC1hcHBsZXBheVwiKSwgcW8gPSBtZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSA9PiB7XG4gICAgY29uc3QgZSA9IHtcbiAgICAgIHByb2Nlc3NvcjogRy5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IFcodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBlcik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIGU7XG4gICAgZmUoXCJMb2FkaW5nIEFwcGxlIFBheSBTREsuLi5cIik7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IEp0KCksIGZlKFwiQXBwbGUgUGF5IFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgIHJldHVybiBZZShcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIiwgeSksIGU7XG4gICAgfVxuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGZlKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgZTtcbiAgICBpZiAoIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBmZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgZTtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBEKGkpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBwZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKHkpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEYuYXV0aG9yaXplTmV0QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBZZShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCByLmdldC5vbkNoZWNrb3V0RXJyb3IoKGggPT0gbnVsbCA/IHZvaWQgMCA6IGgubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogRy5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgWW8gPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGN1c3RvbVBhcmFtczogbixcbiAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgdztcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpIH0gPSBuLCBjID0gVyh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGVyKSwgeyBjdXJyZW5jeUNvZGU6IGwsIHRvdGFsOiB1IH0gPSBYdCh7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBkZWZhdWx0TGFiZWw6ICh3ID0gYyA9PSBudWxsID8gdm9pZCAwIDogYy5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHcucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCBkID0gdC5hbnlDZGVDb25uZWN0aW9uLCB5ID0gYXdhaXQgRChkKSwgaCA9IHkubW9kZSA9PT0gXCJzZXR1cFwiLCBtID0ge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogbCxcbiAgICAgIHRvdGFsOiB1LFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiXSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXCJzdXBwb3J0czNEU1wiLCBcInN1cHBvcnRzQ3JlZGl0XCIsIFwic3VwcG9ydHNEZWJpdFwiXSxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBRdCh7XG4gICAgICAgIHRvdGFsOiB1LFxuICAgICAgICBwcmVmaWxsOiB5XG4gICAgICB9KSxcbiAgICAgIC4uLihpID09IG51bGwgPyB2b2lkIDAgOiBpLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpID8/IHt9XG4gICAgfSwgZiA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgbSksIF8gPSB7XG4gICAgICBzZXNzaW9uOiBmLFxuICAgICAgY29ubmVjdGlvbjogdC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHIubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB5LFxuICAgICAgaXNTZXR1cE1vZGU6IGgsXG4gICAgICBiYXNlVXJsOiB0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKEUsIGIpID0+IHtcbiAgICAgIGYub25jYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIGZlKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgYihuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIGYub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKHYpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBHbyh2LCBfKTtcbiAgICAgICAgfSBjYXRjaCAoQSkge1xuICAgICAgICAgIGIoQSk7XG4gICAgICAgIH1cbiAgICAgIH0sIGYub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IG0udG90YWxcbiAgICAgICAgfTtcbiAgICAgICAgZi5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24odik7XG4gICAgICB9LCBmLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAodikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IEEgPSBhd2FpdCBWbyh2LCBfKTtcbiAgICAgICAgICBFKEEpO1xuICAgICAgICB9IGNhdGNoIChBKSB7XG4gICAgICAgICAgYihBKTtcbiAgICAgICAgfVxuICAgICAgfSwgZi5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChFKSA9PiB7XG4gICAgICB0aHJvdyBZZShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIEUpLCBFO1xuICAgIH0pO1xuICB9XG4pLCB7IGxvZ19fOiBhZSwgZXJyX186IGhlIH0gPSBTKFwiYXV0aG5ldC1nb29nbGVwYXlcIiksIEtvID0gbWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIHZhciBkLCB5O1xuICAgIGFlKFwiSW5pdGlhbGl6aW5nIEF1dGhuZXQgR29vZ2xlUGF5IGZsb3dcIik7XG4gICAgY29uc3QgZSA9IHtcbiAgICAgIHByb2Nlc3NvcjogRy5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IFcodC5jaGVja291dFBheW1lbnRNZXRob2RzLCB0cik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIGU7XG4gICAgYWUoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gaGUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCBlO1xuICAgIGlmIChhZShcIkxvYWRpbmcgR29vZ2xlIFBheSBTREsuLi5cIiksIGF3YWl0IEh0KCksICEoKHkgPSAoZCA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBkLnBheW1lbnRzKSAhPSBudWxsICYmIHkuYXBpKSlcbiAgICAgIHJldHVybiBoZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIGU7XG4gICAgYWUoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGggPSBMZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeyByZXN1bHQ6IG0gfSA9IGF3YWl0IFVlKHQuYmFzZVVybCwgaCkuaXNSZWFkeVRvUGF5KFxuICAgICAgICBoXG4gICAgICApO1xuICAgICAgaWYgKCFtKVxuICAgICAgICByZXR1cm4gYWUoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgZTtcbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICByZXR1cm4gaGUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBoKSwgZTtcbiAgICB9XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IEQocyksIGMgPSBpLm1vZGUgPT09IFwic2V0dXBcIiwgbCA9IGF3YWl0IHBlKHMsIGkudG9rZW4sIGMsIHZvaWQgMCksIHUgPSBhc3luYyAoaCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgRi5hdXRob3JpemVOZXRHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5oLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IGxcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBoZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBtKSwgci5nZXQub25DaGVja291dEVycm9yKChtID09IG51bGwgPyB2b2lkIDAgOiBtLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IEcuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogdVxuICAgIH07XG4gIH1cbiksIEhvID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHksIGgsIG0sIGY7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogcywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSB9ID0gYSwgbCA9IFcodC5jaGVja291dFBheW1lbnRNZXRob2RzLCB0cikubWV0YWRhdGEsIHUgPSBMZSh7XG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpXG4gICAgfSksIGQgPSBVZSh0LmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBfID0gYXdhaXQgZC5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICBhZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIF8pO1xuICAgICAgY29uc3QgdyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgRSA9IGF3YWl0IEQodyksIGIgPSBadChyLCBfKSwgdiA9IHRlKGIsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgQSA9IChoID0gKHkgPSBfLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaC50b2tlbjtcbiAgICAgIGlmICghQSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBVID0gYXdhaXQgd2Uodywge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBlLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogZSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiB2W3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdltwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB2W3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICBwb3N0YWxfY29kZTogdltwLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5X2NvZGU6IHZbcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGFlKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIFUpO1xuICAgICAgY29uc3QgayA9IGF3YWl0IEgodywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IEUudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGUucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShBKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgoZiA9IChtID0gay5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBtWzBdKSA9PSBudWxsID8gdm9pZCAwIDogZi5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIERlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHcsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiB2LFxuICAgICAgICBjb25maXJtUmVzdWx0OiBrLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICB0aHJvdyBoZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgbmV3IEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIEFlID0gKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IHQuZmlsdGVyKChhKSA9PiB7XG4gICAgY29uc3QgcyA9IGUgPT09IHZvaWQgMCA/ICEwIDogYS5wcm9jZXNzb3JfbmFtZSA9PT0gZSwgaSA9IGEucHJvdmlkZXIgPT09IHI7XG4gICAgcmV0dXJuIHMgJiYgaTtcbiAgfSk7XG4gIGlmIChuLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgaWYgKG4ubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgcmV0dXJuIG5bMF07XG59LCBGID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IF9vXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IFBvLFxuICAgIHJ1bjogU29cbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IFduLFxuICAgIHJ1bjogWm5cbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogRm9cbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IE9vLFxuICAgIHJ1bjogVG9cbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiAkbyxcbiAgICBydW46IHpvXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogcW8sXG4gICAgcnVuOiBZb1xuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBLbyxcbiAgICBydW46IEhvXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xudmFyIEtlID0gZnVuY3Rpb24odCwgcikge1xuICByZXR1cm4gS2UgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihlLCBuKSB7XG4gICAgZS5fX3Byb3RvX18gPSBuO1xuICB9IHx8IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBmb3IgKHZhciBhIGluIG4pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCBhKSAmJiAoZVthXSA9IG5bYV0pO1xuICB9LCBLZSh0LCByKTtcbn07XG5mdW5jdGlvbiByZSh0LCByKSB7XG4gIGlmICh0eXBlb2YgciAhPSBcImZ1bmN0aW9uXCIgJiYgciAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIEtlKHQsIHIpO1xuICBmdW5jdGlvbiBlKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0O1xuICB9XG4gIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAoZS5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IGUoKSk7XG59XG5mdW5jdGlvbiBXbyh0LCByLCBlLCBuKSB7XG4gIGZ1bmN0aW9uIGEocykge1xuICAgIHJldHVybiBzIGluc3RhbmNlb2YgZSA/IHMgOiBuZXcgZShmdW5jdGlvbihpKSB7XG4gICAgICBpKHMpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGUgfHwgKGUgPSBQcm9taXNlKSkoZnVuY3Rpb24ocywgaSkge1xuICAgIGZ1bmN0aW9uIGMoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQoZCkpO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBpKHkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhkKSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIGkoeSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUoZCkge1xuICAgICAgZC5kb25lID8gcyhkLnZhbHVlKSA6IGEoZC52YWx1ZSkudGhlbihjLCBsKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkodCwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHJyKHQsIHIpIHtcbiAgdmFyIGUgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoc1swXSAmIDEpIHRocm93IHNbMV07XG4gICAgcmV0dXJuIHNbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIGEsIHMsIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBpLm5leHQgPSBjKDApLCBpLnRocm93ID0gYygxKSwgaS5yZXR1cm4gPSBjKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBpO1xuICBmdW5jdGlvbiBjKHUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZCkge1xuICAgICAgcmV0dXJuIGwoW3UsIGRdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGwodSkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgaSAmJiAoaSA9IDAsIHVbMF0gJiYgKGUgPSAwKSksIGU7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgYSAmJiAocyA9IHVbMF0gJiAyID8gYS5yZXR1cm4gOiB1WzBdID8gYS50aHJvdyB8fCAoKHMgPSBhLnJldHVybikgJiYgcy5jYWxsKGEpLCAwKSA6IGEubmV4dCkgJiYgIShzID0gcy5jYWxsKGEsIHVbMV0pKS5kb25lKSByZXR1cm4gcztcbiAgICAgIHN3aXRjaCAoYSA9IDAsIHMgJiYgKHUgPSBbdVswXSAmIDIsIHMudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBlLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBlLmxhYmVsKyssIGEgPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHMgPSBlLnRyeXMsICEocyA9IHMubGVuZ3RoID4gMCAmJiBzW3MubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIXMgfHwgdVsxXSA+IHNbMF0gJiYgdVsxXSA8IHNbM10pKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiBlLmxhYmVsIDwgc1sxXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMV0sIHMgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzICYmIGUubGFiZWwgPCBzWzJdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gc1syXSwgZS5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzWzJdICYmIGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gci5jYWxsKHQsIGUpO1xuICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgIHUgPSBbNiwgZF0sIGEgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gcyA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGRlKHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSByICYmIHRbcl0sIG4gPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbCh0KTtcbiAgaWYgKHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdCAmJiBuID49IHQubGVuZ3RoICYmICh0ID0gdm9pZCAwKSwgeyB2YWx1ZTogdCAmJiB0W24rK10sIGRvbmU6ICF0IH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHIgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5mdW5jdGlvbiBJZSh0LCByKSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdFtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiB0O1xuICB2YXIgbiA9IGUuY2FsbCh0KSwgYSwgcyA9IFtdLCBpO1xuICB0cnkge1xuICAgIGZvciAoOyAociA9PT0gdm9pZCAwIHx8IHItLSA+IDApICYmICEoYSA9IG4ubmV4dCgpKS5kb25lOyApIHMucHVzaChhLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGkgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGEgJiYgIWEuZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIFJlKHQsIHIsIGUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBhID0gci5sZW5ndGgsIHM7IG4gPCBhOyBuKyspXG4gICAgKHMgfHwgIShuIGluIHIpKSAmJiAocyB8fCAocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsIDAsIG4pKSwgc1tuXSA9IHJbbl0pO1xuICByZXR1cm4gdC5jb25jYXQocyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSk7XG59XG5mdW5jdGlvbiB1ZSh0KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgdWUgPyAodGhpcy52ID0gdCwgdGhpcykgOiBuZXcgdWUodCk7XG59XG5mdW5jdGlvbiBabyh0LCByLCBlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gZS5hcHBseSh0LCByIHx8IFtdKSwgYSwgcyA9IFtdO1xuICByZXR1cm4gYSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIGMoXCJuZXh0XCIpLCBjKFwidGhyb3dcIiksIGMoXCJyZXR1cm5cIiwgaSksIGFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGE7XG4gIGZ1bmN0aW9uIGkobSkge1xuICAgIHJldHVybiBmdW5jdGlvbihmKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGYpLnRoZW4obSwgeSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKG0sIGYpIHtcbiAgICBuW21dICYmIChhW21dID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHcsIEUpIHtcbiAgICAgICAgcy5wdXNoKFttLCBfLCB3LCBFXSkgPiAxIHx8IGwobSwgXyk7XG4gICAgICB9KTtcbiAgICB9LCBmICYmIChhW21dID0gZihhW21dKSkpO1xuICB9XG4gIGZ1bmN0aW9uIGwobSwgZikge1xuICAgIHRyeSB7XG4gICAgICB1KG5bbV0oZikpO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIGgoc1swXVszXSwgXyk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHUobSkge1xuICAgIG0udmFsdWUgaW5zdGFuY2VvZiB1ZSA/IFByb21pc2UucmVzb2x2ZShtLnZhbHVlLnYpLnRoZW4oZCwgeSkgOiBoKHNbMF1bMl0sIG0pO1xuICB9XG4gIGZ1bmN0aW9uIGQobSkge1xuICAgIGwoXCJuZXh0XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIHkobSkge1xuICAgIGwoXCJ0aHJvd1wiLCBtKTtcbiAgfVxuICBmdW5jdGlvbiBoKG0sIGYpIHtcbiAgICBtKGYpLCBzLnNoaWZ0KCksIHMubGVuZ3RoICYmIGwoc1swXVswXSwgc1swXVsxXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIEpvKHQpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgZTtcbiAgcmV0dXJuIHIgPyByLmNhbGwodCkgOiAodCA9IHR5cGVvZiBkZSA9PSBcImZ1bmN0aW9uXCIgPyBkZSh0KSA6IHRbU3ltYm9sLml0ZXJhdG9yXSgpLCBlID0ge30sIG4oXCJuZXh0XCIpLCBuKFwidGhyb3dcIiksIG4oXCJyZXR1cm5cIiksIGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUpO1xuICBmdW5jdGlvbiBuKHMpIHtcbiAgICBlW3NdID0gdFtzXSAmJiBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYywgbCkge1xuICAgICAgICBpID0gdFtzXShpKSwgYShjLCBsLCBpLmRvbmUsIGkudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBhKHMsIGksIGMsIGwpIHtcbiAgICBQcm9taXNlLnJlc29sdmUobCkudGhlbihmdW5jdGlvbih1KSB7XG4gICAgICBzKHsgdmFsdWU6IHUsIGRvbmU6IGMgfSk7XG4gICAgfSwgaSk7XG4gIH1cbn1cbmZ1bmN0aW9uIFIodCkge1xuICByZXR1cm4gdHlwZW9mIHQgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gamUodCkge1xuICB2YXIgciA9IGZ1bmN0aW9uKG4pIHtcbiAgICBFcnJvci5jYWxsKG4pLCBuLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH0sIGUgPSB0KHIpO1xuICByZXR1cm4gZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZSwgZTtcbn1cbnZhciB6ZSA9IGplKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBlID8gZS5sZW5ndGggKyBgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG5gICsgZS5tYXAoZnVuY3Rpb24obiwgYSkge1xuICAgICAgcmV0dXJuIGEgKyAxICsgXCIpIFwiICsgbi50b1N0cmluZygpO1xuICAgIH0pLmpvaW4oYFxuICBgKSA6IFwiXCIsIHRoaXMubmFtZSA9IFwiVW5zdWJzY3JpcHRpb25FcnJvclwiLCB0aGlzLmVycm9ycyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIEZlKHQsIHIpIHtcbiAgaWYgKHQpIHtcbiAgICB2YXIgZSA9IHQuaW5kZXhPZihyKTtcbiAgICAwIDw9IGUgJiYgdC5zcGxpY2UoZSwgMSk7XG4gIH1cbn1cbnZhciBiZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IHIsIHRoaXMuY2xvc2VkID0gITEsIHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBlLCBuLCBhLCBzO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gITA7XG4gICAgICB2YXIgaSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgIGlmIChpKVxuICAgICAgICBpZiAodGhpcy5fcGFyZW50YWdlID0gbnVsbCwgQXJyYXkuaXNBcnJheShpKSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IGRlKGkpLCBsID0gYy5uZXh0KCk7ICFsLmRvbmU7IGwgPSBjLm5leHQoKSkge1xuICAgICAgICAgICAgICB2YXIgdSA9IGwudmFsdWU7XG4gICAgICAgICAgICAgIHUucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgIHIgPSB7IGVycm9yOiBfIH07XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGwgJiYgIWwuZG9uZSAmJiAoZSA9IGMucmV0dXJuKSAmJiBlLmNhbGwoYyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBpLnJlbW92ZSh0aGlzKTtcbiAgICAgIHZhciBkID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICBpZiAoUihkKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkKCk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICBzID0gXyBpbnN0YW5jZW9mIHplID8gXy5lcnJvcnMgOiBbX107XG4gICAgICAgIH1cbiAgICAgIHZhciB5ID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgIGlmICh5KSB7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIGggPSBkZSh5KSwgbSA9IGgubmV4dCgpOyAhbS5kb25lOyBtID0gaC5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBmID0gbS52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHV0KGYpO1xuICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgICBzID0gcyA/PyBbXSwgXyBpbnN0YW5jZW9mIHplID8gcyA9IFJlKFJlKFtdLCBJZShzKSksIEllKF8uZXJyb3JzKSkgOiBzLnB1c2goXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgbiA9IHsgZXJyb3I6IF8gfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbSAmJiAhbS5kb25lICYmIChhID0gaC5yZXR1cm4pICYmIGEuY2FsbChoKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocylcbiAgICAgICAgdGhyb3cgbmV3IHplKHMpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIGlmIChyICYmIHIgIT09IHRoaXMpXG4gICAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICAgIHV0KHIpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgdCkge1xuICAgICAgICAgIGlmIChyLmNsb3NlZCB8fCByLl9oYXNQYXJlbnQodGhpcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgci5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKGUgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogW10pLnB1c2gocik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgcmV0dXJuIGUgPT09IHIgfHwgQXJyYXkuaXNBcnJheShlKSAmJiBlLmluY2x1ZGVzKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoZSkgPyAoZS5wdXNoKHIpLCBlKSA6IGUgPyBbZSwgcl0gOiByO1xuICB9LCB0LnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIGUgPT09IHIgPyB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsIDogQXJyYXkuaXNBcnJheShlKSAmJiBGZShlLCByKTtcbiAgfSwgdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fZmluYWxpemVycztcbiAgICBlICYmIEZlKGUsIHIpLCByIGluc3RhbmNlb2YgdCAmJiByLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gIH0sIHQuRU1QVFkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gITAsIHI7XG4gIH0oKSwgdDtcbn0oKSwgbnIgPSBiZS5FTVBUWTtcbmZ1bmN0aW9uIG9yKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBiZSB8fCB0ICYmIFwiY2xvc2VkXCIgaW4gdCAmJiBSKHQucmVtb3ZlKSAmJiBSKHQuYWRkKSAmJiBSKHQudW5zdWJzY3JpYmUpO1xufVxuZnVuY3Rpb24gdXQodCkge1xuICBSKHQpID8gdCgpIDogdC51bnN1YnNjcmliZSgpO1xufVxudmFyIGFyID0ge1xuICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gIFByb21pc2U6IHZvaWQgMCxcbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogITEsXG4gIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogITFcbn0sIHNyID0ge1xuICBzZXRUaW1lb3V0OiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgUmUoW3QsIHJdLCBJZShlKSkpO1xuICB9LFxuICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gKGNsZWFyVGltZW91dCkodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn07XG5mdW5jdGlvbiBpcih0KSB7XG4gIHNyLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgdDtcbiAgfSk7XG59XG5mdW5jdGlvbiBkdCgpIHtcbn1cbmZ1bmN0aW9uIFNlKHQpIHtcbiAgdCgpO1xufVxudmFyIGV0ID0gZnVuY3Rpb24odCkge1xuICByZShyLCB0KTtcbiAgZnVuY3Rpb24gcihlKSB7XG4gICAgdmFyIG4gPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gbi5pc1N0b3BwZWQgPSAhMSwgZSA/IChuLmRlc3RpbmF0aW9uID0gZSwgb3IoZSkgJiYgZS5hZGQobikpIDogbi5kZXN0aW5hdGlvbiA9IGVhLCBuO1xuICB9XG4gIHJldHVybiByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4sIGEpIHtcbiAgICByZXR1cm4gbmV3IEhlKGUsIG4sIGEpO1xuICB9LCByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuX25leHQoZSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9lcnJvcihlKSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2NvbXBsZXRlKCkpO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xvc2VkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbCk7XG4gIH0sIHIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByO1xufShiZSksIEJvID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBHZSh0LCByKSB7XG4gIHJldHVybiBCby5jYWxsKHQsIHIpO1xufVxudmFyIFFvID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcjtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLm5leHQpXG4gICAgICB0cnkge1xuICAgICAgICBlLm5leHQocik7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIENlKG4pO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLmVycm9yKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5lcnJvcihyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgQ2Uobik7XG4gICAgICB9XG4gICAgZWxzZVxuICAgICAgQ2Uocik7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5jb21wbGV0ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIHIuY29tcGxldGUoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgQ2UoZSk7XG4gICAgICB9XG4gIH0sIHQ7XG59KCksIEhlID0gZnVuY3Rpb24odCkge1xuICByZShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuLCBhKSB7XG4gICAgdmFyIHMgPSB0LmNhbGwodGhpcykgfHwgdGhpcywgaTtcbiAgICBpZiAoUihlKSB8fCAhZSlcbiAgICAgIGkgPSB7XG4gICAgICAgIG5leHQ6IGUgPz8gdm9pZCAwLFxuICAgICAgICBlcnJvcjogbiA/PyB2b2lkIDAsXG4gICAgICAgIGNvbXBsZXRlOiBhID8/IHZvaWQgMFxuICAgICAgfTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBjO1xuICAgICAgcyAmJiBhci51c2VEZXByZWNhdGVkTmV4dENvbnRleHQgPyAoYyA9IE9iamVjdC5jcmVhdGUoZSksIGMudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIGkgPSB7XG4gICAgICAgIG5leHQ6IGUubmV4dCAmJiBHZShlLm5leHQsIGMpLFxuICAgICAgICBlcnJvcjogZS5lcnJvciAmJiBHZShlLmVycm9yLCBjKSxcbiAgICAgICAgY29tcGxldGU6IGUuY29tcGxldGUgJiYgR2UoZS5jb21wbGV0ZSwgYylcbiAgICAgIH0pIDogaSA9IGU7XG4gICAgfVxuICAgIHJldHVybiBzLmRlc3RpbmF0aW9uID0gbmV3IFFvKGkpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShldCk7XG5mdW5jdGlvbiBDZSh0KSB7XG4gIGlyKHQpO1xufVxuZnVuY3Rpb24gWG8odCkge1xuICB0aHJvdyB0O1xufVxudmFyIGVhID0ge1xuICBjbG9zZWQ6ICEwLFxuICBuZXh0OiBkdCxcbiAgZXJyb3I6IFhvLFxuICBjb21wbGV0ZTogZHRcbn0sIHR0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiO1xufSgpO1xuZnVuY3Rpb24gdGEodCkge1xuICByZXR1cm4gdDtcbn1cbmZ1bmN0aW9uIHJhKHQpIHtcbiAgcmV0dXJuIHQubGVuZ3RoID09PSAwID8gdGEgOiB0Lmxlbmd0aCA9PT0gMSA/IHRbMF0gOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKG4sIGEpIHtcbiAgICAgIHJldHVybiBhKG4pO1xuICAgIH0sIGUpO1xuICB9O1xufVxudmFyIFggPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgciAmJiAodGhpcy5fc3Vic2NyaWJlID0gcik7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSBuZXcgdCgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGUub3BlcmF0b3IgPSByLCBlO1xuICB9LCB0LnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihyLCBlLCBuKSB7XG4gICAgdmFyIGEgPSB0aGlzLCBzID0gb2EocikgPyByIDogbmV3IEhlKHIsIGUsIG4pO1xuICAgIHJldHVybiBTZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpID0gYSwgYyA9IGkub3BlcmF0b3IsIGwgPSBpLnNvdXJjZTtcbiAgICAgIHMuYWRkKGMgPyBjLmNhbGwocywgbCkgOiBsID8gYS5fc3Vic2NyaWJlKHMpIDogYS5fdHJ5U3Vic2NyaWJlKHMpKTtcbiAgICB9KSwgcztcbiAgfSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByLmVycm9yKGUpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHIsIGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIGUgPSBwdChlKSwgbmV3IGUoZnVuY3Rpb24oYSwgcykge1xuICAgICAgdmFyIGkgPSBuZXcgSGUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHIoYyk7XG4gICAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgICAgcyhsKSwgaS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHMsXG4gICAgICAgIGNvbXBsZXRlOiBhXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKGkpO1xuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIHJldHVybiAoZSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnN1YnNjcmliZShyKTtcbiAgfSwgdC5wcm90b3R5cGVbdHRdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHQucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciByID0gW10sIGUgPSAwOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKVxuICAgICAgcltlXSA9IGFyZ3VtZW50c1tlXTtcbiAgICByZXR1cm4gcmEocikodGhpcyk7XG4gIH0sIHQucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSBwdChyKSwgbmV3IHIoZnVuY3Rpb24obiwgYSkge1xuICAgICAgdmFyIHM7XG4gICAgICBlLnN1YnNjcmliZShmdW5jdGlvbihpKSB7XG4gICAgICAgIHJldHVybiBzID0gaTtcbiAgICAgIH0sIGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgcmV0dXJuIGEoaSk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4ocyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIG5ldyB0KHIpO1xuICB9LCB0O1xufSgpO1xuZnVuY3Rpb24gcHQodCkge1xuICB2YXIgcjtcbiAgcmV0dXJuIChyID0gdCA/PyBhci5Qcm9taXNlKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIG5hKHQpIHtcbiAgcmV0dXJuIHQgJiYgUih0Lm5leHQpICYmIFIodC5lcnJvcikgJiYgUih0LmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIG9hKHQpIHtcbiAgcmV0dXJuIHQgJiYgdCBpbnN0YW5jZW9mIGV0IHx8IG5hKHQpICYmIG9yKHQpO1xufVxuZnVuY3Rpb24gYWEodCkge1xuICByZXR1cm4gUih0ID09IG51bGwgPyB2b2lkIDAgOiB0LmxpZnQpO1xufVxuZnVuY3Rpb24gc2EodCkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGlmIChhYShyKSlcbiAgICAgIHJldHVybiByLmxpZnQoZnVuY3Rpb24oZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB0KGUsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gaWEodCwgciwgZSwgbiwgYSkge1xuICByZXR1cm4gbmV3IGNhKHQsIHIsIGUsIG4sIGEpO1xufVxudmFyIGNhID0gZnVuY3Rpb24odCkge1xuICByZShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuLCBhLCBzLCBpLCBjKSB7XG4gICAgdmFyIGwgPSB0LmNhbGwodGhpcywgZSkgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gaSwgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgZS5lcnJvcihkKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gcyA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHModSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIGUuZXJyb3IoZCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBhID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIGUuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChlID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgfHwgZS5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHI7XG59KGV0KSwgbGEgPSBqZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIGNyID0gZnVuY3Rpb24odCkge1xuICByZShyLCB0KTtcbiAgZnVuY3Rpb24gcigpIHtcbiAgICB2YXIgZSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBlLmNsb3NlZCA9ICExLCBlLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBlLm9ic2VydmVycyA9IFtdLCBlLmlzU3RvcHBlZCA9ICExLCBlLmhhc0Vycm9yID0gITEsIGUudGhyb3duRXJyb3IgPSBudWxsLCBlO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gbmV3IG10KHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gZSwgbjtcbiAgfSwgci5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgbGEoKTtcbiAgfSwgci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgU2UoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYSwgcztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gZGUobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IGkubmV4dCgpOyAhYy5kb25lOyBjID0gaS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBhID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKHMgPSBpLnJldHVybikgJiYgcy5jYWxsKGkpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIFNlKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gZTtcbiAgICAgICAgZm9yICh2YXIgYSA9IG4ub2JzZXJ2ZXJzOyBhLmxlbmd0aDsgKVxuICAgICAgICAgIGEuc2hpZnQoKS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgU2UoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZS5fdGhyb3dJZkNsb3NlZCgpLCAhZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgZS5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IGUub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoKGUgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksIHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpO1xuICB9LCByLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBhID0gdGhpcywgcyA9IGEuaGFzRXJyb3IsIGkgPSBhLmlzU3RvcHBlZCwgYyA9IGEub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBzIHx8IGkgPyBuciA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2goZSksIG5ldyBiZShmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIEZlKGMsIGUpO1xuICAgIH0pKTtcbiAgfSwgci5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBhID0gbi5oYXNFcnJvciwgcyA9IG4udGhyb3duRXJyb3IsIGkgPSBuLmlzU3RvcHBlZDtcbiAgICBhID8gZS5lcnJvcihzKSA6IGkgJiYgZS5jb21wbGV0ZSgpO1xuICB9LCByLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IG5ldyBYKCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZTtcbiAgfSwgci5jcmVhdGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIG5ldyBtdChlLCBuKTtcbiAgfSwgcjtcbn0oWCksIG10ID0gZnVuY3Rpb24odCkge1xuICByZShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGEgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gYS5kZXN0aW5hdGlvbiA9IGUsIGEuc291cmNlID0gbiwgYTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgYTtcbiAgICAoYSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5uZXh0KSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgYS5jYWxsKG4sIGUpO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgYTtcbiAgICAoYSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5lcnJvcikgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwIHx8IGEuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbjtcbiAgICAobiA9IChlID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5jb21wbGV0ZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwIHx8IG4uY2FsbChlKTtcbiAgfSwgci5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgYTtcbiAgICByZXR1cm4gKGEgPSAobiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLnN1YnNjcmliZShlKSkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IG5yO1xuICB9LCByO1xufShjciksIHVhID0ge1xuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBkYSA9IGZ1bmN0aW9uKHQpIHtcbiAgcmUociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHJldHVybiB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHI7XG59KGJlKSwgeXQgPSB7XG4gIHNldEludGVydmFsOiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIFJlKFt0LCByXSwgSWUoZSkpKTtcbiAgfSxcbiAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBjbGVhckludGVydmFsKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBwYSA9IGZ1bmN0aW9uKHQpIHtcbiAgcmUociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBhID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuc2NoZWR1bGVyID0gZSwgYS53b3JrID0gbiwgYS5wZW5kaW5nID0gITEsIGE7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBhO1xuICAgIGlmIChuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgdGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN0YXRlID0gZTtcbiAgICB2YXIgcyA9IHRoaXMuaWQsIGkgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICByZXR1cm4gcyAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChpLCBzLCBuKSksIHRoaXMucGVuZGluZyA9ICEwLCB0aGlzLmRlbGF5ID0gbiwgdGhpcy5pZCA9IChhID0gdGhpcy5pZCkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoaSwgdGhpcy5pZCwgbiksIHRoaXM7XG4gIH0sIHIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgYSkge1xuICAgIHJldHVybiBhID09PSB2b2lkIDAgJiYgKGEgPSAwKSwgeXQuc2V0SW50ZXJ2YWwoZS5mbHVzaC5iaW5kKGUsIHRoaXMpLCBhKTtcbiAgfSwgci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihlLCBuLCBhKSB7XG4gICAgaWYgKGEgPT09IHZvaWQgMCAmJiAoYSA9IDApLCBhICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gYSAmJiB0aGlzLnBlbmRpbmcgPT09ICExKVxuICAgICAgcmV0dXJuIG47XG4gICAgbiAhPSBudWxsICYmIHl0LmNsZWFySW50ZXJ2YWwobik7XG4gIH0sIHIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb25cIik7XG4gICAgdGhpcy5wZW5kaW5nID0gITE7XG4gICAgdmFyIGEgPSB0aGlzLl9leGVjdXRlKGUsIG4pO1xuICAgIGlmIChhKVxuICAgICAgcmV0dXJuIGE7XG4gICAgdGhpcy5wZW5kaW5nID09PSAhMSAmJiB0aGlzLmlkICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKSk7XG4gIH0sIHIucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBhID0gITEsIHM7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29yayhlKTtcbiAgICB9IGNhdGNoIChpKSB7XG4gICAgICBhID0gITAsIHMgPSBpIHx8IG5ldyBFcnJvcihcIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3JcIik7XG4gICAgfVxuICAgIGlmIChhKVxuICAgICAgcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSwgcztcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB2YXIgZSA9IHRoaXMsIG4gPSBlLmlkLCBhID0gZS5zY2hlZHVsZXIsIHMgPSBhLmFjdGlvbnM7XG4gICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsLCB0aGlzLnBlbmRpbmcgPSAhMSwgRmUocywgdGhpcyksIG4gIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoYSwgbiwgbnVsbCkpLCB0aGlzLmRlbGF5ID0gbnVsbCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHI7XG59KGRhKSwgZnQgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyLCBlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gdC5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSByLCB0aGlzLm5vdyA9IGU7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCByKS5zY2hlZHVsZShuLCBlKTtcbiAgfSwgdC5ub3cgPSB1YS5ub3csIHQ7XG59KCksIG1hID0gZnVuY3Rpb24odCkge1xuICByZShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgbiA9PT0gdm9pZCAwICYmIChuID0gZnQubm93KTtcbiAgICB2YXIgYSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLmFjdGlvbnMgPSBbXSwgYS5fYWN0aXZlID0gITEsIGE7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcy5hY3Rpb25zO1xuICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgIG4ucHVzaChlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGE7XG4gICAgdGhpcy5fYWN0aXZlID0gITA7XG4gICAgZG9cbiAgICAgIGlmIChhID0gZS5leGVjdXRlKGUuc3RhdGUsIGUuZGVsYXkpKVxuICAgICAgICBicmVhaztcbiAgICB3aGlsZSAoZSA9IG4uc2hpZnQoKSk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9ICExLCBhKSB7XG4gICAgICBmb3IgKDsgZSA9IG4uc2hpZnQoKTsgKVxuICAgICAgICBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aHJvdyBhO1xuICAgIH1cbiAgfSwgcjtcbn0oZnQpLCB5YSA9IG5ldyBtYShwYSksIGZhID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4gdCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdCAhPSBcImZ1bmN0aW9uXCI7XG59O1xuZnVuY3Rpb24gaGEodCkge1xuICByZXR1cm4gUih0ID09IG51bGwgPyB2b2lkIDAgOiB0LnRoZW4pO1xufVxuZnVuY3Rpb24gX2EodCkge1xuICByZXR1cm4gUih0W3R0XSk7XG59XG5mdW5jdGlvbiBnYSh0KSB7XG4gIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBSKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cbmZ1bmN0aW9uIHdhKHQpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAodCAhPT0gbnVsbCAmJiB0eXBlb2YgdCA9PSBcIm9iamVjdFwiID8gXCJhbiBpbnZhbGlkIG9iamVjdFwiIDogXCInXCIgKyB0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5mdW5jdGlvbiBiYSgpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT0gXCJmdW5jdGlvblwiIHx8ICFTeW1ib2wuaXRlcmF0b3IgPyBcIkBAaXRlcmF0b3JcIiA6IFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciB2YSA9IGJhKCk7XG5mdW5jdGlvbiBFYSh0KSB7XG4gIHJldHVybiBSKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbdmFdKTtcbn1cbmZ1bmN0aW9uIENhKHQpIHtcbiAgcmV0dXJuIFpvKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG4sIGEsIHM7XG4gICAgcmV0dXJuIHJyKHRoaXMsIGZ1bmN0aW9uKGkpIHtcbiAgICAgIHN3aXRjaCAoaS5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgZSA9IHQuZ2V0UmVhZGVyKCksIGkubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaS50cnlzLnB1c2goWzEsICwgOSwgMTBdKSwgaS5sYWJlbCA9IDI7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gWzQsIHVlKGUucmVhZCgpKV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gbiA9IGkuc2VudCgpLCBhID0gbi52YWx1ZSwgcyA9IG4uZG9uZSwgcyA/IFs0LCB1ZSh2b2lkIDApXSA6IFszLCA1XTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMiwgaS5zZW50KCldO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFs0LCB1ZShhKV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gWzQsIGkuc2VudCgpXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBpLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gZS5yZWxlYXNlTG9jaygpLCBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBQYSh0KSB7XG4gIHJldHVybiBSKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZ2V0UmVhZGVyKTtcbn1cbmZ1bmN0aW9uIFNhKHQpIHtcbiAgaWYgKHQgaW5zdGFuY2VvZiBYKVxuICAgIHJldHVybiB0O1xuICBpZiAodCAhPSBudWxsKSB7XG4gICAgaWYgKF9hKHQpKVxuICAgICAgcmV0dXJuIGthKHQpO1xuICAgIGlmIChmYSh0KSlcbiAgICAgIHJldHVybiBBYSh0KTtcbiAgICBpZiAoaGEodCkpXG4gICAgICByZXR1cm4gSWEodCk7XG4gICAgaWYgKGdhKHQpKVxuICAgICAgcmV0dXJuIGxyKHQpO1xuICAgIGlmIChFYSh0KSlcbiAgICAgIHJldHVybiBSYSh0KTtcbiAgICBpZiAoUGEodCkpXG4gICAgICByZXR1cm4gRmEodCk7XG4gIH1cbiAgdGhyb3cgd2EodCk7XG59XG5mdW5jdGlvbiBrYSh0KSB7XG4gIHJldHVybiBuZXcgWChmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0W3R0XSgpO1xuICAgIGlmIChSKGUuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiBlLnN1YnNjcmliZShyKTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gQWEodCkge1xuICByZXR1cm4gbmV3IFgoZnVuY3Rpb24ocikge1xuICAgIGZvciAodmFyIGUgPSAwOyBlIDwgdC5sZW5ndGggJiYgIXIuY2xvc2VkOyBlKyspXG4gICAgICByLm5leHQodFtlXSk7XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIElhKHQpIHtcbiAgcmV0dXJuIG5ldyBYKGZ1bmN0aW9uKHIpIHtcbiAgICB0LnRoZW4oZnVuY3Rpb24oZSkge1xuICAgICAgci5jbG9zZWQgfHwgKHIubmV4dChlKSwgci5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KS50aGVuKG51bGwsIGlyKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBSYSh0KSB7XG4gIHJldHVybiBuZXcgWChmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGEgPSBkZSh0KSwgcyA9IGEubmV4dCgpOyAhcy5kb25lOyBzID0gYS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIGkgPSBzLnZhbHVlO1xuICAgICAgICBpZiAoci5uZXh0KGkpLCByLmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAoYykge1xuICAgICAgZSA9IHsgZXJyb3I6IGMgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyAmJiAhcy5kb25lICYmIChuID0gYS5yZXR1cm4pICYmIG4uY2FsbChhKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbHIodCkge1xuICByZXR1cm4gbmV3IFgoZnVuY3Rpb24ocikge1xuICAgIE1hKHQsIHIpLmNhdGNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiByLmVycm9yKGUpO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEZhKHQpIHtcbiAgcmV0dXJuIGxyKENhKHQpKTtcbn1cbmZ1bmN0aW9uIE1hKHQsIHIpIHtcbiAgdmFyIGUsIG4sIGEsIHM7XG4gIHJldHVybiBXbyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGksIGM7XG4gICAgcmV0dXJuIHJyKHRoaXMsIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHN3aXRjaCAobC5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgbC50cnlzLnB1c2goWzAsIDUsIDYsIDExXSksIGUgPSBKbyh0KSwgbC5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gWzQsIGUubmV4dCgpXTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmIChuID0gbC5zZW50KCksICEhbi5kb25lKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgIGlmIChpID0gbi52YWx1ZSwgci5uZXh0KGkpLCByLmNsb3NlZClcbiAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgbC5sYWJlbCA9IDM7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gWzMsIDFdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gYyA9IGwuc2VudCgpLCBhID0geyBlcnJvcjogYyB9LCBbMywgMTFdO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIGwudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSksIG4gJiYgIW4uZG9uZSAmJiAocyA9IGUucmV0dXJuKSA/IFs0LCBzLmNhbGwoZSldIDogWzMsIDhdO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbC5zZW50KCksIGwubGFiZWwgPSA4O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIHIuY29tcGxldGUoKSwgWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIE9hKHQsIHIsIGUsIG4sIGEpIHtcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gMCksIGEgPT09IHZvaWQgMCAmJiAoYSA9ICExKTtcbiAgdmFyIHMgPSByLnNjaGVkdWxlKGZ1bmN0aW9uKCkge1xuICAgIGUoKSwgYSA/IHQuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgbikpIDogdGhpcy51bnN1YnNjcmliZSgpO1xuICB9LCBuKTtcbiAgaWYgKHQuYWRkKHMpLCAhYSlcbiAgICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIFRhKHQsIHIpIHtcbiAgdmFyIGUgPSBSKHQpID8gdCA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0O1xuICB9LCBuID0gZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBhLmVycm9yKGUoKSk7XG4gIH07XG4gIHJldHVybiBuZXcgWChuKTtcbn1cbnZhciBEYSA9IGplKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIE5hKHQsIHIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgYSA9ICExLCBzO1xuICAgIHQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgcyA9IGksIGEgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgYSA/IGUocykgOiBuKG5ldyBEYSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBMYSh0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odCk7XG59XG52YXIgVWEgPSBqZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gbnVsbCksIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gamEodCwgcikge1xuICB2YXIgZSA9IExhKHQpID8geyBmaXJzdDogdCB9IDogdHlwZW9mIHQgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogdCB9IDogdCwgbiA9IGUuZmlyc3QsIGEgPSBlLmVhY2gsIHMgPSBlLndpdGgsIGkgPSBzID09PSB2b2lkIDAgPyB4YSA6IHMsIGMgPSBlLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/IHlhIDogYywgdSA9IGUubWV0YSwgZCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAobiA9PSBudWxsICYmIGEgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBzYShmdW5jdGlvbih5LCBoKSB7XG4gICAgdmFyIG0sIGYsIF8gPSBudWxsLCB3ID0gMCwgRSA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgIGYgPSBPYShoLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtLnVuc3Vic2NyaWJlKCksIFNhKGkoe1xuICAgICAgICAgICAgbWV0YTogZCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogXyxcbiAgICAgICAgICAgIHNlZW46IHdcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKGgpO1xuICAgICAgICB9IGNhdGNoICh2KSB7XG4gICAgICAgICAgaC5lcnJvcih2KTtcbiAgICAgICAgfVxuICAgICAgfSwgYik7XG4gICAgfTtcbiAgICBtID0geS5zdWJzY3JpYmUoaWEoaCwgZnVuY3Rpb24oYikge1xuICAgICAgZiA9PSBudWxsIHx8IGYudW5zdWJzY3JpYmUoKSwgdysrLCBoLm5leHQoXyA9IGIpLCBhID4gMCAmJiBFKGEpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIGYgIT0gbnVsbCAmJiBmLmNsb3NlZCB8fCBmID09IG51bGwgfHwgZi51bnN1YnNjcmliZSgpLCBfID0gbnVsbDtcbiAgICB9KSksICF3ICYmIEUobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIGwubm93KCkgOiBhKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB4YSh0KSB7XG4gIHRocm93IG5ldyBVYSh0KTtcbn1cbmNsYXNzIGtlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogciB9LCB0aGlzLl9zdWJqZWN0Lm5leHQociksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHIsIGUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiByLCBlcnJNc2c6IGUgfSwgdGhpcy5fc3ViamVjdC5lcnJvcihyKTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHIpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiByLCB0aGlzLnN1YnNjcmliZSA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHIodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpLCBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmIFFlKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHtcbiAgICAgICAgZmlyc3Q6IHIudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gVGEoKCkgPT4gbmV3IEVycm9yKHIudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIE5hKHRoaXMuX3N1YmplY3QucGlwZShqYShlKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBjcigpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiAkYSwgZXJyX186IHphIH0gPSBTKFwiaW5pdC1mbG93c1wiKSwgc2UgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gbmV3IGtlKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiBlLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZS5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGEgPSBhd2FpdCByKG4pO1xuICAgICAgICAkYShg4pyUICR7dH0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBhKSwgZS5zZXQoYSk7XG4gICAgICB9IGNhdGNoIChhKSB7XG4gICAgICAgIHphKGDwnZmtICR7dH0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIEsoYSksIFwiRGV0YWlsczpcIiwgYSksIGUudGhyb3coYSwgSyhhKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgR2EgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKHQpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogciwgZm9ybUNhbGxiYWNrczogZSB9KSkpO1xufSwgVmEgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogc2UoXCJTdHJpcGUgUFJcIiwgRi5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogc2UoXCJTdHJpcGUgTGlua1wiLCBGLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiBzZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgRi5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogc2UoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgRi5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBzZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIEYuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBzZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgRi5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IHFhIH0gPSBTKFwiZm9ybS1jYWxsYmFja3NcIiksIGogPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBodCA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBqLFxuICBvbkJsdXI6IGosXG4gIG9uQ2hhbmdlOiBqLFxuICBvbkxvYWQ6IGosXG4gIG9uTG9hZEVycm9yOiBqLFxuICBvblZhbGlkYXRpb25FcnJvcjogaixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IGosXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBqLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IGosXG4gIG9uQ2hlY2tvdXRFcnJvcjogaixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IGpcbn0pLCBZID0gY2xhc3MgWSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHIpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFkuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXMocikuZm9yRWFjaCgoW2UsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSB3cihlLCBuID8/IFkuTk9PUCwgcWEpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3NbZV0gPSBhO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0gWS5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xuWS5OT09QID0gKCkgPT4ge1xufSwgWS5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgciA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoaHQua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgcltlXSA9IFkuTk9PUDtcbiAgfSksIHI7XG59LCBZLmZyb21PYmplY3QgPSAocikgPT4ge1xuICBjb25zdCBlID0gbmV3IFkoKTtcbiAgcmV0dXJuIGUuc2V0Q2FsbGJhY2tzKGh0LnBhcnNlKHIpKSwgZTtcbn07XG5sZXQgV2UgPSBZO1xuY2xhc3MgWWEge1xuICBjb25zdHJ1Y3RvcihyLCBlLCBuLCBhKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKHMpID0+IHtcbiAgICAgIGlmICghcy5zb3VyY2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgIGlmIChfdChzLm9yaWdpbikgIT09IF90KHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIHMuZGF0YSA9PSBcIm9iamVjdFwiICYmIHMuZGF0YS5wZW5wYWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBpID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkgPSBvbihKU09OLnBhcnNlKHMuZGF0YSkpO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBVbmtub3duIGV2ZW50LiBJZ25vcmluZzpcIiwgeSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KGkpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gaSwgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gcy5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKHMpID0+IHMuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhcy5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIHMuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIHMpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMocy5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgcyksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQocy5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHIsIHRoaXMuYmFzZVVybCA9IGUsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBhO1xuICB9XG59XG5jb25zdCBfdCA9ICh0KSA9PiBuZXcgVVJMKHQpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIEthKHQsIHIpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiByXG4gIH0pLnByb21pc2UsIGEgPSBhd2FpdCBhbihuKTtcbiAgaWYgKCFzbihuLCBhKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3MgSGEge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHIsIGUpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChyLCBlKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHIgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgV2EgPSAodCwgciwgZSkgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSB0O1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGEpID0+IHtcbiAgICBpZiAoYS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHMgPSBhLmxvYWRlZFZhbHVlLCBpID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBpLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGkgJiYgZ3QoXCJhcHBsZV9wYXlcIiwgcywgciwgZSwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIGd0KFwiZ29vZ2xlX3BheVwiLCBzLCByLCBlLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwgZ3QgPSAodCwgciwgZSwgbiwgYSkgPT4gRi5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IEFlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdCksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogclxufSksIHd0ID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogWiwgZXJyX186IEogfSA9IFMoXCJvcC1mb3JtXCIpLCBCID0gY2xhc3MgQiB7XG4gIGNvbnN0cnVjdG9yKHIpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBrZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcga2UoKSwgdGhpcy5jb250ZXh0ID0gbmV3IGtlKCksIHRoaXMuaW5pdEZsb3dzID0gVmEoKSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgWihcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBaKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBlID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiB3dFxuICAgICAgICB9KTtcbiAgICAgICAgWihcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgWihcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgbiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IHd0XG4gICAgICAgIH0pO1xuICAgICAgICBaKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBaKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBhID0gQi5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGUsXG4gICAgICAgICAgbixcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGEpLCBXYSh0aGlzLmluaXRGbG93cywgYSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgWihcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgR2EodGhpcy5pbml0Rmxvd3MsIGEsIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGUudG90YWxBbW91bnRBdG9tcywgZS5jdXJyZW5jeSksIFooXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgbiA9IEsoZSk7XG4gICAgICAgIEooXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIG4pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKG4pO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGUsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgbiAmJiAobi5ub2RlLnN0eWxlLmhlaWdodCA9IGUpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC5zZXQoZSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZSksIGUpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlLCBuID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBhID0gYnIucGFyc2UoZSksIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBpID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG4pO1xuICAgICAgcy5uYW1lID0gYCR7YX0tZWxlbWVudGA7XG4gICAgICBjb25zdCBjID0gbmV3IFVSTChgL2FwcC92MS8ke3MubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gYy5zZWFyY2ggPSBpLnRvU3RyaW5nKCksIHMuc3JjID0gYy5ocmVmLCBzLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBzLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYSwgcyk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChlLCBuKSA9PiB7XG4gICAgICBjb25zdCBhID0ge1xuICAgICAgICB0eXBlOiBlLFxuICAgICAgICBub2RlOiBuLFxuICAgICAgICBtb3VudDogKHMpID0+IHtcbiAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICByZXR1cm4gKGkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpKSA9PSBudWxsID8gdm9pZCAwIDogaS5hcHBlbmRDaGlsZChuKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBhLnR5cGUsIG5vZGU6IGEubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbbGUuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW2xlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbbGUuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtsZS5DQVJEX0NWQ106IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW2VdID0gYSwgYTtcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiBuLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIG4uYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgZS5zdHlsZXMgJiYgbi5hcHBlbmQoXCJzdHlsZXNcIiwgbm4oZS5zdHlsZXMpKSwgbi5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgbjtcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZSkgPT4ge1xuICAgICAgS2EoZS5ub2RlKS50aGVuKChuKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlLnR5cGUsIG4pLCB0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5hbnlDZGVDb25uLnNldChuKTtcbiAgICAgIH0pLmNhdGNoKChuKSA9PiBKKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBuKSk7XG4gICAgfSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWUpIHtcbiAgICAgICAgSihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEYuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBBZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IFEoZS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKVxuICAgICAgICB9LFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uXG4gICAgICB9KTtcbiAgICB9LCB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCkpIHtcbiAgICAgICAgSihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbiA9IHtcbiAgICAgICAgYWlyd2FsbGV4R29vZ2xlUGF5OiB4LmFpcndhbGxleEdvb2dsZVBheSxcbiAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IHguYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogeC5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB4LmF1dGhvcml6ZW5ldEFwcGxlUGF5XG4gICAgICB9O1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFthLCBzXSkgPT4gKHtcbiAgICAgICAgbmFtZTogblthXSA/PyBhLFxuICAgICAgICAuLi5zLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IChlLCBuKSA9PiB7XG4gICAgICBjb25zdCBhID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFhKSB7XG4gICAgICAgIEooXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGUpIHtcbiAgICAgICAgY2FzZSB4LnBvY2t5dFBheXBhbDpcbiAgICAgICAgICByZXR1cm4gRi5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGEsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEFlKGEuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiksXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBRKGEuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IG4gfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIHguYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgY29uc3QgcyA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgICBKKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcy5zdGFydEZsb3cobik7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB4LmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgcyA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICAgIEooXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHMuc3RhcnRGbG93KG4pO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgeC5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBzID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICAgIEooXG4gICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcy5zdGFydEZsb3cobik7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB4LmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgcyA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICAgIEooXG4gICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzLnN0YXJ0RmxvdyhuKTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIFFlKGUpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBaKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIGUgJiYgZS5ub2RlLnJlbW92ZSgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzO1xuICAgIH0sIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKGUpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MoZSk7XG4gICAgfSwgQi5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjIuMTJcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gci5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnIsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBXZS5mcm9tT2JqZWN0KHIpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHIuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgSGEoKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgWWEodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbn07XG5CLm9qc0Zsb3dzID0gRiwgQi5hc3NpZ25Bc1NpbmdsZXRvbiA9IChyKSA9PiB7XG4gIGlmIChCLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSByO1xufSwgQi5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgQi5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHIsIGUsIG4sIGEpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHIuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTChyLmJhc2VVcmwgPz8gWmUpLm9yaWdpbixcbiAgZm9ybURpdjogYSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IGUuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHIuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxufSk7XG5sZXQgYnQgPSBCO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5hcnJheShab2RGaWVsZEVycm9yKTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbiwgZXJyb3JMb2dnZXIpID0+IHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxudmFyIFN1Ym1pdE1ldGhvZHMgPSAvKiBAX19QVVJFX18gKi8gKChTdWJtaXRNZXRob2RzMikgPT4ge1xuICBTdWJtaXRNZXRob2RzMltcInBvY2t5dFBheXBhbFwiXSA9IFwicG9ja3l0LXBheXBhbFwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEdvb2dsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhBcHBsZVBheVwiXSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEdvb2dsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRBcHBsZVBheVwiXSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xudmFyIEZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEZpZWxkTmFtZTIpID0+IHtcbiAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiTEFTVF9OQU1FXCJdID0gXCJsYXN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0geiQxLnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xueiQxLm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gIGN2YzogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImFkZHJlc3NcIiAvKiBBRERSRVNTICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZClcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoUHJpY2VRdHkpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxuKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7RWUuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtFZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke0VlLnJlZC5ib2xkKFwib2pzL1wiKX0ke0VlLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChidC5nZXRJbnN0YW5jZSgpKSB7XG4gICAgYnQuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IGJ0LmdldEluc3RhbmNlKCkgPz8gbmV3IGJ0KHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGFwcGxlUGF5OiBwcmV2LmFwcGxlUGF5LFxuICAgICAgICAgIGdvb2dsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgZ29vZ2xlUGF5OiBwcmV2Lmdvb2dsZVBheSxcbiAgICAgICAgICBhcHBsZVBheToge1xuICAgICAgICAgICAgLi4ucmVzdWx0LmxvYWRlZFZhbHVlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmb3JtLmRlc3Ryb3koKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIGlmICghb3BGb3JtKSB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KTtcbiAgfVxuICBjb25zdCBjaGlsZHJlblByb3BzID0ge1xuICAgIHN1Ym1pdDogb3BGb3JtLnN1Ym1pdENhcmQsXG4gICAgc3VibWl0V2l0aDogb3BGb3JtLmdlbmVyYWxTdWJtaXQsXG4gICAgYXBwbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5hcHBsZV9wYXksXG4gICAgZ29vZ2xlUGF5OiBwYXltZW50UmVxdWVzdHMuZ29vZ2xlX3BheSxcbiAgICBsb2FkZWQsXG4gICAgLy8gRGlzYWJsZSBkeW5hbWljIHByZXZpZXdzIGZlYXR1cmUgZm9yIG5vd1xuICAgIHByZXZpZXc6IHtcbiAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0sXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmwsXG4gICAgYWlyd2FsbGV4XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGNBQUFDLElBQVksWUFBQUMsSUFBVSxlQUFBQyxJQUFhLGFBQUFDLElBQVcsVUFBQUMsSUFBUSxXQUFBQyxVQUFlO0FBQzdGLFNBQVMsT0FBQUMsR0FBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLEtBQUtDLFNBQVc7QUFDekIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLFFBQVE7QUFFZixNQUFNQyxLQUFrQmIsR0FBYztBQUFBLEVBQ3BDLFFBQVE7QUFBQSxFQUNSLFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQixNQUFNO0FBQUEsRUFDdEI7QUFBQSxFQUNBLFNBQVM7QUFDWCxDQUFDLEdBRUtjLEtBQXFCLE1BQU07QUFDL0IsUUFBTUMsSUFBVWQsR0FBV1ksRUFBZTtBQUMxQyxNQUFJLENBQUNFO0FBQ0gsVUFBTSxJQUFJLE1BQU0sbUVBQW1FO0FBRXJGLFNBQU9BO0FBQ1QsR0FFTUMsS0FBSyw4QkFBOEJDLEtBQUtSLEVBQUksT0FBTztBQUFBLEVBQ3ZELE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLEtBQUtBLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUMzQixLQUFLQSxFQUFJLE9BQU87QUFBQSxFQUNoQixLQUFLQSxFQUFJLE9BQU87QUFDbEIsQ0FBQyxHQUFHUyxLQUFLVCxFQUFJLE1BQU1RLEVBQUUsR0FBR0UsS0FBS1YsRUFBSSxPQUFPO0FBQUEsRUFDdEMsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsU0FBU0EsRUFBSSxP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RyxDQUFDRixDQUFTLENBQUMsR0FDVEosSUFJa0IsZ0JBQUFsZ0I7QUFBQSxJQUNyQjtBQUFBLElBQ0E7QUFBQSxNQUNFLElBQUksT0FBT3FnQixDQUFPO0FBQUEsTUFDbEIsTUFBTSxHQUFHQSxDQUFPO0FBQUEsTUFDaEIsV0FBVztBQUFBLE1BQ1gsS0FBSyxHQUFHRCxDQUFPLFdBQVdDLENBQU8sYUFBYU0sQ0FBVztBQUFBLE1BQ3pELE9BQU9EO0FBQUEsTUFDUCxLQUFLRjtBQUFBLElBQ1A7QUFBQSxFQUNGLEtBYkUsUUFBUSxNQUFNLGtEQUFrRCxHQUN6QyxnQkFBQXhnQixFQUFJLE9BQU8sQ0FBQyxDQUFDO0FBYXhDLEdBRU02Z0IsS0FBaUIsQ0FBQyxFQUFFLFFBQUF2RyxFQUFPLE1BQ1IsZ0JBQUF0YSxFQUFJNmYsSUFBYyxFQUFFLFFBQUF2RixHQUFRLGFBQWE3QixHQUFnQixTQUFTLENBQUMsR0FHdEZxSSxLQUFjLENBQUMsRUFBRSxRQUFBeEcsRUFBTyxNQUNMLGdCQUFBdGEsRUFBSTZmLElBQWMsRUFBRSxRQUFBdkYsR0FBUSxhQUFhN0IsR0FBZ0IsS0FBSyxDQUFDLEdBR2xGc0ksS0FBb0IsQ0FBQyxFQUFFLFFBQUF6RyxFQUFPLE1BQ1gsZ0JBQUF0YSxFQUFJNmYsSUFBYyxFQUFFLFFBQUF2RixHQUFRLGFBQWE3QixHQUFnQixZQUFZLENBQUMsR0FHekZ1SSxLQUFvQixDQUFDLEVBQUUsUUFBQTFHLEVBQU8sTUFDWCxnQkFBQXRhLEVBQUk2ZixJQUFjLEVBQUUsUUFBQXZGLEdBQVEsYUFBYTdCLEdBQWdCLFlBQVksQ0FBQzsiLAogICJuYW1lcyI6IFsiY3JlYXRlQ29udGV4dCIsICJ1c2VDb250ZXh0IiwgInVzZVN0YXRlIiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJqc3giLCAiRnJhZ21lbnQiLCAieiQxIiwgInY0IiwgImNvbm5lY3RUb0NoaWxkIiwgIkVlIiwgIkVsZW1lbnRzQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAiY29udGV4dCIsICJaZSIsICJkciIsICJwciIsICJtciIsICJ5ciIsICJmciIsICJWZSIsICJociIsICJfciIsICJlIiwgImdyIiwgIksiLCAid3IiLCAibiIsICJ4IiwgIk0iLCAiUCIsICJOIiwgIkN0IiwgIlB0IiwgIlN0IiwgImt0IiwgImxlIiwgImJyIiwgIk1lIiwgInZyIiwgIlYiLCAiRXIiLCAiQ3IiLCAiUHIiLCAiU3IiLCAia3IiLCAiQXIiLCAiSXIiLCAiUnIiLCAiRnIiLCAiTXIiLCAiT3IiLCAiVHIiLCAiX2UiLCAiRHIiLCAiTnIiLCAiTHIiLCAiVXIiLCAianIiLCAieHIiLCAiJHIiLCAiSmUiLCAienIiLCAiR3IiLCAiVnIiLCAieiIsICJxciIsICJZciIsICJBdCIsICJLciIsICJIciIsICJXciIsICJaciIsICJKciIsICJCciIsICJPZSIsICJydCIsICJJdCIsICJRciIsICJYciIsICJzIiwgImkiLCAiZW4iLCAidG4iLCAicm4iLCAiYSIsICJjIiwgIm5uIiwgIlEiLCAib24iLCAiYW4iLCAic24iLCAiY24iLCAiUnQiLCAiRnQiLCAibG4iLCAidW4iLCAiZ2UiLCAiZG4iLCAicG4iLCAiTXQiLCAibW4iLCAieW4iLCAiZm4iLCAibnQiLCAiT3QiLCAib3QiLCAiVHQiLCAiaG4iLCAiX24iLCAiRHQiLCAiZ24iLCAid24iLCAiYm4iLCAidm4iLCAiRW4iLCAiTnQiLCAiQ24iLCAiUG4iLCAiU24iLCAia24iLCAiQW4iLCAiSW4iLCAiUm4iLCAiRm4iLCAiTHQiLCAiVCIsICJPbiIsICJNbiIsICJUbiIsICJEIiwgIndlIiwgIkRuIiwgIk5uIiwgIkgiLCAiTG4iLCAiVW4iLCAiam4iLCAicGUiLCAieG4iLCAiYXQiLCAiJG4iLCAiQmUiLCAiVXQiLCAiem4iLCAianQiLCAieHQiLCAiUWUiLCAiZWUiLCAibWUiLCAiUyIsICJlcyIsICJHbiIsICJUZSIsICJXIiwgIlZuIiwgIkRlIiwgIiR0IiwgInp0IiwgInRlIiwgInFuIiwgInN0IiwgIkkiLCAiWW4iLCAiS24iLCAiSG4iLCAiV24iLCAieSIsICJGIiwgIkJuIiwgIlpuIiwgIkpuIiwgImQiLCAiaCIsICJsIiwgInUiLCAiUW4iLCAiWG4iLCAiZW8iLCAidG8iLCAiTmUiLCAiR3QiLCAicm8iLCAibm8iLCAib28iLCAiVnQiLCAiYW8iLCAic28iLCAicXQiLCAiaW8iLCAiY28iLCAibG8iLCAidW8iLCAiWGUiLCAicG8iLCAibW8iLCAieW8iLCAiZm8iLCAiaG8iLCAiWXQiLCAiS3QiLCAiaXQiLCAiY3QiLCAiX28iLCAidyIsICJtIiwgImYiLCAidm8iLCAiYm8iLCAiXyIsICJnbyIsICJ3byIsICJHIiwgIk8iLCAiRW8iLCAiQ28iLCAiUG8iLCAiQWUiLCAiU28iLCAiQW8iLCAia28iLCAiSW8iLCAicSIsICJsdCIsICJSbyIsICJGbyIsICJrIiwgIkwiLCAiRSIsICJiIiwgInYiLCAiQSIsICJMZSIsICJIdCIsICIkZSIsICJXdCIsICJVZSIsICJNbyIsICJadCIsICIkIiwgImllIiwgIk9vIiwgIlRvIiwgIlUiLCAidXIiLCAidmUiLCAibmUiLCAieGUiLCAib2UiLCAieWUiLCAiSnQiLCAiQnQiLCAiRG8iLCAiTm8iLCAiTG8iLCAiUXQiLCAiWHQiLCAiUGUiLCAiVW8iLCAiam8iLCAieG8iLCAiY2UiLCAicWUiLCAiJG8iLCAiem8iLCAiR28iLCAiVm8iLCAiZXIiLCAidHIiLCAiZmUiLCAiWWUiLCAicW8iLCAiWW8iLCAiYWUiLCAiaGUiLCAiS28iLCAiSG8iLCAiS2UiLCAicmUiLCAiV28iLCAicnIiLCAiZGUiLCAiSWUiLCAiUmUiLCAidWUiLCAiWm8iLCAiSm8iLCAiUiIsICJqZSIsICJ6ZSIsICJGZSIsICJiZSIsICJ1dCIsICJuciIsICJvciIsICJhciIsICJzciIsICJpciIsICJkdCIsICJTZSIsICJldCIsICJlYSIsICJIZSIsICJCbyIsICJHZSIsICJRbyIsICJDZSIsICJYbyIsICJ0dCIsICJ0YSIsICJyYSIsICJYIiwgIm9hIiwgInB0IiwgIm5hIiwgImFhIiwgInNhIiwgImlhIiwgImNhIiwgImxhIiwgImNyIiwgIm10IiwgInVhIiwgImRhIiwgInl0IiwgInBhIiwgImZ0IiwgIm1hIiwgInlhIiwgImZhIiwgImhhIiwgIl9hIiwgImdhIiwgIndhIiwgImJhIiwgInZhIiwgIkVhIiwgIkNhIiwgIlBhIiwgIlNhIiwgImthIiwgIkFhIiwgIklhIiwgImxyIiwgIlJhIiwgIkZhIiwgIk1hIiwgIk9hIiwgIlRhIiwgIkRhIiwgIk5hIiwgIkxhIiwgIlVhIiwgImphIiwgInhhIiwgImtlIiwgIiRhIiwgInphIiwgInNlIiwgIkdhIiwgIlZhIiwgInFhIiwgImoiLCAiaHQiLCAiWSIsICJyIiwgIldlIiwgIllhIiwgIl90IiwgIkthIiwgIkhhIiwgIldhIiwgImd0IiwgInd0IiwgIloiLCAiSiIsICJCIiwgImJ0IiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMiLCAiX2V4dGVuZFN0YXRpY3MiLCAicCIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiQVdYX0xPQURJTkciLCAiUGF5bWVudFByb2Nlc3NvciIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJvYmoiLCAiaW5zdGFuY2UiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiZm9ybUNhbGxiYWNrcyIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiZm9ybSIsICJ2YWx1ZSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAicHJldiIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
4533
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBFZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBaZSA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgZHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBwciA9IHokMS5hcnJheShkciksIG1yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHlyID0geiQxLmFycmF5KG1yKSwgZnIgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIFZlID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBmcltyXSA/PyB0O1xufSwgaHIgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIF9yID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gVmUodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7VmUoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgZ3IgPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIFkgPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChocih0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCByID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHByLnNhZmVQYXJzZShyKS5zdWNjZXNzID8gX3IocikgOiB5ci5zYWZlUGFyc2Uocikuc3VjY2VzcyA/IGdyKHIpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIFZlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgcmV0dXJuIHIgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIHdyID0gKHQsIHIsIGUpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHIoLi4ubik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyIGogPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgdC5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIHQuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgdC5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIHQuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgdCkpKGogfHwge30pO1xueiQxLm5hdGl2ZUVudW0oaik7IGNvbnN0IE0gPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIEMgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIEwgPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG52YXIgcCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCB0LkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgdC5FTUFJTCA9IFwiZW1haWxcIiwgdC5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCB0LkNJVFkgPSBcImNpdHlcIiwgdC5TVEFURSA9IFwic3RhdGVcIiwgdC5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIHQuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCB0LlBIT05FID0gXCJwaG9uZVwiLCB0LlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIHQpKShwIHx8IHt9KTtcbmNvbnN0IFB0ID0geiQxLm5hdGl2ZUVudW0ocCk7XG52YXIgQ3QgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgdCkpKEN0IHx8IHt9KTtcbmNvbnN0IFN0ID0geiQxLm5hdGl2ZUVudW0oQ3QpLCBrdCA9IHokMS51bmlvbihbUHQsIFN0XSk7XG52YXIgbGUgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEID0gXCJjYXJkXCIsIHQuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIHQuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIHQpKShsZSB8fCB7fSk7XG5jb25zdCBiciA9IHokMS5uYXRpdmVFbnVtKGxlKSwgTWUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IEwoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IEwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgdnIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogQyxcbiAgZXhwaXJ5OiBDLFxuICBjdmM6IENcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogQyxcbiAgY29sb3I6IEMsXG4gIGZvbnRGYW1pbHk6IEMsXG4gIGZvbnRTaXplOiBDLFxuICBmb250V2VpZ2h0OiBDLFxuICBtYXJnaW46IEMsXG4gIHBhZGRpbmc6IEMsXG4gIGxldHRlclNwYWNpbmc6IEMsXG4gIGxpbmVIZWlnaHQ6IEMsXG4gIGhpZGVJY29uOiBDXG59KTtcbmNvbnN0IEcgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKSwgRXIgPSBHLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pLCBQciA9IHokMS5vYmplY3QoeyB0eXBlOiBFciB9KSwgQ3IgPSBHLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKSwgU3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogQ3IsXG4gIGVsZW1lbnRUeXBlOiBTdCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwga3IgPSBHLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pLCBBciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBrcixcbiAgbWVzc2FnZTogTSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIElyID0gRy5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pLCBSciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJcixcbiAgZWxlbWVudFR5cGU6IGt0LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgRnIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRy5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogTVxufSksIE1yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEcuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IE0sXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IEMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShNZSlcbn0pLCBPciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChHLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgRHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRy5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSksIGdlID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogTSxcbiAgbGFzdE5hbWU6IE0sXG4gIGVtYWlsOiBNLFxuICB6aXBDb2RlOiBNLFxuICBjb3VudHJ5OiBNLFxuICBwcm9tb3Rpb25Db2RlOiBDXG59KSwgVHIgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBDLFxuICBsYXN0TmFtZTogQyxcbiAgZW1haWw6IE0sXG4gIHppcENvZGU6IE0sXG4gIGNvdW50cnk6IE0sXG4gIHByb21vdGlvbkNvZGU6IEMsXG4gIGFkZHJlc3M6IEMsXG4gIGNpdHk6IEMsXG4gIHN0YXRlOiBDXG59KSwgTnIgPSBHLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIExyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IE5yLFxuICBzZXNzaW9uSWQ6IE0sXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogTWUsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogQ1xufSkuZXh0ZW5kKGdlLnNoYXBlKSwgVXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRy5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pLCBqciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChHLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KSwgeHIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIFByLFxuICBTcixcbiAgQXIsXG4gIFJyLFxuICBGcixcbiAgTXIsXG4gIExyLFxuICBVcixcbiAganIsXG4gIE9yLFxuICBEclxuXSksICRyID0geiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IHhyLFxuICBub25jZTogTSxcbiAgZm9ybUlkOiBNLFxuICBlbGVtZW50SWQ6IE1cbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogTVxufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IEwoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IEwoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogTCh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IEwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IEplID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KSwgenIgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEdyID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKCExKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6cilcbn0pLCBWciA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKCEwKSB9KSxcbiAgR3Jcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IE1lLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBnZSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogTCh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBNZSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogZ2UsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnZhciAkID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuU1VDQ0VTUyA9IFwic3VjY2Vzc1wiLCB0LkZBSUxVUkUgPSBcImZhaWx1cmVcIiwgdC5DQU5DRUxMRUQgPSBcImNhbmNlbGxlZFwiLCB0KSkoJCB8fCB7fSk7XG5jb25zdCBxciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcbiAgICBcInN1Y2Nlc3NcIixcbiAgICBcImZhaWx1cmVcIixcbiAgICBcImNhbmNlbGxlZFwiXG4gICAgLyogQ0FOQ0VMTEVEICovXG4gIF0pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IFlyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgQXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IEwoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IEwoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogTCh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogTCh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IEwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgS3IgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMCksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCExKSB9KVxuXSksIEhyID0geiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KHZyKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IEwoSmUpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IEwoeiQxLmFycmF5KEF0KSlcbn0pLCBXciA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhID0gUHQucGFyc2UoZSk7XG4gICAgICBBcnJheS5pc0FycmF5KG4pID8gclthXSA9IG4gOiBBcnJheS5pc0FycmF5KG4uX2Vycm9ycykgJiYgKHJbYV0gPSBuLl9lcnJvcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSksIHI7XG59LCBaciA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIEpyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIEJyID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgT2UgPSBhc3luYyAodCkgPT4ge1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgcnQoKSB8fCBhd2FpdCBJdCg1MDApO1xuICBpZiAoIXJ0KCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKHQpO1xufSwgUXIgPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gYXdhaXQgT2UodCk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IGUuZWxlbWVudHMociksXG4gICAgc3RyaXBlOiBlXG4gIH07XG59LCBYciA9IGFzeW5jICh0LCByLCBlLCBuLCBhKSA9PiB7XG4gIGNvbnN0IHMgPSBhd2FpdCBPZSh0KSwgaSA9IEJyW2UudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gcy5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IGksXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHIsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICAvLyByZXF1ZXN0U2hpcHBpbmc6IHRydWUsXG4gICAgcmVxdWVzdFBheWVyTmFtZTogITAsXG4gICAgcmVxdWVzdFBheWVyRW1haWw6ICEwLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXVxuICB9KTtcbn0sIEl0ID0gKHQpID0+IG5ldyBQcm9taXNlKChyKSA9PiB7XG4gIHNldFRpbWVvdXQociwgdCk7XG59KSwgcnQgPSAoKSA9PiBcIlN0cmlwZVwiIGluIHdpbmRvdywgZW4gPSBhc3luYyAodCkgPT4gbmV3IFByb21pc2UoKHIsIGUpID0+IHtcbiAgdHJ5IHtcbiAgICB0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJwYXltZW50bWV0aG9kIEVWVDo6IFwiLCBuKSwgcihuKTtcbiAgICB9KSwgdC5vbihcInRva2VuXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInRva2VuIEVWVDo6IFwiLCBuKTtcbiAgICB9KSwgdC5vbihcImNhbmNlbFwiLCAoKSA9PiB7XG4gICAgICBlKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSk7XG4gICAgfSk7XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBlKG4pO1xuICB9XG59KSwgdG4gPSBhc3luYyAodCwgcikgPT4ge1xuICBpZiAoIXQuc3RyaXBlX3BrIHx8ICF0LmNsaWVudF9zZWNyZXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG5leHQgYWN0aW9uIG1ldGFkYXRhIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbiAgY29uc3QgbiA9IGF3YWl0IChhd2FpdCBPZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHIucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKG4uZXJyb3IpXG4gICAgdGhyb3cgci5jb21wbGV0ZShcImZhaWxcIiksIG5ldyBFcnJvcihgUGF5bWVudCBmYWlsZWQ6ICR7bi5lcnJvci5tZXNzYWdlID8/IFwidW5rbm93blwifWApO1xuICByZXR1cm4gci5jb21wbGV0ZShcInN1Y2Nlc3NcIiksIG47XG59LCBybiA9IGFzeW5jICh0KSA9PiB7XG4gIHZhciBhLCBzLCBpLCBjO1xuICBjb25zdCBlID0gYXdhaXQgKGF3YWl0IE9lKHQuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cCh0LmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogdC5zdHJpcGVfcG1faWRcbiAgfSksIG4gPSAoYSA9IGUuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBhLnN0YXR1cztcbiAgaWYgKG4gPT09IFwic3VjY2VlZGVkXCIpXG4gICAgY29uc29sZS5sb2coXCJbM0RTXSBDT05GSVJNSU5HIFBNOlwiLCB0LnN0cmlwZV9wbV9pZCksIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGUuc2V0dXBJbnRlbnQpO1xuICBlbHNlIHRocm93IG4gPT09IFwiY2FuY2VsZWRcIiA/IG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkLCBwbGVhc2UgY2xpY2sgU3VibWl0IGFnYWluIHRvIHBheVwiKSA6IG5ldyBFcnJvcihcbiAgICBgJHsoKHMgPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogcy5tZXNzYWdlKSA/PyAoKGMgPSAoaSA9IGUuc2V0dXBJbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBpLmxhc3Rfc2V0dXBfZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBjLm1lc3NhZ2UpID8/IFwiUGF5bWVudCBmYWlsZWQsIHBsZWFzZSBjbGljayBzdWJtaXQgYWdhaW4gdG8gcGF5LlwifWBcbiAgKTtcbn0sIG5uID0gKHQpID0+IEpTT04uc3RyaW5naWZ5KHQpLCBCID0gKHQsIHIpID0+IEFycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgoYSwgcykgPT4ge1xuICBjb25zdCBpID0gcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIHJldHVybiBpID8geyAuLi5hLCBbaV06IHMudmFsdWUgfSA6IGE7XG59LCB7fSksIG9uID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJHIucGFyc2UodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCB0LCByKSwgcjtcbiAgfVxufSwgYW4gPSBhc3luYyAodCkgPT4ge1xuICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCAhdCkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSB7IHR5cGU6IFwicGluZ1wiIH0sIGUgPSBhd2FpdCB0LnNlbmQocik7XG4gICAgaWYgKGUgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCByKSwgITE7XG4gIH1cbn0sIHNuID0gKHQsIHIpID0+ICEhdCAmJiByLCBnID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgY24gPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgUnQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IGcoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IGcoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IGcoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBnKHokMS5udW1iZXIoKSlcbn0pLCBGdCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogZyh6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIGxuID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIHVuID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IGcobG4pXG59KSwgcGUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IGcoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IGcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgZG4gPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSksIHBuID0geiQxLm9iamVjdCh7XG4gIGlkOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogZyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShkbiksXG4gIHRyaWFsX3N0YXJ0OiBnKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogZyh6JDEuc3RyaW5nKCkpXG59KSwgTXQgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSksIG1uID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoTXQpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KSwgeW4gPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBSdFxufSksIGZuID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KHluKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBnKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkobW4pLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KE10KVxufSksIG50ID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShwbiksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoZm4pXG59KSwgT3QgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogbnQsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogZyhudCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShSdClcbn0pLCBvdCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KEZ0KSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IHVuLFxuICBzdWJzX3ByZXZpZXc6IGcoT3QpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShwZSlcbn0pLCBEdCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKG90LnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQob3Quc2hhcGUpXG5dKSwgaG4gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KSwgX24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtEdCwgaG4sIF9uXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoRnQpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcGUsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBnKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgVHQgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IGduID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShnbik7XG5jb25zdCB3biA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGJuID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCB2biA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoYm4pLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgRW4gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBnKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcGUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiB2bi5vcHRpb25hbCgpXG59KS5leHRlbmQod24uc2hhcGUpLmV4dGVuZChFbi5zaGFwZSk7XG5jb25zdCBOdCA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGcoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBUcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBwZVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBnZSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHBlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbmNvbnN0IFBuID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IGcoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogZyh6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogZyh6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBnKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBnKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBnKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IGcoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBnKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IGcoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBnKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IGcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgQ24gPSB6JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcGUsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgU24gPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IGcoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSksIGtuID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBBbih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIEluKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBSbiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihhLCBzKSB7XG4gICAgICBhLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihhLCBzKSB7XG4gICAgICBmb3IgKHZhciBpIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBpKSAmJiAoYVtpXSA9IHNbaV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIEZuID0gZnVuY3Rpb24odCkge1xuICBSbihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGEgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGEubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBBbihzLCBhLnByb3RvdHlwZSksIEluKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBMdCBleHRlbmRzIEZuIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IFQgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAoT24obikpXG4gICAgdGhyb3cgbmV3IEx0KG4pO1xuICBpZiAoIU1uKG4sIGUpKSB7XG4gICAgY29uc3QgYSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGEuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBhLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIE1uID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIE9uID0gKHQpID0+IGNuLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBEbiA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIE90KSwgTiA9IGFzeW5jICh0KSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBEdCksIHdlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIE50KSwgVG4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIFBuKSwgTm4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIE50KSwgSyA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEhyKSwgTG4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiZmluYWxpemVfc2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogciB9LCBUdCksIFVuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQoXG4gIHQsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogciB9LFxuICBLclxuKSwgam4gPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgRG4odCwge1xuICAgIHNlY3VyZV90b2tlbjogcixcbiAgICBwcm9tb3Rpb25fY29kZTogZVxuICB9KSwgYSA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoYS5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke2Euc2l6ZX1gKTtcbiAgY29uc3QgcyA9IGEudmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIGkgPSBrbihuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBzLFxuICAgIGFtb3VudEF0b206IGlcbiAgfTtcbn0sIG1lID0gYXN5bmMgKHQsIHIsIGUsIG4pID0+IHtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMDtcbiAgICBjb25zdCBhID0gYXdhaXQgam4odCwgciwgbik7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogYS5hbW91bnRBdG9tLCBjdXJyZW5jeTogYS5jdXJyZW5jeSB9O1xuICB9XG59LCB4biA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGlmICh0LnNpemUgPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbSh0LnZhbHVlcygpKS5tYXAoXG4gICAgICAobikgPT4gVChuLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkOiByIH0sIFZyKVxuICAgIClcbiAgKTtcbn0sIGF0ID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgVCh0LCB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkOiByIH0sIEplKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJbY2RlLWNsaWVudF0gRXJyb3IgZHVyaW5nIGNoZWNrb3V0Q2FyZEVsZW1lbnRzOlwiLCBlLCBKU09OLnN0cmluZ2lmeShlKSksIGU7XG4gIH1cbn0sICRuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInNldHVwX3BheW1lbnRfbWV0aG9kXCIsIHBheWxvYWQ6IHIgfSwgVHQpLCBCZSA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkOiByIH0sIEplKSwgVXQgPSAxZTMsIHpuID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc29sZS5sb2cocik7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiB0LFxuICAgIGRlYnVnOiAhMCxcbiAgICB0aW1lb3V0OiBVdCxcbiAgICBjaGlsZE9yaWdpbjogXCIqXCJcbiAgICAvLyBUT0RPOiB1c2Ugd2l0aCBwcm9wZXIgY2hpbGRPcmlnaW5cbiAgfSkucHJvbWlzZSwgYSA9IGF3YWl0IFQobiwgeyB0eXBlOiBcInBpbmctM2RzLXN0YXR1c1wiIH0sIHFyKTtcbiAgcmV0dXJuIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgYSksIGE7XG59LCBqdCA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJwcmVwYXJlX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIFNuKSwgeHQgPSBhc3luYyAodCwgcikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgVChcbiAgICAgIHQsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogciB9IH0sXG4gICAgICBDblxuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBZKGUpKSwgXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn07XG5mdW5jdGlvbiBRZSh0KSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dH1gKTtcbn1cbmNvbnN0IFggPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBhID0gYXdhaXQgdChyKTtcbiAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhhLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoYS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBhLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGEucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGEucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7YX1gKTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IHMgPSBZKGEpLCBpID0gYXdhaXQgeHQoci5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIHMpO1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHMsIGkpO1xuICB9XG59LCB5ZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gUyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgYSA9IFkoZSksIHMgPSBhd2FpdCB4dChyLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgcmV0dXJuIG4ocywgYSwgZSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGEsIGVycm9yQ29kZTogcyB9O1xuICB9XG59LCBTID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke0VlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7RWUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtFZS5yZWQuYm9sZChcIm9qcy9cIil9JHtFZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IGVzLCBlcnJfXzogR24gfSA9IFMoXCJjb21tb25cIiksIERlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgSCA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSB0LmZpbmQoKG4pID0+IHIuc2FmZVBhcnNlKG4pLnN1Y2Nlc3MpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgR24oXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgdCksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gci5wYXJzZShlKTtcbn0sIFZuID0gKHQpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogdC5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogdC56aXBDb2RlLFxuICAgIGNvdW50cnk6IHQuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdC5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHQubGFzdE5hbWVcbn0pLCBUZSA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IHIgfSA9IFModC5sb2dQcmVmaXgpLCBlID0gYXdhaXQgTih0LmFueUNkZUNvbm5lY3Rpb24pLCBuID0gRGUodC5jb25maXJtUmVzdWx0KTtcbiAgaWYgKGUubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiByKFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgTG4odC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGUudG9rZW4sXG4gICAgICBwbV9pZDogbi5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICByKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogZS50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogdC5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogdC5yZXF1aXJlZEZvcm1GaWVsZHNbcC5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiB0LnJlcXVpcmVkRm9ybUZpZWxkc1twLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IHQucmVxdWlyZWRGb3JtRmllbGRzW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogZS5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IGUuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBCZSh0LmFueUNkZUNvbm5lY3Rpb24sIGEpIH07XG4gIH1cbn0sIHsgbG9nX186ICR0LCBlcnJfXzogenQgfSA9IFMoXCJjb21tb24tY2NcIiksIGVlID0gKHQsIHIsIGUpID0+IHtcbiAgaWYgKGUpIHtcbiAgICAkdChgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgZm9yIChjb25zdCBbYSwgc10gb2YgT2JqZWN0LmVudHJpZXMoZSkpXG4gICAgICB0W2FdIHx8ICh0W2FdID0gcyk7XG4gIH1cbiAgY29uc3QgbiA9IGdlLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFuLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBhID0gbi5lcnJvci5mb3JtYXQoKSwgcyA9IFdyKGEpO1xuICAgIGZvciAoY29uc3QgW2ksIGNdIG9mIE9iamVjdC5lbnRyaWVzKHMpKVxuICAgICAgcihpLCBjLCBpKTtcbiAgICB0aHJvdyB6dChcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIHMpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gbi5kYXRhO1xufSwgcW4gPSAodCwgcikgPT4ge1xuICBmb3IgKGNvbnN0IGUgb2YgdClcbiAgICBpZiAoZS5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IGUuZXJyb3JzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgYSA9IGt0LnNhZmVQYXJzZShuLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFhLnN1Y2Nlc3MpXG4gICAgICAgICAgenQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtuLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIG4pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzID0gYS5kYXRhO1xuICAgICAgICAgIHIocywgbi5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgJHQoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KGUuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIHN0ID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IEEsIGVycl9fOiBZbiB9ID0gUyhcInN0cmlwZS1saW5rXCIpLCBLbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBIbiA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBXbiA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0gdC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgQShcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgbiA9IEgodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBLbik7XG4gICAgQShcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IE4oYSksIGkgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBBKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBtZShhLCBzLnRva2VuLCBpLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBsLCBzdHJpcGU6IHUgfSA9IGF3YWl0IFFyKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgQShcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgZCA9IGwuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIGYgPSAoKSA9PiB7XG4gICAgICBkLm1vdW50KGAjJHtzdH1gKTtcbiAgICB9LCBoID0gKCkgPT4ge1xuICAgICAgZC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IEEoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKEEoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIGYoKSksIGQub24oXCJjbGlja1wiLCBhc3luYyAobSkgPT4ge1xuICAgICAgaWYgKEEoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIEEoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG0ucmVzb2x2ZSgpO1xuICAgIH0pLCBkLm9uKFwiY29uZmlybVwiLCBhc3luYyAobSkgPT4ge1xuICAgICAgQShcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgbSk7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogbS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHkuZXJyb3IgPyAoWW4oXCJlcnJvclwiLCB5LmVycm9yKSwgci5nZXQub25DaGVja291dEVycm9yKHkuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKEEoXCJwYXltZW50TWV0aG9kXCIsIHkucGF5bWVudE1ldGhvZCksIEYuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIodC5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiB5LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogITAgfVxuICAgICAgfSkpO1xuICAgIH0pLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uOiBmLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbjogaCxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IEJuKHN0KVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIFpuID0gWChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICBBKFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgQShcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgaSA9IEpuKGUsIGEuc3RyaXBlUE0pLCBjID0gZWUoaSwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIEEoXCJTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IHdlKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiBhLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IGNbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IGNbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIEEoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgY29uc3QgZCA9IEhuLnBhcnNlKGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXS5vdXJfZXhpc3RpbmdfcG1faWQsIGYgPSBhd2FpdCBOKHMpO1xuICAgIGlmIChmLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgQShcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBoID0gYXdhaXQgSyhzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZi50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IERlKGgpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEEoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IGggPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZi50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbcC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBjW3AuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBjW3AuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBmLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBmLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHJcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgQmUocywgaCkgfTtcbiAgICB9XG4gIH1cbiksIEpuID0gKHQsIHIpID0+IHtcbiAgdmFyIGksIGMsIGwsIHUsIGQ7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW24sIC4uLmFdID0gKChjID0gKGkgPSByLmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogaS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJldHVybiBlW3AuRklSU1RfTkFNRV0gPSBlW3AuRklSU1RfTkFNRV0gfHwgbiB8fCBcIl9PUF9VTktOT1dOXCIsIGVbcC5MQVNUX05BTUVdID0gZVtwLkxBU1RfTkFNRV0gfHwgcyB8fCBcIl9PUF9VTktOT1dOXCIsIGVbcC5FTUFJTF0gPSBlW3AuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgobCA9IHIubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZW1haWwpIHx8IHIuYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtwLlpJUF9DT0RFXSA9IGVbcC5aSVBfQ09ERV0gfHwgKCh1ID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHUucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgZVtwLkNPVU5UUlldID0gZVtwLkNPVU5UUlldIHx8ICgoZCA9IHIuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBkLmNvdW50cnkpIHx8IFwiVVNcIiwgQShcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIEJuID0gKHQpID0+IG5ldyBQcm9taXNlKChyKSA9PiB7XG4gIGNvbnN0IGUgPSAoKSA9PiB7XG4gICAgY29uc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO1xuICAgIG4gPyByKG4pIDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpO1xuICB9O1xuICBlKCk7XG59KSwgUW4gPSBcIkBrZXlmcmFtZXMgZmFkZUluezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fS5vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MjE0NzQ4MzY0OCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6IzAwMDAwMDgwfS5jb250YWluZXJ7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmU7YW5pbWF0aW9uOmZhZGVJbiAuM3MgZWFzZS1vdXR9LmZyYW1le21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOm5vbmV9LmNhbmNlbC1idXR0b257cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6bm9uZTtmb250LXNpemU6MXJlbTtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RvcDotMS41cmVtO3BhZGRpbmc6MDtyaWdodDowfVwiLCBYbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XG4gIHIuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7UW59XG4gICAgPC9zdHlsZT5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsLWJ1dHRvblwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8aWZyYW1lIHNyYz1cIiR7dH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwgbiA9IGUuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIG4uYXBwZW5kQ2hpbGQoci5jb250ZW50LmNsb25lTm9kZSghMCkpO1xuICBjb25zdCBhID0gbi5xdWVyeVNlbGVjdG9yKFwiI3RocmVlLWRzLWlmcmFtZVwiKSwgcyA9IG4ucXVlcnlTZWxlY3RvcihcIi5jYW5jZWwtYnV0dG9uXCIpO1xuICByZXR1cm4gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKSwgeyBob3N0OiBlLCBpZnJhbWU6IGEsIGNhbmNlbEJ1dHRvbjogcyB9O1xufTtcbmZ1bmN0aW9uIGVvKHQsIHIsIGUpIHtcbiAgY29uc3QgbiA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcyA9IGF3YWl0IHpuKHQsIGUpO1xuICAgICAgcyAmJiAoY2xlYXJJbnRlcnZhbChhKSwgcihzKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgfVxuICB9O1xuICBuKCk7XG4gIGNvbnN0IGEgPSBzZXRJbnRlcnZhbChuLCBVdCk7XG4gIHJldHVybiBhO1xufVxuZnVuY3Rpb24gdG8oe1xuICBlbGVtZW50czogdCxcbiAgcG9sbGluZ0ludGVydmFsOiByLFxuICByZXNvbHZlOiBlXG59KSB7XG4gIGNvbnN0IG4gPSAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbChyKSwgdC5ob3N0LnJlbW92ZSgpLCBlKHsgc3RhdHVzOiAkLkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgcmV0dXJuIHQuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKSwgKCkgPT4ge1xuICAgIHQuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBuKTtcbiAgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIE5lKHQpIHtcbiAgY29uc3QgeyB1cmw6IHIsIGJhc2VVcmw6IGUgfSA9IHQsIG4gPSBYbihyKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChhKSA9PiB7XG4gICAgY29uc3QgcyA9IChsKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbi5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKSwgYShsKSwgYyA9PSBudWxsIHx8IGMoKTtcbiAgICB9LCBpID0gZW8obi5pZnJhbWUsIHMsIG5ldyBVUkwoZSkub3JpZ2luKSwgYyA9IHRvKHtcbiAgICAgIGVsZW1lbnRzOiBuLFxuICAgICAgcG9sbGluZ0ludGVydmFsOiBpLFxuICAgICAgcmVzb2x2ZTogYVxuICAgIH0pO1xuICB9KTtcbn1cbmNvbnN0IEd0ID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IGF3YWl0IE5lKHQpO1xuICBpZiAoci5zdGF0dXMgPT09ICQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAoci5zdGF0dXMgPT09ICQuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgcmV0dXJuIHIuc3RhdHVzICE9PSAkLlNVQ0NFU1MgJiYgUWUoci5zdGF0dXMpLCB7XG4gICAgaHJlZjogci5ocmVmXG4gIH07XG59LCBybyA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSB3aW5kb3cub3BlbihyLCBcIl9ibGFua1wiKTtcbiAgaWYgKCFlKVxuICAgIHRocm93IG5ldyBFcnJvcihgJHt0fSBwb3B1cCB3aW5kb3cgYmxvY2tlZC4gUGxlYXNlIGFsbG93IHBvcHVwcyBmb3IgdGhpcyBzaXRlLmApO1xuICByZXR1cm4gZTtcbn0sIG5vID0gYXN5bmMgKHQsIHIsIGUsIG4pID0+IHtcbiAgY29uc3QgeyBlcnJfXzogYSB9ID0gUyhcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChzLCBpKSA9PiB7XG4gICAgY29uc3QgYyA9IHJvKHQsIG4pLCBsID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdSA9IGF3YWl0IFVuKHIsIGUpO1xuICAgICAgICBpZiAodS5wcmVzZW50KVxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwobCksIGMuY2xvc2UoKSwgcyh7IGhyZWY6IHUuaHJlZiB9KTtcbiAgICAgICAgZWxzZSBpZiAoYy5jbG9zZWQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3R9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIGEoWSh1KSksIGNsZWFySW50ZXJ2YWwobCksIGkoWSh1KSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59LCB7IGxvZ19fOiBvbywgZXJyX186IFZ0IH0gPSBTKFwicG9ja3l0LWNjXCIpLCBhbyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSksIHNvID0gKHQpID0+IHtcbiAgY29uc3QgciA9IGFvLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBlID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiLCBuID0gYFBvY2t5dCAzRFMgaXMgcmVxdWlyZWQgYnV0IGhlYWRlcnMgYXJlIG1hbGZvcm1lZC4gR290OiAke0pTT04uc3RyaW5naWZ5KHQpfWA7XG4gICAgdGhyb3cgVnQobiksIG5ldyBFcnJvcihlKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgcXQgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSBuZXcgVVJMKHQgPz8gXCJcIikuc2VhcmNoUGFyYW1zLmdldChcInZhdWx0SWRcIik7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmF1bHQgSUQgZm91bmQgaW4gM0RTIHZlcmlmaWNhdGlvbiByZXN1bHRcIik7XG4gICAgcmV0dXJuIG9vKGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdC5cIjtcbiAgICB0aHJvdyBWdChlLCBgUmVzdWx0aW5nIFVSTDogJHt0fS5cbkVycm9yOiAke1kocil9YCksIG5ldyBFcnJvcihlKTtcbiAgfVxufSwgaW8gPSAodCwgcikgPT4gbmV3IFVSTCh0KS5zZWFyY2hQYXJhbXMuZ2V0KHIpLCBjbyA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBsbyA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBzbyhyKSwgbiA9IGF3YWl0IEd0KHsgdXJsOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBxdChuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogZVtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGVbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogdW8sIGVycl9fOiBYZSB9ID0gUyhcImFpcndhbGxleC1jY1wiKSwgcG8gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBtbyA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBwby5zYWZlUGFyc2UodCk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IFhlKG4pLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIHlvID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIGZvID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiB1byhgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgWGUoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtZKHIpfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIGhvID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IG1vKHIpLCBuID0gYXdhaXQgR3QoeyB1cmw6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogdCB9KSwgYSA9IGZvKG4uaHJlZiA/PyBcIlwiKSwgcyA9IGVbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChzICE9PSBhKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbCA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHthfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke3N9KS5gO1xuICAgIHRocm93IFhlKGwpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGEsXG4gICAgICBjb25zZW50X2lkOiBlW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCBZdCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgS3QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IFAsIGVycl9fOiBpdCB9ID0gUyhcImNvbW1vbi1jY1wiKSwgeyBsb2dfXzogY3QgfSA9IFMoXCJzdHJpcGUtY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IF9vID0gWChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgdTtcbiAgICBQKFwi4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHIgfSk7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IE4ocyk7XG4gICAgUChg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtpLm1vZGV9XWApO1xuICAgIGNvbnN0IGMgPSBlZShlLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGwgPSB7XG4gICAgICBzZXNzaW9uX2lkOiB0LmVsZW1lbnRzU2Vzc2lvbklkLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBjLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHt9XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgUChg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IGQgPSBhd2FpdCB4bihhLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgICBzZXNzaW9uX2lkOiB0LmVsZW1lbnRzU2Vzc2lvbklkXG4gICAgICB9KTtcbiAgICAgIGlmIChxbihkLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGkubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIFAoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7aS50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IGYgPSBhd2FpdCAkbihzLCBsKTtcbiAgICAgICAgcmV0dXJuIFAoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtmLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogZiB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUChg4pScIEluaXRpYWwgY2hlY2tvdXQgZmxvdy4gQ2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICAgIGNvbnN0IGYgPSBhd2FpdCBhdChzLCBsKTtcbiAgICAgICAgcmV0dXJuIFAoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGYgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICBpZiAoZCBpbnN0YW5jZW9mIEx0ICYmIGQub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgUChcIuKUnCBDYXJkIHJlcXVpcmVzIDNEUywgc3RhcnRpbmcgbm9uLWxlZ2FjeSBwYXltZW50IGZsb3dcIiksIFAoXCJSZWNlaXZlZCAzRFMgZXJyb3IgcmVzcG9uc2UgaGVhZGVyczpcIiwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgY29uc3QgZiA9IGNvKGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGlmIChmKSB7XG4gICAgICAgICAgUChcIuKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgbG8odC5iYXNlVXJsLCBkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEucG9ja3l0ID0gdztcbiAgICAgICAgfVxuICAgICAgICBpZiAoeW8oZC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIFAoXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IGhvKHQuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IHc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IFRuKHMsIGwpO1xuICAgICAgICBQKFwi4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIG0pO1xuICAgICAgICBjb25zdCB5ID0gKCh1ID0gZC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogdVtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgZiA/IFAoXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IHkgPyAoUChcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IHZvKG0pKSA6IChQKFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgYm8obSwgdC5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IF8gPSBtLmNjX3BtX2lkO1xuICAgICAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBQKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke199XWApO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBLKHMsIHtcbiAgICAgICAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBfXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgUChcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCB3KTtcbiAgICAgICAgICBjb25zdCBiID0gRGUodyk7XG4gICAgICAgICAgcmV0dXJuIFAoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtiLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYiB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIFAoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7eSA/IFwibGVnYWN5XCIgOiBcIm5ld1wifV1gKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgYXQocywge1xuICAgICAgICAgICAgLi4ubCxcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBfLFxuICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBQKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiB3IH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IGl0KFwi4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFXCIpLCBpdChkKSwgZDtcbiAgICB9XG4gIH1cbiksIGdvID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBaci5wYXJzZShyKTtcbn0sIHdvID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBZci5wYXJzZShyKTtcbn0sIGJvID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHdvKHQpO1xuICBpZiAoZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiAmJiBlLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIFAoXCLilJwgQWlyd2FsbGV4IDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgcmV0dXJuO1xuICB9XG4gIFAoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtlLnJlZGlyZWN0X3VybH1dYCk7XG4gIGNvbnN0IHsgc3RhdHVzOiBuIH0gPSBhd2FpdCBOZSh7IHVybDogZS5yZWRpcmVjdF91cmwsIGJhc2VVcmw6IHIgfSk7XG4gIGlmIChQKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtufV1gKSwgbiA9PT0gJC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSAkLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG59LCB2byA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBnbyh0KTtcbiAgY3QoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7ci5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IHJuKHIpLCBjdChcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIHogPSB6JDEuZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCJdKTtcbnouRW51bS5zdHJpcGU7XG5jb25zdCB7IGxvZ19fOiBELCBlcnJfXzogRW8gfSA9IFMoXCJzdHJpcGUtcHJcIiksIFBvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBDbyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBEKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgZSA9IEgodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbyk7XG4gICAgRChcIkluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBuID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgTihuKSwgcyA9IGEubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIEQoXCJHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRcIik7XG4gICAgY29uc3QgaSA9IGF3YWl0IG1lKG4sIGEudG9rZW4sIHMsIHZvaWQgMCksIGMgPSBhd2FpdCBYcihcbiAgICAgIGUubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgaS5hbW91bnRBdG9tLFxuICAgICAgaS5jdXJyZW5jeSxcbiAgICAgIHNcbiAgICApO1xuICAgIEQoXCJDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50XCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBjLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGwgPT09IG51bGwpXG4gICAgICByZXR1cm4gRW8oXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgIEQoXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgbCk7XG4gICAgY29uc3QgdSA9IChkLCBmKSA9PiBGLnN0cmlwZVBSLnJ1bih7XG4gICAgICBjb250ZXh0OiB0LFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBBZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGQpLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogQih0LmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZCwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZiA9PSBudWxsID8gdm9pZCAwIDogZi5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICBpbml0UmVzdWx0OiB7XG4gICAgICAgIHByb2Nlc3Nvcjogei5FbnVtLnN0cmlwZSxcbiAgICAgICAgcHI6IGMsXG4gICAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBsLmFwcGxlUGF5LCBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5IH0sXG4gICAgICAgIHN0YXJ0RmxvdzogdVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IHouRW51bS5zdHJpcGUsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBwcjogYyxcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogbC5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBsLmdvb2dsZVBheVxuICAgICAgfSxcbiAgICAgIHN0YXJ0RmxvdzogdVxuICAgIH07XG4gIH1cbiksIFNvID0gWChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhLFxuICAgIGluaXRSZXN1bHQ6IHNcbiAgfSkgPT4ge1xuICAgIGlmIChEKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgYS5wcm92aWRlciAhPT0gci5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7YS5wcm92aWRlcn0sIGdvdCAke3IucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IHMucHI7XG4gICAgaWYgKGEgIT0gbnVsbCAmJiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHkgPSBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBEKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCB5KSwgQW8oYywgeS5hbW91bnQsIHkucGVuZGluZywgeS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KTtcbiAgICB9XG4gICAgRChcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgZW4oYyk7XG4gICAgRChcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIEQoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBrbyhlLCBsKSwgZCA9IGVlKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBEKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIiwgZCk7XG4gICAgY29uc3QgZiA9IGF3YWl0IE5uKGksIHtcbiAgICAgIGZpZWxkczogZCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogclxuICAgIH0pLCBoID0gSW8oZik7XG4gICAgRChcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IHRuKGgsIGwpO1xuICAgIGNvbnN0IG0gPSBhd2FpdCBOKGkpO1xuICAgIGlmIChtLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgRChcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IHkgPSBhd2FpdCBLKGksIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBEZSh5KSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBEKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IHkgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogZFtwLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IGRbcC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogZFtwLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGRbcC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGRbcC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGRbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IG0ubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IG0uYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBCZShpLCB5KSB9O1xuICAgIH1cbiAgfVxuKSwga28gPSAodCwgcikgPT4ge1xuICB2YXIgbCwgdSwgZCwgZjtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uYV0gPSAoKHUgPSAobCA9IHIucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDAsIGkgPSAoZiA9IChkID0gci5wYXltZW50TWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogZC5iaWxsaW5nX2RldGFpbHMpID09IG51bGwgPyB2b2lkIDAgOiBmLmFkZHJlc3MsIGMgPSByLnNoaXBwaW5nQWRkcmVzcztcbiAgcmV0dXJuIGVbcC5GSVJTVF9OQU1FXSA9IGVbcC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkxBU1RfTkFNRV0gPSBlW3AuTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkVNQUlMXSA9IGVbcC5FTUFJTF0gfHwgci5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtwLlpJUF9DT0RFXSA9IGVbcC5aSVBfQ09ERV0gfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkucG9zdGFsX2NvZGUpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgZVtwLkNPVU5UUlldID0gZVtwLkNPVU5UUlldIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmNvdW50cnkpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLmNvdW50cnkpIHx8IFwiVVNcIiwgRChcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIEFvID0gKHQsIHIsIGUsIG4pID0+IHtcbiAgdC51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHIuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBlXG4gICAgfSxcbiAgICBjdXJyZW5jeTogci5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiBuXG4gIH0pO1xufSwgSW8gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gSnIucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgeyBsb2dfXzogViwgZXJyX186IGx0IH0gPSBTKFwicG9ja3l0LXBheXBhbFwiKSwgUm8gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IEZvID0gWChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgaywgYWU7XG4gICAgVihcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBOKHMpO1xuICAgIFYoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBSby5wYXJzZShyKTtcbiAgICBWKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCBsID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncywgdSA9IGVlKFxuICAgICAgZSxcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBkID0gVm4odSk7XG4gICAgVihgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7aS5tb2RlfWApO1xuICAgIGNvbnN0IGYgPSB2NCgpLCBoID0gaS5tb2RlICE9PSBcInNldHVwXCIsIG0gPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGMsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGgsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGggPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGkubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBpLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISEoKGsgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzKSAhPSBudWxsICYmIGsudXNlUmVkaXJlY3RGbG93KSxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IGZcbiAgICAgIH0sXG4gICAgICAuLi5kXG4gICAgfSwgeSA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIHQuYmFzZVVybCkudG9TdHJpbmcoKSwgXyA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkobSkpLCB3ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogaS50b2tlbixcbiAgICAgIHI6IF9cbiAgICB9KSwgYiA9IGAke3l9PyR7dy50b1N0cmluZygpfWA7XG4gICAgaWYgKChhZSA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc2V0dGluZ3MpICE9IG51bGwgJiYgYWUudXNlUmVkaXJlY3RGbG93KVxuICAgICAgdGhyb3cgVihcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBiLCBhd2FpdCBJdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIFYoXCJTdGFydGluZyBwb3B1cCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIFYoXCJPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5cIik7XG4gICAgY29uc3QgdiA9IGF3YWl0IG5vKFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIHMsXG4gICAgICBmLFxuICAgICAgYlxuICAgICk7XG4gICAgVihcIlBheXBhbCBmbG93IHJlc3VsdFwiLCB2KTtcbiAgICBjb25zdCBFID0gcXQodi5ocmVmKSwgUiA9IGlvKHYuaHJlZiwgXCJjYXR0XCIpO1xuICAgIGlmICghUilcbiAgICAgIHRocm93IGx0KFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMOlwiLCB2LmhyZWYpLCBuZXcgRXJyb3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkxcIik7XG4gICAgVihgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHtFfWApO1xuICAgIGNvbnN0IE8gPSBhd2FpdCBLKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogaS50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBFLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogaCA/IFIgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoVihcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBPKSwgaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBPLnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmICghTy5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IGx0KFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgTyksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IE8ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG4pLCBMZSA9ICh7XG4gIGdhdGV3YXk6IHQsXG4gIGdhdGV3YXlNZXJjaGFudElkOiByLFxuICBtZXJjaGFudE5hbWU6IGUsXG4gIG1lcmNoYW50SWQ6IG4sXG4gIGluaXRpYWxQcmV2aWV3OiBhLFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICBwcmVmaWxsOiBpXG59KSA9PiB7XG4gIHZhciBmLCBoO1xuICBjb25zdCBjID0gKChmID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBmLmFtb3VudEF0b20pID8/IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmFtb3VudEF0b20pID8/IDAsIGwgPSBNYXRoLm1heChjIC8gMTAwLCAwKSwgdSA9ICgoKGggPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGguY3VycmVuY3kpID8/IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmN1cnJlbmN5KSA/PyBhLmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBkID0ge1xuICAgIGFwaVZlcnNpb246IDIsXG4gICAgYXBpVmVyc2lvbk1pbm9yOiAwLFxuICAgIGFsbG93ZWRQYXltZW50TWV0aG9kczogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcIkNBUkRcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIGFsbG93ZWRBdXRoTWV0aG9kczogW1wiUEFOX09OTFlcIiwgXCJDUllQVE9HUkFNXzNEU1wiXSxcbiAgICAgICAgICBhbGxvd2VkQ2FyZE5ldHdvcmtzOiBbXCJBTUVYXCIsIFwiRElTQ09WRVJcIiwgXCJJTlRFUkFDXCIsIFwiSkNCXCIsIFwiTUFTVEVSQ0FSRFwiLCBcIlZJU0FcIl0sXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NSZXF1aXJlZDogITAsXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRlVMTFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0NyZWRpdENhcmRzOiAhMCxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogITBcbiAgICAgICAgfSxcbiAgICAgICAgdG9rZW5pemF0aW9uU3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIHR5cGU6IFwiUEFZTUVOVF9HQVRFV0FZXCIsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZ2F0ZXdheTogdCxcbiAgICAgICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiByXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXSxcbiAgICBlbWFpbFJlcXVpcmVkOiAhMCxcbiAgICBtZXJjaGFudEluZm86IHtcbiAgICAgIC8vIFBST0QgZW52IHdpbGwgbmVlZCB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbiA/PyBcIlwiLFxuICAgICAgbWVyY2hhbnROYW1lOiBlXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IHUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBzICE9IG51bGwgJiYgcy5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IGwudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHMgIT0gbnVsbCAmJiBzLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID8geyAuLi5kLCAuLi5zLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBkO1xufSwgSHQgPSAoKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgZS5zcmMgPSBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIiwgZS5hc3luYyA9ICEwLCBlLm9ubG9hZCA9ICgpID0+IHQoKSwgZS5vbmVycm9yID0gKCkgPT4gcihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBHb29nbGUgUGF5IFNES1wiKSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7XG59KTtcbmxldCAkZSA9IG51bGw7XG5jb25zdCBXdCA9ICh0KSA9PiB0ID09PSBaZSB8fCB0ID09PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgVWUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gV3QodCk7XG4gIHJldHVybiAkZSA9PT0gbnVsbCAmJiAoJGUgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiBlLFxuICAgIG1lcmNoYW50SW5mbzogci5tZXJjaGFudEluZm9cbiAgfSkpLCAkZTtcbn0sIE1vID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gciA/IEF0LnBhcnNlKHIpIDogbnVsbDtcbn0sIFp0ID0gKHQsIHIpID0+IHtcbiAgdmFyIGEsIHMsIGksIGM7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgbiA9IChzID0gKGEgPSByLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogYS5pbmZvKSA9PSBudWxsID8gdm9pZCAwIDogcy5iaWxsaW5nQWRkcmVzcztcbiAgaWYgKG4pIHtcbiAgICBjb25zdCBbbCwgLi4udV0gPSAoKGMgPSAoaSA9IG4ubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgZCA9IHUuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICAgIGVbcC5FTUFJTF0gPSBlW3AuRU1BSUxdIHx8IHIuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW3AuQ09VTlRSWV0gPSBlW3AuQ09VTlRSWV0gfHwgbi5jb3VudHJ5Q29kZSB8fCBcIlVTXCIsIGVbcC5BRERSRVNTXSA9IGVbcC5BRERSRVNTXSB8fCBuLmFkZHJlc3MxIHx8IFwiXCIsIGVbcC5DSVRZXSA9IGVbcC5DSVRZXSB8fCBuLmxvY2FsaXR5IHx8IFwiXCIsIGVbcC5aSVBfQ09ERV0gPSBlW3AuWklQX0NPREVdIHx8IG4ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCIsIGVbcC5TVEFURV0gPSBlW3AuU1RBVEVdIHx8IG4uYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCIsIGVbcC5GSVJTVF9OQU1FXSA9IGVbcC5GSVJTVF9OQU1FXSB8fCBsIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkxBU1RfTkFNRV0gPSBlW3AuTEFTVF9OQU1FXSB8fCBkIHx8IFwiX09QX1VOS05PV05cIjtcbiAgfVxuICByZXR1cm4gZTtcbn0sIHsgbG9nX186IHgsIGVycl9fOiBpZSB9ID0gUyhcImF3eC1nb29nbGUtcGF5XCIpLCBPbyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICB2YXIgZiwgaDtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiB6LkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBIKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgS3QpO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiBlO1xuICAgIHgoXCJHb29nbGUgUGF5IENQTVwiLCBuKTtcbiAgICBjb25zdCBhID0gbi5tZXRhZGF0YTtcbiAgICBpZiAoIWEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gaWUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCBlO1xuICAgIGlmICh4KFwiTG9hZGluZyBHb29nbGUgUGF5IFNESy4uLlwiKSwgYXdhaXQgSHQoKSwgISgoaCA9IChmID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYucGF5bWVudHMpICE9IG51bGwgJiYgaC5hcGkpKVxuICAgICAgcmV0dXJuIGllKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgZTtcbiAgICBpZiAoV3QodC5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIWEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiBpZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIGU7XG4gICAgeChcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbSA9IExlKHtcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGEucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogYS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCB7IHJlc3VsdDogeSB9ID0gYXdhaXQgVWUodC5iYXNlVXJsLCBtKS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIG1cbiAgICAgICk7XG4gICAgICBpZiAoIXkpXG4gICAgICAgIHJldHVybiB4KFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIGU7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgcmV0dXJuIGllKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgbSksIGU7XG4gICAgfVxuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBOKGkpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBtZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKG0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIEYuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogQih0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgICAgaWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgeSksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoeSA9PSBudWxsID8gdm9pZCAwIDogeS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiB6LkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIERvID0gWChcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgaCwgbSwgeSwgXywgdywgYjtcbiAgICB4KFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSBIKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgS3QpLCB7IGluaXRpYWxQcmV2aWV3OiBpLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBhLCBsID0gcy5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBMZSh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSksIGQgPSBVZSh0LmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB2ID0gYXdhaXQgZC5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICB4KFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgdik7XG4gICAgICBjb25zdCBFID0gdC5hbnlDZGVDb25uZWN0aW9uLCBSID0gYXdhaXQgTihFKSwgTyA9IFp0KGUsIHYpLCBrID0gZWUoXG4gICAgICAgIE8sXG4gICAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBhID09IG51bGwgPyB2b2lkIDAgOiBhLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKSwgYWUgPSAoaCA9IChmID0gdi5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGgudG9rZW47XG4gICAgICBpZiAoIWFlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IHVyID0gYXdhaXQgd2UoRSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBrW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZToga1twLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBrW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICB6aXBfY29kZToga1twLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiBrW3AuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSksIHZlID0gTW8odXIpO1xuICAgICAgeChcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHZlKTtcbiAgICAgIGxldCByZSA9IGF3YWl0IEsoRSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IFIudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHZlID09IG51bGwgPyB2b2lkIDAgOiB2ZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBhZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB4KFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgcmUpO1xuICAgICAgbGV0IHhlID0gKHkgPSAobSA9IHJlLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IG1bMF0pID09IG51bGwgPyB2b2lkIDAgOiB5LmlkO1xuICAgICAgY29uc3QgbmUgPSAoXyA9IHJlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IF8uZmluZChcbiAgICAgICAgKGZlKSA9PiBmZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmIChuZSAmJiBuZS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgeChcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIG5lKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IGZlIH0gPSBhd2FpdCBOZSh7XG4gICAgICAgICAgdXJsOiBuZS5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogdC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoeChg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7ZmV9XWApLCBmZSA9PT0gJC5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChmZSA9PT0gJC5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKG5lICYmICF4ZSAmJiAocmUgPSBhd2FpdCBLKEUsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBSLnRva2VuLFxuICAgICAgICB0aGVpcl9wbV9pZDogbmUudGhlaXJfcG1faWQsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5lLmNvbnNlbnRfaWRcbiAgICAgICAgfVxuICAgICAgfSksIHgoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCByZSksIHhlID0gKGIgPSAodyA9IHJlLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHdbMF0pID09IG51bGwgPyB2b2lkIDAgOiBiLmlkKSwgIXhlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBUZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhd3gtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IEUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBrLFxuICAgICAgICBjb25maXJtUmVzdWx0OiByZSxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAodikge1xuICAgICAgdGhyb3cgaWUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgdiksIG5ldyBFcnJvcigodiA9PSBudWxsID8gdm9pZCAwIDogdi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBKdCA9ICgpID0+IG5ldyBQcm9taXNlKCh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICBlLnNyYyA9IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIiwgZS5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCIsIGUuYXN5bmMgPSAhMCwgZS5vbmxvYWQgPSAoKSA9PiB0KCksIGUub25lcnJvciA9ICgpID0+IHIobmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiKSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7XG59KSwgQnQgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gci50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0LCBuID0gci5iaWxsaW5nQ29udGFjdCwgYSA9IHIuc2hpcHBpbmdDb250YWN0LCBzID0geyAuLi50IH07XG4gIHJldHVybiAoZSB8fCBuIHx8IGEpICYmIChzW3AuRU1BSUxdID0gc1twLkVNQUlMXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5lbWFpbEFkZHJlc3MpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmVtYWlsQWRkcmVzcykgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBzW3AuQ09VTlRSWV0gPSBzW3AuQ09VTlRSWV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuY291bnRyeUNvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmNvdW50cnlDb2RlKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBzW3AuWklQX0NPREVdID0gc1twLlpJUF9DT0RFXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5wb3N0YWxDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5wb3N0YWxDb2RlKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIHNbcC5GSVJTVF9OQU1FXSA9IHNbcC5GSVJTVF9OQU1FXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5naXZlbk5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmdpdmVuTmFtZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZ2l2ZW5OYW1lKSB8fCBcIl9PUF9VTktOT1dOXCIsIHNbcC5MQVNUX05BTUVdID0gc1twLkxBU1RfTkFNRV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZmFtaWx5TmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZmFtaWx5TmFtZSkgfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZmFtaWx5TmFtZSkgfHwgXCJfT1BfVU5LTk9XTlwiKSwgcztcbn0sIFRvID0geiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KSwgTm8gPSAodCkgPT4gVG8uc2FmZVBhcnNlKHQpLmRhdGEsIExvID0gKHQpID0+IHtcbiAgY29uc3QgciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICAgIFwibWVzc2FnZVwiLFxuICAgIChlKSA9PiB7XG4gICAgICB2YXIgYTtcbiAgICAgIGNvbnN0IG4gPSBObyhlKTtcbiAgICAgICgoYSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEubWVzc2FnZVR5cGUpID09PSBcIndpbmRvd2Nsb3NpbmdcIiAmJiAodCgpLCByLmFib3J0KCkpO1xuICAgIH0sXG4gICAge1xuICAgICAgc2lnbmFsOiByLnNpZ25hbFxuICAgIH1cbiAgKSwge1xuICAgIGNsZWFudXBDYW5jZWxMaXN0ZW5lcjogKCkgPT4gci5hYm9ydCgpXG4gIH07XG59LCBRdCA9ICh7XG4gIHRvdGFsOiB0LFxuICBwcmVmaWxsOiByXG59KSA9PiB7XG4gIHZhciBuO1xuICBpZiAoci5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiB0LmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke3IudG9rZW59YCwgWmUpLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCBlID0gKG4gPSByLmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdO1xuICBpZiAoZSlcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogdC5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7ci50b2tlbn1gXG4gICAgfTtcbn0sIFh0ID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogdCxcbiAgaW5pdGlhbFByZXZpZXc6IHIsXG4gIHByZWZpbGw6IGUsXG4gIGRlZmF1bHRMYWJlbDogbiA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgYSA9ICgoKGMgPSB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmN1cnJlbmN5KSA/PyByLmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBpID0gKCgoKGwgPSB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGFiZWwpID8/IG4gPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogdCAhPSBudWxsICYmIHQucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBpXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogQ2UgfSA9IFMoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gVW8odCwgcikge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQganQoci5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogci5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiB0LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogci5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGEsIGEgPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICByLnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oYSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyByLnNlc3Npb24uYWJvcnQoKSwgZTtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gam8odCwgcikge1xuICBpZiAoIXQucmVkaXJlY3RfdXJsKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgQ2UoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCB0KTtcbiAgY29uc3QgeyBzdGF0dXM6IGUgfSA9IGF3YWl0IE5lKHtcbiAgICB1cmw6IHQucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IHIuYmFzZVVybFxuICB9KTtcbiAgaWYgKENlKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtlfV1gKSwgZSA9PT0gJC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChlID09PSAkLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGNvbnN0IG4gPSBhd2FpdCBLKHIuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogci5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IHQudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogdC5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gQ2UoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBuKSwgbjtcbn1cbmFzeW5jIGZ1bmN0aW9uIHhvKHQsIHIpIHtcbiAgdmFyIGUsIG4sIGEsIHMsIGk7XG4gIHRyeSB7XG4gICAgY29uc3QgYyA9IHQucGF5bWVudCwgbCA9IEJ0KHIubm9uQ2RlRm9ybUlucHV0cywgYyksIHUgPSBlZShcbiAgICAgIGwsXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgci5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBoID0gKGF3YWl0IHdlKHIuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogci5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogdVtwLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogdVtwLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXS5jb25zZW50X2lkO1xuICAgIGlmICghaClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbGV0IG0gPSBhd2FpdCBLKHIuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBoLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShjLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIENlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbSk7XG4gICAgbGV0IHkgPSAobiA9IChlID0gbS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBlWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZDtcbiAgICBjb25zdCBfID0gKGEgPSBtLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZmluZChcbiAgICAgIChiKSA9PiBiLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAoXyAhPSBudWxsICYmIF8ucmVkaXJlY3RfdXJsICYmIF8uY29uc2VudF9pZCAmJiBfLnRoZWlyX3BtX2lkICYmIChtID0gYXdhaXQgam8oXywgciksIHkgPSAoaSA9IChzID0gbS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBzWzBdKSA9PSBudWxsID8gdm9pZCAwIDogaS5pZCksICF5KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgdyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gci5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh3KSwgVGUoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogci5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IG0sXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHIuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobCksIGM7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IGNlLCBlcnJfXzogcWUgfSA9IFMoXCJhd3gtYXBwbGUtcGF5XCIpLCAkbyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiB6LkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBIKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgWXQpO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiBlO1xuICAgIGNlKFwiTG9hZGluZyBBcHBsZSBQYXkgU0RLLi4uXCIpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBKdCgpLCBjZShcIkFwcGxlIFBheSBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICB9IGNhdGNoIChmKSB7XG4gICAgICByZXR1cm4gcWUoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIsIGYpLCBlO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBjZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIGU7XG4gICAgaWYgKGNlKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiBjZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgZTtcbiAgICBpZiAoIW4ubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBOKGkpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBtZShpLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEYuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBCKHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBxZShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCByLmdldC5vbkNoZWNrb3V0RXJyb3IoKGggPT0gbnVsbCA/IHZvaWQgMCA6IGgubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3Nvcjogei5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCB6byA9IFgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHc7XG4gICAgY29uc3QgcyA9IEgodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBZdCksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSwgaW5pdGlhbFByZXZpZXc6IGMgfSA9IG4sIGwgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBOKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIHsgY3VycmVuY3lDb2RlOiBmLCB0b3RhbDogaCB9ID0gWHQoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgZGVmYXVsdExhYmVsOiAodyA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB3LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgbSA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IGYsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcbiAgICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICAgIFwic3VwcG9ydHNEZWJpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICAgIF0sXG4gICAgICB0b3RhbDogaCxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBRdCh7XG4gICAgICAgIHRvdGFsOiBoLFxuICAgICAgICBwcmVmaWxsOiB1XG4gICAgICB9KSxcbiAgICAgIC4uLihpID09IG51bGwgPyB2b2lkIDAgOiBpLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpID8/IHt9XG4gICAgfSwgeSA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgbSksIF8gPSB7XG4gICAgICBzZXNzaW9uOiB5LFxuICAgICAgY29ubmVjdGlvbjogdC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHMubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiB0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChiLCB2KSA9PiB7XG4gICAgICBjb25zdCBFID0gKCkgPT4ge1xuICAgICAgICBjZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCB7IGNsZWFudXBDYW5jZWxMaXN0ZW5lcjogUiB9ID0gTG8oRSk7XG4gICAgICB5Lm9uY2FuY2VsID0gRSwgeS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoTykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IFVvKE8sIF8pO1xuICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgdihrKTtcbiAgICAgICAgfVxuICAgICAgfSwgeS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgTyA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5oIH1cbiAgICAgICAgfTtcbiAgICAgICAgeS5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oTyk7XG4gICAgICB9LCB5Lm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoTykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGsgPSBhd2FpdCB4byhPLCBfKTtcbiAgICAgICAgICBSKCksIGIoayk7XG4gICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICB2KGspO1xuICAgICAgICB9XG4gICAgICB9LCB5LmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGIpID0+IHtcbiAgICAgIHRocm93IHFlKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgYiksIGI7XG4gICAgfSk7XG4gIH1cbik7XG5hc3luYyBmdW5jdGlvbiBHbyh0LCByKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBqdChyLmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogdC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHIucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgci5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgci5zZXNzaW9uLmFib3J0KCksIGU7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIFZvKHQsIHIpIHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IHQucGF5bWVudCwgcyA9IEJ0KHIubm9uQ2RlRm9ybUlucHV0cywgYSksIGkgPSBlZShzLCByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhd2FpdCB3ZShyLmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBpW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGlbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGlbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IGlbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IGlbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShhLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9LCBsID0gYXdhaXQgSyhyLmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogci5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogY1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghKChuID0gKGUgPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHIuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoZCksIFRlKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiByLmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBpLFxuICAgICAgY29uZmlybVJlc3VsdDogbCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IHMgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgci5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChzKSwgYTtcbiAgfVxufVxuY29uc3QgZXIgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCB0ciA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IGhlLCBlcnJfXzogWWUgfSA9IFMoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCBxbyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiB6LkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gSCh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGVyKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gZTtcbiAgICBoZShcIkxvYWRpbmcgQXBwbGUgUGF5IFNESy4uLlwiKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgSnQoKSwgaGUoXCJBcHBsZSBQYXkgU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgfSBjYXRjaCAoZikge1xuICAgICAgcmV0dXJuIFllKFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiLCBmKSwgZTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gaGUoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCBlO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIGhlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCBlO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE4oaSksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IG1lKGksIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgRi5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIFllKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoaCA9PSBudWxsID8gdm9pZCAwIDogaC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiB6LkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBZbyA9IFgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHc7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogcywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSB9ID0gbiwgYyA9IEgodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBlciksIHsgY3VycmVuY3lDb2RlOiBsLCB0b3RhbDogdSB9ID0gWHQoe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBzLFxuICAgICAgZGVmYXVsdExhYmVsOiAodyA9IGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB3LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgZCA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgZiA9IGF3YWl0IE4oZCksIGggPSBmLm1vZGUgPT09IFwic2V0dXBcIiwgbSA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IGwsXG4gICAgICB0b3RhbDogdSxcbiAgICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1wic3VwcG9ydHMzRFNcIiwgXCJzdXBwb3J0c0NyZWRpdFwiLCBcInN1cHBvcnRzRGViaXRcIl0sXG4gICAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogUXQoe1xuICAgICAgICB0b3RhbDogdSxcbiAgICAgICAgcHJlZmlsbDogZlxuICAgICAgfSksXG4gICAgICAuLi4oaSA9PSBudWxsID8gdm9pZCAwIDogaS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSA/PyB7fVxuICAgIH0sIHkgPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIG0pLCBfID0ge1xuICAgICAgc2Vzc2lvbjogeSxcbiAgICAgIGNvbm5lY3Rpb246IHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiByLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogZixcbiAgICAgIGlzU2V0dXBNb2RlOiBoLFxuICAgICAgYmFzZVVybDogdC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogYVxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChiLCB2KSA9PiB7XG4gICAgICB5Lm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBoZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCB5Lm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChFKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgR28oRSwgXyk7XG4gICAgICAgIH0gY2F0Y2ggKFIpIHtcbiAgICAgICAgICB2KFIpO1xuICAgICAgICB9XG4gICAgICB9LCB5Lm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBFID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBtLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHkuY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKEUpO1xuICAgICAgfSwgeS5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKEUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBSID0gYXdhaXQgVm8oRSwgXyk7XG4gICAgICAgICAgYihSKTtcbiAgICAgICAgfSBjYXRjaCAoUikge1xuICAgICAgICAgIHYoUik7XG4gICAgICAgIH1cbiAgICAgIH0sIHkuYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoYikgPT4ge1xuICAgICAgdGhyb3cgWWUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBiKSwgYjtcbiAgICB9KTtcbiAgfVxuKSwgeyBsb2dfXzogb2UsIGVycl9fOiBfZSB9ID0gUyhcImF1dGhuZXQtZ29vZ2xlcGF5XCIpLCBLbyA9IHllKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICB2YXIgZCwgZjtcbiAgICBvZShcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IGUgPSB7XG4gICAgICBwcm9jZXNzb3I6IHouRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBIKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdHIpO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiBlO1xuICAgIG9lKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgYSA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIF9lKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgZTtcbiAgICBpZiAob2UoXCJMb2FkaW5nIEdvb2dsZSBQYXkgU0RLLi4uXCIpLCBhd2FpdCBIdCgpLCAhKChmID0gKGQgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogZC5wYXltZW50cykgIT0gbnVsbCAmJiBmLmFwaSkpXG4gICAgICByZXR1cm4gX2UoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCBlO1xuICAgIG9lKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoID0gTGUoe1xuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogYS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBhLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IGEuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIHsgcmVzdWx0OiBtIH0gPSBhd2FpdCBVZSh0LmJhc2VVcmwsIGgpLmlzUmVhZHlUb1BheShcbiAgICAgICAgaFxuICAgICAgKTtcbiAgICAgIGlmICghbSlcbiAgICAgICAgcmV0dXJuIG9lKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIGU7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgcmV0dXJuIF9lKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgaCksIGU7XG4gICAgfVxuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGkgPSBhd2FpdCBOKHMpLCBjID0gaS5tb2RlID09PSBcInNldHVwXCIsIGwgPSBhd2FpdCBtZShzLCBpLnRva2VuLCBjLCB2b2lkIDApLCB1ID0gYXN5bmMgKGgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIEYuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogQih0LmZvcm1EaXYpLFxuICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uaCxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiBsXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgX2UoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgbSksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobSA9PSBudWxsID8gdm9pZCAwIDogbS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiB6LkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IHVcbiAgICB9O1xuICB9XG4pLCBIbyA9IFgoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGYsIGgsIG0sIHk7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogcywgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSB9ID0gYSwgbCA9IEgodC5jaGVja291dFBheW1lbnRNZXRob2RzLCB0cikubWV0YWRhdGEsIHUgPSBMZSh7XG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpXG4gICAgfSksIGQgPSBVZSh0LmJhc2VVcmwsIHUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBfID0gYXdhaXQgZC5sb2FkUGF5bWVudERhdGEodSk7XG4gICAgICBvZShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIF8pO1xuICAgICAgY29uc3QgdyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYiA9IGF3YWl0IE4odyksIHYgPSBadChyLCBfKSwgRSA9IGVlKHYsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgUiA9IChoID0gKGYgPSBfLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaC50b2tlbjtcbiAgICAgIGlmICghUilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBPID0gYXdhaXQgd2Uodywge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBlLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogZSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBFW3AuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogRVtwLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBFW3AuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICB6aXBfY29kZTogRVtwLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5OiBFW3AuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBvZShcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBPKTtcbiAgICAgIGNvbnN0IGsgPSBhd2FpdCBLKHcsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBiLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBlLnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoUilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCEoKHkgPSAobSA9IGsucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogbVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuaWQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBUZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiB3LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGUsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogRSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogayxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgdGhyb3cgX2UoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgXyksIG5ldyBFcnJvcigoXyA9PSBudWxsID8gdm9pZCAwIDogXy5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBBZSA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSB0LmZpbHRlcigoYSkgPT4ge1xuICAgIGNvbnN0IHMgPSBlID09PSB2b2lkIDAgPyAhMCA6IGEucHJvY2Vzc29yX25hbWUgPT09IGUsIGkgPSBhLnByb3ZpZGVyID09PSByO1xuICAgIHJldHVybiBzICYmIGk7XG4gIH0pO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIGlmIChuLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIHJldHVybiBuWzBdO1xufSwgRiA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBfb1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBDbyxcbiAgICBydW46IFNvXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBXbixcbiAgICBydW46IFpuXG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBydW46IEZvXG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBPbyxcbiAgICBydW46IERvXG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogJG8sXG4gICAgcnVuOiB6b1xuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IHFvLFxuICAgIHJ1bjogWW9cbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogS28sXG4gICAgcnVuOiBIb1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcbnZhciBLZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgcmV0dXJuIEtlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oZSwgbikge1xuICAgIGUuX19wcm90b19fID0gbjtcbiAgfSB8fCBmdW5jdGlvbihlLCBuKSB7XG4gICAgZm9yICh2YXIgYSBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgYSkgJiYgKGVbYV0gPSBuW2FdKTtcbiAgfSwgS2UodCwgcik7XG59O1xuZnVuY3Rpb24gdGUodCwgcikge1xuICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcocikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBLZSh0LCByKTtcbiAgZnVuY3Rpb24gZSgpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgfVxuICB0LnByb3RvdHlwZSA9IHIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHIpIDogKGUucHJvdG90eXBlID0gci5wcm90b3R5cGUsIG5ldyBlKCkpO1xufVxuZnVuY3Rpb24gV28odCwgciwgZSwgbikge1xuICBmdW5jdGlvbiBhKHMpIHtcbiAgICByZXR1cm4gcyBpbnN0YW5jZW9mIGUgPyBzIDogbmV3IGUoZnVuY3Rpb24oaSkge1xuICAgICAgaShzKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChlIHx8IChlID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHMsIGkpIHtcbiAgICBmdW5jdGlvbiBjKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi5uZXh0KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgaShmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4udGhyb3coZCkpO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBpKGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGQpIHtcbiAgICAgIGQuZG9uZSA/IHMoZC52YWx1ZSkgOiBhKGQudmFsdWUpLnRoZW4oYywgbCk7XG4gICAgfVxuICAgIHUoKG4gPSBuLmFwcGx5KHQsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBycih0LCByKSB7XG4gIHZhciBlID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHNbMF0gJiAxKSB0aHJvdyBzWzFdO1xuICAgIHJldHVybiBzWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBhLCBzLCBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gaS5uZXh0ID0gYygwKSwgaS50aHJvdyA9IGMoMSksIGkucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgaTtcbiAgZnVuY3Rpb24gYyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBsKFt1LCBkXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGkgJiYgKGkgPSAwLCB1WzBdICYmIChlID0gMCkpLCBlOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIGEgJiYgKHMgPSB1WzBdICYgMiA/IGEucmV0dXJuIDogdVswXSA/IGEudGhyb3cgfHwgKChzID0gYS5yZXR1cm4pICYmIHMuY2FsbChhKSwgMCkgOiBhLm5leHQpICYmICEocyA9IHMuY2FsbChhLCB1WzFdKSkuZG9uZSkgcmV0dXJuIHM7XG4gICAgICBzd2l0Y2ggKGEgPSAwLCBzICYmICh1ID0gW3VbMF0gJiAyLCBzLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcyA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gZS5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgZS5sYWJlbCsrLCBhID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzID0gZS50cnlzLCAhKHMgPSBzLmxlbmd0aCA+IDAgJiYgc1tzLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFzIHx8IHVbMV0gPiBzWzBdICYmIHVbMV0gPCBzWzNdKSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgZS5sYWJlbCA8IHNbMV0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBzWzFdLCBzID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocyAmJiBlLmxhYmVsIDwgc1syXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMl0sIGUub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc1syXSAmJiBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IHIuY2FsbCh0LCBlKTtcbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICB1ID0gWzYsIGRdLCBhID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IHMgPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBkZSh0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBlID0gciAmJiB0W3JdLCBuID0gMDtcbiAgaWYgKGUpIHJldHVybiBlLmNhbGwodCk7XG4gIGlmICh0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHQgJiYgbiA+PSB0Lmxlbmd0aCAmJiAodCA9IHZvaWQgMCksIHsgdmFsdWU6IHQgJiYgdFtuKytdLCBkb25lOiAhdCB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihyID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gSWUodCwgcikge1xuICB2YXIgZSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIHRbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFlKSByZXR1cm4gdDtcbiAgdmFyIG4gPSBlLmNhbGwodCksIGEsIHMgPSBbXSwgaTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHIgPT09IHZvaWQgMCB8fCByLS0gPiAwKSAmJiAhKGEgPSBuLm5leHQoKSkuZG9uZTsgKSBzLnB1c2goYS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBpID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhICYmICFhLmRvbmUgJiYgKGUgPSBuLnJldHVybikgJiYgZS5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBSZSh0LCByLCBlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgYSA9IHIubGVuZ3RoLCBzOyBuIDwgYTsgbisrKVxuICAgIChzIHx8ICEobiBpbiByKSkgJiYgKHMgfHwgKHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLCAwLCBuKSksIHNbbl0gPSByW25dKTtcbiAgcmV0dXJuIHQuY29uY2F0KHMgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocikpO1xufVxuZnVuY3Rpb24gdWUodCkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHVlID8gKHRoaXMudiA9IHQsIHRoaXMpIDogbmV3IHVlKHQpO1xufVxuZnVuY3Rpb24gWm8odCwgciwgZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IGUuYXBwbHkodCwgciB8fCBbXSksIGEsIHMgPSBbXTtcbiAgcmV0dXJuIGEgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBjKFwibmV4dFwiKSwgYyhcInRocm93XCIpLCBjKFwicmV0dXJuXCIsIGkpLCBhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBhO1xuICBmdW5jdGlvbiBpKG0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oeSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh5KS50aGVuKG0sIGYpO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYyhtLCB5KSB7XG4gICAgblttXSAmJiAoYVttXSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih3LCBiKSB7XG4gICAgICAgIHMucHVzaChbbSwgXywgdywgYl0pID4gMSB8fCBsKG0sIF8pO1xuICAgICAgfSk7XG4gICAgfSwgeSAmJiAoYVttXSA9IHkoYVttXSkpKTtcbiAgfVxuICBmdW5jdGlvbiBsKG0sIHkpIHtcbiAgICB0cnkge1xuICAgICAgdShuW21dKHkpKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBoKHNbMF1bM10sIF8pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1KG0pIHtcbiAgICBtLnZhbHVlIGluc3RhbmNlb2YgdWUgPyBQcm9taXNlLnJlc29sdmUobS52YWx1ZS52KS50aGVuKGQsIGYpIDogaChzWzBdWzJdLCBtKTtcbiAgfVxuICBmdW5jdGlvbiBkKG0pIHtcbiAgICBsKFwibmV4dFwiLCBtKTtcbiAgfVxuICBmdW5jdGlvbiBmKG0pIHtcbiAgICBsKFwidGhyb3dcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gaChtLCB5KSB7XG4gICAgbSh5KSwgcy5zaGlmdCgpLCBzLmxlbmd0aCAmJiBsKHNbMF1bMF0sIHNbMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBKbyh0KSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciByID0gdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGU7XG4gIHJldHVybiByID8gci5jYWxsKHQpIDogKHQgPSB0eXBlb2YgZGUgPT0gXCJmdW5jdGlvblwiID8gZGUodCkgOiB0W1N5bWJvbC5pdGVyYXRvcl0oKSwgZSA9IHt9LCBuKFwibmV4dFwiKSwgbihcInRocm93XCIpLCBuKFwicmV0dXJuXCIpLCBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBlKTtcbiAgZnVuY3Rpb24gbihzKSB7XG4gICAgZVtzXSA9IHRbc10gJiYgZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIGwpIHtcbiAgICAgICAgaSA9IHRbc10oaSksIGEoYywgbCwgaS5kb25lLCBpLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYShzLCBpLCBjLCBsKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oZnVuY3Rpb24odSkge1xuICAgICAgcyh7IHZhbHVlOiB1LCBkb25lOiBjIH0pO1xuICAgIH0sIGkpO1xuICB9XG59XG5mdW5jdGlvbiBJKHQpIHtcbiAgcmV0dXJuIHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIGplKHQpIHtcbiAgdmFyIHIgPSBmdW5jdGlvbihuKSB7XG4gICAgRXJyb3IuY2FsbChuKSwgbi5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCBlID0gdChyKTtcbiAgcmV0dXJuIGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCBlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGUsIGU7XG59XG52YXIgemUgPSBqZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gZSA/IGUubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIGUubWFwKGZ1bmN0aW9uKG4sIGEpIHtcbiAgICAgIHJldHVybiBhICsgMSArIFwiKSBcIiArIG4udG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBGZSh0LCByKSB7XG4gIGlmICh0KSB7XG4gICAgdmFyIGUgPSB0LmluZGV4T2Yocik7XG4gICAgMCA8PSBlICYmIHQuc3BsaWNlKGUsIDEpO1xuICB9XG59XG52YXIgYmUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSByLCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgZSwgbiwgYSwgcztcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIGkgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAoaSlcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkoaSkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSBkZShpKSwgbCA9IGMubmV4dCgpOyAhbC5kb25lOyBsID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBsLnZhbHVlO1xuICAgICAgICAgICAgICB1LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICByID0geyBlcnJvcjogXyB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsICYmICFsLmRvbmUgJiYgKGUgPSBjLnJldHVybikgJiYgZS5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgaS5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgZCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKEkoZCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZCgpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcyA9IF8gaW5zdGFuY2VvZiB6ZSA/IF8uZXJyb3JzIDogW19dO1xuICAgICAgICB9XG4gICAgICB2YXIgZiA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAoZikge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBoID0gZGUoZiksIG0gPSBoLm5leHQoKTsgIW0uZG9uZTsgbSA9IGgubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgeSA9IG0udmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB1dCh5KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgICAgcyA9IHMgPz8gW10sIF8gaW5zdGFuY2VvZiB6ZSA/IHMgPSBSZShSZShbXSwgSWUocykpLCBJZShfLmVycm9ycykpIDogcy5wdXNoKF8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIG4gPSB7IGVycm9yOiBfIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG0gJiYgIW0uZG9uZSAmJiAoYSA9IGgucmV0dXJuKSAmJiBhLmNhbGwoaCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMpXG4gICAgICAgIHRocm93IG5ldyB6ZShzKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAociAmJiByICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICB1dChyKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIHQpIHtcbiAgICAgICAgICBpZiAoci5jbG9zZWQgfHwgci5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHIuX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChlID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IFtdKS5wdXNoKHIpO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiBlID09PSByIHx8IEFycmF5LmlzQXJyYXkoZSkgJiYgZS5pbmNsdWRlcyhyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KGUpID8gKGUucHVzaChyKSwgZSkgOiBlID8gW2UsIHJdIDogcjtcbiAgfSwgdC5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICBlID09PSByID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkoZSkgJiYgRmUoZSwgcik7XG4gIH0sIHQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgZSAmJiBGZShlLCByKSwgciBpbnN0YW5jZW9mIHQgJiYgci5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCB0LkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSBuZXcgdCgpO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICEwLCByO1xuICB9KCksIHQ7XG59KCksIG5yID0gYmUuRU1QVFk7XG5mdW5jdGlvbiBvcih0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgYmUgfHwgdCAmJiBcImNsb3NlZFwiIGluIHQgJiYgSSh0LnJlbW92ZSkgJiYgSSh0LmFkZCkgJiYgSSh0LnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIHV0KHQpIHtcbiAgSSh0KSA/IHQoKSA6IHQudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBhciA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCBzciA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIFJlKFt0LCByXSwgSWUoZSkpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gaXIodCkge1xuICBzci5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IHQ7XG4gIH0pO1xufVxuZnVuY3Rpb24gZHQoKSB7XG59XG5mdW5jdGlvbiBTZSh0KSB7XG4gIHQoKTtcbn1cbnZhciBldCA9IGZ1bmN0aW9uKHQpIHtcbiAgdGUociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSkge1xuICAgIHZhciBuID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIG4uaXNTdG9wcGVkID0gITEsIGUgPyAobi5kZXN0aW5hdGlvbiA9IGUsIG9yKGUpICYmIGUuYWRkKG4pKSA6IG4uZGVzdGluYXRpb24gPSBlYSwgbjtcbiAgfVxuICByZXR1cm4gci5jcmVhdGUgPSBmdW5jdGlvbihlLCBuLCBhKSB7XG4gICAgcmV0dXJuIG5ldyBIZShlLCBuLCBhKTtcbiAgfSwgci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IoZSkpO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCByLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgcjtcbn0oYmUpLCBCbyA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gR2UodCwgcikge1xuICByZXR1cm4gQm8uY2FsbCh0LCByKTtcbn1cbnZhciBRbyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5uZXh0KHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBQZShuKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIGUuZXJyb3Iocik7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIFBlKG4pO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIFBlKHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICByLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIFBlKGUpO1xuICAgICAgfVxuICB9LCB0O1xufSgpLCBIZSA9IGZ1bmN0aW9uKHQpIHtcbiAgdGUociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgYSkge1xuICAgIHZhciBzID0gdC5jYWxsKHRoaXMpIHx8IHRoaXMsIGk7XG4gICAgaWYgKEkoZSkgfHwgIWUpXG4gICAgICBpID0ge1xuICAgICAgICBuZXh0OiBlID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IG4gPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogYSA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYztcbiAgICAgIHMgJiYgYXIudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGMgPSBPYmplY3QuY3JlYXRlKGUpLCBjLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBpID0ge1xuICAgICAgICBuZXh0OiBlLm5leHQgJiYgR2UoZS5uZXh0LCBjKSxcbiAgICAgICAgZXJyb3I6IGUuZXJyb3IgJiYgR2UoZS5lcnJvciwgYyksXG4gICAgICAgIGNvbXBsZXRlOiBlLmNvbXBsZXRlICYmIEdlKGUuY29tcGxldGUsIGMpXG4gICAgICB9KSA6IGkgPSBlO1xuICAgIH1cbiAgICByZXR1cm4gcy5kZXN0aW5hdGlvbiA9IG5ldyBRbyhpKSwgcztcbiAgfVxuICByZXR1cm4gcjtcbn0oZXQpO1xuZnVuY3Rpb24gUGUodCkge1xuICBpcih0KTtcbn1cbmZ1bmN0aW9uIFhvKHQpIHtcbiAgdGhyb3cgdDtcbn1cbnZhciBlYSA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogZHQsXG4gIGVycm9yOiBYbyxcbiAgY29tcGxldGU6IGR0XG59LCB0dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIHRhKHQpIHtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiByYSh0KSB7XG4gIHJldHVybiB0Lmxlbmd0aCA9PT0gMCA/IHRhIDogdC5sZW5ndGggPT09IDEgPyB0WzBdIDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0LnJlZHVjZShmdW5jdGlvbihuLCBhKSB7XG4gICAgICByZXR1cm4gYShuKTtcbiAgICB9LCBlKTtcbiAgfTtcbn1cbnZhciBRID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHIgJiYgKHRoaXMuX3N1YnNjcmliZSA9IHIpO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gbmV3IHQoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlLm9wZXJhdG9yID0gciwgZTtcbiAgfSwgdC5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHZhciBhID0gdGhpcywgcyA9IG9hKHIpID8gciA6IG5ldyBIZShyLCBlLCBuKTtcbiAgICByZXR1cm4gU2UoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSA9IGEsIGMgPSBpLm9wZXJhdG9yLCBsID0gaS5zb3VyY2U7XG4gICAgICBzLmFkZChjID8gYy5jYWxsKHMsIGwpIDogbCA/IGEuX3N1YnNjcmliZShzKSA6IGEuX3RyeVN1YnNjcmliZShzKSk7XG4gICAgfSksIHM7XG4gIH0sIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUocik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgci5lcnJvcihlKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihyLCBlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIHJldHVybiBlID0gcHQoZSksIG5ldyBlKGZ1bmN0aW9uKGEsIHMpIHtcbiAgICAgIHZhciBpID0gbmV3IEhlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByKGMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgIHMobCksIGkudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBzLFxuICAgICAgICBjb21wbGV0ZTogYVxuICAgICAgfSk7XG4gICAgICBuLnN1YnNjcmliZShpKTtcbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICByZXR1cm4gKGUgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5zdWJzY3JpYmUocik7XG4gIH0sIHQucHJvdG90eXBlW3R0XSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0LnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgciA9IFtdLCBlID0gMDsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKylcbiAgICAgIHJbZV0gPSBhcmd1bWVudHNbZV07XG4gICAgcmV0dXJuIHJhKHIpKHRoaXMpO1xuICB9LCB0LnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIHJldHVybiByID0gcHQociksIG5ldyByKGZ1bmN0aW9uKG4sIGEpIHtcbiAgICAgIHZhciBzO1xuICAgICAgZS5zdWJzY3JpYmUoZnVuY3Rpb24oaSkge1xuICAgICAgICByZXR1cm4gcyA9IGk7XG4gICAgICB9LCBmdW5jdGlvbihpKSB7XG4gICAgICAgIHJldHVybiBhKGkpO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuKHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBuZXcgdChyKTtcbiAgfSwgdDtcbn0oKTtcbmZ1bmN0aW9uIHB0KHQpIHtcbiAgdmFyIHI7XG4gIHJldHVybiAociA9IHQgPz8gYXIuUHJvbWlzZSkgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBuYSh0KSB7XG4gIHJldHVybiB0ICYmIEkodC5uZXh0KSAmJiBJKHQuZXJyb3IpICYmIEkodC5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBvYSh0KSB7XG4gIHJldHVybiB0ICYmIHQgaW5zdGFuY2VvZiBldCB8fCBuYSh0KSAmJiBvcih0KTtcbn1cbmZ1bmN0aW9uIGFhKHQpIHtcbiAgcmV0dXJuIEkodCA9PSBudWxsID8gdm9pZCAwIDogdC5saWZ0KTtcbn1cbmZ1bmN0aW9uIHNhKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICBpZiAoYWEocikpXG4gICAgICByZXR1cm4gci5saWZ0KGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdChlLCB0aGlzKTtcbiAgICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICAgIHRoaXMuZXJyb3Iobik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZVwiKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGlhKHQsIHIsIGUsIG4sIGEpIHtcbiAgcmV0dXJuIG5ldyBjYSh0LCByLCBlLCBuLCBhKTtcbn1cbnZhciBjYSA9IGZ1bmN0aW9uKHQpIHtcbiAgdGUociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgYSwgcywgaSwgYykge1xuICAgIHZhciBsID0gdC5jYWxsKHRoaXMsIGUpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGwub25GaW5hbGl6ZSA9IGksIGwuc2hvdWxkVW5zdWJzY3JpYmUgPSBjLCBsLl9uZXh0ID0gbiA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4odSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIGUuZXJyb3IoZCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9uZXh0LCBsLl9lcnJvciA9IHMgPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICBlLmVycm9yKGQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fZXJyb3IsIGwuX2NvbXBsZXRlID0gYSA/IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSgpO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBlLmVycm9yKHUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fY29tcGxldGUsIGw7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgdmFyIG4gPSB0aGlzLmNsb3NlZDtcbiAgICAgIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksICFuICYmICgoZSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwIHx8IGUuY2FsbCh0aGlzKSk7XG4gICAgfVxuICB9LCByO1xufShldCksIGxhID0gamUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBjciA9IGZ1bmN0aW9uKHQpIHtcbiAgdGUociwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdmFyIGUgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gZS5jbG9zZWQgPSAhMSwgZS5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgZS5vYnNlcnZlcnMgPSBbXSwgZS5pc1N0b3BwZWQgPSAhMSwgZS5oYXNFcnJvciA9ICExLCBlLnRocm93bkVycm9yID0gbnVsbCwgZTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IG5ldyBtdCh0aGlzLCB0aGlzKTtcbiAgICByZXR1cm4gbi5vcGVyYXRvciA9IGUsIG47XG4gIH0sIHIucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgdGhyb3cgbmV3IGxhKCk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIFNlKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGEsIHM7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzIHx8IChuLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKG4ub2JzZXJ2ZXJzKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IGRlKG4uY3VycmVudE9ic2VydmVycyksIGMgPSBpLm5leHQoKTsgIWMuZG9uZTsgYyA9IGkubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgbCA9IGMudmFsdWU7XG4gICAgICAgICAgICBsLm5leHQoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgYSA9IHsgZXJyb3I6IHUgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYyAmJiAhYy5kb25lICYmIChzID0gaS5yZXR1cm4pICYmIHMuY2FsbChpKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBTZShmdW5jdGlvbigpIHtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmhhc0Vycm9yID0gbi5pc1N0b3BwZWQgPSAhMCwgbi50aHJvd25FcnJvciA9IGU7XG4gICAgICAgIGZvciAodmFyIGEgPSBuLm9ic2VydmVyczsgYS5sZW5ndGg7IClcbiAgICAgICAgICBhLnNoaWZ0KCkuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIFNlKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGUuX3Rocm93SWZDbG9zZWQoKSwgIWUuaXNTdG9wcGVkKSB7XG4gICAgICAgIGUuaXNTdG9wcGVkID0gITA7XG4gICAgICAgIGZvciAodmFyIG4gPSBlLm9ic2VydmVyczsgbi5sZW5ndGg7IClcbiAgICAgICAgICBuLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gITAsIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGU7XG4gICAgICByZXR1cm4gKChlID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUubGVuZ3RoKSA+IDA7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCByLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpLCB0aGlzLl9pbm5lclN1YnNjcmliZShlKTtcbiAgfSwgci5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcywgYSA9IHRoaXMsIHMgPSBhLmhhc0Vycm9yLCBpID0gYS5pc1N0b3BwZWQsIGMgPSBhLm9ic2VydmVycztcbiAgICByZXR1cm4gcyB8fCBpID8gbnIgOiAodGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgYy5wdXNoKGUpLCBuZXcgYmUoZnVuY3Rpb24oKSB7XG4gICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBGZShjLCBlKTtcbiAgICB9KSk7XG4gIH0sIHIucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcywgYSA9IG4uaGFzRXJyb3IsIHMgPSBuLnRocm93bkVycm9yLCBpID0gbi5pc1N0b3BwZWQ7XG4gICAgYSA/IGUuZXJyb3IocykgOiBpICYmIGUuY29tcGxldGUoKTtcbiAgfSwgci5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSBuZXcgUSgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGU7XG4gIH0sIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiBuZXcgbXQoZSwgbik7XG4gIH0sIHI7XG59KFEpLCBtdCA9IGZ1bmN0aW9uKHQpIHtcbiAgdGUociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBhID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuZGVzdGluYXRpb24gPSBlLCBhLnNvdXJjZSA9IG4sIGE7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGE7XG4gICAgKGEgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4ubmV4dCkgPT09IG51bGwgfHwgYSA9PT0gdm9pZCAwIHx8IGEuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGE7XG4gICAgKGEgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uZXJyb3IpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG47XG4gICAgKG4gPSAoZSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuY29tcGxldGUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCB8fCBuLmNhbGwoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGE7XG4gICAgcmV0dXJuIChhID0gKG4gPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5zdWJzY3JpYmUoZSkpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiBucjtcbiAgfSwgcjtcbn0oY3IpLCB1YSA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgZGEgPSBmdW5jdGlvbih0KSB7XG4gIHRlKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICByZXR1cm4gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCByO1xufShiZSksIHl0ID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBSZShbdCwgcl0sIEllKGUpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgcGEgPSBmdW5jdGlvbih0KSB7XG4gIHRlKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgYSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLnNjaGVkdWxlciA9IGUsIGEud29yayA9IG4sIGEucGVuZGluZyA9ICExLCBhO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgYTtcbiAgICBpZiAobiA9PT0gdm9pZCAwICYmIChuID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IGU7XG4gICAgdmFyIHMgPSB0aGlzLmlkLCBpID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIHMgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoaSwgcywgbikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IG4sIHRoaXMuaWQgPSAoYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiB0aGlzLnJlcXVlc3RBc3luY0lkKGksIHRoaXMuaWQsIG4pLCB0aGlzO1xuICB9LCByLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGEpIHtcbiAgICByZXR1cm4gYSA9PT0gdm9pZCAwICYmIChhID0gMCksIHl0LnNldEludGVydmFsKGUuZmx1c2guYmluZChlLCB0aGlzKSwgYSk7XG4gIH0sIHIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgYSkge1xuICAgIGlmIChhID09PSB2b2lkIDAgJiYgKGEgPSAwKSwgYSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGEgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiBuO1xuICAgIG4gIT0gbnVsbCAmJiB5dC5jbGVhckludGVydmFsKG4pO1xuICB9LCByLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBhID0gdGhpcy5fZXhlY3V0ZShlLCBuKTtcbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiBhO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCByLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgYSA9ICExLCBzO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsoZSk7XG4gICAgfSBjYXRjaCAoaSkge1xuICAgICAgYSA9ICEwLCBzID0gaSB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoYSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIHM7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIGUgPSB0aGlzLCBuID0gZS5pZCwgYSA9IGUuc2NoZWR1bGVyLCBzID0gYS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIEZlKHMsIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCByO1xufShkYSksIGZ0ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQociwgZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IHQubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gciwgdGhpcy5ub3cgPSBlO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIGUsIG4pIHtcbiAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgcikuc2NoZWR1bGUobiwgZSk7XG4gIH0sIHQubm93ID0gdWEubm93LCB0O1xufSgpLCBtYSA9IGZ1bmN0aW9uKHQpIHtcbiAgdGUociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IGZ0Lm5vdyk7XG4gICAgdmFyIGEgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5hY3Rpb25zID0gW10sIGEuX2FjdGl2ZSA9ICExLCBhO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBuLnB1c2goZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBhO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAoYSA9IGUuZXhlY3V0ZShlLnN0YXRlLCBlLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKGUgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgYSkge1xuICAgICAgZm9yICg7IGUgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgZS51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgYTtcbiAgICB9XG4gIH0sIHI7XG59KGZ0KSwgeWEgPSBuZXcgbWEocGEpLCBmYSA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIGhhKHQpIHtcbiAgcmV0dXJuIEkodCA9PSBudWxsID8gdm9pZCAwIDogdC50aGVuKTtcbn1cbmZ1bmN0aW9uIF9hKHQpIHtcbiAgcmV0dXJuIEkodFt0dF0pO1xufVxuZnVuY3Rpb24gZ2EodCkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgSSh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiB3YSh0KSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKHQgIT09IG51bGwgJiYgdHlwZW9mIHQgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgdCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24gYmEoKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgdmEgPSBiYSgpO1xuZnVuY3Rpb24gRWEodCkge1xuICByZXR1cm4gSSh0ID09IG51bGwgPyB2b2lkIDAgOiB0W3ZhXSk7XG59XG5mdW5jdGlvbiBQYSh0KSB7XG4gIHJldHVybiBabyh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCBuLCBhLCBzO1xuICAgIHJldHVybiBycih0aGlzLCBmdW5jdGlvbihpKSB7XG4gICAgICBzd2l0Y2ggKGkubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGUgPSB0LmdldFJlYWRlcigpLCBpLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGkudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIGkubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCB1ZShlLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIG4gPSBpLnNlbnQoKSwgYSA9IG4udmFsdWUsIHMgPSBuLmRvbmUsIHMgPyBbNCwgdWUodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIGkuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgdWUoYSldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBpLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gaS5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIGUucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gQ2EodCkge1xuICByZXR1cm4gSSh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBTYSh0KSB7XG4gIGlmICh0IGluc3RhbmNlb2YgUSlcbiAgICByZXR1cm4gdDtcbiAgaWYgKHQgIT0gbnVsbCkge1xuICAgIGlmIChfYSh0KSlcbiAgICAgIHJldHVybiBrYSh0KTtcbiAgICBpZiAoZmEodCkpXG4gICAgICByZXR1cm4gQWEodCk7XG4gICAgaWYgKGhhKHQpKVxuICAgICAgcmV0dXJuIElhKHQpO1xuICAgIGlmIChnYSh0KSlcbiAgICAgIHJldHVybiBscih0KTtcbiAgICBpZiAoRWEodCkpXG4gICAgICByZXR1cm4gUmEodCk7XG4gICAgaWYgKENhKHQpKVxuICAgICAgcmV0dXJuIEZhKHQpO1xuICB9XG4gIHRocm93IHdhKHQpO1xufVxuZnVuY3Rpb24ga2EodCkge1xuICByZXR1cm4gbmV3IFEoZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdFt0dF0oKTtcbiAgICBpZiAoSShlLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gZS5zdWJzY3JpYmUocik7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEFhKHQpIHtcbiAgcmV0dXJuIG5ldyBRKGZ1bmN0aW9uKHIpIHtcbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IHQubGVuZ3RoICYmICFyLmNsb3NlZDsgZSsrKVxuICAgICAgci5uZXh0KHRbZV0pO1xuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBJYSh0KSB7XG4gIHJldHVybiBuZXcgUShmdW5jdGlvbihyKSB7XG4gICAgdC50aGVuKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHIuY2xvc2VkIHx8IChyLm5leHQoZSksIHIuY29tcGxldGUoKSk7XG4gICAgfSwgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSkudGhlbihudWxsLCBpcik7XG4gIH0pO1xufVxuZnVuY3Rpb24gUmEodCkge1xuICByZXR1cm4gbmV3IFEoZnVuY3Rpb24ocikge1xuICAgIHZhciBlLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBhID0gZGUodCksIHMgPSBhLm5leHQoKTsgIXMuZG9uZTsgcyA9IGEubmV4dCgpKSB7XG4gICAgICAgIHZhciBpID0gcy52YWx1ZTtcbiAgICAgICAgaWYgKHIubmV4dChpKSwgci5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIGUgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgJiYgIXMuZG9uZSAmJiAobiA9IGEucmV0dXJuKSAmJiBuLmNhbGwoYSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGxyKHQpIHtcbiAgcmV0dXJuIG5ldyBRKGZ1bmN0aW9uKHIpIHtcbiAgICBNYSh0LCByKS5jYXRjaChmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBGYSh0KSB7XG4gIHJldHVybiBscihQYSh0KSk7XG59XG5mdW5jdGlvbiBNYSh0LCByKSB7XG4gIHZhciBlLCBuLCBhLCBzO1xuICByZXR1cm4gV28odGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBpLCBjO1xuICAgIHJldHVybiBycih0aGlzLCBmdW5jdGlvbihsKSB7XG4gICAgICBzd2l0Y2ggKGwubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGwudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCBlID0gSm8odCksIGwubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCBlLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IGwuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAoaSA9IG4udmFsdWUsIHIubmV4dChpKSwgci5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGwubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSBsLnNlbnQoKSwgYSA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBsLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKHMgPSBlLnJldHVybikgPyBbNCwgcy5jYWxsKGUpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwuc2VudCgpLCBsLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiByLmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBPYSh0LCByLCBlLCBuLCBhKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBhID09PSB2b2lkIDAgJiYgKGEgPSAhMSk7XG4gIHZhciBzID0gci5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICBlKCksIGEgPyB0LmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmICh0LmFkZChzKSwgIWEpXG4gICAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBEYSh0LCByKSB7XG4gIHZhciBlID0gSSh0KSA/IHQgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdDtcbiAgfSwgbiA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gYS5lcnJvcihlKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IFEobik7XG59XG52YXIgVGEgPSBqZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIkVtcHR5RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZVwiO1xuICB9O1xufSk7XG5mdW5jdGlvbiBOYSh0LCByKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGEgPSAhMSwgcztcbiAgICB0LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBmdW5jdGlvbihpKSB7XG4gICAgICAgIHMgPSBpLCBhID0gITA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IG4sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGEgPyBlKHMpIDogbihuZXcgVGEoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gTGEodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHQpO1xufVxudmFyIFVhID0gamUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IG51bGwpLCB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIGphKHQsIHIpIHtcbiAgdmFyIGUgPSBMYSh0KSA/IHsgZmlyc3Q6IHQgfSA6IHR5cGVvZiB0ID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IHQgfSA6IHQsIG4gPSBlLmZpcnN0LCBhID0gZS5lYWNoLCBzID0gZS53aXRoLCBpID0gcyA9PT0gdm9pZCAwID8geGEgOiBzLCBjID0gZS5zY2hlZHVsZXIsIGwgPSBjID09PSB2b2lkIDAgPyB5YSA6IGMsIHUgPSBlLm1ldGEsIGQgPSB1ID09PSB2b2lkIDAgPyBudWxsIDogdTtcbiAgaWYgKG4gPT0gbnVsbCAmJiBhID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4gc2EoZnVuY3Rpb24oZiwgaCkge1xuICAgIHZhciBtLCB5LCBfID0gbnVsbCwgdyA9IDAsIGIgPSBmdW5jdGlvbih2KSB7XG4gICAgICB5ID0gT2EoaCwgbCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbS51bnN1YnNjcmliZSgpLCBTYShpKHtcbiAgICAgICAgICAgIG1ldGE6IGQsXG4gICAgICAgICAgICBsYXN0VmFsdWU6IF8sXG4gICAgICAgICAgICBzZWVuOiB3XG4gICAgICAgICAgfSkpLnN1YnNjcmliZShoKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIGguZXJyb3IoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHYpO1xuICAgIH07XG4gICAgbSA9IGYuc3Vic2NyaWJlKGlhKGgsIGZ1bmN0aW9uKHYpIHtcbiAgICAgIHkgPT0gbnVsbCB8fCB5LnVuc3Vic2NyaWJlKCksIHcrKywgaC5uZXh0KF8gPSB2KSwgYSA+IDAgJiYgYihhKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICB5ICE9IG51bGwgJiYgeS5jbG9zZWQgfHwgeSA9PSBudWxsIHx8IHkudW5zdWJzY3JpYmUoKSwgXyA9IG51bGw7XG4gICAgfSkpLCAhdyAmJiBiKG4gIT0gbnVsbCA/IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogK24gLSBsLm5vdygpIDogYSk7XG4gIH0pO1xufVxuZnVuY3Rpb24geGEodCkge1xuICB0aHJvdyBuZXcgVWEodCk7XG59XG5jbGFzcyBrZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IHIgfSwgdGhpcy5fc3ViamVjdC5uZXh0KHIpLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9IChyLCBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogciwgZXJyTXNnOiBlIH0sIHRoaXMuX3N1YmplY3QuZXJyb3Iocik7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9IChyKSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogciwgdGhpcy5zdWJzY3JpYmUgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIHIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KSwgZS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiBRZSh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB7XG4gICAgICAgIGZpcnN0OiByLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IERhKCgpID0+IG5ldyBFcnJvcihyLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBOYSh0aGlzLl9zdWJqZWN0LnBpcGUoamEoZSkpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgY3IoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogJGEsIGVycl9fOiB6YSB9ID0gUyhcImluaXQtZmxvd3NcIiksIHNlID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBrZSgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogZSxcbiAgICBpbml0aWFsaXplOiBhc3luYyAobikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGUuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBhID0gYXdhaXQgcihuKTtcbiAgICAgICAgJGEoYOKclCAke3R9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgYSksIGUuc2V0KGEpO1xuICAgICAgfSBjYXRjaCAoYSkge1xuICAgICAgICB6YShg8J2ZrSAke3R9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBZKGEpLCBcIkRldGFpbHM6XCIsIGEpLCBlLnRocm93KGEsIFkoYSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0sIEdhID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyh0KS5tYXAoKG4pID0+IG4uaW5pdGlhbGl6ZSh7IGNvbnRleHQ6IHIsIGZvcm1DYWxsYmFja3M6IGUgfSkpKTtcbn0sIFZhID0gKCkgPT4gKHtcbiAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAvLyBTdHJpcGUgUFJcbiAgc3RyaXBlUFI6IHNlKFwiU3RyaXBlIFBSXCIsIEYuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IHNlKFwiU3RyaXBlIExpbmtcIiwgRi5zdHJpcGVMaW5rLmluaXQpLFxuICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gIGFpcndhbGxleEdvb2dsZVBheTogc2UoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIEYuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHNlKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIEYuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogc2UoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBGLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICBhdXRob3JpemVOZXRBcHBsZVBheTogc2UoXCJBdXRobmV0IEFwcGxlUGF5XCIsIEYuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBxYSB9ID0gUyhcImZvcm0tY2FsbGJhY2tzXCIpLCBVID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgaHQgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogVSxcbiAgb25CbHVyOiBVLFxuICBvbkNoYW5nZTogVSxcbiAgb25Mb2FkOiBVLFxuICBvbkxvYWRFcnJvcjogVSxcbiAgb25WYWxpZGF0aW9uRXJyb3I6IFUsXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBVLFxuICBvbkNoZWNrb3V0U3VjY2VzczogVSxcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBVLFxuICBvbkNoZWNrb3V0RXJyb3I6IFUsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBVXG59KSwgcSA9IGNsYXNzIHEge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBxLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgICAgICBjb25zdCBhID0gd3IoZSwgbiA/PyBxLk5PT1AsIHFhKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2VdID0gYTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IHEuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbnEuTk9PUCA9ICgpID0+IHtcbn0sIHEuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGh0LmtleW9mKCkuZW51bSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgIHJbZV0gPSBxLk5PT1A7XG4gIH0pLCByO1xufSwgcS5mcm9tT2JqZWN0ID0gKHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBxKCk7XG4gIHJldHVybiBlLnNldENhbGxiYWNrcyhodC5wYXJzZShyKSksIGU7XG59O1xubGV0IFdlID0gcTtcbmNsYXNzIFlhIHtcbiAgY29uc3RydWN0b3IociwgZSwgbiwgYSkge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChzKSA9PiB7XG4gICAgICBpZiAoIXMuc291cmNlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICBpZiAoX3Qocy5vcmlnaW4pICE9PSBfdCh0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBzLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBzLmRhdGEucGVucGFsKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgaSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBpID0gb24oSlNPTi5wYXJzZShzLmRhdGEpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gVW5rbm93biBldmVudC4gSWdub3Jpbmc6XCIsIGYpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVFdmVudChpKSkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQ6IGwsIHBheWxvYWQ6IHUgfSA9IGksIGQgPSB1LnR5cGU7XG4gICAgICBzd2l0Y2ggKGQpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodCh1LmhlaWdodCA/IGAke3UuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGwsIHUuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25CbHVyKGwsIHUuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShsLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tsXSA9IHMuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChzKSA9PiBzLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIXMuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBzLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBzKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKHMubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIHMpLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKHMubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSByLCB0aGlzLmJhc2VVcmwgPSBlLCB0aGlzLmZvcm1DYWxsYmFja3MgPSBuLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gYTtcbiAgfVxufVxuY29uc3QgX3QgPSAodCkgPT4gbmV3IFVSTCh0KS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiBLYSh0LCByKSB7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiB0LFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogclxuICB9KS5wcm9taXNlLCBhID0gYXdhaXQgYW4obik7XG4gIGlmICghc24obiwgYSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gbjtcbn1cbmNsYXNzIEhhIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihyLCBlKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQociwgZSk7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCByID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IFdhID0gKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogbiB9ID0gdDtcbiAgbi5wdWJsaXNoZXIuc3Vic2NyaWJlKChhKSA9PiB7XG4gICAgaWYgKGEuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBzID0gYS5sb2FkZWRWYWx1ZSwgaSA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgbCA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogaSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBpICYmIGd0KFwiYXBwbGVfcGF5XCIsIHMsIHIsIGUsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYyAmJiBndChcImdvb2dsZV9wYXlcIiwgcywgciwgZSwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZS5nZXQub25QYXltZW50UmVxdWVzdExvYWQobCk7XG4gICAgfVxuICB9KTtcbn0sIGd0ID0gKHQsIHIsIGUsIG4sIGEpID0+IEYuc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogZSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBBZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHQpLFxuICBub25DZGVGb3JtSW5wdXRzOiBCKGUuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogdCwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSA9PSBudWxsID8gdm9pZCAwIDogYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHJcbn0pLCB3dCA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IFcsIGVycl9fOiBaIH0gPSBTKFwib3AtZm9ybVwiKSwgSiA9IGNsYXNzIEoge1xuICBjb25zdHJ1Y3RvcihyKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcga2UoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IGtlKCksIHRoaXMuY29udGV4dCA9IG5ldyBrZSgpLCB0aGlzLmluaXRGbG93cyA9IFZhKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFcoXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgVyhcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogd3RcbiAgICAgICAgfSk7XG4gICAgICAgIFcoXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIFcoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IG4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiB3dFxuICAgICAgICB9KTtcbiAgICAgICAgVyhcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgVyhcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3QgYSA9IEouYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBlLFxuICAgICAgICAgIG4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChhKSwgV2EodGhpcy5pbml0Rmxvd3MsIGEsIHRoaXMuZm9ybUNhbGxiYWNrcyksIFcoXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IEdhKHRoaXMuaW5pdEZsb3dzLCBhLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChlLnRvdGFsQW1vdW50QXRvbXMsIGUuY3VycmVuY3kpLCBXKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IG4gPSBZKGUpO1xuICAgICAgICBaKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBuKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihuKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBlLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIG4gJiYgKG4ubm9kZS5zdHlsZS5oZWlnaHQgPSBlKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQuc2V0KGUpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGUpLCBlKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZSwgbiA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgYSA9IGJyLnBhcnNlKGUpLCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgaSA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhuKTtcbiAgICAgIHMubmFtZSA9IGAke2F9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgYyA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIGMuc2VhcmNoID0gaS50b1N0cmluZygpLCBzLnNyYyA9IGMuaHJlZiwgcy5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKGEsIHMpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAoZSwgbikgPT4ge1xuICAgICAgY29uc3QgYSA9IHtcbiAgICAgICAgdHlwZTogZSxcbiAgICAgICAgbm9kZTogbixcbiAgICAgICAgbW91bnQ6IChzKSA9PiB7XG4gICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgcmV0dXJuIChpID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYXBwZW5kQ2hpbGQobik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogYS50eXBlLCBub2RlOiBhLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW2xlLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtsZS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW2xlLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbbGUuQ0FSRF9DVkNdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tlXSA9IGEsIGE7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IG4gPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gbi5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBuLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGUuc3R5bGVzICYmIG4uYXBwZW5kKFwic3R5bGVzXCIsIG5uKGUuc3R5bGVzKSksIG4uYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIG47XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGUpID0+IHtcbiAgICAgIEthKGUubm9kZSkudGhlbigobikgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZS50eXBlLCBuKSwgdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuYW55Q2RlQ29ubi5zZXQobik7XG4gICAgICB9KS5jYXRjaCgobikgPT4gWihcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgbikpO1xuICAgIH0sIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFlKSB7XG4gICAgICAgIFooXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBGLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQWUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBCKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpKSB7XG4gICAgICAgIFooXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG4gPSB7XG4gICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogai5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiBqLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IGouYXV0aG9yaXplbmV0R29vZ2xlUGF5LFxuICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogai5hdXRob3JpemVuZXRBcHBsZVBheVxuICAgICAgfTtcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbYSwgc10pID0+ICh7XG4gICAgICAgIG5hbWU6IG5bYV0gPz8gYSxcbiAgICAgICAgLi4ucy5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbClcbiAgICAgIH0pKTtcbiAgICB9LCB0aGlzLmdlbmVyYWxTdWJtaXQgPSAoZSwgbikgPT4ge1xuICAgICAgY29uc3QgYSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghYSkge1xuICAgICAgICBaKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChlKSB7XG4gICAgICAgIGNhc2Ugai5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgcmV0dXJuIEYucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBhLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBBZShhLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogQihhLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBuIH0sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBqLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghcykge1xuICAgICAgICAgICAgWihcbiAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHMuc3RhcnRGbG93KG4pO1xuICAgICAgICB9XG4gICAgICAgIGNhc2Ugai5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgICBaKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzLnN0YXJ0RmxvdyhuKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIGouYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgY29uc3QgcyA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgICBaKFxuICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHMuc3RhcnRGbG93KG4pO1xuICAgICAgICB9XG4gICAgICAgIGNhc2Ugai5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgICBaKFxuICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcy5zdGFydEZsb3cobik7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBRZShlKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZCwgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgVyhcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpO1xuICAgICAgZm9yIChjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKVxuICAgICAgICBlICYmIGUubm9kZS5yZW1vdmUoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCBkZWxldGUgd2luZG93Lm9qcztcbiAgICB9LCB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKGUpO1xuICAgIH0sIEouYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4yLjEzXCIsIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcImxvY2FsX2J1aWxkXCIsIHRoaXMuYmFzZVVybCA9IHIuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIHRoaXMuY29uZmlnID0geyAuLi5yLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gV2UuZnJvbU9iamVjdChyKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWAsIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luLCB0aGlzLmZvcm1UYXJnZXQgPSByLmZvcm1UYXJnZXQgPz8gXCJib2R5XCIsIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IEhhKCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IFlhKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG59O1xuSi5vanNGbG93cyA9IEYsIEouYXNzaWduQXNTaW5nbGV0b24gPSAocikgPT4ge1xuICBpZiAoSi5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gcjtcbn0sIEouZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIEouYnVpbGRPanNGbG93Q29udGV4dCA9IChyLCBlLCBuLCBhKSA9PiAoe1xuICBjaGVja291dFNlY3VyZVRva2VuOiByLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gIGJhc2VVcmw6IG5ldyBVUkwoci5iYXNlVXJsID8/IFplKS5vcmlnaW4sXG4gIGZvcm1EaXY6IGEsXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiBlLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogZS5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiBuLFxuICBjdXN0b21Jbml0UGFyYW1zOiByLmN1c3RvbUluaXRQYXJhbXMgPz8ge31cbn0pO1xubGV0IGJ0ID0gSjtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhHb29nbGVQYXlcIl0gPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QXBwbGVQYXlcIl0gPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRHb29nbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0QXBwbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIjtcbiAgcmV0dXJuIFN1Ym1pdE1ldGhvZHMyO1xufSkoU3VibWl0TWV0aG9kcyB8fCB7fSk7XG56JDEubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgT3B0aW9uYWxTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKHRydWUpLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHokMS5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFByaWNlUXR5ID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQ2FydEluZm8gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLmFueSgpKSlcbn0pO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke0VlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7RWUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtFZS5yZWQuYm9sZChcIm9qcy9cIil9JHtFZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5jb25zdCBBV1hfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuXG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuKHtcbiAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxuY29uc3QgUFJfTE9BRElORyA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKTtcbmNvbnN0IFpvZEZvcm1DYWxsYmFja3MgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KHtcbiAgICBvbkZvY3VzOiBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uQ2hhbmdlOiBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkxvYWQ6IHByb3BzLm9uTG9hZCxcbiAgICBvbkxvYWRFcnJvcjogcHJvcHMub25Mb2FkRXJyb3IsXG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCxcbiAgICBvbkNoZWNrb3V0U3VjY2VzczogcHJvcHMub25DaGVja291dFN1Y2Nlc3MsXG4gICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgb25DaGVja291dEVycm9yOiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXG4gIH0pO1xuICBpZiAoYnQuZ2V0SW5zdGFuY2UoKSkge1xuICAgIGJ0LmdldEluc3RhbmNlKCk/LnVwZGF0ZUNhbGxiYWNrcyhmb3JtQ2FsbGJhY2tzLmdldCk7XG4gIH1cbiAgcmV0dXJuIGZvcm1DYWxsYmFja3MuZ2V0O1xufTtcblxuY29uc3QgdXNlUGF5bWVudFJlcXVlc3RzID0gKG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQpID0+IHtcbiAgY29uc3QgW3BheW1lbnRSZXF1ZXN0cywgc2V0UGF5bWVudFJlcXVlc3RzXSA9IHVzZVN0YXRlKHtcbiAgICBhcHBsZV9wYXk6IFBSX0xPQURJTkcsXG4gICAgZ29vZ2xlX3BheTogUFJfTE9BRElOR1xuICB9KTtcbiAgY29uc3Qgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAocGF5bWVudFJlcXVlc3RzMikgPT4ge1xuICAgICAgc2V0UGF5bWVudFJlcXVlc3RzKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgICAgb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZD8uKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgIH0sXG4gICAgW29yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWRdXG4gICk7XG4gIHJldHVybiB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfTtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfSA9IHVzZVBheW1lbnRSZXF1ZXN0cyhwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdHJpcGVMaW5rQ3RybCwgc2V0U3RyaXBlTGlua0N0cmxdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBidC5nZXRJbnN0YW5jZSgpID8/IG5ldyBidCh7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIC4uLmZvcm1DYWxsYmFja3NcbiAgICB9KTtcbiAgICBzZXRPcEZvcm0oZm9ybSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZShmb3JtKTtcbiAgICBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS5pbml0Rmxvd3Muc3RyaXBlTGluay5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRTdHJpcGVMaW5rQ3RybChyZXN1bHQubG9hZGVkVmFsdWUuY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdC5sb2FkZWRWYWx1ZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleFxuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwgeyBjaGlsZHJlbjogZWxlbWVudHNDb250ZXh0VmFsdWUgPyAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRzQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogZWxlbWVudHNDb250ZXh0VmFsdWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHsgaWQ6IEZPUk1fVEFSR0VULCBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSwgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuKGNoaWxkcmVuUHJvcHMpIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pIH0pO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlID0gKG9wRm9ybSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvcm1JZDogb3BGb3JtLmZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0OiBvcEZvcm0uZm9ybVByb3BlcnRpZXMuaGVpZ2h0LFxuICAgIHJlZmVycmVyOiBvcEZvcm0ucmVmZXJyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogb3BGb3JtLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgcmVnaXN0ZXJJZnJhbWU6IG9wRm9ybS5yZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBvcEZvcm0uYmFzZVVybFxuICB9O1xufTtcblxuY29uc3QgRWxlbWVudEZyYW1lID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZWxlbWVudFR5cGUsIHN0eWxlcyB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgZm9ybUlkLCByZWZlcnJlciwgZm9ybUhlaWdodCwgY2hlY2tvdXRTZWN1cmVUb2tlbiwgcmVnaXN0ZXJJZnJhbWUsIGJhc2VVcmwgfSA9IHVzZU9wZW5QYXlFbGVtZW50cygpO1xuICBjb25zdCBzdWJQYXRoID0gZWxlbWVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgW2hhc0xvYWRlZCwgc2V0SGFzTG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaWZyYW1lUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBlbGVtZW50U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXN0eWxlcykgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKHN0eWxlcyk7XG4gIH0sIFtzdHlsZXNdKTtcbiAgY29uc3QgZnJhbWVTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgaGVpZ2h0OiBmb3JtSGVpZ2h0XG4gICAgfTtcbiAgfSwgW2Zvcm1IZWlnaHRdKTtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4gfHwgIXJlZmVycmVyKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInJlZmVyZXJcIiwgcmVmZXJyZXIpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzdHlsZXNcIiwgZWxlbWVudFN0eWxlKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwiZm9ybUlkXCIsIGZvcm1JZCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIGNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSwgW2VsZW1lbnRTdHlsZSwgZm9ybUlkLCByZWZlcnJlciwgY2hlY2tvdXRTZWN1cmVUb2tlbl0pO1xuICB1c2VFZmZlY3QoKCkgPT4gc2V0SGFzTG9hZGVkKHRydWUpLCBbXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpZnJhbWVSZWYuY3VycmVudCB8fCAhaGFzTG9hZGVkKSByZXR1cm47XG4gICAgcmVnaXN0ZXJJZnJhbWUoZWxlbWVudFR5cGUsIGlmcmFtZVJlZi5jdXJyZW50KTtcbiAgfSwgW2hhc0xvYWRlZF0pO1xuICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4pIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2Zvcm1dIENhbm5vdCByZW5kZXIgcGFydGlhbGx5IGluaXRpYWxpemVkIGZyYW1lXCIpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHt9KTtcbiAgfVxuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICBcImlmcmFtZVwiLFxuICAgIHtcbiAgICAgIGlkOiBgb2pzLSR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBuYW1lOiBgJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIGNsYXNzTmFtZTogXCJvanMtaWZyYW1lXCIsXG4gICAgICBzcmM6IGAke2Jhc2VVcmx9L2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvPyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkQ3ZjRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkMgfSk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmV4cG9ydCB7IENhcmRDdmNFbGVtZW50LCBDYXJkRWxlbWVudCwgQ2FyZEV4cGlyeUVsZW1lbnQsIENhcmROdW1iZXJFbGVtZW50LCBFbGVtZW50c0Zvcm0sIEZpZWxkTmFtZSwgdXNlT3BlblBheUVsZW1lbnRzIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxpQkFBQUEsSUFBZSxjQUFBQyxJQUFZLFlBQUFDLElBQVUsZUFBQUMsSUFBYSxhQUFBQyxJQUFXLFVBQUFDLElBQVEsV0FBQUMsVUFBZTtBQUM3RixTQUFTLE9BQUFDLEdBQUssWUFBQUMsVUFBZ0I7QUFDOUIsU0FBUyxLQUFLQyxTQUFXO0FBQ3pCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxRQUFRO0FBRWYsTUFBTUMsS0FBa0JiLEdBQWM7QUFBQSxFQUNwQyxRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixxQkFBcUI7QUFBQSxFQUNyQixnQkFBZ0IsTUFBTTtBQUFBLEVBQ3RCO0FBQUEsRUFDQSxTQUFTO0FBQ1gsQ0FBQyxHQUVLYyxLQUFxQixNQUFNO0FBQy9CLFFBQU1DLElBQVVkLEdBQVdZLEVBQWU7QUFDMUMsTUFBSSxDQUFDRTtBQUNILFVBQU0sSUFBSSxNQUFNLG1FQUFtRTtBQUVyRixTQUFPQTtBQUNULEdBRU1DLEtBQUssOEJBQThCQyxLQUFLUixFQUFJLE9B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QUk4ZixJQUFjLEVBQUUsUUFBQXZGLEdBQVEsYUFBYTdCLEdBQWdCLFNBQVMsQ0FBQyxHQUd0RnFJLEtBQWMsQ0FBQyxFQUFFLFFBQUF4RyxFQUFPLE1BQ0wsZ0JBQUF2YSxFQUFJOGYsSUFBYyxFQUFFLFFBQUF2RixHQUFRLGFBQWE3QixHQUFnQixLQUFLLENBQUMsR0FHbEZzSSxLQUFvQixDQUFDLEVBQUUsUUFBQXpHLEVBQU8sTUFDWCxnQkFBQXZhLEVBQUk4ZixJQUFjLEVBQUUsUUFBQXZGLEdBQVEsYUFBYTdCLEdBQWdCLFlBQVksQ0FBQyxHQUd6RnVJLEtBQW9CLENBQUMsRUFBRSxRQUFBMUcsRUFBTyxNQUNYLGdCQUFBdmEsRUFBSThmLElBQWMsRUFBRSxRQUFBdkYsR0FBUSxhQUFhN0IsR0FBZ0IsWUFBWSxDQUFDOyIsCiAgIm5hbWVzIjogWyJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgImpzeCIsICJGcmFnbWVudCIsICJ6JDEiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiRWUiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgIlplIiwgImRyIiwgInByIiwgIm1yIiwgInlyIiwgImZyIiwgIlZlIiwgImhyIiwgIl9yIiwgImUiLCAiZ3IiLCAiWSIsICJ3ciIsICJuIiwgImoiLCAiTSIsICJDIiwgIkwiLCAiUHQiLCAiQ3QiLCAiU3QiLCAia3QiLCAibGUiLCAiYnIiLCAiTWUiLCAidnIiLCAiRyIsICJFciIsICJQciIsICJDciIsICJTciIsICJrciIsICJBciIsICJJciIsICJSciIsICJGciIsICJNciIsICJPciIsICJEciIsICJnZSIsICJUciIsICJOciIsICJMciIsICJVciIsICJqciIsICJ4ciIsICIkciIsICJKZSIsICJ6ciIsICJHciIsICJWciIsICIkIiwgInFyIiwgIllyIiwgIkF0IiwgIktyIiwgIkhyIiwgIldyIiwgIlpyIiwgIkpyIiwgIkJyIiwgIk9lIiwgInJ0IiwgIkl0IiwgIlFyIiwgIlhyIiwgInMiLCAiaSIsICJlbiIsICJ0biIsICJybiIsICJhIiwgImMiLCAibm4iLCAiQiIsICJvbiIsICJhbiIsICJzbiIsICJjbiIsICJSdCIsICJGdCIsICJsbiIsICJ1biIsICJwZSIsICJkbiIsICJwbiIsICJNdCIsICJtbiIsICJ5biIsICJmbiIsICJudCIsICJPdCIsICJvdCIsICJEdCIsICJobiIsICJfbiIsICJUdCIsICJnbiIsICJ3biIsICJibiIsICJ2biIsICJFbiIsICJOdCIsICJQbiIsICJDbiIsICJTbiIsICJrbiIsICJBbiIsICJJbiIsICJSbiIsICJGbiIsICJMdCIsICJUIiwgIk9uIiwgIk1uIiwgIkRuIiwgIk4iLCAid2UiLCAiVG4iLCAiTm4iLCAiSyIsICJMbiIsICJVbiIsICJqbiIsICJtZSIsICJ4biIsICJhdCIsICIkbiIsICJCZSIsICJVdCIsICJ6biIsICJqdCIsICJ4dCIsICJRZSIsICJYIiwgInllIiwgIlMiLCAiZXMiLCAiR24iLCAiRGUiLCAiSCIsICJWbiIsICJUZSIsICIkdCIsICJ6dCIsICJlZSIsICJxbiIsICJzdCIsICJBIiwgIlluIiwgIktuIiwgIkhuIiwgIlduIiwgImYiLCAieSIsICJGIiwgIkJuIiwgIlpuIiwgIkpuIiwgImQiLCAiaCIsICJsIiwgInUiLCAiUW4iLCAiWG4iLCAiZW8iLCAidG8iLCAiTmUiLCAiR3QiLCAicm8iLCAibm8iLCAib28iLCAiVnQiLCAiYW8iLCAic28iLCAicXQiLCAiaW8iLCAiY28iLCAibG8iLCAidW8iLCAiWGUiLCAicG8iLCAibW8iLCAieW8iLCAiZm8iLCAiaG8iLCAiWXQiLCAiS3QiLCAiUCIsICJpdCIsICJjdCIsICJfbyIsICJ3IiwgIm0iLCAidm8iLCAiYm8iLCAiXyIsICJiIiwgImdvIiwgIndvIiwgInoiLCAiRCIsICJFbyIsICJQbyIsICJDbyIsICJBZSIsICJTbyIsICJBbyIsICJrbyIsICJJbyIsICJWIiwgImx0IiwgIlJvIiwgIkZvIiwgImsiLCAiYWUiLCAidiIsICJFIiwgIlIiLCAiTyIsICJMZSIsICJIdCIsICIkZSIsICJXdCIsICJVZSIsICJNbyIsICJadCIsICJ4IiwgImllIiwgIk9vIiwgIkRvIiwgInVyIiwgInZlIiwgInJlIiwgInhlIiwgIm5lIiwgImZlIiwgIkp0IiwgIkJ0IiwgIlRvIiwgIk5vIiwgIkxvIiwgIlF0IiwgIlh0IiwgIkNlIiwgIlVvIiwgImpvIiwgInhvIiwgImNlIiwgInFlIiwgIiRvIiwgInpvIiwgIkdvIiwgIlZvIiwgImVyIiwgInRyIiwgImhlIiwgIlllIiwgInFvIiwgIllvIiwgIm9lIiwgIl9lIiwgIktvIiwgIkhvIiwgIktlIiwgInRlIiwgIldvIiwgInJyIiwgImRlIiwgIkllIiwgIlJlIiwgInVlIiwgIlpvIiwgIkpvIiwgIkkiLCAiamUiLCAiemUiLCAiRmUiLCAiYmUiLCAidXQiLCAibnIiLCAib3IiLCAiYXIiLCAic3IiLCAiaXIiLCAiZHQiLCAiU2UiLCAiZXQiLCAiZWEiLCAiSGUiLCAiQm8iLCAiR2UiLCAiUW8iLCAiUGUiLCAiWG8iLCAidHQiLCAidGEiLCAicmEiLCAiUSIsICJvYSIsICJwdCIsICJuYSIsICJhYSIsICJzYSIsICJpYSIsICJjYSIsICJsYSIsICJjciIsICJtdCIsICJ1YSIsICJkYSIsICJ5dCIsICJwYSIsICJmdCIsICJtYSIsICJ5YSIsICJmYSIsICJoYSIsICJfYSIsICJnYSIsICJ3YSIsICJiYSIsICJ2YSIsICJFYSIsICJQYSIsICJDYSIsICJTYSIsICJrYSIsICJBYSIsICJJYSIsICJsciIsICJSYSIsICJGYSIsICJNYSIsICJPYSIsICJEYSIsICJUYSIsICJOYSIsICJMYSIsICJVYSIsICJqYSIsICJ4YSIsICJrZSIsICIkYSIsICJ6YSIsICJzZSIsICJHYSIsICJWYSIsICJxYSIsICJVIiwgImh0IiwgInEiLCAiciIsICJXZSIsICJZYSIsICJfdCIsICJLYSIsICJIYSIsICJXYSIsICJndCIsICJ3dCIsICJXIiwgIloiLCAiSiIsICJidCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgIkFXWF9MT0FESU5HIiwgIlBheW1lbnRQcm9jZXNzb3IiLCAiUFJfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAib2JqIiwgImluc3RhbmNlIiwgIkZvcm1DYWxsYmFja3MiLCAidXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzIiwgInByb3BzIiwgImZvcm1DYWxsYmFja3MiLCAidXNlUGF5bWVudFJlcXVlc3RzIiwgIm9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzIiwgInNldFBheW1lbnRSZXF1ZXN0cyIsICJvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMyIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAic3RyaXBlTGlua0N0cmwiLCAic2V0U3RyaXBlTGlua0N0cmwiLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImZvcm0iLCAidmFsdWUiLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAicmVzdWx0IiwgInByZXYiLCAiY2hpbGRyZW5Qcm9wcyIsICJFbGVtZW50RnJhbWUiLCAiZWxlbWVudFR5cGUiLCAiZm9ybUlkIiwgInJlZmVycmVyIiwgImZvcm1IZWlnaHQiLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJyZWdpc3RlcklmcmFtZSIsICJiYXNlVXJsIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJpZnJhbWVSZWYiLCAiZWxlbWVudFN0eWxlIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgIkNhcmRDdmNFbGVtZW50IiwgIkNhcmRFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50Il0KfQo=