@getopenpay/openpay-js-react 0.2.6 → 0.2.8-alpha.c35a29a

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
@@ -1,10 +1,10 @@
1
- import { createContext as vn, useContext as En, useState as ae, useCallback as Cn, useEffect as We, useRef as Sn, useMemo as Ke } from "react";
1
+ import { createContext as En, useContext as Cn, useState as ae, useCallback as Sn, useEffect as We, useRef as Pn, useMemo as Ke } from "react";
2
2
  import { jsx as F, Fragment as Ge } from "react/jsx-runtime";
3
3
  import { z as e } from "zod";
4
- import { v4 as Pn } from "uuid";
5
- import { connectToChild as Nt } from "penpal";
4
+ import { v4 as kn } from "uuid";
5
+ import { connectToChild as Dt } from "penpal";
6
6
  import ee from "chalk";
7
- const Dt = vn({
7
+ const Nt = En({
8
8
  formId: "",
9
9
  formHeight: "",
10
10
  referrer: void 0,
@@ -12,40 +12,40 @@ const Dt = vn({
12
12
  registerIframe: () => {
13
13
  },
14
14
  baseUrl: ""
15
- }), kn = () => {
16
- const t = En(Dt);
15
+ }), An = () => {
16
+ const t = Cn(Nt);
17
17
  if (!t)
18
18
  throw new Error("useOpenPayElements must be used within an OpenPayElementsProvider");
19
19
  return t;
20
- }, Lt = "https://cde.getopenpay.com", An = e.object({
20
+ }, Lt = "https://cde.getopenpay.com", On = e.object({
21
21
  type: e.string(),
22
22
  loc: e.array(e.string()),
23
23
  msg: e.string(),
24
24
  url: e.string()
25
- }), On = e.array(An), In = e.object({
25
+ }), In = e.array(On), jn = e.object({
26
26
  code: e.string(),
27
27
  message: e.string(),
28
28
  path: e.array(e.string())
29
- }), jn = e.array(In), Tn = {
29
+ }), Tn = e.array(jn), Rn = {
30
30
  "failed to fetch": "Connection error: please double check if you are connected to the internet, then try again"
31
31
  }, Qe = (t) => {
32
32
  const r = t.toLowerCase().trim();
33
- return Tn[r] ?? t;
34
- }, Rn = (t) => {
33
+ return Rn[r] ?? t;
34
+ }, xn = (t) => {
35
35
  try {
36
36
  return typeof JSON.parse(t) == "object";
37
37
  } catch {
38
38
  return !1;
39
39
  }
40
- }, xn = (t) => t.length === 1 ? Qe(t[0].msg) : `Please fix the following errors:
40
+ }, Mn = (t) => t.length === 1 ? Qe(t[0].msg) : `Please fix the following errors:
41
41
  ${t.map((r) => `• ${Qe(r.msg)}`).join(`
42
- `)}`, Mn = (t) => `Encountered the following errors:
42
+ `)}`, Dn = (t) => `Encountered the following errors:
43
43
  ${t.map((r) => `- ${r.path.join("/")}: ${r.message}`).join(`
44
44
  `)}`, W = (t) => {
45
45
  if (t instanceof Error)
46
- if (Rn(t.message)) {
46
+ if (xn(t.message)) {
47
47
  const r = JSON.parse(t.message);
48
- return On.safeParse(r).success ? xn(r) : jn.safeParse(r).success ? Mn(r) : (console.warn(`Encountered unknown stringified JSON object:
48
+ return In.safeParse(r).success ? Mn(r) : Tn.safeParse(r).success ? Dn(r) : (console.warn(`Encountered unknown stringified JSON object:
49
49
  ${t.message}`), t.message);
50
50
  } else
51
51
  return Qe(t.message);
@@ -64,35 +64,35 @@ ${t.message}`), t.message);
64
64
  n(`[form] Error running callback (${t}):`, i);
65
65
  return;
66
66
  }
67
- }, I = e.string().trim().min(1, { message: "Cannot be blank" }), C = e.string().trim().optional(), x = (t) => e.nullable(t.optional());
67
+ }, I = e.string().trim().min(1, { message: "Cannot be blank" }), S = e.string().trim().optional(), x = (t) => e.nullable(t.optional());
68
68
  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 || {});
69
69
  const Ut = e.nativeEnum(p);
70
70
  var Ft = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(Ft || {});
71
71
  const $t = e.nativeEnum(Ft), qt = e.union([Ut, $t]);
72
72
  var ue = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(ue || {});
73
- const Dn = e.nativeEnum(ue), Me = e.object({
73
+ const Ln = e.nativeEnum(ue), Me = e.object({
74
74
  provider: e.string(),
75
75
  processor_name: x(e.string()),
76
76
  metadata: x(e.record(e.string(), e.any()))
77
- }), Ln = e.object({
77
+ }), Un = e.object({
78
78
  id: e.string()
79
79
  });
80
80
  e.object({
81
- cardNumber: C,
82
- expiry: C,
83
- cvc: C
81
+ cardNumber: S,
82
+ expiry: S,
83
+ cvc: S
84
84
  });
85
85
  e.object({
86
- backgroundColor: C,
87
- color: C,
88
- fontFamily: C,
89
- fontSize: C,
90
- fontWeight: C,
91
- margin: C,
92
- padding: C,
93
- letterSpacing: C,
94
- lineHeight: C,
95
- hideIcon: C
86
+ backgroundColor: S,
87
+ color: S,
88
+ fontFamily: S,
89
+ fontSize: S,
90
+ fontWeight: S,
91
+ margin: S,
92
+ padding: S,
93
+ letterSpacing: S,
94
+ lineHeight: S,
95
+ hideIcon: S
96
96
  });
97
97
  const V = e.enum([
98
98
  // Element -> Form
@@ -115,33 +115,33 @@ const V = e.enum([
115
115
  "TOKENIZE",
116
116
  "CHECKOUT",
117
117
  "START_PAYMENT_FLOW"
118
- ]), Un = V.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), Fn = e.object({ type: Un }), $n = V.extract(["BLUR", "FOCUS", "CHANGE"]), qn = e.object({
119
- type: $n,
118
+ ]), Fn = V.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), $n = e.object({ type: Fn }), qn = V.extract(["BLUR", "FOCUS", "CHANGE"]), Vn = e.object({
119
+ type: qn,
120
120
  elementType: $t,
121
121
  errors: e.array(e.string()).optional()
122
- }), Vn = V.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), zn = e.object({
123
- type: Vn,
122
+ }), zn = V.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Yn = e.object({
123
+ type: zn,
124
124
  message: I,
125
125
  headers: e.record(e.string(), e.string()).optional()
126
- }), Yn = V.extract(["VALIDATION_ERROR"]), Hn = e.object({
127
- type: Yn,
126
+ }), Hn = V.extract(["VALIDATION_ERROR"]), Kn = e.object({
127
+ type: Hn,
128
128
  elementType: qt,
129
129
  errors: e.array(e.string())
130
- }), Kn = e.object({
130
+ }), Gn = e.object({
131
131
  type: e.literal(V.enum.LAYOUT),
132
132
  height: I
133
- }), Gn = e.object({
133
+ }), Zn = e.object({
134
134
  type: e.literal(V.enum.LOADED),
135
135
  sessionId: I,
136
136
  totalAmountAtoms: e.number(),
137
- currency: C,
137
+ currency: S,
138
138
  checkoutPaymentMethods: e.array(Me)
139
- }), Zn = e.object({
139
+ }), Bn = e.object({
140
140
  type: e.literal(V.enum.PAYMENT_FLOW_STARTED),
141
141
  nextActionMetadata: e.record(e.string(), e.any()),
142
142
  paymentFlowMetadata: e.any().optional(),
143
143
  startPFMetadata: e.optional(e.record(e.string(), e.any()))
144
- }), Bn = e.object({
144
+ }), Jn = e.object({
145
145
  type: e.literal(V.enum.SETUP_PAYMENT_METHOD_SUCCESS),
146
146
  paymentMethodId: e.string()
147
147
  }), we = e.object({
@@ -150,46 +150,46 @@ const V = e.enum([
150
150
  email: I,
151
151
  zipCode: I,
152
152
  country: I,
153
- promotionCode: C
154
- }), Jn = e.object({
155
- firstName: C,
156
- lastName: C,
153
+ promotionCode: S
154
+ }), Wn = e.object({
155
+ firstName: S,
156
+ lastName: S,
157
157
  email: I,
158
158
  zipCode: I,
159
159
  country: I,
160
- promotionCode: C,
161
- address: C,
162
- city: C,
163
- state: C
164
- }), Wn = V.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Qn = e.object({
165
- type: Wn,
160
+ promotionCode: S,
161
+ address: S,
162
+ city: S,
163
+ state: S
164
+ }), Qn = V.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Xn = e.object({
165
+ type: Qn,
166
166
  sessionId: I,
167
167
  checkoutPaymentMethod: Me,
168
168
  paymentFlowMetadata: e.any().optional(),
169
169
  doNotUseLegacyCCFlow: e.boolean().optional(),
170
- existingCCPMId: C
171
- }).extend(we.shape), Xn = e.object({
170
+ existingCCPMId: S
171
+ }).extend(we.shape), er = e.object({
172
172
  type: e.literal(V.enum.TOKENIZE_SUCCESS),
173
173
  isReadyForCheckout: e.boolean()
174
- }), er = e.object({
174
+ }), tr = e.object({
175
175
  type: e.literal(V.enum.CHECKOUT_SUCCESS),
176
176
  invoiceUrls: e.array(e.string()),
177
177
  subscriptionIds: e.array(e.string()),
178
178
  customerId: e.string()
179
- }), tr = e.discriminatedUnion("type", [
180
- Fn,
181
- qn,
182
- zn,
183
- Hn,
179
+ }), nr = e.discriminatedUnion("type", [
180
+ $n,
181
+ Vn,
182
+ Yn,
184
183
  Kn,
185
184
  Gn,
186
- Qn,
185
+ Zn,
187
186
  Xn,
188
187
  er,
189
- Zn,
190
- Bn
191
- ]), nr = e.object({
192
- payload: tr,
188
+ tr,
189
+ Bn,
190
+ Jn
191
+ ]), rr = e.object({
192
+ payload: nr,
193
193
  nonce: I,
194
194
  formId: I,
195
195
  elementId: I
@@ -217,20 +217,20 @@ const it = e.object({
217
217
  invoice_urls: e.array(e.string()),
218
218
  subscription_ids: e.array(e.string()),
219
219
  customer_id: e.string()
220
- }), rr = e.object({
220
+ }), or = e.object({
221
221
  elementType: e.string(),
222
222
  errors: e.array(e.string())
223
223
  });
224
224
  e.object({
225
225
  session_id: e.string()
226
226
  });
227
- const or = e.object({
227
+ const ir = e.object({
228
228
  success: e.literal(!1),
229
229
  error_type: e.literal("validation_error"),
230
- errors: e.array(rr)
231
- }), ir = e.discriminatedUnion("success", [
230
+ errors: e.array(or)
231
+ }), ar = e.discriminatedUnion("success", [
232
232
  e.object({ success: e.literal(!0) }),
233
- or
233
+ ir
234
234
  ]);
235
235
  e.object({
236
236
  session_id: e.string(),
@@ -246,7 +246,7 @@ e.object({
246
246
  extra_metadata: e.record(e.string(), e.any()).optional()
247
247
  });
248
248
  var q = /* @__PURE__ */ ((t) => (t.SUCCESS = "success", t.FAILURE = "failure", t.CANCELLED = "cancelled", t))(q || {});
249
- const ar = e.object({
249
+ const sr = e.object({
250
250
  status: e.enum([
251
251
  "success",
252
252
  "failure",
@@ -258,7 +258,7 @@ const ar = e.object({
258
258
  e.object({
259
259
  href: e.string().optional().nullable()
260
260
  });
261
- const sr = e.object({
261
+ const cr = e.object({
262
262
  type: e.string(),
263
263
  redirect_url: e.string(),
264
264
  initial_intent_id: e.string(),
@@ -271,14 +271,14 @@ const sr = e.object({
271
271
  consent_id: x(e.string()),
272
272
  their_pm_id: x(e.string()),
273
273
  payment_session: x(e.record(e.string(), e.any()))
274
- }), cr = e.discriminatedUnion("present", [
274
+ }), lr = e.discriminatedUnion("present", [
275
275
  e.object({ present: e.literal(!0), href: e.string() }),
276
276
  e.object({ present: e.literal(!1) })
277
- ]), lr = e.object({
278
- payment_methods: e.array(Ln),
277
+ ]), ur = e.object({
278
+ payment_methods: e.array(Un),
279
279
  pay_first_success_response: x(it),
280
280
  required_user_actions: x(e.array(Vt))
281
- }), ur = (t) => {
281
+ }), dr = (t) => {
282
282
  const r = {};
283
283
  return Object.entries(t).forEach(([n, o]) => {
284
284
  try {
@@ -288,31 +288,31 @@ const sr = e.object({
288
288
  return;
289
289
  }
290
290
  }), r;
291
- }, dr = e.object({
291
+ }, pr = e.object({
292
292
  stripe_pk: e.string(),
293
293
  client_secret: e.string(),
294
294
  stripe_pm_id: e.string()
295
- }), pr = e.object({
295
+ }), mr = e.object({
296
296
  type: e.string(),
297
297
  client_secret: e.string(),
298
298
  stripe_pk: e.string()
299
- }), mr = {
299
+ }), _r = {
300
300
  usd: "usd",
301
301
  brl: "brl"
302
- }, Ne = async (t) => {
302
+ }, De = async (t) => {
303
303
  for (let r = 0; r < 10; r++)
304
- dt() || await fr(500);
304
+ dt() || await zt(500);
305
305
  if (!dt())
306
306
  throw console.log("Stripe JS not found."), new Error("Stripe JS not found.");
307
307
  return new Stripe(t);
308
- }, _r = async (t, r) => {
309
- const n = await Ne(t);
308
+ }, yr = async (t, r) => {
309
+ const n = await De(t);
310
310
  return {
311
311
  elements: n.elements(r),
312
312
  stripe: n
313
313
  };
314
- }, yr = async (t, r, n, o, i) => {
315
- const a = await Ne(t), s = mr[n.toLowerCase().trim()];
314
+ }, hr = async (t, r, n, o, i) => {
315
+ const a = await De(t), s = _r[n.toLowerCase().trim()];
316
316
  return a.paymentRequest({
317
317
  // TODO: replace this with stripe account country as soon as we support it
318
318
  country: "US",
@@ -327,9 +327,9 @@ const sr = e.object({
327
327
  requestPayerEmail: !0,
328
328
  disableWallets: []
329
329
  });
330
- }, fr = (t) => new Promise((r) => {
330
+ }, zt = (t) => new Promise((r) => {
331
331
  setTimeout(r, t);
332
- }), dt = () => "Stripe" in window, hr = async (t) => new Promise((r, n) => {
332
+ }), dt = () => "Stripe" in window, fr = async (t) => new Promise((r, n) => {
333
333
  try {
334
334
  t.on("paymentmethod", async (o) => {
335
335
  console.log("paymentmethod EVT:: ", o), r(o);
@@ -344,7 +344,7 @@ const sr = e.object({
344
344
  }), gr = async (t, r) => {
345
345
  if (!t.stripe_pk || !t.client_secret)
346
346
  throw new Error(`Invalid next action metadata format: ${JSON.stringify(t)}`);
347
- const n = await (await Ne(t.stripe_pk)).confirmCardSetup(t.client_secret, {
347
+ const n = await (await De(t.stripe_pk)).confirmCardSetup(t.client_secret, {
348
348
  payment_method: r.paymentMethod.id
349
349
  });
350
350
  if (n.error)
@@ -352,7 +352,7 @@ const sr = e.object({
352
352
  return r.complete("success"), n;
353
353
  }, br = async (t) => {
354
354
  var r, n, o, i;
355
- const a = await (await Ne(t.stripe_pk)).confirmCardSetup(t.client_secret, {
355
+ const a = await (await De(t.stripe_pk)).confirmCardSetup(t.client_secret, {
356
356
  payment_method: t.stripe_pm_id
357
357
  }), s = (r = a.setupIntent) == null ? void 0 : r.status;
358
358
  if (s === "succeeded")
@@ -365,7 +365,7 @@ const sr = e.object({
365
365
  return i ? { ...n, [i]: o.value } : n;
366
366
  }, {}), vr = (t) => {
367
367
  try {
368
- return nr.parse(t);
368
+ return rr.parse(t);
369
369
  } catch (r) {
370
370
  throw console.error("Error parsing event payload:", t, r), r;
371
371
  }
@@ -379,7 +379,7 @@ const sr = e.object({
379
379
  } catch (r) {
380
380
  return console.error("Invalid CDE connection check:", r), !1;
381
381
  }
382
- }, Cr = (t, r) => !!t && r, h = (t) => e.nullable(t.optional());
382
+ }, Cr = (t, r) => !!t && r, f = (t) => e.nullable(t.optional());
383
383
  e.string().trim().min(1, { message: "Cannot be blank" });
384
384
  const Sr = e.object({
385
385
  cde_response_type: e.literal("error"),
@@ -387,76 +387,76 @@ const Sr = e.object({
387
387
  headers: e.record(e.string(), e.string()).optional()
388
388
  });
389
389
  e.enum(["usd", "brl"]);
390
- const zt = e.object({
390
+ const Yt = e.object({
391
391
  name: e.string(),
392
- amount_atom_off: h(e.number()),
393
- percent_off: h(e.number()),
394
- currency: h(e.string()),
392
+ amount_atom_off: f(e.number()),
393
+ percent_off: f(e.number()),
394
+ currency: f(e.string()),
395
395
  duration: e.string(),
396
- duration_in_months: h(e.number())
397
- }), Yt = e.object({
396
+ duration_in_months: f(e.number())
397
+ }), Ht = e.object({
398
398
  amount_subtotal_atom: e.number().int(),
399
399
  amount_total_atom: e.number().int(),
400
400
  currency: e.string(),
401
- description: h(e.string()),
401
+ description: f(e.string()),
402
402
  price_id: e.string(),
403
- billing_interval: h(e.string()),
404
- billing_interval_count: h(e.number().int()),
403
+ billing_interval: f(e.string()),
404
+ billing_interval_count: f(e.number().int()),
405
405
  quantity: e.number().int()
406
406
  }), Pr = e.record(e.string(), e.any()), kr = e.object({
407
407
  name: e.string(),
408
- settings: h(Pr)
408
+ settings: f(Pr)
409
409
  }), ve = e.object({
410
410
  provider: e.string(),
411
- processor_name: h(e.string()),
412
- metadata: h(e.record(e.string(), e.any()))
411
+ processor_name: f(e.string()),
412
+ metadata: f(e.record(e.string(), e.any()))
413
413
  }), Ar = e.object({
414
414
  quantity: e.number()
415
415
  }), Or = e.object({
416
- id: h(e.string()),
417
- billing_interval: h(e.string()),
418
- billing_interval_count: h(e.number().int()),
416
+ id: f(e.string()),
417
+ billing_interval: f(e.string()),
418
+ billing_interval_count: f(e.number().int()),
419
419
  subscription_items: e.array(Ar),
420
- trial_start: h(e.string()),
421
- trial_end: h(e.string())
422
- }), Ht = e.object({
420
+ trial_start: f(e.string()),
421
+ trial_end: f(e.string())
422
+ }), Kt = e.object({
423
423
  amount_atom: e.number()
424
424
  }), Ir = e.object({
425
425
  amount_atom: e.number(),
426
426
  amount_atom_considering_discount_applied: e.number(),
427
427
  currency: e.string(),
428
- discount_amount_atoms: e.array(Ht),
428
+ discount_amount_atoms: e.array(Kt),
429
429
  subscription_item_id: e.string()
430
430
  }), jr = e.object({
431
- coupon: zt
431
+ coupon: Yt
432
432
  }), Tr = e.object({
433
433
  currency: e.string(),
434
434
  discounts: e.array(jr),
435
- hosted_invoice_url: h(e.string()),
435
+ hosted_invoice_url: f(e.string()),
436
436
  lines: e.array(Ir),
437
437
  remaining_amount_atom: e.number(),
438
438
  tax_amount_atom: e.number(),
439
439
  total_amount_atom: e.number(),
440
- total_discount_amount_atoms: e.array(Ht)
440
+ total_discount_amount_atoms: e.array(Kt)
441
441
  }), pt = e.object({
442
442
  created: e.array(Or),
443
443
  invoices: e.array(Tr)
444
- }), Kt = e.object({
444
+ }), Gt = e.object({
445
445
  preview: pt,
446
- preview_post_trial: h(pt),
447
- coupons: e.array(zt)
446
+ preview_post_trial: f(pt),
447
+ coupons: e.array(Yt)
448
448
  }), mt = e.object({
449
449
  status: e.literal("open"),
450
450
  token: e.string(),
451
- email: h(e.string()),
452
- line_items: e.array(Yt),
451
+ email: f(e.string()),
452
+ line_items: e.array(Ht),
453
453
  amount_subtotal_atom: e.number().int(),
454
454
  amount_total_atom: e.number().int(),
455
455
  brand: kr,
456
- subs_preview: h(Kt),
456
+ subs_preview: f(Gt),
457
457
  // Null in setup mode
458
458
  methods_available: e.array(ve)
459
- }), Gt = e.discriminatedUnion("mode", [
459
+ }), Zt = e.discriminatedUnion("mode", [
460
460
  e.object({
461
461
  mode: e.literal("setup"),
462
462
  currency: e.nullable(e.undefined())
@@ -470,7 +470,7 @@ const zt = e.object({
470
470
  }), xr = e.object({
471
471
  status: e.literal("expired")
472
472
  });
473
- e.union([Gt, Rr, xr]);
473
+ e.union([Zt, Rr, xr]);
474
474
  e.object({
475
475
  logo: e.string(),
476
476
  icon: e.string(),
@@ -490,13 +490,13 @@ e.object({
490
490
  customer_email: e.string(),
491
491
  customer_zip_code: e.string(),
492
492
  customer_country: e.string(),
493
- line_items: e.array(Yt),
493
+ line_items: e.array(Ht),
494
494
  total_amount_atom: e.number().int(),
495
495
  cancel_at_end: e.boolean(),
496
496
  checkout_payment_method: ve,
497
497
  promotion_code: e.string().optional(),
498
498
  do_not_use_legacy_cc_flow: e.boolean().optional(),
499
- use_confirmed_pm_id: h(e.string())
499
+ use_confirmed_pm_id: f(e.string())
500
500
  });
501
501
  const Mr = e.object({
502
502
  payment_method_id: e.string()
@@ -505,14 +505,14 @@ e.object({
505
505
  id: e.string(),
506
506
  return_url: e.string()
507
507
  });
508
- const Nr = e.object({
508
+ const Dr = e.object({
509
509
  type: e.string(),
510
510
  loc: e.array(e.string()),
511
511
  msg: e.string(),
512
512
  url: e.string()
513
513
  });
514
- e.array(Nr);
515
- const Dr = e.object({
514
+ e.array(Dr);
515
+ const Nr = e.object({
516
516
  new_customer_email: e.string().optional(),
517
517
  new_customer_address: e.record(e.string(), e.any()).optional(),
518
518
  new_customer_first_name: e.string().optional(),
@@ -525,7 +525,7 @@ const Dr = e.object({
525
525
  promotion_code: e.string().optional(),
526
526
  displayed_total_amount_atom: e.number().int()
527
527
  }), Fr = e.object({
528
- processor_specific_metadata: h(e.record(e.string(), e.any()))
528
+ processor_specific_metadata: f(e.record(e.string(), e.any()))
529
529
  });
530
530
  e.object({
531
531
  payment_provider: e.string(),
@@ -534,13 +534,13 @@ e.object({
534
534
  their_existing_pm_id: e.string().optional(),
535
535
  use_pay_first_flow: e.boolean().optional(),
536
536
  pay_first_flow_cart_info: Ur.optional()
537
- }).extend(Dr.shape).extend(Fr.shape);
538
- const Zt = e.object({
537
+ }).extend(Nr.shape).extend(Fr.shape);
538
+ const Bt = e.object({
539
539
  required_user_actions: e.array(e.record(e.string(), e.any())),
540
- checkout_attempt_id: h(e.string())
540
+ checkout_attempt_id: f(e.string())
541
541
  });
542
542
  e.object({
543
- fields: Jn,
543
+ fields: Wn,
544
544
  checkoutPaymentMethod: ve
545
545
  });
546
546
  e.object({
@@ -556,28 +556,28 @@ const $r = e.object({
556
556
  });
557
557
  e.record(e.any());
558
558
  e.object({
559
- first_name: h(e.string()),
560
- last_name: h(e.string()),
561
- line1: h(e.string()),
562
- line2: h(e.string()),
563
- line3: h(e.string()),
564
- city: h(e.string()),
565
- state: h(e.string()),
566
- country: h(e.string()),
567
- zip_code: h(e.string()),
568
- email: h(e.string()),
569
- billing_email: h(e.string()),
570
- phone_number: h(e.string()),
571
- update_processor_customer: h(e.boolean())
559
+ first_name: f(e.string()),
560
+ last_name: f(e.string()),
561
+ line1: f(e.string()),
562
+ line2: f(e.string()),
563
+ line3: f(e.string()),
564
+ city: f(e.string()),
565
+ state: f(e.string()),
566
+ country: f(e.string()),
567
+ zip_code: f(e.string()),
568
+ email: f(e.string()),
569
+ billing_email: f(e.string()),
570
+ phone_number: f(e.string()),
571
+ update_processor_customer: f(e.boolean())
572
572
  });
573
573
  const qr = e.object({
574
574
  id: e.string(),
575
- email: h(e.string()),
576
- first_name: h(e.string()),
577
- last_name: h(e.string()),
578
- phone_number: h(e.string()),
579
- billing_email: h(e.string()),
580
- address: h(e.record(e.string(), e.any()))
575
+ email: f(e.string()),
576
+ first_name: f(e.string()),
577
+ last_name: f(e.string()),
578
+ phone_number: f(e.string()),
579
+ billing_email: f(e.string()),
580
+ address: f(e.record(e.string(), e.any()))
581
581
  }), Vr = (t) => t.reduce((r, n) => r + n, 0);
582
582
  function zr(t, r) {
583
583
  var n = Object.setPrototypeOf;
@@ -619,7 +619,7 @@ var Hr = /* @__PURE__ */ function() {
619
619
  }
620
620
  return r;
621
621
  }(Error);
622
- class Bt extends Kr {
622
+ class Jt extends Kr {
623
623
  constructor(r) {
624
624
  const n = `${r.message}`;
625
625
  super(n), this.response = r;
@@ -628,19 +628,19 @@ class Bt extends Kr {
628
628
  return this.response.message;
629
629
  }
630
630
  }
631
- const N = async (t, r, n) => {
631
+ const D = async (t, r, n) => {
632
632
  const o = await t.send(r);
633
633
  if (Zr(o))
634
- throw new Bt(o);
634
+ throw new Jt(o);
635
635
  if (!Gr(o, n)) {
636
636
  const i = n.safeParse(o);
637
637
  throw i.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", n, "Actual:", o), i.error);
638
638
  }
639
639
  return o;
640
- }, Gr = (t, r) => r.safeParse(t).success, Zr = (t) => Sr.safeParse(t).success, Br = async (t, r) => await N(t, { type: "get_checkout_preview", payload: r }, Kt), ne = async (t) => await N(t, { type: "get_prefill", payload: {} }, Gt), De = async (t, r) => await N(t, { type: "v2_start_payment_flow", payload: r }, Zt), Jr = async (t, r) => await N(t, { type: "start_payment_flow_for_cc", payload: r }, $r), Wr = async (t, r) => await N(t, { type: "start_payment_flow_for_pr", payload: r }, Zt), te = async (t, r) => await N(t, { type: "confirm_payment_flow", payload: r }, lr), Qr = async (t, r) => await N(
640
+ }, Gr = (t, r) => r.safeParse(t).success, Zr = (t) => Sr.safeParse(t).success, Br = async (t, r) => await D(t, { type: "get_checkout_preview", payload: r }, Gt), ne = async (t) => await D(t, { type: "get_prefill", payload: {} }, Zt), Ne = async (t, r) => await D(t, { type: "v2_start_payment_flow", payload: r }, Bt), Jr = async (t, r) => await D(t, { type: "start_payment_flow_for_cc", payload: r }, $r), Wr = async (t, r) => await D(t, { type: "start_payment_flow_for_pr", payload: r }, Bt), te = async (t, r) => await D(t, { type: "confirm_payment_flow", payload: r }, ur), Qr = async (t, r) => await D(
641
641
  t,
642
642
  { type: "check_if_popup_window_verified", payload: r },
643
- cr
643
+ lr
644
644
  ), Xr = async (t, r, n) => {
645
645
  const o = await Br(t, {
646
646
  secure_token: r,
@@ -666,26 +666,26 @@ const N = async (t, r, n) => {
666
666
  throw new Error("No CDE connections found");
667
667
  return await Promise.all(
668
668
  Array.from(t.values()).map(
669
- (n) => N(n, { type: "tokenize_card", payload: r }, ir)
669
+ (n) => D(n, { type: "tokenize_card", payload: r }, ar)
670
670
  )
671
671
  );
672
672
  }, _t = async (t, r) => {
673
673
  try {
674
- return await N(t, { type: "checkout_card_elements", payload: r }, it);
674
+ return await D(t, { type: "checkout_card_elements", payload: r }, it);
675
675
  } catch (n) {
676
676
  throw console.error("[cde-client] Error during checkoutCardElements:", n, JSON.stringify(n)), n;
677
677
  }
678
- }, to = async (t, r) => await N(t, { type: "setup_payment_method", payload: r }, Mr), Ue = async (t, r) => await N(t, { type: "checkout", payload: r }, it), Jt = 1e3, no = async (t, r) => {
678
+ }, to = async (t, r) => await D(t, { type: "setup_payment_method", payload: r }, Mr), Ue = async (t, r) => await D(t, { type: "checkout", payload: r }, it), Wt = 1e3, no = async (t, r) => {
679
679
  console.log(r);
680
- const n = await Nt({
680
+ const n = await Dt({
681
681
  iframe: t,
682
682
  debug: !0,
683
- timeout: Jt,
683
+ timeout: Wt,
684
684
  childOrigin: "*"
685
685
  // TODO: use with proper childOrigin
686
- }).promise, o = await N(n, { type: "ping-3ds-status" }, ar);
686
+ }).promise, o = await D(n, { type: "ping-3ds-status" }, sr);
687
687
  return console.log("🟢 CDE connection successful! Stopping polling... Result:", o), o;
688
- }, ro = async (t, r) => await N(t, { type: "update_checkout_customer", payload: r }, qr);
688
+ }, ro = async (t, r) => await D(t, { type: "update_checkout_customer", payload: r }, qr);
689
689
  function at(t) {
690
690
  throw new Error(`Unhandled case: ${t}`);
691
691
  }
@@ -726,7 +726,7 @@ const _e = (t) => async (r) => {
726
726
  log__: r,
727
727
  err__: n
728
728
  };
729
- }, { log__: hs, err__: oo } = O("common"), st = (t) => {
729
+ }, { log__: fs, err__: oo } = O("common"), st = (t) => {
730
730
  if (t.payment_methods.length !== 1)
731
731
  throw new Error(`Expected exactly one payment method, got ${t.payment_methods.length}`);
732
732
  return { payment_method_id: t.payment_methods[0].id };
@@ -743,18 +743,18 @@ const _e = (t) => async (r) => {
743
743
  },
744
744
  new_customer_first_name: t.firstName,
745
745
  new_customer_last_name: t.lastName
746
- }), { log__: Wt, err__: Qt } = O("common-cc"), fe = (t, r, n) => {
746
+ }), { log__: Qt, err__: Xt } = O("common-cc"), he = (t, r, n) => {
747
747
  if (n) {
748
- Wt(`Received default field values: ${JSON.stringify(n)}`);
748
+ Qt(`Received default field values: ${JSON.stringify(n)}`);
749
749
  for (const [i, a] of Object.entries(n))
750
750
  t[i] || (t[i] = a);
751
751
  }
752
752
  const o = we.safeParse(t);
753
753
  if (!o.success) {
754
- const i = o.error.format(), a = ur(i);
754
+ const i = o.error.format(), a = dr(i);
755
755
  for (const [s, c] of Object.entries(a))
756
756
  r(s, c, s);
757
- throw Qt("Got validation errors in non-CDE form fields", a), new Error("Got validation errors in non-CDE form fields");
757
+ throw Xt("Got validation errors in non-CDE form fields", a), new Error("Got validation errors in non-CDE form fields");
758
758
  }
759
759
  return o.data;
760
760
  }, ao = (t, r) => {
@@ -763,12 +763,12 @@ const _e = (t) => async (r) => {
763
763
  throw n.errors.forEach((o) => {
764
764
  const i = qt.safeParse(o.elementType);
765
765
  if (!i.success)
766
- Qt(`Unknown field name in onValidationError: ${o.elementType}. Error object:`, o);
766
+ Xt(`Unknown field name in onValidationError: ${o.elementType}. Error object:`, o);
767
767
  else {
768
768
  const a = i.data;
769
769
  r(a, o.errors);
770
770
  }
771
- }), Wt(`Error tokenizing card: got validation errors: ${JSON.stringify(n.errors)}`), new Error("Got validation errors while tokenizing card");
771
+ }), Qt(`Error tokenizing card: got validation errors: ${JSON.stringify(n.errors)}`), new Error("Got validation errors while tokenizing card");
772
772
  }, yt = "ojs-stripe-link-btn", { log__: k, err__: so } = O("stripe-link"), co = e.object({
773
773
  provider: e.literal("stripe_link"),
774
774
  processor_name: e.literal("stripe"),
@@ -787,7 +787,7 @@ const _e = (t) => async (r) => {
787
787
  k("Starting stripe link flow...");
788
788
  const i = t.anyCdeConnection, a = await ne(i), s = a.mode === "setup";
789
789
  k("Creating stripe elements...");
790
- const c = await Le(i, a.token, s, void 0), { elements: l, stripe: u } = await _r(o.metadata.stripe_pk, {
790
+ const c = await Le(i, a.token, s, void 0), { elements: l, stripe: u } = await yr(o.metadata.stripe_pk, {
791
791
  mode: "setup",
792
792
  currency: c.currency,
793
793
  setup_future_usage: "off_session",
@@ -802,23 +802,23 @@ const _e = (t) => async (r) => {
802
802
  googlePay: "never",
803
803
  paypal: "never"
804
804
  }
805
- }), m = () => {
805
+ }), _ = () => {
806
806
  d.mount(`#${yt}`);
807
807
  }, b = () => {
808
808
  d.unmount();
809
809
  };
810
- return n != null && n.doNotMountOnInit ? k("NOT mounting stripe link button (doNotMountOnInit is true)") : (k("Mounting stripe link button..."), m()), d.on("click", async (_) => {
810
+ return n != null && n.doNotMountOnInit ? k("NOT mounting stripe link button (doNotMountOnInit is true)") : (k("Mounting stripe link button..."), _()), d.on("click", async (m) => {
811
811
  if (k("Stripe Link button clicked"), n != null && n.overrideLinkSubmit && !await n.overrideLinkSubmit()) {
812
812
  k("Stripe Link submit aborted by overrideLinkSubmit");
813
813
  return;
814
814
  }
815
- _.resolve();
816
- }), d.on("confirm", async (_) => {
817
- k("Stripe Link window confirmed", _);
815
+ m.resolve();
816
+ }), d.on("confirm", async (m) => {
817
+ k("Stripe Link window confirmed", m);
818
818
  const y = await u.createPaymentMethod({
819
819
  elements: l,
820
820
  params: {
821
- billing_details: _.billingDetails
821
+ billing_details: m.billingDetails
822
822
  }
823
823
  });
824
824
  y.error ? (so("error", y.error), r.get.onCheckoutError(y.error.message ?? "Stripe Link unknown error")) : (k("paymentMethod", y.paymentMethod), $.stripeLink.run({
@@ -832,7 +832,7 @@ const _e = (t) => async (r) => {
832
832
  }), {
833
833
  isAvailable: !0,
834
834
  controller: {
835
- mountButton: m,
835
+ mountButton: _,
836
836
  dismountButton: b,
837
837
  waitForButtonToMount: async () => await _o(yt)
838
838
  }
@@ -849,9 +849,9 @@ const _e = (t) => async (r) => {
849
849
  k("Running Stripe Link flow...");
850
850
  const a = t.anyCdeConnection;
851
851
  k("Merging PM fields with form fields...");
852
- const s = mo(n, i.stripePM), c = fe(s, o.get.onValidationError);
852
+ const s = mo(n, i.stripePM), c = he(s, o.get.onValidationError);
853
853
  k("Starting payment flow...");
854
- const l = await De(a, {
854
+ const l = await Ne(a, {
855
855
  payment_provider: r.provider,
856
856
  checkout_payment_method: r,
857
857
  their_existing_pm_id: i.stripePM.id,
@@ -867,14 +867,14 @@ const _e = (t) => async (r) => {
867
867
  const u = lo.parse(l.required_user_actions)[0].our_existing_pm_id, d = await ne(a);
868
868
  if (d.mode === "setup") {
869
869
  k("Doing payment setup...");
870
- const m = await te(a, {
870
+ const _ = await te(a, {
871
871
  secure_token: d.token,
872
872
  existing_cc_pm_id: u
873
873
  });
874
- return { mode: "setup", result: st(m) };
874
+ return { mode: "setup", result: st(_) };
875
875
  } else {
876
876
  k("Doing checkout...");
877
- const m = {
877
+ const _ = {
878
878
  secure_token: d.token,
879
879
  payment_input: {
880
880
  provider_type: r.provider
@@ -888,7 +888,7 @@ const _e = (t) => async (r) => {
888
888
  cancel_at_end: !1,
889
889
  checkout_payment_method: r
890
890
  };
891
- return { mode: "checkout", result: await Ue(a, m) };
891
+ return { mode: "checkout", result: await Ue(a, _) };
892
892
  }
893
893
  }
894
894
  ), mo = (t, r) => {
@@ -902,7 +902,7 @@ const _e = (t) => async (r) => {
902
902
  o ? r(o) : requestAnimationFrame(n);
903
903
  };
904
904
  n();
905
- }), yo = "@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2147483648!important;display:flex;justify-content:center;align-items:center;background-color:#00000080}.container{max-width:500px;max-height:600px;width:100%;height:100%;background-color:#fff;position:relative;animation:fadeIn .3s ease-out}.frame{max-width:500px;max-height:600px;width:100%;height:100%;border:none}.cancel-button{position:absolute;background:transparent;border:none;font-size:1rem;color:#fff;cursor:pointer;top:-1.5rem;padding:0;right:0}", fo = (t) => {
905
+ }), yo = "@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2147483648!important;display:flex;justify-content:center;align-items:center;background-color:#00000080}.container{max-width:500px;max-height:600px;width:100%;height:100%;background-color:#fff;position:relative;animation:fadeIn .3s ease-out}.frame{max-width:500px;max-height:600px;width:100%;height:100%;border:none}.cancel-button{position:absolute;background:transparent;border:none;font-size:1rem;color:#fff;cursor:pointer;top:-1.5rem;padding:0;right:0}", ho = (t) => {
906
906
  const r = document.createElement("template");
907
907
  r.innerHTML = `
908
908
  <style>
@@ -920,7 +920,7 @@ const _e = (t) => async (r) => {
920
920
  const i = o.querySelector("#three-ds-iframe"), a = o.querySelector(".cancel-button");
921
921
  return document.body.appendChild(n), { host: n, iframe: i, cancelButton: a };
922
922
  };
923
- function ho(t, r, n) {
923
+ function fo(t, r, n) {
924
924
  const o = async () => {
925
925
  try {
926
926
  const a = await no(t, n);
@@ -929,7 +929,7 @@ function ho(t, r, n) {
929
929
  }
930
930
  };
931
931
  o();
932
- const i = setInterval(o, Jt);
932
+ const i = setInterval(o, Wt);
933
933
  return i;
934
934
  }
935
935
  function go({
@@ -945,20 +945,20 @@ function go({
945
945
  };
946
946
  }
947
947
  async function $e(t) {
948
- const { url: r, baseUrl: n } = t, o = fo(r);
948
+ const { url: r, baseUrl: n } = t, o = ho(r);
949
949
  return new Promise((i) => {
950
950
  const a = (l) => {
951
951
  setTimeout(() => {
952
952
  o.host.remove();
953
953
  }, 1e3), i(l), c == null || c();
954
- }, s = ho(o.iframe, a, new URL(n).origin), c = go({
954
+ }, s = fo(o.iframe, a, new URL(n).origin), c = go({
955
955
  elements: o,
956
956
  pollingInterval: s,
957
957
  resolve: i
958
958
  });
959
959
  });
960
960
  }
961
- const Xt = async (t) => {
961
+ const en = async (t) => {
962
962
  const r = await $e(t);
963
963
  if (r.status === q.CANCELLED)
964
964
  throw new Error("3DS verification cancelled");
@@ -987,7 +987,7 @@ const Xt = async (t) => {
987
987
  }
988
988
  }, 1e3);
989
989
  });
990
- }, { log__: vo, err__: en } = O("pockyt-cc"), Eo = e.object({
990
+ }, { log__: vo, err__: tn } = O("pockyt-cc"), Eo = e.object({
991
991
  "op-pockyt-3ds-url": e.string(),
992
992
  "op-pockyt-txn-no": e.string(),
993
993
  "op-pockyt-ref-no": e.string()
@@ -995,10 +995,10 @@ const Xt = async (t) => {
995
995
  const r = Eo.safeParse(t);
996
996
  if (!r.success) {
997
997
  const n = "Unable to process your credit card. Please contact support for assistance.", o = `Pockyt 3DS is required but headers are malformed. Got: ${JSON.stringify(t)}`;
998
- throw en(o), new Error(n);
998
+ throw tn(o), new Error(n);
999
999
  }
1000
1000
  return r.data;
1001
- }, tn = (t) => {
1001
+ }, nn = (t) => {
1002
1002
  try {
1003
1003
  const r = new URL(t ?? "").searchParams.get("vaultId");
1004
1004
  if (!r)
@@ -1006,14 +1006,14 @@ const Xt = async (t) => {
1006
1006
  return vo(`3DS verification success. [Vault ID: ${r}]`), r;
1007
1007
  } catch (r) {
1008
1008
  const n = "Error verifying 3DS verification result.";
1009
- throw en(n, `Resulting URL: ${t}.
1009
+ throw tn(n, `Resulting URL: ${t}.
1010
1010
  Error: ${W(r)}`), new Error(n);
1011
1011
  }
1012
1012
  }, So = (t) => (t == null ? void 0 : t["op-pockyt-3ds-url"]) !== void 0, Po = async (t, r) => {
1013
- const n = Co(r), o = await Xt({ url: n["op-pockyt-3ds-url"], baseUrl: t });
1013
+ const n = Co(r), o = await en({ url: n["op-pockyt-3ds-url"], baseUrl: t });
1014
1014
  return {
1015
1015
  existing_cc: {
1016
- vault_id: tn(o.href ?? ""),
1016
+ vault_id: nn(o.href ?? ""),
1017
1017
  transaction_no: n["op-pockyt-txn-no"],
1018
1018
  reference_no: n["op-pockyt-ref-no"]
1019
1019
  }
@@ -1041,7 +1041,7 @@ Error: ${W(r)}`), new Error(n);
1041
1041
  Error: ${W(r)}`), new Error(n);
1042
1042
  }
1043
1043
  }, To = async (t, r) => {
1044
- const n = Oo(r), o = await Xt({ url: n["op-airwallex-3ds-url"], baseUrl: t }), i = jo(o.href ?? ""), a = n["op-airwallex-initial-intent-id"];
1044
+ const n = Oo(r), o = await en({ url: n["op-airwallex-3ds-url"], baseUrl: t }), i = jo(o.href ?? ""), a = n["op-airwallex-initial-intent-id"];
1045
1045
  if (a !== i) {
1046
1046
  const s = "Unable to process your credit card. Please contact support for assistance.", c = `Intent ID from callback (${i}) does not match the initial intent ID (${a}).`;
1047
1047
  throw ct(c), new Error(s);
@@ -1052,7 +1052,7 @@ Error: ${W(r)}`), new Error(n);
1052
1052
  consent_id: n["op-airwallex-consent-id"]
1053
1053
  }
1054
1054
  };
1055
- }, { log__: E, err__: ft } = O("common-cc"), { log__: ht } = O("stripe-cc");
1055
+ }, { log__: C, err__: ht } = O("common-cc"), { log__: ft } = O("stripe-cc");
1056
1056
  e.array(
1057
1057
  e.object({
1058
1058
  our_existing_pm_id: e.string()
@@ -1067,92 +1067,95 @@ const Ro = _e(
1067
1067
  customParams: i
1068
1068
  }) => {
1069
1069
  var a;
1070
- E("├ Running common CC flow...", { checkoutPaymentMethod: r });
1070
+ C("├ Running common CC flow...", { checkoutPaymentMethod: r });
1071
1071
  const s = t.anyCdeConnection, c = await ne(s);
1072
- E(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
1073
- const l = fe(n, o.get.onValidationError), u = {
1072
+ C(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
1073
+ const l = he(n, o.get.onValidationError), u = {
1074
1074
  session_id: t.elementsSessionId,
1075
1075
  checkout_payment_method: r,
1076
1076
  non_cde_form_fields: l,
1077
1077
  extra_metadata: {}
1078
1078
  };
1079
1079
  try {
1080
- E(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
1080
+ C(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
1081
1081
  const d = await eo(i.currentCdeConnections, {
1082
1082
  session_id: t.elementsSessionId
1083
1083
  });
1084
1084
  if (ao(d, o.get.onValidationError), c.mode === "setup") {
1085
- E(`├ Setting up payment method in CDE [Token: ${c.token}]`);
1086
- const m = await to(s, u);
1087
- return E(`╰ Setup completed successfully [PM ID: ${m.payment_method_id}]`), { mode: "setup", result: m };
1085
+ C(`├ Setting up payment method in CDE [Token: ${c.token}]`);
1086
+ const _ = await to(s, u);
1087
+ return C(`╰ Setup completed successfully [PM ID: ${_.payment_method_id}]`), { mode: "setup", result: _ };
1088
1088
  } else {
1089
- E(`├ Initial checkout flow. Checking out card info in CDE [Session: ${t.elementsSessionId}]`);
1090
- const m = await _t(s, u);
1091
- return E("╰ Checkout completed successfully."), { mode: "checkout", result: m };
1089
+ C(`├ Initial checkout flow. Checking out card info in CDE [Session: ${t.elementsSessionId}]`);
1090
+ const _ = await _t(s, u);
1091
+ return C("╰ Checkout completed successfully."), { mode: "checkout", result: _ };
1092
1092
  }
1093
1093
  } catch (d) {
1094
- if (d instanceof Bt && d.originalErrorMessage.includes("3DS_REQUIRED")) {
1095
- E("├ Card requires 3DS, starting non-legacy payment flow"), E("Received 3DS error response headers:", d.response.headers);
1096
- const m = So(d.response.headers);
1097
- if (m) {
1098
- E("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
1099
- const v = await Po(t.baseUrl, d.response.headers);
1100
- u.extra_metadata.pockyt = v;
1094
+ if (d instanceof Jt && d.originalErrorMessage.includes("3DS_REQUIRED")) {
1095
+ C("├ Card requires 3DS, starting non-legacy payment flow"), C("Received 3DS error response headers:", d.response.headers);
1096
+ const _ = So(d.response.headers);
1097
+ if (_) {
1098
+ C("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
1099
+ const h = await Po(t.baseUrl, d.response.headers);
1100
+ u.extra_metadata.pockyt = h;
1101
1101
  }
1102
- const b = Io(d.response.headers);
1103
- if (b) {
1104
- E("├ Airwallex 3DS case detected. Going through Airwallex 3DS flow.");
1105
- const v = await To(t.baseUrl, d.response.headers);
1106
- u.extra_metadata.airwallex = v;
1102
+ if (Io(d.response.headers)) {
1103
+ C("├ Airwallex 3DS case detected. Going through Airwallex 3DS flow.");
1104
+ const h = await To(t.baseUrl, d.response.headers);
1105
+ u.extra_metadata.airwallex = h;
1107
1106
  }
1108
- const _ = await Jr(s, u);
1109
- E("├ Payment flow result:", _);
1110
- const y = m || b, f = ((a = d.response.headers) == null ? void 0 : a["op-should-use-new-flow"]) !== "true";
1111
- y ? E("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : f ? (E("├ Using stripe 3DS flow"), await Do(_)) : (E("├ Using common 3DS flow"), await No(_, t.baseUrl));
1112
- const w = _.cc_pm_id;
1107
+ const b = await Jr(s, u);
1108
+ C("├ Payment flow result:", b);
1109
+ const m = ((a = d.response.headers) == null ? void 0 : a["op-should-use-new-flow"]) !== "true";
1110
+ _ ? C("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : m ? (C("├ Using stripe 3DS flow"), await No(b)) : (C("├ Using common 3DS flow"), await Do(b, t.baseUrl));
1111
+ const y = b.cc_pm_id;
1113
1112
  if (c.mode === "setup") {
1114
- E(`├ Confirming payment flow [cc_pm_id: ${w}]`);
1115
- const v = await te(s, {
1113
+ C(`├ Confirming payment flow [cc_pm_id: ${y}]`);
1114
+ const h = await te(s, {
1116
1115
  secure_token: c.token,
1117
- existing_cc_pm_id: w
1116
+ existing_cc_pm_id: y
1118
1117
  });
1119
- E("├ Confirm payment flow result received Result:", v);
1120
- const P = st(v);
1121
- return E(`╰ Setup completed successfully [PM ID: ${P.payment_method_id}]`), { mode: "setup", result: P };
1118
+ C("├ Confirm payment flow result received Result:", h);
1119
+ const w = st(h);
1120
+ return C(`╰ Setup completed successfully [PM ID: ${w.payment_method_id}]`), { mode: "setup", result: w };
1122
1121
  } else {
1123
- E(`├ Checking out after 3DS flow [Flow: ${f ? "legacy" : "new"}]`);
1124
- const v = await _t(s, {
1122
+ C(`├ Checking out after 3DS flow [Flow: ${m ? "legacy" : "new"}]`);
1123
+ const h = await _t(s, {
1125
1124
  ...u,
1126
- existing_cc_pm_id: w,
1127
- do_not_use_legacy_cc_flow: f
1125
+ existing_cc_pm_id: y,
1126
+ do_not_use_legacy_cc_flow: m
1128
1127
  });
1129
- return E("╰ Checkout completed successfully."), { mode: "checkout", result: v };
1128
+ return C("╰ Checkout completed successfully."), { mode: "checkout", result: h };
1130
1129
  }
1131
1130
  }
1132
- throw ft("╰ Error checking out card info in CDE"), ft(d), d;
1131
+ throw ht("╰ Error checking out card info in CDE"), ht(d), d;
1133
1132
  }
1134
1133
  }
1135
1134
  ), xo = (t) => {
1136
1135
  const r = t.required_user_actions.find((n) => n.type === "stripe_3ds");
1137
1136
  if (!r)
1138
1137
  throw new Error("No stripe 3DS action found");
1139
- return dr.parse(r);
1138
+ return pr.parse(r);
1140
1139
  }, Mo = (t) => {
1141
1140
  const r = t.required_user_actions.find((n) => n.type === "airwallex_payment_consent");
1142
1141
  if (!r)
1143
1142
  throw new Error("No common 3DS action found");
1144
- return sr.parse(r);
1145
- }, No = async (t, r) => {
1143
+ return cr.parse(r);
1144
+ }, Do = async (t, r) => {
1146
1145
  const n = Mo(t);
1147
- E(`├ Using common 3DS flow [URL: ${n.redirect_url}]`);
1146
+ if (n.type === "airwallex_payment_consent" && n.redirect_url === "3DS_COMPLETE") {
1147
+ C("├ Airwallex 3DS flow completed successfully");
1148
+ return;
1149
+ }
1150
+ C(`├ Using common 3DS flow [URL: ${n.redirect_url}]`);
1148
1151
  const { status: o } = await $e({ url: n.redirect_url, baseUrl: r });
1149
- if (E(`╰ 3DS verification completed [Status: ${o}]`), o === q.CANCELLED)
1152
+ if (C(`╰ 3DS verification completed [Status: ${o}]`), o === q.CANCELLED)
1150
1153
  throw new Error("3DS verification cancelled");
1151
1154
  if (o === q.FAILURE)
1152
1155
  throw new Error("3DS verification failed");
1153
- }, Do = async (t) => {
1156
+ }, No = async (t) => {
1154
1157
  const r = xo(t);
1155
- ht(`├ Using stripe 3DS flow [Client Secret: ${r.client_secret.substring(0, 8)}...]`), await br(r), ht("╰ Stripe 3DS flow completed successfully");
1158
+ ft(`├ Using stripe 3DS flow [Client Secret: ${r.client_secret.substring(0, 8)}...]`), await br(r), ft("╰ Stripe 3DS flow completed successfully");
1156
1159
  }, { log__: R, err__: Lo } = O("stripe-pr"), Uo = e.object({
1157
1160
  provider: e.union([e.literal("apple_pay"), e.literal("google_pay")]),
1158
1161
  processor_name: e.literal("stripe"),
@@ -1166,7 +1169,7 @@ const Ro = _e(
1166
1169
  R("Initializing Stripe PR flow...");
1167
1170
  const n = t.anyCdeConnection, o = await ne(n), i = o.mode === "setup";
1168
1171
  R("Getting initial preview amount");
1169
- const a = await Le(n, o.token, i, void 0), s = await yr(
1172
+ const a = await Le(n, o.token, i, void 0), s = await hr(
1170
1173
  r.metadata.stripe_pk,
1171
1174
  a.amountAtom,
1172
1175
  a.currency,
@@ -1200,26 +1203,26 @@ const Ro = _e(
1200
1203
  R("Overriding PR amount with", y), Vo(c, y.amount, y.pending, y.stripeApplePay);
1201
1204
  }
1202
1205
  R("Showing PR dialog..."), c.show();
1203
- const l = await hr(c);
1206
+ const l = await fr(c);
1204
1207
  R("Stripe PM added event:", l), R("Merging PM fields with form fields...");
1205
- const u = qo(n, l), d = fe(u, o.get.onValidationError);
1208
+ const u = qo(n, l), d = he(u, o.get.onValidationError);
1206
1209
  R("PR dialog finished. Starting payment flow...", d);
1207
- const m = await Wr(s, {
1210
+ const _ = await Wr(s, {
1208
1211
  fields: d,
1209
1212
  checkoutPaymentMethod: r
1210
- }), b = zo(m);
1213
+ }), b = zo(_);
1211
1214
  R("Confirming PR with Stripe..."), await gr(b, l);
1212
- const _ = await ne(s);
1213
- if (_.mode === "setup") {
1215
+ const m = await ne(s);
1216
+ if (m.mode === "setup") {
1214
1217
  R("Confirming payment flow for setup...");
1215
1218
  const y = await te(s, {
1216
- secure_token: _.token
1219
+ secure_token: m.token
1217
1220
  });
1218
1221
  return { mode: "setup", result: st(y) };
1219
1222
  } else {
1220
1223
  R("Performing checkout...");
1221
1224
  const y = {
1222
- secure_token: _.token,
1225
+ secure_token: m.token,
1223
1226
  payment_input: {
1224
1227
  provider_type: r.provider
1225
1228
  },
@@ -1229,8 +1232,8 @@ const Ro = _e(
1229
1232
  customer_zip_code: d[p.ZIP_CODE],
1230
1233
  customer_country: d[p.COUNTRY],
1231
1234
  promotion_code: d[p.PROMOTION_CODE],
1232
- line_items: _.line_items,
1233
- total_amount_atom: _.amount_total_atom,
1235
+ line_items: m.line_items,
1236
+ total_amount_atom: m.amount_total_atom,
1234
1237
  cancel_at_end: !1,
1235
1238
  checkout_payment_method: r
1236
1239
  };
@@ -1239,8 +1242,8 @@ const Ro = _e(
1239
1242
  }
1240
1243
  ), qo = (t, r) => {
1241
1244
  var n, o, i, a;
1242
- const s = { ...t }, [c, ...l] = ((o = (n = r.payerName) == null ? void 0 : n.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0, d = (a = (i = r.paymentMethod) == null ? void 0 : i.billing_details) == null ? void 0 : a.address, m = r.shippingAddress;
1243
- return s[p.FIRST_NAME] = s[p.FIRST_NAME] || c || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || u || "_OP_UNKNOWN", s[p.EMAIL] = s[p.EMAIL] || r.payerEmail || "op_unfilled@getopenpay.com", s[p.ZIP_CODE] = s[p.ZIP_CODE] || (d == null ? void 0 : d.postal_code) || (m == null ? void 0 : m.postalCode) || "00000", s[p.COUNTRY] = s[p.COUNTRY] || (d == null ? void 0 : d.country) || (m == null ? void 0 : m.country) || "US", R("Final form inputs:", s), s;
1245
+ const s = { ...t }, [c, ...l] = ((o = (n = r.payerName) == null ? void 0 : n.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0, d = (a = (i = r.paymentMethod) == null ? void 0 : i.billing_details) == null ? void 0 : a.address, _ = r.shippingAddress;
1246
+ return s[p.FIRST_NAME] = s[p.FIRST_NAME] || c || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || u || "_OP_UNKNOWN", s[p.EMAIL] = s[p.EMAIL] || r.payerEmail || "op_unfilled@getopenpay.com", s[p.ZIP_CODE] = s[p.ZIP_CODE] || (d == null ? void 0 : d.postal_code) || (_ == null ? void 0 : _.postalCode) || "00000", s[p.COUNTRY] = s[p.COUNTRY] || (d == null ? void 0 : d.country) || (_ == null ? void 0 : _.country) || "US", R("Final form inputs:", s), s;
1244
1247
  }, Vo = (t, r, n, o) => {
1245
1248
  t.update({
1246
1249
  total: {
@@ -1255,7 +1258,7 @@ const Ro = _e(
1255
1258
  if (t.required_user_actions.length !== 1)
1256
1259
  throw new Error(`Error occurred.
1257
1260
  Details: got ${t.required_user_actions.length} required user actions`);
1258
- return pr.parse(t.required_user_actions[0]);
1261
+ return mr.parse(t.required_user_actions[0]);
1259
1262
  }, { log__: Z, err__: gt } = O("pockyt-paypal"), Yo = e.object({
1260
1263
  processor_name: e.literal("pockyt"),
1261
1264
  provider: e.literal("paypal")
@@ -1272,61 +1275,69 @@ Details: got ${t.required_user_actions.length} required user actions`);
1272
1275
  formCallbacks: o,
1273
1276
  customParams: i
1274
1277
  }) => {
1278
+ var a, s;
1275
1279
  Z("Running Pockyt Paypal flow...");
1276
- const a = t.anyCdeConnection, s = await ne(a);
1280
+ const c = t.anyCdeConnection, l = await ne(c);
1277
1281
  Z("Verifying CPM...");
1278
- const c = Yo.parse(r);
1282
+ const u = Yo.parse(r);
1279
1283
  Z("├ Validating non-CDE form fields");
1280
- const l = i == null ? void 0 : i.settings, u = fe(
1284
+ const d = i == null ? void 0 : i.settings, _ = he(
1281
1285
  n,
1282
1286
  o.get.onValidationError,
1283
- l == null ? void 0 : l.defaultFieldValues
1284
- ), d = io(u);
1285
- Z(`Starting payment flow... Mode: ${s.mode}`);
1286
- const m = s.mode !== "setup", b = await De(a, {
1287
- payment_provider: c.provider,
1288
- checkout_payment_method: c,
1287
+ d == null ? void 0 : d.defaultFieldValues
1288
+ ), b = io(_);
1289
+ Z(`Starting payment flow... Mode: ${l.mode}`);
1290
+ const m = l.mode !== "setup", y = await Ne(c, {
1291
+ payment_provider: u.provider,
1292
+ checkout_payment_method: u,
1289
1293
  use_pay_first_flow: m,
1290
1294
  pay_first_flow_cart_info: m ? {
1291
1295
  // TODO add coupon and cart adjusted line items later
1292
- line_items: s.line_items,
1293
- displayed_total_amount_atom: s.amount_total_atom
1296
+ line_items: l.line_items,
1297
+ displayed_total_amount_atom: l.amount_total_atom
1294
1298
  } : void 0,
1295
- ...d
1296
- });
1297
- if (Z("Start payment flow response", b), !b.checkout_attempt_id)
1298
- throw gt("Checkout attempt ID not found in response:", b), new Error("An error occurred during checkout, please try again with another payment method.");
1299
- const _ = Ho.parse(b.required_user_actions)[0];
1300
- Z("Opening paypal iframe...");
1301
- const y = await wo(
1302
- "PayPal",
1303
- a,
1304
- _.verify_token,
1305
- _.paypal_iframe_url
1306
- );
1307
- Z("Paypal flow result", y);
1308
- const f = tn(y.href);
1309
- Z(`Confirming payment flow using vault ID ${f}`);
1310
- const w = await te(a, {
1311
- secure_token: s.token,
1312
- their_pm_id: f,
1313
- checkout_attempt_id: m ? b.checkout_attempt_id : void 0
1299
+ processor_specific_metadata: {
1300
+ use_paypal_redirect_flow: !!((a = i == null ? void 0 : i.settings) != null && a.useRedirectFlow)
1301
+ },
1302
+ ...b
1314
1303
  });
1315
- if (Z("Confirm payment flow result", w), s.mode === "setup")
1304
+ if (Z("Start payment flow response", y), !y.checkout_attempt_id)
1305
+ throw gt("Checkout attempt ID not found in response:", y), new Error("An error occurred during checkout, please try again with another payment method.");
1306
+ const h = Ho.parse(y.required_user_actions)[0];
1307
+ if ((s = i == null ? void 0 : i.settings) != null && s.useRedirectFlow)
1308
+ throw window.location.href = h.paypal_iframe_url, await zt(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
1309
+ {
1310
+ Z("Opening paypal iframe...");
1311
+ const w = await wo(
1312
+ "PayPal",
1313
+ c,
1314
+ h.verify_token,
1315
+ h.paypal_iframe_url
1316
+ );
1317
+ Z("Paypal flow result", w);
1318
+ const v = nn(w.href);
1319
+ Z(`Confirming payment flow using vault ID ${v}`);
1320
+ const E = await te(c, {
1321
+ secure_token: l.token,
1322
+ their_pm_id: v,
1323
+ checkout_attempt_id: m ? y.checkout_attempt_id : void 0
1324
+ });
1325
+ if (Z("Confirm payment flow result", E), l.mode === "setup")
1326
+ return {
1327
+ mode: "setup",
1328
+ result: {
1329
+ payment_method_id: E.payment_methods[0].id
1330
+ }
1331
+ };
1332
+ if (!E.pay_first_success_response)
1333
+ throw gt("Checkout failed, no pay-first success response:", E), new Error("Checkout failed, please try again with another payment method.");
1316
1334
  return {
1317
- mode: "setup",
1318
- result: {
1319
- payment_method_id: w.payment_methods[0].id
1320
- }
1335
+ mode: "checkout",
1336
+ result: E.pay_first_success_response
1321
1337
  };
1322
- if (!w.pay_first_success_response)
1323
- throw gt("Checkout failed, no pay-first success response:", w), new Error("Checkout failed, please try again with another payment method.");
1324
- return {
1325
- mode: "checkout",
1326
- result: w.pay_first_success_response
1327
- };
1338
+ }
1328
1339
  }
1329
- ), nn = ({
1340
+ ), rn = ({
1330
1341
  gateway: t,
1331
1342
  gatewayMerchantId: r,
1332
1343
  merchantName: n,
@@ -1335,7 +1346,7 @@ Details: got ${t.required_user_actions.length} required user actions`);
1335
1346
  overridePaymentRequest: a
1336
1347
  }) => {
1337
1348
  var s, c;
1338
- const l = ((s = a == null ? void 0 : a.amount) == null ? void 0 : s.amountAtom) ?? (i == null ? void 0 : i.amountAtom) ?? 0, u = Math.max(l / 100, 0), d = (((c = a == null ? void 0 : a.amount) == null ? void 0 : c.currency) ?? (i == null ? void 0 : i.currency) ?? "USD").toUpperCase(), m = {
1349
+ const l = ((s = a == null ? void 0 : a.amount) == null ? void 0 : s.amountAtom) ?? (i == null ? void 0 : i.amountAtom) ?? 0, u = Math.max(l / 100, 0), d = (((c = a == null ? void 0 : a.amount) == null ? void 0 : c.currency) ?? (i == null ? void 0 : i.currency) ?? "USD").toUpperCase(), _ = {
1339
1350
  apiVersion: 2,
1340
1351
  apiVersionMinor: 0,
1341
1352
  allowedPaymentMethods: [
@@ -1375,7 +1386,7 @@ Details: got ${t.required_user_actions.length} required user actions`);
1375
1386
  totalPrice: u.toFixed(2)
1376
1387
  }
1377
1388
  };
1378
- return a != null && a.googlePayPaymentRequest ? { ...m, ...a.googlePayPaymentRequest } : m;
1389
+ return a != null && a.googlePayPaymentRequest ? { ..._, ...a.googlePayPaymentRequest } : _;
1379
1390
  }, Go = () => new Promise((t, r) => {
1380
1391
  const n = document.createElement("script");
1381
1392
  n.src = "https://pay.google.com/gp/p/js/pay.js", n.async = !0, n.onload = () => t(), n.onerror = () => r(new Error("Failed to load Google Pay SDK")), document.body.appendChild(n);
@@ -1390,15 +1401,15 @@ Details: got ${t.required_user_actions.length} required user actions`);
1390
1401
  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";
1391
1402
  }
1392
1403
  return s;
1393
- }, { log__: D, err__: se } = O("awx-google-pay");
1404
+ }, { log__: N, err__: se } = O("awx-google-pay");
1394
1405
  let Ze = null;
1395
- const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TEST", on = (t, r) => {
1396
- const n = rn(t);
1406
+ const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TEST", an = (t, r) => {
1407
+ const n = on(t);
1397
1408
  return Ze === null && (Ze = new window.google.payments.api.PaymentsClient({
1398
1409
  environment: n,
1399
1410
  merchantInfo: r.merchantInfo
1400
1411
  })), Ze;
1401
- }, an = e.object({
1412
+ }, sn = e.object({
1402
1413
  provider: e.literal("google_pay"),
1403
1414
  processor_name: e.literal("airwallex"),
1404
1415
  metadata: e.object({
@@ -1409,34 +1420,34 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1409
1420
  }), Jo = Fe(
1410
1421
  async ({ context: t, formCallbacks: r }) => {
1411
1422
  var n, o;
1412
- const i = ye(t.checkoutPaymentMethods, an);
1423
+ const i = ye(t.checkoutPaymentMethods, sn);
1413
1424
  if (!i)
1414
1425
  return { isAvailable: !1, isLoading: !1, startFlow: async () => {
1415
1426
  } };
1416
- D("Google Pay CPM", i);
1427
+ N("Google Pay CPM", i);
1417
1428
  const a = i.metadata;
1418
1429
  if (!a.processor_account_id)
1419
1430
  return se("No gateway merchant ID found in processor account"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
1420
1431
  } };
1421
- if (D("Loading Google Pay SDK..."), await Go(), !((o = (n = window.google) == null ? void 0 : n.payments) != null && o.api))
1432
+ if (N("Loading Google Pay SDK..."), await Go(), !((o = (n = window.google) == null ? void 0 : n.payments) != null && o.api))
1422
1433
  return se("Google Pay SDK not loaded properly"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
1423
1434
  } };
1424
- if (rn(t.baseUrl) === "PRODUCTION" && !a.google_pay_merchant_id)
1435
+ if (on(t.baseUrl) === "PRODUCTION" && !a.google_pay_merchant_id)
1425
1436
  return se("Google Pay merchant ID is required for production environment"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
1426
1437
  } };
1427
- D("Google Pay SDK loaded", window.google.payments);
1438
+ N("Google Pay SDK loaded", window.google.payments);
1428
1439
  try {
1429
- const s = nn({
1440
+ const s = rn({
1430
1441
  gateway: "airwallex",
1431
1442
  gatewayMerchantId: a.processor_account_id,
1432
1443
  merchantName: a.processor_account_name,
1433
1444
  merchantId: a.google_pay_merchant_id ?? "",
1434
1445
  initialPreview: void 0
1435
- }), { result: c } = await on(t.baseUrl, s).isReadyToPay(
1446
+ }), { result: c } = await an(t.baseUrl, s).isReadyToPay(
1436
1447
  s
1437
1448
  );
1438
1449
  if (!c)
1439
- return D("Google Pay is not available for this user"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
1450
+ return N("Google Pay is not available for this user"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
1440
1451
  } };
1441
1452
  } catch (s) {
1442
1453
  return se("Error checking Google Pay availability", s), { isAvailable: !1, isLoading: !1, startFlow: async () => {
@@ -1469,35 +1480,35 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1469
1480
  formCallbacks: o,
1470
1481
  customParams: i
1471
1482
  }) => {
1472
- var a, s, c, l, u, d, m;
1473
- D("Starting Google Pay flow...");
1474
- const b = ye(t.checkoutPaymentMethods, an), _ = t.anyCdeConnection, y = await ne(_), f = b.metadata;
1475
- if (!f.processor_account_id)
1483
+ var a, s, c, l, u, d, _;
1484
+ N("Starting Google Pay flow...");
1485
+ const b = ye(t.checkoutPaymentMethods, sn), m = t.anyCdeConnection, y = await ne(m), h = b.metadata;
1486
+ if (!h.processor_account_id)
1476
1487
  throw new Error("No gateway merchant ID found in processor account");
1477
- const w = nn({
1488
+ const w = rn({
1478
1489
  gateway: "airwallex",
1479
- gatewayMerchantId: f.processor_account_id,
1480
- merchantName: f.processor_account_name,
1481
- merchantId: f.google_pay_merchant_id ?? "",
1490
+ gatewayMerchantId: h.processor_account_id,
1491
+ merchantName: h.processor_account_name,
1492
+ merchantId: h.google_pay_merchant_id ?? "",
1482
1493
  initialPreview: await Le(
1483
- _,
1494
+ m,
1484
1495
  y.token,
1485
1496
  y.mode === "setup",
1486
1497
  void 0
1487
1498
  ),
1488
1499
  overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest
1489
- }), v = on(t.baseUrl, w);
1500
+ }), v = an(t.baseUrl, w);
1490
1501
  try {
1491
- const P = await v.loadPaymentData(w);
1492
- D("Google Pay Payment data", P);
1493
- const X = Bo(n, P), T = fe(
1502
+ const E = await v.loadPaymentData(w);
1503
+ N("Google Pay Payment data", E);
1504
+ const X = Bo(n, E), T = he(
1494
1505
  X,
1495
1506
  o.get.onValidationError,
1496
1507
  i == null ? void 0 : i.defaultFieldValues
1497
- ), ge = (s = (a = P.paymentMethodData) == null ? void 0 : a.tokenizationData) == null ? void 0 : s.token;
1508
+ ), ge = (s = (a = E.paymentMethodData) == null ? void 0 : a.tokenizationData) == null ? void 0 : s.token;
1498
1509
  if (!ge)
1499
1510
  throw new Error("No payment token received from Google Pay");
1500
- const He = await De(_, {
1511
+ const He = await Ne(m, {
1501
1512
  payment_provider: r.provider,
1502
1513
  checkout_payment_method: r,
1503
1514
  new_customer_email: T[p.EMAIL],
@@ -1508,8 +1519,8 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1508
1519
  country_code: T[p.COUNTRY]
1509
1520
  }
1510
1521
  }), K = Zo(He);
1511
- D("Start flow next actions", K);
1512
- const G = await te(_, {
1522
+ N("Start flow next actions", K);
1523
+ const G = await te(m, {
1513
1524
  secure_token: y.token,
1514
1525
  processor_specific_metadata: {
1515
1526
  payment_provider: r.provider,
@@ -1524,24 +1535,24 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1524
1535
  }
1525
1536
  }
1526
1537
  });
1527
- D("[1st] Confirm payment flow response", G);
1538
+ N("[1st] Confirm payment flow response", G);
1528
1539
  let be = (l = (c = G.payment_methods) == null ? void 0 : c[0]) == null ? void 0 : l.id;
1529
1540
  const oe = (u = G.required_user_actions) == null ? void 0 : u.find(
1530
1541
  (Y) => Y.type === "airwallex_payment_consent"
1531
1542
  );
1532
1543
  if (oe && oe.redirect_url) {
1533
- D("3DS Required, starting verification...", oe);
1544
+ N("3DS Required, starting verification...", oe);
1534
1545
  const { status: Y } = await $e({
1535
1546
  url: oe.redirect_url,
1536
1547
  baseUrl: t.baseUrl
1537
1548
  });
1538
- if (D(`╰ 3DS verification completed [Status: ${Y}]`), Y === q.CANCELLED)
1549
+ if (N(`╰ 3DS verification completed [Status: ${Y}]`), Y === q.CANCELLED)
1539
1550
  throw new Error("3DS verification cancelled");
1540
1551
  if (Y === q.FAILURE)
1541
1552
  throw new Error("3DS verification failed");
1542
1553
  }
1543
1554
  if (oe && !be) {
1544
- const Y = await te(_, {
1555
+ const Y = await te(m, {
1545
1556
  secure_token: y.token,
1546
1557
  their_pm_id: oe.their_pm_id,
1547
1558
  processor_specific_metadata: {
@@ -1549,14 +1560,14 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1549
1560
  airwallex_consent_id: oe.consent_id
1550
1561
  }
1551
1562
  });
1552
- D("[2nd] Confirm payment flow response", Y), be = (m = (d = Y.payment_methods) == null ? void 0 : d[0]) == null ? void 0 : m.id;
1563
+ N("[2nd] Confirm payment flow response", Y), be = (_ = (d = Y.payment_methods) == null ? void 0 : d[0]) == null ? void 0 : _.id;
1553
1564
  }
1554
1565
  if (!be)
1555
1566
  throw new Error("No PM ID found");
1556
1567
  if (y.mode === "setup")
1557
1568
  return { mode: "setup", result: { payment_method_id: be } };
1558
1569
  {
1559
- D("Starting one-time payment flow...");
1570
+ N("Starting one-time payment flow...");
1560
1571
  const Y = {
1561
1572
  secure_token: y.token,
1562
1573
  payment_input: {
@@ -1575,10 +1586,10 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1575
1586
  customer_first_name: T[p.FIRST_NAME],
1576
1587
  customer_last_name: T[p.LAST_NAME]
1577
1588
  };
1578
- return { mode: "checkout", result: await Ue(_, Y) };
1589
+ return { mode: "checkout", result: await Ue(m, Y) };
1579
1590
  }
1580
- } catch (P) {
1581
- throw se("Google Pay payment error", P), new Error((P == null ? void 0 : P.message) ?? "Unknown error");
1591
+ } catch (E) {
1592
+ throw se("Google Pay payment error", E), new Error((E == null ? void 0 : E.message) ?? "Unknown error");
1582
1593
  }
1583
1594
  }
1584
1595
  ), Qo = () => new Promise((t, r) => {
@@ -1613,7 +1624,7 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1613
1624
  }, { log__: ke } = O("awx-apple-pay");
1614
1625
  async function ri(t, r) {
1615
1626
  try {
1616
- const n = (await De(r.connection, {
1627
+ const n = (await Ne(r.connection, {
1617
1628
  payment_provider: r.checkoutPaymentMethod.provider,
1618
1629
  checkout_payment_method: r.checkoutPaymentMethod,
1619
1630
  new_customer_email: r.nonCdeFormInputs[p.EMAIL],
@@ -1680,7 +1691,7 @@ async function ii(t, r, n) {
1680
1691
  async function ai(t, r, n) {
1681
1692
  var o, i, a;
1682
1693
  try {
1683
- const s = t.payment, c = Xo(r.nonCdeFormInputs, s), l = fe(
1694
+ const s = t.payment, c = Xo(r.nonCdeFormInputs, s), l = he(
1684
1695
  c,
1685
1696
  r.formCallbacks.get.onValidationError,
1686
1697
  r.defaultFieldValues
@@ -1709,10 +1720,10 @@ async function ai(t, r, n) {
1709
1720
  });
1710
1721
  ke("[1st] Confirm payment flow response", u);
1711
1722
  let d = (i = (o = u.payment_methods) == null ? void 0 : o[0]) == null ? void 0 : i.id;
1712
- const m = (a = u.required_user_actions) == null ? void 0 : a.find(
1713
- (_) => _.type === "airwallex_payment_consent"
1723
+ const _ = (a = u.required_user_actions) == null ? void 0 : a.find(
1724
+ (m) => m.type === "airwallex_payment_consent"
1714
1725
  );
1715
- if (m != null && m.redirect_url && m.consent_id && m.their_pm_id && (d = await oi(m, r)), !d)
1726
+ if (_ != null && _.redirect_url && _.consent_id && _.their_pm_id && (d = await oi(_, r)), !d)
1716
1727
  throw new Error("No PM ID found");
1717
1728
  const b = {
1718
1729
  status: ApplePaySession.STATUS_SUCCESS
@@ -1725,7 +1736,7 @@ async function ai(t, r, n) {
1725
1736
  throw r.session.completePayment(c), s;
1726
1737
  }
1727
1738
  }
1728
- const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1739
+ const { log__: J, err__: Xe } = O("awx-apple-pay"), cn = e.object({
1729
1740
  provider: e.literal("apple_pay"),
1730
1741
  processor_name: e.literal("airwallex"),
1731
1742
  metadata: e.object({
@@ -1734,7 +1745,7 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1734
1745
  })
1735
1746
  }), si = Fe(
1736
1747
  async ({ context: t, formCallbacks: r }) => {
1737
- const n = ye(t.checkoutPaymentMethods, sn);
1748
+ const n = ye(t.checkoutPaymentMethods, cn);
1738
1749
  if (!n)
1739
1750
  return { isAvailable: !1, isLoading: !1, startFlow: async () => {
1740
1751
  } };
@@ -1788,11 +1799,11 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1788
1799
  formCallbacks: i
1789
1800
  }) => {
1790
1801
  var a, s;
1791
- const c = ye(t.checkoutPaymentMethods, sn), { initialPreview: l, isSetupMode: u, prefill: d, overridePaymentRequest: m } = o, b = (((a = m == null ? void 0 : m.amount) == null ? void 0 : a.currency) ?? l.currency ?? "USD").toUpperCase(), _ = ((((s = m == null ? void 0 : m.amount) == null ? void 0 : s.amountAtom) ?? l.amountAtom ?? 0) / 100).toFixed(2), y = {
1792
- label: (m == null ? void 0 : m.label) ?? "Total",
1793
- type: m != null && m.pending ? "pending" : "final",
1794
- amount: _
1795
- }, f = {
1802
+ const c = ye(t.checkoutPaymentMethods, cn), { initialPreview: l, isSetupMode: u, prefill: d, overridePaymentRequest: _ } = o, b = (((a = _ == null ? void 0 : _.amount) == null ? void 0 : a.currency) ?? l.currency ?? "USD").toUpperCase(), m = ((((s = _ == null ? void 0 : _.amount) == null ? void 0 : s.amountAtom) ?? l.amountAtom ?? 0) / 100).toFixed(2), y = {
1803
+ label: (_ == null ? void 0 : _.label) ?? "Total",
1804
+ type: _ != null && _.pending ? "pending" : "final",
1805
+ amount: m
1806
+ }, h = {
1796
1807
  countryCode: "US",
1797
1808
  currencyCode: b,
1798
1809
  requiredBillingContactFields: ["email", "postalAddress", "name"],
@@ -1805,10 +1816,10 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1805
1816
  "supportsEMV"
1806
1817
  ],
1807
1818
  total: y,
1808
- ...(m == null ? void 0 : m.applePayPaymentRequest) ?? {}
1819
+ ...(_ == null ? void 0 : _.applePayPaymentRequest) ?? {}
1809
1820
  };
1810
- J("Payment Request", f);
1811
- const w = new ApplePaySession(3, f);
1821
+ J("Payment Request", h);
1822
+ const w = new ApplePaySession(3, h);
1812
1823
  J("ApplePaySession", w);
1813
1824
  const v = {
1814
1825
  session: w,
@@ -1822,14 +1833,14 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1822
1833
  formCallbacks: i,
1823
1834
  defaultFieldValues: o == null ? void 0 : o.defaultFieldValues
1824
1835
  };
1825
- let P;
1836
+ let E;
1826
1837
  return new Promise((X, T) => {
1827
1838
  const ge = () => {
1828
1839
  J("Payment cancelled by user"), T(new Error("Payment cancelled by user"));
1829
1840
  }, { cleanupCancelListener: He } = ni(ge);
1830
1841
  w.oncancel = ge, w.onvalidatemerchant = async (K) => {
1831
1842
  try {
1832
- P = await ri(K, v);
1843
+ E = await ri(K, v);
1833
1844
  } catch (G) {
1834
1845
  T(G);
1835
1846
  }
@@ -1840,7 +1851,7 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1840
1851
  w.completePaymentMethodSelection(K);
1841
1852
  }, w.onpaymentauthorized = async (K) => {
1842
1853
  try {
1843
- const G = await ai(K, v, P);
1854
+ const G = await ai(K, v, E);
1844
1855
  He(), X(G);
1845
1856
  } catch (G) {
1846
1857
  T(G);
@@ -1919,15 +1930,15 @@ function li(t, r, n, o) {
1919
1930
  function c(d) {
1920
1931
  try {
1921
1932
  u(o.next(d));
1922
- } catch (m) {
1923
- s(m);
1933
+ } catch (_) {
1934
+ s(_);
1924
1935
  }
1925
1936
  }
1926
1937
  function l(d) {
1927
1938
  try {
1928
1939
  u(o.throw(d));
1929
- } catch (m) {
1930
- s(m);
1940
+ } catch (_) {
1941
+ s(_);
1931
1942
  }
1932
1943
  }
1933
1944
  function u(d) {
@@ -1936,7 +1947,7 @@ function li(t, r, n, o) {
1936
1947
  u((o = o.apply(t, [])).next());
1937
1948
  });
1938
1949
  }
1939
- function cn(t, r) {
1950
+ function ln(t, r) {
1940
1951
  var n = { label: 0, sent: function() {
1941
1952
  if (a[0] & 1) throw a[1];
1942
1953
  return a[1];
@@ -2037,36 +2048,36 @@ function ui(t, r, n) {
2037
2048
  return i = Object.create((typeof AsyncIterator == "function" ? AsyncIterator : Object).prototype), c("next"), c("throw"), c("return", s), i[Symbol.asyncIterator] = function() {
2038
2049
  return this;
2039
2050
  }, i;
2040
- function s(_) {
2051
+ function s(m) {
2041
2052
  return function(y) {
2042
- return Promise.resolve(y).then(_, m);
2053
+ return Promise.resolve(y).then(m, _);
2043
2054
  };
2044
2055
  }
2045
- function c(_, y) {
2046
- o[_] && (i[_] = function(f) {
2056
+ function c(m, y) {
2057
+ o[m] && (i[m] = function(h) {
2047
2058
  return new Promise(function(w, v) {
2048
- a.push([_, f, w, v]) > 1 || l(_, f);
2059
+ a.push([m, h, w, v]) > 1 || l(m, h);
2049
2060
  });
2050
- }, y && (i[_] = y(i[_])));
2061
+ }, y && (i[m] = y(i[m])));
2051
2062
  }
2052
- function l(_, y) {
2063
+ function l(m, y) {
2053
2064
  try {
2054
- u(o[_](y));
2055
- } catch (f) {
2056
- b(a[0][3], f);
2065
+ u(o[m](y));
2066
+ } catch (h) {
2067
+ b(a[0][3], h);
2057
2068
  }
2058
2069
  }
2059
- function u(_) {
2060
- _.value instanceof de ? Promise.resolve(_.value.v).then(d, m) : b(a[0][2], _);
2070
+ function u(m) {
2071
+ m.value instanceof de ? Promise.resolve(m.value.v).then(d, _) : b(a[0][2], m);
2061
2072
  }
2062
- function d(_) {
2063
- l("next", _);
2073
+ function d(m) {
2074
+ l("next", m);
2064
2075
  }
2065
- function m(_) {
2066
- l("throw", _);
2076
+ function _(m) {
2077
+ l("throw", m);
2067
2078
  }
2068
- function b(_, y) {
2069
- _(y), a.shift(), a.length && l(a[0][0], a[0][1]);
2079
+ function b(m, y) {
2080
+ m(y), a.shift(), a.length && l(a[0][0], a[0][1]);
2070
2081
  }
2071
2082
  }
2072
2083
  function di(t) {
@@ -2128,8 +2139,8 @@ var Ee = function() {
2128
2139
  var u = l.value;
2129
2140
  u.remove(this);
2130
2141
  }
2131
- } catch (f) {
2132
- r = { error: f };
2142
+ } catch (h) {
2143
+ r = { error: h };
2133
2144
  } finally {
2134
2145
  try {
2135
2146
  l && !l.done && (n = c.return) && n.call(c);
@@ -2143,26 +2154,26 @@ var Ee = function() {
2143
2154
  if (A(d))
2144
2155
  try {
2145
2156
  d();
2146
- } catch (f) {
2147
- a = f instanceof Be ? f.errors : [f];
2157
+ } catch (h) {
2158
+ a = h instanceof Be ? h.errors : [h];
2148
2159
  }
2149
- var m = this._finalizers;
2150
- if (m) {
2160
+ var _ = this._finalizers;
2161
+ if (_) {
2151
2162
  this._finalizers = null;
2152
2163
  try {
2153
- for (var b = me(m), _ = b.next(); !_.done; _ = b.next()) {
2154
- var y = _.value;
2164
+ for (var b = me(_), m = b.next(); !m.done; m = b.next()) {
2165
+ var y = m.value;
2155
2166
  try {
2156
2167
  bt(y);
2157
- } catch (f) {
2158
- a = a ?? [], f instanceof Be ? a = Te(Te([], je(a)), je(f.errors)) : a.push(f);
2168
+ } catch (h) {
2169
+ a = a ?? [], h instanceof Be ? a = Te(Te([], je(a)), je(h.errors)) : a.push(h);
2159
2170
  }
2160
2171
  }
2161
- } catch (f) {
2162
- o = { error: f };
2172
+ } catch (h) {
2173
+ o = { error: h };
2163
2174
  } finally {
2164
2175
  try {
2165
- _ && !_.done && (i = b.return) && i.call(b);
2176
+ m && !m.done && (i = b.return) && i.call(b);
2166
2177
  } finally {
2167
2178
  if (o) throw o.error;
2168
2179
  }
@@ -2200,14 +2211,14 @@ var Ee = function() {
2200
2211
  var r = new t();
2201
2212
  return r.closed = !0, r;
2202
2213
  }(), t;
2203
- }(), ln = Ee.EMPTY;
2204
- function un(t) {
2214
+ }(), un = Ee.EMPTY;
2215
+ function dn(t) {
2205
2216
  return t instanceof Ee || t && "closed" in t && A(t.remove) && A(t.add) && A(t.unsubscribe);
2206
2217
  }
2207
2218
  function bt(t) {
2208
2219
  A(t) ? t() : t.unsubscribe();
2209
2220
  }
2210
- var dn = {
2221
+ var pn = {
2211
2222
  onUnhandledError: null,
2212
2223
  onStoppedNotification: null,
2213
2224
  Promise: void 0,
@@ -2224,7 +2235,7 @@ var dn = {
2224
2235
  },
2225
2236
  delegate: void 0
2226
2237
  };
2227
- function pn(t) {
2238
+ function mn(t) {
2228
2239
  pi.setTimeout(function() {
2229
2240
  throw t;
2230
2241
  });
@@ -2238,7 +2249,7 @@ var lt = function(t) {
2238
2249
  re(r, t);
2239
2250
  function r(n) {
2240
2251
  var o = t.call(this) || this;
2241
- return o.isStopped = !1, n ? (o.destination = n, un(n) && n.add(o)) : o.destination = fi, o;
2252
+ return o.isStopped = !1, n ? (o.destination = n, dn(n) && n.add(o)) : o.destination = hi, o;
2242
2253
  }
2243
2254
  return r.create = function(n, o, i) {
2244
2255
  return new nt(n, o, i);
@@ -2312,7 +2323,7 @@ var _i = function() {
2312
2323
  };
2313
2324
  else {
2314
2325
  var c;
2315
- a && dn.useDeprecatedNextContext ? (c = Object.create(n), c.unsubscribe = function() {
2326
+ a && pn.useDeprecatedNextContext ? (c = Object.create(n), c.unsubscribe = function() {
2316
2327
  return a.unsubscribe();
2317
2328
  }, s = {
2318
2329
  next: n.next && Je(n.next, c),
@@ -2325,12 +2336,12 @@ var _i = function() {
2325
2336
  return r;
2326
2337
  }(lt);
2327
2338
  function Se(t) {
2328
- pn(t);
2339
+ mn(t);
2329
2340
  }
2330
2341
  function yi(t) {
2331
2342
  throw t;
2332
2343
  }
2333
- var fi = {
2344
+ var hi = {
2334
2345
  closed: !0,
2335
2346
  next: wt,
2336
2347
  error: yi,
@@ -2338,11 +2349,11 @@ var fi = {
2338
2349
  }, ut = function() {
2339
2350
  return typeof Symbol == "function" && Symbol.observable || "@@observable";
2340
2351
  }();
2341
- function hi(t) {
2352
+ function fi(t) {
2342
2353
  return t;
2343
2354
  }
2344
2355
  function gi(t) {
2345
- return t.length === 0 ? hi : t.length === 1 ? t[0] : function(r) {
2356
+ return t.length === 0 ? fi : t.length === 1 ? t[0] : function(r) {
2346
2357
  return t.reduce(function(n, o) {
2347
2358
  return o(n);
2348
2359
  }, r);
@@ -2410,13 +2421,13 @@ var Q = function() {
2410
2421
  }();
2411
2422
  function vt(t) {
2412
2423
  var r;
2413
- return (r = t ?? dn.Promise) !== null && r !== void 0 ? r : Promise;
2424
+ return (r = t ?? pn.Promise) !== null && r !== void 0 ? r : Promise;
2414
2425
  }
2415
2426
  function bi(t) {
2416
2427
  return t && A(t.next) && A(t.error) && A(t.complete);
2417
2428
  }
2418
2429
  function wi(t) {
2419
- return t && t instanceof lt || bi(t) && un(t);
2430
+ return t && t instanceof lt || bi(t) && dn(t);
2420
2431
  }
2421
2432
  function vi(t) {
2422
2433
  return A(t == null ? void 0 : t.lift);
@@ -2476,7 +2487,7 @@ var Si = function(t) {
2476
2487
  return function() {
2477
2488
  t(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
2478
2489
  };
2479
- }), mn = function(t) {
2490
+ }), _n = function(t) {
2480
2491
  re(r, t);
2481
2492
  function r() {
2482
2493
  var n = t.call(this) || this;
@@ -2543,7 +2554,7 @@ var Si = function(t) {
2543
2554
  return this._throwIfClosed(), this._checkFinalizedStatuses(n), this._innerSubscribe(n);
2544
2555
  }, r.prototype._innerSubscribe = function(n) {
2545
2556
  var o = this, i = this, a = i.hasError, s = i.isStopped, c = i.observers;
2546
- return a || s ? ln : (this.currentObservers = null, c.push(n), new Ee(function() {
2557
+ return a || s ? un : (this.currentObservers = null, c.push(n), new Ee(function() {
2547
2558
  o.currentObservers = null, Re(c, n);
2548
2559
  }));
2549
2560
  }, r.prototype._checkFinalizedStatuses = function(n) {
@@ -2572,9 +2583,9 @@ var Si = function(t) {
2572
2583
  (o = (n = this.destination) === null || n === void 0 ? void 0 : n.complete) === null || o === void 0 || o.call(n);
2573
2584
  }, r.prototype._subscribe = function(n) {
2574
2585
  var o, i;
2575
- return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(n)) !== null && i !== void 0 ? i : ln;
2586
+ return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(n)) !== null && i !== void 0 ? i : un;
2576
2587
  }, r;
2577
- }(mn), ki = {
2588
+ }(_n), ki = {
2578
2589
  now: function() {
2579
2590
  return Date.now();
2580
2591
  },
@@ -2683,20 +2694,20 @@ function xi(t) {
2683
2694
  function Mi(t) {
2684
2695
  return Symbol.asyncIterator && A(t == null ? void 0 : t[Symbol.asyncIterator]);
2685
2696
  }
2686
- function Ni(t) {
2697
+ function Di(t) {
2687
2698
  return new TypeError("You provided " + (t !== null && typeof t == "object" ? "an invalid object" : "'" + t + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
2688
2699
  }
2689
- function Di() {
2700
+ function Ni() {
2690
2701
  return typeof Symbol != "function" || !Symbol.iterator ? "@@iterator" : Symbol.iterator;
2691
2702
  }
2692
- var Li = Di();
2703
+ var Li = Ni();
2693
2704
  function Ui(t) {
2694
2705
  return A(t == null ? void 0 : t[Li]);
2695
2706
  }
2696
2707
  function Fi(t) {
2697
2708
  return ui(this, arguments, function() {
2698
2709
  var r, n, o, i;
2699
- return cn(this, function(a) {
2710
+ return ln(this, function(a) {
2700
2711
  switch (a.label) {
2701
2712
  case 0:
2702
2713
  r = t.getReader(), a.label = 1;
@@ -2738,13 +2749,13 @@ function qi(t) {
2738
2749
  if (Ri(t))
2739
2750
  return Yi(t);
2740
2751
  if (Mi(t))
2741
- return _n(t);
2752
+ return yn(t);
2742
2753
  if (Ui(t))
2743
2754
  return Hi(t);
2744
2755
  if ($i(t))
2745
2756
  return Ki(t);
2746
2757
  }
2747
- throw Ni(t);
2758
+ throw Di(t);
2748
2759
  }
2749
2760
  function Vi(t) {
2750
2761
  return new Q(function(r) {
@@ -2767,7 +2778,7 @@ function Yi(t) {
2767
2778
  r.closed || (r.next(n), r.complete());
2768
2779
  }, function(n) {
2769
2780
  return r.error(n);
2770
- }).then(null, pn);
2781
+ }).then(null, mn);
2771
2782
  });
2772
2783
  }
2773
2784
  function Hi(t) {
@@ -2791,7 +2802,7 @@ function Hi(t) {
2791
2802
  r.complete();
2792
2803
  });
2793
2804
  }
2794
- function _n(t) {
2805
+ function yn(t) {
2795
2806
  return new Q(function(r) {
2796
2807
  Gi(t, r).catch(function(n) {
2797
2808
  return r.error(n);
@@ -2799,13 +2810,13 @@ function _n(t) {
2799
2810
  });
2800
2811
  }
2801
2812
  function Ki(t) {
2802
- return _n(Fi(t));
2813
+ return yn(Fi(t));
2803
2814
  }
2804
2815
  function Gi(t, r) {
2805
2816
  var n, o, i, a;
2806
2817
  return li(this, void 0, void 0, function() {
2807
2818
  var s, c;
2808
- return cn(this, function(l) {
2819
+ return ln(this, function(l) {
2809
2820
  switch (l.label) {
2810
2821
  case 0:
2811
2822
  l.trys.push([0, 5, 6, 11]), n = di(t), l.label = 1;
@@ -2886,24 +2897,24 @@ function ea(t, r) {
2886
2897
  var n = Qi(t) ? { first: t } : typeof t == "number" ? { each: t } : t, o = n.first, i = n.each, a = n.with, s = a === void 0 ? ta : a, c = n.scheduler, l = c === void 0 ? ji : c, u = n.meta, d = u === void 0 ? null : u;
2887
2898
  if (o == null && i == null)
2888
2899
  throw new TypeError("No timeout provided.");
2889
- return Ei(function(m, b) {
2890
- var _, y, f = null, w = 0, v = function(P) {
2900
+ return Ei(function(_, b) {
2901
+ var m, y, h = null, w = 0, v = function(E) {
2891
2902
  y = Zi(b, l, function() {
2892
2903
  try {
2893
- _.unsubscribe(), qi(s({
2904
+ m.unsubscribe(), qi(s({
2894
2905
  meta: d,
2895
- lastValue: f,
2906
+ lastValue: h,
2896
2907
  seen: w
2897
2908
  })).subscribe(b);
2898
2909
  } catch (X) {
2899
2910
  b.error(X);
2900
2911
  }
2901
- }, P);
2912
+ }, E);
2902
2913
  };
2903
- _ = m.subscribe(Ci(b, function(P) {
2904
- y == null || y.unsubscribe(), w++, b.next(f = P), i > 0 && v(i);
2914
+ m = _.subscribe(Ci(b, function(E) {
2915
+ y == null || y.unsubscribe(), w++, b.next(h = E), i > 0 && v(i);
2905
2916
  }, void 0, void 0, function() {
2906
- y != null && y.closed || y == null || y.unsubscribe(), f = null;
2917
+ y != null && y.closed || y == null || y.unsubscribe(), h = null;
2907
2918
  })), !w && v(o != null ? typeof o == "number" ? o : +o - l.now() : i);
2908
2919
  });
2909
2920
  }
@@ -2947,7 +2958,7 @@ class Oe {
2947
2958
  with: () => Bi(() => new Error(r.timeoutErrMsg))
2948
2959
  };
2949
2960
  return Wi(this._subject.pipe(ea(n)));
2950
- }, this._current = { status: "initial", isSuccess: !1 }, this._subject = new mn();
2961
+ }, this._current = { status: "initial", isSuccess: !1 }, this._subject = new _n();
2951
2962
  }
2952
2963
  get current() {
2953
2964
  return this._current;
@@ -3066,7 +3077,7 @@ class ca {
3066
3077
  }
3067
3078
  const kt = (t) => new URL(t).origin;
3068
3079
  async function la(t, r) {
3069
- const n = await Nt({
3080
+ const n = await Dt({
3070
3081
  iframe: t,
3071
3082
  debug: !1,
3072
3083
  childOrigin: r
@@ -3158,7 +3169,7 @@ const da = (t, r, n) => {
3158
3169
  this.cdeLoadEvent.current.isSuccess || this.cdeLoadEvent.throw(new Error(n), n);
3159
3170
  }, this.createElement = (n, o = {}) => {
3160
3171
  if (!this.config) throw new Error("OpenPay form not initialized");
3161
- const i = Dn.parse(n), a = document.createElement("iframe"), s = this.buildQueryString(o);
3172
+ const i = Ln.parse(n), a = document.createElement("iframe"), s = this.buildQueryString(o);
3162
3173
  a.name = `${i}-element`;
3163
3174
  const c = new URL(`/app/v1/${a.name}/`, this.config.baseUrl);
3164
3175
  return c.search = s.toString(), a.src = c.href, a.style.border = "none", a.style.width = "100%", this.registerIframe(i, a);
@@ -3248,7 +3259,7 @@ const da = (t, r, n) => {
3248
3259
  window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.registeredElements = null, delete window.ojs;
3249
3260
  }, this.updateCallbacks = (n) => {
3250
3261
  this.formCallbacks.setCallbacks(n);
3251
- }, rt.assignAsSingleton(this), this.ojsVersion = "0.2.6", this.ojsReleaseVersion = "local_build", this.baseUrl = r.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...r, baseUrl: this.baseUrl }, this.formCallbacks = sa.fromObject(r), this.registeredElements = null, this.formId = `opjs-form-${Pn()}`, this.referrer = window.location.origin, this.formTarget = r.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ua(), this.eventHandler = new ca(this.formId, this.baseUrl, this.formCallbacks, {
3262
+ }, rt.assignAsSingleton(this), this.ojsVersion = "0.2.8", this.ojsReleaseVersion = "local_build", this.baseUrl = r.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...r, baseUrl: this.baseUrl }, this.formCallbacks = sa.fromObject(r), this.registeredElements = null, this.formId = `opjs-form-${kn()}`, this.referrer = window.location.origin, this.formTarget = r.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ua(), this.eventHandler = new ca(this.formId, this.baseUrl, this.formCallbacks, {
3252
3263
  setFormHeight: this.setFormHeight,
3253
3264
  onCdeLoaded: this.onCdeLoaded,
3254
3265
  onCdeLoadError: this.onCdeLoadError
@@ -3292,36 +3303,36 @@ const _a = (t, r, n) => (...o) => {
3292
3303
  n(`[form] Error running callback (${t}):`, i);
3293
3304
  return;
3294
3305
  }
3295
- }, j = e.string().trim().min(1, { message: "Cannot be blank" }), S = e.string().trim().optional(), M = (t) => e.nullable(t.optional());
3296
- var yn = /* @__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))(yn || {});
3297
- const ya = e.nativeEnum(yn);
3306
+ }, j = e.string().trim().min(1, { message: "Cannot be blank" }), P = e.string().trim().optional(), M = (t) => e.nullable(t.optional());
3307
+ var hn = /* @__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))(hn || {});
3308
+ const ya = e.nativeEnum(hn);
3298
3309
  var fn = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(fn || {});
3299
- const hn = e.nativeEnum(fn), fa = e.union([ya, hn]);
3300
- var he = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(he || {});
3301
- e.nativeEnum(he);
3310
+ const gn = e.nativeEnum(fn), ha = e.union([ya, gn]);
3311
+ var fe = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(fe || {});
3312
+ e.nativeEnum(fe);
3302
3313
  const Ve = e.object({
3303
3314
  provider: e.string(),
3304
3315
  processor_name: M(e.string()),
3305
3316
  metadata: M(e.record(e.string(), e.any()))
3306
- }), ha = e.object({
3317
+ }), fa = e.object({
3307
3318
  id: e.string()
3308
3319
  });
3309
3320
  e.object({
3310
- cardNumber: S,
3311
- expiry: S,
3312
- cvc: S
3321
+ cardNumber: P,
3322
+ expiry: P,
3323
+ cvc: P
3313
3324
  });
3314
3325
  e.object({
3315
- backgroundColor: S,
3316
- color: S,
3317
- fontFamily: S,
3318
- fontSize: S,
3319
- fontWeight: S,
3320
- margin: S,
3321
- padding: S,
3322
- letterSpacing: S,
3323
- lineHeight: S,
3324
- hideIcon: S
3326
+ backgroundColor: P,
3327
+ color: P,
3328
+ fontFamily: P,
3329
+ fontSize: P,
3330
+ fontWeight: P,
3331
+ margin: P,
3332
+ padding: P,
3333
+ letterSpacing: P,
3334
+ lineHeight: P,
3335
+ hideIcon: P
3325
3336
  });
3326
3337
  const z = e.enum([
3327
3338
  // Element -> Form
@@ -3346,7 +3357,7 @@ const z = e.enum([
3346
3357
  "START_PAYMENT_FLOW"
3347
3358
  ]), ga = z.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), ba = e.object({ type: ga }), wa = z.extract(["BLUR", "FOCUS", "CHANGE"]), va = e.object({
3348
3359
  type: wa,
3349
- elementType: hn,
3360
+ elementType: gn,
3350
3361
  errors: e.array(e.string()).optional()
3351
3362
  }), Ea = z.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Ca = e.object({
3352
3363
  type: Ea,
@@ -3354,7 +3365,7 @@ const z = e.enum([
3354
3365
  headers: e.record(e.string(), e.string()).optional()
3355
3366
  }), Sa = z.extract(["VALIDATION_ERROR"]), Pa = e.object({
3356
3367
  type: Sa,
3357
- elementType: fa,
3368
+ elementType: ha,
3358
3369
  errors: e.array(e.string())
3359
3370
  }), ka = e.object({
3360
3371
  type: e.literal(z.enum.LAYOUT),
@@ -3363,7 +3374,7 @@ const z = e.enum([
3363
3374
  type: e.literal(z.enum.LOADED),
3364
3375
  sessionId: j,
3365
3376
  totalAmountAtoms: e.number(),
3366
- currency: S,
3377
+ currency: P,
3367
3378
  checkoutPaymentMethods: e.array(Ve)
3368
3379
  }), Oa = e.object({
3369
3380
  type: e.literal(z.enum.PAYMENT_FLOW_STARTED),
@@ -3379,24 +3390,24 @@ const z = e.enum([
3379
3390
  email: j,
3380
3391
  zipCode: j,
3381
3392
  country: j,
3382
- promotionCode: S
3393
+ promotionCode: P
3383
3394
  }), ja = e.object({
3384
- firstName: S,
3385
- lastName: S,
3395
+ firstName: P,
3396
+ lastName: P,
3386
3397
  email: j,
3387
3398
  zipCode: j,
3388
3399
  country: j,
3389
- promotionCode: S,
3390
- address: S,
3391
- city: S,
3392
- state: S
3400
+ promotionCode: P,
3401
+ address: P,
3402
+ city: P,
3403
+ state: P
3393
3404
  }), Ta = z.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Ra = e.object({
3394
3405
  type: Ta,
3395
3406
  sessionId: j,
3396
3407
  checkoutPaymentMethod: Ve,
3397
3408
  paymentFlowMetadata: e.any().optional(),
3398
3409
  doNotUseLegacyCCFlow: e.boolean().optional(),
3399
- existingCCPMId: S
3410
+ existingCCPMId: P
3400
3411
  }).extend(ze.shape), xa = e.object({
3401
3412
  type: e.literal(z.enum.TOKENIZE_SUCCESS),
3402
3413
  isReadyForCheckout: e.boolean()
@@ -3405,7 +3416,7 @@ const z = e.enum([
3405
3416
  invoiceUrls: e.array(e.string()),
3406
3417
  subscriptionIds: e.array(e.string()),
3407
3418
  customerId: e.string()
3408
- }), Na = e.discriminatedUnion("type", [
3419
+ }), Da = e.discriminatedUnion("type", [
3409
3420
  ba,
3410
3421
  va,
3411
3422
  Ca,
@@ -3419,7 +3430,7 @@ const z = e.enum([
3419
3430
  Ia
3420
3431
  ]);
3421
3432
  e.object({
3422
- payload: Na,
3433
+ payload: Da,
3423
3434
  nonce: j,
3424
3435
  formId: j,
3425
3436
  elementId: j
@@ -3443,7 +3454,7 @@ e.object({
3443
3454
  checkout_attempt_id: M(e.string()),
3444
3455
  processor_specific_metadata: M(e.record(e.string(), e.any()))
3445
3456
  });
3446
- const Da = e.object({
3457
+ const Na = e.object({
3447
3458
  invoice_urls: e.array(e.string()),
3448
3459
  subscription_ids: e.array(e.string()),
3449
3460
  customer_id: e.string()
@@ -3508,8 +3519,8 @@ e.discriminatedUnion("present", [
3508
3519
  e.object({ present: e.literal(!1) })
3509
3520
  ]);
3510
3521
  e.object({
3511
- payment_methods: e.array(ha),
3512
- pay_first_success_response: M(Da),
3522
+ payment_methods: e.array(fa),
3523
+ pay_first_success_response: M(Na),
3513
3524
  required_user_actions: M(e.array(Fa))
3514
3525
  });
3515
3526
  e.object({
@@ -3530,14 +3541,14 @@ e.object({
3530
3541
  headers: e.record(e.string(), e.string()).optional()
3531
3542
  });
3532
3543
  e.enum(["usd", "brl"]);
3533
- const gn = e.object({
3544
+ const bn = e.object({
3534
3545
  name: e.string(),
3535
3546
  amount_atom_off: g(e.number()),
3536
3547
  percent_off: g(e.number()),
3537
3548
  currency: g(e.string()),
3538
3549
  duration: e.string(),
3539
3550
  duration_in_months: g(e.number())
3540
- }), bn = e.object({
3551
+ }), wn = e.object({
3541
3552
  amount_subtotal_atom: e.number().int(),
3542
3553
  amount_total_atom: e.number().int(),
3543
3554
  currency: e.string(),
@@ -3562,16 +3573,16 @@ const gn = e.object({
3562
3573
  subscription_items: e.array(za),
3563
3574
  trial_start: g(e.string()),
3564
3575
  trial_end: g(e.string())
3565
- }), wn = e.object({
3576
+ }), vn = e.object({
3566
3577
  amount_atom: e.number()
3567
3578
  }), Ha = e.object({
3568
3579
  amount_atom: e.number(),
3569
3580
  amount_atom_considering_discount_applied: e.number(),
3570
3581
  currency: e.string(),
3571
- discount_amount_atoms: e.array(wn),
3582
+ discount_amount_atoms: e.array(vn),
3572
3583
  subscription_item_id: e.string()
3573
3584
  }), Ka = e.object({
3574
- coupon: gn
3585
+ coupon: bn
3575
3586
  }), Ga = e.object({
3576
3587
  currency: e.string(),
3577
3588
  discounts: e.array(Ka),
@@ -3580,19 +3591,19 @@ const gn = e.object({
3580
3591
  remaining_amount_atom: e.number(),
3581
3592
  tax_amount_atom: e.number(),
3582
3593
  total_amount_atom: e.number(),
3583
- total_discount_amount_atoms: e.array(wn)
3594
+ total_discount_amount_atoms: e.array(vn)
3584
3595
  }), It = e.object({
3585
3596
  created: e.array(Ya),
3586
3597
  invoices: e.array(Ga)
3587
3598
  }), Za = e.object({
3588
3599
  preview: It,
3589
3600
  preview_post_trial: g(It),
3590
- coupons: e.array(gn)
3601
+ coupons: e.array(bn)
3591
3602
  }), jt = e.object({
3592
3603
  status: e.literal("open"),
3593
3604
  token: e.string(),
3594
3605
  email: g(e.string()),
3595
- line_items: e.array(bn),
3606
+ line_items: e.array(wn),
3596
3607
  amount_subtotal_atom: e.number().int(),
3597
3608
  amount_total_atom: e.number().int(),
3598
3609
  brand: Va,
@@ -3633,7 +3644,7 @@ e.object({
3633
3644
  customer_email: e.string(),
3634
3645
  customer_zip_code: e.string(),
3635
3646
  customer_country: e.string(),
3636
- line_items: e.array(bn),
3647
+ line_items: e.array(wn),
3637
3648
  total_amount_atom: e.number().int(),
3638
3649
  cancel_at_end: e.boolean(),
3639
3650
  checkout_payment_method: Ce,
@@ -3921,7 +3932,7 @@ const cs = (t) => {
3921
3932
  const [r, n] = ae({
3922
3933
  apple_pay: Rt,
3923
3934
  google_pay: Rt
3924
- }), o = Cn(
3935
+ }), o = Sn(
3925
3936
  (i) => {
3926
3937
  n(i), t == null || t(i);
3927
3938
  },
@@ -3929,45 +3940,45 @@ const cs = (t) => {
3929
3940
  );
3930
3941
  return { paymentRequests: r, overridenOnPaymentRequestLoad: o };
3931
3942
  }, Mt = "op_ojs_form", gs = (t) => {
3932
- const [r, n] = ae(), [o, i] = ae(null), { paymentRequests: a, overridenOnPaymentRequestLoad: s } = ls(t.onPaymentRequestLoad), [c, l] = ae(!1), [u, d] = ae(null), [m, b] = ae({
3943
+ const [r, n] = ae(), [o, i] = ae(null), { paymentRequests: a, overridenOnPaymentRequestLoad: s } = ls(t.onPaymentRequestLoad), [c, l] = ae(!1), [u, d] = ae(null), [_, b] = ae({
3933
3944
  googlePay: Tt,
3934
3945
  applePay: Tt
3935
- }), _ = cs({
3946
+ }), m = cs({
3936
3947
  ...t,
3937
3948
  onPaymentRequestLoad: s,
3938
- onLoad: (f, w) => {
3949
+ onLoad: (h, w) => {
3939
3950
  var v;
3940
- l(!0), (v = t.onLoad) == null || v.call(t, f, w);
3951
+ l(!0), (v = t.onLoad) == null || v.call(t, h, w);
3941
3952
  }
3942
3953
  });
3943
3954
  if (We(() => {
3944
3955
  if (r) return;
3945
- const f = xe.getInstance() ?? new xe({
3956
+ const h = xe.getInstance() ?? new xe({
3946
3957
  checkoutSecureToken: t.checkoutSecureToken,
3947
3958
  formTarget: `#${Mt}`,
3948
3959
  baseUrl: t.baseUrl,
3949
3960
  customInitParams: t.customInitParams,
3950
- ..._
3961
+ ...m
3951
3962
  });
3952
- n(f);
3953
- const w = us(f);
3954
- return i(w), f.initFlows.stripeLink.publisher.subscribe((v) => {
3963
+ n(h);
3964
+ const w = us(h);
3965
+ return i(w), h.initFlows.stripeLink.publisher.subscribe((v) => {
3955
3966
  v.isSuccess && v.loadedValue.isAvailable && d(v.loadedValue.controller);
3956
- }), f.initFlows.airwallexGooglePay.publisher.subscribe((v) => {
3957
- v.isSuccess && v.loadedValue.isAvailable && b((P) => ({
3958
- applePay: P.applePay,
3967
+ }), h.initFlows.airwallexGooglePay.publisher.subscribe((v) => {
3968
+ v.isSuccess && v.loadedValue.isAvailable && b((E) => ({
3969
+ applePay: E.applePay,
3959
3970
  googlePay: v.loadedValue
3960
3971
  }));
3961
- }), f.initFlows.airwallexApplePay.publisher.subscribe((v) => {
3962
- v.isSuccess && v.loadedValue.isAvailable && b((P) => ({
3963
- googlePay: P.googlePay,
3972
+ }), h.initFlows.airwallexApplePay.publisher.subscribe((v) => {
3973
+ v.isSuccess && v.loadedValue.isAvailable && b((E) => ({
3974
+ googlePay: E.googlePay,
3964
3975
  applePay: {
3965
3976
  ...v.loadedValue,
3966
3977
  isLoading: !1
3967
3978
  }
3968
3979
  }));
3969
3980
  }), () => {
3970
- f.destroy();
3981
+ h.destroy();
3971
3982
  };
3972
3983
  }, []), !r)
3973
3984
  return /* @__PURE__ */ F(Ge, {});
@@ -3984,9 +3995,9 @@ const cs = (t) => {
3984
3995
  error: null
3985
3996
  },
3986
3997
  stripeLink: u,
3987
- airwallex: m
3998
+ airwallex: _
3988
3999
  };
3989
- return /* @__PURE__ */ F(Ge, { children: o ? /* @__PURE__ */ F(Dt.Provider, { value: o, children: /* @__PURE__ */ F("div", { id: Mt, className: t.className, children: t.children(y) }) }) : /* @__PURE__ */ F(Ge, {}) });
4000
+ return /* @__PURE__ */ F(Ge, { children: o ? /* @__PURE__ */ F(Nt.Provider, { value: o, children: /* @__PURE__ */ F("div", { id: Mt, className: t.className, children: t.children(y) }) }) : /* @__PURE__ */ F(Ge, {}) });
3990
4001
  }, us = (t) => ({
3991
4002
  formId: t.formId,
3992
4003
  formHeight: t.formProperties.height,
@@ -3995,16 +4006,16 @@ const cs = (t) => {
3995
4006
  registerIframe: t.registerIframe,
3996
4007
  baseUrl: t.baseUrl
3997
4008
  }), Ye = (t) => {
3998
- const { elementType: r, styles: n } = t, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = kn(), u = r.toLowerCase(), [d, m] = ae(!1), b = Sn(null), _ = Ke(() => n ? $a(n) : "", [n]), y = Ke(() => ({
4009
+ const { elementType: r, styles: n } = t, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = An(), u = r.toLowerCase(), [d, _] = ae(!1), b = Pn(null), m = Ke(() => n ? $a(n) : "", [n]), y = Ke(() => ({
3999
4010
  border: "none",
4000
4011
  width: "100%",
4001
4012
  height: a
4002
- }), [a]), f = Ke(() => {
4013
+ }), [a]), h = Ke(() => {
4003
4014
  if (!s || !i) return "";
4004
4015
  const w = new URLSearchParams();
4005
- return w.append("referer", i), w.append("styles", _), w.append("formId", o), w.append("secureToken", s), w.toString();
4006
- }, [_, o, i, s]);
4007
- return We(() => m(!0), []), We(() => {
4016
+ return w.append("referer", i), w.append("styles", m), w.append("formId", o), w.append("secureToken", s), w.toString();
4017
+ }, [m, o, i, s]);
4018
+ return We(() => _(!0), []), We(() => {
4008
4019
  !b.current || !d || c(r, b.current);
4009
4020
  }, [d]), s ? /* @__PURE__ */ F(
4010
4021
  "iframe",
@@ -4012,19 +4023,19 @@ const cs = (t) => {
4012
4023
  id: `ojs-${u}-element`,
4013
4024
  name: `${u}-element`,
4014
4025
  className: "ojs-iframe",
4015
- src: `${l}/app/v1/${u}-element/?${f}`,
4026
+ src: `${l}/app/v1/${u}-element/?${h}`,
4016
4027
  style: y,
4017
4028
  ref: b
4018
4029
  }
4019
4030
  ) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */ F("div", {}));
4020
- }, bs = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: he.CARD_CVC }), ws = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: he.CARD }), vs = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: he.CARD_EXPIRY }), Es = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: he.CARD_NUMBER });
4031
+ }, bs = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD_CVC }), ws = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD }), vs = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD_EXPIRY }), Es = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD_NUMBER });
4021
4032
  export {
4022
4033
  bs as CardCvcElement,
4023
4034
  ws as CardElement,
4024
4035
  vs as CardExpiryElement,
4025
4036
  Es as CardNumberElement,
4026
4037
  gs as ElementsForm,
4027
- yn as FieldName,
4028
- kn as useOpenPayElements
4038
+ hn as FieldName,
4039
+ An as useOpenPayElements
4029
4040
  };
4030
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBtZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBkdCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgenQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBZdCA9IHokMS5hcnJheSh6dCksIEt0ID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIEh0ID0geiQxLmFycmF5KEt0KSwgV3QgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIERlID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBXdFtyXSA/PyB0O1xufSwgWnQgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIEp0ID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gRGUodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7RGUoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgQnQgPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIFkgPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChadCh0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCByID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIFl0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gSnQocikgOiBIdC5zYWZlUGFyc2Uocikuc3VjY2VzcyA/IEJ0KHIpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIERlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgcmV0dXJuIHIgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIFF0ID0gKHQsIHIsIGUpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHIoLi4ubik7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgaSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBJID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pLCBiID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBSID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xudmFyIGQgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgdC5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIHQuRU1BSUwgPSBcImVtYWlsXCIsIHQuWklQX0NPREUgPSBcInppcENvZGVcIiwgdC5DSVRZID0gXCJjaXR5XCIsIHQuU1RBVEUgPSBcInN0YXRlXCIsIHQuQ09VTlRSWSA9IFwiY291bnRyeVwiLCB0LkFERFJFU1MgPSBcImFkZHJlc3NcIiwgdC5QSE9ORSA9IFwicGhvbmVcIiwgdC5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCB0KSkoZCB8fCB7fSk7XG5jb25zdCBwdCA9IHokMS5uYXRpdmVFbnVtKGQpO1xudmFyIG10ID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIHQpKShtdCB8fCB7fSk7XG5jb25zdCBmdCA9IHokMS5uYXRpdmVFbnVtKG10KSwgeXQgPSB6JDEudW5pb24oW3B0LCBmdF0pO1xudmFyIHJlID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRCA9IFwiY2FyZFwiLCB0LkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCB0KSkocmUgfHwge30pO1xuY29uc3QgWHQgPSB6JDEubmF0aXZlRW51bShyZSksIEVlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBSKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGVyID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IGIsXG4gIGV4cGlyeTogYixcbiAgY3ZjOiBiXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IGIsXG4gIGNvbG9yOiBiLFxuICBmb250RmFtaWx5OiBiLFxuICBmb250U2l6ZTogYixcbiAgZm9udFdlaWdodDogYixcbiAgbWFyZ2luOiBiLFxuICBwYWRkaW5nOiBiLFxuICBsZXR0ZXJTcGFjaW5nOiBiLFxuICBsaW5lSGVpZ2h0OiBiLFxuICBoaWRlSWNvbjogYlxufSk7XG5jb25zdCBqID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIHRyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgcnIgPSB6JDEub2JqZWN0KHsgdHlwZTogdHIgfSksIG5yID0gai5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSksIG9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IG5yLFxuICBlbGVtZW50VHlwZTogZnQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIGlyID0gai5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgc3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogaXIsXG4gIG1lc3NhZ2U6IEksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBhciA9IGouZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKSwgY3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogYXIsXG4gIGVsZW1lbnRUeXBlOiB5dCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIGxyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IElcbn0pLCB1ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChqLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBJLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBiLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoRWUpXG59KSwgZHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHByID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pLCBsZSA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IEksXG4gIGxhc3ROYW1lOiBJLFxuICBlbWFpbDogSSxcbiAgemlwQ29kZTogSSxcbiAgY291bnRyeTogSSxcbiAgcHJvbW90aW9uQ29kZTogYlxufSksIG1yID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogYixcbiAgbGFzdE5hbWU6IGIsXG4gIGVtYWlsOiBJLFxuICB6aXBDb2RlOiBJLFxuICBjb3VudHJ5OiBJLFxuICBwcm9tb3Rpb25Db2RlOiBiLFxuICBhZGRyZXNzOiBiLFxuICBjaXR5OiBiLFxuICBzdGF0ZTogYlxufSksIGZyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCB5ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBmcixcbiAgc2Vzc2lvbklkOiBJLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IGJcbn0pLmV4dGVuZChsZS5zaGFwZSksIGhyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgX3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSksIGdyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBycixcbiAgb3IsXG4gIHNyLFxuICBjcixcbiAgbHIsXG4gIHVyLFxuICB5cixcbiAgaHIsXG4gIF9yLFxuICBkcixcbiAgcHJcbl0pLCB3ciA9IHokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBncixcbiAgbm9uY2U6IEksXG4gIGZvcm1JZDogSSxcbiAgZWxlbWVudElkOiBJXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IElcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCB4ZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSksIGJyID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCB2ciA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoYnIpXG59KSwgRXIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMCkgfSksXG4gIHZyXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBFZSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbGUsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFIoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogRWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgTiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKE4gfHwge30pO1xuY29uc3QgU3IgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBDciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGh0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBSKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGtyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBQciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShlciksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBSKHhlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBSKHokMS5hcnJheShodCkpXG59KSwgQXIgPSAodCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaSA9IHB0LnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHJbaV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmIChyW2ldID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCByO1xufSwgSXIgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBPciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBSciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIFNlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIFllKCkgfHwgYXdhaXQgRHIoNTAwKTtcbiAgaWYgKCFZZSgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIFRyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IFNlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKHIpLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgTXIgPSBhc3luYyAodCwgciwgZSwgbiwgaSkgPT4ge1xuICBjb25zdCBzID0gYXdhaXQgU2UodCksIGEgPSBScltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIHMucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiByLFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBEciA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBzZXRUaW1lb3V0KHIsIHQpO1xufSksIFllID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIEZyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChyLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgbiksIHIobik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgbik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChuKSB7XG4gICAgZShuKTtcbiAgfVxufSksIExyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IG4gPSBhd2FpdCAoYXdhaXQgU2UodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiByLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChuLmVycm9yKVxuICAgIHRocm93IHIuY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke24uZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIHIuY29tcGxldGUoXCJzdWNjZXNzXCIpLCBuO1xufSwgTnIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBTZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gKGkgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGF0dXM7XG4gIGlmIChuID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyBuID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChzID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWVzc2FnZSkgPz8gKChjID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBqciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgb2UgPSAodCwgcikgPT4gQXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChpLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBzLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLmksIFthXTogcy52YWx1ZSB9IDogaTtcbn0sIHt9KSwgVXIgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB3ci5wYXJzZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIHQsIHIpLCByO1xuICB9XG59LCB4ciA9IGFzeW5jICh0KSA9PiB7XG4gIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8ICF0KSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IHsgdHlwZTogXCJwaW5nXCIgfSwgZSA9IGF3YWl0IHQuc2VuZChyKTtcbiAgICBpZiAoZSAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHIpLCAhMTtcbiAgfVxufSwgJHIgPSAodCwgcikgPT4gISF0ICYmIHIsIGcgPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSk7XG5jb25zdCBWciA9IHokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBfdCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogZyh6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogZyh6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogZyh6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IGcoeiQxLm51bWJlcigpKVxufSksIGd0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBnKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogZyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgR3IgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSwgcXIgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogZyhHcilcbn0pLCB1ZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogZyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCB6ciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBnKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KHpyKSxcbiAgdHJpYWxfc3RhcnQ6IGcoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBnKHokMS5zdHJpbmcoKSlcbn0pLCB3dCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgS3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheSh3dCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBIciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IF90XG59KSwgV3IgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoSHIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShLciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkod3QpXG59KSwgS2UgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFlyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShXcilcbn0pLCBidCA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBLZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBnKEtlKSxcbiAgY291cG9uczogeiQxLmFycmF5KF90KVxufSksIEhlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoZ3QpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogcXIsXG4gIHN1YnNfcHJldmlldzogZyhidCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KHVlKVxufSksIHZ0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoSGUuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChIZS5zaGFwZSlcbl0pLCBaciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBKciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW3Z0LCBaciwgSnJdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShndCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IGcoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFFyKTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgZW4gPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHRuID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShlbiksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBybiA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IGcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHRuLm9wdGlvbmFsKClcbn0pLmV4dGVuZChYci5zaGFwZSkuZXh0ZW5kKHJuLnNoYXBlKTtcbmNvbnN0IEV0ID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogZyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IG1yLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHVlXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogdWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3Qgbm4gPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogZyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBnKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBnKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IGcoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IGcoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IGcoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogZyh6JDEuYm9vbGVhbigpKVxufSk7XG5jb25zdCBvbiA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBnKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHNuID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBhbih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIGNuKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBsbiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIHVuID0gZnVuY3Rpb24odCkge1xuICBsbihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBhbihzLCBpLnByb3RvdHlwZSksIGNuKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBTdCBleHRlbmRzIHVuIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IFQgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAocG4obikpXG4gICAgdGhyb3cgbmV3IFN0KG4pO1xuICBpZiAoIWRuKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIGRuID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIHBuID0gKHQpID0+IFZyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBtbiA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIGJ0KSwgVyA9IGFzeW5jICh0KSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCB2dCksIENlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEV0KSwgZm4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIG5uKSwgeW4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIEV0KSwgSCA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIFByKSwgaG4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVChcbiAgdCxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiByIH0sXG4gIGtyXG4pLCBfbiA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBtbih0LCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLFxuICAgIHByb21vdGlvbl9jb2RlOiBlXG4gIH0pLCBpID0gbmV3IFNldChuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChpLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7aS5zaXplfWApO1xuICBjb25zdCBzID0gaS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgYSA9IHNuKG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IHMsXG4gICAgYW1vdW50QXRvbTogYVxuICB9O1xufSwga2UgPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBpZiAoZSlcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgbiA9IG4gfHwgdm9pZCAwO1xuICAgIGNvbnN0IGkgPSBhd2FpdCBfbih0LCByLCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBpLmFtb3VudEF0b20sIGN1cnJlbmN5OiBpLmN1cnJlbmN5IH07XG4gIH1cbn0sIGduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKHQuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKHQudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBUKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHIgfSwgRXIpXG4gICAgKVxuICApO1xufSwgV2UgPSBhc3luYyAodCwgcikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IHIgfSwgeGUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGUsIEpTT04uc3RyaW5naWZ5KGUpKSwgZTtcbiAgfVxufSwgd24gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogciB9LCBCciksIFBlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHIgfSwgeGUpLCBDdCA9IDFlMywgYm4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zb2xlLmxvZyhyKTtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IEN0LFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgVChuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgU3IpO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBpKSwgaTtcbn0sIHZuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInVwZGF0ZV9jaGVja291dF9jdXN0b21lclwiLCBwYXlsb2FkOiByIH0sIG9uKTtcbmZ1bmN0aW9uICRlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3Qgc2UgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBpID0gYXdhaXQgdChyKTtcbiAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGkucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFkoaSkpO1xuICB9XG59LCBBZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gUChcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICByZXR1cm4gbihlKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogWShlKSB9O1xuICB9XG59LCBQID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke21lLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7bWUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHttZS5yZWQuYm9sZChcIm9qcy9cIil9JHttZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IERpLCBlcnJfXzogRW4gfSA9IFAoXCJjb21tb25cIiksIFZlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgYWUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdC5maW5kKChuKSA9PiByLnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFlKVxuICAgIHRocm93IEVuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIHQpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHIucGFyc2UoZSk7XG59LCBTbiA9ICh0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHQuZW1haWwsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgemlwX2NvZGU6IHQuemlwQ29kZSxcbiAgICBjb3VudHJ5OiB0LmNvdW50cnlcbiAgfSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHQuZmlyc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB0Lmxhc3ROYW1lXG59KSwgeyBsb2dfXzoga3QsIGVycl9fOiBQdCB9ID0gUChcImNvbW1vbi1jY1wiKSwgY2UgPSAodCwgciwgZSkgPT4ge1xuICBpZiAoZSkge1xuICAgIGt0KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICBmb3IgKGNvbnN0IFtpLCBzXSBvZiBPYmplY3QuZW50cmllcyhlKSlcbiAgICAgIHRbaV0gfHwgKHRbaV0gPSBzKTtcbiAgfVxuICBjb25zdCBuID0gbGUuc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBuLmVycm9yLmZvcm1hdCgpLCBzID0gQXIoaSk7XG4gICAgZm9yIChjb25zdCBbYSwgY10gb2YgT2JqZWN0LmVudHJpZXMocykpXG4gICAgICByKGEsIGMsIGEpO1xuICAgIHRocm93IFB0KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBDbiA9ICh0LCByKSA9PiB7XG4gIGZvciAoY29uc3QgZSBvZiB0KVxuICAgIGlmIChlLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgZS5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBpID0geXQuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICBQdChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgcihzLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBrdChgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoZS5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgWmUgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogQywgZXJyX186IGtuIH0gPSBQKFwic3RyaXBlLWxpbmtcIiksIFBuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEFuID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEluID0gQWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBDKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbik7XG4gICAgQyhcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFcoaSksIGEgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBDKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBrZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB7IGVsZW1lbnRzOiB1LCBzdHJpcGU6IGwgfSA9IGF3YWl0IFRyKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgQyhcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgcCA9IHUuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIGYgPSAoKSA9PiB7XG4gICAgICBwLm1vdW50KGAjJHtaZX1gKTtcbiAgICB9LCBoID0gKCkgPT4ge1xuICAgICAgcC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IEMoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKEMoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIGYoKSksIHAub24oXCJjbGlja1wiLCBhc3luYyAobSkgPT4ge1xuICAgICAgaWYgKEMoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIEMoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG0ucmVzb2x2ZSgpO1xuICAgIH0pLCBwLm9uKFwiY29uZmlybVwiLCBhc3luYyAobSkgPT4ge1xuICAgICAgQyhcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgbSk7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgbC5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IHUsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogbS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHkuZXJyb3IgPyAoa24oXCJlcnJvclwiLCB5LmVycm9yKSwgci5nZXQub25DaGVja291dEVycm9yKHkuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKEMoXCJwYXltZW50TWV0aG9kXCIsIHkucGF5bWVudE1ldGhvZCksIEwuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogeS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogZixcbiAgICAgICAgZGlzbW91bnRCdXR0b246IGgsXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBUbihaZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBPbiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIEMoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBDKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBhID0gUm4oZSwgaS5zdHJpcGVQTSksIGMgPSBjZShhLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgQyhcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCB1ID0gYXdhaXQgQ2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGkuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1tkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1tkLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1tkLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgQyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBwID0gQW4ucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgZiA9IGF3YWl0IFcocyk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBDKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGggPSBhd2FpdCBIKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVmUoaCkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgQyhcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgaCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1tkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbZC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbZC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IGYubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGYuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShzLCBoKSB9O1xuICAgIH1cbiAgfVxuKSwgUm4gPSAodCwgcikgPT4ge1xuICB2YXIgYSwgYywgdSwgbCwgcDtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKGMgPSAoYSA9IHIuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbZC5GSVJTVF9OQU1FXSA9IGVbZC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkxBU1RfTkFNRV0gPSBlW2QuTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKCh1ID0gci5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogdS5lbWFpbCkgfHwgci5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoKGwgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogbC5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKChwID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHAuY291bnRyeSkgfHwgXCJVU1wiLCBDKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgVG4gPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgY29uc3QgZSA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7XG4gICAgbiA/IHIobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk7XG4gIH07XG4gIGUoKTtcbn0pLCBNbiA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWV7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIERuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgci5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtNbn1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt0fVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBuID0gZS5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbi5hcHBlbmRDaGlsZChyLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBzID0gbi5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLCB7IGhvc3Q6IGUsIGlmcmFtZTogaSwgY2FuY2VsQnV0dG9uOiBzIH07XG59O1xuZnVuY3Rpb24gRm4odCwgciwgZSkge1xuICBjb25zdCBuID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgYm4odCwgZSk7XG4gICAgICBzICYmIChjbGVhckludGVydmFsKGkpLCByKHMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG4oKTtcbiAgY29uc3QgaSA9IHNldEludGVydmFsKG4sIEN0KTtcbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBMbih7XG4gIGVsZW1lbnRzOiB0LFxuICBwb2xsaW5nSW50ZXJ2YWw6IHIsXG4gIHJlc29sdmU6IGVcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHIpLCB0Lmhvc3QucmVtb3ZlKCksIGUoeyBzdGF0dXM6IE4uQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gdC5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgdC5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gSWUodCkge1xuICBjb25zdCB7IHVybDogciwgYmFzZVVybDogZSB9ID0gdCwgbiA9IERuKHIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGkpID0+IHtcbiAgICBjb25zdCBzID0gKHUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBuLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBpKHUpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIGEgPSBGbihuLmlmcmFtZSwgcywgbmV3IFVSTChlKS5vcmlnaW4pLCBjID0gTG4oe1xuICAgICAgZWxlbWVudHM6IG4sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IGEsXG4gICAgICByZXNvbHZlOiBpXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgQXQgPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgSWUodCk7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gci5zdGF0dXMgIT09IE4uU1VDQ0VTUyAmJiAkZShyLnN0YXR1cyksIHtcbiAgICBocmVmOiByLmhyZWZcbiAgfTtcbn0sIE5uID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdy5vcGVuKHIsIFwiX2JsYW5rXCIpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiBlO1xufSwgam4gPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBpIH0gPSBQKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGEpID0+IHtcbiAgICBjb25zdCBjID0gTm4odCwgbiksIHUgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsID0gYXdhaXQgaG4ociwgZSk7XG4gICAgICAgIGlmIChsLnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh1KSwgYy5jbG9zZSgpLCBzKHsgaHJlZjogbC5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgaShZKGwpKSwgY2xlYXJJbnRlcnZhbCh1KSwgYShZKGwpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IFVuLCBlcnJfXzogSXQgfSA9IFAoXCJwb2NreXQtY2NcIiksIHhuID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgJG4gPSAodCkgPT4ge1xuICBjb25zdCByID0geG4uc2FmZVBhcnNlKHQpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBJdChuKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBPdCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gVW4oYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3J9XWApLCByO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgZSA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IEl0KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7WShyKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCBWbiA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBHbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSAkbihyKSwgbiA9IGF3YWl0IEF0KHsgdXJsOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBPdChuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogZVtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGVbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogcW4sIGVycl9fOiBHZSB9ID0gUChcImFpcndhbGxleC1jY1wiKSwgem4gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBZbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB6bi5zYWZlUGFyc2UodCk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IEdlKG4pLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIEtuID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIEhuID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBxbihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgR2UoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtZKHIpfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIFduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IFluKHIpLCBuID0gYXdhaXQgQXQoeyB1cmw6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogdCB9KSwgaSA9IEhuKG4uaHJlZiA/PyBcIlwiKSwgcyA9IGVbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChzICE9PSBpKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgdSA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke3N9KS5gO1xuICAgIHRocm93IEdlKHUpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGksXG4gICAgICBjb25zZW50X2lkOiBlW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiB3LCBlcnJfXzogSmUgfSA9IFAoXCJjb21tb24tY2NcIiksIHsgbG9nX186IEJlIH0gPSBQKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBabiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBsO1xuICAgIHcoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogciB9KTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgVyhzKTtcbiAgICB3KGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IGNlKGUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgdSA9IHtcbiAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge31cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICB3KGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGduKGkuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKENuKHAsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgdyhg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHthLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IHduKHMsIHUpO1xuICAgICAgICByZXR1cm4gdyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2YucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBmIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3KGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IFdlKHMsIHUpO1xuICAgICAgICByZXR1cm4gdyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogZiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIGlmIChwIGluc3RhbmNlb2YgU3QgJiYgcC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICB3KFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgdyhcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCBmID0gVm4ocC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKGYpIHtcbiAgICAgICAgICB3KFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IEUgPSBhd2FpdCBHbih0LmJhc2VVcmwsIHAucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgdS5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSBFO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGggPSBLbihwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoaCkge1xuICAgICAgICAgIHcoXCLilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgRSA9IGF3YWl0IFduKHQuYmFzZVVybCwgcC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICB1LmV4dHJhX21ldGFkYXRhLmFpcndhbGxleCA9IEU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IGZuKHMsIHUpO1xuICAgICAgICB3KFwi4pScIFBheW1lbnQgZmxvdyByZXN1bHQ6XCIsIG0pO1xuICAgICAgICBjb25zdCB5ID0gZiB8fCBoLCBfID0gKChsID0gcC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogbFtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pICE9PSBcInRydWVcIjtcbiAgICAgICAgeSA/IHcoXCLilJwgUHJlLXN0YXJ0IDNEUyBpcyBzdWNjZXNzZnVsLCBvdGhlciAzRFMgZmxvd3Mgd2lsbCBiZSBza2lwcGVkLlwiKSA6IF8gPyAodyhcIuKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3dcIiksIGF3YWl0IFhuKG0pKSA6ICh3KFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgUW4obSwgdC5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IHYgPSBtLmNjX3BtX2lkO1xuICAgICAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICB3KGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke3Z9XWApO1xuICAgICAgICAgIGNvbnN0IEUgPSBhd2FpdCBIKHMsIHtcbiAgICAgICAgICAgIHNlY3VyZV90b2tlbjogYS50b2tlbixcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiB2XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdyhcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBFKTtcbiAgICAgICAgICBjb25zdCBTID0gVmUoRSk7XG4gICAgICAgICAgcmV0dXJuIHcoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtTLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogUyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHcoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7XyA/IFwibGVnYWN5XCIgOiBcIm5ld1wifV1gKTtcbiAgICAgICAgICBjb25zdCBFID0gYXdhaXQgV2Uocywge1xuICAgICAgICAgICAgLi4udSxcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiB2LFxuICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogX1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB3KFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBFIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IEplKFwi4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFXCIpLCBKZShwKSwgcDtcbiAgICB9XG4gIH1cbiksIEpuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBJci5wYXJzZShyKTtcbn0sIEJuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBDci5wYXJzZShyKTtcbn0sIFFuID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IEJuKHQpO1xuICB3KGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7ZS5yZWRpcmVjdF91cmx9XWApO1xuICBjb25zdCB7IHN0YXR1czogbiB9ID0gYXdhaXQgSWUoeyB1cmw6IGUucmVkaXJlY3RfdXJsLCBiYXNlVXJsOiByIH0pO1xuICBpZiAodyhg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7bn1dYCksIG4gPT09IE4uQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAobiA9PT0gTi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xufSwgWG4gPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gSm4odCk7XG4gIEJlKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke3IuY2xpZW50X3NlY3JldC5zdWJzdHJpbmcoMCwgOCl9Li4uXWApLCBhd2FpdCBOcihyKSwgQmUoXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59LCB7IGxvZ19fOiBPLCBlcnJfXzogZW8gfSA9IFAoXCJzdHJpcGUtcHJcIiksIHRvID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBybyA9IEFlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0IH0pID0+IHtcbiAgICBPKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgciA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdG8pO1xuICAgIE8oXCJJbml0aWFsaXppbmcgU3RyaXBlIFBSIGZsb3cuLi5cIik7XG4gICAgY29uc3QgZSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgbiA9IGF3YWl0IFcoZSksIGkgPSBuLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBPKFwiR2V0dGluZyBpbml0aWFsIHByZXZpZXcgYW1vdW50XCIpO1xuICAgIGNvbnN0IHMgPSBhd2FpdCBrZShlLCBuLnRva2VuLCBpLCB2b2lkIDApLCBhID0gYXdhaXQgTXIoXG4gICAgICByLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIHMuYW1vdW50QXRvbSxcbiAgICAgIHMuY3VycmVuY3ksXG4gICAgICBpXG4gICAgKTtcbiAgICBPKFwiQ2hlY2tpbmcgaWYgY2FuIG1ha2UgcGF5bWVudFwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgYS5jYW5NYWtlUGF5bWVudCgpO1xuICAgIHJldHVybiBjID09PSBudWxsID8gKGVvKFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIgfSkgOiAoTyhcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBjKSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgcHI6IGEsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHtcbiAgICAgICAgYXBwbGVQYXk6IGMuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogYy5nb29nbGVQYXlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuKSwgbm8gPSBzZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpLFxuICAgIGluaXRSZXN1bHQ6IHNcbiAgfSkgPT4ge1xuICAgIGlmIChPKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgaS5wcm92aWRlciAhPT0gci5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7aS5wcm92aWRlcn0sIGdvdCAke3IucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgYSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IHMucHI7XG4gICAgaWYgKGkgIT0gbnVsbCAmJiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHkgPSBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBPKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCB5KSwgaW8oYywgeS5hbW91bnQsIHkucGVuZGluZywgeS5zdHJpcGVBcHBsZVBheSk7XG4gICAgfVxuICAgIE8oXCJTaG93aW5nIFBSIGRpYWxvZy4uLlwiKSwgYy5zaG93KCk7XG4gICAgY29uc3QgdSA9IGF3YWl0IEZyKGMpO1xuICAgIE8oXCJTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6XCIsIHUpLCBPKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBsID0gb28oZSwgdSksIHAgPSBjZShsLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgTyhcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIHApO1xuICAgIGNvbnN0IGYgPSBhd2FpdCB5bihhLCB7XG4gICAgICBmaWVsZHM6IHAsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHJcbiAgICB9KSwgaCA9IHNvKGYpO1xuICAgIE8oXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBMcihoLCB1KTtcbiAgICBjb25zdCBtID0gYXdhaXQgVyhhKTtcbiAgICBpZiAobS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIE8oXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgSChhLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogbS50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVmUoeSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgTyhcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCB5ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IG0udG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiByLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHBbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBwW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IHBbZC5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBwW2QuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBwW2QuQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBwW2QuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBtLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBtLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHJcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgUGUoYSwgeSkgfTtcbiAgICB9XG4gIH1cbiksIG9vID0gKHQsIHIpID0+IHtcbiAgdmFyIHUsIGwsIHAsIGY7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgW24sIC4uLmldID0gKChsID0gKHUgPSByLnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHUudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogbC5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGkuam9pbihcIiBcIikgfHwgdm9pZCAwLCBhID0gKGYgPSAocCA9IHIucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IHAuYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogZi5hZGRyZXNzLCBjID0gci5zaGlwcGluZ0FkZHJlc3M7XG4gIHJldHVybiBlW2QuRklSU1RfTkFNRV0gPSBlW2QuRklSU1RfTkFNRV0gfHwgbiB8fCBcIl9PUF9VTktOT1dOXCIsIGVbZC5MQVNUX05BTUVdID0gZVtkLkxBU1RfTkFNRV0gfHwgcyB8fCBcIl9PUF9VTktOT1dOXCIsIGVbZC5FTUFJTF0gPSBlW2QuRU1BSUxdIHx8IHIucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbZC5aSVBfQ09ERV0gPSBlW2QuWklQX0NPREVdIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIGVbZC5DT1VOVFJZXSA9IGVbZC5DT1VOVFJZXSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCIsIE8oXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBpbyA9ICh0LCByLCBlLCBuKSA9PiB7XG4gIHQudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiByLmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogZVxuICAgIH0sXG4gICAgY3VycmVuY3k6IHIuY3VycmVuY3ksXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCBzbyA9ICh0KSA9PiB7XG4gIGlmICh0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3QucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBPci5wYXJzZSh0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCB7IGxvZ19fOiBWLCBlcnJfXzogUWUgfSA9IFAoXCJwb2NreXQtcGF5cGFsXCIpLCBhbyA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIGNvID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKSwgbG8gPSBzZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICBWKFwiUnVubmluZyBQb2NreXQgUGF5cGFsIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYSA9IGF3YWl0IFcocyk7XG4gICAgVihcIlZlcmlmeWluZyBDUE0uLi5cIik7XG4gICAgY29uc3QgYyA9IGFvLnBhcnNlKHIpO1xuICAgIFYoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgIGNvbnN0IHUgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLnNldHRpbmdzLCBsID0gY2UoXG4gICAgICBlLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICB1ID09IG51bGwgPyB2b2lkIDAgOiB1LmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICksIHAgPSBTbihsKTtcbiAgICBWKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHthLm1vZGV9YCk7XG4gICAgY29uc3QgZiA9IGEubW9kZSAhPT0gXCJzZXR1cFwiLCBoID0gYXdhaXQgQ2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBmLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBmID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBhLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogYS5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIC4uLnBcbiAgICB9KTtcbiAgICBpZiAoVihcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBoKSwgIWguY2hlY2tvdXRfYXR0ZW1wdF9pZClcbiAgICAgIHRocm93IFFlKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVzcG9uc2U6XCIsIGgpLCBuZXcgRXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY2hlY2tvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBjb25zdCBtID0gY28ucGFyc2UoaC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdO1xuICAgIFYoXCJPcGVuaW5nIHBheXBhbCBpZnJhbWUuLi5cIik7XG4gICAgY29uc3QgeSA9IGF3YWl0IGpuKFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIHMsXG4gICAgICBtLnZlcmlmeV90b2tlbixcbiAgICAgIG0ucGF5cGFsX2lmcmFtZV91cmxcbiAgICApO1xuICAgIFYoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgeSk7XG4gICAgY29uc3QgXyA9IE90KHkuaHJlZik7XG4gICAgVihgQ29uZmlybWluZyBwYXltZW50IGZsb3cgdXNpbmcgdmF1bHQgSUQgJHtffWApO1xuICAgIGNvbnN0IHYgPSBhd2FpdCBIKHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYS50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiBfLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogZiA/IGguY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmIChWKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIHYpLCBhLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IHYucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCF2LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgUWUoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCB2KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogdi5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksIFJ0ID0gKHtcbiAgZ2F0ZXdheTogdCxcbiAgZ2F0ZXdheU1lcmNoYW50SWQ6IHIsXG4gIG1lcmNoYW50TmFtZTogZSxcbiAgbWVyY2hhbnRJZDogbixcbiAgaW5pdGlhbFByZXZpZXc6IGksXG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbn0pID0+IHtcbiAgdmFyIHAsIGY7XG4gIGNvbnN0IGEgPSAoKHAgPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHAuYW1vdW50QXRvbSkgPz8gKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYW1vdW50QXRvbSkgPz8gMCwgYyA9IE1hdGgubWF4KGEgLyAxMDAsIDApLCB1ID0gKCgoZiA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogZi5jdXJyZW5jeSkgPz8gKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuY3VycmVuY3kpID8/IFwiVVNEXCIpLnRvVXBwZXJDYXNlKCksIGwgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiAhMCxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1BhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJGVUxMXCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbG93Q3JlZGl0Q2FyZHM6ICEwLFxuICAgICAgICAgIGFsbG93UHJlcGFpZENhcmRzOiAhMFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5OiB0LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6ICEwLFxuICAgIG1lcmNoYW50SW5mbzoge1xuICAgICAgLy8gVE9ETzogYXNhcCBmb3IgcHJvZCAtIGFpcndhbGxleCBoYXMgbm8gZG9jcyBmb3IgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIC8vIEJDUjJETjRUWDdJM0ZSUkpcbiAgICAgIG1lcmNoYW50TmFtZTogZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogcyAhPSBudWxsICYmIHMucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBjLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBzICE9IG51bGwgJiYgcy5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHsgLi4ubCwgLi4ucy5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogbDtcbn0sIHVvID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsIGUuYXN5bmMgPSAhMCwgZS5vbmxvYWQgPSAoKSA9PiB0KCksIGUub25lcnJvciA9ICgpID0+IHIobmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgR29vZ2xlIFBheSBTREtcIikpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xufSksIHBvID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGUpID0+IGUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCIpO1xuICByZXR1cm4gciA/IGh0LnBhcnNlKHIpIDogbnVsbDtcbn0sIG1vID0gKHQsIHIpID0+IHtcbiAgdmFyIGksIHMsIGEsIGM7XG4gIGNvbnN0IGUgPSB7IC4uLnQgfSwgbiA9IChzID0gKGkgPSByLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaS5pbmZvKSA9PSBudWxsID8gdm9pZCAwIDogcy5iaWxsaW5nQWRkcmVzcztcbiAgaWYgKG4pIHtcbiAgICBjb25zdCBbdSwgLi4ubF0gPSAoKGMgPSAoYSA9IG4ubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcCA9IGwuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICAgIGVbZC5FTUFJTF0gPSBlW2QuRU1BSUxdIHx8IHIuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgbi5jb3VudHJ5Q29kZSB8fCBcIlVTXCIsIGVbZC5BRERSRVNTXSA9IGVbZC5BRERSRVNTXSB8fCBuLmFkZHJlc3MxIHx8IFwiXCIsIGVbZC5DSVRZXSA9IGVbZC5DSVRZXSB8fCBuLmxvY2FsaXR5IHx8IFwiXCIsIGVbZC5aSVBfQ09ERV0gPSBlW2QuWklQX0NPREVdIHx8IG4ucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCIsIGVbZC5TVEFURV0gPSBlW2QuU1RBVEVdIHx8IG4uYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCIsIGVbZC5GSVJTVF9OQU1FXSA9IGVbZC5GSVJTVF9OQU1FXSB8fCB1IHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkxBU1RfTkFNRV0gPSBlW2QuTEFTVF9OQU1FXSB8fCBwIHx8IFwiX09QX1VOS05PV05cIjtcbiAgfVxuICByZXR1cm4gZTtcbn0sIHsgbG9nX186IE0sIGVycl9fOiB0ZSB9ID0gUChcImF3eC1nb29nbGUtcGF5XCIpO1xubGV0IFJlID0gbnVsbDtcbmNvbnN0IFR0ID0gKHQpID0+IHQgPT09IGR0IHx8IHQgPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCBNdCA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBUdCh0KTtcbiAgcmV0dXJuIFJlID09PSBudWxsICYmIChSZSA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IGUsXG4gICAgbWVyY2hhbnRJbmZvOiByLm1lcmNoYW50SW5mb1xuICB9KSksIFJlO1xufSwgRHQgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIGZvID0gQWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIHZhciBhLCBjO1xuICAgIGNvbnN0IGUgPSBhZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIER0KTtcbiAgICBpZiAoIWUpXG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIE0oXCJHb29nbGUgUGF5IENQTVwiLCBlKTtcbiAgICBjb25zdCBuID0gZS5tZXRhZGF0YTtcbiAgICBpZiAoIW4ucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICByZXR1cm4gdGUoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgaWYgKE0oXCJMb2FkaW5nIEdvb2dsZSBQYXkgU0RLLi4uXCIpLCBhd2FpdCB1bygpLCAhKChjID0gKGEgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogYS5wYXltZW50cykgIT0gbnVsbCAmJiBjLmFwaSkpXG4gICAgICByZXR1cm4gdGUoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgaWYgKFR0KHQuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFuLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gdGUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgTShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdSA9IFJ0KHtcbiAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IG4ucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogbi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBuLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHZvaWQgMFxuICAgICAgfSksIHsgcmVzdWx0OiBsIH0gPSBhd2FpdCBNdCh0LmJhc2VVcmwsIHUpLmlzUmVhZHlUb1BheShcbiAgICAgICAgdVxuICAgICAgKTtcbiAgICAgIGlmICghbClcbiAgICAgICAgcmV0dXJuIE0oXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgICB9IH07XG4gICAgfSBjYXRjaCAodSkge1xuICAgICAgcmV0dXJuIHRlKFwiRXJyb3IgY2hlY2tpbmcgR29vZ2xlIFBheSBhdmFpbGFiaWxpdHlcIiwgdSksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgTC5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGUsXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBvZSh0LmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogdSA/PyB7fVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgdGUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgbCksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigobCA9PSBudWxsID8gdm9pZCAwIDogbC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCB5byA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBmLCBoLCBtLCB5LCBfLCB2LCBFO1xuICAgIE0oXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRHQpLCBhID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgVyhhKSwgdSA9IHMubWV0YWRhdGE7XG4gICAgaWYgKCF1LnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICBjb25zdCBsID0gUnQoe1xuICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgIGdhdGV3YXlNZXJjaGFudElkOiB1LnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgbWVyY2hhbnROYW1lOiB1LnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICBtZXJjaGFudElkOiB1Lmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBhd2FpdCBrZShcbiAgICAgICAgYSxcbiAgICAgICAgYy50b2tlbixcbiAgICAgICAgYy5tb2RlID09PSBcInNldHVwXCIsXG4gICAgICAgIHZvaWQgMFxuICAgICAgKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgIH0pLCBwID0gTXQodC5iYXNlVXJsLCBsKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgUyA9IGF3YWl0IHAubG9hZFBheW1lbnREYXRhKGwpO1xuICAgICAgTShcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIFMpO1xuICAgICAgY29uc3QgUSA9IG1vKGUsIFMpLCBBID0gY2UoXG4gICAgICAgIFEsXG4gICAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBpID09IG51bGwgPyB2b2lkIDAgOiBpLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKSwgWCA9IChoID0gKGYgPSBTLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaC50b2tlbjtcbiAgICAgIGlmICghWClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcGF5bWVudCB0b2tlbiByZWNlaXZlZCBmcm9tIEdvb2dsZSBQYXlcIik7XG4gICAgICBjb25zdCBwZSA9IGF3YWl0IENlKGEsIHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogQVtkLkVNQUlMXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IEFbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogQVtkLkxBU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgICAgcG9zdGFsX2NvZGU6IEFbZC5aSVBfQ09ERV0sXG4gICAgICAgICAgY291bnRyeV9jb2RlOiBBW2QuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSksIGVlID0gcG8ocGUpO1xuICAgICAgTShcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIGVlKTtcbiAgICAgIGNvbnN0ICQgPSBhd2FpdCBIKGEsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlZSA9PSBudWxsID8gdm9pZCAwIDogZWUuY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogWFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBNKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgJCk7XG4gICAgICBsZXQgRCA9ICh5ID0gKG0gPSAkLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IG1bMF0pID09IG51bGwgPyB2b2lkIDAgOiB5LmlkO1xuICAgICAgY29uc3QgSiA9IChfID0gJC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBfLmZpbmQoXG4gICAgICAgIChVKSA9PiBVLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKEogJiYgSi5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgTShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIEopO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogVSB9ID0gYXdhaXQgSWUoe1xuICAgICAgICAgIHVybDogSi5yZWRpcmVjdF91cmwsXG4gICAgICAgICAgYmFzZVVybDogdC5iYXNlVXJsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoTShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7VX1dYCksIFUgPT09IE4uQ0FOQ0VMTEVEKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICAgICAgICBpZiAoVSA9PT0gTi5GQUlMVVJFKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKEogJiYgIUQpIHtcbiAgICAgICAgY29uc3QgVSA9IGF3YWl0IEgoYSwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogSi50aGVpcl9wbV9pZCxcbiAgICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogSi5jb25zZW50X2lkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgTShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIFUpLCBEID0gKEUgPSAodiA9IFUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdlswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQ7XG4gICAgICB9XG4gICAgICBpZiAoIUQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgaWYgKGMubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogeyBwYXltZW50X21ldGhvZF9pZDogRCB9IH07XG4gICAgICB7XG4gICAgICAgIE0oXCJTdGFydGluZyBvbmUtdGltZSBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgICAgIGNvbnN0IFUgPSB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHIucHJvdmlkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6ICEwLFxuICAgICAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IEQsXG4gICAgICAgICAgbGluZV9pdGVtczogYy5saW5lX2l0ZW1zLFxuICAgICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBjLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICAgIGN1c3RvbWVyX2VtYWlsOiBBW2QuRU1BSUxdLFxuICAgICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBBW2QuWklQX0NPREVdLFxuICAgICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IEFbZC5DT1VOVFJZXSxcbiAgICAgICAgICBwcm9tb3Rpb25fY29kZTogQVtkLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBBW2QuRklSU1RfTkFNRV0sXG4gICAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBBW2QuTEFTVF9OQU1FXVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgUGUoYSwgVSkgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChTKSB7XG4gICAgICB0aHJvdyB0ZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBTKSwgbmV3IEVycm9yKChTID09IG51bGwgPyB2b2lkIDAgOiBTLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIGhvID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLCBlLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIiwgZS5hc3luYyA9ICEwLCBlLm9ubG9hZCA9ICgpID0+IHQoKSwgZS5vbmVycm9yID0gKCkgPT4gcihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIpKSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTtcbn0pLCBfbyA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSByLnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIG4gPSByLmJpbGxpbmdDb250YWN0LCBpID0gci5zaGlwcGluZ0NvbnRhY3QsIHMgPSB7IC4uLnQgfTtcbiAgcmV0dXJuIChlIHx8IG4gfHwgaSkgJiYgKHNbZC5FTUFJTF0gPSBzW2QuRU1BSUxdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmVtYWlsQWRkcmVzcykgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZW1haWxBZGRyZXNzKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5lbWFpbEFkZHJlc3MpIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCIsIHNbZC5DT1VOVFJZXSA9IHNbZC5DT1VOVFJZXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5jb3VudHJ5Q29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uY291bnRyeUNvZGUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmNvdW50cnlDb2RlKSB8fCBcIlVTXCIsIHNbZC5aSVBfQ09ERV0gPSBzW2QuWklQX0NPREVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLnBvc3RhbENvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLnBvc3RhbENvZGUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgc1tkLkZJUlNUX05BTUVdID0gc1tkLkZJUlNUX05BTUVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmdpdmVuTmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZ2l2ZW5OYW1lKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5naXZlbk5hbWUpIHx8IFwiX09QX1VOS05PV05cIiwgc1tkLkxBU1RfTkFNRV0gPSBzW2QuTEFTVF9OQU1FXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5mYW1pbHlOYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5mYW1pbHlOYW1lKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5mYW1pbHlOYW1lKSB8fCBcIl9PUF9VTktOT1dOXCIpLCBzO1xufSwgZ28gPSB6JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pLCB3byA9ICh0KSA9PiBnby5zYWZlUGFyc2UodCkuZGF0YSwgYm8gPSAodCkgPT4ge1xuICBjb25zdCByID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgXCJtZXNzYWdlXCIsXG4gICAgKGUpID0+IHtcbiAgICAgIHZhciBpO1xuICAgICAgY29uc3QgbiA9IHdvKGUpO1xuICAgICAgKChpID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaS5tZXNzYWdlVHlwZSkgPT09IFwid2luZG93Y2xvc2luZ1wiICYmICh0KCksIHIuYWJvcnQoKSk7XG4gICAgfSxcbiAgICB7XG4gICAgICBzaWduYWw6IHIuc2lnbmFsXG4gICAgfVxuICApLCB7XG4gICAgY2xlYW51cENhbmNlbExpc3RlbmVyOiAoKSA9PiByLmFib3J0KClcbiAgfTtcbn0sIHsgbG9nX186IGhlIH0gPSBQKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIHZvKHQsIHIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IENlKHIuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogci5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHIubm9uQ2RlRm9ybUlucHV0c1tkLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiByLm5vbkNkZUZvcm1JbnB1dHNbZC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHIubm9uQ2RlRm9ybUlucHV0c1tkLkxBU1RfTkFNRV0sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiB0LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogci5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdLCBpID0gbi5wYXltZW50X3Nlc3Npb24sIHMgPSBuLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIGlmICghcylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgcmV0dXJuIHIuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihpKSwgcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IHIuc2Vzc2lvbi5hYm9ydCgpLCBlO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBFbyh0LCByKSB7XG4gIHZhciBpLCBzO1xuICBpZiAoIXQucmVkaXJlY3RfdXJsKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgaGUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCB0KTtcbiAgY29uc3QgeyBzdGF0dXM6IGUgfSA9IGF3YWl0IEllKHtcbiAgICB1cmw6IHQucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IHIuYmFzZVVybFxuICB9KTtcbiAgaWYgKGhlKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtlfV1gKSwgZSA9PT0gTi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChlID09PSBOLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGNvbnN0IG4gPSBhd2FpdCBIKHIuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogci5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IHQudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogdC5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaGUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBuKSwgKHMgPSAoaSA9IG4ucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuaWQ7XG59XG5hc3luYyBmdW5jdGlvbiBTbyh0LCByLCBlKSB7XG4gIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShlLmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IGUucHJlZmlsbC50b2tlbixcbiAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICBwcm92aWRlcl90eXBlOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH0sXG4gICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogITAsXG4gICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogdCxcbiAgICBsaW5lX2l0ZW1zOiBlLnByZWZpbGwubGluZV9pdGVtcyxcbiAgICB0b3RhbF9hbW91bnRfYXRvbTogZS5wcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBjdXN0b21lcl9lbWFpbDogcltkLkVNQUlMXSxcbiAgICBjdXN0b21lcl96aXBfY29kZTogcltkLlpJUF9DT0RFXSxcbiAgICBjdXN0b21lcl9jb3VudHJ5OiByW2QuQ09VTlRSWV0sXG4gICAgcHJvbW90aW9uX2NvZGU6IHJbZC5QUk9NT1RJT05fQ09ERV1cbiAgfSkgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIENvKHQsIHIsIGUpIHtcbiAgdmFyIG4sIGksIHM7XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IHQucGF5bWVudCwgYyA9IF9vKHIubm9uQ2RlRm9ybUlucHV0cywgYSksIHUgPSBjZShcbiAgICAgIGMsXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgci5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApO1xuICAgIGF3YWl0IHZuKHIuY29ubmVjdGlvbiwge1xuICAgICAgZW1haWw6IHVbZC5FTUFJTF0sXG4gICAgICBmaXJzdF9uYW1lOiB1W2QuRklSU1RfTkFNRV0sXG4gICAgICBsYXN0X25hbWU6IHVbZC5MQVNUX05BTUVdLFxuICAgICAgemlwX2NvZGU6IHVbZC5aSVBfQ09ERV0sXG4gICAgICBjb3VudHJ5OiB1W2QuQ09VTlRSWV0sXG4gICAgICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiAhMFxuICAgIH0pO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBIKHIuY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBlLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShhLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGhlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgbGV0IHAgPSAoaSA9IChuID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBuWzBdKSA9PSBudWxsID8gdm9pZCAwIDogaS5pZDtcbiAgICBjb25zdCBmID0gKHMgPSBsLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IHMuZmluZChcbiAgICAgIChtKSA9PiBtLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAoZiAhPSBudWxsICYmIGYucmVkaXJlY3RfdXJsICYmIGYuY29uc2VudF9pZCAmJiBmLnRoZWlyX3BtX2lkICYmIChwID0gYXdhaXQgRW8oZiwgcikpLCAhcClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGggPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIHIuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoaCksIHIuaXNTZXR1cE1vZGUgPyB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB7IHBheW1lbnRfbWV0aG9kX2lkOiBwIH0gfSA6IGF3YWl0IFNvKHAsIHUsIHIpO1xuICB9IGNhdGNoIChhKSB7XG4gICAgY29uc3QgYyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICB0aHJvdyByLnNlc3Npb24uY29tcGxldGVQYXltZW50KGMpLCBhO1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiB6LCBlcnJfXzogRmUgfSA9IFAoXCJhd3gtYXBwbGUtcGF5XCIpLCBGdCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwga28gPSBBZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSA9PiB7XG4gICAgY29uc3QgZSA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRnQpO1xuICAgIGlmICghZSlcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgeihcIkxvYWRpbmcgQXBwbGUgUGF5IFNESy4uLlwiKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgaG8oKSwgeihcIkFwcGxlIFBheSBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICB9IGNhdGNoIChwKSB7XG4gICAgICByZXR1cm4gRmUoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIsIHApLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHooXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgaWYgKHooXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHooXCJObyBhY3RpdmUgY2FyZHMgYXZhaWxhYmxlIGZvciBBcHBsZSBQYXlcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgVyhpKSwgYSA9IHMubW9kZSA9PT0gXCJzZXR1cFwiLCBjID0gYXdhaXQga2UoaSwgcy50b2tlbiwgYSwgdm9pZCAwKSwgdSA9IGUubWV0YWRhdGE7XG4gICAgaWYgKHooXCJwcm9jZXNzb3JBY2NvdW50XCIsIHUpLCAhdS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jIChwKSA9PiB7XG4gICAgICAgIHZhciBmO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IEwuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGUsXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBvZSh0LmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogcixcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgICBpc1NldHVwTW9kZTogYSxcbiAgICAgICAgICAgICAgcHJlZmlsbDogcyxcbiAgICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6ICgoZiA9IHAgPT0gbnVsbCA/IHZvaWQgMCA6IHAub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IGYuYW1vdW50KSA/PyBjLFxuICAgICAgICAgICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBwID09IG51bGwgPyB2b2lkIDAgOiBwLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIEZlKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoaCA9PSBudWxsID8gdm9pZCAwIDogaC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBQbyA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBTLCBRO1xuICAgIGNvbnN0IHMgPSBhZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEZ0KSwgeyBpbml0aWFsUHJldmlldzogYSwgaXNTZXR1cE1vZGU6IGMsIHByZWZpbGw6IHUsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGwgfSA9IG4sIHAgPSAoKChTID0gbCA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBTLmN1cnJlbmN5KSA/PyBhLmN1cnJlbmN5ID8/IFwiVVNEXCIpLnRvVXBwZXJDYXNlKCksIGggPSAoKCgoUSA9IGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogUS5hbW91bnRBdG9tKSA/PyBhLmFtb3VudEF0b20gPz8gMCkgLyAxMDApLnRvRml4ZWQoMiksIG0gPSB7XG4gICAgICBsYWJlbDogKGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwubGFiZWwpID8/IFwiVG90YWxcIixcbiAgICAgIHR5cGU6IGwgIT0gbnVsbCAmJiBsLnBlbmRpbmcgPyBcInBlbmRpbmdcIiA6IFwiZmluYWxcIixcbiAgICAgIGFtb3VudDogaFxuICAgIH0sIHkgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiBwLFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiXSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICAgIFwic3VwcG9ydHMzRFNcIixcbiAgICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0VNVlwiXG4gICAgICBdLFxuICAgICAgdG90YWw6IG0sXG4gICAgICAuLi4obCA9PSBudWxsID8gdm9pZCAwIDogbC5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSA/PyB7fVxuICAgIH07XG4gICAgeihcIlBheW1lbnQgUmVxdWVzdFwiLCB5KTtcbiAgICBjb25zdCBfID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KTtcbiAgICB6KFwiQXBwbGVQYXlTZXNzaW9uXCIsIF8pO1xuICAgIGNvbnN0IHYgPSB7XG4gICAgICBzZXNzaW9uOiBfLFxuICAgICAgY29ubmVjdGlvbjogdC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IHMubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGMsXG4gICAgICBiYXNlVXJsOiB0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBpLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgbGV0IEU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChBLCBYKSA9PiB7XG4gICAgICBjb25zdCBwZSA9ICgpID0+IHtcbiAgICAgICAgeihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIFgobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCB7IGNsZWFudXBDYW5jZWxMaXN0ZW5lcjogZWUgfSA9IGJvKHBlKTtcbiAgICAgIF8ub25jYW5jZWwgPSBwZSwgXy5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoJCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEUgPSBhd2FpdCB2bygkLCB2KTtcbiAgICAgICAgfSBjYXRjaCAoRCkge1xuICAgICAgICAgIFgoRCk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8ub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0ICQgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4ubSB9XG4gICAgICAgIH07XG4gICAgICAgIF8uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKCQpO1xuICAgICAgfSwgXy5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKCQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBEID0gYXdhaXQgQ28oJCwgdiwgRSk7XG4gICAgICAgICAgZWUoKSwgQShEKTtcbiAgICAgICAgfSBjYXRjaCAoRCkge1xuICAgICAgICAgIFgoRCk7XG4gICAgICAgIH1cbiAgICAgIH0sIF8uYmVnaW4oKTtcbiAgICB9KS5jYXRjaCgoQSkgPT4ge1xuICAgICAgdGhyb3cgRmUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBBKSwgQTtcbiAgICB9KTtcbiAgfVxuKSwgTGUgPSAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gdC5maWx0ZXIoKGkpID0+IHtcbiAgICBjb25zdCBzID0gZSA9PT0gdm9pZCAwID8gITAgOiBpLnByb2Nlc3Nvcl9uYW1lID09PSBlLCBhID0gaS5wcm92aWRlciA9PT0gcjtcbiAgICByZXR1cm4gcyAmJiBhO1xuICB9KTtcbiAgaWYgKG4ubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICBpZiAobi5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3J9JyBhbmQgcHJvY2Vzc29yICcke2V9J2ApO1xuICByZXR1cm4gblswXTtcbn0sIEwgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogWm5cbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogcm8sXG4gICAgcnVuOiBub1xuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogSW4sXG4gICAgcnVuOiBPblxuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgcnVuOiBsb1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogZm8sXG4gICAgcnVuOiB5b1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IGtvLFxuICAgIHJ1bjogUG9cbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG52YXIgTmUgPSBmdW5jdGlvbih0LCByKSB7XG4gIHJldHVybiBOZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBlLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24oZSwgbikge1xuICAgIGZvciAodmFyIGkgaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIGkpICYmIChlW2ldID0gbltpXSk7XG4gIH0sIE5lKHQsIHIpO1xufTtcbmZ1bmN0aW9uIFoodCwgcikge1xuICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcocikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBOZSh0LCByKTtcbiAgZnVuY3Rpb24gZSgpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgfVxuICB0LnByb3RvdHlwZSA9IHIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHIpIDogKGUucHJvdG90eXBlID0gci5wcm90b3R5cGUsIG5ldyBlKCkpO1xufVxuZnVuY3Rpb24gQW8odCwgciwgZSwgbikge1xuICBmdW5jdGlvbiBpKHMpIHtcbiAgICByZXR1cm4gcyBpbnN0YW5jZW9mIGUgPyBzIDogbmV3IGUoZnVuY3Rpb24oYSkge1xuICAgICAgYShzKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChlIHx8IChlID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHMsIGEpIHtcbiAgICBmdW5jdGlvbiBjKHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGwobi5uZXh0KHApKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgYShmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsKG4udGhyb3cocCkpO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBhKGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKHApIHtcbiAgICAgIHAuZG9uZSA/IHMocC52YWx1ZSkgOiBpKHAudmFsdWUpLnRoZW4oYywgdSk7XG4gICAgfVxuICAgIGwoKG4gPSBuLmFwcGx5KHQsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBMdCh0LCByKSB7XG4gIHZhciBlID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHNbMF0gJiAxKSB0aHJvdyBzWzFdO1xuICAgIHJldHVybiBzWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBpLCBzLCBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gYS5uZXh0ID0gYygwKSwgYS50aHJvdyA9IGMoMSksIGEucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGFbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgYTtcbiAgZnVuY3Rpb24gYyhsKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiB1KFtsLCBwXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiB1KGwpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGEgJiYgKGEgPSAwLCBsWzBdICYmIChlID0gMCkpLCBlOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIGkgJiYgKHMgPSBsWzBdICYgMiA/IGkucmV0dXJuIDogbFswXSA/IGkudGhyb3cgfHwgKChzID0gaS5yZXR1cm4pICYmIHMuY2FsbChpKSwgMCkgOiBpLm5leHQpICYmICEocyA9IHMuY2FsbChpLCBsWzFdKSkuZG9uZSkgcmV0dXJuIHM7XG4gICAgICBzd2l0Y2ggKGkgPSAwLCBzICYmIChsID0gW2xbMF0gJiAyLCBzLnZhbHVlXSksIGxbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcyA9IGw7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gZS5sYWJlbCsrLCB7IHZhbHVlOiBsWzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgZS5sYWJlbCsrLCBpID0gbFsxXSwgbCA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwgPSBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzID0gZS50cnlzLCAhKHMgPSBzLmxlbmd0aCA+IDAgJiYgc1tzLmxlbmd0aCAtIDFdKSAmJiAobFswXSA9PT0gNiB8fCBsWzBdID09PSAyKSkge1xuICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxbMF0gPT09IDMgJiYgKCFzIHx8IGxbMV0gPiBzWzBdICYmIGxbMV0gPCBzWzNdKSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IGxbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxbMF0gPT09IDYgJiYgZS5sYWJlbCA8IHNbMV0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBzWzFdLCBzID0gbDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocyAmJiBlLmxhYmVsIDwgc1syXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMl0sIGUub3BzLnB1c2gobCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc1syXSAmJiBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbCA9IHIuY2FsbCh0LCBlKTtcbiAgICB9IGNhdGNoIChwKSB7XG4gICAgICBsID0gWzYsIHBdLCBpID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IHMgPSAwO1xuICAgIH1cbiAgICBpZiAobFswXSAmIDUpIHRocm93IGxbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IGxbMF0gPyBsWzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBpZSh0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBlID0gciAmJiB0W3JdLCBuID0gMDtcbiAgaWYgKGUpIHJldHVybiBlLmNhbGwodCk7XG4gIGlmICh0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHQgJiYgbiA+PSB0Lmxlbmd0aCAmJiAodCA9IHZvaWQgMCksIHsgdmFsdWU6IHQgJiYgdFtuKytdLCBkb25lOiAhdCB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihyID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gd2UodCwgcikge1xuICB2YXIgZSA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIHRbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFlKSByZXR1cm4gdDtcbiAgdmFyIG4gPSBlLmNhbGwodCksIGksIHMgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHIgPT09IHZvaWQgMCB8fCByLS0gPiAwKSAmJiAhKGkgPSBuLm5leHQoKSkuZG9uZTsgKSBzLnB1c2goaS52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBhID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpICYmICFpLmRvbmUgJiYgKGUgPSBuLnJldHVybikgJiYgZS5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBiZSh0LCByLCBlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgaSA9IHIubGVuZ3RoLCBzOyBuIDwgaTsgbisrKVxuICAgIChzIHx8ICEobiBpbiByKSkgJiYgKHMgfHwgKHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLCAwLCBuKSksIHNbbl0gPSByW25dKTtcbiAgcmV0dXJuIHQuY29uY2F0KHMgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocikpO1xufVxuZnVuY3Rpb24gbmUodCkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG5lID8gKHRoaXMudiA9IHQsIHRoaXMpIDogbmV3IG5lKHQpO1xufVxuZnVuY3Rpb24gSW8odCwgciwgZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IGUuYXBwbHkodCwgciB8fCBbXSksIGksIHMgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBjKFwibmV4dFwiKSwgYyhcInRocm93XCIpLCBjKFwicmV0dXJuXCIsIGEpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpO1xuICBmdW5jdGlvbiBhKG0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oeSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh5KS50aGVuKG0sIGYpO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYyhtLCB5KSB7XG4gICAgblttXSAmJiAoaVttXSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LCBFKSB7XG4gICAgICAgIHMucHVzaChbbSwgXywgdiwgRV0pID4gMSB8fCB1KG0sIF8pO1xuICAgICAgfSk7XG4gICAgfSwgeSAmJiAoaVttXSA9IHkoaVttXSkpKTtcbiAgfVxuICBmdW5jdGlvbiB1KG0sIHkpIHtcbiAgICB0cnkge1xuICAgICAgbChuW21dKHkpKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBoKHNbMF1bM10sIF8pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBsKG0pIHtcbiAgICBtLnZhbHVlIGluc3RhbmNlb2YgbmUgPyBQcm9taXNlLnJlc29sdmUobS52YWx1ZS52KS50aGVuKHAsIGYpIDogaChzWzBdWzJdLCBtKTtcbiAgfVxuICBmdW5jdGlvbiBwKG0pIHtcbiAgICB1KFwibmV4dFwiLCBtKTtcbiAgfVxuICBmdW5jdGlvbiBmKG0pIHtcbiAgICB1KFwidGhyb3dcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gaChtLCB5KSB7XG4gICAgbSh5KSwgcy5zaGlmdCgpLCBzLmxlbmd0aCAmJiB1KHNbMF1bMF0sIHNbMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBPbyh0KSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciByID0gdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGU7XG4gIHJldHVybiByID8gci5jYWxsKHQpIDogKHQgPSB0eXBlb2YgaWUgPT0gXCJmdW5jdGlvblwiID8gaWUodCkgOiB0W1N5bWJvbC5pdGVyYXRvcl0oKSwgZSA9IHt9LCBuKFwibmV4dFwiKSwgbihcInRocm93XCIpLCBuKFwicmV0dXJuXCIpLCBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBlKTtcbiAgZnVuY3Rpb24gbihzKSB7XG4gICAgZVtzXSA9IHRbc10gJiYgZnVuY3Rpb24oYSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIHUpIHtcbiAgICAgICAgYSA9IHRbc10oYSksIGkoYywgdSwgYS5kb25lLCBhLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gaShzLCBhLCBjLCB1KSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4oZnVuY3Rpb24obCkge1xuICAgICAgcyh7IHZhbHVlOiBsLCBkb25lOiBjIH0pO1xuICAgIH0sIGEpO1xuICB9XG59XG5mdW5jdGlvbiBrKHQpIHtcbiAgcmV0dXJuIHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIE9lKHQpIHtcbiAgdmFyIHIgPSBmdW5jdGlvbihuKSB7XG4gICAgRXJyb3IuY2FsbChuKSwgbi5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCBlID0gdChyKTtcbiAgcmV0dXJuIGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCBlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGUsIGU7XG59XG52YXIgVGUgPSBPZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gZSA/IGUubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIGUubWFwKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHJldHVybiBpICsgMSArIFwiKSBcIiArIG4udG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiB2ZSh0LCByKSB7XG4gIGlmICh0KSB7XG4gICAgdmFyIGUgPSB0LmluZGV4T2Yocik7XG4gICAgMCA8PSBlICYmIHQuc3BsaWNlKGUsIDEpO1xuICB9XG59XG52YXIgZGUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSByLCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciwgZSwgbiwgaSwgcztcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIGEgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAoYSlcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkoYSkpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSBpZShhKSwgdSA9IGMubmV4dCgpOyAhdS5kb25lOyB1ID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSB1LnZhbHVlO1xuICAgICAgICAgICAgICBsLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICByID0geyBlcnJvcjogXyB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB1ICYmICF1LmRvbmUgJiYgKGUgPSBjLnJldHVybikgJiYgZS5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYS5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgcCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKGsocCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcCgpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcyA9IF8gaW5zdGFuY2VvZiBUZSA/IF8uZXJyb3JzIDogW19dO1xuICAgICAgICB9XG4gICAgICB2YXIgZiA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAoZikge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBoID0gaWUoZiksIG0gPSBoLm5leHQoKTsgIW0uZG9uZTsgbSA9IGgubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgeSA9IG0udmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBYZSh5KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgICAgcyA9IHMgPz8gW10sIF8gaW5zdGFuY2VvZiBUZSA/IHMgPSBiZShiZShbXSwgd2UocykpLCB3ZShfLmVycm9ycykpIDogcy5wdXNoKF8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIG4gPSB7IGVycm9yOiBfIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG0gJiYgIW0uZG9uZSAmJiAoaSA9IGgucmV0dXJuKSAmJiBpLmNhbGwoaCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMpXG4gICAgICAgIHRocm93IG5ldyBUZShzKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAociAmJiByICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBYZShyKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIHQpIHtcbiAgICAgICAgICBpZiAoci5jbG9zZWQgfHwgci5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHIuX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChlID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgZSAhPT0gdm9pZCAwID8gZSA6IFtdKS5wdXNoKHIpO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiBlID09PSByIHx8IEFycmF5LmlzQXJyYXkoZSkgJiYgZS5pbmNsdWRlcyhyKTtcbiAgfSwgdC5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KGUpID8gKGUucHVzaChyKSwgZSkgOiBlID8gW2UsIHJdIDogcjtcbiAgfSwgdC5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICBlID09PSByID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkoZSkgJiYgdmUoZSwgcik7XG4gIH0sIHQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgZSAmJiB2ZShlLCByKSwgciBpbnN0YW5jZW9mIHQgJiYgci5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCB0LkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSBuZXcgdCgpO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICEwLCByO1xuICB9KCksIHQ7XG59KCksIE50ID0gZGUuRU1QVFk7XG5mdW5jdGlvbiBqdCh0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgZGUgfHwgdCAmJiBcImNsb3NlZFwiIGluIHQgJiYgayh0LnJlbW92ZSkgJiYgayh0LmFkZCkgJiYgayh0LnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIFhlKHQpIHtcbiAgayh0KSA/IHQoKSA6IHQudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBVdCA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCB4dCA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIGJlKFt0LCByXSwgd2UoZSkpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gJHQodCkge1xuICB4dC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IHQ7XG4gIH0pO1xufVxuZnVuY3Rpb24gZXQoKSB7XG59XG5mdW5jdGlvbiBfZSh0KSB7XG4gIHQoKTtcbn1cbnZhciBxZSA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlKSB7XG4gICAgdmFyIG4gPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gbi5pc1N0b3BwZWQgPSAhMSwgZSA/IChuLmRlc3RpbmF0aW9uID0gZSwganQoZSkgJiYgZS5hZGQobikpIDogbi5kZXN0aW5hdGlvbiA9IERvLCBuO1xuICB9XG4gIHJldHVybiByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICByZXR1cm4gbmV3IGplKGUsIG4sIGkpO1xuICB9LCByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuX25leHQoZSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9lcnJvcihlKSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2NvbXBsZXRlKCkpO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xvc2VkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbCk7XG4gIH0sIHIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByO1xufShkZSksIFJvID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBNZSh0LCByKSB7XG4gIHJldHVybiBSby5jYWxsKHQsIHIpO1xufVxudmFyIFRvID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcjtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLm5leHQpXG4gICAgICB0cnkge1xuICAgICAgICBlLm5leHQocik7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIGZlKG4pO1xuICAgICAgfVxuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLmVycm9yKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5lcnJvcihyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgZmUobik7XG4gICAgICB9XG4gICAgZWxzZVxuICAgICAgZmUocik7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5jb21wbGV0ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIHIuY29tcGxldGUoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZmUoZSk7XG4gICAgICB9XG4gIH0sIHQ7XG59KCksIGplID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGkpIHtcbiAgICB2YXIgcyA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzLCBhO1xuICAgIGlmIChrKGUpIHx8ICFlKVxuICAgICAgYSA9IHtcbiAgICAgICAgbmV4dDogZSA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiBuID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGkgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBzICYmIFV0LnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShlKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcy51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgYSA9IHtcbiAgICAgICAgbmV4dDogZS5uZXh0ICYmIE1lKGUubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiBlLmVycm9yICYmIE1lKGUuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogZS5jb21wbGV0ZSAmJiBNZShlLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBhID0gZTtcbiAgICB9XG4gICAgcmV0dXJuIHMuZGVzdGluYXRpb24gPSBuZXcgVG8oYSksIHM7XG4gIH1cbiAgcmV0dXJuIHI7XG59KHFlKTtcbmZ1bmN0aW9uIGZlKHQpIHtcbiAgJHQodCk7XG59XG5mdW5jdGlvbiBNbyh0KSB7XG4gIHRocm93IHQ7XG59XG52YXIgRG8gPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IGV0LFxuICBlcnJvcjogTW8sXG4gIGNvbXBsZXRlOiBldFxufSwgemUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBGbyh0KSB7XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gTG8odCkge1xuICByZXR1cm4gdC5sZW5ndGggPT09IDAgPyBGbyA6IHQubGVuZ3RoID09PSAxID8gdFswXSA6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkobik7XG4gICAgfSwgZSk7XG4gIH07XG59XG52YXIgSyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICByICYmICh0aGlzLl9zdWJzY3JpYmUgPSByKTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZS5vcGVyYXRvciA9IHIsIGU7XG4gIH0sIHQucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKHIsIGUsIG4pIHtcbiAgICB2YXIgaSA9IHRoaXMsIHMgPSBqbyhyKSA/IHIgOiBuZXcgamUociwgZSwgbik7XG4gICAgcmV0dXJuIF9lKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGEgPSBpLCBjID0gYS5vcGVyYXRvciwgdSA9IGEuc291cmNlO1xuICAgICAgcy5hZGQoYyA/IGMuY2FsbChzLCB1KSA6IHUgPyBpLl9zdWJzY3JpYmUocykgOiBpLl90cnlTdWJzY3JpYmUocykpO1xuICAgIH0pLCBzO1xuICB9LCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHIuZXJyb3IoZSk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24ociwgZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICByZXR1cm4gZSA9IHR0KGUpLCBuZXcgZShmdW5jdGlvbihpLCBzKSB7XG4gICAgICB2YXIgYSA9IG5ldyBqZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcihjKTtcbiAgICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgICBzKHUpLCBhLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcyxcbiAgICAgICAgY29tcGxldGU6IGlcbiAgICAgIH0pO1xuICAgICAgbi5zdWJzY3JpYmUoYSk7XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGU7XG4gICAgcmV0dXJuIChlID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuc3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZVt6ZV0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgZSA9IDA7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspXG4gICAgICByW2VdID0gYXJndW1lbnRzW2VdO1xuICAgIHJldHVybiBMbyhyKSh0aGlzKTtcbiAgfSwgdC5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcztcbiAgICByZXR1cm4gciA9IHR0KHIpLCBuZXcgcihmdW5jdGlvbihuLCBpKSB7XG4gICAgICB2YXIgcztcbiAgICAgIGUuc3Vic2NyaWJlKGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIHMgPSBhO1xuICAgICAgfSwgZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gaShhKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbihzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gbmV3IHQocik7XG4gIH0sIHQ7XG59KCk7XG5mdW5jdGlvbiB0dCh0KSB7XG4gIHZhciByO1xuICByZXR1cm4gKHIgPSB0ID8/IFV0LlByb21pc2UpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gTm8odCkge1xuICByZXR1cm4gdCAmJiBrKHQubmV4dCkgJiYgayh0LmVycm9yKSAmJiBrKHQuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gam8odCkge1xuICByZXR1cm4gdCAmJiB0IGluc3RhbmNlb2YgcWUgfHwgTm8odCkgJiYganQodCk7XG59XG5mdW5jdGlvbiBVbyh0KSB7XG4gIHJldHVybiBrKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGlmdCk7XG59XG5mdW5jdGlvbiB4byh0KSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgaWYgKFVvKHIpKVxuICAgICAgcmV0dXJuIHIubGlmdChmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHQoZSwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICB0aGlzLmVycm9yKG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiAkbyh0LCByLCBlLCBuLCBpKSB7XG4gIHJldHVybiBuZXcgVm8odCwgciwgZSwgbiwgaSk7XG59XG52YXIgVm8gPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgaSwgcywgYSwgYykge1xuICAgIHZhciB1ID0gdC5jYWxsKHRoaXMsIGUpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHUub25GaW5hbGl6ZSA9IGEsIHUuc2hvdWxkVW5zdWJzY3JpYmUgPSBjLCB1Ll9uZXh0ID0gbiA/IGZ1bmN0aW9uKGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4obCk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUuZXJyb3IocCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9uZXh0LCB1Ll9lcnJvciA9IHMgPyBmdW5jdGlvbihsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzKGwpO1xuICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICBlLmVycm9yKHApO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fZXJyb3IsIHUuX2NvbXBsZXRlID0gaSA/IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSgpO1xuICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICBlLmVycm9yKGwpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fY29tcGxldGUsIHU7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgdmFyIG4gPSB0aGlzLmNsb3NlZDtcbiAgICAgIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksICFuICYmICgoZSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwIHx8IGUuY2FsbCh0aGlzKSk7XG4gICAgfVxuICB9LCByO1xufShxZSksIEdvID0gT2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBWdCA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcigpIHtcbiAgICB2YXIgZSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBlLmNsb3NlZCA9ICExLCBlLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBlLm9ic2VydmVycyA9IFtdLCBlLmlzU3RvcHBlZCA9ICExLCBlLmhhc0Vycm9yID0gITEsIGUudGhyb3duRXJyb3IgPSBudWxsLCBlO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gbmV3IHJ0KHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gZSwgbjtcbiAgfSwgci5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgR28oKTtcbiAgfSwgci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgX2UoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcztcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgfHwgKG4uY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20obi5vYnNlcnZlcnMpKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBhID0gaWUobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IGEubmV4dCgpOyAhYy5kb25lOyBjID0gYS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciB1ID0gYy52YWx1ZTtcbiAgICAgICAgICAgIHUubmV4dChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICBpID0geyBlcnJvcjogbCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKHMgPSBhLnJldHVybikgJiYgcy5jYWxsKGEpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIF9lKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IG4ub2JzZXJ2ZXJzOyBpLmxlbmd0aDsgKVxuICAgICAgICAgIGkuc2hpZnQoKS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgX2UoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoZS5fdGhyb3dJZkNsb3NlZCgpLCAhZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgZS5pc1N0b3BwZWQgPSAhMDtcbiAgICAgICAgZm9yICh2YXIgbiA9IGUub2JzZXJ2ZXJzOyBuLmxlbmd0aDsgKVxuICAgICAgICAgIG4uc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSAhMCwgdGhpcy5vYnNlcnZlcnMgPSB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICB9LCBPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsIFwib2JzZXJ2ZWRcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZTtcbiAgICAgIHJldHVybiAoKGUgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5sZW5ndGgpID4gMDtcbiAgICB9LFxuICAgIGVudW1lcmFibGU6ICExLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIHIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSksIHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpO1xuICB9LCByLnByb3RvdHlwZS5faW5uZXJTdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gdGhpcywgcyA9IGkuaGFzRXJyb3IsIGEgPSBpLmlzU3RvcHBlZCwgYyA9IGkub2JzZXJ2ZXJzO1xuICAgIHJldHVybiBzIHx8IGEgPyBOdCA6ICh0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBjLnB1c2goZSksIG5ldyBkZShmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIHZlKGMsIGUpO1xuICAgIH0pKTtcbiAgfSwgci5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gbi5oYXNFcnJvciwgcyA9IG4udGhyb3duRXJyb3IsIGEgPSBuLmlzU3RvcHBlZDtcbiAgICBpID8gZS5lcnJvcihzKSA6IGEgJiYgZS5jb21wbGV0ZSgpO1xuICB9LCByLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IG5ldyBLKCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZTtcbiAgfSwgci5jcmVhdGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIG5ldyBydChlLCBuKTtcbiAgfSwgcjtcbn0oSyksIHJ0ID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmRlc3RpbmF0aW9uID0gZSwgaS5zb3VyY2UgPSBuLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIChpID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIChpID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKG4sIGUpO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCBuO1xuICAgIChuID0gKGUgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIHJldHVybiAoaSA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKGUpKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogTnQ7XG4gIH0sIHI7XG59KFZ0KSwgcW8gPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIHpvID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICByZXR1cm4gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCByO1xufShkZSksIG50ID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBiZShbdCwgcl0sIHdlKGUpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgWW8gPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuc2NoZWR1bGVyID0gZSwgaS53b3JrID0gbiwgaS5wZW5kaW5nID0gITEsIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpO1xuICAgIGlmIChuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgdGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN0YXRlID0gZTtcbiAgICB2YXIgcyA9IHRoaXMuaWQsIGEgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICByZXR1cm4gcyAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCBzLCBuKSksIHRoaXMucGVuZGluZyA9ICEwLCB0aGlzLmRlbGF5ID0gbiwgdGhpcy5pZCA9IChpID0gdGhpcy5pZCkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoYSwgdGhpcy5pZCwgbiksIHRoaXM7XG4gIH0sIHIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBpID09PSB2b2lkIDAgJiYgKGkgPSAwKSwgbnQuc2V0SW50ZXJ2YWwoZS5mbHVzaC5iaW5kKGUsIHRoaXMpLCBpKTtcbiAgfSwgci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgaWYgKGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCBpICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gaSAmJiB0aGlzLnBlbmRpbmcgPT09ICExKVxuICAgICAgcmV0dXJuIG47XG4gICAgbiAhPSBudWxsICYmIG50LmNsZWFySW50ZXJ2YWwobik7XG4gIH0sIHIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb25cIik7XG4gICAgdGhpcy5wZW5kaW5nID0gITE7XG4gICAgdmFyIGkgPSB0aGlzLl9leGVjdXRlKGUsIG4pO1xuICAgIGlmIChpKVxuICAgICAgcmV0dXJuIGk7XG4gICAgdGhpcy5wZW5kaW5nID09PSAhMSAmJiB0aGlzLmlkICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKSk7XG4gIH0sIHIucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpID0gITEsIHM7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29yayhlKTtcbiAgICB9IGNhdGNoIChhKSB7XG4gICAgICBpID0gITAsIHMgPSBhIHx8IG5ldyBFcnJvcihcIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3JcIik7XG4gICAgfVxuICAgIGlmIChpKVxuICAgICAgcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSwgcztcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB2YXIgZSA9IHRoaXMsIG4gPSBlLmlkLCBpID0gZS5zY2hlZHVsZXIsIHMgPSBpLmFjdGlvbnM7XG4gICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsLCB0aGlzLnBlbmRpbmcgPSAhMSwgdmUocywgdGhpcyksIG4gIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoaSwgbiwgbnVsbCkpLCB0aGlzLmRlbGF5ID0gbnVsbCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHI7XG59KHpvKSwgb3QgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyLCBlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gdC5ub3cpLCB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSByLCB0aGlzLm5vdyA9IGU7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHJldHVybiBlID09PSB2b2lkIDAgJiYgKGUgPSAwKSwgbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLCByKS5zY2hlZHVsZShuLCBlKTtcbiAgfSwgdC5ub3cgPSBxby5ub3csIHQ7XG59KCksIEtvID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICBuID09PSB2b2lkIDAgJiYgKG4gPSBvdC5ub3cpO1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuYWN0aW9ucyA9IFtdLCBpLl9hY3RpdmUgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgbi5wdXNoKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGkgPSBlLmV4ZWN1dGUoZS5zdGF0ZSwgZS5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChlID0gbi5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGkpIHtcbiAgICAgIGZvciAoOyBlID0gbi5zaGlmdCgpOyApXG4gICAgICAgIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGk7XG4gICAgfVxuICB9LCByO1xufShvdCksIEhvID0gbmV3IEtvKFlvKSwgV28gPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBabyh0KSB7XG4gIHJldHVybiBrKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQudGhlbik7XG59XG5mdW5jdGlvbiBKbyh0KSB7XG4gIHJldHVybiBrKHRbemVdKTtcbn1cbmZ1bmN0aW9uIEJvKHQpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGsodCA9PSBudWxsID8gdm9pZCAwIDogdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gUW8odCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArICh0ICE9PSBudWxsICYmIHR5cGVvZiB0ID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIHQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIFhvKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIGVpID0gWG8oKTtcbmZ1bmN0aW9uIHRpKHQpIHtcbiAgcmV0dXJuIGsodCA9PSBudWxsID8gdm9pZCAwIDogdFtlaV0pO1xufVxuZnVuY3Rpb24gcmkodCkge1xuICByZXR1cm4gSW8odGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbiwgaSwgcztcbiAgICByZXR1cm4gTHQodGhpcywgZnVuY3Rpb24oYSkge1xuICAgICAgc3dpdGNoIChhLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBlID0gdC5nZXRSZWFkZXIoKSwgYS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBhLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBhLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgbmUoZS5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gYS5zZW50KCksIGkgPSBuLnZhbHVlLCBzID0gbi5kb25lLCBzID8gWzQsIG5lKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIG5lKGkpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIGEuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiBlLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG5pKHQpIHtcbiAgcmV0dXJuIGsodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gb2kodCkge1xuICBpZiAodCBpbnN0YW5jZW9mIEspXG4gICAgcmV0dXJuIHQ7XG4gIGlmICh0ICE9IG51bGwpIHtcbiAgICBpZiAoSm8odCkpXG4gICAgICByZXR1cm4gaWkodCk7XG4gICAgaWYgKFdvKHQpKVxuICAgICAgcmV0dXJuIHNpKHQpO1xuICAgIGlmIChabyh0KSlcbiAgICAgIHJldHVybiBhaSh0KTtcbiAgICBpZiAoQm8odCkpXG4gICAgICByZXR1cm4gR3QodCk7XG4gICAgaWYgKHRpKHQpKVxuICAgICAgcmV0dXJuIGNpKHQpO1xuICAgIGlmIChuaSh0KSlcbiAgICAgIHJldHVybiBsaSh0KTtcbiAgfVxuICB0aHJvdyBRbyh0KTtcbn1cbmZ1bmN0aW9uIGlpKHQpIHtcbiAgcmV0dXJuIG5ldyBLKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRbemVdKCk7XG4gICAgaWYgKGsoZS5zdWJzY3JpYmUpKVxuICAgICAgcmV0dXJuIGUuc3Vic2NyaWJlKHIpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZVwiKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBzaSh0KSB7XG4gIHJldHVybiBuZXcgSyhmdW5jdGlvbihyKSB7XG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCB0Lmxlbmd0aCAmJiAhci5jbG9zZWQ7IGUrKylcbiAgICAgIHIubmV4dCh0W2VdKTtcbiAgICByLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gYWkodCkge1xuICByZXR1cm4gbmV3IEsoZnVuY3Rpb24ocikge1xuICAgIHQudGhlbihmdW5jdGlvbihlKSB7XG4gICAgICByLmNsb3NlZCB8fCAoci5uZXh0KGUpLCByLmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiByLmVycm9yKGUpO1xuICAgIH0pLnRoZW4obnVsbCwgJHQpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGNpKHQpIHtcbiAgcmV0dXJuIG5ldyBLKGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSwgbjtcbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgaSA9IGllKHQpLCBzID0gaS5uZXh0KCk7ICFzLmRvbmU7IHMgPSBpLm5leHQoKSkge1xuICAgICAgICB2YXIgYSA9IHMudmFsdWU7XG4gICAgICAgIGlmIChyLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICBlID0geyBlcnJvcjogYyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBzICYmICFzLmRvbmUgJiYgKG4gPSBpLnJldHVybikgJiYgbi5jYWxsKGkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBHdCh0KSB7XG4gIHJldHVybiBuZXcgSyhmdW5jdGlvbihyKSB7XG4gICAgdWkodCwgcikuY2F0Y2goZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbGkodCkge1xuICByZXR1cm4gR3QocmkodCkpO1xufVxuZnVuY3Rpb24gdWkodCwgcikge1xuICB2YXIgZSwgbiwgaSwgcztcbiAgcmV0dXJuIEFvKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSwgYztcbiAgICByZXR1cm4gTHQodGhpcywgZnVuY3Rpb24odSkge1xuICAgICAgc3dpdGNoICh1LmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICB1LnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgZSA9IE9vKHQpLCB1LmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgZS5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSB1LnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKGEgPSBuLnZhbHVlLCByLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICB1LmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gdS5zZW50KCksIGkgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gdS50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChzID0gZS5yZXR1cm4pID8gWzQsIHMuY2FsbChlKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1LnNlbnQoKSwgdS5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gci5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZGkodCwgciwgZSwgbiwgaSkge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgaSA9PT0gdm9pZCAwICYmIChpID0gITEpO1xuICB2YXIgcyA9IHIuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgZSgpLCBpID8gdC5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAodC5hZGQocyksICFpKVxuICAgIHJldHVybiBzO1xufVxuZnVuY3Rpb24gcGkodCwgcikge1xuICB2YXIgZSA9IGsodCkgPyB0IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sIG4gPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIGkuZXJyb3IoZSgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBLKG4pO1xufVxudmFyIG1pID0gT2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gZmkodCwgcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpID0gITEsIHM7XG4gICAgdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24oYSkge1xuICAgICAgICBzID0gYSwgaSA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBuLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpID8gZShzKSA6IG4obmV3IG1pKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHlpKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih0KTtcbn1cbnZhciBoaSA9IE9lKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSBudWxsKSwgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBfaSh0LCByKSB7XG4gIHZhciBlID0geWkodCkgPyB7IGZpcnN0OiB0IH0gOiB0eXBlb2YgdCA9PSBcIm51bWJlclwiID8geyBlYWNoOiB0IH0gOiB0LCBuID0gZS5maXJzdCwgaSA9IGUuZWFjaCwgcyA9IGUud2l0aCwgYSA9IHMgPT09IHZvaWQgMCA/IGdpIDogcywgYyA9IGUuc2NoZWR1bGVyLCB1ID0gYyA9PT0gdm9pZCAwID8gSG8gOiBjLCBsID0gZS5tZXRhLCBwID0gbCA9PT0gdm9pZCAwID8gbnVsbCA6IGw7XG4gIGlmIChuID09IG51bGwgJiYgaSA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIHhvKGZ1bmN0aW9uKGYsIGgpIHtcbiAgICB2YXIgbSwgeSwgXyA9IG51bGwsIHYgPSAwLCBFID0gZnVuY3Rpb24oUykge1xuICAgICAgeSA9IGRpKGgsIHUsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG0udW5zdWJzY3JpYmUoKSwgb2koYSh7XG4gICAgICAgICAgICBtZXRhOiBwLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiBfLFxuICAgICAgICAgICAgc2VlbjogdlxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoaCk7XG4gICAgICAgIH0gY2F0Y2ggKFEpIHtcbiAgICAgICAgICBoLmVycm9yKFEpO1xuICAgICAgICB9XG4gICAgICB9LCBTKTtcbiAgICB9O1xuICAgIG0gPSBmLnN1YnNjcmliZSgkbyhoLCBmdW5jdGlvbihTKSB7XG4gICAgICB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCB2KyssIGgubmV4dChfID0gUyksIGkgPiAwICYmIEUoaSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgeSAhPSBudWxsICYmIHkuY2xvc2VkIHx8IHkgPT0gbnVsbCB8fCB5LnVuc3Vic2NyaWJlKCksIF8gPSBudWxsO1xuICAgIH0pKSwgIXYgJiYgRShuICE9IG51bGwgPyB0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gbiA6ICtuIC0gdS5ub3coKSA6IGkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGdpKHQpIHtcbiAgdGhyb3cgbmV3IGhpKHQpO1xufVxuY2xhc3MgZ2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiByIH0sIHRoaXMuX3N1YmplY3QubmV4dChyKSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAociwgZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IHIsIGVyck1zZzogZSB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKHIpO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAocikgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IHIsIHRoaXMuc3Vic2NyaWJlID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHIodGhpcy5fY3VycmVudCksIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHIodGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgJGUodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0ge1xuICAgICAgICBmaXJzdDogci50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiBwaSgoKSA9PiBuZXcgRXJyb3Ioci50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gZmkodGhpcy5fc3ViamVjdC5waXBlKF9pKGUpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IFZ0KCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHdpLCBlcnJfXzogYmkgfSA9IFAoXCJpbml0LWZsb3dzXCIpLCB5ZSA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgZ2UoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXI6IGUsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKG4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlLmN1cnJlbnQuaXNTdWNjZXNzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IGF3YWl0IHIobik7XG4gICAgICAgIHdpKGDinJQgJHt0fSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGkpLCBlLnNldChpKTtcbiAgICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgICAgYmkoYPCdma0gJHt0fSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgWShpKSwgXCJEZXRhaWxzOlwiLCBpKSwgZS50aHJvdyhpLCBZKGkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCB2aSA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXModCkubWFwKChuKSA9PiBuLmluaXRpYWxpemUoeyBjb250ZXh0OiByLCBmb3JtQ2FsbGJhY2tzOiBlIH0pKSk7XG59LCBFaSA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiB5ZShcIlN0cmlwZSBQUlwiLCBMLnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiB5ZShcIlN0cmlwZSBMaW5rXCIsIEwuc3RyaXBlTGluay5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHllKFwiQWlyd2FsbGV4IEdQYXlcIiwgTC5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogeWUoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgTC5haXJ3YWxsZXhBcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IFNpIH0gPSBQKFwiZm9ybS1jYWxsYmFja3NcIiksIEYgPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBpdCA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBGLFxuICBvbkJsdXI6IEYsXG4gIG9uQ2hhbmdlOiBGLFxuICBvbkxvYWQ6IEYsXG4gIG9uTG9hZEVycm9yOiBGLFxuICBvblZhbGlkYXRpb25FcnJvcjogRixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IEYsXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBGLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IEYsXG4gIG9uQ2hlY2tvdXRFcnJvcjogRixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IEZcbn0pLCB4ID0gY2xhc3MgeCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHIpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHguY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXMocikuZm9yRWFjaCgoW2UsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSBRdChlLCBuID8/IHguTk9PUCwgU2kpO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3NbZV0gPSBpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5fY2FsbGJhY2tzID0geC5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xueC5OT09QID0gKCkgPT4ge1xufSwgeC5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgY29uc3QgciA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmtleXMoaXQua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgcltlXSA9IHguTk9PUDtcbiAgfSksIHI7XG59LCB4LmZyb21PYmplY3QgPSAocikgPT4ge1xuICBjb25zdCBlID0gbmV3IHgoKTtcbiAgcmV0dXJuIGUuc2V0Q2FsbGJhY2tzKGl0LnBhcnNlKHIpKSwgZTtcbn07XG5sZXQgVWUgPSB4O1xuY2xhc3MgQ2kge1xuICBjb25zdHJ1Y3RvcihyLCBlLCBuLCBpKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKHMpID0+IHtcbiAgICAgIGlmICghcy5zb3VyY2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgIGlmIChzdChzLm9yaWdpbikgIT09IHN0KHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIHMuZGF0YSA9PSBcIm9iamVjdFwiICYmIHMuZGF0YS5wZW5wYWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBhID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEgPSBVcihKU09OLnBhcnNlKHMuZGF0YSkpO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBVbmtub3duIGV2ZW50LiBJZ25vcmluZzpcIiwgZik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KGEpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogdSwgcGF5bG9hZDogbCB9ID0gYSwgcCA9IGwudHlwZTtcbiAgICAgIHN3aXRjaCAocCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KGwuaGVpZ2h0ID8gYCR7bC5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXModSwgbC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIodSwgbC5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKHUsIGwuZWxlbWVudFR5cGUsIGwuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW3VdID0gcy5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQobCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcihsLm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IobC5lbGVtZW50VHlwZSwgbC5lcnJvcnMsIHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgcCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKHMpID0+IHMuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhcy5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIHMuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIHMpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMocy5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgcyksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQocy5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHIsIHRoaXMuYmFzZVVybCA9IGUsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpO1xuICB9XG59XG5jb25zdCBzdCA9ICh0KSA9PiBuZXcgVVJMKHQpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIGtpKHQsIHIpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiByXG4gIH0pLnByb21pc2UsIGkgPSBhd2FpdCB4cihuKTtcbiAgaWYgKCEkcihuLCBpKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3MgUGkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHIsIGUpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChyLCBlKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHIgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgQWkgPSAodCwgciwgZSkgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSB0O1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGkpID0+IHtcbiAgICBpZiAoaS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHMgPSBpLmxvYWRlZFZhbHVlLCBhID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCB1ID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBhLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKGwpID0+IHtcbiAgICAgICAgICAgIGEgJiYgYXQoXCJhcHBsZV9wYXlcIiwgcywgciwgZSwgbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jIChsKSA9PiB7XG4gICAgICAgICAgICBjICYmIGF0KFwiZ29vZ2xlX3BheVwiLCBzLCByLCBlLCBsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZCh1KTtcbiAgICB9XG4gIH0pO1xufSwgYXQgPSAodCwgciwgZSwgbiwgaSkgPT4gTC5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IExlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdCksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IG9lKGUuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogdCwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHJcbn0pLCBjdCA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IEcsIGVycl9fOiBCIH0gPSBQKFwib3AtZm9ybVwiKSwgcSA9IGNsYXNzIHEge1xuICBjb25zdHJ1Y3RvcihyKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgZ2UoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IGdlKCksIHRoaXMuY29udGV4dCA9IG5ldyBnZSgpLCB0aGlzLmluaXRGbG93cyA9IEVpKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIEcoXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgRyhcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogY3RcbiAgICAgICAgfSk7XG4gICAgICAgIEcoXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIEcoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IG4gPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBjdFxuICAgICAgICB9KTtcbiAgICAgICAgRyhcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgRyhcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3QgaSA9IHEuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBlLFxuICAgICAgICAgIG4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChpKSwgQWkodGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIEcoXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IHZpKHRoaXMuaW5pdEZsb3dzLCBpLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChlLnRvdGFsQW1vdW50QXRvbXMsIGUuY3VycmVuY3kpLCBHKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IG4gPSBZKGUpO1xuICAgICAgICBCKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBuKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihuKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBlLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIG4gJiYgKG4ubm9kZS5zdHlsZS5oZWlnaHQgPSBlKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQuc2V0KGUpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGUpLCBlKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZSwgbiA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgaSA9IFh0LnBhcnNlKGUpLCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgYSA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhuKTtcbiAgICAgIHMubmFtZSA9IGAke2l9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgYyA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIGMuc2VhcmNoID0gYS50b1N0cmluZygpLCBzLnNyYyA9IGMuaHJlZiwgcy5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKGksIHMpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAoZSwgbikgPT4ge1xuICAgICAgY29uc3QgaSA9IHtcbiAgICAgICAgdHlwZTogZSxcbiAgICAgICAgbm9kZTogbixcbiAgICAgICAgbW91bnQ6IChzKSA9PiB7XG4gICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgcmV0dXJuIChhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYXBwZW5kQ2hpbGQobik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogaS50eXBlLCBub2RlOiBpLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW3JlLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtyZS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW3JlLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbcmUuQ0FSRF9DVkNdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tlXSA9IGksIGk7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IG4gPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gbi5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBuLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGUuc3R5bGVzICYmIG4uYXBwZW5kKFwic3R5bGVzXCIsIGpyKGUuc3R5bGVzKSksIG4uYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIG47XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGUpID0+IHtcbiAgICAgIGtpKGUubm9kZSkudGhlbigobikgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZS50eXBlLCBuKSwgdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuYW55Q2RlQ29ubi5zZXQobik7XG4gICAgICB9KS5jYXRjaCgobikgPT4gQihcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgbikpO1xuICAgIH0sIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFlKSB7XG4gICAgICAgIEIoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBMLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogTGUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBvZShlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSkge1xuICAgICAgICBCKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBnZXR0aW5nIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHMuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW24sIGldKSA9PiAoe1xuICAgICAgICBuYW1lOiBuLFxuICAgICAgICAuLi5pLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IChlLCBuKSA9PiB7XG4gICAgICBjb25zdCBpID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFpKSB7XG4gICAgICAgIEIoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGUpIHtcbiAgICAgICAgY2FzZSBcInBvY2t5dC1wYXlwYWxcIjpcbiAgICAgICAgICByZXR1cm4gTC5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGksXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IExlKGkuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiksXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBvZShpLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBuIH0sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChzKSA9PiB7XG4gICAgICAgICAgICBzLmlzU3VjY2VzcyAmJiBzLmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlID8gcy5sb2FkZWRWYWx1ZS5zdGFydEZsb3cobikgOiBCKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChzKSA9PiB7XG4gICAgICAgICAgICBzLmlzU3VjY2VzcyAmJiBzLmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlID8gcy5sb2FkZWRWYWx1ZS5zdGFydEZsb3cobikgOiBCKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgJGUoZSk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIEcoXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKTtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgZSAmJiBlLm5vZGUucmVtb3ZlKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgZGVsZXRlIHdpbmRvdy5vanM7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhlKTtcbiAgICB9LCBxLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMi42XCIsIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcImxvY2FsX2J1aWxkXCIsIHRoaXMuYmFzZVVybCA9IHIuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIHRoaXMuY29uZmlnID0geyAuLi5yLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gVWUuZnJvbU9iamVjdChyKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWAsIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luLCB0aGlzLmZvcm1UYXJnZXQgPSByLmZvcm1UYXJnZXQgPz8gXCJib2R5XCIsIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IFBpKCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IENpKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG59O1xucS5vanNGbG93cyA9IEwsIHEuYXNzaWduQXNTaW5nbGV0b24gPSAocikgPT4ge1xuICBpZiAocS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gcjtcbn0sIHEuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIHEuYnVpbGRPanNGbG93Q29udGV4dCA9IChyLCBlLCBuLCBpKSA9PiAoe1xuICBjaGVja291dFNlY3VyZVRva2VuOiByLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gIGJhc2VVcmw6IG5ldyBVUkwoci5iYXNlVXJsID8/IGR0KS5vcmlnaW4sXG4gIGZvcm1EaXY6IGksXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiBlLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogZS5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiBuLFxuICBjdXN0b21Jbml0UGFyYW1zOiByLmN1c3RvbUluaXRQYXJhbXMgPz8ge31cbn0pO1xubGV0IGx0ID0gcTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgaGlkZUljb246IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IEV2ZW50VHlwZSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKTtcbmNvbnN0IEdlbmVyaWNFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IElucHV0RXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogUHJpdmF0ZUZpZWxkTmFtZUVudW0sXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEVycm9yRXZlbnRUeXBlLFxuICBtZXNzYWdlOiBSZXF1aXJlZFN0cmluZyxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBBbGxGaWVsZE5hbWVzLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IExheW91dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MT0FERUQpLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZCQxKVxufSk7XG5jb25zdCBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgc3RhcnRQRk1ldGFkYXRhOiB6JDEub3B0aW9uYWwoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1MpLFxuICBwYXltZW50TWV0aG9kSWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBSZXF1aXJlZEZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiYWRkcmVzc1wiIC8qIEFERFJFU1MgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiY2l0eVwiIC8qIENJVFkgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wic3RhdGVcIiAvKiBTVEFURSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRmllbGRWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHokMS5zdHJpbmcoKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoZmFsc2UpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCh0cnVlKSB9KSxcbiAgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZVxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xueiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogeiQxLmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBQcmljZVF0eSA9IHokMS5vYmplY3Qoe1xuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IENhcnRJbmZvID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShQcmljZVF0eSksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpXG59KS5leHRlbmQoTmV3Q3VzdG9tZXJGaWVsZHMuc2hhcGUpLmV4dGVuZChQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhLnNoYXBlKTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIC8vIFRoaXMgaXMgb3B0aW9uYWwgaW4gQ0RFLCBidXQgbm90IGluIE9KUyBtb3ZpbmcgZm9yd2FyZFxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke21lLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7bWUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHttZS5yZWQuYm9sZChcIm9qcy9cIil9JHttZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBBV1hfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuXG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKGx0LmdldEluc3RhbmNlKCkpIHtcbiAgICBsdC5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IHVzZVBheW1lbnRSZXF1ZXN0cyA9IChvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkKSA9PiB7XG4gIGNvbnN0IFtwYXltZW50UmVxdWVzdHMsIHNldFBheW1lbnRSZXF1ZXN0c10gPSB1c2VTdGF0ZSh7XG4gICAgYXBwbGVfcGF5OiBQUl9MT0FESU5HLFxuICAgIGdvb2dsZV9wYXk6IFBSX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHBheW1lbnRSZXF1ZXN0czIpID0+IHtcbiAgICAgIHNldFBheW1lbnRSZXF1ZXN0cyhwYXltZW50UmVxdWVzdHMyKTtcbiAgICAgIG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQ/LihwYXltZW50UmVxdWVzdHMyKTtcbiAgICB9LFxuICAgIFtvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkXVxuICApO1xuICByZXR1cm4geyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH07XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgeyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH0gPSB1c2VQYXltZW50UmVxdWVzdHMocHJvcHMub25QYXltZW50UmVxdWVzdExvYWQpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbYWlyd2FsbGV4LCBzZXRBaXJ3YWxsZXhdID0gdXNlU3RhdGUoe1xuICAgIGdvb2dsZVBheTogQVdYX0xPQURJTkcsXG4gICAgYXBwbGVQYXk6IEFXWF9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gbHQuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgbHQoe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgYXBwbGVQYXk6IHByZXYuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBnb29nbGVQYXk6IHByZXYuZ29vZ2xlUGF5LFxuICAgICAgICAgIGFwcGxlUGF5OiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQubG9hZGVkVmFsdWUsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogcGF5bWVudFJlcXVlc3RzLmFwcGxlX3BheSxcbiAgICBnb29nbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5nb29nbGVfcGF5LFxuICAgIGxvYWRlZCxcbiAgICAvLyBEaXNhYmxlIGR5bmFtaWMgcHJldmlld3MgZmVhdHVyZSBmb3Igbm93XG4gICAgcHJldmlldzoge1xuICAgICAgYW1vdW50OiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfSxcbiAgICBzdHJpcGVMaW5rOiBzdHJpcGVMaW5rQ3RybCxcbiAgICBhaXJ3YWxsZXhcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IGVsZW1lbnRzQ29udGV4dFZhbHVlID8gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50c0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGVsZW1lbnRzQ29udGV4dFZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGlkOiBGT1JNX1RBUkdFVCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbihjaGlsZHJlblByb3BzKSB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KSB9KTtcbn07XG5jb25zdCBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSA9IChvcEZvcm0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb3JtSWQ6IG9wRm9ybS5mb3JtSWQsXG4gICAgZm9ybUhlaWdodDogb3BGb3JtLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCxcbiAgICByZWZlcnJlcjogb3BGb3JtLnJlZmVycmVyLFxuICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IG9wRm9ybS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgIHJlZ2lzdGVySWZyYW1lOiBvcEZvcm0ucmVnaXN0ZXJJZnJhbWUsXG4gICAgYmFzZVVybDogb3BGb3JtLmJhc2VVcmxcbiAgfTtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiBgJHtiYXNlVXJsfS9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50Lz8ke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEN2Y0VsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDIH0pO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCwgQ2FyZEVsZW1lbnQsIENhcmRFeHBpcnlFbGVtZW50LCBDYXJkTnVtYmVyRWxlbWVudCwgRWxlbWVudHNGb3JtLCBGaWVsZE5hbWUsIHVzZU9wZW5QYXlFbGVtZW50cyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLGVBQUFDLElBQWEsYUFBQUMsSUFBVyxVQUFBQyxJQUFRLFdBQUFDLFVBQWU7QUFDN0YsU0FBUyxPQUFBQyxHQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsS0FBS0MsU0FBVztBQUN6QixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsUUFBUTtBQUVmLE1BQU1DLEtBQWtCYixHQUFjO0FBQUEsRUFDcEMsUUFBUTtBQUFBLEVBQ1IsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUFBLEVBQ1YscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCLE1BQU07QUFBQSxFQUN0QjtBQUFBLEVBQ0EsU0FBUztBQUNYLENBQUMsR0FFS2MsS0FBcUIsTUFBTTtBQUMvQixRQUFNQyxJQUFVZCxHQUFXWSxFQUFlO0FBQzFDLE1BQUksQ0FBQ0U7QUFDSCxVQUFNLElBQUksTUFBTSxtRUFBbUU7QUFFckYsU0FBT0E7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b250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgImpzeCIsICJGcmFnbWVudCIsICJ6JDEiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAibWUiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgImR0IiwgInp0IiwgIll0IiwgIkt0IiwgIkh0IiwgIld0IiwgIkRlIiwgIlp0IiwgIkp0IiwgImUiLCAiQnQiLCAiWSIsICJRdCIsICJuIiwgImIiLCAiUiIsICJkIiwgInB0IiwgIm10IiwgImZ0IiwgInl0IiwgInJlIiwgIlh0IiwgIkVlIiwgImVyIiwgImoiLCAidHIiLCAicnIiLCAibnIiLCAib3IiLCAiaXIiLCAic3IiLCAiYXIiLCAiY3IiLCAibHIiLCAidXIiLCAiZHIiLCAicHIiLCAibGUiLCAibXIiLCAiZnIiLCAieXIiLCAiaHIiLCAiX3IiLCAiZ3IiLCAid3IiLCAieGUiLCAiYnIiLCAidnIiLCAiRXIiLCAiTiIsICJTciIsICJDciIsICJodCIsICJrciIsICJQciIsICJBciIsICJJciIsICJPciIsICJSciIsICJTZSIsICJZZSIsICJEciIsICJUciIsICJNciIsICJzIiwgImEiLCAiRnIiLCAiTHIiLCAiTnIiLCAiaSIsICJjIiwgImpyIiwgIm9lIiwgIlVyIiwgInhyIiwgIiRyIiwgImciLCAiVnIiLCAiX3QiLCAiZ3QiLCAiR3IiLCAicXIiLCAidWUiLCAienIiLCAiWXIiLCAid3QiLCAiS3IiLCAiSHIiLCAiV3IiLCAiS2UiLCAiYnQiLCAiSGUiLCAidnQiLCAiWnIiLCAiSnIiLCAiQnIiLCAiUXIiLCAiWHIiLCAiZW4iLCAidG4iLCAicm4iLCAiRXQiLCAibm4iLCAib24iLCAic24iLCAiYW4iLCAiY24iLCAibG4iLCAidW4iLCAiU3QiLCAiVCIsICJwbiIsICJkbiIsICJtbiIsICJXIiwgIkNlIiwgImZuIiwgInluIiwgIkgiLCAiaG4iLCAiX24iLCAia2UiLCAiZ24iLCAiV2UiLCAid24iLCAiUGUiLCAiQ3QiLCAiYm4iLCAidm4iLCAiJGUiLCAic2UiLCAiQWUiLCAiUCIsICJEaSIsICJFbiIsICJWZSIsICJhZSIsICJTbiIsICJrdCIsICJQdCIsICJjZSIsICJDbiIsICJaZSIsICJDIiwgImtuIiwgIlBuIiwgIkFuIiwgIkluIiwgInUiLCAibCIsICJwIiwgImYiLCAiaCIsICJtIiwgIkwiLCAiVG4iLCAiT24iLCAiUm4iLCAiTW4iLCAiRG4iLCAiRm4iLCAiTG4iLCAiSWUiLCAiQXQiLCAiTm4iLCAiam4iLCAiVW4iLCAiSXQiLCAieG4iLCAiJG4iLCAiT3QiLCAiVm4iLCAiR24iLCAicW4iLCAiR2UiLCAiem4iLCAiWW4iLCAiS24iLCAiSG4iLCAiV24iLCAidyIsICJKZSIsICJCZSIsICJabiIsICJFIiwgIl8iLCAiWG4iLCAiUW4iLCAidiIsICJTIiwgIkpuIiwgIkJuIiwgIk8iLCAiZW8iLCAidG8iLCAicm8iLCAibm8iLCAiaW8iLCAib28iLCAic28iLCAiViIsICJRZSIsICJhbyIsICJjbyIsICJsbyIsICJSdCIsICJ1byIsICJwbyIsICJtbyIsICJNIiwgInRlIiwgIlJlIiwgIlR0IiwgIk10IiwgIkR0IiwgImZvIiwgInlvIiwgInkiLCAiUSIsICJBIiwgIlgiLCAicGUiLCAiZWUiLCAiJCIsICJEIiwgIkoiLCAiVSIsICJobyIsICJfbyIsICJnbyIsICJ3byIsICJibyIsICJoZSIsICJ2byIsICJFbyIsICJTbyIsICJDbyIsICJ6IiwgIkZlIiwgIkZ0IiwgImtvIiwgIlBvIiwgIkxlIiwgIk5lIiwgIloiLCAiQW8iLCAiTHQiLCAiaWUiLCAid2UiLCAiYmUiLCAibmUiLCAiSW8iLCAiT28iLCAiayIsICJPZSIsICJUZSIsICJ2ZSIsICJkZSIsICJYZSIsICJOdCIsICJqdCIsICJVdCIsICJ4dCIsICIkdCIsICJldCIsICJfZSIsICJxZSIsICJEbyIsICJqZSIsICJSbyIsICJNZSIsICJUbyIsICJmZSIsICJNbyIsICJ6ZSIsICJGbyIsICJMbyIsICJLIiwgImpvIiwgInR0IiwgIk5vIiwgIlVvIiwgInhvIiwgIiRvIiwgIlZvIiwgIkdvIiwgIlZ0IiwgInJ0IiwgInFvIiwgInpvIiwgIm50IiwgIllvIiwgIm90IiwgIktvIiwgIkhvIiwgIldvIiwgIlpvIiwgIkpvIiwgIkJvIiwgIlFvIiwgIlhvIiwgImVpIiwgInRpIiwgInJpIiwgIm5pIiwgIm9pIiwgImlpIiwgInNpIiwgImFpIiwgIkd0IiwgImNpIiwgImxpIiwgInVpIiwgImRpIiwgInBpIiwgIm1pIiwgImZpIiwgInlpIiwgImhpIiwgIl9pIiwgImdpIiwgImdlIiwgIndpIiwgImJpIiwgInllIiwgInZpIiwgIkVpIiwgIlNpIiwgIkYiLCAiaXQiLCAieCIsICJyIiwgIlVlIiwgIkNpIiwgInN0IiwgImtpIiwgIlBpIiwgIkFpIiwgImF0IiwgImN0IiwgIkciLCAiQiIsICJxIiwgImx0IiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJBV1hfTE9BRElORyIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJvYmoiLCAiaW5zdGFuY2UiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiX2EiLCAiZm9ybUNhbGxiYWNrcyIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiZm9ybSIsICJ2YWx1ZSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAicHJldiIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
4041
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBmZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBkdCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgWXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBLdCA9IHokMS5hcnJheShZdCksIEh0ID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIFd0ID0geiQxLmFycmF5KEh0KSwgWnQgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIERlID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBadFtyXSA/PyB0O1xufSwgSnQgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIEJ0ID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gRGUodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7RGUoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgUXQgPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIFkgPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChKdCh0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCByID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIEt0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gQnQocikgOiBXdC5zYWZlUGFyc2Uocikuc3VjY2VzcyA/IFF0KHIpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIERlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgcmV0dXJuIHIgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIFh0ID0gKHQsIHIsIGUpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHIoLi4ubik7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgaSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBJID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pLCB2ID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBSID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xudmFyIGQgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgdC5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIHQuRU1BSUwgPSBcImVtYWlsXCIsIHQuWklQX0NPREUgPSBcInppcENvZGVcIiwgdC5DSVRZID0gXCJjaXR5XCIsIHQuU1RBVEUgPSBcInN0YXRlXCIsIHQuQ09VTlRSWSA9IFwiY291bnRyeVwiLCB0LkFERFJFU1MgPSBcImFkZHJlc3NcIiwgdC5QSE9ORSA9IFwicGhvbmVcIiwgdC5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCB0KSkoZCB8fCB7fSk7XG5jb25zdCBwdCA9IHokMS5uYXRpdmVFbnVtKGQpO1xudmFyIGZ0ID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIHQpKShmdCB8fCB7fSk7XG5jb25zdCBtdCA9IHokMS5uYXRpdmVFbnVtKGZ0KSwgeXQgPSB6JDEudW5pb24oW3B0LCBtdF0pO1xudmFyIHJlID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRCA9IFwiY2FyZFwiLCB0LkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCB0KSkocmUgfHwge30pO1xuY29uc3QgZXIgPSB6JDEubmF0aXZlRW51bShyZSksIEVlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBSKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHRyID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IHYsXG4gIGV4cGlyeTogdixcbiAgY3ZjOiB2XG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IHYsXG4gIGNvbG9yOiB2LFxuICBmb250RmFtaWx5OiB2LFxuICBmb250U2l6ZTogdixcbiAgZm9udFdlaWdodDogdixcbiAgbWFyZ2luOiB2LFxuICBwYWRkaW5nOiB2LFxuICBsZXR0ZXJTcGFjaW5nOiB2LFxuICBsaW5lSGVpZ2h0OiB2LFxuICBoaWRlSWNvbjogdlxufSk7XG5jb25zdCBqID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIHJyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgbnIgPSB6JDEub2JqZWN0KHsgdHlwZTogcnIgfSksIG9yID0gai5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSksIGlyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IG9yLFxuICBlbGVtZW50VHlwZTogbXQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIHNyID0gai5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgYXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogc3IsXG4gIG1lc3NhZ2U6IEksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBjciA9IGouZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKSwgbHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogY3IsXG4gIGVsZW1lbnRUeXBlOiB5dCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHVyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IElcbn0pLCBkciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChqLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBJLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB2LFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoRWUpXG59KSwgcHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGZyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pLCBsZSA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IEksXG4gIGxhc3ROYW1lOiBJLFxuICBlbWFpbDogSSxcbiAgemlwQ29kZTogSSxcbiAgY291bnRyeTogSSxcbiAgcHJvbW90aW9uQ29kZTogdlxufSksIG1yID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogdixcbiAgbGFzdE5hbWU6IHYsXG4gIGVtYWlsOiBJLFxuICB6aXBDb2RlOiBJLFxuICBjb3VudHJ5OiBJLFxuICBwcm9tb3Rpb25Db2RlOiB2LFxuICBhZGRyZXNzOiB2LFxuICBjaXR5OiB2LFxuICBzdGF0ZTogdlxufSksIHlyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCBociA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB5cixcbiAgc2Vzc2lvbklkOiBJLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IHZcbn0pLmV4dGVuZChsZS5zaGFwZSksIF9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgZ3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSksIHdyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBucixcbiAgaXIsXG4gIGFyLFxuICBscixcbiAgdXIsXG4gIGRyLFxuICBocixcbiAgX3IsXG4gIGdyLFxuICBwcixcbiAgZnJcbl0pLCBiciA9IHokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiB3cixcbiAgbm9uY2U6IEksXG4gIGZvcm1JZDogSSxcbiAgZWxlbWVudElkOiBJXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IElcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCB4ZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSksIHZyID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFciA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkodnIpXG59KSwgU3IgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMCkgfSksXG4gIEVyXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBFZSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbGUsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFIoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogRWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgTiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKE4gfHwge30pO1xuY29uc3QgQ3IgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBrciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGh0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBSKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIFByID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBBciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheSh0ciksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBSKHhlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBSKHokMS5hcnJheShodCkpXG59KSwgSXIgPSAodCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaSA9IHB0LnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHJbaV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmIChyW2ldID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCByO1xufSwgT3IgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBSciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBUciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIFNlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIFllKCkgfHwgYXdhaXQgX3QoNTAwKTtcbiAgaWYgKCFZZSgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIE1yID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IFNlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKHIpLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgRHIgPSBhc3luYyAodCwgciwgZSwgbiwgaSkgPT4ge1xuICBjb25zdCBzID0gYXdhaXQgU2UodCksIGEgPSBUcltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIHMucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiByLFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBfdCA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBzZXRUaW1lb3V0KHIsIHQpO1xufSksIFllID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIEZyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChyLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgbiksIHIobik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgbik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChuKSB7XG4gICAgZShuKTtcbiAgfVxufSksIExyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IG4gPSBhd2FpdCAoYXdhaXQgU2UodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiByLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChuLmVycm9yKVxuICAgIHRocm93IHIuY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke24uZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIHIuY29tcGxldGUoXCJzdWNjZXNzXCIpLCBuO1xufSwgTnIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBTZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gKGkgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGF0dXM7XG4gIGlmIChuID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyBuID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChzID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWVzc2FnZSkgPz8gKChjID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBqciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgb2UgPSAodCwgcikgPT4gQXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChpLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBzLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLmksIFthXTogcy52YWx1ZSB9IDogaTtcbn0sIHt9KSwgVXIgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBici5wYXJzZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIHQsIHIpLCByO1xuICB9XG59LCB4ciA9IGFzeW5jICh0KSA9PiB7XG4gIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8ICF0KSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IHsgdHlwZTogXCJwaW5nXCIgfSwgZSA9IGF3YWl0IHQuc2VuZChyKTtcbiAgICBpZiAoZSAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHIpLCAhMTtcbiAgfVxufSwgJHIgPSAodCwgcikgPT4gISF0ICYmIHIsIF8gPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSk7XG5jb25zdCBWciA9IHokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBndCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogXyh6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogXyh6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogXyh6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IF8oeiQxLm51bWJlcigpKVxufSksIHd0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBfKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogXyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgcXIgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSwgR3IgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogXyhxcilcbn0pLCB1ZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogXyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCB6ciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogXyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBfKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KHpyKSxcbiAgdHJpYWxfc3RhcnQ6IF8oeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBfKHokMS5zdHJpbmcoKSlcbn0pLCBidCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgS3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShidCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBIciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IGd0XG59KSwgV3IgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoSHIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IF8oeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShLciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoYnQpXG59KSwgS2UgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFlyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShXcilcbn0pLCB2dCA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBLZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBfKEtlKSxcbiAgY291cG9uczogeiQxLmFycmF5KGd0KVxufSksIEhlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkod3QpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogR3IsXG4gIHN1YnNfcHJldmlldzogXyh2dCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KHVlKVxufSksIEV0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoSGUuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChIZS5zaGFwZSlcbl0pLCBaciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBKciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW0V0LCBaciwgSnJdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheSh3dCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IF8oeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFFyKTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgZW4gPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHRuID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShlbiksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBybiA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IF8oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHRuLm9wdGlvbmFsKClcbn0pLmV4dGVuZChYci5zaGFwZSkuZXh0ZW5kKHJuLnNoYXBlKTtcbmNvbnN0IFN0ID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogXyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IG1yLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHVlXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogdWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3Qgbm4gPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBfKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogXyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBfKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBfKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IF8oeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IF8oeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IF8oeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogXyh6JDEuYm9vbGVhbigpKVxufSk7XG5jb25zdCBvbiA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBfKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBfKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHNuID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBhbih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIGNuKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBsbiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIHVuID0gZnVuY3Rpb24odCkge1xuICBsbihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBhbihzLCBpLnByb3RvdHlwZSksIGNuKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBDdCBleHRlbmRzIHVuIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IFQgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAocG4obikpXG4gICAgdGhyb3cgbmV3IEN0KG4pO1xuICBpZiAoIWRuKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIGRuID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIHBuID0gKHQpID0+IFZyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBmbiA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIHZ0KSwgVyA9IGFzeW5jICh0KSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBFdCksIENlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIFN0KSwgbW4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIG5uKSwgeW4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIFN0KSwgSCA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEFyKSwgaG4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVChcbiAgdCxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiByIH0sXG4gIFByXG4pLCBfbiA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBmbih0LCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLFxuICAgIHByb21vdGlvbl9jb2RlOiBlXG4gIH0pLCBpID0gbmV3IFNldChuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChpLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7aS5zaXplfWApO1xuICBjb25zdCBzID0gaS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgYSA9IHNuKG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IHMsXG4gICAgYW1vdW50QXRvbTogYVxuICB9O1xufSwga2UgPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBpZiAoZSlcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgbiA9IG4gfHwgdm9pZCAwO1xuICAgIGNvbnN0IGkgPSBhd2FpdCBfbih0LCByLCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBpLmFtb3VudEF0b20sIGN1cnJlbmN5OiBpLmN1cnJlbmN5IH07XG4gIH1cbn0sIGduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKHQuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKHQudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBUKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHIgfSwgU3IpXG4gICAgKVxuICApO1xufSwgV2UgPSBhc3luYyAodCwgcikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IHIgfSwgeGUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGUsIEpTT04uc3RyaW5naWZ5KGUpKSwgZTtcbiAgfVxufSwgd24gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogciB9LCBCciksIFBlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHIgfSwgeGUpLCBrdCA9IDFlMywgYm4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zb2xlLmxvZyhyKTtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IGt0LFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgVChuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgQ3IpO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBpKSwgaTtcbn0sIHZuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInVwZGF0ZV9jaGVja291dF9jdXN0b21lclwiLCBwYXlsb2FkOiByIH0sIG9uKTtcbmZ1bmN0aW9uICRlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3Qgc2UgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBpID0gYXdhaXQgdChyKTtcbiAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGkucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFkoaSkpO1xuICB9XG59LCBBZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gayhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICByZXR1cm4gbihlKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogWShlKSB9O1xuICB9XG59LCBrID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2ZlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7ZmUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtmZS5yZWQuYm9sZChcIm9qcy9cIil9JHtmZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IERpLCBlcnJfXzogRW4gfSA9IGsoXCJjb21tb25cIiksIFZlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgYWUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdC5maW5kKChuKSA9PiByLnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFlKVxuICAgIHRocm93IEVuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIHQpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHIucGFyc2UoZSk7XG59LCBTbiA9ICh0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHQuZW1haWwsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgemlwX2NvZGU6IHQuemlwQ29kZSxcbiAgICBjb3VudHJ5OiB0LmNvdW50cnlcbiAgfSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHQuZmlyc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB0Lmxhc3ROYW1lXG59KSwgeyBsb2dfXzogUHQsIGVycl9fOiBBdCB9ID0gayhcImNvbW1vbi1jY1wiKSwgY2UgPSAodCwgciwgZSkgPT4ge1xuICBpZiAoZSkge1xuICAgIFB0KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICBmb3IgKGNvbnN0IFtpLCBzXSBvZiBPYmplY3QuZW50cmllcyhlKSlcbiAgICAgIHRbaV0gfHwgKHRbaV0gPSBzKTtcbiAgfVxuICBjb25zdCBuID0gbGUuc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBuLmVycm9yLmZvcm1hdCgpLCBzID0gSXIoaSk7XG4gICAgZm9yIChjb25zdCBbYSwgY10gb2YgT2JqZWN0LmVudHJpZXMocykpXG4gICAgICByKGEsIGMsIGEpO1xuICAgIHRocm93IEF0KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBDbiA9ICh0LCByKSA9PiB7XG4gIGZvciAoY29uc3QgZSBvZiB0KVxuICAgIGlmIChlLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgZS5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBpID0geXQuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICBBdChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgcihzLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBQdChgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoZS5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgWmUgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogUywgZXJyX186IGtuIH0gPSBrKFwic3RyaXBlLWxpbmtcIiksIFBuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEFuID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEluID0gQWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBTKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbik7XG4gICAgUyhcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFcoaSksIGEgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBTKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBrZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB7IGVsZW1lbnRzOiB1LCBzdHJpcGU6IGwgfSA9IGF3YWl0IE1yKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgUyhcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgcCA9IHUuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIG0gPSAoKSA9PiB7XG4gICAgICBwLm1vdW50KGAjJHtaZX1gKTtcbiAgICB9LCBnID0gKCkgPT4ge1xuICAgICAgcC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IFMoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKFMoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIG0oKSksIHAub24oXCJjbGlja1wiLCBhc3luYyAoZikgPT4ge1xuICAgICAgaWYgKFMoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIFMoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGYucmVzb2x2ZSgpO1xuICAgIH0pLCBwLm9uKFwiY29uZmlybVwiLCBhc3luYyAoZikgPT4ge1xuICAgICAgUyhcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgbC5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IHUsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZi5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHkuZXJyb3IgPyAoa24oXCJlcnJvclwiLCB5LmVycm9yKSwgci5nZXQub25DaGVja291dEVycm9yKHkuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKFMoXCJwYXltZW50TWV0aG9kXCIsIHkucGF5bWVudE1ldGhvZCksIEwuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogeS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogbSxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IGcsXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBUbihaZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBPbiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIFMoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBTKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBhID0gUm4oZSwgaS5zdHJpcGVQTSksIGMgPSBjZShhLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgUyhcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCB1ID0gYXdhaXQgQ2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGkuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1tkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1tkLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1tkLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgUyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBwID0gQW4ucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgbSA9IGF3YWl0IFcocyk7XG4gICAgaWYgKG0ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBTKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGcgPSBhd2FpdCBIKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVmUoZykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgUyhcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgZyA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1tkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbZC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbZC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IG0ubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IG0uYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShzLCBnKSB9O1xuICAgIH1cbiAgfVxuKSwgUm4gPSAodCwgcikgPT4ge1xuICB2YXIgYSwgYywgdSwgbCwgcDtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKGMgPSAoYSA9IHIuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbZC5GSVJTVF9OQU1FXSA9IGVbZC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkxBU1RfTkFNRV0gPSBlW2QuTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKCh1ID0gci5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogdS5lbWFpbCkgfHwgci5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoKGwgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogbC5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKChwID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHAuY291bnRyeSkgfHwgXCJVU1wiLCBTKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgVG4gPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgY29uc3QgZSA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7XG4gICAgbiA/IHIobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk7XG4gIH07XG4gIGUoKTtcbn0pLCBNbiA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWV7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIERuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgci5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtNbn1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt0fVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBuID0gZS5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbi5hcHBlbmRDaGlsZChyLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBzID0gbi5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLCB7IGhvc3Q6IGUsIGlmcmFtZTogaSwgY2FuY2VsQnV0dG9uOiBzIH07XG59O1xuZnVuY3Rpb24gRm4odCwgciwgZSkge1xuICBjb25zdCBuID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgYm4odCwgZSk7XG4gICAgICBzICYmIChjbGVhckludGVydmFsKGkpLCByKHMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG4oKTtcbiAgY29uc3QgaSA9IHNldEludGVydmFsKG4sIGt0KTtcbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBMbih7XG4gIGVsZW1lbnRzOiB0LFxuICBwb2xsaW5nSW50ZXJ2YWw6IHIsXG4gIHJlc29sdmU6IGVcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHIpLCB0Lmhvc3QucmVtb3ZlKCksIGUoeyBzdGF0dXM6IE4uQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gdC5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgdC5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gSWUodCkge1xuICBjb25zdCB7IHVybDogciwgYmFzZVVybDogZSB9ID0gdCwgbiA9IERuKHIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGkpID0+IHtcbiAgICBjb25zdCBzID0gKHUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBuLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBpKHUpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIGEgPSBGbihuLmlmcmFtZSwgcywgbmV3IFVSTChlKS5vcmlnaW4pLCBjID0gTG4oe1xuICAgICAgZWxlbWVudHM6IG4sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IGEsXG4gICAgICByZXNvbHZlOiBpXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgSXQgPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgSWUodCk7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gci5zdGF0dXMgIT09IE4uU1VDQ0VTUyAmJiAkZShyLnN0YXR1cyksIHtcbiAgICBocmVmOiByLmhyZWZcbiAgfTtcbn0sIE5uID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdy5vcGVuKHIsIFwiX2JsYW5rXCIpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiBlO1xufSwgam4gPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBpIH0gPSBrKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGEpID0+IHtcbiAgICBjb25zdCBjID0gTm4odCwgbiksIHUgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsID0gYXdhaXQgaG4ociwgZSk7XG4gICAgICAgIGlmIChsLnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh1KSwgYy5jbG9zZSgpLCBzKHsgaHJlZjogbC5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgaShZKGwpKSwgY2xlYXJJbnRlcnZhbCh1KSwgYShZKGwpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IFVuLCBlcnJfXzogT3QgfSA9IGsoXCJwb2NreXQtY2NcIiksIHhuID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgJG4gPSAodCkgPT4ge1xuICBjb25zdCByID0geG4uc2FmZVBhcnNlKHQpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBPdChuKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBSdCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gVW4oYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3J9XWApLCByO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgZSA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IE90KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7WShyKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCBWbiA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBxbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSAkbihyKSwgbiA9IGF3YWl0IEl0KHsgdXJsOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBSdChuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogZVtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGVbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogR24sIGVycl9fOiBxZSB9ID0gayhcImFpcndhbGxleC1jY1wiKSwgem4gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBZbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB6bi5zYWZlUGFyc2UodCk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IHFlKG4pLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIEtuID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIEhuID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBHbihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgcWUoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtZKHIpfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIFduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IFluKHIpLCBuID0gYXdhaXQgSXQoeyB1cmw6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogdCB9KSwgaSA9IEhuKG4uaHJlZiA/PyBcIlwiKSwgcyA9IGVbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChzICE9PSBpKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgdSA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke3N9KS5gO1xuICAgIHRocm93IHFlKHUpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGksXG4gICAgICBjb25zZW50X2lkOiBlW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiBiLCBlcnJfXzogSmUgfSA9IGsoXCJjb21tb24tY2NcIiksIHsgbG9nX186IEJlIH0gPSBrKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBabiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBsO1xuICAgIGIoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogciB9KTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgVyhzKTtcbiAgICBiKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IGNlKGUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgdSA9IHtcbiAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge31cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBiKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGduKGkuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKENuKHAsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgYihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHthLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IHduKHMsIHUpO1xuICAgICAgICByZXR1cm4gYihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke20ucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBtIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IFdlKHMsIHUpO1xuICAgICAgICByZXR1cm4gYihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogbSB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIGlmIChwIGluc3RhbmNlb2YgQ3QgJiYgcC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBiKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgYihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCBtID0gVm4ocC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICBiKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBxbih0LmJhc2VVcmwsIHAucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgdS5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChLbihwLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgYihcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgV24odC5iYXNlVXJsLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHUuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gdztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmID0gYXdhaXQgbW4ocywgdSk7XG4gICAgICAgIGIoXCLilJwgUGF5bWVudCBmbG93IHJlc3VsdDpcIiwgZik7XG4gICAgICAgIGNvbnN0IHkgPSAoKGwgPSBwLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiBsW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICBtID8gYihcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogeSA/IChiKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgWG4oZikpIDogKGIoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBRbihmLCB0LmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgaCA9IGYuY2NfcG1faWQ7XG4gICAgICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIGIoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7aH1dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IEgocywge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBiKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIHcpO1xuICAgICAgICAgIGNvbnN0IFAgPSBWZSh3KTtcbiAgICAgICAgICByZXR1cm4gYihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke1AucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBQIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYihg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHt5ID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBXZShzLCB7XG4gICAgICAgICAgICAuLi51LFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGgsXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB5XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGIoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHcgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgSmUoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIEplKHApLCBwO1xuICAgIH1cbiAgfVxuKSwgSm4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIE9yLnBhcnNlKHIpO1xufSwgQm4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIGtyLnBhcnNlKHIpO1xufSwgUW4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gQm4odCk7XG4gIGlmIChlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiICYmIGUucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgYihcIuKUnCBBaXJ3YWxsZXggM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IEllKHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogciB9KTtcbiAgaWYgKGIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBOLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IE4uRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIFhuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IEpuKHQpO1xuICBCZShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtyLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgTnIociksIEJlKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgeyBsb2dfXzogTywgZXJyX186IGVvIH0gPSBrKFwic3RyaXBlLXByXCIpLCB0byA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgcm8gPSBBZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCB9KSA9PiB7XG4gICAgTyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBhZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHRvKTtcbiAgICBPKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIG4gPSBhd2FpdCBXKGUpLCBpID0gbi5tb2RlID09PSBcInNldHVwXCI7XG4gICAgTyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQga2UoZSwgbi50b2tlbiwgaSwgdm9pZCAwKSwgYSA9IGF3YWl0IERyKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgTyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGEuY2FuTWFrZVBheW1lbnQoKTtcbiAgICByZXR1cm4gYyA9PT0gbnVsbCA/IChlbyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH0pIDogKE8oXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgYyksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBhLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiksIG5vID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICBpbml0UmVzdWx0OiBzXG4gIH0pID0+IHtcbiAgICBpZiAoTyhcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGkucHJvdmlkZXIgIT09IHIucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2kucHJvdmlkZXJ9LCBnb3QgJHtyLnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBzLnByO1xuICAgIGlmIChpICE9IG51bGwgJiYgaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCB5ID0gaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgTyhcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgeSksIGlvKGMsIHkuYW1vdW50LCB5LnBlbmRpbmcsIHkuc3RyaXBlQXBwbGVQYXkpO1xuICAgIH1cbiAgICBPKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IHUgPSBhd2FpdCBGcihjKTtcbiAgICBPKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCB1KSwgTyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgbCA9IG9vKGUsIHUpLCBwID0gY2UobCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIE8oXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiLCBwKTtcbiAgICBjb25zdCBtID0gYXdhaXQgeW4oYSwge1xuICAgICAgZmllbGRzOiBwLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByXG4gICAgfSksIGcgPSBzbyhtKTtcbiAgICBPKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgTHIoZywgdSk7XG4gICAgY29uc3QgZiA9IGF3YWl0IFcoYSk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBPKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgeSA9IGF3YWl0IEgoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFZlKHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIE8oXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgeSA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBwW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogcFtkLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBwW2QuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogcFtkLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogcFtkLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogcFtkLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZi5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZi5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFBlKGEsIHkpIH07XG4gICAgfVxuICB9XG4pLCBvbyA9ICh0LCByKSA9PiB7XG4gIHZhciB1LCBsLCBwLCBtO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtuLCAuLi5pXSA9ICgobCA9ICh1ID0gci5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiB1LnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgYSA9IChtID0gKHAgPSByLnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBwLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYWRkcmVzcywgYyA9IHIuc2hpcHBpbmdBZGRyZXNzO1xuICByZXR1cm4gZVtkLkZJUlNUX05BTUVdID0gZVtkLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuTEFTVF9OQU1FXSA9IGVbZC5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuRU1BSUxdID0gZVtkLkVNQUlMXSB8fCByLnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5wb3N0YWxfY29kZSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuY291bnRyeSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY291bnRyeSkgfHwgXCJVU1wiLCBPKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgaW8gPSAodCwgciwgZSwgbikgPT4ge1xuICB0LnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogci5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGVcbiAgICB9LFxuICAgIGN1cnJlbmN5OiByLmN1cnJlbmN5LFxuICAgIGFwcGxlUGF5OiBuXG4gIH0pO1xufSwgc28gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gUnIucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgeyBsb2dfXzogViwgZXJyX186IFFlIH0gPSBrKFwicG9ja3l0LXBheXBhbFwiKSwgYW8gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pLCBjbyA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIGxvID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHksIGg7XG4gICAgVihcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBXKHMpO1xuICAgIFYoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhby5wYXJzZShyKTtcbiAgICBWKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCB1ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncywgbCA9IGNlKFxuICAgICAgZSxcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdSA9PSBudWxsID8gdm9pZCAwIDogdS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBwID0gU24obCk7XG4gICAgVihgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7YS5tb2RlfWApO1xuICAgIGNvbnN0IG0gPSBhLm1vZGUgIT09IFwic2V0dXBcIiwgZyA9IGF3YWl0IENlKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbSA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYS5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGEuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhISgoeSA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc2V0dGluZ3MpICE9IG51bGwgJiYgeS51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB9LFxuICAgICAgLi4ucFxuICAgIH0pO1xuICAgIGlmIChWKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGcpLCAhZy5jaGVja291dF9hdHRlbXB0X2lkKVxuICAgICAgdGhyb3cgUWUoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZXNwb25zZTpcIiwgZyksIG5ldyBFcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjaGVja291dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIGNvbnN0IGYgPSBjby5wYXJzZShnLnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF07XG4gICAgaWYgKChoID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncykgIT0gbnVsbCAmJiBoLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZi5wYXlwYWxfaWZyYW1lX3VybCwgYXdhaXQgX3QoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB7XG4gICAgICBWKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgICAgY29uc3QgdyA9IGF3YWl0IGpuKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBzLFxuICAgICAgICBmLnZlcmlmeV90b2tlbixcbiAgICAgICAgZi5wYXlwYWxfaWZyYW1lX3VybFxuICAgICAgKTtcbiAgICAgIFYoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgdyk7XG4gICAgICBjb25zdCBQID0gUnQody5ocmVmKTtcbiAgICAgIFYoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7UH1gKTtcbiAgICAgIGNvbnN0IEUgPSBhd2FpdCBIKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgICB0aGVpcl9wbV9pZDogUCxcbiAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbSA/IGcuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICBpZiAoVihcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBFKSwgYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IEUucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgaWYgKCFFLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBRZShcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIEUpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBFLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKSwgVHQgPSAoe1xuICBnYXRld2F5OiB0LFxuICBnYXRld2F5TWVyY2hhbnRJZDogcixcbiAgbWVyY2hhbnROYW1lOiBlLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogaSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xufSkgPT4ge1xuICB2YXIgcCwgbTtcbiAgY29uc3QgYSA9ICgocCA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogcC5hbW91bnRBdG9tKSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnRBdG9tKSA/PyAwLCBjID0gTWF0aC5tYXgoYSAvIDEwMCwgMCksIHUgPSAoKChtID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBtLmN1cnJlbmN5KSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5jdXJyZW5jeSkgPz8gXCJVU0RcIikudG9VcHBlckNhc2UoKSwgbCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IHQsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBUT0RPOiBhc2FwIGZvciBwcm9kIC0gYWlyd2FsbGV4IGhhcyBubyBkb2NzIGZvciB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbiA/PyBcIlwiLFxuICAgICAgLy8gQkNSMkRONFRYN0kzRlJSSlxuICAgICAgbWVyY2hhbnROYW1lOiBlXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IHUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBzICE9IG51bGwgJiYgcy5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IGMudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHMgIT0gbnVsbCAmJiBzLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID8geyAuLi5sLCAuLi5zLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBsO1xufSwgdW8gPSAoKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgZS5zcmMgPSBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIiwgZS5hc3luYyA9ICEwLCBlLm9ubG9hZCA9ICgpID0+IHQoKSwgZS5vbmVycm9yID0gKCkgPT4gcihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBHb29nbGUgUGF5IFNES1wiKSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7XG59KSwgcG8gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiByID8gaHQucGFyc2UocikgOiBudWxsO1xufSwgZm8gPSAodCwgcikgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBuID0gKHMgPSAoaSA9IHIucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBpLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzO1xuICBpZiAobikge1xuICAgIGNvbnN0IFt1LCAuLi5sXSA9ICgoYyA9IChhID0gbi5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBwID0gbC5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgci5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbZC5DT1VOVFJZXSA9IGVbZC5DT1VOVFJZXSB8fCBuLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgZVtkLkFERFJFU1NdID0gZVtkLkFERFJFU1NdIHx8IG4uYWRkcmVzczEgfHwgXCJcIiwgZVtkLkNJVFldID0gZVtkLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgZVtkLlpJUF9DT0RFXSA9IGVbZC5aSVBfQ09ERV0gfHwgbi5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgZVtkLlNUQVRFXSA9IGVbZC5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgZVtkLkZJUlNUX05BTUVdID0gZVtkLkZJUlNUX05BTUVdIHx8IHUgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuTEFTVF9OQU1FXSA9IGVbZC5MQVNUX05BTUVdIHx8IHAgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICB9XG4gIHJldHVybiBlO1xufSwgeyBsb2dfXzogTSwgZXJyX186IHRlIH0gPSBrKFwiYXd4LWdvb2dsZS1wYXlcIik7XG5sZXQgUmUgPSBudWxsO1xuY29uc3QgTXQgPSAodCkgPT4gdCA9PT0gZHQgfHwgdCA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCIsIER0ID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IE10KHQpO1xuICByZXR1cm4gUmUgPT09IG51bGwgJiYgKFJlID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICBlbnZpcm9ubWVudDogZSxcbiAgICBtZXJjaGFudEluZm86IHIubWVyY2hhbnRJbmZvXG4gIH0pKSwgUmU7XG59LCBGdCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgbW8gPSBBZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSA9PiB7XG4gICAgdmFyIGEsIGM7XG4gICAgY29uc3QgZSA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRnQpO1xuICAgIGlmICghZSlcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgTShcIkdvb2dsZSBQYXkgQ1BNXCIsIGUpO1xuICAgIGNvbnN0IG4gPSBlLm1ldGFkYXRhO1xuICAgIGlmICghbi5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiB0ZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBpZiAoTShcIkxvYWRpbmcgR29vZ2xlIFBheSBTREsuLi5cIiksIGF3YWl0IHVvKCksICEoKGMgPSAoYSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBhLnBheW1lbnRzKSAhPSBudWxsICYmIGMuYXBpKSlcbiAgICAgIHJldHVybiB0ZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBpZiAoTXQodC5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIW4uZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiB0ZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBNKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1ID0gVHQoe1xuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogbi5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBuLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IG4uZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICBpbml0aWFsUHJldmlldzogdm9pZCAwXG4gICAgICB9KSwgeyByZXN1bHQ6IGwgfSA9IGF3YWl0IER0KHQuYmFzZVVybCwgdSkuaXNSZWFkeVRvUGF5KFxuICAgICAgICB1XG4gICAgICApO1xuICAgICAgaWYgKCFsKVxuICAgICAgICByZXR1cm4gTShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIH0gfTtcbiAgICB9IGNhdGNoICh1KSB7XG4gICAgICByZXR1cm4gdGUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCB1KSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBMLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB1ID8/IHt9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICB0ZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBsKSwgci5nZXQub25DaGVja291dEVycm9yKChsID09IG51bGwgPyB2b2lkIDAgOiBsLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIHlvID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIGcsIGYsIHksIGgsIHcsIFA7XG4gICAgTShcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBzID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBGdCksIGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBXKGEpLCB1ID0gcy5tZXRhZGF0YTtcbiAgICBpZiAoIXUucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGwgPSBUdCh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHUucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHUucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHUuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGF3YWl0IGtlKFxuICAgICAgICBhLFxuICAgICAgICBjLnRva2VuLFxuICAgICAgICBjLm1vZGUgPT09IFwic2V0dXBcIixcbiAgICAgICAgdm9pZCAwXG4gICAgICApLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSksIHAgPSBEdCh0LmJhc2VVcmwsIGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBFID0gYXdhaXQgcC5sb2FkUGF5bWVudERhdGEobCk7XG4gICAgICBNKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgRSk7XG4gICAgICBjb25zdCBRID0gZm8oZSwgRSksIEEgPSBjZShcbiAgICAgICAgUSxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApLCBYID0gKGcgPSAobSA9IEUucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBnLnRva2VuO1xuICAgICAgaWYgKCFYKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IHBlID0gYXdhaXQgQ2UoYSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBBW2QuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogQVtkLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBBW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICBwb3N0YWxfY29kZTogQVtkLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5X2NvZGU6IEFbZC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwgZWUgPSBwbyhwZSk7XG4gICAgICBNKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgZWUpO1xuICAgICAgY29uc3QgJCA9IGF3YWl0IEgoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGVlID09IG51bGwgPyB2b2lkIDAgOiBlZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBYXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIE0oXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCAkKTtcbiAgICAgIGxldCBEID0gKHkgPSAoZiA9ICQucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogZlswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuaWQ7XG4gICAgICBjb25zdCBKID0gKGggPSAkLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IGguZmluZChcbiAgICAgICAgKFUpID0+IFUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAoSiAmJiBKLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBNKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgSik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBVIH0gPSBhd2FpdCBJZSh7XG4gICAgICAgICAgdXJsOiBKLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiB0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChNKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtVfV1gKSwgVSA9PT0gTi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChVID09PSBOLkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoSiAmJiAhRCkge1xuICAgICAgICBjb25zdCBVID0gYXdhaXQgSChhLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBKLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBKLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBNKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgVSksIEQgPSAoUCA9ICh3ID0gVS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB3WzBdKSA9PSBudWxsID8gdm9pZCAwIDogUC5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICBpZiAoYy5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB7IHBheW1lbnRfbWV0aG9kX2lkOiBEIH0gfTtcbiAgICAgIHtcbiAgICAgICAgTShcIlN0YXJ0aW5nIG9uZS10aW1lIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICAgICAgY29uc3QgVSA9IHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogITAsXG4gICAgICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogRCxcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBjLmxpbmVfaXRlbXMsXG4gICAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGMuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICAgICAgY3VzdG9tZXJfZW1haWw6IEFbZC5FTUFJTF0sXG4gICAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IEFbZC5aSVBfQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfY291bnRyeTogQVtkLkNPVU5UUlldLFxuICAgICAgICAgIHByb21vdGlvbl9jb2RlOiBBW2QuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IEFbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IEFbZC5MQVNUX05BTUVdXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShhLCBVKSB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgIHRocm93IHRlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIEUpLCBuZXcgRXJyb3IoKEUgPT0gbnVsbCA/IHZvaWQgMCA6IEUubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgaG8gPSAoKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgZS5zcmMgPSBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsIGUuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiLCBlLmFzeW5jID0gITAsIGUub25sb2FkID0gKCkgPT4gdCgpLCBlLm9uZXJyb3IgPSAoKSA9PiByKG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIikpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xufSksIF9vID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHIudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgbiA9IHIuYmlsbGluZ0NvbnRhY3QsIGkgPSByLnNoaXBwaW5nQ29udGFjdCwgcyA9IHsgLi4udCB9O1xuICByZXR1cm4gKGUgfHwgbiB8fCBpKSAmJiAoc1tkLkVNQUlMXSA9IHNbZC5FTUFJTF0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgc1tkLkNPVU5UUlldID0gc1tkLkNPVU5UUlldIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgc1tkLlpJUF9DT0RFXSA9IHNbZC5aSVBfQ09ERV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBzW2QuRklSU1RfTkFNRV0gPSBzW2QuRklSU1RfTkFNRV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmdpdmVuTmFtZSkgfHwgXCJfT1BfVU5LTk9XTlwiLCBzW2QuTEFTVF9OQU1FXSA9IHNbZC5MQVNUX05BTUVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmZhbWlseU5hbWUpIHx8IFwiX09QX1VOS05PV05cIiksIHM7XG59LCBnbyA9IHokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSksIHdvID0gKHQpID0+IGdvLnNhZmVQYXJzZSh0KS5kYXRhLCBibyA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBcIm1lc3NhZ2VcIixcbiAgICAoZSkgPT4ge1xuICAgICAgdmFyIGk7XG4gICAgICBjb25zdCBuID0gd28oZSk7XG4gICAgICAoKGkgPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2VUeXBlKSA9PT0gXCJ3aW5kb3djbG9zaW5nXCIgJiYgKHQoKSwgci5hYm9ydCgpKTtcbiAgICB9LFxuICAgIHtcbiAgICAgIHNpZ25hbDogci5zaWduYWxcbiAgICB9XG4gICksIHtcbiAgICBjbGVhbnVwQ2FuY2VsTGlzdGVuZXI6ICgpID0+IHIuYWJvcnQoKVxuICB9O1xufSwgeyBsb2dfXzogaGUgfSA9IGsoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gdm8odCwgcikge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgQ2Uoci5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogci5ub25DZGVGb3JtSW5wdXRzW2QuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHIubm9uQ2RlRm9ybUlucHV0c1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogci5ub25DZGVGb3JtSW5wdXRzW2QuTEFTVF9OQU1FXSxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IHQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiByLnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0sIGkgPSBuLnBheW1lbnRfc2Vzc2lvbiwgcyA9IG4uY29uc2VudF9pZDtcbiAgICBpZiAoIWkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgaWYgKCFzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICByZXR1cm4gci5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGkpLCBzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgci5zZXNzaW9uLmFib3J0KCksIGU7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIEVvKHQsIHIpIHtcbiAgdmFyIGksIHM7XG4gIGlmICghdC5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBoZShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIHQpO1xuICBjb25zdCB7IHN0YXR1czogZSB9ID0gYXdhaXQgSWUoe1xuICAgIHVybDogdC5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogci5iYXNlVXJsXG4gIH0pO1xuICBpZiAoaGUoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke2V9XWApLCBlID09PSBOLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGUgPT09IE4uRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IEgoci5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogdC50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB0LmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBoZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCAocyA9IChpID0gbi5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBpWzBdKSA9PSBudWxsID8gdm9pZCAwIDogcy5pZDtcbn1cbmFzeW5jIGZ1bmN0aW9uIFNvKHQsIHIsIGUpIHtcbiAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFBlKGUuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogZS5wcmVmaWxsLnRva2VuLFxuICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgIHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfSxcbiAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiAhMCxcbiAgICB1c2VfY29uZmlybWVkX3BtX2lkOiB0LFxuICAgIGxpbmVfaXRlbXM6IGUucHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBlLnByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGN1c3RvbWVyX2VtYWlsOiByW2QuRU1BSUxdLFxuICAgIGN1c3RvbWVyX3ppcF9jb2RlOiByW2QuWklQX0NPREVdLFxuICAgIGN1c3RvbWVyX2NvdW50cnk6IHJbZC5DT1VOVFJZXSxcbiAgICBwcm9tb3Rpb25fY29kZTogcltkLlBST01PVElPTl9DT0RFXVxuICB9KSB9O1xufVxuYXN5bmMgZnVuY3Rpb24gQ28odCwgciwgZSkge1xuICB2YXIgbiwgaSwgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBhID0gdC5wYXltZW50LCBjID0gX28oci5ub25DZGVGb3JtSW5wdXRzLCBhKSwgdSA9IGNlKFxuICAgICAgYyxcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICByLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgYXdhaXQgdm4oci5jb25uZWN0aW9uLCB7XG4gICAgICBlbWFpbDogdVtkLkVNQUlMXSxcbiAgICAgIGZpcnN0X25hbWU6IHVbZC5GSVJTVF9OQU1FXSxcbiAgICAgIGxhc3RfbmFtZTogdVtkLkxBU1RfTkFNRV0sXG4gICAgICB6aXBfY29kZTogdVtkLlpJUF9DT0RFXSxcbiAgICAgIGNvdW50cnk6IHVbZC5DT1VOVFJZXSxcbiAgICAgIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6ICEwXG4gICAgfSk7XG4gICAgY29uc3QgbCA9IGF3YWl0IEgoci5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGUsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGEudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaGUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKTtcbiAgICBsZXQgcCA9IChpID0gKG4gPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IG5bMF0pID09IG51bGwgPyB2b2lkIDAgOiBpLmlkO1xuICAgIGNvbnN0IG0gPSAocyA9IGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogcy5maW5kKFxuICAgICAgKGYpID0+IGYudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChtICE9IG51bGwgJiYgbS5yZWRpcmVjdF91cmwgJiYgbS5jb25zZW50X2lkICYmIG0udGhlaXJfcG1faWQgJiYgKHAgPSBhd2FpdCBFbyhtLCByKSksICFwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgZyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gci5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChnKSwgci5pc1NldHVwTW9kZSA/IHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHsgcGF5bWVudF9tZXRob2RfaWQ6IHAgfSB9IDogYXdhaXQgU28ocCwgdSwgcik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBjID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHIuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYyksIGE7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHosIGVycl9fOiBGZSB9ID0gayhcImF3eC1hcHBsZS1wYXlcIiksIEx0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBrbyA9IEFlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBMdCk7XG4gICAgaWYgKCFlKVxuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB6KFwiTG9hZGluZyBBcHBsZSBQYXkgU0RLLi4uXCIpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBobygpLCB6KFwiQXBwbGUgUGF5IFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIHJldHVybiBGZShcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIiwgcCksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4geihcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBpZiAoeihcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4geihcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBXKGkpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCIsIGMgPSBhd2FpdCBrZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB1ID0gZS5tZXRhZGF0YTtcbiAgICBpZiAoeihcInByb2Nlc3NvckFjY291bnRcIiwgdSksICF1LnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHApID0+IHtcbiAgICAgICAgdmFyIG07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgTC5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgIGlzU2V0dXBNb2RlOiBhLFxuICAgICAgICAgICAgICBwcmVmaWxsOiBzLFxuICAgICAgICAgICAgICBpbml0aWFsUHJldmlldzogKChtID0gcCA9PSBudWxsID8gdm9pZCAwIDogcC5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogbS5hbW91bnQpID8/IGMsXG4gICAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHAgPT0gbnVsbCA/IHZvaWQgMCA6IHAub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChnKSB7XG4gICAgICAgICAgRmUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBnKSwgci5nZXQub25DaGVja291dEVycm9yKChnID09IG51bGwgPyB2b2lkIDAgOiBnLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIFBvID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogaVxuICB9KSA9PiB7XG4gICAgdmFyIEUsIFE7XG4gICAgY29uc3QgcyA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTHQpLCB7IGluaXRpYWxQcmV2aWV3OiBhLCBpc1NldHVwTW9kZTogYywgcHJlZmlsbDogdSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbCB9ID0gbiwgcCA9ICgoKEUgPSBsID09IG51bGwgPyB2b2lkIDAgOiBsLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuY3VycmVuY3kpID8/IGEuY3VycmVuY3kgPz8gXCJVU0RcIikudG9VcHBlckNhc2UoKSwgZyA9ICgoKChRID0gbCA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBRLmFtb3VudEF0b20pID8/IGEuYW1vdW50QXRvbSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKSwgZiA9IHtcbiAgICAgIGxhYmVsOiAobCA9PSBudWxsID8gdm9pZCAwIDogbC5sYWJlbCkgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogbCAhPSBudWxsICYmIGwucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBnXG4gICAgfSwgeSA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IHAsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcbiAgICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICAgIFwic3VwcG9ydHNEZWJpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICAgIF0sXG4gICAgICB0b3RhbDogZixcbiAgICAgIC4uLihsID09IG51bGwgPyB2b2lkIDAgOiBsLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpID8/IHt9XG4gICAgfTtcbiAgICB6KFwiUGF5bWVudCBSZXF1ZXN0XCIsIHkpO1xuICAgIGNvbnN0IGggPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpO1xuICAgIHooXCJBcHBsZVBheVNlc3Npb25cIiwgaCk7XG4gICAgY29uc3QgdyA9IHtcbiAgICAgIHNlc3Npb246IGgsXG4gICAgICBjb25uZWN0aW9uOiB0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogcy5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogYyxcbiAgICAgIGJhc2VVcmw6IHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGksXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICBsZXQgUDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKEEsIFgpID0+IHtcbiAgICAgIGNvbnN0IHBlID0gKCkgPT4ge1xuICAgICAgICB6KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgWChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIHsgY2xlYW51cENhbmNlbExpc3RlbmVyOiBlZSB9ID0gYm8ocGUpO1xuICAgICAgaC5vbmNhbmNlbCA9IHBlLCBoLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICgkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUCA9IGF3YWl0IHZvKCQsIHcpO1xuICAgICAgICB9IGNhdGNoIChEKSB7XG4gICAgICAgICAgWChEKTtcbiAgICAgICAgfVxuICAgICAgfSwgaC5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgJCA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5mIH1cbiAgICAgICAgfTtcbiAgICAgICAgaC5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oJCk7XG4gICAgICB9LCBoLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoJCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IEQgPSBhd2FpdCBDbygkLCB3LCBQKTtcbiAgICAgICAgICBlZSgpLCBBKEQpO1xuICAgICAgICB9IGNhdGNoIChEKSB7XG4gICAgICAgICAgWChEKTtcbiAgICAgICAgfVxuICAgICAgfSwgaC5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChBKSA9PiB7XG4gICAgICB0aHJvdyBGZShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIEEpLCBBO1xuICAgIH0pO1xuICB9XG4pLCBMZSA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSB0LmZpbHRlcigoaSkgPT4ge1xuICAgIGNvbnN0IHMgPSBlID09PSB2b2lkIDAgPyAhMCA6IGkucHJvY2Vzc29yX25hbWUgPT09IGUsIGEgPSBpLnByb3ZpZGVyID09PSByO1xuICAgIHJldHVybiBzICYmIGE7XG4gIH0pO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIGlmIChuLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIHJldHVybiBuWzBdO1xufSwgTCA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBablxuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBybyxcbiAgICBydW46IG5vXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBJbixcbiAgICBydW46IE9uXG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBydW46IGxvXG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBtbyxcbiAgICBydW46IHlvXG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDoga28sXG4gICAgcnVuOiBQb1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcbnZhciBOZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgcmV0dXJuIE5lID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oZSwgbikge1xuICAgIGUuX19wcm90b19fID0gbjtcbiAgfSB8fCBmdW5jdGlvbihlLCBuKSB7XG4gICAgZm9yICh2YXIgaSBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgaSkgJiYgKGVbaV0gPSBuW2ldKTtcbiAgfSwgTmUodCwgcik7XG59O1xuZnVuY3Rpb24gWih0LCByKSB7XG4gIGlmICh0eXBlb2YgciAhPSBcImZ1bmN0aW9uXCIgJiYgciAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIE5lKHQsIHIpO1xuICBmdW5jdGlvbiBlKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0O1xuICB9XG4gIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAoZS5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IGUoKSk7XG59XG5mdW5jdGlvbiBBbyh0LCByLCBlLCBuKSB7XG4gIGZ1bmN0aW9uIGkocykge1xuICAgIHJldHVybiBzIGluc3RhbmNlb2YgZSA/IHMgOiBuZXcgZShmdW5jdGlvbihhKSB7XG4gICAgICBhKHMpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGUgfHwgKGUgPSBQcm9taXNlKSkoZnVuY3Rpb24ocywgYSkge1xuICAgIGZ1bmN0aW9uIGMocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbChuLm5leHQocCkpO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBhKG0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGwobi50aHJvdyhwKSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIGEobSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwocCkge1xuICAgICAgcC5kb25lID8gcyhwLnZhbHVlKSA6IGkocC52YWx1ZSkudGhlbihjLCB1KTtcbiAgICB9XG4gICAgbCgobiA9IG4uYXBwbHkodCwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIE50KHQsIHIpIHtcbiAgdmFyIGUgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoc1swXSAmIDEpIHRocm93IHNbMV07XG4gICAgcmV0dXJuIHNbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIGksIHMsIGEgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBhLm5leHQgPSBjKDApLCBhLnRocm93ID0gYygxKSwgYS5yZXR1cm4gPSBjKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoYVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBhO1xuICBmdW5jdGlvbiBjKGwpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIHUoW2wsIHBdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHUobCkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgYSAmJiAoYSA9IDAsIGxbMF0gJiYgKGUgPSAwKSksIGU7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgaSAmJiAocyA9IGxbMF0gJiAyID8gaS5yZXR1cm4gOiBsWzBdID8gaS50aHJvdyB8fCAoKHMgPSBpLnJldHVybikgJiYgcy5jYWxsKGkpLCAwKSA6IGkubmV4dCkgJiYgIShzID0gcy5jYWxsKGksIGxbMV0pKS5kb25lKSByZXR1cm4gcztcbiAgICAgIHN3aXRjaCAoaSA9IDAsIHMgJiYgKGwgPSBbbFswXSAmIDIsIHMudmFsdWVdKSwgbFswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzID0gbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBlLmxhYmVsKyssIHsgdmFsdWU6IGxbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBlLmxhYmVsKyssIGkgPSBsWzFdLCBsID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbCA9IGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHMgPSBlLnRyeXMsICEocyA9IHMubGVuZ3RoID4gMCAmJiBzW3MubGVuZ3RoIC0gMV0pICYmIChsWzBdID09PSA2IHx8IGxbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobFswXSA9PT0gMyAmJiAoIXMgfHwgbFsxXSA+IHNbMF0gJiYgbFsxXSA8IHNbM10pKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gbFsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobFswXSA9PT0gNiAmJiBlLmxhYmVsIDwgc1sxXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMV0sIHMgPSBsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzICYmIGUubGFiZWwgPCBzWzJdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gc1syXSwgZS5vcHMucHVzaChsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzWzJdICYmIGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsID0gci5jYWxsKHQsIGUpO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIGwgPSBbNiwgcF0sIGkgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gcyA9IDA7XG4gICAgfVxuICAgIGlmIChsWzBdICYgNSkgdGhyb3cgbFsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogbFswXSA/IGxbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGllKHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSByICYmIHRbcl0sIG4gPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbCh0KTtcbiAgaWYgKHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdCAmJiBuID49IHQubGVuZ3RoICYmICh0ID0gdm9pZCAwKSwgeyB2YWx1ZTogdCAmJiB0W24rK10sIGRvbmU6ICF0IH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHIgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5mdW5jdGlvbiB3ZSh0LCByKSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdFtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiB0O1xuICB2YXIgbiA9IGUuY2FsbCh0KSwgaSwgcyA9IFtdLCBhO1xuICB0cnkge1xuICAgIGZvciAoOyAociA9PT0gdm9pZCAwIHx8IHItLSA+IDApICYmICEoaSA9IG4ubmV4dCgpKS5kb25lOyApIHMucHVzaChpLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGEgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGkgJiYgIWkuZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIGJlKHQsIHIsIGUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBpID0gci5sZW5ndGgsIHM7IG4gPCBpOyBuKyspXG4gICAgKHMgfHwgIShuIGluIHIpKSAmJiAocyB8fCAocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsIDAsIG4pKSwgc1tuXSA9IHJbbl0pO1xuICByZXR1cm4gdC5jb25jYXQocyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSk7XG59XG5mdW5jdGlvbiBuZSh0KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgbmUgPyAodGhpcy52ID0gdCwgdGhpcykgOiBuZXcgbmUodCk7XG59XG5mdW5jdGlvbiBJbyh0LCByLCBlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gZS5hcHBseSh0LCByIHx8IFtdKSwgaSwgcyA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIGMoXCJuZXh0XCIpLCBjKFwidGhyb3dcIiksIGMoXCJyZXR1cm5cIiwgYSksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGk7XG4gIGZ1bmN0aW9uIGEoZikge1xuICAgIHJldHVybiBmdW5jdGlvbih5KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHkpLnRoZW4oZiwgbSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKGYsIHkpIHtcbiAgICBuW2ZdICYmIChpW2ZdID0gZnVuY3Rpb24oaCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHcsIFApIHtcbiAgICAgICAgcy5wdXNoKFtmLCBoLCB3LCBQXSkgPiAxIHx8IHUoZiwgaCk7XG4gICAgICB9KTtcbiAgICB9LCB5ICYmIChpW2ZdID0geShpW2ZdKSkpO1xuICB9XG4gIGZ1bmN0aW9uIHUoZiwgeSkge1xuICAgIHRyeSB7XG4gICAgICBsKG5bZl0oeSkpO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIGcoc1swXVszXSwgaCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGwoZikge1xuICAgIGYudmFsdWUgaW5zdGFuY2VvZiBuZSA/IFByb21pc2UucmVzb2x2ZShmLnZhbHVlLnYpLnRoZW4ocCwgbSkgOiBnKHNbMF1bMl0sIGYpO1xuICB9XG4gIGZ1bmN0aW9uIHAoZikge1xuICAgIHUoXCJuZXh0XCIsIGYpO1xuICB9XG4gIGZ1bmN0aW9uIG0oZikge1xuICAgIHUoXCJ0aHJvd1wiLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBnKGYsIHkpIHtcbiAgICBmKHkpLCBzLnNoaWZ0KCksIHMubGVuZ3RoICYmIHUoc1swXVswXSwgc1swXVsxXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIE9vKHQpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgZTtcbiAgcmV0dXJuIHIgPyByLmNhbGwodCkgOiAodCA9IHR5cGVvZiBpZSA9PSBcImZ1bmN0aW9uXCIgPyBpZSh0KSA6IHRbU3ltYm9sLml0ZXJhdG9yXSgpLCBlID0ge30sIG4oXCJuZXh0XCIpLCBuKFwidGhyb3dcIiksIG4oXCJyZXR1cm5cIiksIGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUpO1xuICBmdW5jdGlvbiBuKHMpIHtcbiAgICBlW3NdID0gdFtzXSAmJiBmdW5jdGlvbihhKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYywgdSkge1xuICAgICAgICBhID0gdFtzXShhKSwgaShjLCB1LCBhLmRvbmUsIGEudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBpKHMsIGEsIGMsIHUpIHtcbiAgICBQcm9taXNlLnJlc29sdmUodSkudGhlbihmdW5jdGlvbihsKSB7XG4gICAgICBzKHsgdmFsdWU6IGwsIGRvbmU6IGMgfSk7XG4gICAgfSwgYSk7XG4gIH1cbn1cbmZ1bmN0aW9uIEModCkge1xuICByZXR1cm4gdHlwZW9mIHQgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gT2UodCkge1xuICB2YXIgciA9IGZ1bmN0aW9uKG4pIHtcbiAgICBFcnJvci5jYWxsKG4pLCBuLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH0sIGUgPSB0KHIpO1xuICByZXR1cm4gZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZSwgZTtcbn1cbnZhciBUZSA9IE9lKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBlID8gZS5sZW5ndGggKyBgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG5gICsgZS5tYXAoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgbi50b1N0cmluZygpO1xuICAgIH0pLmpvaW4oYFxuICBgKSA6IFwiXCIsIHRoaXMubmFtZSA9IFwiVW5zdWJzY3JpcHRpb25FcnJvclwiLCB0aGlzLmVycm9ycyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHZlKHQsIHIpIHtcbiAgaWYgKHQpIHtcbiAgICB2YXIgZSA9IHQuaW5kZXhPZihyKTtcbiAgICAwIDw9IGUgJiYgdC5zcGxpY2UoZSwgMSk7XG4gIH1cbn1cbnZhciBkZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IHIsIHRoaXMuY2xvc2VkID0gITEsIHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBlLCBuLCBpLCBzO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gITA7XG4gICAgICB2YXIgYSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgIGlmIChhKVxuICAgICAgICBpZiAodGhpcy5fcGFyZW50YWdlID0gbnVsbCwgQXJyYXkuaXNBcnJheShhKSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IGllKGEpLCB1ID0gYy5uZXh0KCk7ICF1LmRvbmU7IHUgPSBjLm5leHQoKSkge1xuICAgICAgICAgICAgICB2YXIgbCA9IHUudmFsdWU7XG4gICAgICAgICAgICAgIGwucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgIHIgPSB7IGVycm9yOiBoIH07XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHUgJiYgIXUuZG9uZSAmJiAoZSA9IGMucmV0dXJuKSAmJiBlLmNhbGwoYyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhLnJlbW92ZSh0aGlzKTtcbiAgICAgIHZhciBwID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICBpZiAoQyhwKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwKCk7XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBzID0gaCBpbnN0YW5jZW9mIFRlID8gaC5lcnJvcnMgOiBbaF07XG4gICAgICAgIH1cbiAgICAgIHZhciBtID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIGcgPSBpZShtKSwgZiA9IGcubmV4dCgpOyAhZi5kb25lOyBmID0gZy5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciB5ID0gZi52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFhlKHkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBzID0gcyA/PyBbXSwgaCBpbnN0YW5jZW9mIFRlID8gcyA9IGJlKGJlKFtdLCB3ZShzKSksIHdlKGguZXJyb3JzKSkgOiBzLnB1c2goaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgbiA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZiAmJiAhZi5kb25lICYmIChpID0gZy5yZXR1cm4pICYmIGkuY2FsbChnKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocylcbiAgICAgICAgdGhyb3cgbmV3IFRlKHMpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIGlmIChyICYmIHIgIT09IHRoaXMpXG4gICAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICAgIFhlKHIpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgdCkge1xuICAgICAgICAgIGlmIChyLmNsb3NlZCB8fCByLl9oYXNQYXJlbnQodGhpcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgci5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKGUgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogW10pLnB1c2gocik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgcmV0dXJuIGUgPT09IHIgfHwgQXJyYXkuaXNBcnJheShlKSAmJiBlLmluY2x1ZGVzKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoZSkgPyAoZS5wdXNoKHIpLCBlKSA6IGUgPyBbZSwgcl0gOiByO1xuICB9LCB0LnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIGUgPT09IHIgPyB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsIDogQXJyYXkuaXNBcnJheShlKSAmJiB2ZShlLCByKTtcbiAgfSwgdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fZmluYWxpemVycztcbiAgICBlICYmIHZlKGUsIHIpLCByIGluc3RhbmNlb2YgdCAmJiByLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gIH0sIHQuRU1QVFkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gITAsIHI7XG4gIH0oKSwgdDtcbn0oKSwganQgPSBkZS5FTVBUWTtcbmZ1bmN0aW9uIFV0KHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBkZSB8fCB0ICYmIFwiY2xvc2VkXCIgaW4gdCAmJiBDKHQucmVtb3ZlKSAmJiBDKHQuYWRkKSAmJiBDKHQudW5zdWJzY3JpYmUpO1xufVxuZnVuY3Rpb24gWGUodCkge1xuICBDKHQpID8gdCgpIDogdC51bnN1YnNjcmliZSgpO1xufVxudmFyIHh0ID0ge1xuICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gIFByb21pc2U6IHZvaWQgMCxcbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogITEsXG4gIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogITFcbn0sICR0ID0ge1xuICBzZXRUaW1lb3V0OiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgYmUoW3QsIHJdLCB3ZShlKSkpO1xuICB9LFxuICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gKGNsZWFyVGltZW91dCkodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn07XG5mdW5jdGlvbiBWdCh0KSB7XG4gICR0LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgdDtcbiAgfSk7XG59XG5mdW5jdGlvbiBldCgpIHtcbn1cbmZ1bmN0aW9uIF9lKHQpIHtcbiAgdCgpO1xufVxudmFyIEdlID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUpIHtcbiAgICB2YXIgbiA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCBlID8gKG4uZGVzdGluYXRpb24gPSBlLCBVdChlKSAmJiBlLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0gRG8sIG47XG4gIH1cbiAgcmV0dXJuIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBuZXcgamUoZSwgbiwgaSk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKGUpKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHI7XG59KGRlKSwgUm8gPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIE1lKHQsIHIpIHtcbiAgcmV0dXJuIFJvLmNhbGwodCwgcik7XG59XG52YXIgVG8gPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIGUubmV4dChyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgbWUobik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICBlLmVycm9yKHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBtZShuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBtZShyKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChyLmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgci5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBtZShlKTtcbiAgICAgIH1cbiAgfSwgdDtcbn0oKSwgamUgPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgaSkge1xuICAgIHZhciBzID0gdC5jYWxsKHRoaXMpIHx8IHRoaXMsIGE7XG4gICAgaWYgKEMoZSkgfHwgIWUpXG4gICAgICBhID0ge1xuICAgICAgICBuZXh0OiBlID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IG4gPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogaSA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYztcbiAgICAgIHMgJiYgeHQudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGMgPSBPYmplY3QuY3JlYXRlKGUpLCBjLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBhID0ge1xuICAgICAgICBuZXh0OiBlLm5leHQgJiYgTWUoZS5uZXh0LCBjKSxcbiAgICAgICAgZXJyb3I6IGUuZXJyb3IgJiYgTWUoZS5lcnJvciwgYyksXG4gICAgICAgIGNvbXBsZXRlOiBlLmNvbXBsZXRlICYmIE1lKGUuY29tcGxldGUsIGMpXG4gICAgICB9KSA6IGEgPSBlO1xuICAgIH1cbiAgICByZXR1cm4gcy5kZXN0aW5hdGlvbiA9IG5ldyBUbyhhKSwgcztcbiAgfVxuICByZXR1cm4gcjtcbn0oR2UpO1xuZnVuY3Rpb24gbWUodCkge1xuICBWdCh0KTtcbn1cbmZ1bmN0aW9uIE1vKHQpIHtcbiAgdGhyb3cgdDtcbn1cbnZhciBEbyA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogZXQsXG4gIGVycm9yOiBNbyxcbiAgY29tcGxldGU6IGV0XG59LCB6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIEZvKHQpIHtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBMbyh0KSB7XG4gIHJldHVybiB0Lmxlbmd0aCA9PT0gMCA/IEZvIDogdC5sZW5ndGggPT09IDEgPyB0WzBdIDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0LnJlZHVjZShmdW5jdGlvbihuLCBpKSB7XG4gICAgICByZXR1cm4gaShuKTtcbiAgICB9LCBlKTtcbiAgfTtcbn1cbnZhciBLID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHIgJiYgKHRoaXMuX3N1YnNjcmliZSA9IHIpO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gbmV3IHQoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlLm9wZXJhdG9yID0gciwgZTtcbiAgfSwgdC5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHZhciBpID0gdGhpcywgcyA9IGpvKHIpID8gciA6IG5ldyBqZShyLCBlLCBuKTtcbiAgICByZXR1cm4gX2UoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYSA9IGksIGMgPSBhLm9wZXJhdG9yLCB1ID0gYS5zb3VyY2U7XG4gICAgICBzLmFkZChjID8gYy5jYWxsKHMsIHUpIDogdSA/IGkuX3N1YnNjcmliZShzKSA6IGkuX3RyeVN1YnNjcmliZShzKSk7XG4gICAgfSksIHM7XG4gIH0sIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUocik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgci5lcnJvcihlKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihyLCBlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIHJldHVybiBlID0gdHQoZSksIG5ldyBlKGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIHZhciBhID0gbmV3IGplKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByKGMpO1xuICAgICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICAgIHModSksIGEudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBzLFxuICAgICAgICBjb21wbGV0ZTogaVxuICAgICAgfSk7XG4gICAgICBuLnN1YnNjcmliZShhKTtcbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICByZXR1cm4gKGUgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5zdWJzY3JpYmUocik7XG4gIH0sIHQucHJvdG90eXBlW3plXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0LnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgciA9IFtdLCBlID0gMDsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKylcbiAgICAgIHJbZV0gPSBhcmd1bWVudHNbZV07XG4gICAgcmV0dXJuIExvKHIpKHRoaXMpO1xuICB9LCB0LnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIHJldHVybiByID0gdHQociksIG5ldyByKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHZhciBzO1xuICAgICAgZS5zdWJzY3JpYmUoZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gcyA9IGE7XG4gICAgICB9LCBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBpKGEpO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuKHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBuZXcgdChyKTtcbiAgfSwgdDtcbn0oKTtcbmZ1bmN0aW9uIHR0KHQpIHtcbiAgdmFyIHI7XG4gIHJldHVybiAociA9IHQgPz8geHQuUHJvbWlzZSkgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBObyh0KSB7XG4gIHJldHVybiB0ICYmIEModC5uZXh0KSAmJiBDKHQuZXJyb3IpICYmIEModC5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBqbyh0KSB7XG4gIHJldHVybiB0ICYmIHQgaW5zdGFuY2VvZiBHZSB8fCBObyh0KSAmJiBVdCh0KTtcbn1cbmZ1bmN0aW9uIFVvKHQpIHtcbiAgcmV0dXJuIEModCA9PSBudWxsID8gdm9pZCAwIDogdC5saWZ0KTtcbn1cbmZ1bmN0aW9uIHhvKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICBpZiAoVW8ocikpXG4gICAgICByZXR1cm4gci5saWZ0KGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdChlLCB0aGlzKTtcbiAgICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICAgIHRoaXMuZXJyb3Iobik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZVwiKTtcbiAgfTtcbn1cbmZ1bmN0aW9uICRvKHQsIHIsIGUsIG4sIGkpIHtcbiAgcmV0dXJuIG5ldyBWbyh0LCByLCBlLCBuLCBpKTtcbn1cbnZhciBWbyA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuLCBpLCBzLCBhLCBjKSB7XG4gICAgdmFyIHUgPSB0LmNhbGwodGhpcywgZSkgfHwgdGhpcztcbiAgICByZXR1cm4gdS5vbkZpbmFsaXplID0gYSwgdS5zaG91bGRVbnN1YnNjcmliZSA9IGMsIHUuX25leHQgPSBuID8gZnVuY3Rpb24obCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbihsKTtcbiAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgZS5lcnJvcihwKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX25leHQsIHUuX2Vycm9yID0gcyA/IGZ1bmN0aW9uKGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMobCk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUuZXJyb3IocCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9lcnJvciwgdS5fY29tcGxldGUgPSBpID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpKCk7XG4gICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgIGUuZXJyb3IobCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9jb21wbGV0ZSwgdTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChlID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgfHwgZS5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHI7XG59KEdlKSwgcW8gPSBPZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHF0ID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKCkge1xuICAgIHZhciBlID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGUuY2xvc2VkID0gITEsIGUuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGUub2JzZXJ2ZXJzID0gW10sIGUuaXNTdG9wcGVkID0gITEsIGUuaGFzRXJyb3IgPSAhMSwgZS50aHJvd25FcnJvciA9IG51bGwsIGU7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSBuZXcgcnQodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIG4ub3BlcmF0b3IgPSBlLCBuO1xuICB9LCByLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBxbygpO1xuICB9LCByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBfZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpLCBzO1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uY3VycmVudE9ic2VydmVycyB8fCAobi5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShuLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSBpZShuLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gYS5uZXh0KCk7ICFjLmRvbmU7IGMgPSBhLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHUgPSBjLnZhbHVlO1xuICAgICAgICAgICAgdS5uZXh0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgIGkgPSB7IGVycm9yOiBsIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAocyA9IGEucmV0dXJuKSAmJiBzLmNhbGwoYSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgX2UoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5oYXNFcnJvciA9IG4uaXNTdG9wcGVkID0gITAsIG4udGhyb3duRXJyb3IgPSBlO1xuICAgICAgICBmb3IgKHZhciBpID0gbi5vYnNlcnZlcnM7IGkubGVuZ3RoOyApXG4gICAgICAgICAgaS5zaGlmdCgpLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gdGhpcztcbiAgICBfZShmdW5jdGlvbigpIHtcbiAgICAgIGlmIChlLl90aHJvd0lmQ2xvc2VkKCksICFlLmlzU3RvcHBlZCkge1xuICAgICAgICBlLmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciBuID0gZS5vYnNlcnZlcnM7IG4ubGVuZ3RoOyApXG4gICAgICAgICAgbi5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuICgoZSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKSwgdGhpcy5faW5uZXJTdWJzY3JpYmUoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGkgPSB0aGlzLCBzID0gaS5oYXNFcnJvciwgYSA9IGkuaXNTdG9wcGVkLCBjID0gaS5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIHMgfHwgYSA/IGp0IDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGMucHVzaChlKSwgbmV3IGRlKGZ1bmN0aW9uKCkge1xuICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgdmUoYywgZSk7XG4gICAgfSkpO1xuICB9LCByLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGkgPSBuLmhhc0Vycm9yLCBzID0gbi50aHJvd25FcnJvciwgYSA9IG4uaXNTdG9wcGVkO1xuICAgIGkgPyBlLmVycm9yKHMpIDogYSAmJiBlLmNvbXBsZXRlKCk7XG4gIH0sIHIucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gbmV3IEsoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlO1xuICB9LCByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gbmV3IHJ0KGUsIG4pO1xuICB9LCByO1xufShLKSwgcnQgPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuZGVzdGluYXRpb24gPSBlLCBpLnNvdXJjZSA9IG4sIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4ubmV4dCkgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwIHx8IGkuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uZXJyb3IpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG47XG4gICAgKG4gPSAoZSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuY29tcGxldGUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCB8fCBuLmNhbGwoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgcmV0dXJuIChpID0gKG4gPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5zdWJzY3JpYmUoZSkpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBqdDtcbiAgfSwgcjtcbn0ocXQpLCBHbyA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgem8gPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHJldHVybiB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHI7XG59KGRlKSwgbnQgPSB7XG4gIHNldEludGVydmFsOiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIGJlKFt0LCByXSwgd2UoZSkpKTtcbiAgfSxcbiAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBjbGVhckludGVydmFsKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBZbyA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5zY2hlZHVsZXIgPSBlLCBpLndvcmsgPSBuLCBpLnBlbmRpbmcgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGk7XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSBlO1xuICAgIHZhciBzID0gdGhpcy5pZCwgYSA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBzICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIHMsIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKGkgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChhLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgcmV0dXJuIGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCBudC5zZXRJbnRlcnZhbChlLmZsdXNoLmJpbmQoZSwgdGhpcyksIGkpO1xuICB9LCByLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICBpZiAoaSA9PT0gdm9pZCAwICYmIChpID0gMCksIGkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBpICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgbnQuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgaSA9IHRoaXMuX2V4ZWN1dGUoZSwgbik7XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gaTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgci5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKGUpO1xuICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgIGkgPSAhMCwgcyA9IGEgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBzO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciBlID0gdGhpcywgbiA9IGUuaWQsIGkgPSBlLnNjaGVkdWxlciwgcyA9IGkuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCB2ZShzLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChpLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgcjtcbn0oem8pLCBvdCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIsIGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSB0Lm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHIsIHRoaXMubm93ID0gZTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBlLCBuKSB7XG4gICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHIpLnNjaGVkdWxlKG4sIGUpO1xuICB9LCB0Lm5vdyA9IEdvLm5vdywgdDtcbn0oKSwgS28gPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IG90Lm5vdyk7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5hY3Rpb25zID0gW10sIGkuX2FjdGl2ZSA9ICExLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBuLnB1c2goZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAoaSA9IGUuZXhlY3V0ZShlLnN0YXRlLCBlLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKGUgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgaSkge1xuICAgICAgZm9yICg7IGUgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgZS51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgaTtcbiAgICB9XG4gIH0sIHI7XG59KG90KSwgSG8gPSBuZXcgS28oWW8pLCBXbyA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIFpvKHQpIHtcbiAgcmV0dXJuIEModCA9PSBudWxsID8gdm9pZCAwIDogdC50aGVuKTtcbn1cbmZ1bmN0aW9uIEpvKHQpIHtcbiAgcmV0dXJuIEModFt6ZV0pO1xufVxuZnVuY3Rpb24gQm8odCkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgQyh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiBRbyh0KSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKHQgIT09IG51bGwgJiYgdHlwZW9mIHQgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgdCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24gWG8oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgZWkgPSBYbygpO1xuZnVuY3Rpb24gdGkodCkge1xuICByZXR1cm4gQyh0ID09IG51bGwgPyB2b2lkIDAgOiB0W2VpXSk7XG59XG5mdW5jdGlvbiByaSh0KSB7XG4gIHJldHVybiBJbyh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCBuLCBpLCBzO1xuICAgIHJldHVybiBOdCh0aGlzLCBmdW5jdGlvbihhKSB7XG4gICAgICBzd2l0Y2ggKGEubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGUgPSB0LmdldFJlYWRlcigpLCBhLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGEudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIGEubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCBuZShlLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIG4gPSBhLnNlbnQoKSwgaSA9IG4udmFsdWUsIHMgPSBuLmRvbmUsIHMgPyBbNCwgbmUodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgbmUoaSldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gYS5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIGUucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbmkodCkge1xuICByZXR1cm4gQyh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBvaSh0KSB7XG4gIGlmICh0IGluc3RhbmNlb2YgSylcbiAgICByZXR1cm4gdDtcbiAgaWYgKHQgIT0gbnVsbCkge1xuICAgIGlmIChKbyh0KSlcbiAgICAgIHJldHVybiBpaSh0KTtcbiAgICBpZiAoV28odCkpXG4gICAgICByZXR1cm4gc2kodCk7XG4gICAgaWYgKFpvKHQpKVxuICAgICAgcmV0dXJuIGFpKHQpO1xuICAgIGlmIChCbyh0KSlcbiAgICAgIHJldHVybiBHdCh0KTtcbiAgICBpZiAodGkodCkpXG4gICAgICByZXR1cm4gY2kodCk7XG4gICAgaWYgKG5pKHQpKVxuICAgICAgcmV0dXJuIGxpKHQpO1xuICB9XG4gIHRocm93IFFvKHQpO1xufVxuZnVuY3Rpb24gaWkodCkge1xuICByZXR1cm4gbmV3IEsoZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdFt6ZV0oKTtcbiAgICBpZiAoQyhlLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gZS5zdWJzY3JpYmUocik7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHNpKHQpIHtcbiAgcmV0dXJuIG5ldyBLKGZ1bmN0aW9uKHIpIHtcbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IHQubGVuZ3RoICYmICFyLmNsb3NlZDsgZSsrKVxuICAgICAgci5uZXh0KHRbZV0pO1xuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBhaSh0KSB7XG4gIHJldHVybiBuZXcgSyhmdW5jdGlvbihyKSB7XG4gICAgdC50aGVuKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHIuY2xvc2VkIHx8IChyLm5leHQoZSksIHIuY29tcGxldGUoKSk7XG4gICAgfSwgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSkudGhlbihudWxsLCBWdCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gY2kodCkge1xuICByZXR1cm4gbmV3IEsoZnVuY3Rpb24ocikge1xuICAgIHZhciBlLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBpID0gaWUodCksIHMgPSBpLm5leHQoKTsgIXMuZG9uZTsgcyA9IGkubmV4dCgpKSB7XG4gICAgICAgIHZhciBhID0gcy52YWx1ZTtcbiAgICAgICAgaWYgKHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIGUgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgJiYgIXMuZG9uZSAmJiAobiA9IGkucmV0dXJuKSAmJiBuLmNhbGwoaSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEd0KHQpIHtcbiAgcmV0dXJuIG5ldyBLKGZ1bmN0aW9uKHIpIHtcbiAgICB1aSh0LCByKS5jYXRjaChmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBsaSh0KSB7XG4gIHJldHVybiBHdChyaSh0KSk7XG59XG5mdW5jdGlvbiB1aSh0LCByKSB7XG4gIHZhciBlLCBuLCBpLCBzO1xuICByZXR1cm4gQW8odGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhLCBjO1xuICAgIHJldHVybiBOdCh0aGlzLCBmdW5jdGlvbih1KSB7XG4gICAgICBzd2l0Y2ggKHUubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHUudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCBlID0gT28odCksIHUubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCBlLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IHUuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAoYSA9IG4udmFsdWUsIHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIHUubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSB1LnNlbnQoKSwgaSA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiB1LnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKHMgPSBlLnJldHVybikgPyBbNCwgcy5jYWxsKGUpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUuc2VudCgpLCB1LmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiByLmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkaSh0LCByLCBlLCBuLCBpKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBpID09PSB2b2lkIDAgJiYgKGkgPSAhMSk7XG4gIHZhciBzID0gci5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICBlKCksIGkgPyB0LmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmICh0LmFkZChzKSwgIWkpXG4gICAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBwaSh0LCByKSB7XG4gIHZhciBlID0gQyh0KSA/IHQgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdDtcbiAgfSwgbiA9IGZ1bmN0aW9uKGkpIHtcbiAgICByZXR1cm4gaS5lcnJvcihlKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IEsobik7XG59XG52YXIgZmkgPSBPZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIkVtcHR5RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZVwiO1xuICB9O1xufSk7XG5mdW5jdGlvbiBtaSh0LCByKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBmdW5jdGlvbihhKSB7XG4gICAgICAgIHMgPSBhLCBpID0gITA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IG4sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGkgPyBlKHMpIDogbihuZXcgZmkoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24geWkodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHQpO1xufVxudmFyIGhpID0gT2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IG51bGwpLCB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIF9pKHQsIHIpIHtcbiAgdmFyIGUgPSB5aSh0KSA/IHsgZmlyc3Q6IHQgfSA6IHR5cGVvZiB0ID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IHQgfSA6IHQsIG4gPSBlLmZpcnN0LCBpID0gZS5lYWNoLCBzID0gZS53aXRoLCBhID0gcyA9PT0gdm9pZCAwID8gZ2kgOiBzLCBjID0gZS5zY2hlZHVsZXIsIHUgPSBjID09PSB2b2lkIDAgPyBIbyA6IGMsIGwgPSBlLm1ldGEsIHAgPSBsID09PSB2b2lkIDAgPyBudWxsIDogbDtcbiAgaWYgKG4gPT0gbnVsbCAmJiBpID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4geG8oZnVuY3Rpb24obSwgZykge1xuICAgIHZhciBmLCB5LCBoID0gbnVsbCwgdyA9IDAsIFAgPSBmdW5jdGlvbihFKSB7XG4gICAgICB5ID0gZGkoZywgdSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZi51bnN1YnNjcmliZSgpLCBvaShhKHtcbiAgICAgICAgICAgIG1ldGE6IHAsXG4gICAgICAgICAgICBsYXN0VmFsdWU6IGgsXG4gICAgICAgICAgICBzZWVuOiB3XG4gICAgICAgICAgfSkpLnN1YnNjcmliZShnKTtcbiAgICAgICAgfSBjYXRjaCAoUSkge1xuICAgICAgICAgIGcuZXJyb3IoUSk7XG4gICAgICAgIH1cbiAgICAgIH0sIEUpO1xuICAgIH07XG4gICAgZiA9IG0uc3Vic2NyaWJlKCRvKGcsIGZ1bmN0aW9uKEUpIHtcbiAgICAgIHkgPT0gbnVsbCB8fCB5LnVuc3Vic2NyaWJlKCksIHcrKywgZy5uZXh0KGggPSBFKSwgaSA+IDAgJiYgUChpKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICB5ICE9IG51bGwgJiYgeS5jbG9zZWQgfHwgeSA9PSBudWxsIHx8IHkudW5zdWJzY3JpYmUoKSwgaCA9IG51bGw7XG4gICAgfSkpLCAhdyAmJiBQKG4gIT0gbnVsbCA/IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogK24gLSB1Lm5vdygpIDogaSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2kodCkge1xuICB0aHJvdyBuZXcgaGkodCk7XG59XG5jbGFzcyBnZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IHIgfSwgdGhpcy5fc3ViamVjdC5uZXh0KHIpLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9IChyLCBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogciwgZXJyTXNnOiBlIH0sIHRoaXMuX3N1YmplY3QuZXJyb3Iocik7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9IChyKSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogciwgdGhpcy5zdWJzY3JpYmUgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIHIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KSwgZS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiAkZSh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB7XG4gICAgICAgIGZpcnN0OiByLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHBpKCgpID0+IG5ldyBFcnJvcihyLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBtaSh0aGlzLl9zdWJqZWN0LnBpcGUoX2koZSkpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgcXQoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogd2ksIGVycl9fOiBiaSB9ID0gayhcImluaXQtZmxvd3NcIiksIHllID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBnZSgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogZSxcbiAgICBpbml0aWFsaXplOiBhc3luYyAobikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGUuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBpID0gYXdhaXQgcihuKTtcbiAgICAgICAgd2koYOKclCAke3R9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaSksIGUuc2V0KGkpO1xuICAgICAgfSBjYXRjaCAoaSkge1xuICAgICAgICBiaShg8J2ZrSAke3R9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBZKGkpLCBcIkRldGFpbHM6XCIsIGkpLCBlLnRocm93KGksIFkoaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0sIHZpID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyh0KS5tYXAoKG4pID0+IG4uaW5pdGlhbGl6ZSh7IGNvbnRleHQ6IHIsIGZvcm1DYWxsYmFja3M6IGUgfSkpKTtcbn0sIEVpID0gKCkgPT4gKHtcbiAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAvLyBTdHJpcGUgUFJcbiAgc3RyaXBlUFI6IHllKFwiU3RyaXBlIFBSXCIsIEwuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IHllKFwiU3RyaXBlIExpbmtcIiwgTC5zdHJpcGVMaW5rLmluaXQpLFxuICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gIGFpcndhbGxleEdvb2dsZVBheTogeWUoXCJBaXJ3YWxsZXggR1BheVwiLCBMLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gIGFpcndhbGxleEFwcGxlUGF5OiB5ZShcIkFpcndhbGxleCBBcHBsZVBheVwiLCBMLmFpcndhbGxleEFwcGxlUGF5LmluaXQpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59KSwgeyBlcnJfXzogU2kgfSA9IGsoXCJmb3JtLWNhbGxiYWNrc1wiKSwgRiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCksIGl0ID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IEYsXG4gIG9uQmx1cjogRixcbiAgb25DaGFuZ2U6IEYsXG4gIG9uTG9hZDogRixcbiAgb25Mb2FkRXJyb3I6IEYsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBGLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogRixcbiAgb25DaGVja291dFN1Y2Nlc3M6IEYsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogRixcbiAgb25DaGVja291dEVycm9yOiBGLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogRlxufSksIHggPSBjbGFzcyB4IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocikgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0geC5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyhyKS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgaSA9IFh0KGUsIG4gPz8geC5OT09QLCBTaSk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tlXSA9IGk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLl9jYWxsYmFja3MgPSB4LmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG54Lk5PT1AgPSAoKSA9PiB7XG59LCB4LmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhpdC5rZXlvZigpLmVudW0pLmZvckVhY2goKGUpID0+IHtcbiAgICByW2VdID0geC5OT09QO1xuICB9KSwgcjtcbn0sIHguZnJvbU9iamVjdCA9IChyKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgeCgpO1xuICByZXR1cm4gZS5zZXRDYWxsYmFja3MoaXQucGFyc2UocikpLCBlO1xufTtcbmxldCBVZSA9IHg7XG5jbGFzcyBDaSB7XG4gIGNvbnN0cnVjdG9yKHIsIGUsIG4sIGkpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAocykgPT4ge1xuICAgICAgaWYgKCFzLnNvdXJjZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgaWYgKHN0KHMub3JpZ2luKSAhPT0gc3QodGhpcy5iYXNlVXJsKSB8fCB0eXBlb2Ygcy5kYXRhID09IFwib2JqZWN0XCIgJiYgcy5kYXRhLnBlbnBhbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IGEgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IFVyKEpTT04ucGFyc2Uocy5kYXRhKSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIFVua25vd24gZXZlbnQuIElnbm9yaW5nOlwiLCBtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQoYSkpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiB1LCBwYXlsb2FkOiBsIH0gPSBhLCBwID0gbC50eXBlO1xuICAgICAgc3dpdGNoIChwKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQobC5oZWlnaHQgPyBgJHtsLmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyh1LCBsLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cih1LCBsLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UodSwgbC5lbGVtZW50VHlwZSwgbC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbdV0gPSBzLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZChsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKGwubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcihsLmVsZW1lbnRUeXBlLCBsLmVycm9ycywgdSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBwKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAocykgPT4gcy5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFzLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgcy5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgcyksICExKSA6IHRoaXMubm9uY2VzLmhhcyhzLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBzKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChzLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gciwgdGhpcy5iYXNlVXJsID0gZSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbiwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGk7XG4gIH1cbn1cbmNvbnN0IHN0ID0gKHQpID0+IG5ldyBVUkwodCkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24ga2kodCwgcikge1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IHJcbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IHhyKG4pO1xuICBpZiAoISRyKG4sIGkpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIG47XG59XG5jbGFzcyBQaSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24ociwgZSkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KHIsIGUpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgciA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiByO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCBBaSA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IG4gfSA9IHQ7XG4gIG4ucHVibGlzaGVyLnN1YnNjcmliZSgoaSkgPT4ge1xuICAgIGlmIChpLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgcyA9IGkubG9hZGVkVmFsdWUsIGEgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIHUgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGEsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAobCkgPT4ge1xuICAgICAgICAgICAgYSAmJiBhdChcImFwcGxlX3BheVwiLCBzLCByLCBlLCBsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKGwpID0+IHtcbiAgICAgICAgICAgIGMgJiYgYXQoXCJnb29nbGVfcGF5XCIsIHMsIHIsIGUsIGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGUuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKHUpO1xuICAgIH1cbiAgfSk7XG59LCBhdCA9ICh0LCByLCBlLCBuLCBpKSA9PiBMLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogTGUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0KSxcbiAgbm9uQ2RlRm9ybUlucHV0czogb2UoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogclxufSksIGN0ID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogcSwgZXJyX186IEIgfSA9IGsoXCJvcC1mb3JtXCIpLCBHID0gY2xhc3MgRyB7XG4gIGNvbnN0cnVjdG9yKHIpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBnZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgZ2UoKSwgdGhpcy5jb250ZXh0ID0gbmV3IGdlKCksIHRoaXMuaW5pdEZsb3dzID0gRWkoKSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcShcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBxKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBlID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBjdFxuICAgICAgICB9KTtcbiAgICAgICAgcShcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgcShcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgbiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IGN0XG4gICAgICAgIH0pO1xuICAgICAgICBxKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBxKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBpID0gRy5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGUsXG4gICAgICAgICAgbixcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGkpLCBBaSh0aGlzLmluaXRGbG93cywgaSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgcShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgdmkodGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGUudG90YWxBbW91bnRBdG9tcywgZS5jdXJyZW5jeSksIHEoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgbiA9IFkoZSk7XG4gICAgICAgIEIoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIG4pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKG4pO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGUsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgbiAmJiAobi5ub2RlLnN0eWxlLmhlaWdodCA9IGUpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC5zZXQoZSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZSksIGUpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlLCBuID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBpID0gZXIucGFyc2UoZSksIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBhID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG4pO1xuICAgICAgcy5uYW1lID0gYCR7aX0tZWxlbWVudGA7XG4gICAgICBjb25zdCBjID0gbmV3IFVSTChgL2FwcC92MS8ke3MubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gYy5zZWFyY2ggPSBhLnRvU3RyaW5nKCksIHMuc3JjID0gYy5ocmVmLCBzLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBzLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoaSwgcyk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChlLCBuKSA9PiB7XG4gICAgICBjb25zdCBpID0ge1xuICAgICAgICB0eXBlOiBlLFxuICAgICAgICBub2RlOiBuLFxuICAgICAgICBtb3VudDogKHMpID0+IHtcbiAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICByZXR1cm4gKGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpKSA9PSBudWxsID8gdm9pZCAwIDogYS5hcHBlbmRDaGlsZChuKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBpLnR5cGUsIG5vZGU6IGkubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbcmUuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW3JlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbcmUuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtyZS5DQVJEX0NWQ106IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW2VdID0gaSwgaTtcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiBuLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIG4uYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgZS5zdHlsZXMgJiYgbi5hcHBlbmQoXCJzdHlsZXNcIiwganIoZS5zdHlsZXMpKSwgbi5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgbjtcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZSkgPT4ge1xuICAgICAga2koZS5ub2RlKS50aGVuKChuKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlLnR5cGUsIG4pLCB0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5hbnlDZGVDb25uLnNldChuKTtcbiAgICAgIH0pLmNhdGNoKChuKSA9PiBCKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBuKSk7XG4gICAgfSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWUpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEwuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBMZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpKSB7XG4gICAgICAgIEIoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbbiwgaV0pID0+ICh7XG4gICAgICAgIG5hbWU6IG4sXG4gICAgICAgIC4uLmkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpXG4gICAgICB9KSk7XG4gICAgfSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gKGUsIG4pID0+IHtcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWkpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoZSkge1xuICAgICAgICBjYXNlIFwicG9ja3l0LXBheXBhbFwiOlxuICAgICAgICAgIHJldHVybiBMLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogaSxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogTGUoaS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcInBheXBhbFwiLCBcInBvY2t5dFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKGkuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IG4gfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHMpID0+IHtcbiAgICAgICAgICAgIHMuaXNTdWNjZXNzICYmIHMubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUgPyBzLmxvYWRlZFZhbHVlLnN0YXJ0RmxvdyhuKSA6IEIoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHMpID0+IHtcbiAgICAgICAgICAgIHMuaXNTdWNjZXNzICYmIHMubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUgPyBzLmxvYWRlZFZhbHVlLnN0YXJ0RmxvdyhuKSA6IEIoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAkZShlKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZCwgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgcShcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpO1xuICAgICAgZm9yIChjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKVxuICAgICAgICBlICYmIGUubm9kZS5yZW1vdmUoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCBkZWxldGUgd2luZG93Lm9qcztcbiAgICB9LCB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKGUpO1xuICAgIH0sIEcuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4yLjhcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gci5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnIsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBVZS5mcm9tT2JqZWN0KHIpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHIuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgUGkoKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgQ2kodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbn07XG5HLm9qc0Zsb3dzID0gTCwgRy5hc3NpZ25Bc1NpbmdsZXRvbiA9IChyKSA9PiB7XG4gIGlmIChHLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSByO1xufSwgRy5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgRy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHIsIGUsIG4sIGkpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHIuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTChyLmJhc2VVcmwgPz8gZHQpLm9yaWdpbixcbiAgZm9ybURpdjogaSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IGUuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHIuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxufSk7XG5sZXQgbHQgPSBHO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5hcnJheShab2RGaWVsZEVycm9yKTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbiwgZXJyb3JMb2dnZXIpID0+IHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgT3B0aW9uYWxTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKHRydWUpLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHokMS5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFByaWNlUXR5ID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQ2FydEluZm8gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxuKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7ZmUuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtmZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke2ZlLnJlZC5ib2xkKFwib2pzL1wiKX0ke2ZlLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgUFJfTE9BRElORyA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKTtcbmNvbnN0IFpvZEZvcm1DYWxsYmFja3MgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KHtcbiAgICBvbkZvY3VzOiBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uQ2hhbmdlOiBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkxvYWQ6IHByb3BzLm9uTG9hZCxcbiAgICBvbkxvYWRFcnJvcjogcHJvcHMub25Mb2FkRXJyb3IsXG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCxcbiAgICBvbkNoZWNrb3V0U3VjY2VzczogcHJvcHMub25DaGVja291dFN1Y2Nlc3MsXG4gICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgb25DaGVja291dEVycm9yOiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXG4gIH0pO1xuICBpZiAobHQuZ2V0SW5zdGFuY2UoKSkge1xuICAgIGx0LmdldEluc3RhbmNlKCk/LnVwZGF0ZUNhbGxiYWNrcyhmb3JtQ2FsbGJhY2tzLmdldCk7XG4gIH1cbiAgcmV0dXJuIGZvcm1DYWxsYmFja3MuZ2V0O1xufTtcblxuY29uc3QgdXNlUGF5bWVudFJlcXVlc3RzID0gKG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQpID0+IHtcbiAgY29uc3QgW3BheW1lbnRSZXF1ZXN0cywgc2V0UGF5bWVudFJlcXVlc3RzXSA9IHVzZVN0YXRlKHtcbiAgICBhcHBsZV9wYXk6IFBSX0xPQURJTkcsXG4gICAgZ29vZ2xlX3BheTogUFJfTE9BRElOR1xuICB9KTtcbiAgY29uc3Qgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAocGF5bWVudFJlcXVlc3RzMikgPT4ge1xuICAgICAgc2V0UGF5bWVudFJlcXVlc3RzKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgICAgb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZD8uKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgIH0sXG4gICAgW29yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWRdXG4gICk7XG4gIHJldHVybiB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfTtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfSA9IHVzZVBheW1lbnRSZXF1ZXN0cyhwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdHJpcGVMaW5rQ3RybCwgc2V0U3RyaXBlTGlua0N0cmxdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBsdC5nZXRJbnN0YW5jZSgpID8/IG5ldyBsdCh7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIC4uLmZvcm1DYWxsYmFja3NcbiAgICB9KTtcbiAgICBzZXRPcEZvcm0oZm9ybSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZShmb3JtKTtcbiAgICBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS5pbml0Rmxvd3Muc3RyaXBlTGluay5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRTdHJpcGVMaW5rQ3RybChyZXN1bHQubG9hZGVkVmFsdWUuY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdC5sb2FkZWRWYWx1ZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleFxuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwgeyBjaGlsZHJlbjogZWxlbWVudHNDb250ZXh0VmFsdWUgPyAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRzQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogZWxlbWVudHNDb250ZXh0VmFsdWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHsgaWQ6IEZPUk1fVEFSR0VULCBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSwgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuKGNoaWxkcmVuUHJvcHMpIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pIH0pO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlID0gKG9wRm9ybSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvcm1JZDogb3BGb3JtLmZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0OiBvcEZvcm0uZm9ybVByb3BlcnRpZXMuaGVpZ2h0LFxuICAgIHJlZmVycmVyOiBvcEZvcm0ucmVmZXJyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogb3BGb3JtLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgcmVnaXN0ZXJJZnJhbWU6IG9wRm9ybS5yZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBvcEZvcm0uYmFzZVVybFxuICB9O1xufTtcblxuY29uc3QgRWxlbWVudEZyYW1lID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZWxlbWVudFR5cGUsIHN0eWxlcyB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgZm9ybUlkLCByZWZlcnJlciwgZm9ybUhlaWdodCwgY2hlY2tvdXRTZWN1cmVUb2tlbiwgcmVnaXN0ZXJJZnJhbWUsIGJhc2VVcmwgfSA9IHVzZU9wZW5QYXlFbGVtZW50cygpO1xuICBjb25zdCBzdWJQYXRoID0gZWxlbWVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgW2hhc0xvYWRlZCwgc2V0SGFzTG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaWZyYW1lUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBlbGVtZW50U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXN0eWxlcykgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKHN0eWxlcyk7XG4gIH0sIFtzdHlsZXNdKTtcbiAgY29uc3QgZnJhbWVTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgaGVpZ2h0OiBmb3JtSGVpZ2h0XG4gICAgfTtcbiAgfSwgW2Zvcm1IZWlnaHRdKTtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4gfHwgIXJlZmVycmVyKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInJlZmVyZXJcIiwgcmVmZXJyZXIpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzdHlsZXNcIiwgZWxlbWVudFN0eWxlKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwiZm9ybUlkXCIsIGZvcm1JZCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIGNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSwgW2VsZW1lbnRTdHlsZSwgZm9ybUlkLCByZWZlcnJlciwgY2hlY2tvdXRTZWN1cmVUb2tlbl0pO1xuICB1c2VFZmZlY3QoKCkgPT4gc2V0SGFzTG9hZGVkKHRydWUpLCBbXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpZnJhbWVSZWYuY3VycmVudCB8fCAhaGFzTG9hZGVkKSByZXR1cm47XG4gICAgcmVnaXN0ZXJJZnJhbWUoZWxlbWVudFR5cGUsIGlmcmFtZVJlZi5jdXJyZW50KTtcbiAgfSwgW2hhc0xvYWRlZF0pO1xuICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4pIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2Zvcm1dIENhbm5vdCByZW5kZXIgcGFydGlhbGx5IGluaXRpYWxpemVkIGZyYW1lXCIpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHt9KTtcbiAgfVxuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICBcImlmcmFtZVwiLFxuICAgIHtcbiAgICAgIGlkOiBgb2pzLSR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBuYW1lOiBgJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIGNsYXNzTmFtZTogXCJvanMtaWZyYW1lXCIsXG4gICAgICBzcmM6IGAke2Jhc2VVcmx9L2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvPyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkQ3ZjRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkMgfSk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmV4cG9ydCB7IENhcmRDdmNFbGVtZW50LCBDYXJkRWxlbWVudCwgQ2FyZEV4cGlyeUVsZW1lbnQsIENhcmROdW1iZXJFbGVtZW50LCBFbGVtZW50c0Zvcm0sIEZpZWxkTmFtZSwgdXNlT3BlblBheUVsZW1lbnRzIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxpQkFBQUEsSUFBZSxjQUFBQyxJQUFZLFlBQUFDLElBQVUsZUFBQUMsSUFBYSxhQUFBQyxJQUFXLFVBQUFDLElBQVEsV0FBQUMsVUFBZTtBQUM3RixTQUFTLE9BQUFDLEdBQUssWUFBQUMsVUFBZ0I7QUFDOUIsU0FBUyxLQUFLQyxTQUFXO0FBQ3pCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxRQUFRO0FBRWYsTUFBTUMsS0FBa0JiLEdBQWM7QUFBQSxFQUNwQyxRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixxQkFBcUI7QUFBQSxFQUNyQixnQkFBZ0IsTUFBTTtBQUFBLEVBQ3RCO0FBQUEsRUFDQSxTQUFTO0FBQ1gsQ0FBQyxHQUVLYyxLQUFxQixNQUFNO0FBQy9CLFFBQU1DLElBQVVkLEdBQVdZLEVBQWU7QUFDMUMsTUFBSSxDQUFDRTtBQUNILFVBQU0sSUFBSSxNQUFNLG1FQUFtRTtBQUVyRixTQUFPQTtBQUNULEdBRU1DLEtBQUssOEJBQThCQyxLQUFLUixFQUFJLE9BQU87QUFBQSxFQUN2RCxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixLQUFLQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDM0IsS0FBS0EsRUFBSSxPQUFPO0FBQUEsRUFDaEIsS0FBS0EsRUFBSSxPQUFPO0FBQ2xCLENBQUMsR0FBR1MsS0FBS1QsRUFBSSxNQUFNUSxFQUFFLEdBQUdFLEtBQUtWLEVBQUksT0FBTztBQUFBLEVBQ3RDLE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLFNBQVNBLEVBQUksT0FBTztBQUFBLEVBQ3BC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U3RhdGUiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgImpzeCIsICJGcmFnbWVudCIsICJ6JDEiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiZmUiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgImR0IiwgIll0IiwgIkt0IiwgIkh0IiwgIld0IiwgIlp0IiwgIkRlIiwgIkp0IiwgIkJ0IiwgImUiLCAiUXQiLCAiWSIsICJYdCIsICJuIiwgInYiLCAiUiIsICJkIiwgInB0IiwgImZ0IiwgIm10IiwgInl0IiwgInJlIiwgImVyIiwgIkVlIiwgInRyIiwgImoiLCAicnIiLCAibnIiLCAib3IiLCAiaXIiLCAic3IiLCAiYXIiLCAiY3IiLCAibHIiLCAidXIiLCAiZHIiLCAicHIiLCAiZnIiLCAibGUiLCAibXIiLCAieXIiLCAiaHIiLCAiX3IiLCAiZ3IiLCAid3IiLCAiYnIiLCAieGUiLCAidnIiLCAiRXIiLCAiU3IiLCAiTiIsICJDciIsICJrciIsICJodCIsICJQciIsICJBciIsICJJciIsICJPciIsICJSciIsICJUciIsICJTZSIsICJZZSIsICJfdCIsICJNciIsICJEciIsICJzIiwgImEiLCAiRnIiLCAiTHIiLCAiTnIiLCAiaSIsICJjIiwgImpyIiwgIm9lIiwgIlVyIiwgInhyIiwgIiRyIiwgIl8iLCAiVnIiLCAiZ3QiLCAid3QiLCAicXIiLCAiR3IiLCAidWUiLCAienIiLCAiWXIiLCAiYnQiLCAiS3IiLCAiSHIiLCAiV3IiLCAiS2UiLCAidnQiLCAiSGUiLCAiRXQiLCAiWnIiLCAiSnIiLCAiQnIiLCAiUXIiLCAiWHIiLCAiZW4iLCAidG4iLCAicm4iLCAiU3QiLCAibm4iLCAib24iLCAic24iLCAiYW4iLCAiY24iLCAibG4iLCAidW4iLCAiQ3QiLCAiVCIsICJwbiIsICJkbiIsICJmbiIsICJXIiwgIkNlIiwgIm1uIiwgInluIiwgIkgiLCAiaG4iLCAiX24iLCAia2UiLCAiZ24iLCAiV2UiLCAid24iLCAiUGUiLCAia3QiLCAiYm4iLCAidm4iLCAiJGUiLCAic2UiLCAiQWUiLCAiayIsICJEaSIsICJFbiIsICJWZSIsICJhZSIsICJTbiIsICJQdCIsICJBdCIsICJjZSIsICJDbiIsICJaZSIsICJTIiwgImtuIiwgIlBuIiwgIkFuIiwgIkluIiwgInUiLCAibCIsICJwIiwgIm0iLCAiZyIsICJmIiwgIkwiLCAiVG4iLCAiT24iLCAiUm4iLCAiTW4iLCAiRG4iLCAiRm4iLCAiTG4iLCAiSWUiLCAiSXQiLCAiTm4iLCAiam4iLCAiVW4iLCAiT3QiLCAieG4iLCAiJG4iLCAiUnQiLCAiVm4iLCAicW4iLCAiR24iLCAicWUiLCAiem4iLCAiWW4iLCAiS24iLCAiSG4iLCAiV24iLCAiYiIsICJKZSIsICJCZSIsICJabiIsICJ3IiwgInkiLCAiWG4iLCAiUW4iLCAiaCIsICJQIiwgIkpuIiwgIkJuIiwgIk8iLCAiZW8iLCAidG8iLCAicm8iLCAibm8iLCAiaW8iLCAib28iLCAic28iLCAiViIsICJRZSIsICJhbyIsICJjbyIsICJsbyIsICJUdCIsICJ1byIsICJwbyIsICJmbyIsICJNIiwgInRlIiwgIlJlIiwgIk10IiwgIkR0IiwgIkZ0IiwgIm1vIiwgInlvIiwgIlEiLCAiQSIsICJYIiwgInBlIiwgImVlIiwgIiQiLCAiRCIsICJKIiwgIlUiLCAiaG8iLCAiX28iLCAiZ28iLCAid28iLCAiYm8iLCAiaGUiLCAidm8iLCAiRW8iLCAiU28iLCAiQ28iLCAieiIsICJGZSIsICJMdCIsICJrbyIsICJQbyIsICJFIiwgIkxlIiwgIk5lIiwgIloiLCAiQW8iLCAiTnQiLCAiaWUiLCAid2UiLCAiYmUiLCAibmUiLCAiSW8iLCAiT28iLCAiQyIsICJPZSIsICJUZSIsICJ2ZSIsICJkZSIsICJYZSIsICJqdCIsICJVdCIsICJ4dCIsICIkdCIsICJWdCIsICJldCIsICJfZSIsICJHZSIsICJEbyIsICJqZSIsICJSbyIsICJNZSIsICJUbyIsICJtZSIsICJNbyIsICJ6ZSIsICJGbyIsICJMbyIsICJLIiwgImpvIiwgInR0IiwgIk5vIiwgIlVvIiwgInhvIiwgIiRvIiwgIlZvIiwgInFvIiwgInF0IiwgInJ0IiwgIkdvIiwgInpvIiwgIm50IiwgIllvIiwgIm90IiwgIktvIiwgIkhvIiwgIldvIiwgIlpvIiwgIkpvIiwgIkJvIiwgIlFvIiwgIlhvIiwgImVpIiwgInRpIiwgInJpIiwgIm5pIiwgIm9pIiwgImlpIiwgInNpIiwgImFpIiwgIkd0IiwgImNpIiwgImxpIiwgInVpIiwgImRpIiwgInBpIiwgImZpIiwgIm1pIiwgInlpIiwgImhpIiwgIl9pIiwgImdpIiwgImdlIiwgIndpIiwgImJpIiwgInllIiwgInZpIiwgIkVpIiwgIlNpIiwgIkYiLCAiaXQiLCAieCIsICJyIiwgIlVlIiwgIkNpIiwgInN0IiwgImtpIiwgIlBpIiwgIkFpIiwgImF0IiwgImN0IiwgInEiLCAiQiIsICJHIiwgImx0IiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJBV1hfTE9BRElORyIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJvYmoiLCAiaW5zdGFuY2UiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiX2EiLCAiZm9ybUNhbGxiYWNrcyIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiZm9ybSIsICJ2YWx1ZSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAicHJldiIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==