@getopenpay/openpay-js-react 0.3.13-alpha.bdbda7a → 0.3.14-alpha.8f138b8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{Resource-mNYeZF9D-DyAeU6nH.js → Resource-BUbQYMo6-gNl9IB1G.js} +3 -3
  3. package/dist/{SimpleSpanProcessor-CLadx1Ry-DFbqCyTE.js → SimpleSpanProcessor-Cam2lJfG-eMP5ue6i.js} +7 -7
  4. package/dist/{detect-resources-BVj-Nv9j-D-K1Nx4L.js → detect-resources-CDf272jb-BKXOZPGL.js} +7 -7
  5. package/dist/{diag-api-DlzYu3FX-C5uOnDAk.js → diag-api-CAnpZ_mh-BicaJ-TD.js} +2 -2
  6. package/dist/{index-rsJVRXFy-BlJGDRfL.js → index-2ucNr53i-DQQtLs7t.js} +5 -5
  7. package/dist/{index-hlw2CLDg-CvpGBRWb.js → index-3bEWNO5t-BsGbK2jn.js} +5 -5
  8. package/dist/{index-Bzsy-QHz-BSCoOj2p.js → index-CIyvfLCj-DCd9pJyd.js} +2 -2
  9. package/dist/{index-73Zci8QM-BH36xwJQ.js → index-CPQpoLe--DSQasqi3.js} +2 -2
  10. package/dist/{index-BufYIG0q-CphSOJz1.js → index-CUozohep-CbkzYFm9.js} +2 -2
  11. package/dist/{index-Y8rIshZP-BFN_roTi.js → index-CcyNbQd8-Bw57HxYb.js} +5 -5
  12. package/dist/{index-Cgr3OZtX.js → index-DJF-pWKT.js} +113 -112
  13. package/dist/{index-C1QTH_fF-7edQgvhb.js → index-DR3rTKvi-CtZOD_q9.js} +6 -6
  14. package/dist/{index-C6VsGa_X-DnI1zZA6.js → index-Dt81UMoA-pXGGrD8J.js} +2 -2
  15. package/dist/{index-SDtMvSt9-B3WXwcGr.js → index-iyB-OjaA-Da9gb31C.js} +6 -6
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +1 -1
  18. package/dist/{metrics-api-Boddpk8P-5Yd9BTNs.js → metrics-api-DPGie95w-D7qa5Q-O.js} +2 -2
  19. package/dist/{sdk-info-Bhg46kME-KwjisWfA.js → sdk-info-CRtcMnZT-G_nRMPsR.js} +2 -2
  20. package/dist/{url-DKZ7gj4s-DwKrihmA.js → url-Co5oXKmU-Y6GbTOtJ.js} +2 -2
  21. package/dist/{utils-BJLZP7xv-CsKnCWfD.js → utils-BHpfmVSb-DBohbmC-.js} +4 -4
  22. package/dist/{utils-Cp6QoutJ-BvvfzCHa.js → utils-Y3X4Ct16-Bx8LpWan.js} +2 -2
  23. package/package.json +1 -1
@@ -109,7 +109,7 @@ const oe = n.enum([
109
109
  }), ki = n.object({
110
110
  type: n.literal(oe.enum.SETUP_PAYMENT_METHOD_SUCCESS),
111
111
  paymentMethodId: n.string()
112
- }), Dt = n.object({
112
+ }), Mt = n.object({
113
113
  firstName: j,
114
114
  lastName: j,
115
115
  email: j,
@@ -134,7 +134,7 @@ const oe = n.enum([
134
134
  doNotUseLegacyCCFlow: n.boolean().optional(),
135
135
  existingCCPMId: k,
136
136
  paymentRouteId: k
137
- }).extend(Dt.shape), Ri = n.object({
137
+ }).extend(Mt.shape), Ri = n.object({
138
138
  type: n.literal(oe.enum.TOKENIZE_SUCCESS),
139
139
  isReadyForCheckout: n.boolean()
140
140
  }), xi = n.object({
@@ -204,7 +204,7 @@ n.discriminatedUnion("success", [
204
204
  n.object({
205
205
  session_id: n.string(),
206
206
  checkout_payment_method: Nt,
207
- non_cde_form_fields: Dt,
207
+ non_cde_form_fields: Mt,
208
208
  do_not_use_legacy_cc_flow: n.boolean().optional(),
209
209
  existing_cc_pm_id: x(n.string()),
210
210
  extra_metadata: n.record(n.string(), n.any()),
@@ -214,7 +214,7 @@ n.object({
214
214
  n.object({
215
215
  session_id: n.string(),
216
216
  checkout_payment_method: Nt,
217
- non_cde_form_fields: Dt,
217
+ non_cde_form_fields: Mt,
218
218
  extra_metadata: n.record(n.string(), n.any()).optional(),
219
219
  payment_route_id: x(n.string()),
220
220
  customer_language: x(n.string())
@@ -238,7 +238,7 @@ n.object({
238
238
  consent_id: n.string(),
239
239
  their_pm_id: n.string().optional()
240
240
  });
241
- const Di = n.object({
241
+ const Mi = n.object({
242
242
  type: n.string(),
243
243
  redirect_url: x(n.string()),
244
244
  initial_intent_id: x(n.string()),
@@ -253,7 +253,7 @@ n.discriminatedUnion("present", [
253
253
  n.object({
254
254
  payment_methods: n.array(fi),
255
255
  pay_first_success_response: x(sr),
256
- required_user_actions: x(n.array(Di)),
256
+ required_user_actions: x(n.array(Mi)),
257
257
  post_checkout_redirect_to: x(n.string()),
258
258
  checkout_success_response: x(sr)
259
259
  });
@@ -267,7 +267,7 @@ n.object({
267
267
  client_secret: n.string(),
268
268
  stripe_pk: n.string()
269
269
  });
270
- const Mi = (e) => JSON.stringify(e);
270
+ const Di = (e) => JSON.stringify(e);
271
271
  function Li(e, t) {
272
272
  var r = Object.setPrototypeOf;
273
273
  r ? r(e, t) : e.__proto__ = t;
@@ -481,7 +481,7 @@ n.object({
481
481
  });
482
482
  n.object({
483
483
  session_id: n.string(),
484
- non_cde_form_fields: Dt,
484
+ non_cde_form_fields: Mt,
485
485
  checkout_payment_method: Be,
486
486
  extra_metadata: n.record(n.string(), n.any()),
487
487
  // This is optional in CDE, but not in OJS moving forward
@@ -765,13 +765,13 @@ function na(e) {
765
765
  function F(e) {
766
766
  return typeof e == "function";
767
767
  }
768
- function Mt(e) {
768
+ function Dt(e) {
769
769
  var t = function(o) {
770
770
  Error.call(o), o.stack = new Error().stack;
771
771
  }, r = e(t);
772
772
  return r.prototype = Object.create(Error.prototype), r.prototype.constructor = r, r;
773
773
  }
774
- var Qt = Mt(function(e) {
774
+ var Qt = Dt(function(e) {
775
775
  return function(r) {
776
776
  e(this), this.message = r ? r.length + ` errors occurred during unsubscription:
777
777
  ` + r.map(function(o, i) {
@@ -1044,7 +1044,7 @@ var he = function() {
1044
1044
  }
1045
1045
  }, e.prototype.forEach = function(t, r) {
1046
1046
  var o = this;
1047
- return r = Dr(r), new r(function(i, a) {
1047
+ return r = Mr(r), new r(function(i, a) {
1048
1048
  var s = new lr({
1049
1049
  next: function(c) {
1050
1050
  try {
@@ -1069,7 +1069,7 @@ var he = function() {
1069
1069
  return la(t)(this);
1070
1070
  }, e.prototype.toPromise = function(t) {
1071
1071
  var r = this;
1072
- return t = Dr(t), new t(function(o, i) {
1072
+ return t = Mr(t), new t(function(o, i) {
1073
1073
  var a;
1074
1074
  r.subscribe(function(s) {
1075
1075
  return a = s;
@@ -1083,7 +1083,7 @@ var he = function() {
1083
1083
  return new e(t);
1084
1084
  }, e;
1085
1085
  }();
1086
- function Dr(e) {
1086
+ function Mr(e) {
1087
1087
  var t;
1088
1088
  return (t = e ?? xn.Promise) !== null && t !== void 0 ? t : Promise;
1089
1089
  }
@@ -1147,7 +1147,7 @@ var ha = function(e) {
1147
1147
  e.prototype.unsubscribe.call(this), !o && ((r = this.onFinalize) === null || r === void 0 || r.call(this));
1148
1148
  }
1149
1149
  }, t;
1150
- }(gr), ya = Mt(function(e) {
1150
+ }(gr), ya = Dt(function(e) {
1151
1151
  return function() {
1152
1152
  e(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
1153
1153
  };
@@ -1158,7 +1158,7 @@ var ha = function(e) {
1158
1158
  return r.closed = !1, r.currentObservers = null, r.observers = [], r.isStopped = !1, r.hasError = !1, r.thrownError = null, r;
1159
1159
  }
1160
1160
  return t.prototype.lift = function(r) {
1161
- var o = new Mr(this, this);
1161
+ var o = new Dr(this, this);
1162
1162
  return o.operator = r, o;
1163
1163
  }, t.prototype._throwIfClosed = function() {
1164
1164
  if (this.closed)
@@ -1228,9 +1228,9 @@ var ha = function(e) {
1228
1228
  var r = new he();
1229
1229
  return r.source = this, r;
1230
1230
  }, t.create = function(r, o) {
1231
- return new Mr(r, o);
1231
+ return new Dr(r, o);
1232
1232
  }, t;
1233
- }(he), Mr = function(e) {
1233
+ }(he), Dr = function(e) {
1234
1234
  we(t, e);
1235
1235
  function t(r, o) {
1236
1236
  var i = e.call(this) || this;
@@ -1411,11 +1411,11 @@ function Oa(e) {
1411
1411
  if (Ea(e))
1412
1412
  return Na(e);
1413
1413
  if (Ca(e))
1414
- return Da(e);
1414
+ return Ma(e);
1415
1415
  if (Pa(e))
1416
- return Dn(e);
1416
+ return Mn(e);
1417
1417
  if (Ta(e))
1418
- return Ma(e);
1418
+ return Da(e);
1419
1419
  if (xa(e))
1420
1420
  return La(e);
1421
1421
  }
@@ -1436,7 +1436,7 @@ function Na(e) {
1436
1436
  t.complete();
1437
1437
  });
1438
1438
  }
1439
- function Da(e) {
1439
+ function Ma(e) {
1440
1440
  return new he(function(t) {
1441
1441
  e.then(function(r) {
1442
1442
  t.closed || (t.next(r), t.complete());
@@ -1445,7 +1445,7 @@ function Da(e) {
1445
1445
  }).then(null, jn);
1446
1446
  });
1447
1447
  }
1448
- function Ma(e) {
1448
+ function Da(e) {
1449
1449
  return new he(function(t) {
1450
1450
  var r, o;
1451
1451
  try {
@@ -1466,7 +1466,7 @@ function Ma(e) {
1466
1466
  t.complete();
1467
1467
  });
1468
1468
  }
1469
- function Dn(e) {
1469
+ function Mn(e) {
1470
1470
  return new he(function(t) {
1471
1471
  Ua(e, t).catch(function(r) {
1472
1472
  return t.error(r);
@@ -1474,7 +1474,7 @@ function Dn(e) {
1474
1474
  });
1475
1475
  }
1476
1476
  function La(e) {
1477
- return Dn(Ra(e));
1477
+ return Mn(Ra(e));
1478
1478
  }
1479
1479
  function Ua(e, t) {
1480
1480
  var r, o, i, a;
@@ -1530,7 +1530,7 @@ function qa(e, t) {
1530
1530
  };
1531
1531
  return new he(o);
1532
1532
  }
1533
- var Va = Mt(function(e) {
1533
+ var Va = Dt(function(e) {
1534
1534
  return function() {
1535
1535
  e(this), this.name = "EmptyError", this.message = "no elements in sequence";
1536
1536
  };
@@ -1552,7 +1552,7 @@ function $a(e, t) {
1552
1552
  function za(e) {
1553
1553
  return e instanceof Date && !isNaN(e);
1554
1554
  }
1555
- var Ga = Mt(function(e) {
1555
+ var Ga = Dt(function(e) {
1556
1556
  return function(r) {
1557
1557
  r === void 0 && (r = null), e(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this.info = r;
1558
1558
  };
@@ -1971,7 +1971,7 @@ ue.NOOP = () => {
1971
1971
  return r.setCallbacks($r.parse(t)), r;
1972
1972
  };
1973
1973
  let ur = ue;
1974
- const Mn = ii({
1974
+ const Dn = ii({
1975
1975
  formId: "",
1976
1976
  formHeight: "",
1977
1977
  referrer: void 0,
@@ -1980,12 +1980,12 @@ const Mn = ii({
1980
1980
  },
1981
1981
  baseUrl: ""
1982
1982
  }), ls = () => {
1983
- const e = ai(Mn);
1983
+ const e = ai(Dn);
1984
1984
  if (!e)
1985
1985
  throw new Error("useOpenPayElements must be used within an OpenPayElementsProvider");
1986
1986
  return e;
1987
1987
  }, Lt = (e) => {
1988
- const { elementType: t, styles: r } = e, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = ls(), u = t.toLowerCase(), [d, f] = ge(!1), h = si(null), p = Zt(() => r ? Mi(r) : "", [r]), m = Zt(() => ({
1988
+ const { elementType: t, styles: r } = e, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = ls(), u = t.toLowerCase(), [d, f] = ge(!1), h = si(null), p = Zt(() => r ? Di(r) : "", [r]), m = Zt(() => ({
1989
1989
  border: "none",
1990
1990
  width: "100%",
1991
1991
  height: a
@@ -2158,7 +2158,7 @@ const ie = n.enum([
2158
2158
  address: I,
2159
2159
  city: I,
2160
2160
  state: I
2161
- }), Ns = ie.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Ds = n.object({
2161
+ }), Ns = ie.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Ms = n.object({
2162
2162
  type: Ns,
2163
2163
  sessionId: N,
2164
2164
  checkoutPaymentMethod: Ut,
@@ -2166,7 +2166,7 @@ const ie = n.enum([
2166
2166
  doNotUseLegacyCCFlow: n.boolean().optional(),
2167
2167
  existingCCPMId: I,
2168
2168
  paymentRouteId: I
2169
- }).extend(ut.shape), Ms = n.object({
2169
+ }).extend(ut.shape), Ds = n.object({
2170
2170
  type: n.literal(ie.enum.TOKENIZE_SUCCESS),
2171
2171
  isReadyForCheckout: n.boolean()
2172
2172
  }), Ls = n.object({
@@ -2181,8 +2181,8 @@ const ie = n.enum([
2181
2181
  As,
2182
2182
  Ts,
2183
2183
  Rs,
2184
- Ds,
2185
2184
  Ms,
2185
+ Ds,
2186
2186
  Ls,
2187
2187
  xs,
2188
2188
  Os
@@ -2790,7 +2790,7 @@ var jc = new Kn(), Nc = (
2790
2790
  return t ? (this._delegate = t, this._delegate) : jc;
2791
2791
  }, e;
2792
2792
  }()
2793
- ), Dc = (
2793
+ ), Mc = (
2794
2794
  /** @class */
2795
2795
  function() {
2796
2796
  function e() {
@@ -2799,7 +2799,7 @@ var jc = new Kn(), Nc = (
2799
2799
  return new Kn();
2800
2800
  }, e;
2801
2801
  }()
2802
- ), Mc = new Dc(), Br = (
2802
+ ), Dc = new Mc(), Br = (
2803
2803
  /** @class */
2804
2804
  function() {
2805
2805
  function e() {
@@ -2809,7 +2809,7 @@ var jc = new Kn(), Nc = (
2809
2809
  return (i = this.getDelegateTracer(t, r, o)) !== null && i !== void 0 ? i : new Nc(this, t, r, o);
2810
2810
  }, e.prototype.getDelegate = function() {
2811
2811
  var t;
2812
- return (t = this._delegate) !== null && t !== void 0 ? t : Mc;
2812
+ return (t = this._delegate) !== null && t !== void 0 ? t : Dc;
2813
2813
  }, e.prototype.setDelegate = function(t) {
2814
2814
  this._delegate = t;
2815
2815
  }, e.prototype.getDelegateTracer = function(t, r, o) {
@@ -3982,10 +3982,10 @@ var Il = function(e) {
3982
3982
  }(Xr), jl = new Ol(xl), Nl = function(e) {
3983
3983
  return e && typeof e.length == "number" && typeof e != "function";
3984
3984
  };
3985
- function Dl(e) {
3985
+ function Ml(e) {
3986
3986
  return q(e == null ? void 0 : e.then);
3987
3987
  }
3988
- function Ml(e) {
3988
+ function Dl(e) {
3989
3989
  return q(e[Ir]);
3990
3990
  }
3991
3991
  function Ll(e) {
@@ -4039,11 +4039,11 @@ function Gl(e) {
4039
4039
  if (e instanceof ye)
4040
4040
  return e;
4041
4041
  if (e != null) {
4042
- if (Ml(e))
4042
+ if (Dl(e))
4043
4043
  return Bl(e);
4044
4044
  if (Nl(e))
4045
4045
  return Yl(e);
4046
- if (Dl(e))
4046
+ if (Ml(e))
4047
4047
  return Hl(e);
4048
4048
  if (Ll(e))
4049
4049
  return uo(e);
@@ -4278,7 +4278,7 @@ const en = n.enum(["dev", "stg", "prod"]), iu = {
4278
4278
  function $t(e) {
4279
4279
  throw new Error(`Unhandled case: ${e}`);
4280
4280
  }
4281
- const mo = (e, t) => Object.fromEntries(Object.entries(e).filter(([r]) => !t.includes(r))), M = () => {
4281
+ const mo = (e, t) => Object.fromEntries(Object.entries(e).filter(([r]) => !t.includes(r))), D = () => {
4282
4282
  if (!(typeof window > "u"))
4283
4283
  return window;
4284
4284
  }, hr = new tt(), tn = "op_metrics_queue", su = 3, cu = 3, lu = 1e3, { log__: _t } = T("op-metrics");
@@ -4289,7 +4289,7 @@ class uu {
4289
4289
  _t("Network offline, metrics will be queued"), this.cancelBatchProcessing();
4290
4290
  }, this.onlineListener = () => {
4291
4291
  _t("Network online, processing metrics queue"), this.processQueue();
4292
- }, this.loadQueueFromStorage(), (t = M()) == null || t.addEventListener("offline", this.offlineListener), (r = M()) == null || r.addEventListener("online", this.onlineListener);
4292
+ }, this.loadQueueFromStorage(), (t = D()) == null || t.addEventListener("offline", this.offlineListener), (r = D()) == null || r.addEventListener("online", this.onlineListener);
4293
4293
  }
4294
4294
  addEvent(t, r, o) {
4295
4295
  const i = {
@@ -4307,7 +4307,7 @@ class uu {
4307
4307
  loadQueueFromStorage() {
4308
4308
  var t, r;
4309
4309
  try {
4310
- const o = (r = (t = M()) == null ? void 0 : t.localStorage) == null ? void 0 : r.getItem(tn);
4310
+ const o = (r = (t = D()) == null ? void 0 : t.localStorage) == null ? void 0 : r.getItem(tn);
4311
4311
  o && (this.queue = JSON.parse(o));
4312
4312
  } catch {
4313
4313
  this.queue = [], this.saveQueueToStorage();
@@ -4315,17 +4315,17 @@ class uu {
4315
4315
  }
4316
4316
  saveQueueToStorage() {
4317
4317
  var t;
4318
- (t = M()) == null || t.localStorage.setItem(tn, JSON.stringify(this.queue));
4318
+ (t = D()) == null || t.localStorage.setItem(tn, JSON.stringify(this.queue));
4319
4319
  }
4320
4320
  scheduleBatchProcessing() {
4321
- const t = M();
4321
+ const t = D();
4322
4322
  t && navigator.onLine && !this.processingQueue && this.queue.length > 0 && !this.batchTimeout && (this.batchTimeout = t.setTimeout(() => {
4323
4323
  this.batchTimeout = null, this.processQueue();
4324
4324
  }, lu));
4325
4325
  }
4326
4326
  cancelBatchProcessing() {
4327
4327
  var t;
4328
- this.batchTimeout && ((t = M()) == null || t.clearTimeout(this.batchTimeout), this.batchTimeout = null), this.processingQueue = !1;
4328
+ this.batchTimeout && ((t = D()) == null || t.clearTimeout(this.batchTimeout), this.batchTimeout = null), this.processingQueue = !1;
4329
4329
  }
4330
4330
  processQueue() {
4331
4331
  !navigator.onLine || this.processingQueue || this.queue.length === 0 || (this.processingQueue = !0, this.sendBatch().finally(() => {
@@ -4379,7 +4379,7 @@ class uu {
4379
4379
  }
4380
4380
  cleanup() {
4381
4381
  var t, r;
4382
- (t = M()) == null || t.removeEventListener("offline", this.offlineListener), (r = M()) == null || r.removeEventListener("online", this.onlineListener), this.cancelBatchProcessing();
4382
+ (t = D()) == null || t.removeEventListener("offline", this.offlineListener), (r = D()) == null || r.removeEventListener("online", this.onlineListener), this.cancelBatchProcessing();
4383
4383
  }
4384
4384
  }
4385
4385
  const fo = new uu(), g = (e, t, r) => {
@@ -4403,13 +4403,13 @@ const fo = new uu(), g = (e, t, r) => {
4403
4403
  });
4404
4404
  }, du = () => {
4405
4405
  var e, t;
4406
- (e = M()) == null || e.addEventListener("error", yo), (t = M()) == null || t.addEventListener("unhandledrejection", ho);
4406
+ (e = D()) == null || e.addEventListener("error", yo), (t = D()) == null || t.addEventListener("unhandledrejection", ho);
4407
4407
  }, pu = () => {
4408
4408
  var e, t;
4409
- (e = M()) == null || e.removeEventListener("error", yo), (t = M()) == null || t.removeEventListener("unhandledrejection", ho);
4409
+ (e = D()) == null || e.removeEventListener("error", yo), (t = D()) == null || t.removeEventListener("unhandledrejection", ho);
4410
4410
  };
4411
4411
  var rn;
4412
- (rn = M()) == null || rn.addEventListener("beforeunload", () => {
4412
+ (rn = D()) == null || rn.addEventListener("beforeunload", () => {
4413
4413
  fo.processQueue();
4414
4414
  });
4415
4415
  const mu = async (e, t, r) => {
@@ -4503,7 +4503,7 @@ const V = async (e, t, r, o) => mu(e, t, async () => {
4503
4503
  return o && g(o, {
4504
4504
  ...i
4505
4505
  }), i;
4506
- }), fu = (e, t) => t.safeParse(e).success, hu = (e) => Gc.safeParse(e).success, yu = async (e, t) => await V(e, { type: "get_checkout_preview", payload: t }, Wn), D = async (e) => await V(e, { type: "get_prefill", payload: {} }, Xn), He = async (e, t) => await V(
4506
+ }), fu = (e, t) => t.safeParse(e).success, hu = (e) => Gc.safeParse(e).success, yu = async (e, t) => await V(e, { type: "get_checkout_preview", payload: t }, Wn), M = async (e) => await V(e, { type: "get_prefill", payload: {} }, Xn), He = async (e, t) => await V(
4507
4507
  e,
4508
4508
  { type: "v2_start_payment_flow", payload: t },
4509
4509
  ro,
@@ -4748,7 +4748,7 @@ const Su = ({
4748
4748
  new_customer_first_name: e.firstName,
4749
4749
  new_customer_last_name: e.lastName
4750
4750
  }), mt = async (e) => {
4751
- const { log__: t } = T(e.logPrefix), r = await D(e.anyCdeConnection), o = pt(e.confirmResult);
4751
+ const { log__: t } = T(e.logPrefix), r = await M(e.anyCdeConnection), o = pt(e.confirmResult);
4752
4752
  if (r.mode === "setup")
4753
4753
  return t("Setting up payment method..."), { mode: "setup", result: await gu(e.anyCdeConnection, {
4754
4754
  secure_token: r.token,
@@ -4919,9 +4919,9 @@ Error: ${Q(t)}`), new Error(r);
4919
4919
  const e = navigator.languages && navigator.languages.length ? navigator.languages : [navigator.language];
4920
4920
  let t = e == null ? void 0 : e[0];
4921
4921
  return t && (t = t.split("-")[0]), t;
4922
- }, { log__: Do, err__: Mo } = T("common-cc"), pe = (e, t, r) => {
4922
+ }, { log__: Mo, err__: Do } = T("common-cc"), pe = (e, t, r) => {
4923
4923
  if (r) {
4924
- Do(`Received default field values: ${JSON.stringify(r)}`);
4924
+ Mo(`Received default field values: ${JSON.stringify(r)}`);
4925
4925
  for (const [i, a] of Object.entries(r))
4926
4926
  e[i] || (e[i] = a);
4927
4927
  }
@@ -4930,7 +4930,7 @@ Error: ${Q(t)}`), new Error(r);
4930
4930
  const i = o.error.format(), a = zn(i);
4931
4931
  for (const [s, c] of Object.entries(a))
4932
4932
  t(s, c, s);
4933
- throw Mo("Got validation errors in non-CDE form fields", a), new Error("Got validation errors in non-CDE form fields");
4933
+ throw Do("Got validation errors in non-CDE form fields", a), new Error("Got validation errors in non-CDE form fields");
4934
4934
  }
4935
4935
  return o.data;
4936
4936
  }, Lo = (e, t) => {
@@ -4939,12 +4939,12 @@ Error: ${Q(t)}`), new Error(r);
4939
4939
  throw r.errors.forEach((o) => {
4940
4940
  const i = Vn.safeParse(o.elementType);
4941
4941
  if (!i.success)
4942
- Mo(`Unknown field name in onValidationError: ${o.elementType}. Error object:`, o);
4942
+ Do(`Unknown field name in onValidationError: ${o.elementType}. Error object:`, o);
4943
4943
  else {
4944
4944
  const a = i.data;
4945
4945
  t(a, o.errors);
4946
4946
  }
4947
- }), Do(`Error tokenizing card: got validation errors: ${JSON.stringify(r.errors)}`), new Error("Got validation errors while tokenizing card");
4947
+ }), Mo(`Error tokenizing card: got validation errors: ${JSON.stringify(r.errors)}`), new Error("Got validation errors while tokenizing card");
4948
4948
  }, { log__: wt } = T("awx-apple-pay");
4949
4949
  async function Nu(e, t) {
4950
4950
  try {
@@ -4967,7 +4967,7 @@ async function Nu(e, t) {
4967
4967
  throw t.session.abort(), r;
4968
4968
  }
4969
4969
  }
4970
- async function Du(e, t) {
4970
+ async function Mu(e, t) {
4971
4971
  if (!e.redirect_url)
4972
4972
  throw new Error("No redirect URL found");
4973
4973
  wt("3DS Required, starting verification...", e);
@@ -4989,7 +4989,7 @@ async function Du(e, t) {
4989
4989
  });
4990
4990
  return wt("[2nd] Confirm payment flow response", o), o;
4991
4991
  }
4992
- async function Mu(e, t) {
4992
+ async function Du(e, t) {
4993
4993
  var r, o, i, a, s;
4994
4994
  try {
4995
4995
  const c = e.payment, l = So(t.nonCdeFormInputs, c), u = pe(
@@ -5033,7 +5033,7 @@ async function Mu(e, t) {
5033
5033
  const p = (i = f.required_user_actions) == null ? void 0 : i.find(
5034
5034
  (_) => _.type === "airwallex_payment_consent"
5035
5035
  );
5036
- if (p != null && p.redirect_url && p.consent_id && p.their_pm_id && (f = await Du(p, t), h = (s = (a = f.payment_methods) == null ? void 0 : a[0]) == null ? void 0 : s.id), !h)
5036
+ if (p != null && p.redirect_url && p.consent_id && p.their_pm_id && (f = await Mu(p, t), h = (s = (a = f.payment_methods) == null ? void 0 : a[0]) == null ? void 0 : s.id), !h)
5037
5037
  throw new Error("No PM ID found");
5038
5038
  const m = {
5039
5039
  status: ApplePaySession.STATUS_SUCCESS
@@ -5070,7 +5070,7 @@ const { log__: Je, err__: Uo } = T("awx-apple-pay"), Lu = Re(
5070
5070
  return Je("No active cards available for Apple Pay"), r;
5071
5071
  if (!o.metadata.processor_account_id)
5072
5072
  throw new Error("No gateway merchant ID found in processor account");
5073
- const i = e.anyCdeConnection, a = await D(i), s = a.mode === "setup", c = await xe(i, a.token, s, void 0), l = async (u) => {
5073
+ const i = e.anyCdeConnection, a = await M(i), s = a.mode === "setup", c = await xe(i, a.token, s, void 0), l = async (u) => {
5074
5074
  try {
5075
5075
  await R.airwallexApplePay.run({
5076
5076
  context: e,
@@ -5103,7 +5103,7 @@ const { log__: Je, err__: Uo } = T("awx-apple-pay"), Lu = Re(
5103
5103
  formCallbacks: i
5104
5104
  }) => {
5105
5105
  var a;
5106
- const s = J(e.checkoutPaymentMethods, jo), { overridePaymentRequest: c, initialPreview: l } = o, u = e.anyCdeConnection, d = await D(u), f = d.mode === "setup", h = Po({
5106
+ const s = J(e.checkoutPaymentMethods, jo), { overridePaymentRequest: c, initialPreview: l } = o, u = e.anyCdeConnection, d = await M(u), f = d.mode === "setup", h = Po({
5107
5107
  overridePaymentRequest: c,
5108
5108
  initialPreview: l,
5109
5109
  prefill: {
@@ -5144,7 +5144,7 @@ const { log__: Je, err__: Uo } = T("awx-apple-pay"), Lu = Re(
5144
5144
  }, p.onpaymentauthorized = async (S) => {
5145
5145
  g("apple_pay_payment_authorized");
5146
5146
  try {
5147
- const C = await Mu(S, m);
5147
+ const C = await Du(S, m);
5148
5148
  _(C);
5149
5149
  } catch (C) {
5150
5150
  E(C);
@@ -5272,7 +5272,7 @@ const qo = async (e) => await po(e) === "prod" ? "PRODUCTION" : "TEST", Bt = asy
5272
5272
  } catch (h) {
5273
5273
  return je("Error checking Google Pay availability", h), i;
5274
5274
  }
5275
- const c = e.anyCdeConnection, l = await D(c), u = l.mode === "setup", d = await xe(c, l.token, u, void 0), f = async (h) => {
5275
+ const c = e.anyCdeConnection, l = await M(c), u = l.mode === "setup", d = await xe(c, l.token, u, void 0), f = async (h) => {
5276
5276
  try {
5277
5277
  R.airwallexGooglePay.run({
5278
5278
  context: e,
@@ -5316,7 +5316,7 @@ const qo = async (e) => await po(e) === "prod" ? "PRODUCTION" : "TEST", Bt = asy
5316
5316
  merchantId: _.google_pay_merchant_id ?? "",
5317
5317
  initialPreview: p,
5318
5318
  overridePaymentRequest: m
5319
- }), v = e.anyCdeConnection, S = await D(v);
5319
+ }), v = e.anyCdeConnection, S = await M(v);
5320
5320
  g("google_pay_flow_started", {
5321
5321
  processor_name: h.processor_name,
5322
5322
  prefill: mo(S, ["brand"]),
@@ -5506,7 +5506,7 @@ const { log__: Et, err__: Go } = T("authnet-applepay"), Gu = Re(
5506
5506
  return Et("No active cards available for Apple Pay"), r;
5507
5507
  if (!o.metadata.processor_account_id)
5508
5508
  throw new Error("No gateway merchant ID found in processor account");
5509
- const i = e.anyCdeConnection, a = await D(i), s = a.mode === "setup", c = await xe(i, a.token, s, void 0), l = async (u) => {
5509
+ const i = e.anyCdeConnection, a = await M(i), s = a.mode === "setup", c = await xe(i, a.token, s, void 0), l = async (u) => {
5510
5510
  try {
5511
5511
  await R.authorizeNetApplePay.run({
5512
5512
  context: e,
@@ -5541,7 +5541,7 @@ const { log__: Et, err__: Go } = T("authnet-applepay"), Gu = Re(
5541
5541
  formCallbacks: i
5542
5542
  }) => {
5543
5543
  var a;
5544
- const { initialPreview: s, overridePaymentRequest: c } = o, l = J(e.checkoutPaymentMethods, $o), u = e.anyCdeConnection, d = await D(u), f = d.mode === "setup", h = Po({
5544
+ const { initialPreview: s, overridePaymentRequest: c } = o, l = J(e.checkoutPaymentMethods, $o), u = e.anyCdeConnection, d = await M(u), f = d.mode === "setup", h = Po({
5545
5545
  overridePaymentRequest: c,
5546
5546
  initialPreview: s,
5547
5547
  prefill: d,
@@ -5629,7 +5629,7 @@ const { log__: Et, err__: Go } = T("authnet-applepay"), Gu = Re(
5629
5629
  } catch (h) {
5630
5630
  return We("Error checking Google Pay availability", h), i;
5631
5631
  }
5632
- const c = e.anyCdeConnection, l = await D(c), u = l.mode === "setup", d = await xe(c, l.token, u, void 0), f = async (h) => {
5632
+ const c = e.anyCdeConnection, l = await M(c), u = l.mode === "setup", d = await xe(c, l.token, u, void 0), f = async (h) => {
5633
5633
  try {
5634
5634
  R.authorizeNetGooglePay.run({
5635
5635
  context: e,
@@ -5671,7 +5671,7 @@ const { log__: Et, err__: Go } = T("authnet-applepay"), Gu = Re(
5671
5671
  merchantId: f.google_pay_merchant_id ?? "",
5672
5672
  initialPreview: u,
5673
5673
  overridePaymentRequest: d
5674
- }), p = e.anyCdeConnection, m = await D(p);
5674
+ }), p = e.anyCdeConnection, m = await M(p);
5675
5675
  g("google_pay_flow_started", {
5676
5676
  processor_name: r.processor_name,
5677
5677
  prefill: m,
@@ -5893,7 +5893,7 @@ Error: ${Q(t)}`), new Error(r);
5893
5893
  customParams: i
5894
5894
  }) => {
5895
5895
  Ie("├ Running unified CC flow...", { checkoutPaymentMethod: t });
5896
- const a = e.anyCdeConnection, s = await D(a);
5896
+ const a = e.anyCdeConnection, s = await M(a);
5897
5897
  Ie(`├ Validating non-CDE form fields [Mode: ${s.mode}]`);
5898
5898
  const c = pe(r, o.get.onValidationError), l = {
5899
5899
  session_id: e.elementsSessionId,
@@ -6029,7 +6029,7 @@ const hd = de(
6029
6029
  }) => {
6030
6030
  var a, s;
6031
6031
  A("├ Running common CC flow...", { checkoutPaymentMethod: t });
6032
- const c = e.anyCdeConnection, l = await D(c);
6032
+ const c = e.anyCdeConnection, l = await M(c);
6033
6033
  g("common_cc_flow_started", {
6034
6034
  ...t,
6035
6035
  prefill: l
@@ -6192,7 +6192,7 @@ const hd = de(
6192
6192
  Y("Checking if there are any CPMs for Loop Crypto...");
6193
6193
  const t = J(e.checkoutPaymentMethods, gd);
6194
6194
  Y(`checkoutPaymentMethod: ${JSON.stringify(t)}`), Y("Starting Loop Crypto flow...");
6195
- const r = await D(e.anyCdeConnection), o = r.mode === "setup", i = await Tr(e.anyCdeConnection, {
6195
+ const r = await M(e.anyCdeConnection), o = r.mode === "setup", i = await Tr(e.anyCdeConnection, {
6196
6196
  checkout_payment_method: t
6197
6197
  }), a = await xe(
6198
6198
  e.anyCdeConnection,
@@ -6207,13 +6207,14 @@ const hd = de(
6207
6207
  if (!i || !i.next_action_metadata)
6208
6208
  throw Error("Failed to fetch necessary setup data for Loop");
6209
6209
  const s = i.next_action_metadata;
6210
- let c;
6211
- o ? c = 0 : c = (a ? a.amountAtom : r.amount_total_atom) * s.token_price;
6212
- const l = c, u = s.authorization_amount, d = Te(), f = {
6213
- paymentUsdAmount: l,
6214
- suggestedAuthorizationUsdAmount: u,
6215
- customerRefId: d
6216
- }, h = {
6210
+ let c = s.authorization_amount, l = s.min_authorization_amount, u;
6211
+ o ? (u = 0, c = Math.max(c, l)) : (u = (a ? a.amountAtom : r.amount_total_atom) * s.token_price, l = Math.max(l, u), c = Math.max(c, l));
6212
+ const d = u, f = Te(), h = {
6213
+ paymentUsdAmount: d,
6214
+ suggestedAuthorizationUsdAmount: c,
6215
+ customerRefId: f,
6216
+ minAuthorizationUsdAmount: l
6217
+ }, p = {
6217
6218
  apiKey: t.metadata.api_token,
6218
6219
  entityId: t.metadata.entity_id,
6219
6220
  merchantId: t.metadata.merchant_id,
@@ -6221,8 +6222,8 @@ const hd = de(
6221
6222
  };
6222
6223
  return {
6223
6224
  isAvailable: !0,
6224
- widgetProps: f,
6225
- initLoopConnectProps: h
6225
+ widgetProps: h,
6226
+ initLoopConnectProps: p
6226
6227
  };
6227
6228
  }
6228
6229
  ), Ed = de(
@@ -6244,7 +6245,7 @@ const hd = de(
6244
6245
  o.get.onValidationError,
6245
6246
  bd
6246
6247
  );
6247
- const s = e.anyCdeConnection, c = await D(e.anyCdeConnection), l = c.mode !== "setup", u = await He(e.anyCdeConnection, {
6248
+ const s = e.anyCdeConnection, c = await M(e.anyCdeConnection), l = c.mode !== "setup", u = await He(e.anyCdeConnection, {
6248
6249
  checkout_payment_method: t,
6249
6250
  payment_provider: t.provider,
6250
6251
  new_customer_email: a.loopEmail,
@@ -6308,7 +6309,7 @@ const Sd = de(
6308
6309
  }) => {
6309
6310
  var a, s;
6310
6311
  ae("Running Pockyt Paypal flow...");
6311
- const c = e.anyCdeConnection, l = await D(c);
6312
+ const c = e.anyCdeConnection, l = await M(c);
6312
6313
  ae("Verifying CPM...");
6313
6314
  const u = Cd.parse(t);
6314
6315
  ae("├ Validating non-CDE form fields");
@@ -6385,7 +6386,7 @@ const Sd = de(
6385
6386
  U("Checking if there are any CPMs for Stripe Link...");
6386
6387
  const o = J(e.checkoutPaymentMethods, kd);
6387
6388
  U("Starting stripe link flow...");
6388
- const i = e.anyCdeConnection, a = await D(i), s = a.mode === "setup";
6389
+ const i = e.anyCdeConnection, a = await M(i), s = a.mode === "setup";
6389
6390
  U("Creating stripe elements...");
6390
6391
  const c = await xe(i, a.token, s, void 0), { elements: l, stripe: u } = await Qs(o.metadata.stripe_pk, {
6391
6392
  mode: "setup",
@@ -6467,7 +6468,7 @@ const Sd = de(
6467
6468
  customer_language: Oe()
6468
6469
  });
6469
6470
  U("Start payment flow response", l);
6470
- const u = Id.parse(l.required_user_actions)[0].our_existing_pm_id, d = await D(a);
6471
+ const u = Id.parse(l.required_user_actions)[0].our_existing_pm_id, d = await M(a);
6471
6472
  if (d.mode === "setup") {
6472
6473
  U("Doing payment setup...");
6473
6474
  const f = await K(a, {
@@ -6518,7 +6519,7 @@ const Sd = de(
6518
6519
  z("Checking if there are any CPMs for Stripe PR...");
6519
6520
  const r = J(e.checkoutPaymentMethods, jd);
6520
6521
  z("Initializing Stripe PR flow...");
6521
- const o = e.anyCdeConnection, i = await D(o), a = i.mode === "setup";
6522
+ const o = e.anyCdeConnection, i = await M(o), a = i.mode === "setup";
6522
6523
  z("Getting initial preview amount");
6523
6524
  const s = await xe(o, i.token, a, void 0), c = await Js(
6524
6525
  r.metadata.stripe_pk,
@@ -6533,7 +6534,7 @@ const Sd = de(
6533
6534
  z("Stripe PR flow initialized successfully. Can make payment", l);
6534
6535
  const u = (d, f) => R.stripePR.run({
6535
6536
  context: e,
6536
- checkoutPaymentMethod: Me(e.checkoutPaymentMethods, d),
6537
+ checkoutPaymentMethod: De(e.checkoutPaymentMethods, d),
6537
6538
  nonCdeFormInputs: Z(e.formDiv),
6538
6539
  formCallbacks: t,
6539
6540
  customParams: { provider: d, overridePaymentRequest: f == null ? void 0 : f.overridePaymentRequest },
@@ -6556,7 +6557,7 @@ const Sd = de(
6556
6557
  startFlow: u
6557
6558
  };
6558
6559
  }
6559
- ), Dd = de(
6560
+ ), Md = de(
6560
6561
  async ({
6561
6562
  context: e,
6562
6563
  checkoutPaymentMethod: t,
@@ -6577,7 +6578,7 @@ const Sd = de(
6577
6578
  z("Showing PR dialog..."), c.show();
6578
6579
  const l = await Ws(c);
6579
6580
  z("Stripe PM added event:", l), z("Merging PM fields with form fields...");
6580
- const u = Md(r, l), d = pe(u, o.get.onValidationError);
6581
+ const u = Dd(r, l), d = pe(u, o.get.onValidationError);
6581
6582
  g("billing_details_received", {
6582
6583
  ...d
6583
6584
  }), z("PR dialog finished. Starting payment flow...", d);
@@ -6586,7 +6587,7 @@ const Sd = de(
6586
6587
  checkoutPaymentMethod: t
6587
6588
  }), h = Ud(f);
6588
6589
  z("Confirming PR with Stripe..."), await Xs(h, l);
6589
- const p = await D(s);
6590
+ const p = await M(s);
6590
6591
  if (p.mode === "setup") {
6591
6592
  z("Confirming payment flow for setup...");
6592
6593
  const m = await K(s, {
@@ -6614,7 +6615,7 @@ const Sd = de(
6614
6615
  return { mode: "checkout", result: await Ar(s, m) };
6615
6616
  }
6616
6617
  }
6617
- ), Md = (e, t) => {
6618
+ ), Dd = (e, t) => {
6618
6619
  var r, o, i, a;
6619
6620
  const s = { ...e }, [c, ...l] = ((o = (r = t.payerName) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0, d = (a = (i = t.paymentMethod) == null ? void 0 : i.billing_details) == null ? void 0 : a.address, f = t.shippingAddress;
6620
6621
  s[y.EMAIL] = s[y.EMAIL] || t.payerEmail || "op_unfilled@getopenpay.com", s[y.ZIP_CODE] = s[y.ZIP_CODE] || (d == null ? void 0 : d.postal_code) || (f == null ? void 0 : f.postalCode) || "00000", s[y.COUNTRY] = s[y.COUNTRY] || (d == null ? void 0 : d.country) || (f == null ? void 0 : f.country) || "US";
@@ -6677,7 +6678,7 @@ Details: got ${e.required_user_actions.length} required user actions`);
6677
6678
  }) => {
6678
6679
  try {
6679
6680
  Se("Running PayPal flow...");
6680
- const a = e.anyCdeConnection, s = await D(a), { isAnonymous: c, useRedirectFlow: l } = i.settings ?? {};
6681
+ const a = e.anyCdeConnection, s = await M(a), { isAnonymous: c, useRedirectFlow: l } = i.settings ?? {};
6681
6682
  Se("Verifying CPM...");
6682
6683
  const u = ti.parse(r);
6683
6684
  Se("├ Validating non-CDE form fields");
@@ -6731,7 +6732,7 @@ Details: got ${e.required_user_actions.length} required user actions`);
6731
6732
  throw qd("PayPal payment error", a), g("checkout_error", { payment_method: "paypal", error: a }), new Error((a == null ? void 0 : a.message) ?? "Unknown error");
6732
6733
  }
6733
6734
  }
6734
- ), Me = (e, t, r) => {
6735
+ ), De = (e, t, r) => {
6735
6736
  const o = e.filter((i) => {
6736
6737
  const a = r === void 0 ? !0 : i.processor_name === r, s = i.provider === t;
6737
6738
  return a && s;
@@ -6754,7 +6755,7 @@ Details: got ${e.required_user_actions.length} required user actions`);
6754
6755
  // Stripe
6755
6756
  stripePR: {
6756
6757
  init: Nd,
6757
- run: Dd
6758
+ run: Md
6758
6759
  },
6759
6760
  stripeLink: {
6760
6761
  init: Ad,
@@ -6879,7 +6880,7 @@ let pn;
6879
6880
  const Jd = async (e, t) => {
6880
6881
  if (typeof window > "u")
6881
6882
  return;
6882
- const r = await import("./index-hlw2CLDg-CvpGBRWb.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-SDtMvSt9-B3WXwcGr.js"), { FetchInstrumentation: c } = s, l = await import("./index-BufYIG0q-CphSOJz1.js"), { ZoneContextManager: u } = l, d = await import("./index-C1QTH_fF-7edQgvhb.js"), { registerInstrumentations: f } = d, h = await import("./index-rsJVRXFy-BlJGDRfL.js"), { Resource: p } = h, m = await import("./detect-resources-BVj-Nv9j-D-K1Nx4L.js").then((me) => me.d), { detectResourcesSync: _ } = m, E = await import("./index-73Zci8QM-BH36xwJQ.js"), { OTLPTraceExporter: v } = E, S = await import("./index-Bzsy-QHz-BSCoOj2p.js"), { B3Propagator: C, B3InjectEncoding: P } = S, G = await import("./index-C6VsGa_X-DnI1zZA6.js"), { BatchSpanProcessor: $ } = G;
6883
+ const r = await import("./index-3bEWNO5t-BsGbK2jn.js"), { ConsoleSpanExporter: o, SimpleSpanProcessor: i, WebTracerProvider: a } = r, s = await import("./index-iyB-OjaA-Da9gb31C.js"), { FetchInstrumentation: c } = s, l = await import("./index-CUozohep-CbkzYFm9.js"), { ZoneContextManager: u } = l, d = await import("./index-DR3rTKvi-CtZOD_q9.js"), { registerInstrumentations: f } = d, h = await import("./index-2ucNr53i-DQQtLs7t.js"), { Resource: p } = h, m = await import("./detect-resources-CDf272jb-BKXOZPGL.js").then((me) => me.d), { detectResourcesSync: _ } = m, E = await import("./index-CPQpoLe--DSQasqi3.js"), { OTLPTraceExporter: v } = E, S = await import("./index-CIyvfLCj-DCd9pJyd.js"), { B3Propagator: C, B3InjectEncoding: P } = S, G = await import("./index-Dt81UMoA-pXGGrD8J.js"), { BatchSpanProcessor: $ } = G;
6883
6884
  ir(`Initializing tracer with version ${e} and baseUrl ${t}`);
6884
6885
  const W = Wd(t);
6885
6886
  ir(`Using collector URL ${W}`);
@@ -6979,7 +6980,7 @@ const oi = "op_analytics_device_token", sp = () => {
6979
6980
  };
6980
6981
  function lp() {
6981
6982
  try {
6982
- const e = M(), t = e;
6983
+ const e = D(), t = e;
6983
6984
  if (t != null && t.next || t != null && t.__NEXT_DATA__ || document.querySelector("#__next"))
6984
6985
  return "nextjs";
6985
6986
  const r = e;
@@ -7003,7 +7004,7 @@ function up(e) {
7003
7004
  case "react":
7004
7005
  return null;
7005
7006
  case "nextjs": {
7006
- const i = M();
7007
+ const i = D();
7007
7008
  return ((t = i == null ? void 0 : i.next) == null ? void 0 : t.version) || ((r = i == null ? void 0 : i.__NEXT_DATA__) == null ? void 0 : r.buildId) || null;
7008
7009
  }
7009
7010
  case "nuxt":
@@ -7011,7 +7012,7 @@ function up(e) {
7011
7012
  case "vue":
7012
7013
  return null;
7013
7014
  case "angular": {
7014
- const i = (o = M()) == null ? void 0 : o.document, a = i == null ? void 0 : i.querySelector("[ng-version]");
7015
+ const i = (o = D()) == null ? void 0 : o.document, a = i == null ? void 0 : i.querySelector("[ng-version]");
7015
7016
  return a ? a.getAttribute("ng-version") : null;
7016
7017
  }
7017
7018
  default:
@@ -7125,12 +7126,12 @@ const hp = (e, t, r) => {
7125
7126
  });
7126
7127
  }, hn = (e, t, r, o, i) => R.stripePR.run({
7127
7128
  context: r,
7128
- checkoutPaymentMethod: Me(r.checkoutPaymentMethods, e),
7129
+ checkoutPaymentMethod: De(r.checkoutPaymentMethods, e),
7129
7130
  nonCdeFormInputs: Z(r.formDiv),
7130
7131
  formCallbacks: o,
7131
7132
  customParams: { provider: e, overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest },
7132
7133
  initResult: t
7133
- }), yn = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: se, err__: ce } = T("op-form"), De = class St {
7134
+ }), yn = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: se, err__: ce } = T("op-form"), Me = class St {
7134
7135
  constructor(t) {
7135
7136
  var r;
7136
7137
  this.isDestroyed = !1, this.cdeLoadEvent = new tt(), this.anyCdeConn = new tt(), this.context = new tt(), this.initFlows = Yd(), this.isSubmitting = !1, this.startFormInit = async () => {
@@ -7279,7 +7280,7 @@ const hp = (e, t, r) => {
7279
7280
  throw new Error("Please wait for the form to finish loading before submitting.");
7280
7281
  await R.commonCC.run({
7281
7282
  context: c,
7282
- checkoutPaymentMethod: Me(c.checkoutPaymentMethods, "credit_card"),
7283
+ checkoutPaymentMethod: De(c.checkoutPaymentMethods, "credit_card"),
7283
7284
  nonCdeFormInputs: Z(c.formDiv),
7284
7285
  formCallbacks: this.formCallbacks,
7285
7286
  customParams: {
@@ -7349,7 +7350,7 @@ const hp = (e, t, r) => {
7349
7350
  case B.pockytPaypal:
7350
7351
  return R.pockytPaypal.run({
7351
7352
  context: l,
7352
- checkoutPaymentMethod: Me(
7353
+ checkoutPaymentMethod: De(
7353
7354
  l.checkoutPaymentMethods,
7354
7355
  "paypal",
7355
7356
  "pockyt"
@@ -7362,7 +7363,7 @@ const hp = (e, t, r) => {
7362
7363
  case B.paypal:
7363
7364
  return R.paypal.run({
7364
7365
  context: l,
7365
- checkoutPaymentMethod: Me(
7366
+ checkoutPaymentMethod: De(
7366
7367
  l.checkoutPaymentMethods,
7367
7368
  "paypal",
7368
7369
  "paypal"
@@ -7415,7 +7416,7 @@ const hp = (e, t, r) => {
7415
7416
  case B.loopCrypto:
7416
7417
  return R.loopCrypto.run({
7417
7418
  context: l,
7418
- checkoutPaymentMethod: Me(
7419
+ checkoutPaymentMethod: De(
7419
7420
  l.checkoutPaymentMethods,
7420
7421
  "crypto",
7421
7422
  "loop"
@@ -7439,10 +7440,10 @@ const hp = (e, t, r) => {
7439
7440
  se("Destroying OpenPay form..."), this.checkValidFormInstance("destroy"), this.isDestroyed = !0;
7440
7441
  for (const s of Object.values(this.registeredElements ?? {}))
7441
7442
  s && s.node.remove();
7442
- (a = M()) == null || a.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), pu(), this.registeredElements = null, delete window.ojs, g("form_destroyed");
7443
+ (a = D()) == null || a.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), pu(), this.registeredElements = null, delete window.ojs, g("form_destroyed");
7443
7444
  }, this.updateCallbacks = (a) => {
7444
7445
  this.formCallbacks.setCallbacks(a);
7445
- }, St.assignAsSingleton(this), this.ojsVersion = "0.3.13", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = Kd.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Te()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new fp(), this.deviceToken = sp(), du();
7446
+ }, St.assignAsSingleton(this), this.ojsVersion = "0.3.14", this.ojsReleaseVersion = "local_build", this.baseUrl = t.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...t, baseUrl: this.baseUrl }, this.formCallbacks = Kd.fromObject(t), this.registeredElements = null, this.formId = `opjs-form-${Te()}`, this.referrer = window.location.origin, this.formTarget = t.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new fp(), this.deviceToken = sp(), du();
7446
7447
  const { framework: o, version: i } = dp();
7447
7448
  po(this.baseUrl).then((a) => {
7448
7449
  if (!hr.current.isSuccess) {
@@ -7463,7 +7464,7 @@ const hp = (e, t, r) => {
7463
7464
  setFormHeight: this.setFormHeight,
7464
7465
  onCdeLoaded: this.onCdeLoaded,
7465
7466
  onCdeLoadError: this.onCdeLoadError
7466
- }), (r = M()) == null || r.addEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.startFormInit();
7467
+ }), (r = D()) == null || r.addEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.startFormInit();
7467
7468
  }
7468
7469
  get checkoutSecureToken() {
7469
7470
  return this.config.checkoutSecureToken;
@@ -7490,11 +7491,11 @@ const hp = (e, t, r) => {
7490
7491
  return this.isDestroyed ? (ce(i), g("outdated_form_instance", { error: i }), !1) : !r || r.formId !== this.formId ? (ce(i), g("outdated_form_instance", { error: i }), !1) : !0;
7491
7492
  }
7492
7493
  };
7493
- De.ojsFlows = R, De.assignAsSingleton = (e) => {
7494
- if (De.getInstance())
7494
+ Me.ojsFlows = R, Me.assignAsSingleton = (e) => {
7495
+ if (Me.getInstance())
7495
7496
  throw new Error("OpenPay instance already exists. Only one instance is allowed.");
7496
7497
  window.ojs = e;
7497
- }, De.getInstance = () => window.ojs ?? null, De.buildOjsFlowContext = (e, t, r, o) => ({
7498
+ }, Me.getInstance = () => window.ojs ?? null, Me.buildOjsFlowContext = (e, t, r, o) => ({
7498
7499
  checkoutSecureToken: e.checkoutSecureToken,
7499
7500
  baseUrl: new URL(e.baseUrl ?? Ln).origin,
7500
7501
  formDiv: o,
@@ -7504,7 +7505,7 @@ De.ojsFlows = R, De.assignAsSingleton = (e) => {
7504
7505
  customInitParams: e.customInitParams ?? {},
7505
7506
  preventNavigationDuringSubmission: e.preventNavigationDuringSubmission
7506
7507
  });
7507
- let Ot = De;
7508
+ let Ot = Me;
7508
7509
  const yp = (e) => {
7509
7510
  var r;
7510
7511
  const t = ur.fromObject({
@@ -7602,7 +7603,7 @@ const yp = (e) => {
7602
7603
  airwallex: p,
7603
7604
  loop: f
7604
7605
  };
7605
- return /* @__PURE__ */ re(Kt, { children: o ? /* @__PURE__ */ re(Mn.Provider, { value: o, children: /* @__PURE__ */ re("div", { id: _n, className: e.className, children: e.children(E) }) }) : /* @__PURE__ */ re(Kt, {}) });
7606
+ return /* @__PURE__ */ re(Kt, { children: o ? /* @__PURE__ */ re(Dn.Provider, { value: o, children: /* @__PURE__ */ re("div", { id: _n, className: e.className, children: e.children(E) }) }) : /* @__PURE__ */ re(Kt, {}) });
7606
7607
  }, gp = (e) => ({
7607
7608
  formId: e.formId,
7608
7609
  formHeight: e.formProperties.height,
@@ -7643,4 +7644,4 @@ export {
7643
7644
  ls as u,
7644
7645
  at as z
7645
7646
  };
7646
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogYXMgeiQxIH0gZnJvbSAnem9kJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBjb25uZWN0VG9DaGlsZCB9IGZyb20gJ3BlbnBhbCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsganN4LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8sIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicG9ja3l0UGF5cGFsXCJdID0gXCJwb2NreXQtcGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xudmFyIEZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEZpZWxkTmFtZTIpID0+IHtcbiAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiTEFTVF9OQU1FXCJdID0gXCJsYXN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0geiQxLnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNERV9CUklER0VcIl0gPSBcImNkZS1icmlkZ2VcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xueiQxLm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gIGN2YzogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImFkZHJlc3NcIiAvKiBBRERSRVNTICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmcsXG4gIHBheW1lbnRSb3V0ZUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMkMShDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKSxcbiAgcHJvY2Vzc29yc191c2VkOiBudWxsT3JVbmRlZk9yKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFByaWNlUXR5ID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQ2FydEluZm8gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgdXNlX3VuaWZpZWRfY2NfZmxvdzogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGV2ZW50czogeiQxLmFycmF5KFxuICAgIHokMS5vYmplY3Qoe1xuICAgICAgZXZlbnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnokMS5hbnkoKS5vcHRpb25hbCgpO1xueiQxLm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe30pO1xueiQxLm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6JDEuc3RyaW5nKCksXG4gIF91bmlmaWVkX2NjX3BjY3NfaWQ6IHokMS5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoeiQxLmFueSgpKTtcblxuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7Y2hhbGsuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5mdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xudmFyIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcblxudmFyIHRpbWVvdXRQcm92aWRlciA9IHtcbiAgICBzZXRUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuXG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuXG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyKSk7XG5cbnZhciBhc3luY1NjaGVkdWxlciA9IG5ldyBBc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbik7XG5cbnZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cblxuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGluaXQpO1xufVxuXG52YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbnokMS5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cbmNvbnN0IGdldFdpbmRvd1NhZmUgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICByZXR1cm4gd2luZG93O1xufTtcblxuY29uc3QgbWV0cmljc1B1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG5jb25zdCBNRVRSSUNTX1FVRVVFX0tFWSA9IFwib3BfbWV0cmljc19xdWV1ZVwiO1xuY29uc3QgTUFYX1JFVFJZX0FUVEVNUFRTID0gMztcbmNvbnN0IEJBVENIX1NJWkUgPSAzO1xuY29uc3QgQkFUQ0hfSU5URVJWQUxfTVMgPSAxZTM7XG5jb25zdCB7IGxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBNZXRyaWNzUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwO1xuICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18oXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfTtcbiAgICB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogY29udGV4dFByb3BlcnRpZXMgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChzYWZlV2luZG93ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gc2FmZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZClcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18oXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6JDEuZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xueiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xudmFyIFBheUluRmFpbGVkID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5GYWlsZWQyKSA9PiB7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9CQUxBTkNFXCJdID0gXCJpbnN1ZmZpY2llbnRCYWxhbmNlXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9BVVRIT1JJWkFUSU9OXCJdID0gXCJpbnN1ZmZpY2llbnRBdXRob3JpemF0aW9uXCI7XG4gIFBheUluRmFpbGVkMltcIlNJR05FRF9NRVNTQUdFX1JFUVVJUkVEXCJdID0gXCJzaWduZWRNZXNzYWdlUmVxdWlyZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiQ1VTVE9NRVJfQ1JFQVRJT05fRkFJTEVEXCJdID0gXCJjdXN0b21lckNyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlBBWU1FTlRfRkFJTEVEXCJdID0gXCJwYXltZW50RmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlRSQU5TQUNUSU9OX0ZBSUxFRFwiXSA9IFwidHJhbnNhY3Rpb25GYWlsZWRcIjtcbiAgcmV0dXJuIFBheUluRmFpbGVkMjtcbn0pKFBheUluRmFpbGVkIHx8IHt9KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJQUk9DRVNTSU5HX1BBWU1FTlRcIl0gPSBcInByb2Nlc3NpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfUEFZTUVOVFwiXSA9IFwiY3JlYXRpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19QQVlNRU5UXCJdID0gXCJjb25maXJtaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTVBMRVRFXCJdID0gXCJjb21wbGV0ZVwiO1xuICBQYXlJblN0YXRlMltcIkFVVEhPUklaRURcIl0gPSBcImF1dGhvcml6ZWRcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbmNvbnN0IExPT1BfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIGNvbmZpZzogbnVsbCxcbiAgd2lkZ2V0OiBudWxsXG59O1xueiQxLm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7IGNsaWVudF9pZDogeiQxLnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvYCwgYmFzZVVybCk7XG4gIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZztcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiB1cmwudG9TdHJpbmcoKSxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmNvbnN0IGdyID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCBWbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIEduID0geiQxLmFycmF5KFZuKSwgem4gPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgcW4gPSB6JDEuYXJyYXkoem4pLCBCbiA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgU3QgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIEJuW3RdID8/IGU7XG59LCBZbiA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKGUpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgSG4gPSAoZSkgPT4gZS5sZW5ndGggPT09IDEgPyBTdChlWzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGDigKIgJHtTdChyLm1zZyl9YCkuam9pbihgXG5gKX1gLCBKbiA9IChlKSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKChyKSA9PiBgLSAke3IucGF0aC5qb2luKFwiL1wiKX06ICR7ci5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgWSA9IChlKSA9PiB7XG4gIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgaWYgKFluKGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IHQgPSBKU09OLnBhcnNlKGUubWVzc2FnZSk7XG4gICAgICByZXR1cm4gR24uc2FmZVBhcnNlKHQpLnN1Y2Nlc3MgPyBIbih0KSA6IHFuLnNhZmVQYXJzZSh0KS5zdWNjZXNzID8gSm4odCkgOiAoY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCksIGUubWVzc2FnZSk7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gU3QoZS5tZXNzYWdlKTtcbiAgaWYgKHR5cGVvZiBlID09IFwib2JqZWN0XCIpXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4gdCArIFwiXCI7XG4gICAgfVxuICBlbHNlXG4gICAgcmV0dXJuIGUgKyBcIlwiO1xufSwgV24gPSAoZSwgdCwgcikgPT4gKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdCguLi5uKTtcbiAgfSBjYXRjaCAobykge1xuICAgIHIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2V9KTpgLCBvKTtcbiAgICByZXR1cm47XG4gIH1cbn07XG52YXIgJCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLnBvY2t5dFBheXBhbCA9IFwicG9ja3l0LXBheXBhbFwiLCBlLmFpcndhbGxleEdvb2dsZVBheSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIiwgZS5haXJ3YWxsZXhBcHBsZVBheSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEdvb2dsZVBheSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRBcHBsZVBheSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiLCBlLmxvb3BDcnlwdG8gPSBcImxvb3AtY3J5cHRvXCIsIGUucGF5cGFsID0gXCJwYXlwYWxcIiwgZSkpKCQgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oJCk7IGNvbnN0IE4gPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIFAgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIFIgPSAoZSkgPT4geiQxLm51bGxhYmxlKGUub3B0aW9uYWwoKSk7XG52YXIgbSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCBlLkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgZS5FTUFJTCA9IFwiZW1haWxcIiwgZS5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCBlLkNJVFkgPSBcImNpdHlcIiwgZS5TVEFURSA9IFwic3RhdGVcIiwgZS5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIGUuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCBlLlBIT05FID0gXCJwaG9uZVwiLCBlLlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIGUpKShtIHx8IHt9KTtcbmNvbnN0IHdyID0geiQxLm5hdGl2ZUVudW0obSk7XG52YXIgdnIgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCBlLkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgZSkpKHZyIHx8IHt9KTtcbmNvbnN0IGJyID0geiQxLm5hdGl2ZUVudW0odnIpLCBFciA9IHokMS51bmlvbihbd3IsIGJyXSk7XG52YXIgdGUgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEID0gXCJjYXJkXCIsIGUuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIGUuQ0RFX0JSSURHRSA9IFwiY2RlLWJyaWRnZVwiLCBlKSkodGUgfHwge30pO1xuY29uc3QgS24gPSB6JDEubmF0aXZlRW51bSh0ZSksIHN0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBSKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIFpuID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IFAsXG4gIGV4cGlyeTogUCxcbiAgY3ZjOiBQXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IFAsXG4gIGNvbG9yOiBQLFxuICBmb250RmFtaWx5OiBQLFxuICBmb250U2l6ZTogUCxcbiAgZm9udFdlaWdodDogUCxcbiAgbWFyZ2luOiBQLFxuICBwYWRkaW5nOiBQLFxuICBsZXR0ZXJTcGFjaW5nOiBQLFxuICBsaW5lSGVpZ2h0OiBQLFxuICBoaWRlSWNvbjogUFxufSk7XG5jb25zdCBaID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIFFuID0gWi5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgWG4gPSB6JDEub2JqZWN0KHsgdHlwZTogUW4gfSksIGVvID0gWi5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSksIHRvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IGVvLFxuICBlbGVtZW50VHlwZTogYnIsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIHJvID0gWi5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgbm8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogcm8sXG4gIG1lc3NhZ2U6IE4sXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBvbyA9IFouZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKSwgYW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogb28sXG4gIGVsZW1lbnRUeXBlOiBFcixcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIGlvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFouZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IE5cbn0pLCBzbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChaLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBOLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBQLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoc3QpXG59KSwgY28gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoWi5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGxvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFouZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pLCBZZSA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IE4sXG4gIGxhc3ROYW1lOiBOLFxuICBlbWFpbDogTixcbiAgemlwQ29kZTogTixcbiAgY291bnRyeTogTixcbiAgcHJvbW90aW9uQ29kZTogUFxufSksIHVvID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogUCxcbiAgbGFzdE5hbWU6IFAsXG4gIGVtYWlsOiBOLFxuICB6aXBDb2RlOiBOLFxuICBjb3VudHJ5OiBOLFxuICBwcm9tb3Rpb25Db2RlOiBQLFxuICBhZGRyZXNzOiBQLFxuICBjaXR5OiBQLFxuICBzdGF0ZTogUFxufSksIHBvID0gWi5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCBtbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBwbyxcbiAgc2Vzc2lvbklkOiBOLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0LFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IFAsXG4gIHBheW1lbnRSb3V0ZUlkOiBQXG59KS5leHRlbmQoWWUuc2hhcGUpLCBmbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChaLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksIF9vID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFouZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCB5byA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgWG4sXG4gIHRvLFxuICBubyxcbiAgYW8sXG4gIGlvLFxuICBzbyxcbiAgbW8sXG4gIGZvLFxuICBfbyxcbiAgY28sXG4gIGxvXG5dKSwgaG8gPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogeW8sXG4gIG5vbmNlOiBOLFxuICBmb3JtSWQ6IE4sXG4gIGVsZW1lbnRJZDogTlxufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBOXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogUih6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogUih6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogUih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgJGUgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogUih6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCBnbyA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3Qgd28gPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KGdvKVxufSksIHZvID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICB3b1xuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogc3QsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFllLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogUih6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogUih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBzdCxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogWWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBSKHokMS5zdHJpbmcoKSlcbn0pO1xudmFyIEQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShEIHx8IHt9KTtcbmNvbnN0IGJvID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgRW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBDciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogUih6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogUih6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogUih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBDbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCEwKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITEpIH0pXG5dKSwgU28gPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoWm4pLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogUigkZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogUih6JDEuYXJyYXkoQ3IpKSxcbiAgcG9zdF9jaGVja291dF9yZWRpcmVjdF90bzogUih6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBSKCRlKVxufSksIFNyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG8gPSB3ci5wYXJzZShyKTtcbiAgICAgIEFycmF5LmlzQXJyYXkobikgPyB0W29dID0gbiA6IEFycmF5LmlzQXJyYXkobi5fZXJyb3JzKSAmJiAodFtvXSA9IG4uX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgdDtcbn0sIFBvID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwga28gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KSwgQW8gPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59LCBjdCA9IGFzeW5jIChlKSA9PiB7XG4gIGZvciAobGV0IHIgPSAwOyByIDwgMTA7IHIrKylcbiAgICB6dCgpIHx8IGF3YWl0IGx0KDUwMCk7XG4gIGlmICghenQoKSlcbiAgICB0aHJvdyBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpLCBuZXcgRXJyb3IoXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgcmV0dXJuIG5ldyBTdHJpcGUoZSk7XG59LCBJbyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBjdChlKTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogci5lbGVtZW50cyh0KSxcbiAgICBzdHJpcGU6IHJcbiAgfTtcbn0sIFRvID0gYXN5bmMgKGUsIHQsIHIsIG4sIG8pID0+IHtcbiAgY29uc3QgaSA9IGF3YWl0IGN0KGUpLCBzID0gQW9bci50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIHJldHVybiBpLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogcyxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdCxcbiAgICAgIHBlbmRpbmc6IG5cbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgbHQgPSAoZSkgPT4gbmV3IFByb21pc2UoKHQpID0+IHtcbiAgc2V0VGltZW91dCh0LCBlKTtcbn0pLCB6dCA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBSbyA9IGFzeW5jIChlKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICB0cnkge1xuICAgIGUub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIG4pLCB0KG4pO1xuICAgIH0pLCBlLm9uKFwidG9rZW5cIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIG4pO1xuICAgIH0pLCBlLm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIHIobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIHIobik7XG4gIH1cbn0pLCBObyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICghZS5zdHJpcGVfcGsgfHwgIWUuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IGN0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogdC5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyB0LmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiB0LmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIEZvID0gYXN5bmMgKGUpID0+IHtcbiAgdmFyIG8sIGksIHMsIGM7XG4gIGNvbnN0IHIgPSBhd2FpdCAoYXdhaXQgY3QoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBlLnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChvID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IG8uc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIGUuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgci5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygoaSA9IHIuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2UpID8/ICgoYyA9IChzID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHMubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufSwgTW8gPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIEIgPSAoZSwgdCkgPT4gQXJyYXkuZnJvbShlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChvLCBpKSA9PiB7XG4gIGNvbnN0IHMgPSBpLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIHMgPyB7IC4uLm8sIFtzXTogaS52YWx1ZSB9IDogbztcbn0sIHt9KSwgRG8gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBoby5wYXJzZShlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGUsIHQpLCB0O1xuICB9XG59O1xudmFyIE9vID0gdHlwZW9mIGdsb2JhbFRoaXMgPT0gXCJvYmplY3RcIiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygc2VsZiA9PSBcIm9iamVjdFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHt9LCBmZSA9IFwiMS45LjBcIiwgcXQgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSgtKC4rKSk/JC87XG5mdW5jdGlvbiBMbyhlKSB7XG4gIHZhciB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW2VdKSwgciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIG4gPSBlLm1hdGNoKHF0KTtcbiAgaWYgKCFuKVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9O1xuICB2YXIgbyA9IHtcbiAgICBtYWpvcjogK25bMV0sXG4gICAgbWlub3I6ICtuWzJdLFxuICAgIHBhdGNoOiArblszXSxcbiAgICBwcmVyZWxlYXNlOiBuWzRdXG4gIH07XG4gIGlmIChvLnByZXJlbGVhc2UgIT0gbnVsbClcbiAgICByZXR1cm4gZnVuY3Rpb24obCkge1xuICAgICAgcmV0dXJuIGwgPT09IGU7XG4gICAgfTtcbiAgZnVuY3Rpb24gaShjKSB7XG4gICAgcmV0dXJuIHIuYWRkKGMpLCAhMTtcbiAgfVxuICBmdW5jdGlvbiBzKGMpIHtcbiAgICByZXR1cm4gdC5hZGQoYyksICEwO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihsKSB7XG4gICAgaWYgKHQuaGFzKGwpKVxuICAgICAgcmV0dXJuICEwO1xuICAgIGlmIChyLmhhcyhsKSlcbiAgICAgIHJldHVybiAhMTtcbiAgICB2YXIgdSA9IGwubWF0Y2gocXQpO1xuICAgIGlmICghdSlcbiAgICAgIHJldHVybiBpKGwpO1xuICAgIHZhciBkID0ge1xuICAgICAgbWFqb3I6ICt1WzFdLFxuICAgICAgbWlub3I6ICt1WzJdLFxuICAgICAgcGF0Y2g6ICt1WzNdLFxuICAgICAgcHJlcmVsZWFzZTogdVs0XVxuICAgIH07XG4gICAgcmV0dXJuIGQucHJlcmVsZWFzZSAhPSBudWxsIHx8IG8ubWFqb3IgIT09IGQubWFqb3IgPyBpKGwpIDogby5tYWpvciA9PT0gMCA/IG8ubWlub3IgPT09IGQubWlub3IgJiYgby5wYXRjaCA8PSBkLnBhdGNoID8gcyhsKSA6IGkobCkgOiBvLm1pbm9yIDw9IGQubWlub3IgPyBzKGwpIDogaShsKTtcbiAgfTtcbn1cbnZhciBqbyA9IExvKGZlKSwgVW8gPSBmZS5zcGxpdChcIi5cIilbMF0sIFZlID0gU3ltYm9sLmZvcihcIm9wZW50ZWxlbWV0cnkuanMuYXBpLlwiICsgVW8pLCBHZSA9IE9vO1xuZnVuY3Rpb24gRnQoZSwgdCwgciwgbikge1xuICB2YXIgbztcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gITEpO1xuICB2YXIgaSA9IEdlW1ZlXSA9IChvID0gR2VbVmVdKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDoge1xuICAgIHZlcnNpb246IGZlXG4gIH07XG4gIGlmICghbiAmJiBpW2VdKSB7XG4gICAgdmFyIHMgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IEF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIEFQSTogXCIgKyBlKTtcbiAgICByZXR1cm4gci5lcnJvcihzLnN0YWNrIHx8IHMubWVzc2FnZSksICExO1xuICB9XG4gIGlmIChpLnZlcnNpb24gIT09IGZlKSB7XG4gICAgdmFyIHMgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdHJhdGlvbiBvZiB2ZXJzaW9uIHZcIiArIGkudmVyc2lvbiArIFwiIGZvciBcIiArIGUgKyBcIiBkb2VzIG5vdCBtYXRjaCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgQVBJIHZcIiArIGZlKTtcbiAgICByZXR1cm4gci5lcnJvcihzLnN0YWNrIHx8IHMubWVzc2FnZSksICExO1xuICB9XG4gIHJldHVybiBpW2VdID0gdCwgci5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0ZXJlZCBhIGdsb2JhbCBmb3IgXCIgKyBlICsgXCIgdlwiICsgZmUgKyBcIi5cIiksICEwO1xufVxuZnVuY3Rpb24gemUoZSkge1xuICB2YXIgdCwgciwgbiA9ICh0ID0gR2VbVmVdKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnZlcnNpb247XG4gIGlmICghKCFuIHx8ICFqbyhuKSkpXG4gICAgcmV0dXJuIChyID0gR2VbVmVdKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByW2VdO1xufVxuZnVuY3Rpb24gTXQoZSwgdCkge1xuICB0LmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBmZSArIFwiLlwiKTtcbiAgdmFyIHIgPSBHZVtWZV07XG4gIHIgJiYgZGVsZXRlIHJbZV07XG59XG52YXIgeG8gPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sICRvID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIFZvID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdGhpcy5fbmFtZXNwYWNlID0gdC5uYW1lc3BhY2UgfHwgXCJEaWFnQ29tcG9uZW50TG9nZ2VyXCI7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBNZShcImRlYnVnXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gTWUoXCJlcnJvclwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gTWUoXCJpbmZvXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBNZShcIndhcm5cIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS52ZXJib3NlID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIE1lKFwidmVyYm9zZVwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIE1lKGUsIHQsIHIpIHtcbiAgdmFyIG4gPSB6ZShcImRpYWdcIik7XG4gIGlmIChuKVxuICAgIHJldHVybiByLnVuc2hpZnQodCksIG5bZV0uYXBwbHkobiwgJG8oW10sIHhvKHIpLCAhMSkpO1xufVxudmFyIEc7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuTk9ORSA9IDBdID0gXCJOT05FXCIsIGVbZS5FUlJPUiA9IDMwXSA9IFwiRVJST1JcIiwgZVtlLldBUk4gPSA1MF0gPSBcIldBUk5cIiwgZVtlLklORk8gPSA2MF0gPSBcIklORk9cIiwgZVtlLkRFQlVHID0gNzBdID0gXCJERUJVR1wiLCBlW2UuVkVSQk9TRSA9IDgwXSA9IFwiVkVSQk9TRVwiLCBlW2UuQUxMID0gOTk5OV0gPSBcIkFMTFwiO1xufSkoRyB8fCAoRyA9IHt9KSk7XG5mdW5jdGlvbiBHbyhlLCB0KSB7XG4gIGUgPCBHLk5PTkUgPyBlID0gRy5OT05FIDogZSA+IEcuQUxMICYmIChlID0gRy5BTEwpLCB0ID0gdCB8fCB7fTtcbiAgZnVuY3Rpb24gcihuLCBvKSB7XG4gICAgdmFyIGkgPSB0W25dO1xuICAgIHJldHVybiB0eXBlb2YgaSA9PSBcImZ1bmN0aW9uXCIgJiYgZSA+PSBvID8gaS5iaW5kKHQpIDogZnVuY3Rpb24oKSB7XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGVycm9yOiByKFwiZXJyb3JcIiwgRy5FUlJPUiksXG4gICAgd2FybjogcihcIndhcm5cIiwgRy5XQVJOKSxcbiAgICBpbmZvOiByKFwiaW5mb1wiLCBHLklORk8pLFxuICAgIGRlYnVnOiByKFwiZGVidWdcIiwgRy5ERUJVRyksXG4gICAgdmVyYm9zZTogcihcInZlcmJvc2VcIiwgRy5WRVJCT1NFKVxuICB9O1xufVxudmFyIHpvID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBxbyA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBCbyA9IFwiZGlhZ1wiLCBudCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgZnVuY3Rpb24gdChvKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gW10sIHMgPSAwOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICAgICAgaVtzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgICAgICB2YXIgYyA9IHplKFwiZGlhZ1wiKTtcbiAgICAgICAgICBpZiAoYylcbiAgICAgICAgICAgIHJldHVybiBjW29dLmFwcGx5KGMsIHFvKFtdLCB6byhpKSwgITEpKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciByID0gdGhpcywgbiA9IGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgICAgdmFyIHMsIGMsIGw7XG4gICAgICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSB7IGxvZ0xldmVsOiBHLklORk8gfSksIG8gPT09IHIpIHtcbiAgICAgICAgICB2YXIgdSA9IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb25cIik7XG4gICAgICAgICAgcmV0dXJuIHIuZXJyb3IoKHMgPSB1LnN0YWNrKSAhPT0gbnVsbCAmJiBzICE9PSB2b2lkIDAgPyBzIDogdS5tZXNzYWdlKSwgITE7XG4gICAgICAgIH1cbiAgICAgICAgdHlwZW9mIGkgPT0gXCJudW1iZXJcIiAmJiAoaSA9IHtcbiAgICAgICAgICBsb2dMZXZlbDogaVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGQgPSB6ZShcImRpYWdcIiksIF8gPSBHbygoYyA9IGkubG9nTGV2ZWwpICE9PSBudWxsICYmIGMgIT09IHZvaWQgMCA/IGMgOiBHLklORk8sIG8pO1xuICAgICAgICBpZiAoZCAmJiAhaS5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSkge1xuICAgICAgICAgIHZhciBwID0gKGwgPSBuZXcgRXJyb3IoKS5zdGFjaykgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IFwiPGZhaWxlZCB0byBnZW5lcmF0ZSBzdGFja3RyYWNlPlwiO1xuICAgICAgICAgIGQud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZnJvbSBcIiArIHApLCBfLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIG92ZXJ3cml0ZSBvbmUgYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gXCIgKyBwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRnQoXCJkaWFnXCIsIF8sIHIsICEwKTtcbiAgICAgIH07XG4gICAgICByLnNldExvZ2dlciA9IG4sIHIuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBNdChCbywgcik7XG4gICAgICB9LCByLmNyZWF0ZUNvbXBvbmVudExvZ2dlciA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWbyhvKTtcbiAgICAgIH0sIHIudmVyYm9zZSA9IHQoXCJ2ZXJib3NlXCIpLCByLmRlYnVnID0gdChcImRlYnVnXCIpLCByLmluZm8gPSB0KFwiaW5mb1wiKSwgci53YXJuID0gdChcIndhcm5cIiksIHIuZXJyb3IgPSB0KFwiZXJyb3JcIik7XG4gICAgfVxuICAgIHJldHVybiBlLmluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIFlvKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5mb3IoZSk7XG59XG52YXIgSG8gPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgci5fY3VycmVudENvbnRleHQgPSB0ID8gbmV3IE1hcCh0KSA6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHIuZ2V0VmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiByLl9jdXJyZW50Q29udGV4dC5nZXQobik7XG4gICAgICB9LCByLnNldFZhbHVlID0gZnVuY3Rpb24obiwgbykge1xuICAgICAgICB2YXIgaSA9IG5ldyBlKHIuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGkuX2N1cnJlbnRDb250ZXh0LnNldChuLCBvKSwgaTtcbiAgICAgIH0sIHIuZGVsZXRlVmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciBvID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gby5fY3VycmVudENvbnRleHQuZGVsZXRlKG4pLCBvO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH0oKVxuKSwgSm8gPSBuZXcgSG8oKSwgV28gPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIEtvID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIFpvID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBKbztcbiAgICB9LCBlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgZm9yICh2YXIgbyA9IFtdLCBpID0gMzsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAgb1tpIC0gM10gPSBhcmd1bWVudHNbaV07XG4gICAgICByZXR1cm4gci5jYWxsLmFwcGx5KHIsIEtvKFtuXSwgV28obyksICExKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiByO1xuICAgIH0sIGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBRbyA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBpID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufSwgWG8gPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBpOyBuIDwgbzsgbisrKVxuICAgIChpIHx8ICEobiBpbiB0KSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGlbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgeXQgPSBcImNvbnRleHRcIiwgZWEgPSBuZXcgWm8oKSwgRHQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gRnQoeXQsIHQsIG50Lmluc3RhbmNlKCkpO1xuICAgIH0sIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYWN0aXZlKCk7XG4gICAgfSwgZS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIGZvciAodmFyIG8sIGkgPSBbXSwgcyA9IDM7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspXG4gICAgICAgIGlbcyAtIDNdID0gYXJndW1lbnRzW3NdO1xuICAgICAgcmV0dXJuIChvID0gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKSkud2l0aC5hcHBseShvLCBYbyhbdCwgciwgbl0sIFFvKGkpLCAhMSkpO1xuICAgIH0sIGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5iaW5kKHQsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHplKHl0KSB8fCBlYTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmRpc2FibGUoKSwgTXQoeXQsIG50Lmluc3RhbmNlKCkpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgUHQ7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuTk9ORSA9IDBdID0gXCJOT05FXCIsIGVbZS5TQU1QTEVEID0gMV0gPSBcIlNBTVBMRURcIjtcbn0pKFB0IHx8IChQdCA9IHt9KSk7XG52YXIgUHIgPSBcIjAwMDAwMDAwMDAwMDAwMDBcIiwga3IgPSBcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsIHRhID0ge1xuICB0cmFjZUlkOiBrcixcbiAgc3BhbklkOiBQcixcbiAgdHJhY2VGbGFnczogUHQuTk9ORVxufSwgamUgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSB0YSksIHRoaXMuX3NwYW5Db250ZXh0ID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnNwYW5Db250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3BhbkNvbnRleHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZEV2ZW50ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5pc1JlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH0sIGUucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlO1xuICB9KClcbiksIE90ID0gWW8oXCJPcGVuVGVsZW1ldHJ5IENvbnRleHQgS2V5IFNQQU5cIik7XG5mdW5jdGlvbiBMdChlKSB7XG4gIHJldHVybiBlLmdldFZhbHVlKE90KSB8fCB2b2lkIDA7XG59XG5mdW5jdGlvbiByYSgpIHtcbiAgcmV0dXJuIEx0KER0LmdldEluc3RhbmNlKCkuYWN0aXZlKCkpO1xufVxuZnVuY3Rpb24ganQoZSwgdCkge1xuICByZXR1cm4gZS5zZXRWYWx1ZShPdCwgdCk7XG59XG5mdW5jdGlvbiBuYShlKSB7XG4gIHJldHVybiBlLmRlbGV0ZVZhbHVlKE90KTtcbn1cbmZ1bmN0aW9uIG9hKGUsIHQpIHtcbiAgcmV0dXJuIGp0KGUsIG5ldyBqZSh0KSk7XG59XG5mdW5jdGlvbiBBcihlKSB7XG4gIHZhciB0O1xuICByZXR1cm4gKHQgPSBMdChlKSkgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5zcGFuQ29udGV4dCgpO1xufVxudmFyIGFhID0gL14oWzAtOWEtZl17MzJ9KSQvaSwgaWEgPSAvXlswLTlhLWZdezE2fSQvaTtcbmZ1bmN0aW9uIHNhKGUpIHtcbiAgcmV0dXJuIGFhLnRlc3QoZSkgJiYgZSAhPT0ga3I7XG59XG5mdW5jdGlvbiBjYShlKSB7XG4gIHJldHVybiBpYS50ZXN0KGUpICYmIGUgIT09IFByO1xufVxuZnVuY3Rpb24gSXIoZSkge1xuICByZXR1cm4gc2EoZS50cmFjZUlkKSAmJiBjYShlLnNwYW5JZCk7XG59XG5mdW5jdGlvbiBsYShlKSB7XG4gIHJldHVybiBuZXcgamUoZSk7XG59XG52YXIgaHQgPSBEdC5nZXRJbnN0YW5jZSgpLCBUciA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgbiA9PT0gdm9pZCAwICYmIChuID0gaHQuYWN0aXZlKCkpO1xuICAgICAgdmFyIG8gPSAhIShyICE9IG51bGwgJiYgci5yb290KTtcbiAgICAgIGlmIChvKVxuICAgICAgICByZXR1cm4gbmV3IGplKCk7XG4gICAgICB2YXIgaSA9IG4gJiYgQXIobik7XG4gICAgICByZXR1cm4gdWEoaSkgJiYgSXIoaSkgPyBuZXcgamUoaSkgOiBuZXcgamUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBvKSB7XG4gICAgICB2YXIgaSwgcywgYztcbiAgICAgIGlmICghKGFyZ3VtZW50cy5sZW5ndGggPCAyKSkge1xuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gYyA9IHIgOiBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gKGkgPSByLCBjID0gbikgOiAoaSA9IHIsIHMgPSBuLCBjID0gbyk7XG4gICAgICAgIHZhciBsID0gcyA/PyBodC5hY3RpdmUoKSwgdSA9IHRoaXMuc3RhcnRTcGFuKHQsIGksIGwpLCBkID0ganQobCwgdSk7XG4gICAgICAgIHJldHVybiBodC53aXRoKGQsIGMsIHZvaWQgMCwgdSk7XG4gICAgICB9XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gdWEoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgZS5zcGFuSWQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZS50cmFjZUlkID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGUudHJhY2VGbGFncyA9PSBcIm51bWJlclwiO1xufVxudmFyIGRhID0gbmV3IFRyKCksIHBhID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCwgciwgbiwgbykge1xuICAgICAgdGhpcy5fcHJvdmlkZXIgPSB0LCB0aGlzLm5hbWUgPSByLCB0aGlzLnZlcnNpb24gPSBuLCB0aGlzLm9wdGlvbnMgPSBvO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldFRyYWNlcigpLnN0YXJ0U3Bhbih0LCByLCBuKTtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBvKSB7XG4gICAgICB2YXIgaSA9IHRoaXMuX2dldFRyYWNlcigpO1xuICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoaS5zdGFydEFjdGl2ZVNwYW4sIGksIGFyZ3VtZW50cyk7XG4gICAgfSwgZS5wcm90b3R5cGUuX2dldFRyYWNlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgICB2YXIgdCA9IHRoaXMuX3Byb3ZpZGVyLmdldERlbGVnYXRlVHJhY2VyKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHQgPyAodGhpcy5fZGVsZWdhdGUgPSB0LCB0aGlzLl9kZWxlZ2F0ZSkgOiBkYTtcbiAgICB9LCBlO1xuICB9KClcbiksIG1hID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gbmV3IFRyKCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBmYSA9IG5ldyBtYSgpLCBCdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIG87XG4gICAgICByZXR1cm4gKG8gPSB0aGlzLmdldERlbGVnYXRlVHJhY2VyKHQsIHIsIG4pKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogbmV3IHBhKHRoaXMsIHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLmdldERlbGVnYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdDtcbiAgICAgIHJldHVybiAodCA9IHRoaXMuX2RlbGVnYXRlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogZmE7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0RGVsZWdhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgbztcbiAgICAgIHJldHVybiAobyA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvLmdldFRyYWNlcih0LCByLCBuKTtcbiAgICB9LCBlO1xuICB9KClcbiksIHFlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLklOVEVSTkFMID0gMF0gPSBcIklOVEVSTkFMXCIsIGVbZS5TRVJWRVIgPSAxXSA9IFwiU0VSVkVSXCIsIGVbZS5DTElFTlQgPSAyXSA9IFwiQ0xJRU5UXCIsIGVbZS5QUk9EVUNFUiA9IDNdID0gXCJQUk9EVUNFUlwiLCBlW2UuQ09OU1VNRVIgPSA0XSA9IFwiQ09OU1VNRVJcIjtcbn0pKHFlIHx8IChxZSA9IHt9KSk7XG52YXIgbGU7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuVU5TRVQgPSAwXSA9IFwiVU5TRVRcIiwgZVtlLk9LID0gMV0gPSBcIk9LXCIsIGVbZS5FUlJPUiA9IDJdID0gXCJFUlJPUlwiO1xufSkobGUgfHwgKGxlID0ge30pKTtcbnZhciBDZSA9IER0LmdldEluc3RhbmNlKCksIGd0ID0gXCJ0cmFjZVwiLCBfYSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBCdCgpLCB0aGlzLndyYXBTcGFuQ29udGV4dCA9IGxhLCB0aGlzLmlzU3BhbkNvbnRleHRWYWxpZCA9IElyLCB0aGlzLmRlbGV0ZVNwYW4gPSBuYSwgdGhpcy5nZXRTcGFuID0gTHQsIHRoaXMuZ2V0QWN0aXZlU3BhbiA9IHJhLCB0aGlzLmdldFNwYW5Db250ZXh0ID0gQXIsIHRoaXMuc2V0U3BhbiA9IGp0LCB0aGlzLnNldFNwYW5Db250ZXh0ID0gb2E7XG4gICAgfVxuICAgIHJldHVybiBlLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHIgPSBGdChndCwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciwgbnQuaW5zdGFuY2UoKSk7XG4gICAgICByZXR1cm4gciAmJiB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKHQpLCByO1xuICAgIH0sIGUucHJvdG90eXBlLmdldFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gemUoZ3QpIHx8IHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhY2VyUHJvdmlkZXIoKS5nZXRUcmFjZXIodCwgcik7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgTXQoZ3QsIG50Lmluc3RhbmNlKCkpLCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IEJ0KCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBQZSA9IF9hLmdldEluc3RhbmNlKCk7XG5jb25zdCB5YSA9IGFzeW5jIChlKSA9PiB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8ICFlKSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IHsgdHlwZTogXCJwaW5nXCIgfSwgciA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgICBpZiAociAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHQpLCAhMTtcbiAgfVxufSwgaGEgPSAoZSwgdCkgPT4gISFlICYmIHQ7XG5mdW5jdGlvbiBnYShlLCB0KSB7XG4gIHZhciByID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICByID8gcihlLCB0KSA6IGUuX19wcm90b19fID0gdDtcbn1cbmZ1bmN0aW9uIHdhKGUsIHQpIHtcbiAgdCA9PT0gdm9pZCAwICYmICh0ID0gZS5jb25zdHJ1Y3Rvcik7XG4gIHZhciByID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIHIgJiYgcihlLCB0KTtcbn1cbnZhciB2YSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihvLCBpKSB7XG4gICAgICBvLl9fcHJvdG9fXyA9IGk7XG4gICAgfSB8fCBmdW5jdGlvbihvLCBpKSB7XG4gICAgICBmb3IgKHZhciBzIGluIGkpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCBzKSAmJiAob1tzXSA9IGlbc10pO1xuICAgIH0sIGUociwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih0LCByKSB7XG4gICAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgZSh0LCByKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gICAgfVxuICAgIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAobi5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIGJhID0gZnVuY3Rpb24oZSkge1xuICB2YSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSB0aGlzLmNvbnN0cnVjdG9yLCBpID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IG8ubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBnYShpLCBvLnByb3RvdHlwZSksIHdhKGkpLCBpO1xuICB9XG4gIHJldHVybiB0O1xufShFcnJvcik7XG5jb25zdCB3ID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgRWEgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgUnIgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IHcoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IHcoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IHcoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiB3KHokMS5udW1iZXIoKSlcbn0pLCBOciA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogdyh6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiB3KHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IHcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIENhID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIFNhID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IHcoQ2EpXG59KSwgVGUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IHcoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IHcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgUGEgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSksIGthID0geiQxLm9iamVjdCh7XG4gIGlkOiB3KHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IHcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogdyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShQYSksXG4gIHRyaWFsX3N0YXJ0OiB3KHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogdyh6JDEuc3RyaW5nKCkpXG59KSwgRnIgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSksIEFhID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoRnIpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KSwgSWEgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBSclxufSksIFRhID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KElhKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoQWEpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEZyKVxufSksIFl0ID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShrYSksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoVGEpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IHcoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KSwgTXIgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogWXQsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogdyhZdCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShScilcbn0pLCBIdCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiB3KHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShOciksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBTYSxcbiAgc3Vic19wcmV2aWV3OiB3KE1yKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoVGUpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IHcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgRHIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChIdC5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKEh0LnNoYXBlKVxuXSksIFJhID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIE5hID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbRHIsIFJhLCBOYV0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KE5yKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFRlLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogdyh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgT3IgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEZhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShGYSk7XG5jb25zdCBNYSA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIERhID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBMciA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoRGEpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgT2EgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB3KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVGUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBMci5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChNYS5zaGFwZSkuZXh0ZW5kKE9hLnNoYXBlKTtcbmNvbnN0IGpyID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogdyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IHVvLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IFRlLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogWWUsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBUZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgdXNlX3VuaWZpZWRfY2NfZmxvdzogdyh6JDEuYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBMci5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBMYSA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IHcoJGUpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IHcoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiB3KHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IHcoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IHcoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogdyh6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogdyh6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiB3KHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogdyh6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiB3KHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiB3KHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogdyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IHcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiB3KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IGphID0geiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFRlLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgVWEgPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IHcoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgeGEgPSB6JDEub2JqZWN0KHt9KSwgJGEgPSB6JDEub2JqZWN0KHtcbiAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogeiQxLnN0cmluZygpXG59KS5jYXRjaGFsbCh6JDEuYW55KCkpLCBWYSA9IChlKSA9PiBlLnJlZHVjZSgodCwgcikgPT4gdCArIHIsIDApLCBVciA9IChlKSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKSwgZS5yZXR1cm5WYWx1ZSA9ICEwO1xufSwgR2EgPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIFVyKTtcbn0sIHphID0gKCkgPT4ge1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBVcik7XG59LCBvZSA9IChlKSA9PiB7XG4gIGxldCB0ID0gITE7XG4gIHJldHVybiBhc3luYyAocikgPT4ge1xuICAgIHZhciBuLCBvO1xuICAgIGlmICh0KSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJTa2lwcGluZyBzdWJtaXNzaW9uIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzc1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdCA9ICEwO1xuICAgIHRyeSB7XG4gICAgICByLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uICYmIEdhKCksIChvID0gKG4gPSByLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkNoZWNrb3V0U3RhcnRlZCkgPT0gbnVsbCB8fCBvLmNhbGwobiksIGcoXCJjaGVja291dF9zdGFydGVkXCIsIHtcbiAgICAgICAgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBpID0gYXdhaXQgZShyKTtcbiAgICAgIGlmIChnKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAgIGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIC4uLmlcbiAgICAgIH0pLCBpLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MoaS5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQpO1xuICAgICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN1Y2Nlc3MoXG4gICAgICAgICAgaS5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgICAgaS5yZXN1bHQuY3VzdG9tZXJfaWQsXG4gICAgICAgICAgaS5yZXN1bHQucHJvY2Vzc29yc191c2VkID8/IFtdXG4gICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgICB9IGNhdGNoIChpKSB7XG4gICAgICB0ID0gITE7XG4gICAgICBjb25zdCBzID0gWShpKSwgYyA9IGF3YWl0IHJuKHIuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBzKTtcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHMsIGMpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLCBlcnJvck1lc3NhZ2U6IHMsIGVycm9yQ29kZTogYywgZXJyb3I6IGkgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHQgPSAhMSwgci5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbiAmJiB6YSgpO1xuICAgIH1cbiAgfTtcbn0sIGhlID0gKGUpID0+IGFzeW5jICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGUodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBjb25zdCB7IGVycl9fOiBuIH0gPSBBKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpLCBvID0gWShyKSwgaSA9IGF3YWl0IHJuKHQuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBvKTtcbiAgICByZXR1cm4gbihpLCBvLCByKSwgZyhcImluaXRfZmxvd19lcnJvclwiLCB7IGVycm9yTWVzc2FnZTogbywgZXJyb3JDb2RlOiBpLCBlcnJvcjogciB9KSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogbywgZXJyb3JDb2RlOiBpLCBpc0xvYWRpbmc6ICExIH07XG4gIH1cbn0sIEEgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coYCR7Y2hhbGsuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9LCByID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS53YXJuKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtlfWApfVx0YCwgLi4ubik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nOiB0LFxuICAgIGVycjogcixcbiAgICBsb2dfXzogdCxcbiAgICBlcnJfXzogclxuICB9O1xufTtcbnZhciBrdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgcmV0dXJuIGt0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24ociwgbikge1xuICAgIHIuX19wcm90b19fID0gbjtcbiAgfSB8fCBmdW5jdGlvbihyLCBuKSB7XG4gICAgZm9yICh2YXIgbyBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgbykgJiYgKHJbb10gPSBuW29dKTtcbiAgfSwga3QoZSwgdCk7XG59O1xuZnVuY3Rpb24gdWUoZSwgdCkge1xuICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiICYmIHQgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcodCkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBrdChlLCB0KTtcbiAgZnVuY3Rpb24gcigpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZTtcbiAgfVxuICBlLnByb3RvdHlwZSA9IHQgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHQpIDogKHIucHJvdG90eXBlID0gdC5wcm90b3R5cGUsIG5ldyByKCkpO1xufVxuZnVuY3Rpb24gcWEoZSwgdCwgciwgbikge1xuICBmdW5jdGlvbiBvKGkpIHtcbiAgICByZXR1cm4gaSBpbnN0YW5jZW9mIHIgPyBpIDogbmV3IHIoZnVuY3Rpb24ocykge1xuICAgICAgcyhpKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChyIHx8IChyID0gUHJvbWlzZSkpKGZ1bmN0aW9uKGksIHMpIHtcbiAgICBmdW5jdGlvbiBjKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi5uZXh0KGQpKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgcyhfKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4udGhyb3coZCkpO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBzKF8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGQpIHtcbiAgICAgIGQuZG9uZSA/IGkoZC52YWx1ZSkgOiBvKGQudmFsdWUpLnRoZW4oYywgbCk7XG4gICAgfVxuICAgIHUoKG4gPSBuLmFwcGx5KGUsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB4cihlLCB0KSB7XG4gIHZhciByID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKGlbMF0gJiAxKSB0aHJvdyBpWzFdO1xuICAgIHJldHVybiBpWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBvLCBpLCBzID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gcy5uZXh0ID0gYygwKSwgcy50aHJvdyA9IGMoMSksIHMucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKHNbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgcztcbiAgZnVuY3Rpb24gYyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBsKFt1LCBkXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IHMgJiYgKHMgPSAwLCB1WzBdICYmIChyID0gMCkpLCByOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIG8gJiYgKGkgPSB1WzBdICYgMiA/IG8ucmV0dXJuIDogdVswXSA/IG8udGhyb3cgfHwgKChpID0gby5yZXR1cm4pICYmIGkuY2FsbChvKSwgMCkgOiBvLm5leHQpICYmICEoaSA9IGkuY2FsbChvLCB1WzFdKSkuZG9uZSkgcmV0dXJuIGk7XG4gICAgICBzd2l0Y2ggKG8gPSAwLCBpICYmICh1ID0gW3VbMF0gJiAyLCBpLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaSA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gci5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgci5sYWJlbCsrLCBvID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSByLm9wcy5wb3AoKSwgci50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpID0gci50cnlzLCAhKGkgPSBpLmxlbmd0aCA+IDAgJiYgaVtpLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFpIHx8IHVbMV0gPiBpWzBdICYmIHVbMV0gPCBpWzNdKSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgci5sYWJlbCA8IGlbMV0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBpWzFdLCBpID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSAmJiByLmxhYmVsIDwgaVsyXSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IGlbMl0sIHIub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaVsyXSAmJiByLm9wcy5wb3AoKSwgci50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IHQuY2FsbChlLCByKTtcbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICB1ID0gWzYsIGRdLCBvID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IGkgPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBrZShlKSB7XG4gIHZhciB0ID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCByID0gdCAmJiBlW3RdLCBuID0gMDtcbiAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gIGlmIChlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGUgJiYgbiA+PSBlLmxlbmd0aCAmJiAoZSA9IHZvaWQgMCksIHsgdmFsdWU6IGUgJiYgZVtuKytdLCBkb25lOiAhZSB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcih0ID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gb3QoZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBhdChlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBpOyBuIDwgbzsgbisrKVxuICAgIChpIHx8ICEobiBpbiB0KSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGlbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufVxuZnVuY3Rpb24gU2UoZSkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFNlID8gKHRoaXMudiA9IGUsIHRoaXMpIDogbmV3IFNlKGUpO1xufVxuZnVuY3Rpb24gQmEoZSwgdCwgcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IHIuYXBwbHkoZSwgdCB8fCBbXSksIG8sIGkgPSBbXTtcbiAgcmV0dXJuIG8gPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBjKFwibmV4dFwiKSwgYyhcInRocm93XCIpLCBjKFwicmV0dXJuXCIsIHMpLCBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBvO1xuICBmdW5jdGlvbiBzKGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oeSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh5KS50aGVuKGYsIF8pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYyhmLCB5KSB7XG4gICAgbltmXSAmJiAob1tmXSA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LCBiKSB7XG4gICAgICAgIGkucHVzaChbZiwgaCwgdiwgYl0pID4gMSB8fCBsKGYsIGgpO1xuICAgICAgfSk7XG4gICAgfSwgeSAmJiAob1tmXSA9IHkob1tmXSkpKTtcbiAgfVxuICBmdW5jdGlvbiBsKGYsIHkpIHtcbiAgICB0cnkge1xuICAgICAgdShuW2ZdKHkpKTtcbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICBwKGlbMF1bM10sIGgpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1KGYpIHtcbiAgICBmLnZhbHVlIGluc3RhbmNlb2YgU2UgPyBQcm9taXNlLnJlc29sdmUoZi52YWx1ZS52KS50aGVuKGQsIF8pIDogcChpWzBdWzJdLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBkKGYpIHtcbiAgICBsKFwibmV4dFwiLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBfKGYpIHtcbiAgICBsKFwidGhyb3dcIiwgZik7XG4gIH1cbiAgZnVuY3Rpb24gcChmLCB5KSB7XG4gICAgZih5KSwgaS5zaGlmdCgpLCBpLmxlbmd0aCAmJiBsKGlbMF1bMF0sIGlbMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBZYShlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciB0ID0gZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIHI7XG4gIHJldHVybiB0ID8gdC5jYWxsKGUpIDogKGUgPSB0eXBlb2Yga2UgPT0gXCJmdW5jdGlvblwiID8ga2UoZSkgOiBlW1N5bWJvbC5pdGVyYXRvcl0oKSwgciA9IHt9LCBuKFwibmV4dFwiKSwgbihcInRocm93XCIpLCBuKFwicmV0dXJuXCIpLCByW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCByKTtcbiAgZnVuY3Rpb24gbihpKSB7XG4gICAgcltpXSA9IGVbaV0gJiYgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIGwpIHtcbiAgICAgICAgcyA9IGVbaV0ocyksIG8oYywgbCwgcy5kb25lLCBzLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbyhpLCBzLCBjLCBsKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oZnVuY3Rpb24odSkge1xuICAgICAgaSh7IHZhbHVlOiB1LCBkb25lOiBjIH0pO1xuICAgIH0sIHMpO1xuICB9XG59XG5mdW5jdGlvbiBqKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIHV0KGUpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihuKSB7XG4gICAgRXJyb3IuY2FsbChuKSwgbi5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCByID0gZSh0KTtcbiAgcmV0dXJuIHIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCByLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHIsIHI7XG59XG52YXIgd3QgPSB1dChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gciA/IHIubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIHIubWFwKGZ1bmN0aW9uKG4sIG8pIHtcbiAgICAgIHJldHVybiBvICsgMSArIFwiKSBcIiArIG4udG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSByO1xuICB9O1xufSk7XG5mdW5jdGlvbiBpdChlLCB0KSB7XG4gIGlmIChlKSB7XG4gICAgdmFyIHIgPSBlLmluZGV4T2YodCk7XG4gICAgMCA8PSByICYmIGUuc3BsaWNlKHIsIDEpO1xuICB9XG59XG52YXIgSGUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSB0LCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCwgciwgbiwgbywgaTtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIHMgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAocylcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkocykpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSBrZShzKSwgbCA9IGMubmV4dCgpOyAhbC5kb25lOyBsID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBsLnZhbHVlO1xuICAgICAgICAgICAgICB1LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICB0ID0geyBlcnJvcjogaCB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsICYmICFsLmRvbmUgJiYgKHIgPSBjLnJldHVybikgJiYgci5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKHQpIHRocm93IHQuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcy5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgZCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKGooZCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZCgpO1xuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgaSA9IGggaW5zdGFuY2VvZiB3dCA/IGguZXJyb3JzIDogW2hdO1xuICAgICAgICB9XG4gICAgICB2YXIgXyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAoXykge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBwID0ga2UoXyksIGYgPSBwLm5leHQoKTsgIWYuZG9uZTsgZiA9IHAubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgeSA9IGYudmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBKdCh5KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgaSA9IGkgPz8gW10sIGggaW5zdGFuY2VvZiB3dCA/IGkgPSBhdChhdChbXSwgb3QoaSkpLCBvdChoLmVycm9ycykpIDogaS5wdXNoKGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIG4gPSB7IGVycm9yOiBoIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGYgJiYgIWYuZG9uZSAmJiAobyA9IHAucmV0dXJuKSAmJiBvLmNhbGwocCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkpXG4gICAgICAgIHRocm93IG5ldyB3dChpKTtcbiAgICB9XG4gIH0sIGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAodCAmJiB0ICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBKdCh0KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAodCBpbnN0YW5jZW9mIGUpIHtcbiAgICAgICAgICBpZiAodC5jbG9zZWQgfHwgdC5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHQuX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChyID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IFtdKS5wdXNoKHQpO1xuICAgICAgfVxuICB9LCBlLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiByID09PSB0IHx8IEFycmF5LmlzQXJyYXkocikgJiYgci5pbmNsdWRlcyh0KTtcbiAgfSwgZS5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KHIpID8gKHIucHVzaCh0KSwgcikgOiByID8gW3IsIHRdIDogdDtcbiAgfSwgZS5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByID09PSB0ID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkocikgJiYgaXQociwgdCk7XG4gIH0sIGUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgciAmJiBpdChyLCB0KSwgdCBpbnN0YW5jZW9mIGUgJiYgdC5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCBlLkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQgPSBuZXcgZSgpO1xuICAgIHJldHVybiB0LmNsb3NlZCA9ICEwLCB0O1xuICB9KCksIGU7XG59KCksICRyID0gSGUuRU1QVFk7XG5mdW5jdGlvbiBWcihlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgSGUgfHwgZSAmJiBcImNsb3NlZFwiIGluIGUgJiYgaihlLnJlbW92ZSkgJiYgaihlLmFkZCkgJiYgaihlLnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIEp0KGUpIHtcbiAgaihlKSA/IGUoKSA6IGUudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBHciA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCB6ciA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24oZSwgdCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICByW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIGF0KFtlLCB0XSwgb3QocikpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKGUpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gcXIoZSkge1xuICB6ci5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IGU7XG4gIH0pO1xufVxuZnVuY3Rpb24gV3QoKSB7XG59XG5mdW5jdGlvbiBldChlKSB7XG4gIGUoKTtcbn1cbnZhciBVdCA9IGZ1bmN0aW9uKGUpIHtcbiAgdWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHZhciBuID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIG4uaXNTdG9wcGVkID0gITEsIHIgPyAobi5kZXN0aW5hdGlvbiA9IHIsIFZyKHIpICYmIHIuYWRkKG4pKSA6IG4uZGVzdGluYXRpb24gPSBLYSwgbjtcbiAgfVxuICByZXR1cm4gdC5jcmVhdGUgPSBmdW5jdGlvbihyLCBuLCBvKSB7XG4gICAgcmV0dXJuIG5ldyBBdChyLCBuLCBvKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IocikpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCB0LnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQocik7XG4gIH0sIHQucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgdDtcbn0oSGUpLCBIYSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gdnQoZSwgdCkge1xuICByZXR1cm4gSGEuY2FsbChlLCB0KTtcbn1cbnZhciBKYSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHQ7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgci5uZXh0KHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBaZShuKTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIHIuZXJyb3IodCk7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIFplKG4pO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIFplKHQpO1xuICB9LCBlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHQuY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICB0LmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgIFplKHIpO1xuICAgICAgfVxuICB9LCBlO1xufSgpLCBBdCA9IGZ1bmN0aW9uKGUpIHtcbiAgdWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbiwgbykge1xuICAgIHZhciBpID0gZS5jYWxsKHRoaXMpIHx8IHRoaXMsIHM7XG4gICAgaWYgKGoocikgfHwgIXIpXG4gICAgICBzID0ge1xuICAgICAgICBuZXh0OiByID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IG4gPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogbyA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYztcbiAgICAgIGkgJiYgR3IudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGMgPSBPYmplY3QuY3JlYXRlKHIpLCBjLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBzID0ge1xuICAgICAgICBuZXh0OiByLm5leHQgJiYgdnQoci5uZXh0LCBjKSxcbiAgICAgICAgZXJyb3I6IHIuZXJyb3IgJiYgdnQoci5lcnJvciwgYyksXG4gICAgICAgIGNvbXBsZXRlOiByLmNvbXBsZXRlICYmIHZ0KHIuY29tcGxldGUsIGMpXG4gICAgICB9KSA6IHMgPSByO1xuICAgIH1cbiAgICByZXR1cm4gaS5kZXN0aW5hdGlvbiA9IG5ldyBKYShzKSwgaTtcbiAgfVxuICByZXR1cm4gdDtcbn0oVXQpO1xuZnVuY3Rpb24gWmUoZSkge1xuICBxcihlKTtcbn1cbmZ1bmN0aW9uIFdhKGUpIHtcbiAgdGhyb3cgZTtcbn1cbnZhciBLYSA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogV3QsXG4gIGVycm9yOiBXYSxcbiAgY29tcGxldGU6IFd0XG59LCB4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIFphKGUpIHtcbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBRYShlKSB7XG4gIHJldHVybiBlLmxlbmd0aCA9PT0gMCA/IFphIDogZS5sZW5ndGggPT09IDEgPyBlWzBdIDogZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBlLnJlZHVjZShmdW5jdGlvbihuLCBvKSB7XG4gICAgICByZXR1cm4gbyhuKTtcbiAgICB9LCByKTtcbiAgfTtcbn1cbnZhciBpZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0ICYmICh0aGlzLl9zdWJzY3JpYmUgPSB0KTtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IG5ldyBlKCk7XG4gICAgcmV0dXJuIHIuc291cmNlID0gdGhpcywgci5vcGVyYXRvciA9IHQsIHI7XG4gIH0sIGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICB2YXIgbyA9IHRoaXMsIGkgPSBlaSh0KSA/IHQgOiBuZXcgQXQodCwgciwgbik7XG4gICAgcmV0dXJuIGV0KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMgPSBvLCBjID0gcy5vcGVyYXRvciwgbCA9IHMuc291cmNlO1xuICAgICAgaS5hZGQoYyA/IGMuY2FsbChpLCBsKSA6IGwgPyBvLl9zdWJzY3JpYmUoaSkgOiBvLl90cnlTdWJzY3JpYmUoaSkpO1xuICAgIH0pLCBpO1xuICB9LCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHQpO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIHQuZXJyb3Iocik7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24odCwgcikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICByZXR1cm4gciA9IEt0KHIpLCBuZXcgcihmdW5jdGlvbihvLCBpKSB7XG4gICAgICB2YXIgcyA9IG5ldyBBdCh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdChjKTtcbiAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICBpKGwpLCBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogaSxcbiAgICAgICAgY29tcGxldGU6IG9cbiAgICAgIH0pO1xuICAgICAgbi5zdWJzY3JpYmUocyk7XG4gICAgfSk7XG4gIH0sIGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgcmV0dXJuIChyID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuc3Vic2NyaWJlKHQpO1xuICB9LCBlLnByb3RvdHlwZVt4dF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgIHJldHVybiBRYSh0KSh0aGlzKTtcbiAgfSwgZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICByZXR1cm4gdCA9IEt0KHQpLCBuZXcgdChmdW5jdGlvbihuLCBvKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIHIuc3Vic2NyaWJlKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGkgPSBzO1xuICAgICAgfSwgZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gbyhzKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbihpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gbmV3IGUodCk7XG4gIH0sIGU7XG59KCk7XG5mdW5jdGlvbiBLdChlKSB7XG4gIHZhciB0O1xuICByZXR1cm4gKHQgPSBlID8/IEdyLlByb21pc2UpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gWGEoZSkge1xuICByZXR1cm4gZSAmJiBqKGUubmV4dCkgJiYgaihlLmVycm9yKSAmJiBqKGUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gZWkoZSkge1xuICByZXR1cm4gZSAmJiBlIGluc3RhbmNlb2YgVXQgfHwgWGEoZSkgJiYgVnIoZSk7XG59XG5mdW5jdGlvbiB0aShlKSB7XG4gIHJldHVybiBqKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGlmdCk7XG59XG5mdW5jdGlvbiByaShlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgaWYgKHRpKHQpKVxuICAgICAgcmV0dXJuIHQubGlmdChmdW5jdGlvbihyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGUociwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICB0aGlzLmVycm9yKG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBuaShlLCB0LCByLCBuLCBvKSB7XG4gIHJldHVybiBuZXcgb2koZSwgdCwgciwgbiwgbyk7XG59XG52YXIgb2kgPSBmdW5jdGlvbihlKSB7XG4gIHVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIG8sIGksIHMsIGMpIHtcbiAgICB2YXIgbCA9IGUuY2FsbCh0aGlzLCByKSB8fCB0aGlzO1xuICAgIHJldHVybiBsLm9uRmluYWxpemUgPSBzLCBsLnNob3VsZFVuc3Vic2NyaWJlID0gYywgbC5fbmV4dCA9IG4gPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICByLmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fbmV4dCwgbC5fZXJyb3IgPSBpID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgci5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2Vycm9yLCBsLl9jb21wbGV0ZSA9IG8gPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG8oKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgci5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2NvbXBsZXRlLCBsO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciBuID0gdGhpcy5jbG9zZWQ7XG4gICAgICBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhbiAmJiAoKHIgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCB8fCByLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgdDtcbn0oVXQpLCBhaSA9IHV0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgQnIgPSBmdW5jdGlvbihlKSB7XG4gIHVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KCkge1xuICAgIHZhciByID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gITEsIHIuY3VycmVudE9ic2VydmVycyA9IG51bGwsIHIub2JzZXJ2ZXJzID0gW10sIHIuaXNTdG9wcGVkID0gITEsIHIuaGFzRXJyb3IgPSAhMSwgci50aHJvd25FcnJvciA9IG51bGwsIHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSBuZXcgWnQodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIG4ub3BlcmF0b3IgPSByLCBuO1xuICB9LCB0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBhaSgpO1xuICB9LCB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBldChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvLCBpO1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uY3VycmVudE9ic2VydmVycyB8fCAobi5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShuLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIHMgPSBrZShuLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gcy5uZXh0KCk7ICFjLmRvbmU7IGMgPSBzLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGwgPSBjLnZhbHVlO1xuICAgICAgICAgICAgbC5uZXh0KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIG8gPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAoaSA9IHMucmV0dXJuKSAmJiBpLmNhbGwocyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChvKSB0aHJvdyBvLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZXQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5oYXNFcnJvciA9IG4uaXNTdG9wcGVkID0gITAsIG4udGhyb3duRXJyb3IgPSByO1xuICAgICAgICBmb3IgKHZhciBvID0gbi5vYnNlcnZlcnM7IG8ubGVuZ3RoOyApXG4gICAgICAgICAgby5zaGlmdCgpLmVycm9yKHIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICBldChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChyLl90aHJvd0lmQ2xvc2VkKCksICFyLmlzU3RvcHBlZCkge1xuICAgICAgICByLmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciBuID0gci5vYnNlcnZlcnM7IG4ubGVuZ3RoOyApXG4gICAgICAgICAgbi5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByO1xuICAgICAgcmV0dXJuICgociA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgcik7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhyKSwgdGhpcy5faW5uZXJTdWJzY3JpYmUocik7XG4gIH0sIHQucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMsIG8gPSB0aGlzLCBpID0gby5oYXNFcnJvciwgcyA9IG8uaXNTdG9wcGVkLCBjID0gby5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIGkgfHwgcyA/ICRyIDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGMucHVzaChyKSwgbmV3IEhlKGZ1bmN0aW9uKCkge1xuICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgaXQoYywgcik7XG4gICAgfSkpO1xuICB9LCB0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMsIG8gPSBuLmhhc0Vycm9yLCBpID0gbi50aHJvd25FcnJvciwgcyA9IG4uaXNTdG9wcGVkO1xuICAgIG8gPyByLmVycm9yKGkpIDogcyAmJiByLmNvbXBsZXRlKCk7XG4gIH0sIHQucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gbmV3IGllKCk7XG4gICAgcmV0dXJuIHIuc291cmNlID0gdGhpcywgcjtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIG5ldyBadChyLCBuKTtcbiAgfSwgdDtcbn0oaWUpLCBadCA9IGZ1bmN0aW9uKGUpIHtcbiAgdWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHZhciBvID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIG8uZGVzdGluYXRpb24gPSByLCBvLnNvdXJjZSA9IG4sIG87XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIG87XG4gICAgKG8gPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4ubmV4dCkgPT09IG51bGwgfHwgbyA9PT0gdm9pZCAwIHx8IG8uY2FsbChuLCByKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIG87XG4gICAgKG8gPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uZXJyb3IpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCB8fCBvLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIG47XG4gICAgKG4gPSAociA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuY29tcGxldGUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCB8fCBuLmNhbGwocik7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIG87XG4gICAgcmV0dXJuIChvID0gKG4gPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5zdWJzY3JpYmUocikpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiAkcjtcbiAgfSwgdDtcbn0oQnIpLCBpaSA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgc2kgPSBmdW5jdGlvbihlKSB7XG4gIHVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICByZXR1cm4gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0O1xufShIZSksIFF0ID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24oZSwgdCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICByW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBhdChbZSwgdF0sIG90KHIpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbChlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgY2kgPSBmdW5jdGlvbihlKSB7XG4gIHVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzLCByLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBvLnNjaGVkdWxlciA9IHIsIG8ud29yayA9IG4sIG8ucGVuZGluZyA9ICExLCBvO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgbztcbiAgICBpZiAobiA9PT0gdm9pZCAwICYmIChuID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IHI7XG4gICAgdmFyIGkgPSB0aGlzLmlkLCBzID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIGkgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQocywgaSwgbikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IG4sIHRoaXMuaWQgPSAobyA9IHRoaXMuaWQpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiB0aGlzLnJlcXVlc3RBc3luY0lkKHMsIHRoaXMuaWQsIG4pLCB0aGlzO1xuICB9LCB0LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIG8pIHtcbiAgICByZXR1cm4gbyA9PT0gdm9pZCAwICYmIChvID0gMCksIFF0LnNldEludGVydmFsKHIuZmx1c2guYmluZChyLCB0aGlzKSwgbyk7XG4gIH0sIHQucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24ociwgbiwgbykge1xuICAgIGlmIChvID09PSB2b2lkIDAgJiYgKG8gPSAwKSwgbyAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IG8gJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiBuO1xuICAgIG4gIT0gbnVsbCAmJiBRdC5jbGVhckludGVydmFsKG4pO1xuICB9LCB0LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBvID0gdGhpcy5fZXhlY3V0ZShyLCBuKTtcbiAgICBpZiAobylcbiAgICAgIHJldHVybiBvO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCB0LnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgbyA9ICExLCBpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsocik7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgbyA9ICEwLCBpID0gcyB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAobylcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIGk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gci5pZCwgbyA9IHIuc2NoZWR1bGVyLCBpID0gby5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIGl0KGksIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKG8sIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB0O1xufShzaSksIFh0ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCwgcikge1xuICAgIHIgPT09IHZvaWQgMCAmJiAociA9IGUubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gdCwgdGhpcy5ub3cgPSByO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICByZXR1cm4gciA9PT0gdm9pZCAwICYmIChyID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgdCkuc2NoZWR1bGUobiwgcik7XG4gIH0sIGUubm93ID0gaWkubm93LCBlO1xufSgpLCBsaSA9IGZ1bmN0aW9uKGUpIHtcbiAgdWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IFh0Lm5vdyk7XG4gICAgdmFyIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gby5hY3Rpb25zID0gW10sIG8uX2FjdGl2ZSA9ICExLCBvO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBuLnB1c2gocik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAobyA9IHIuZXhlY3V0ZShyLnN0YXRlLCByLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKHIgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgbykge1xuICAgICAgZm9yICg7IHIgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgci51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgbztcbiAgICB9XG4gIH0sIHQ7XG59KFh0KSwgdWkgPSBuZXcgbGkoY2kpLCBkaSA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIHBpKGUpIHtcbiAgcmV0dXJuIGooZSA9PSBudWxsID8gdm9pZCAwIDogZS50aGVuKTtcbn1cbmZ1bmN0aW9uIG1pKGUpIHtcbiAgcmV0dXJuIGooZVt4dF0pO1xufVxuZnVuY3Rpb24gZmkoZSkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgaihlID09IG51bGwgPyB2b2lkIDAgOiBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiBfaShlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGUgIT09IG51bGwgJiYgdHlwZW9mIGUgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgZSArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24geWkoKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaGkgPSB5aSgpO1xuZnVuY3Rpb24gZ2koZSkge1xuICByZXR1cm4gaihlID09IG51bGwgPyB2b2lkIDAgOiBlW2hpXSk7XG59XG5mdW5jdGlvbiB3aShlKSB7XG4gIHJldHVybiBCYSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuLCBvLCBpO1xuICAgIHJldHVybiB4cih0aGlzLCBmdW5jdGlvbihzKSB7XG4gICAgICBzd2l0Y2ggKHMubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHIgPSBlLmdldFJlYWRlcigpLCBzLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIHMubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCBTZShyLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIG4gPSBzLnNlbnQoKSwgbyA9IG4udmFsdWUsIGkgPSBuLmRvbmUsIGkgPyBbNCwgU2Uodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIHMuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgU2UobyldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gcy5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIHIucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gdmkoZSkge1xuICByZXR1cm4gaihlID09IG51bGwgPyB2b2lkIDAgOiBlLmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBiaShlKSB7XG4gIGlmIChlIGluc3RhbmNlb2YgaWUpXG4gICAgcmV0dXJuIGU7XG4gIGlmIChlICE9IG51bGwpIHtcbiAgICBpZiAobWkoZSkpXG4gICAgICByZXR1cm4gRWkoZSk7XG4gICAgaWYgKGRpKGUpKVxuICAgICAgcmV0dXJuIENpKGUpO1xuICAgIGlmIChwaShlKSlcbiAgICAgIHJldHVybiBTaShlKTtcbiAgICBpZiAoZmkoZSkpXG4gICAgICByZXR1cm4gWXIoZSk7XG4gICAgaWYgKGdpKGUpKVxuICAgICAgcmV0dXJuIFBpKGUpO1xuICAgIGlmICh2aShlKSlcbiAgICAgIHJldHVybiBraShlKTtcbiAgfVxuICB0aHJvdyBfaShlKTtcbn1cbmZ1bmN0aW9uIEVpKGUpIHtcbiAgcmV0dXJuIG5ldyBpZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBlW3h0XSgpO1xuICAgIGlmIChqKHIuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiByLnN1YnNjcmliZSh0KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gQ2koZSkge1xuICByZXR1cm4gbmV3IGllKGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKHZhciByID0gMDsgciA8IGUubGVuZ3RoICYmICF0LmNsb3NlZDsgcisrKVxuICAgICAgdC5uZXh0KGVbcl0pO1xuICAgIHQuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBTaShlKSB7XG4gIHJldHVybiBuZXcgaWUoZnVuY3Rpb24odCkge1xuICAgIGUudGhlbihmdW5jdGlvbihyKSB7XG4gICAgICB0LmNsb3NlZCB8fCAodC5uZXh0KHIpLCB0LmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIHJldHVybiB0LmVycm9yKHIpO1xuICAgIH0pLnRoZW4obnVsbCwgcXIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFBpKGUpIHtcbiAgcmV0dXJuIG5ldyBpZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIG8gPSBrZShlKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgdmFyIHMgPSBpLnZhbHVlO1xuICAgICAgICBpZiAodC5uZXh0KHMpLCB0LmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAoYykge1xuICAgICAgciA9IHsgZXJyb3I6IGMgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSAmJiAhaS5kb25lICYmIChuID0gby5yZXR1cm4pICYmIG4uY2FsbChvKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWXIoZSkge1xuICByZXR1cm4gbmV3IGllKGZ1bmN0aW9uKHQpIHtcbiAgICBBaShlLCB0KS5jYXRjaChmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBraShlKSB7XG4gIHJldHVybiBZcih3aShlKSk7XG59XG5mdW5jdGlvbiBBaShlLCB0KSB7XG4gIHZhciByLCBuLCBvLCBpO1xuICByZXR1cm4gcWEodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzLCBjO1xuICAgIHJldHVybiB4cih0aGlzLCBmdW5jdGlvbihsKSB7XG4gICAgICBzd2l0Y2ggKGwubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGwudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCByID0gWWEoZSksIGwubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCByLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IGwuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAocyA9IG4udmFsdWUsIHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGwubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSBsLnNlbnQoKSwgbyA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBsLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKGkgPSByLnJldHVybikgPyBbNCwgaS5jYWxsKHIpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwuc2VudCgpLCBsLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKG8pIHRocm93IG8uZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiB0LmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBJaShlLCB0LCByLCBuLCBvKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBvID09PSB2b2lkIDAgJiYgKG8gPSAhMSk7XG4gIHZhciBpID0gdC5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICByKCksIG8gPyBlLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmIChlLmFkZChpKSwgIW8pXG4gICAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBUaShlLCB0KSB7XG4gIHZhciByID0gaihlKSA/IGUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgbiA9IGZ1bmN0aW9uKG8pIHtcbiAgICByZXR1cm4gby5lcnJvcihyKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IGllKG4pO1xufVxudmFyIFJpID0gdXQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gTmkoZSwgdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBvID0gITEsIGk7XG4gICAgZS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24ocykge1xuICAgICAgICBpID0gcywgbyA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBuLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBvID8gcihpKSA6IG4obmV3IFJpKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEZpKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihlKTtcbn1cbnZhciBNaSA9IHV0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBudWxsKSwgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSByO1xuICB9O1xufSk7XG5mdW5jdGlvbiBEaShlLCB0KSB7XG4gIHZhciByID0gRmkoZSkgPyB7IGZpcnN0OiBlIH0gOiB0eXBlb2YgZSA9PSBcIm51bWJlclwiID8geyBlYWNoOiBlIH0gOiBlLCBuID0gci5maXJzdCwgbyA9IHIuZWFjaCwgaSA9IHIud2l0aCwgcyA9IGkgPT09IHZvaWQgMCA/IE9pIDogaSwgYyA9IHIuc2NoZWR1bGVyLCBsID0gYyA9PT0gdm9pZCAwID8gdWkgOiBjLCB1ID0gci5tZXRhLCBkID0gdSA9PT0gdm9pZCAwID8gbnVsbCA6IHU7XG4gIGlmIChuID09IG51bGwgJiYgbyA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIHJpKGZ1bmN0aW9uKF8sIHApIHtcbiAgICB2YXIgZiwgeSwgaCA9IG51bGwsIHYgPSAwLCBiID0gZnVuY3Rpb24oQykge1xuICAgICAgeSA9IElpKHAsIGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGYudW5zdWJzY3JpYmUoKSwgYmkocyh7XG4gICAgICAgICAgICBtZXRhOiBkLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiBoLFxuICAgICAgICAgICAgc2VlbjogdlxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUocCk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBwLmVycm9yKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBDKTtcbiAgICB9O1xuICAgIGYgPSBfLnN1YnNjcmliZShuaShwLCBmdW5jdGlvbihDKSB7XG4gICAgICB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCB2KyssIHAubmV4dChoID0gQyksIG8gPiAwICYmIGIobyk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgeSAhPSBudWxsICYmIHkuY2xvc2VkIHx8IHkgPT0gbnVsbCB8fCB5LnVuc3Vic2NyaWJlKCksIGggPSBudWxsO1xuICAgIH0pKSwgIXYgJiYgYihuICE9IG51bGwgPyB0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gbiA6ICtuIC0gbC5ub3coKSA6IG8pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIE9pKGUpIHtcbiAgdGhyb3cgbmV3IE1pKGUpO1xufVxuY2xhc3MgVWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiB0IH0sIHRoaXMuX3N1YmplY3QubmV4dCh0KSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAodCwgcikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IHQsIGVyck1zZzogciB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKHQpO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodCkgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IHQsIHRoaXMuc3Vic2NyaWJlID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHQodGhpcy5fY3VycmVudCksIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgZHQodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCByID0ge1xuICAgICAgICBmaXJzdDogdC50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiBUaSgoKSA9PiBuZXcgRXJyb3IodC50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gTmkodGhpcy5fc3ViamVjdC5waXBlKERpKHIpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IEJyKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IGVyID0geiQxLmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSksIExpID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59LCBqaSA9IChlKSA9PiBMaVtlXSwgYnQgPSB7fSwgSHIgPSBhc3luYyAoZSkgPT4ge1xuICBpZiAoYnRbZV0pXG4gICAgcmV0dXJuIGJ0W2VdO1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBlKSkudGhlbigobikgPT4gbi5qc29uKCkpLCByID0gZXIucGFyc2UodC5lbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIGJ0W2VdID0gciwgcjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGVyLlZhbHVlcy5wcm9kO1xuICB9XG59O1xuZnVuY3Rpb24gZHQoZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke2V9YCk7XG59XG5jb25zdCBKciA9IChlLCB0KSA9PiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbcl0pID0+ICF0LmluY2x1ZGVzKHIpKSksIE0gPSAoKSA9PiB7XG4gIGlmICghKHR5cGVvZiB3aW5kb3cgPiBcInVcIikpXG4gICAgcmV0dXJuIHdpbmRvdztcbn0sIEl0ID0gbmV3IFVlKCksIHRyID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCIsIFVpID0gMywgeGkgPSAzLCAkaSA9IDFlMywgeyBsb2dfXzogUWUgfSA9IEEoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgVmkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIFFlKFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0sIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBRZShcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIiksIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpLCAodCA9IE0oKSkgPT0gbnVsbCB8fCB0LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHIgPSBNKCkpID09IG51bGwgfHwgci5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KHQsIHIsIG4pIHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgZXZlbnROYW1lOiB0LFxuICAgICAgcHJvcGVydGllczogciB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBuIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IG8udGltZXN0YW1wLCB0aGlzLnF1ZXVlLnB1c2gobyksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCksIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IChyID0gKHQgPSBNKCkpID09IG51bGwgPyB2b2lkIDAgOiB0LmxvY2FsU3RvcmFnZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2V0SXRlbSh0cik7XG4gICAgICBuICYmICh0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShuKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICB2YXIgdDtcbiAgICAodCA9IE0oKSkgPT0gbnVsbCB8fCB0LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRyLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3QgdCA9IE0oKTtcbiAgICB0ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQgJiYgKHRoaXMuYmF0Y2hUaW1lb3V0ID0gdC5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCAkaSkpO1xuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICB2YXIgdDtcbiAgICB0aGlzLmJhdGNoVGltZW91dCAmJiAoKHQgPSBNKCkpID09IG51bGwgfHwgdC5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwpLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAhbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCB8fCAodGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMCwgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSkpO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCB0ID0gSXQuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIXQpIHtcbiAgICAgIFFlKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIHhpKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IHtcbiAgICAgICAgZXZlbnRzOiByLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICBldmVudF9uYW1lOiBjLmV2ZW50TmFtZSxcbiAgICAgICAgICBkZXZpY2VfdG9rZW46IHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi50LFxuICAgICAgICAgICAgLi4uYy5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbm9uY2U6IGMubm9uY2UsXG4gICAgICAgICAgICBkYXRldGltZTogYy5kYXRldGltZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogYy50aW1lc3RhbXAsXG4gICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogYy50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiB0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAuLi5jLnByb3BlcnRpZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICAgfSwgbyA9IGppKHQuZW52aXJvbm1lbnQpLCBpID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIG8pO1xuICAgICAgKGF3YWl0IGZldGNoKGkudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkobilcbiAgICAgIH0pKS5vayA/ICh0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShyLmxlbmd0aCksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCkpIDogdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChyKTtcbiAgICB9IGNhdGNoIChuKSB7XG4gICAgICBRZShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgbiksIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2gocik7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKHQpIHtcbiAgICB0LmZvckVhY2goKG4pID0+IHtcbiAgICAgIG4uYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgciA9IHQuZmlsdGVyKChuKSA9PiBuLmF0dGVtcHRDb3VudCA8IFVpKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZSh0Lmxlbmd0aCksIHRoaXMucXVldWUgPSBbLi4uciwgLi4udGhpcy5xdWV1ZV0sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICB2YXIgdCwgcjtcbiAgICAodCA9IE0oKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHIgPSBNKCkpID09IG51bGwgfHwgci5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBXciA9IG5ldyBWaSgpLCBnID0gKGUsIHQsIHIpID0+IHtcbiAgV3IuYWRkRXZlbnQoZSwgdCwgcik7XG59LCBLciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBZKGUucmVhc29uKTtcbiAgZyhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogZS5yZWFzb25cbiAgfSk7XG59LCBaciA9IChlKSA9PiB7XG4gIHZhciByLCBuO1xuICBjb25zdCB0ID0gWShlLmVycm9yKTtcbiAgZyhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiB0LFxuICAgIGVycm9yX25hbWU6IChyID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHIubmFtZSxcbiAgICBlcnJvcl9zdGFjazogKG4gPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogbi5zdGFjayxcbiAgICBmaWxlX25hbWU6IGUuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGUubGluZW5vLFxuICAgIGNvbHVtbl9udW1iZXI6IGUuY29sbm9cbiAgfSk7XG59LCBHaSA9ICgpID0+IHtcbiAgdmFyIGUsIHQ7XG4gIChlID0gTSgpKSA9PSBudWxsIHx8IGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIFpyKSwgKHQgPSBNKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIEtyKTtcbn0sIHppID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSBNKCkpID09IG51bGwgfHwgZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgWnIpLCAodCA9IE0oKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgS3IpO1xufTtcbnZhciB5cjtcbih5ciA9IE0oKSkgPT0gbnVsbCB8fCB5ci5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgV3IucHJvY2Vzc1F1ZXVlKCk7XG59KTtcbmNvbnN0IHFpID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IFBlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIG8gPSBDZS5hY3RpdmUoKSwgaSA9IG4uc3RhcnRTcGFuKFxuICAgIGBjZGUuJHt0LnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBxZS5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgLi4uZS50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUudHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KHQucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIG9cbiAgKTtcbiAgcmV0dXJuIENlLndpdGgoUGUuc2V0U3BhbihvLCBpKSwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgcigpO1xuICAgICAgcmV0dXJuIGkuc2V0U3RhdHVzKHsgY29kZTogbGUuT0sgfSksIHM7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgdGhyb3cgaS5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBsZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogcyBpbnN0YW5jZW9mIEVycm9yID8gcy5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pLCBzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59LCBYZSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBQZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBuID0gQ2UuYWN0aXZlKCksIG8gPSByLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke2Uuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBxZS5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogZS52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnJlZmVycmVyLFxuICAgICAgICAuLi5lLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IGUucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgblxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IGkgPSBhd2FpdCB0KCk7XG4gICAgcmV0dXJuIG8uc2V0U3RhdHVzKHsgY29kZTogbGUuT0sgfSksIGk7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICBjb25zdCBzID0gaSBpbnN0YW5jZW9mIEVycm9yID8gaS5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgby5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogbGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBzXG4gICAgfSksIGk7XG4gIH0gZmluYWxseSB7XG4gICAgby5lbmQoKTtcbiAgfVxufTtcbmNsYXNzIFFyIGV4dGVuZHMgYmEge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgY29uc3QgciA9IGAke3QubWVzc2FnZX1gO1xuICAgIHN1cGVyKHIpLCB0aGlzLnJlc3BvbnNlID0gdDtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgVSA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiBxaShlLCB0LCBhc3luYyAoKSA9PiB7XG4gIG4gJiYgZyhuLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgbyA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgaWYgKFlpKG8pKVxuICAgIHRocm93IGcoXCJjZGVfcmVzcG9uc2VfZXJyb3JcIiwge1xuICAgICAgLi4ub1xuICAgIH0pLCBuZXcgUXIobyk7XG4gIGlmICghQmkobywgcikpIHtcbiAgICBjb25zdCBpID0gci5zYWZlUGFyc2Uobyk7XG4gICAgdGhyb3cgaS5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByLCBcIkFjdHVhbDpcIiwgbyksIGkuZXJyb3IpO1xuICB9XG4gIHJldHVybiBuICYmIGcobiwge1xuICAgIC4uLm9cbiAgfSksIG87XG59KSwgQmkgPSAoZSwgdCkgPT4gdC5zYWZlUGFyc2UoZSkuc3VjY2VzcywgWWkgPSAoZSkgPT4gRWEuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIEhpID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFUoZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHQgfSwgTXIpLCBGID0gYXN5bmMgKGUpID0+IGF3YWl0IFUoZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIERyKSwgUmUgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgVShcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIGpyLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCBYciA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBVKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiB0IH0sXG4gIExhLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgSmkgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgciA9IGF3YWl0IFUoZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogdCB9LCBqcik7XG4gIHJldHVybiBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnJcbiAgfSksIHI7XG59LCB6ID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIFNvLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIFdpID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiB0IH0sXG4gIE9yLFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIEtpID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogdCB9LFxuICBDbyxcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgWmkgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgSGkoZSwge1xuICAgIHNlY3VyZV90b2tlbjogdCxcbiAgICBwcm9tb3Rpb25fY29kZTogclxuICB9KSwgbyA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoby5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke28uc2l6ZX1gKTtcbiAgY29uc3QgaSA9IG8udmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIHMgPSBWYShuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBpLFxuICAgIGFtb3VudEF0b206IHNcbiAgfTtcbn0sIGdlID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMDtcbiAgICBjb25zdCBvID0gYXdhaXQgWmkoZSwgdCwgbik7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogby5hbW91bnRBdG9tLCBjdXJyZW5jeTogby5jdXJyZW5jeSB9O1xuICB9XG59LCBlbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmIChlLnNpemUgPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShlLnZhbHVlcygpKS5tYXAoXG4gICAgICAobikgPT4gVShuLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkOiB0IH0sIHZvKVxuICAgIClcbiAgKTtcbn0sIHJyID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IHQgfSxcbiAgJGUsXG4gIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4pLCBRaSA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBVKGUsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiB0IH0sIE9yLCBcInNldHVwX2NoZWNrb3V0XCIpLCAkdCA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBVKGUsIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkOiB0IH0sICRlLCBcInBlcmZvcm1fY2hlY2tvdXRcIiksIHRuID0gMWUzLCBYaSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnNvbGUubG9nKHQpO1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogdG4sXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIG8gPSBhd2FpdCBVKG4sIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBibyk7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIG8pLCBvO1xufSwgVnQgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgVShcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgVWEsXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgcm4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgVShcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogdCB9IH0sXG4gICAgICBqYVxuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBZKHIpKSwgXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn0sIGVzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IFUoXG4gIGUsXG4gIHsgdHlwZTogXCJzZXRfdXNlcl9kZXZpY2VfdG9rZW5cIiwgcGF5bG9hZDogeyBkZXZpY2VfdG9rZW46IHQgfSB9LFxuICB4YVxuKSwgSyA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuSy5FbnVtLnN0cmlwZTtcbmNvbnN0IG5uID0gKHtcbiAgc2NyaXB0SWQ6IGUsXG4gIHNyYzogdCxcbiAgY2hlY2tMb2FkZWRGbjogclxufSkgPT4ge1xuICBjb25zdCBuID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKG8sIGkpID0+IHtcbiAgICBsZXQgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgcy5zcmMgPSB0LCBzLmlkID0gZSwgcy5hc3luYyA9ICEwO1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICByKCkgPyBvKCkgOiBjID8gcyA9IGMgOiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImxvYWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgbi5hYm9ydCgpLCBvKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImVycm9yXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIG4uYWJvcnQoKSwgaShcIkZhaWxlZCB0byBsb2FkIHRoZSBzY3JpcHRcIik7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn0sIG9uID0gKCkgPT4gbm4oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhIXdpbmRvdy5BcHBsZVBheVNES1xufSksIGFuID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgbiA9IHQuYmlsbGluZ0NvbnRhY3QsIG8gPSB0LnNoaXBwaW5nQ29udGFjdCwgaSA9IHsgLi4uZSB9O1xuICBpZiAociB8fCBuIHx8IG8pIHtcbiAgICBpW20uRU1BSUxdID0gaVttLkVNQUlMXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5lbWFpbEFkZHJlc3MpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmVtYWlsQWRkcmVzcykgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBpW20uQ09VTlRSWV0gPSBpW20uQ09VTlRSWV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY291bnRyeUNvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmNvdW50cnlDb2RlKSB8fCAobyA9PSBudWxsID8gdm9pZCAwIDogby5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBpW20uWklQX0NPREVdID0gaVttLlpJUF9DT0RFXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5wb3N0YWxDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5wb3N0YWxDb2RlKSB8fCAobyA9PSBudWxsID8gdm9pZCAwIDogby5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgcyA9IGlbbS5GSVJTVF9OQU1FXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5naXZlbk5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmdpdmVuTmFtZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZ2l2ZW5OYW1lKSB8fCBcIlwiLCBjID0gaVttLkxBU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZmFtaWx5TmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZmFtaWx5TmFtZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZmFtaWx5TmFtZSkgfHwgXCJcIjtcbiAgICBzIHx8IGMgPyAoaVttLkZJUlNUX05BTUVdID0gcywgaVttLkxBU1RfTkFNRV0gPSBjKSA6IChpW20uRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIGlbbS5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIGk7XG59O1xueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IHRzID0gKHtcbiAgdG90YWw6IGUsXG4gIHByZWZpbGw6IHRcbn0pID0+IHtcbiAgdmFyIG47XG4gIGlmICh0Lm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7dC50b2tlbn1gLCBncikudG9TdHJpbmcoKVxuICAgIH07XG4gIGNvbnN0IHIgPSAobiA9IHQubGluZV9pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IG5bMF07XG4gIGlmIChyKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiAociA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsX2NvdW50KSA/PyB2b2lkIDAsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHt0LnRva2VufWBcbiAgICB9O1xufSwgcnMgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIHZhciBjLCBsO1xuICBjb25zdCBvID0gKCgoYyA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogYy5jdXJyZW5jeSkgPz8gKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY3VycmVuY3kpID8/IHQuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIHMgPSAoKCgobCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnRBdG9tKSA/PyAodCA9PSBudWxsID8gdm9pZCAwIDogdC5hbW91bnRBdG9tKSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGU6IG8sXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5sYWJlbCkgPz8gbiA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlICE9IG51bGwgJiYgZS5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IHNcbiAgICB9XG4gIH07XG59LCBzbiA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiB0LFxuICBwcmVmaWxsOiByLFxuICBkZWZhdWx0TGFiZWw6IG5cbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGU6IG8sIHRvdGFsOiBpIH0gPSBycyh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgICBpbml0aWFsUHJldmlldzogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIGRlZmF1bHRMYWJlbDogblxuICB9KTtcbiAgbGV0IHMgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGU6IG8sXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgIF0sXG4gICAgdG90YWw6IGksXG4gICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IHRzKHtcbiAgICAgIHRvdGFsOiBpLFxuICAgICAgcHJlZmlsbDogclxuICAgIH0pXG4gIH07XG4gIHJldHVybiBlICE9IG51bGwgJiYgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ICYmICh0eXBlb2YgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHMgPSB7XG4gICAgLi4ucyxcbiAgICAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocylcbiAgfSA6IHMgPSB7IC4uLnMsIC4uLmUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9KSwgcztcbn0sIHsgbG9nX186IFpjLCBlcnJfXzogY24gfSA9IEEoXCJjb21tb25cIiksIEplID0gKGUpID0+IHtcbiAgaWYgKGUucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiBlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgSCA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IHQuc2FmZVBhcnNlKG4pLnN1Y2Nlc3MpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgY24oXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgZSksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gdC5wYXJzZShyKTtcbn0sIGxuID0gKGUpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogZS5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogZS56aXBDb2RlLFxuICAgIGNvdW50cnk6IGUuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGUubGFzdE5hbWVcbn0pLCBXZSA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IHQgfSA9IEEoZS5sb2dQcmVmaXgpLCByID0gYXdhaXQgRihlLmFueUNkZUNvbm5lY3Rpb24pLCBuID0gSmUoZS5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHIubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiB0KFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgV2koZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBwbV9pZDogbi5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICBpZiAoZS51c2VQYXlGaXJzdEZsb3cpIHtcbiAgICAgIGlmICh0KFwiVXNpbmcgcGF5LWZpcnN0IGZsb3cuLi5cIiksICFlLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IGNuKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZS5jb25maXJtUmVzdWx0KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgICB0KFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgbyA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbbS5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbbS5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiBlLnJlcXVpcmVkRm9ybUZpZWxkc1ttLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW20uUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogci5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHIuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCAkdChlLmFueUNkZUNvbm5lY3Rpb24sIG8pIH07XG4gIH1cbn0sIG5zID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgdW4gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0LmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke25zfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG4gPSByLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBuLmFwcGVuZENoaWxkKHQuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgbyA9IG4ucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksIHsgaG9zdDogciwgaWZyYW1lOiBvLCBjYW5jZWxCdXR0b246IGkgfTtcbn07XG5mdW5jdGlvbiBvcyhlLCB0LCByKSB7XG4gIGNvbnN0IG4gPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBhd2FpdCBYaShlLCByKTtcbiAgICAgIGkgJiYgKGNsZWFySW50ZXJ2YWwobyksIHQoaSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgbigpO1xuICBjb25zdCBvID0gc2V0SW50ZXJ2YWwobiwgdG4pO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIGFzKHtcbiAgZWxlbWVudHM6IGUsXG4gIHBvbGxpbmdJbnRlcnZhbDogdCxcbiAgcmVzb2x2ZTogclxufSkge1xuICBjb25zdCBuID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwodCksIGUuaG9zdC5yZW1vdmUoKSwgcih7IHN0YXR1czogRC5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiBlLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbiksICgpID0+IHtcbiAgICBlLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBwdChlKSB7XG4gIGNvbnN0IHsgdXJsOiB0LCBiYXNlVXJsOiByIH0gPSBlLCBuID0gdW4odCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobykgPT4ge1xuICAgIGNvbnN0IGkgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG4uaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIG8obCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgcyA9IG9zKG4uaWZyYW1lLCBpLCBuZXcgVVJMKHIpLm9yaWdpbiksIGMgPSBhcyh7XG4gICAgICBlbGVtZW50czogbixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IG9cbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBkbiA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBwdChlKTtcbiAgaWYgKHQuc3RhdHVzID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQuc3RhdHVzID09PSBELkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiB0LnN0YXR1cyAhPT0gRC5TVUNDRVNTICYmIGR0KHQuc3RhdHVzKSwge1xuICAgIGhyZWY6IHQuaHJlZlxuICB9O1xufSwgaXMgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gd2luZG93Lm9wZW4odCwgXCJfYmxhbmtcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHI7XG59LCBwbiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IG8gfSA9IEEoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSwgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBpcyhlLCBuKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBLaSh0LCByKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGkoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBvKFkodSkpLCBjbGVhckludGVydmFsKGwpLCBzKFkodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogc3MsIGVycl9fOiBHdCB9ID0gQShcImFpcndhbGxleC1jY1wiKSwgY3MgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBscyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBjcy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IEd0KG4pLCBuZXcgRXJyb3Iocik7XG4gIH1cbiAgcmV0dXJuIHQuZGF0YTtcbn0sIG1uID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIHVzID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBzcyhgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHt0fV1gKSwgdDtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHIgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgR3QociwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtZKHQpfWApLCBuZXcgRXJyb3Iocik7XG4gIH1cbn0sIGZuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGxzKHQpLCBuID0gYXdhaXQgZG4oeyB1cmw6IHJbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogZSB9KSwgbyA9IHVzKG4uaHJlZiA/PyBcIlwiKSwgaSA9IHJbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChpICE9PSBvKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbCA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtvfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke2l9KS5gO1xuICAgIHRocm93IEd0KGwpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IG8sXG4gICAgICBjb25zZW50X2lkOiByW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCBfbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgeW4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHdlID0gKCkgPT4ge1xuICBjb25zdCBlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXMgOiBbbmF2aWdhdG9yLmxhbmd1YWdlXTtcbiAgbGV0IHQgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlWzBdO1xuICByZXR1cm4gdCAmJiAodCA9IHQuc3BsaXQoXCItXCIpWzBdKSwgdDtcbn0sIHsgbG9nX186IGhuLCBlcnJfXzogZ24gfSA9IEEoXCJjb21tb24tY2NcIiksIGFlID0gKGUsIHQsIHIpID0+IHtcbiAgaWYgKHIpIHtcbiAgICBobihgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkocil9YCk7XG4gICAgZm9yIChjb25zdCBbbywgaV0gb2YgT2JqZWN0LmVudHJpZXMocikpXG4gICAgICBlW29dIHx8IChlW29dID0gaSk7XG4gIH1cbiAgY29uc3QgbiA9IFllLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFuLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBvID0gbi5lcnJvci5mb3JtYXQoKSwgaSA9IFNyKG8pO1xuICAgIGZvciAoY29uc3QgW3MsIGNdIG9mIE9iamVjdC5lbnRyaWVzKGkpKVxuICAgICAgdChzLCBjLCBzKTtcbiAgICB0aHJvdyBnbihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGkpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gbi5kYXRhO1xufSwgd24gPSAoZSwgdCkgPT4ge1xuICBmb3IgKGNvbnN0IHIgb2YgZSlcbiAgICBpZiAoci5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IHIuZXJyb3JzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgbyA9IEVyLnNhZmVQYXJzZShuLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFvLnN1Y2Nlc3MpXG4gICAgICAgICAgZ24oYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtuLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIG4pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpID0gby5kYXRhO1xuICAgICAgICAgIHQoaSwgbi5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgaG4oYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHIuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIHsgbG9nX186IHR0IH0gPSBBKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGRzKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IFZ0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBvID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKG8pLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ub1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHBzKGUsIHQpIHtcbiAgaWYgKCFlLnJlZGlyZWN0X3VybClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmRcIik7XG4gIHR0KFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgZSk7XG4gIGNvbnN0IHsgc3RhdHVzOiByIH0gPSBhd2FpdCBwdCh7XG4gICAgdXJsOiBlLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiB0LmJhc2VVcmxcbiAgfSk7XG4gIGlmICh0dChg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7cn1dYCksIHIgPT09IEQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAociA9PT0gRC5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBjb25zdCBuID0gYXdhaXQgeih0LmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBlLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGUuY29uc2VudF9pZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHR0KFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbiksIG47XG59XG5hc3luYyBmdW5jdGlvbiBtcyhlLCB0KSB7XG4gIHZhciByLCBuLCBvLCBpLCBzO1xuICB0cnkge1xuICAgIGNvbnN0IGMgPSBlLnBheW1lbnQsIGwgPSBhbih0Lm5vbkNkZUZvcm1JbnB1dHMsIGMpLCB1ID0gYWUoXG4gICAgICBsLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBwID0gKGF3YWl0IFJlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbbS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVttLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVttLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogdVttLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogdVttLkNPVU5UUlldXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHdlKClcbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBsZXQgZiA9IGF3YWl0IHoodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHAsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGMudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdHQoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBmKTtcbiAgICBsZXQgeSA9IChuID0gKHIgPSBmLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkO1xuICAgIGNvbnN0IGggPSAobyA9IGYucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogby5maW5kKFxuICAgICAgKGIpID0+IGIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChoICE9IG51bGwgJiYgaC5yZWRpcmVjdF91cmwgJiYgaC5jb25zZW50X2lkICYmIGgudGhlaXJfcG1faWQgJiYgKGYgPSBhd2FpdCBwcyhoLCB0KSwgeSA9IChzID0gKGkgPSBmLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBzLmlkKSwgIXkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCB2ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHYpLCBXZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiB1LFxuICAgICAgY29uZmlybVJlc3VsdDogZixcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChsKSwgYztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogRGUsIGVycl9fOiB2biB9ID0gQShcImF3eC1hcHBsZS1wYXlcIiksIGZzID0gaGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IEsuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBfbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKERlKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBvbigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIERlKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAoRGUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIERlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IEYocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGdlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgVC5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIHZuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgcCksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigocCA9PSBudWxsID8gdm9pZCAwIDogcC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIF9zID0gb2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogb1xuICB9KSA9PiB7XG4gICAgdmFyIHk7XG4gICAgY29uc3QgaSA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBfbiksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcywgaW5pdGlhbFByZXZpZXc6IGMgfSA9IG4sIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBGKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIF8gPSBzbih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGMsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnVcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6ICh5ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCBwID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBfKSwgZiA9IHtcbiAgICAgIHNlc3Npb246IHAsXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogaS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogZCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IG8sXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICByZXR1cm4gZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBKcih1LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSksIG5ldyBQcm9taXNlKChoLCB2KSA9PiB7XG4gICAgICBjb25zdCBiID0gKCkgPT4ge1xuICAgICAgICBEZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgcC5vbmNhbmNlbCA9IGIsIHAub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKEMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBkcyhDLCBmKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIHYoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHAub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IEMgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4uXy50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHAuY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKEMpO1xuICAgICAgfSwgcC5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKEMpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgRSA9IGF3YWl0IG1zKEMsIGYpO1xuICAgICAgICAgIGgoRSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICB2KEUpO1xuICAgICAgICB9XG4gICAgICB9LCBwLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IHZuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgbXQgPSAoe1xuICBnYXRld2F5OiBlLFxuICBnYXRld2F5TWVyY2hhbnRJZDogdCxcbiAgbWVyY2hhbnROYW1lOiByLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogbyxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSxcbiAgcHJlZmlsbDogc1xufSkgPT4ge1xuICB2YXIgXywgcDtcbiAgY29uc3QgYyA9ICgoXyA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogXy5hbW91bnRBdG9tKSA/PyAobyA9PSBudWxsID8gdm9pZCAwIDogby5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChwID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBwLmN1cnJlbmN5KSA/PyAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jdXJyZW5jeSkgPz8gby5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IGUsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogclxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogaSAhPSBudWxsICYmIGkucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBpICE9IG51bGwgJiYgaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHR5cGVvZiBpLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHsgLi4uZCwgLi4uaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdChkKSB9IDogeyAuLi5kLCAuLi5pLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBkO1xufSwgYm4gPSAoKSA9PiBubih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4ge1xuICAgIHZhciBlLCB0O1xuICAgIHJldHVybiAhISgodCA9IChlID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGUucGF5bWVudHMpICE9IG51bGwgJiYgdC5hcGkpO1xuICB9XG59KTtcbmxldCBFdCA9IG51bGw7XG5jb25zdCBFbiA9IGFzeW5jIChlKSA9PiBhd2FpdCBIcihlKSA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCBmdCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBFbihlKTtcbiAgcmV0dXJuIEV0ID09PSBudWxsICYmIChFdCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IHIsXG4gICAgbWVyY2hhbnRJbmZvOiB0Lm1lcmNoYW50SW5mb1xuICB9KSksIEV0O1xufSwgeXMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiB0ID8gQ3IucGFyc2UodCkgOiBudWxsO1xufSwgQ24gPSAoZSwgdCkgPT4ge1xuICB2YXIgbywgaSwgcywgYztcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBuID0gKGkgPSAobyA9IHQucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBvLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBpLmJpbGxpbmdBZGRyZXNzO1xuICBpZiAobikge1xuICAgIGNvbnN0IFtsLCAuLi51XSA9ICgoYyA9IChzID0gbi5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogcy50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBkID0gdS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgclttLkVNQUlMXSA9IHJbbS5FTUFJTF0gfHwgdC5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbbS5DT1VOVFJZXSA9IHJbbS5DT1VOVFJZXSB8fCBuLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgclttLkFERFJFU1NdID0gclttLkFERFJFU1NdIHx8IG4uYWRkcmVzczEgfHwgXCJcIiwgclttLkNJVFldID0gclttLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgclttLlpJUF9DT0RFXSA9IHJbbS5aSVBfQ09ERV0gfHwgbi5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgclttLlNUQVRFXSA9IHJbbS5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIjtcbiAgICBjb25zdCBfID0gclttLkZJUlNUX05BTUVdIHx8IGwgfHwgXCJcIiwgcCA9IHJbbS5MQVNUX05BTUVdIHx8IGQgfHwgXCJcIjtcbiAgICBfIHx8IHAgPyAoclttLkZJUlNUX05BTUVdID0gXywgclttLkxBU1RfTkFNRV0gPSBwKSA6IChyW20uRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbbS5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIHI7XG59LCB7IGxvZ19fOiBXLCBlcnJfXzogYmUgfSA9IEEoXCJhd3gtZ29vZ2xlLXBheVwiKSwgaHMgPSBoZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgdmFyIF8sIHA7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogSy5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHluKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBXKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgbyA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFvLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIGJlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgcjtcbiAgICBpZiAoVyhcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IGJuKCksICEoKHAgPSAoXyA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBfLnBheW1lbnRzKSAhPSBudWxsICYmIHAuYXBpKSlcbiAgICAgIHJldHVybiBiZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IEVuKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gYmUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIFcoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGYgPSBtdCh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBvLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogby5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeSA9IGF3YWl0IGZ0KGUuYmFzZVVybCwgZiksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCB5LmlzUmVhZHlUb1BheShmKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIFcoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgcjtcbiAgICB9IGNhdGNoIChmKSB7XG4gICAgICByZXR1cm4gYmUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBmKSwgcjtcbiAgICB9XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IEYocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGdlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVC5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBCKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBiZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IEsuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgZ3MgPSBvZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgeSwgaCwgdiwgYiwgQywgRTtcbiAgICBXKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgeW4pLCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBvLCBsID0gaS5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBtdCh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSksIGQgPSBlLmFueUNkZUNvbm5lY3Rpb24sIF8gPSBhd2FpdCBGKGQpO1xuICAgIGcoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogaS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IEpyKF8sIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBjb25zdCBwID0gYXdhaXQgZnQoZS5iYXNlVXJsLCB1KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgSSA9IGF3YWl0IHAubG9hZFBheW1lbnREYXRhKHUpO1xuICAgICAgVyhcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIEkpO1xuICAgICAgY29uc3QgTyA9IENuKHIsIEkpLCBTID0gYWUoXG4gICAgICAgIE8sXG4gICAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBvID09IG51bGwgPyB2b2lkIDAgOiBvLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5TXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHEgPSAoeSA9IChmID0gSS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkudG9rZW47XG4gICAgICBpZiAoIXEpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgX3QgPSBhd2FpdCBSZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IFNbbS5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBTW20uRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IFNbbS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBTW20uWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IFNbbS5DT1VOVFJZXVxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogd2UoKVxuICAgICAgfSksIHZlID0geXMoX3QpO1xuICAgICAgVyhcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHZlKTtcbiAgICAgIGxldCBzZSA9IGF3YWl0IHooZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IF8udG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHZlID09IG51bGwgPyB2b2lkIDAgOiB2ZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFcoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzZSk7XG4gICAgICBsZXQgTmUgPSAodiA9IChoID0gc2UucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYuaWQ7XG4gICAgICBjb25zdCBkZSA9IChiID0gc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogYi5maW5kKFxuICAgICAgICAoRmUpID0+IEZlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKGRlICYmIGRlLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBXKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgZGUpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogRmUgfSA9IGF3YWl0IHB0KHtcbiAgICAgICAgICB1cmw6IGRlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChXKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtGZX1dYCksIEZlID09PSBELkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKEZlID09PSBELkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoZGUgJiYgIU5lICYmIChzZSA9IGF3YWl0IHooZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IF8udG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBkZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZGUuY29uc2VudF9pZFxuICAgICAgICB9XG4gICAgICB9KSwgVyhcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHNlKSwgTmUgPSAoRSA9IChDID0gc2UucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogQ1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQpLCAhTmUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIFdlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IFMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IHNlLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChJKSB7XG4gICAgICB0aHJvdyBiZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBJKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBJXG4gICAgICB9KSwgbmV3IEVycm9yKChJID09IG51bGwgPyB2b2lkIDAgOiBJLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIFNuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgUG4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuYXN5bmMgZnVuY3Rpb24gd3MoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgVnQodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgbyA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFvKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihvKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLm9cbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiB2cyhlLCB0KSB7XG4gIHZhciByLCBuO1xuICB0cnkge1xuICAgIGNvbnN0IG8gPSBlLnBheW1lbnQsIGkgPSBhbih0Lm5vbkNkZUZvcm1JbnB1dHMsIG8pLCBzID0gYWUoaSwgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIGF3YWl0IFJlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHNbbS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogc1ttLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogc1ttLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogc1ttLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogc1ttLkNPVU5UUlldXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHdlKClcbiAgICB9KTtcbiAgICBjb25zdCBjID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoby50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgbCA9IGF3YWl0IHoodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChyID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCBXZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGwsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICBjb25zdCBpID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoaSksIG87XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHJ0LCBlcnJfXzoga24gfSA9IEEoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCBicyA9IGhlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFNuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAocnQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IG9uKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gcnQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHJ0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IEYocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGdlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgVC5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGtuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgcCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IHBcbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigocCA9PSBudWxsID8gdm9pZCAwIDogcC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBFcyA9IG9lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IG9cbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGksIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgfSA9IG4sIGMgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU24pLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgRihsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBfID0gc24oe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBpLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGRlZmF1bHRMYWJlbDogKHkgPSBjID09IG51bGwgPyB2b2lkIDAgOiBjLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IHAgPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIF8pLCBmID0ge1xuICAgICAgc2Vzc2lvbjogcCxcbiAgICAgIGNvbm5lY3Rpb246IGUuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiB0Lm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBkLFxuICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogb1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChoLCB2KSA9PiB7XG4gICAgICBwLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBydChcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCBwLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChiKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgd3MoYiwgZik7XG4gICAgICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgICAgICB2KEMpO1xuICAgICAgICB9XG4gICAgICB9LCBwLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBiID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBfLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHAuY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKGIpO1xuICAgICAgfSwgcC5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGIpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgQyA9IGF3YWl0IHZzKGIsIGYpO1xuICAgICAgICAgIGgoQyk7XG4gICAgICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgICAgICB2KEMpO1xuICAgICAgICB9XG4gICAgICB9LCBwLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IGtuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgeyBsb2dfXzogbWUsIGVycl9fOiBPZSB9ID0gQShcImF1dGhuZXQtZ29vZ2xlcGF5XCIpLCBDcyA9IGhlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgZCwgXztcbiAgICBtZShcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IEsuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUG4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIG1lKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgbyA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFvLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIE9lKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgcjtcbiAgICBpZiAobWUoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBibigpLCAhKChfID0gKGQgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogZC5wYXltZW50cykgIT0gbnVsbCAmJiBfLmFwaSkpXG4gICAgICByZXR1cm4gT2UoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCByO1xuICAgIG1lKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwID0gbXQoe1xuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogby5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBvLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IG8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIGYgPSBhd2FpdCBmdChlLmJhc2VVcmwsIHApLCB7IHJlc3VsdDogeSB9ID0gYXdhaXQgZi5pc1JlYWR5VG9QYXkocCk7XG4gICAgICBpZiAoIXkpXG4gICAgICAgIHJldHVybiBtZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIHJldHVybiBPZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIHApLCByO1xuICAgIH1cbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgRihpKSwgYyA9IHMubW9kZSA9PT0gXCJzZXR1cFwiLCBsID0gYXdhaXQgZ2UoaSwgcy50b2tlbiwgYywgdm9pZCAwKSwgdSA9IGFzeW5jIChwKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBULmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogbFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIE9lKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGYpLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZlxuICAgICAgICB9KSwgdC5nZXQub25DaGVja291dEVycm9yKChmID09IG51bGwgPyB2b2lkIDAgOiBmLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IEsuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogdVxuICAgIH07XG4gIH1cbiksIFNzID0gb2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdmFyIGYsIHksIGgsIHY7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogaSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbywgbCA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbikubWV0YWRhdGEsIHUgPSBtdCh7XG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSksIGQgPSBlLmFueUNkZUNvbm5lY3Rpb24sIF8gPSBhd2FpdCBGKGQpO1xuICAgIGcoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogci5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IF8sXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgcCA9IGF3YWl0IGZ0KGUuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGIgPSBhd2FpdCBwLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIG1lKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgYik7XG4gICAgICBjb25zdCBDID0gQ24odCwgYiksIEUgPSBhZShDLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uRVxuICAgICAgfSk7XG4gICAgICBjb25zdCBJID0gKHkgPSAoZiA9IGIucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuO1xuICAgICAgaWYgKCFJKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE8gPSBhd2FpdCBSZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IEVbbS5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBFW20uRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IEVbbS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBFW20uWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IEVbbS5DT1VOVFJZXVxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogd2UoKVxuICAgICAgfSk7XG4gICAgICBtZShcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBPKTtcbiAgICAgIGNvbnN0IFMgPSBhd2FpdCB6KGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBfLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCEoKHYgPSAoaCA9IFMucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYuaWQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBXZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogRSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogUyxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYikge1xuICAgICAgdGhyb3cgT2UoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgYiksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogYlxuICAgICAgfSksIG5ldyBFcnJvcigoYiA9PSBudWxsID8gdm9pZCAwIDogYi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBQcyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwga3MgPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogQWUsIGVycl9fOiBCZSB9ID0gQShcImFkeWVuLWNjXCIpLCBBcyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IFBzLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBBbiA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgSXMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gQXMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBCZShgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKSwgbmV3IEVycm9yKEFuKTtcbiAgcmV0dXJuIHQuZGF0YTtcbn0sIFRzID0gKGUpID0+IEpTT04ucGFyc2UoZSksIG5yID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIFJzID0gYXN5bmMgKCkgPT4ge1xuICBBZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgbnIoKSB8fCBhd2FpdCBsdCg1MDApO1xuICBpZiAoIW5yKCkpXG4gICAgdGhyb3cgQmUoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKEFuKTtcbiAgcmV0dXJuIEFlKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgTnMgPSAoZSkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IHQsIGxvY2FsZTogciwgY291bnRyeUNvZGU6IG4sIGNvbXBvbmVudDogbywgaG9zdDogaSwgY2FuY2VsQnV0dG9uOiBzIH0gPSBlLCBjID0gVHModFtcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiBBZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7Yy50eXBlfWApLCBuZXcgUHJvbWlzZSgobCkgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICBBZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBwKSwgaS5yZW1vdmUoKTtcbiAgICB9LCBkID0gKHkpID0+IHtcbiAgICAgIEJlKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHkpLCBsKHsgc3RhdHVzOiBELkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgXyA9ICh5KSA9PiB7XG4gICAgICBCZShcIkFkeWVuIGVycm9yOlwiLCB5KSwgbCh7IHN0YXR1czogRC5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIHAgPSAoKSA9PiB7XG4gICAgICBsKHsgc3RhdHVzOiBELkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHApO1xuICAgIGNvbnN0IGYgPSAoeSwgaCwgdikgPT4ge1xuICAgICAgaS5yZW1vdmUoKSwgbCh7IHN0YXR1czogRC5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogeSwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIFJzKCkudGhlbihcbiAgICAgICh5KSA9PiB5KHtcbiAgICAgICAgY2xpZW50S2V5OiB0W1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiByLFxuICAgICAgICBjb3VudHJ5Q29kZTogbixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogZixcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBfXG4gICAgICB9KVxuICAgICkudGhlbigoeSkgPT4ge1xuICAgICAgeS5jcmVhdGVGcm9tQWN0aW9uKGMsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KG8pO1xuICAgIH0pO1xuICB9KTtcbn0sIEZzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCByID0gZSA/PyB0LCBuID0ga3Muc2FmZVBhcnNlKHIpO1xuICByZXR1cm4gbi5zdWNjZXNzID8gKEFlKGBSZXNvbHZlZCBsb2NhbGU6ICR7bi5kYXRhfWApLCBuLmRhdGEpIDogKEJlKGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtyfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIEluID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWR5ZW4tYWN0aW9uXCJdKSAhPT0gdm9pZCAwLCBUbiA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBJcyh0KSwgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIG8uaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IGksIGlmcmFtZTogcywgY2FuY2VsQnV0dG9uOiBjIH0gPSB1bihcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgcy5yZXBsYWNlV2l0aChvKTtcbiAgY29uc3QgbCA9IGF3YWl0IE5zKHtcbiAgICBoZWFkZXJzOiBuLFxuICAgIGxvY2FsZTogRnMociksXG4gICAgY291bnRyeUNvZGU6IGUsXG4gICAgY29tcG9uZW50OiBvLFxuICAgIGhvc3Q6IGksXG4gICAgY2FuY2VsQnV0dG9uOiBjXG4gIH0pO1xuICBpZiAobC5jbGVhbnVwKCksIGwuc3RhdHVzID09PSBELkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRC5TVUNDRVNTKSB7XG4gICAgaWYgKCFsLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiBBZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGwuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIGR0KGwuc3RhdHVzKTtcbn0sIHsgbG9nX186IE1zLCBlcnJfXzogUm4gfSA9IEEoXCJwb2NreXQtY2NcIiksIERzID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgT3MgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gRHMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBSbihuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBObiA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gTXMoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3R9XWApLCB0O1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgciA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IFJuKHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7WSh0KX1gKSwgbmV3IEVycm9yKHIpO1xuICB9XG59LCBUdCA9IChlLCB0KSA9PiBuZXcgVVJMKGUpLnNlYXJjaFBhcmFtcy5nZXQodCksIExzID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIGpzID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IE9zKHQpLCBuID0gYXdhaXQgZG4oeyB1cmw6IHJbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybDogZSB9KTtcbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgdmF1bHRfaWQ6IE5uKG4uaHJlZiA/PyBcIlwiKSxcbiAgICAgIHRyYW5zYWN0aW9uX25vOiByW1wib3AtcG9ja3l0LXR4bi1ub1wiXSxcbiAgICAgIHJlZmVyZW5jZV9ubzogcltcIm9wLXBvY2t5dC1yZWYtbm9cIl1cbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiBvciB9ID0gQShcInN0cmlwZS1jY1wiKSwgVXMgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBGbiA9IGFzeW5jIChlKSA9PiB7XG4gIGcoXCIzZHNfc3RyaXBlX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5lXG4gIH0pLCBvcihg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtlLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgRm8oZSksIGcoXCIzZHNfc3RyaXBlX2NvbXBsZXRlXCIpLCBvcihcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIHhzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IFVzLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgM0RTIG1ldGFkYXRhIGhhcyB1bmV4cGVjdGVkIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeSh0LmVycm9yLmVycm9ycyl9YCk7XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiB0LmRhdGEuc3RyaXBlX3BrLFxuICAgIGNsaWVudF9zZWNyZXQ6IHQuZGF0YS5jbGllbnRfc2VjcmV0LFxuICAgIHN0cmlwZV9wbV9pZDogdC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufSwgJHMgPSA0LCB7IGxvZ19fOiBfZSwgZXJyX186IFJ0IH0gPSBBKFwidW5pZmllZC1jY1wiKSwgVnMgPSBhc3luYyAoe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogb1xufSkgPT4ge1xuICBfZShcIuKUnCBSdW5uaW5nIHVuaWZpZWQgQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCB9KTtcbiAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEYoaSk7XG4gIF9lKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gIGNvbnN0IGMgPSBhZShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGwgPSB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBjLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6ICEwLFxuICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzoge1xuICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSxcbiAgICBwYXltZW50X3JvdXRlX2lkOiBvLnBheW1lbnRSb3V0ZUlkXG4gIH07XG4gIFJ0KG8sIGwpLCBfZShg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIFBhcnRpYWwgUE1zIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICBjb25zdCB1ID0gYXdhaXQgZW4oby5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICB3bih1LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gIGNvbnN0IGQgPSBhd2FpdCBYcihpLCBsKTtcbiAgaWYgKF9lKFwi4pScIHN0YXJ0UGYgcmVzdWx0XCIsIGQpLCBkLmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgcmV0dXJuIE1uKHMubW9kZSwgZCk7XG4gIGlmICghZC5jaGVja291dF9hdHRlbXB0X2lkKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IGF0dGVtcHQgSUQgZnJvbSBQRiByZXN1bHRcIik7XG4gIHJldHVybiBHcyh7XG4gICAgY29udGV4dDogZSxcbiAgICBwcmVmaWxsOiBzLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGwsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogaSxcbiAgICBzdGFydFBmUmVzdWx0OiBkLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBkLmNoZWNrb3V0X2F0dGVtcHRfaWRcbiAgfSk7XG59LCBHcyA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb250ZXh0OiB0LFxuICAgIHByZWZpbGw6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogbixcbiAgICBjb21tb25DaGVja291dFBhcmFtczogbyxcbiAgICBhbnlDZGVDb25uZWN0aW9uOiBpLFxuICAgIHN0YXJ0UGZSZXN1bHQ6IHMsXG4gICAgY2hlY2tvdXRBdHRlbXB0SWQ6IGNcbiAgfSA9IGU7XG4gIGxldCBsID0gcztcbiAgZm9yIChsZXQgdSA9IDA7IHUgPCAkczsgdSsrKSB7XG4gICAgX2UoYOKUnCBSdW5uaW5nIGNvbmZpcm0gbG9vcCBpdGVyYXRpb24gJHt1fWApO1xuICAgIGNvbnN0IHsgdXNlckFjdGlvbjogZCB9ID0gQnMobCksIF8gPSBhd2FpdCB6cyh0LmJhc2VVcmwsIGQsIHIsIG4pO1xuICAgIGlmIChvLmV4dHJhX21ldGFkYXRhID0ge1xuICAgICAgLi4uby5leHRyYV9tZXRhZGF0YSxcbiAgICAgIC4uLl8ubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgIH0sIF9lKFwi4pScIE5ldyBleHRyYSBtZXRhZGF0YVwiLCBvLmV4dHJhX21ldGFkYXRhKSwgbCA9IGF3YWl0IHooaSwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYyxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogby5leHRyYV9tZXRhZGF0YVxuICAgIH0pLCBfZShg4pScIGNvbmZpcm1QZiByZXN1bHQgKGl0ZXJhdGlvbiAke3V9KWAsIGwpLCBsLmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICByZXR1cm4gTW4oci5tb2RlLCBsKTtcbiAgfVxuICB0aHJvdyBnKFwidW5pZmllZF9jY191bmV4cGVjdGVkX2JyYW5jaFwiLCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGwuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IGxcbiAgfSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGVycm9yLCBwbGVhc2UgdHJ5IGFub3RoZXIgcGF5bWVudCBtZXRob2RcIik7XG59LCB6cyA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGlmICh0Ll91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHQudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpXG4gICAgICByZXR1cm4gYXdhaXQgRm4oeHModCkpLCB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgaWYgKG1uKHQpKVxuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDogeyBhaXJ3YWxsZXg6IGF3YWl0IGZuKGUsIHQpIH0gfTtcbiAgICBpZiAoSW4odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhd2FpdCBUbihcbiAgICAgICAgblttLkNPVU5UUlldLFxuICAgICAgICB0LFxuICAgICAgICByLmxvY2FsZVxuICAgICAgKSB9IH07XG4gICAgaWYgKHFzKHQpKVxuICAgICAgcmV0dXJuIGF3YWl0IE9uKHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdF0gfSwgZSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIH0gZWxzZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZXF1aXJlZCB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbn0sIHFzID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRG4oW2VdKSwgITA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgQnMgPSAoZSkgPT4ge1xuICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID09PSAwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPiAxKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbXVsdGlwbGUgcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICBjb25zdCB0ID0gJGEuc2FmZVBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgUnQoXCJVc2VyIGFjdGlvbiByYXcgcGF5bG9hZFwiLCBlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSksIFJ0KFwiUGFyc2luZyBlcnJvclwiLCB0LmVycm9yKSwgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogc2NoZW1hIG9mIHVzZXIgYWN0aW9uIHBheWxvYWQgaXMgbm90IHZhbGlkXCIpO1xuICByZXR1cm4ge1xuICAgIHVzZXJBY3Rpb246IHQuZGF0YVxuICB9O1xufSwgTW4gPSAoZSwgdCkgPT4ge1xuICB2YXIgcjtcbiAgaWYgKGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IG4gPSB0LmNjX3BtX2lkID8/ICgociA9IHQucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXS5pZCk7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gQ0MgUE0gSUQgb3IgcGF5bWVudF9tZXRob2RzIGZvdW5kIGluIFBGIHJlc3VsdFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBuXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSBzdGFydFBGXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbn0sIHsgbG9nX186IGssIGVycl9fOiBhciB9ID0gQShcImNvbW1vbi1jY1wiKTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgWXMgPSBvZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgeTtcbiAgICBrKFwi4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHQgfSk7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEYoaSk7XG4gICAgZyhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4udCxcbiAgICAgIHByZWZpbGw6IHNcbiAgICB9KTtcbiAgICBjb25zdCBjID0gKChmID0gcy5maW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3MpID09IG51bGwgPyB2b2lkIDAgOiBmLnVuaWZpZWRfY2MpID8/IDA7XG4gICAgayhg4pScIFVuaWZpZWQgQ0Mgcm9sbG91dDogJHtNYXRoLnJvdW5kKGMgKiAxMDApfSVgKTtcbiAgICBjb25zdCBsID0gTWF0aC5yYW5kb20oKSwgdSA9IGwgPCBjLCBkID0ge1xuICAgICAgcm9sbDogbCxcbiAgICAgIHVuaWZpZWRDQ1JvbGxvdXRSYXRpbzogYyxcbiAgICAgIHVzZVVuaWZpZWRDQ0Zsb3c6IHVcbiAgICB9O1xuICAgIGlmICh1KVxuICAgICAgcmV0dXJuIGsoYOKUnCBQaWNrZWQgdW5pZmllZCBDQyBmbG93ICgke2x9IHZzICR7Y30pYCksIGcoXCJ1bmlmaWVkX2NjX2Zsb3dfcGlja2VkXCIsIGQpLCBWcyh7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgY3VzdG9tUGFyYW1zOiBvLFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIH0pO1xuICAgIGsoYOKUnCBQaWNrZWQgbGVnYWN5IENDIGZsb3cgKCR7bH0gdnMgJHtjfSlgKSwgZyhcImxlZ2FjeV9jY19mbG93X3BpY2tlZFwiLCBkKSwgayhg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtzLm1vZGV9XWApO1xuICAgIGNvbnN0IF8gPSBhZShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5fXG4gICAgfSk7XG4gICAgY29uc3QgcCA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IF8sXG4gICAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgIH0sXG4gICAgICB1c2VfdW5pZmllZF9jY19mbG93OiAhMSxcbiAgICAgIHBheW1lbnRfcm91dGVfaWQ6IG8ucGF5bWVudFJvdXRlSWQsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogd2UoKVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGsoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBoID0gYXdhaXQgZW4oby5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAod24oaCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBrKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke3MudG9rZW59XWApO1xuICAgICAgICBjb25zdCB2ID0gYXdhaXQgUWkoaSwgcCk7XG4gICAgICAgIHJldHVybiBrKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7di5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHYgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGsoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCB2ID0gYXdhaXQgcnIoaSwgcCk7XG4gICAgICAgIHJldHVybiBrKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiB2IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgaWYgKGggaW5zdGFuY2VvZiBRciAmJiBoLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIGsoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBrKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGgucmVzcG9uc2UuaGVhZGVycyksIGcoXCIzZHNfcmVxdWlyZWRcIiwge1xuICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgLi4uaC5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2ID0gTHMoaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICBrKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IFMgPSBhd2FpdCBqcyhlLmJhc2VVcmwsIGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgcC5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSBTO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtbihoLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgayhcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBTID0gYXdhaXQgZm4oZS5iYXNlVXJsLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHAuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gUztcbiAgICAgICAgfVxuICAgICAgICBpZiAoSW4oaC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIGsoXCLilJwgQWR5ZW4gM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWR5ZW4gM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IFMgPSBhd2FpdCBUbihcbiAgICAgICAgICAgIHJbbS5DT1VOVFJZXSxcbiAgICAgICAgICAgIGgucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgIHMubG9jYWxlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBwLmV4dHJhX21ldGFkYXRhLmFkeWVuID0gUztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBFID0gYXdhaXQgWHIoaSwgcCk7XG4gICAgICAgIGsoXCLilJwgU3RhcnQgcGF5bWVudCBmbG93IHJlc3VsdDpcIiwgRSk7XG4gICAgICAgIGNvbnN0IEkgPSAoKHkgPSBoLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiB5W1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICB2ID8gayhcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogSSA/IChrKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgRm4oSHMoRSkpKSA6IChrKFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgT24oRSwgZS5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IE8gPSBFLmNjX3BtX2lkO1xuICAgICAgICBpZiAocy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBrKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke099XWApO1xuICAgICAgICAgIGNvbnN0IFMgPSBhd2FpdCB6KGksIHtcbiAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBPXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgayhcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBTKTtcbiAgICAgICAgICBjb25zdCBxID0gSmUoUyk7XG4gICAgICAgICAgcmV0dXJuIGsoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtxLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogcSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGsoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7SSA/IFwibGVnYWN5XCIgOiBcIm5ld1wifV1gKTtcbiAgICAgICAgICBjb25zdCBTID0gYXdhaXQgcnIoaSwge1xuICAgICAgICAgICAgLi4ucCxcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBPLFxuICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogSVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBrKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBTIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IGFyKFwi4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFXCIpLCBhcihoKSwgaDtcbiAgICB9XG4gIH1cbiksIEhzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBQby5wYXJzZSh0KTtcbn0sIEpzID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdLCBEbiA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLmZpbmQoKHIpID0+IEpzLmluY2x1ZGVzKHIudHlwZSkpO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBFby5wYXJzZSh0KTtcbn0sIE9uID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IERuKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgaWYgKHIucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgayhcIuKUnCAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpLCBnKFwiM2RzX2NvbXBsZXRlXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBrKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7ci5yZWRpcmVjdF91cmx9XWApLCBnKFwiM2RzX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5yXG4gIH0pO1xuICBjb25zdCB7IHN0YXR1czogbiB9ID0gYXdhaXQgcHQoeyB1cmw6IHIucmVkaXJlY3RfdXJsLCBiYXNlVXJsOiB0IH0pO1xuICBpZiAoayhg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7bn1dYCksIG4gPT09IEQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IGcoXCIzZHNfY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBnKFwiM2RzX2ZhaWx1cmVcIiksIG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBnKFwiY29tbW9uXzNkc19jb21wbGV0ZWRcIik7XG59LCBXcyA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogeiQxLnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogeiQxLnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgeyBsb2dfXzogViwgZXJyX186IExuIH0gPSBBKFwibG9vcC1jcnlwdG9cIiksIEtzID0geiQxLm9iamVjdCh7XG4gIGxvb3BGaXJzdE5hbWU6IE4sXG4gIGxvb3BMYXN0TmFtZTogTixcbiAgbG9vcEVtYWlsOiBOLFxuICBbbS5QUk9NT1RJT05fQ09ERV06IFBcbn0pLCBacyA9IHokMS5vYmplY3Qoe1xuICBsb29wRmlyc3ROYW1lOiBQLFxuICBsb29wTGFzdE5hbWU6IFAsXG4gIGxvb3BFbWFpbDogUCxcbiAgW20uUFJPTU9USU9OX0NPREVdOiBQXG59KSwgaXIgPSAoZSwgdCwgciwgbikgPT4ge1xuICBjb25zdCBvID0gci5zYWZlUGFyc2UoZSk7XG4gIGlmICghby5zdWNjZXNzKSB7XG4gICAgY29uc3QgaSA9IG8uZXJyb3IuZm9ybWF0KCksIHMgPSBTcihpKTtcbiAgICBmb3IgKGNvbnN0IFtjLCBsXSBvZiBPYmplY3QuZW50cmllcyhzKSlcbiAgICAgIHQoYywgbCwgYyk7XG4gICAgdGhyb3cgTG4oXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBzKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIG8uZGF0YTtcbn0sIFFzID0gaGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUgfSkgPT4ge1xuICAgIFYoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uXCIpO1xuICAgIGNvbnN0IHQgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgV3MpO1xuICAgIFYoYGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSwgVihcIlN0YXJ0aW5nIExvb3AgQ3J5cHRvIGZsb3cuLi5cIik7XG4gICAgY29uc3QgciA9IGF3YWl0IEYoZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IHIubW9kZSA9PT0gXCJzZXR1cFwiLCBvID0gYXdhaXQgVnQoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgIH0pLCBpID0gYXdhaXQgZ2UoXG4gICAgICBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICByLnRva2VuLFxuICAgICAgbixcbiAgICAgIHZvaWQgMFxuICAgICk7XG4gICAgaWYgKCFuICYmICF0Lm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKHIuY3VycmVuY3kpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3IuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7dC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIGlmICghbyB8fCAhby5uZXh0X2FjdGlvbl9tZXRhZGF0YSlcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIGNvbnN0IHMgPSBvLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBjO1xuICAgIG4gPyBjID0gMCA6IGMgPSAoaSA/IGkuYW1vdW50QXRvbSA6IHIuYW1vdW50X3RvdGFsX2F0b20pICogcy50b2tlbl9wcmljZTtcbiAgICBjb25zdCBsID0gYywgdSA9IHMuYXV0aG9yaXphdGlvbl9hbW91bnQsIGQgPSB2NCgpLCBfID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudDogbCxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IHUsXG4gICAgICBjdXN0b21lclJlZklkOiBkXG4gICAgfSwgcCA9IHtcbiAgICAgIGFwaUtleTogdC5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogdC5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiB0Lm1ldGFkYXRhLm1lcmNoYW50X2lkLFxuICAgICAgZW52aXJvbm1lbnQ6IHQubWV0YWRhdGEuZW52aXJvbm1lbnRcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICB3aWRnZXRQcm9wczogXyxcbiAgICAgIGluaXRMb29wQ29ubmVjdFByb3BzOiBwXG4gICAgfTtcbiAgfVxuKSwgWHMgPSBvZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICBWKFwiUnVubmluZyBMb29wIGZsb3cuLi5cIiksIFYoXCJjb250ZXh0XCIsIGUpLCBWKFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIHQpLCBWKFwibm9uQ2RlRm9ybUlucHV0c1wiLCByKSwgVihcImZsb3dDYWxsYmFja3NcIiwgbiksIFYoXCJjdXN0b21QYXJhbXNcIiwgbyk7XG4gICAgbGV0IGk7XG4gICAgbyAhPSBudWxsICYmIG8uc3VjY2VzcyA/IGkgPSBpcihcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIEtzXG4gICAgKSA6IGkgPSBpcihcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIFpzXG4gICAgKTtcbiAgICBjb25zdCBzID0gZS5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgRihlLmFueUNkZUNvbm5lY3Rpb24pLCBsID0gYy5tb2RlICE9PSBcInNldHVwXCIsIHUgPSBhd2FpdCBSZShlLmFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogaS5sb29wRW1haWwsXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogaS5sb29wRmlyc3ROYW1lLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogaS5sb29wTGFzdE5hbWUsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IGwsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGwgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IGMubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBjLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHdlKClcbiAgICB9KTtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZC4gRmFpbGVkIHRvIHByb3Blcmx5IHN1Ym1pdCBmb3JtIGRhdGEuXCIpO1xuICAgIGNvbnN0IGQgPSBhd2FpdCB6KHMsIHtcbiAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgIC8vIFRPRE86IFdlIGRvbid0IGhhdmUgYSBwYXlpbiBvbiBzZXR1cFxuICAgICAgdGhlaXJfcG1faWQ6IG8uc3VjY2VzcyAmJiBvLm1vZGUgPT0gXCJjaGVja291dFwiID8gby5wYXlpbi5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCA6IHZvaWQgMCxcbiAgICAgIC8vIE5PVEU6IHdlIGRvIGhhdmUgdGhlIGNoZWNrb3V0IGF0dGVtcHQgaWQgaGVyZSBldmVuIGlmIGl0cyBhIHNldHVwLCBidXQgZm9yIG5vdyB3ZSBkb24ndCBpbmNsdWRlIGl0XG4gICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgY2hlY2tvdXQgYXR0ZW1wdCBzdXBwb3J0IGZvciBzZXR1cCBpbnRlbnRzLlxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbCA/IHUuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBsb29wX2N1c3RvbWVyOiBvLnN1Y2Nlc3MgPyBvLmN1c3RvbWVyIDogdm9pZCAwLFxuICAgICAgICBsb29wX3BheWluOiBvLnN1Y2Nlc3MgJiYgby5tb2RlID09IFwiY2hlY2tvdXRcIiA/IG8ucGF5aW4gOiB2b2lkIDAsXG4gICAgICAgIGxvb3BfZmFpbHVyZV9kZXRhaWxzOiBvLnN1Y2Nlc3MgPyB2b2lkIDAgOiBvLmZhaWx1cmVEZXRhaWxzLFxuICAgICAgICBsb29wX2RlYnVnX2luZm86IG8uc3VjY2VzcyA/IHZvaWQgMCA6IG8uZGVidWdJbmZvLFxuICAgICAgICBsb29wX3N1Y2Nlc3M6IG8uc3VjY2Vzc1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChWKGBDb25maXJtIHJlc3VsdDogJHtkfWApLCBjLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgVihcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIiksIFYoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgZCk7XG4gICAgICBjb25zdCBfID0gSmUoZCk7XG4gICAgICByZXR1cm4gVihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke18ucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBfIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChWKFwiRG9pbmcgY2hlY2tvdXQuLi5cIiksICFkLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBMbihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIGQpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBkLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKSwgeyBsb2dfXzogUSwgZXJyX186IHNyIH0gPSBBKFwicG9ja3l0LXBheXBhbFwiKSwgZWMgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHRjID0gb2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdmFyIFMsIHE7XG4gICAgUShcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBGKGkpO1xuICAgIFEoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBlYy5wYXJzZSh0KTtcbiAgICBRKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCBsID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5zZXR0aW5ncywgdSA9IGFlKFxuICAgICAgcixcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbCA9PSBudWxsID8gdm9pZCAwIDogbC5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBkID0gbG4odSk7XG4gICAgUShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cy5tb2RlfWApO1xuICAgIGNvbnN0IF8gPSB2NCgpLCBwID0gcy5tb2RlICE9PSBcInNldHVwXCIsIGYgPSB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGMsXG4gICAgICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHAsXG4gICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHAgPyB7XG4gICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgIGxpbmVfaXRlbXM6IHMubGluZV9pdGVtcyxcbiAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICB9IDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogISEoKFMgPSBvID09IG51bGwgPyB2b2lkIDAgOiBvLnNldHRpbmdzKSAhPSBudWxsICYmIFMudXNlUmVkaXJlY3RGbG93KSxcbiAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IF9cbiAgICAgIH0sXG4gICAgICAuLi5kXG4gICAgfSwgeSA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgaCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoZikpLCB2ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBzdDogcy50b2tlbixcbiAgICAgIHI6IGhcbiAgICB9KSwgYiA9IGAke3l9PyR7di50b1N0cmluZygpfWA7XG4gICAgaWYgKChxID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5zZXR0aW5ncykgIT0gbnVsbCAmJiBxLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IFEoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYiwgYXdhaXQgbHQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBRKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBRKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IEMgPSBhd2FpdCBwbihcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBpLFxuICAgICAgXyxcbiAgICAgIGJcbiAgICApO1xuICAgIFEoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgQyk7XG4gICAgY29uc3QgRSA9IE5uKEMuaHJlZiksIEkgPSBUdChDLmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIUkpXG4gICAgICB0aHJvdyBzcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgQy5ocmVmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIFEoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7RX1gKTtcbiAgICBjb25zdCBPID0gYXdhaXQgeihpLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogRSxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IHAgPyBJIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKFEoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgTyksIHMubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogTy5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoIU8ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBzcihcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIE8pLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBPLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxuKSwgY3IgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogTCwgZXJyX186IHJjIH0gPSBBKFwic3RyaXBlLWxpbmtcIiksIG5jID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIG9jID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIGFjID0gaGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSBlLmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBMKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIG5jKTtcbiAgICBMKFwiU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBvID0gZS5hbnlDZGVDb25uZWN0aW9uLCBpID0gYXdhaXQgRihvKSwgcyA9IGkubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIEwoXCJDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGdlKG8sIGkudG9rZW4sIHMsIHZvaWQgMCksIHsgZWxlbWVudHM6IGwsIHN0cmlwZTogdSB9ID0gYXdhaXQgSW8obi5tZXRhZGF0YS5zdHJpcGVfcGssIHtcbiAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgIGN1cnJlbmN5OiBjLmN1cnJlbmN5LFxuICAgICAgc2V0dXBfZnV0dXJlX3VzYWdlOiBcIm9mZl9zZXNzaW9uXCIsXG4gICAgICBwYXltZW50TWV0aG9kQ3JlYXRpb246IFwibWFudWFsXCJcbiAgICB9KTtcbiAgICBMKFwiQ3JlYXRpbmcgZXhwcmVzcyBjaGVja291dC4uLlwiKTtcbiAgICBjb25zdCBkID0gbC5jcmVhdGUoXCJleHByZXNzQ2hlY2tvdXRcIiwge1xuICAgICAgYnV0dG9uSGVpZ2h0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJ1dHRvbkhlaWdodCxcbiAgICAgIHBheW1lbnRNZXRob2RzOiB7XG4gICAgICAgIGFtYXpvblBheTogXCJuZXZlclwiLFxuICAgICAgICBhcHBsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBnb29nbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgcGF5cGFsOiBcIm5ldmVyXCJcbiAgICAgIH1cbiAgICB9KSwgXyA9ICgpID0+IHtcbiAgICAgIGQubW91bnQoYCMke2NyfWApO1xuICAgIH0sIHAgPSAoKSA9PiB7XG4gICAgICBkLnVubW91bnQoKTtcbiAgICB9O1xuICAgIHJldHVybiByICE9IG51bGwgJiYgci5kb05vdE1vdW50T25Jbml0ID8gTChcIk5PVCBtb3VudGluZyBzdHJpcGUgbGluayBidXR0b24gKGRvTm90TW91bnRPbkluaXQgaXMgdHJ1ZSlcIikgOiAoTChcIk1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbi4uLlwiKSwgXygpKSwgZC5vbihcImNsaWNrXCIsIGFzeW5jIChmKSA9PiB7XG4gICAgICBpZiAoTChcIlN0cmlwZSBMaW5rIGJ1dHRvbiBjbGlja2VkXCIpLCByICE9IG51bGwgJiYgci5vdmVycmlkZUxpbmtTdWJtaXQgJiYgIWF3YWl0IHIub3ZlcnJpZGVMaW5rU3VibWl0KCkpIHtcbiAgICAgICAgTChcIlN0cmlwZSBMaW5rIHN1Ym1pdCBhYm9ydGVkIGJ5IG92ZXJyaWRlTGlua1N1Ym1pdFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZi5yZXNvbHZlKCk7XG4gICAgfSksIGQub24oXCJjb25maXJtXCIsIGFzeW5jIChmKSA9PiB7XG4gICAgICBMKFwiU3RyaXBlIExpbmsgd2luZG93IGNvbmZpcm1lZFwiLCBmKTtcbiAgICAgIGNvbnN0IHkgPSBhd2FpdCB1LmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50czogbCxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBmLmJpbGxpbmdEZXRhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgeS5lcnJvciA/IChyYyhcImVycm9yXCIsIHkuZXJyb3IpLCB0LmdldC5vbkNoZWNrb3V0RXJyb3IoeS5lcnJvci5tZXNzYWdlID8/IFwiU3RyaXBlIExpbmsgdW5rbm93biBlcnJvclwiKSkgOiAoTChcInBheW1lbnRNZXRob2RcIiwgeS5wYXltZW50TWV0aG9kKSwgVC5zdHJpcGVMaW5rLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogQihlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHkucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IF8sXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiBwLFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgY2MoY3IpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgaWMgPSBvZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICBMKFwiUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSBlLmFueUNkZUNvbm5lY3Rpb247XG4gICAgTChcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgcyA9IHNjKHIsIG8uc3RyaXBlUE0pLCBjID0gYWUocywgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgLi4uY1xuICAgIH0pLCBMKFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBSZShpLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogby5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogY1ttLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBjW20uRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBjW20uTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiBjW20uWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiBjW20uQ09VTlRSWV1cbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogd2UoKVxuICAgIH0pO1xuICAgIEwoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgY29uc3QgZCA9IG9jLnBhcnNlKGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXS5vdXJfZXhpc3RpbmdfcG1faWQsIF8gPSBhd2FpdCBGKGkpO1xuICAgIGlmIChfLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgTChcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBwID0gYXdhaXQgeihpLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGRcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IEplKHApIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEwoXCJEb2luZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IHAgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogXy50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IHQucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGNbbS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBjW20uWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBjW20uQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBjW20uUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBfLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBfLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgJHQoaSwgcCkgfTtcbiAgICB9XG4gIH1cbiksIHNjID0gKGUsIHQpID0+IHtcbiAgdmFyIGwsIHUsIGQsIF8sIHA7XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLm9dID0gKCh1ID0gKGwgPSB0LmJpbGxpbmdfZGV0YWlscy5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBpID0gby5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJbbS5FTUFJTF0gPSByW20uRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICgoZCA9IHQubGluaykgPT0gbnVsbCA/IHZvaWQgMCA6IGQuZW1haWwpIHx8IHQuYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgclttLlpJUF9DT0RFXSA9IHJbbS5aSVBfQ09ERV0gfHwgKChfID0gdC5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IF8ucG9zdGFsX2NvZGUpIHx8IFwiMDAwMDBcIiwgclttLkNPVU5UUlldID0gclttLkNPVU5UUlldIHx8ICgocCA9IHQuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBwLmNvdW50cnkpIHx8IFwiVVNcIjtcbiAgY29uc3QgcyA9IHJbbS5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiXCIsIGMgPSByW20uTEFTVF9OQU1FXSB8fCBpIHx8IFwiXCI7XG4gIHJldHVybiBzIHx8IGMgPyAoclttLkZJUlNUX05BTUVdID0gcywgclttLkxBU1RfTkFNRV0gPSBjKSA6IChyW20uRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbbS5MQVNUX05BTUVdID0gXCJcIiksIEwoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgciksIHI7XG59LCBjYyA9IChlKSA9PiBuZXcgUHJvbWlzZSgodCkgPT4ge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNvbnN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICBuID8gdChuKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShyKTtcbiAgfTtcbiAgcigpO1xufSksIHsgbG9nX186IHgsIGVycl9fOiBsYyB9ID0gQShcInN0cmlwZS1wclwiKSwgdWMgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIGRjID0gaGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIHgoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCByID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHVjKTtcbiAgICB4KFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IG4gPSBlLmFueUNkZUNvbm5lY3Rpb24sIG8gPSBhd2FpdCBGKG4pLCBpID0gby5tb2RlID09PSBcInNldHVwXCI7XG4gICAgeChcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgZ2Uobiwgby50b2tlbiwgaSwgdm9pZCAwKSwgYyA9IGF3YWl0IFRvKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgeChcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBsYyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgeChcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKGQsIF8pID0+IFQuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IGUsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBCKGUuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBfID09IG51bGwgPyB2b2lkIDAgOiBfLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBLLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogSy5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgcGMgPSBvZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvLFxuICAgIGluaXRSZXN1bHQ6IGlcbiAgfSkgPT4ge1xuICAgIGlmICh4KFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgby5wcm92aWRlciAhPT0gdC5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7by5wcm92aWRlcn0sIGdvdCAke3QucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGkucHI7XG4gICAgaWYgKG8gIT0gbnVsbCAmJiBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHkgPSBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICB4KFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCB5KTtcbiAgICAgIGNvbnN0IGggPSB0eXBlb2YgeS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHkuYXBwbGVQYXlQYXltZW50UmVxdWVzdCh7fSkgOiB5LmFwcGxlUGF5UGF5bWVudFJlcXVlc3Q7XG4gICAgICBmYyhjLCB5LmFtb3VudCwgeS5wZW5kaW5nLCBoLCB5LmxhYmVsKTtcbiAgICB9XG4gICAgeChcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgUm8oYyk7XG4gICAgeChcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIHgoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBtYyhyLCBsKSwgZCA9IGFlKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmRcbiAgICB9KSwgeChcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIsIGQpO1xuICAgIGNvbnN0IF8gPSBhd2FpdCBKaShzLCB7XG4gICAgICBmaWVsZHM6IGQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHRcbiAgICB9KSwgcCA9IF9jKF8pO1xuICAgIHgoXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBObyhwLCBsKTtcbiAgICBjb25zdCBmID0gYXdhaXQgRihzKTtcbiAgICBpZiAoZi5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIHgoXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgeihzLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZi50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogSmUoeSkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgeChcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCB5ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IGRbbS5GSVJTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfbGFzdF9uYW1lOiBkW20uTEFTVF9OQU1FXSxcbiAgICAgICAgY3VzdG9tZXJfZW1haWw6IGRbbS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBkW20uWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBkW20uQ09VTlRSWV0sXG4gICAgICAgIHByb21vdGlvbl9jb2RlOiBkW20uUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBmLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBmLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHRcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgJHQocywgeSkgfTtcbiAgICB9XG4gIH1cbiksIG1jID0gKGUsIHQpID0+IHtcbiAgdmFyIGQsIF8sIHAsIGY7XG4gIGNvbnN0IHIgPSB7IC4uLmUgfSwgW24sIC4uLm9dID0gKChfID0gKGQgPSB0LnBheWVyTmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogXy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgaSA9IG8uam9pbihcIiBcIikgfHwgdm9pZCAwLCBzID0gKGYgPSAocCA9IHQucGF5bWVudE1ldGhvZCkgPT0gbnVsbCA/IHZvaWQgMCA6IHAuYmlsbGluZ19kZXRhaWxzKSA9PSBudWxsID8gdm9pZCAwIDogZi5hZGRyZXNzLCBjID0gdC5zaGlwcGluZ0FkZHJlc3M7XG4gIHJbbS5FTUFJTF0gPSByW20uRU1BSUxdIHx8IHQucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbbS5aSVBfQ09ERV0gPSByW20uWklQX0NPREVdIHx8IChzID09IG51bGwgPyB2b2lkIDAgOiBzLnBvc3RhbF9jb2RlKSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIHJbbS5DT1VOVFJZXSA9IHJbbS5DT1VOVFJZXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jb3VudHJ5KSB8fCAoYyA9PSBudWxsID8gdm9pZCAwIDogYy5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IGwgPSByW20uRklSU1RfTkFNRV0gfHwgbiB8fCBcIlwiLCB1ID0gclttLkxBU1RfTkFNRV0gfHwgaSB8fCBcIlwiO1xuICByZXR1cm4gbCB8fCB1ID8gKHJbbS5GSVJTVF9OQU1FXSA9IGwsIHJbbS5MQVNUX05BTUVdID0gdSkgOiAoclttLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW20uTEFTVF9OQU1FXSA9IFwiXCIpLCB4KFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHIpLCByO1xufSwgZmMgPSAoZSwgdCwgciwgbiwgbykgPT4ge1xuICBlLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogdC5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IG8gPz8gXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogclxuICAgIH0sXG4gICAgY3VycmVuY3k6IHQuY3VycmVuY3ksXG4gICAgLy8gU3RyaXBlJ3MgYXBwbGVQYXkgb3B0aW9uIG9ubHkgc3VwcG9ydHMgJ3JlY3VycmluZ1BheW1lbnRSZXF1ZXN0JyB8ICdkZWZlcnJlZFBheW1lbnRSZXF1ZXN0JyB8ICdhdXRvbWF0aWNSZWxvYWRQYXltZW50UmVxdWVzdCcgb2YgbmF0aXZlIEFwcGxlUGF5IHBheW1lbnQgcmVxdWVzdFxuICAgIC8vIFdlJ3JlIGFjY2VwdGluZyBuYXRpdmUgUGF5bWVudCBSZXF1ZXN0IGhlcmUgZm9yIG1vcmUgY29tbW9uIHR5cGluZy5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gc3RyaXBlIGRvIG5vdCBleHBlY3QgYWRkaXRpb25hbCBmaWVsZHNcbiAgICBhcHBsZVBheTogblxuICB9KTtcbn0sIF9jID0gKGUpID0+IHtcbiAgaWYgKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VycmVkLlxuRGV0YWlsczogZ290ICR7ZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RofSByZXF1aXJlZCB1c2VyIGFjdGlvbnNgKTtcbiAgcmV0dXJuIGtvLnBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbn0sIHljID0gKCkgPT4ge1xuICBjb25zdCBlID0gdjQoKS5zcGxpdChcIi1cIilbMF07XG4gIHJldHVybiB7XG4gICAgZmlyc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgbGFzdE5hbWU6IGB4eF8ke2V9YCxcbiAgICBlbWFpbDogYHh4XyR7ZX1AZW1haWwuY29tYCxcbiAgICB6aXBDb2RlOiBgeHhfJHtlfWAsXG4gICAgY291bnRyeTogXCJVU1wiXG4gIH07XG59LCB7IGxvZ19fOiBwZSwgZXJyX186IGhjIH0gPSBBKFwicGF5cGFsXCIpLCBqbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHsgY2xpZW50X2lkOiB6JDEuc3RyaW5nKCkgfSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSksIGdjID0gYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gIGNvbnN0IHIgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgam4pO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUGF5UGFsIENQTSBub3QgZm91bmQgaW4gYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kc1wiKTtcbiAgcmV0dXJuIHtcbiAgICBpc0xvYWRpbmc6ICExLFxuICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICBzdGFydEZsb3c6ICgpID0+IFQucGF5cGFsLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogQihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczoge30gfVxuICAgIH0pXG4gIH07XG59LCB3YyA9IG9lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwZShcIlJ1bm5pbmcgUGF5UGFsIGZsb3cuLi5cIik7XG4gICAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgRihpKSwgeyBpc0Fub255bW91czogYywgdXNlUmVkaXJlY3RGbG93OiBsIH0gPSBvLnNldHRpbmdzID8/IHt9O1xuICAgICAgcGUoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgICAgY29uc3QgdSA9IGpuLnBhcnNlKHIpO1xuICAgICAgcGUoXCLilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICAgICAgY29uc3QgZCA9IGFlKFxuICAgICAgICB0LFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgYyA/IHljKCkgOiB2b2lkIDBcbiAgICAgICksIF8gPSBsbihkKTtcbiAgICAgIHBlKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi4gTW9kZTogJHtzLm1vZGV9YCk7XG4gICAgICBjb25zdCBwID0gdjQoKSwgZiA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCB5ID0ge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB1LnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdSxcbiAgICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBmLFxuICAgICAgICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IGYgPyB7XG4gICAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHVzZV9wYXlwYWxfcmVkaXJlY3RfZmxvdzogbCxcbiAgICAgICAgICBmcm9udGVuZF90b2tlbl9mb3JfcmVkaXJlY3RfZmxvdzogcFxuICAgICAgICB9LFxuICAgICAgICAuLi5fXG4gICAgICB9LCBoID0gbmV3IFVSTChcIi9hcHAvcHJlLWFjdGlvbi9zdGFydC9cIiwgZS5iYXNlVXJsKS50b1N0cmluZygpLCB2ID0gYnRvYShKU09OLnN0cmluZ2lmeSh5KSksIGIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICAgIHI6IHZcbiAgICAgIH0pLCBDID0gYCR7aH0/JHtiLnRvU3RyaW5nKCl9YDtcbiAgICAgIGlmIChsKVxuICAgICAgICB0aHJvdyBwZShcIlN0YXJ0aW5nIHJlZGlyZWN0IG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBDLCBhd2FpdCBsdCgyMCAqIDFlMyksIG5ldyBFcnJvcihcIlBheXBhbCBmbG93IHRpbWVkIG91dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgICAgY29uc3QgRSA9IGF3YWl0IHBuKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBpLFxuICAgICAgICBwLFxuICAgICAgICBDXG4gICAgICApO1xuICAgICAgcGUoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgRSk7XG4gICAgICBjb25zdCBJID0gVHQoRS5ocmVmLCBcImNhdHRcIiksIE8gPSBUdChFLmhyZWYsIFwiYXBwcm92YWxfc2Vzc2lvbl9pZFwiKSwgUyA9IGF3YWl0IHooaSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGYgPyBJIDogdm9pZCAwLFxuICAgICAgICB0aGVpcl9wbV9pZDogZiA/IE8gOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBlKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIFMpLCBXZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJwYXlwYWxcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogaSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB1LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGQsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IFMsXG4gICAgICAgIHVzZVBheUZpcnN0RmxvdzogZlxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoaSkge1xuICAgICAgdGhyb3cgaGMoXCJQYXlQYWwgcGF5bWVudCBlcnJvclwiLCBpKSwgZyhcImNoZWNrb3V0X2Vycm9yXCIsIHsgcGF5bWVudF9tZXRob2Q6IFwicGF5cGFsXCIsIGVycm9yOiBpIH0pLCBuZXcgRXJyb3IoKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgRWUgPSAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gZS5maWx0ZXIoKG8pID0+IHtcbiAgICBjb25zdCBpID0gciA9PT0gdm9pZCAwID8gITAgOiBvLnByb2Nlc3Nvcl9uYW1lID09PSByLCBzID0gby5wcm92aWRlciA9PT0gdDtcbiAgICByZXR1cm4gaSAmJiBzO1xuICB9KTtcbiAgaWYgKG4ubGVuZ3RoID09PSAwKVxuICAgIHRocm93IGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7dH0nIGFuZCBwcm9jZXNzb3IgJyR7cn0nYCk7XG4gIHJldHVybiBuLmxlbmd0aCAhPT0gMSAmJiAoY29uc29sZS53YXJuKFwiQ1BNcyBsaXN0XCIsIGUpLCBjb25zb2xlLndhcm4oYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7dH0nIGFuZCBwcm9jZXNzb3IgJyR7cn0nYCksIGcoXCJtb3JlX3RoYW5fb25lX2NwbV9mb3VuZFwiLCB7XG4gICAgcHJvdmlkZXI6IHQsXG4gICAgcHJvY2Vzc29yOiByLFxuICAgIGNwbXM6IGVcbiAgfSkpLCBuWzBdO1xufSwgVCA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBZc1xuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBkYyxcbiAgICBydW46IHBjXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBhYyxcbiAgICBydW46IGljXG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBydW46IHRjXG4gIH0sXG4gIC8vIFBheVBhbFxuICBwYXlwYWw6IHtcbiAgICBpbml0OiBnYyxcbiAgICBydW46IHdjXG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBocyxcbiAgICBydW46IGdzXG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogZnMsXG4gICAgcnVuOiBfc1xuICB9LFxuICAvLyBMb29wXG4gIGxvb3BDcnlwdG86IHtcbiAgICBpbml0OiBRcyxcbiAgICBydW46IFhzXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB7XG4gICAgaW5pdDogYnMsXG4gICAgcnVuOiBFc1xuICB9LFxuICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHtcbiAgICBpbml0OiBDcyxcbiAgICBydW46IFNzXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59LCB7IGxvZ19fOiB2YywgZXJyX186IGJjIH0gPSBBKFwiaW5pdC1mbG93c1wiKSwgY2UgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gbmV3IFVlKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiByLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoci5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IG8gPSBhd2FpdCB0KG4pO1xuICAgICAgICB2Yyhg4pyUICR7ZX0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBvKSwgci5zZXQobyk7XG4gICAgICB9IGNhdGNoIChvKSB7XG4gICAgICAgIGJjKGDwnZmtICR7ZX0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIFkobyksIFwiRGV0YWlsczpcIiwgbyksIHIudGhyb3cobywgWShvKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgRWMgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKGUpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSkpO1xufSwgQ2MgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogY2UoXCJTdHJpcGUgUFJcIiwgVC5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogY2UoXCJTdHJpcGUgTGlua1wiLCBULnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiBjZShcIkFpcndhbGxleCBHb29nbGVQYXlcIiwgVC5haXJ3YWxsZXhHb29nbGVQYXkuaW5pdCksXG4gIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICBhaXJ3YWxsZXhBcHBsZVBheTogY2UoXCJBaXJ3YWxsZXggQXBwbGVQYXlcIiwgVC5haXJ3YWxsZXhBcHBsZVBheS5pbml0KSxcbiAgLy8gTG9vcFxuICBsb29wOiBjZShcIkxvb3BcIiwgVC5sb29wQ3J5cHRvLmluaXQpLFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiBjZShcIlBheVBhbFwiLCBULnBheXBhbC5pbml0KSxcbiAgLy8gQXV0aG5ldCBHb29nbGVQYXlcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiBjZShcIkF1dGhuZXQgR29vZ2xlUGF5XCIsIFQuYXV0aG9yaXplTmV0R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBdXRobmV0IEFwcGxlUGF5XG4gIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiBjZShcIkF1dGhuZXQgQXBwbGVQYXlcIiwgVC5hdXRob3JpemVOZXRBcHBsZVBheS5pbml0KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSksIHsgZXJyX186IFNjIH0gPSBBKFwiZm9ybS1jYWxsYmFja3NcIiksIEogPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpLCBsciA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBKLFxuICBvbkJsdXI6IEosXG4gIG9uQ2hhbmdlOiBKLFxuICBvbkxvYWQ6IEosXG4gIG9uTG9hZEVycm9yOiBKLFxuICBvblZhbGlkYXRpb25FcnJvcjogSixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IEosXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBKLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IEosXG4gIG9uQ2hlY2tvdXRFcnJvcjogSixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IEpcbn0pLCByZSA9IGNsYXNzIHJlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAodCkgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gcmUuY3JlYXRlRW1wdHlDYWxsYmFja3MoKSwgT2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IG8gPSBXbihyLCBuID8/IHJlLk5PT1AsIFNjKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW3JdID0gbztcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IHJlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG5yZS5OT09QID0gKCkgPT4ge1xufSwgcmUuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHQgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGxyLmtleW9mKCkuZW51bSkuZm9yRWFjaCgocikgPT4ge1xuICAgIHRbcl0gPSByZS5OT09QO1xuICB9KSwgdDtcbn0sIHJlLmZyb21PYmplY3QgPSAodCkgPT4ge1xuICBjb25zdCByID0gbmV3IHJlKCk7XG4gIHJldHVybiByLnNldENhbGxiYWNrcyhsci5wYXJzZSh0KSksIHI7XG59O1xubGV0IE50ID0gcmU7XG5jb25zdCB7IGxvZ19fOiBDdCwgZXJyX186IFBjIH0gPSBBKFwidHJhY2VyXCIpLCBrYyA9IChlLCB0KSA9PiB7XG4gIHRyeSB7XG4gICAgQWMoZSwgdCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBQYyhgRXJyb3IgaW5pdGlhbGl6aW5nIHRyYWNlcjogJHtyfWApO1xuICB9XG59O1xubGV0IHVyO1xuY29uc3QgQWMgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA+IFwidVwiKVxuICAgIHJldHVybjtcbiAgY29uc3QgciA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1obHcyQ0xEZy0hfnswMDN9fi5qcycpLCB7IENvbnNvbGVTcGFuRXhwb3J0ZXI6IG4sIFNpbXBsZVNwYW5Qcm9jZXNzb3I6IG8sIFdlYlRyYWNlclByb3ZpZGVyOiBpIH0gPSByLCBzID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LVNEdE12U3Q5LSF+ezAwNn1+LmpzJyksIHsgRmV0Y2hJbnN0cnVtZW50YXRpb246IGMgfSA9IHMsIGwgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQnVmWUlHMHEtIX57MDBifX4uanMnKSwgeyBab25lQ29udGV4dE1hbmFnZXI6IHUgfSA9IGwsIGQgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQzFRVEhfZkYtIX57MDBjfX4uanMnKSwgeyByZWdpc3Rlckluc3RydW1lbnRhdGlvbnM6IF8gfSA9IGQsIHAgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtcnNKVlJYRnktIX57MDBlfX4uanMnKSwgeyBSZXNvdXJjZTogZiB9ID0gcCwgeSA9IGF3YWl0IGltcG9ydCgnLi9kZXRlY3QtcmVzb3VyY2VzLUJWai1OdjlqLSF+ezAwaH1+LmpzJykudGhlbigoTmUpID0+IE5lLmQpLCB7IGRldGVjdFJlc291cmNlc1N5bmM6IGggfSA9IHksIHYgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtNzNaY2k4UU0tIX57MDBrfX4uanMnKSwgeyBPVExQVHJhY2VFeHBvcnRlcjogYiB9ID0gdiwgQyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1CenN5LVFIei0hfnswMG19fi5qcycpLCB7IEIzUHJvcGFnYXRvcjogRSwgQjNJbmplY3RFbmNvZGluZzogSSB9ID0gQywgTyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1DNlZzR2FfWC0hfnswMDF9fi5qcycpLCB7IEJhdGNoU3BhblByb2Nlc3NvcjogUyB9ID0gTztcbiAgQ3QoYEluaXRpYWxpemluZyB0cmFjZXIgd2l0aCB2ZXJzaW9uICR7ZX0gYW5kIGJhc2VVcmwgJHt0fWApO1xuICBjb25zdCBxID0gSWModCk7XG4gIEN0KGBVc2luZyBjb2xsZWN0b3IgVVJMICR7cX1gKTtcbiAgY29uc3QgX3QgPSBuZXcgYih7IHVybDogcSB9KSwgdmUgPSB7XG4gICAgXCJzZXJ2aWNlLnZlcnNpb25cIjogZSxcbiAgICBcInNlcnZpY2UubmFtZVwiOiBcIm9qc1wiXG4gIH07XG4gIHJldHVybiBuZXcgaSh7XG4gICAgcmVzb3VyY2U6IG5ldyBmKHZlKS5tZXJnZShoKCkpLFxuICAgIHNwYW5Qcm9jZXNzb3JzOiBbXG4gICAgICBuZXcgbyhuZXcgbigpKSxcbiAgICAgIG5ldyBTKF90LCB7XG4gICAgICAgIHNjaGVkdWxlZERlbGF5TWlsbGlzOiA1MDBcbiAgICAgIH0pXG4gICAgXVxuICB9KS5yZWdpc3Rlcih7XG4gICAgY29udGV4dE1hbmFnZXI6IG5ldyB1KCksXG4gICAgcHJvcGFnYXRvcjogbmV3IEUoeyBpbmplY3RFbmNvZGluZzogSS5NVUxUSV9IRUFERVIgfSlcbiAgfSksIF8oe1xuICAgIGluc3RydW1lbnRhdGlvbnM6IFtcbiAgICAgIG5ldyBjKHtcbiAgICAgICAgcHJvcGFnYXRlVHJhY2VIZWFkZXJDb3JzVXJsczogWy8uKi9dLFxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gYWxsIFVSTHNcbiAgICAgICAgLy8gRXhjbHVkZSBBZHllbiBVUkxzIC0gdGhleSBkbyBub3QgYWxsb3cgT1BUSU9OUyByZXF1ZXN0c1xuICAgICAgICAvLyBBbHNvIGV4Y2x1ZGUgbG9vcGNyeXB0by54eXpcbiAgICAgICAgaWdub3JlVXJsczogWy9eaHR0cHM6XFwvXFwvKC4qXFwuKT9hZHllblxcLmNvbS8sIC9eaHR0cHM6XFwvXFwvKC4qXFwuKT9sb29wY3J5cHRvXFwueHl6L11cbiAgICAgIH0pXG4gICAgXVxuICB9KSwgdXIgPSBQZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBDdChcIlRyYWNlciBpbml0aWFsaXplZFwiKSwgdXI7XG59LCBJYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBuZXcgVVJMKGUpLmhvc3RuYW1lO1xuICByZXR1cm4gdCA9PT0gXCJjZGUub3BlbnBheXN0YWdpbmcuY29tXCIgPyBcImh0dHBzOi8vb3RlbC5vcGVucGF5c2FuZGJveC5jb20vdjEvdHJhY2VzXCIgOiB0ID09PSBcImNkZS5nZXRvcGVucGF5LmNvbVwiID8gXCJodHRwczovL290ZWwuZ2V0b3BlbnBheS5jb20vdjEvdHJhY2VzXCIgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6NDMxOS92MS90cmFjZXNcIjtcbn0sIFVuID0gXCIwMTIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RWV1hZWlwiLCB4ZSA9IDMyLCBUYyA9IDE2LCB4biA9IDEwLCBkciA9IDI4MTQ3NDk3NjcxMDY1NTtcbnZhciB5ZTtcbihmdW5jdGlvbihlKSB7XG4gIGUuQmFzZTMySW5jb3JyZWN0RW5jb2RpbmcgPSBcIkIzMl9FTkNfSU5WQUxJRFwiLCBlLkRlY29kZVRpbWVJbnZhbGlkQ2hhcmFjdGVyID0gXCJERUNfVElNRV9DSEFSXCIsIGUuRGVjb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJERUNfVElNRV9NQUxGT1JNRURcIiwgZS5FbmNvZGVUaW1lTmVnYXRpdmUgPSBcIkVOQ19USU1FX05FR1wiLCBlLkVuY29kZVRpbWVTaXplRXhjZWVkZWQgPSBcIkVOQ19USU1FX1NJWkVfRVhDRUVEXCIsIGUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkID0gXCJFTkNfVElNRV9NQUxGT1JNRURcIiwgZS5QUk5HRGV0ZWN0RmFpbHVyZSA9IFwiUFJOR19ERVRFQ1RcIiwgZS5VTElESW52YWxpZCA9IFwiVUxJRF9JTlZBTElEXCIsIGUuVW5leHBlY3RlZCA9IFwiVU5FWFBFQ1RFRFwiLCBlLlVVSURJbnZhbGlkID0gXCJVVUlEX0lOVkFMSURcIjtcbn0pKHllIHx8ICh5ZSA9IHt9KSk7XG5jbGFzcyBMZSBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IodCwgcikge1xuICAgIHN1cGVyKGAke3J9ICgke3R9KWApLCB0aGlzLm5hbWUgPSBcIlVMSURFcnJvclwiLCB0aGlzLmNvZGUgPSB0O1xuICB9XG59XG5mdW5jdGlvbiBSYyhlKSB7XG4gIGxldCB0ID0gTWF0aC5mbG9vcihlKCkgKiB4ZSk7XG4gIHJldHVybiB0ID09PSB4ZSAmJiAodCA9IHhlIC0gMSksIFVuLmNoYXJBdCh0KTtcbn1cbmZ1bmN0aW9uIE5jKGUpIHtcbiAgY29uc3QgdCA9IEZjKCksIHIgPSB0ICYmICh0LmNyeXB0byB8fCB0Lm1zQ3J5cHRvKSB8fCBudWxsO1xuICBpZiAodHlwZW9mIChyID09IG51bGwgPyB2b2lkIDAgOiByLmdldFJhbmRvbVZhbHVlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVpbnQ4QXJyYXkoMSk7XG4gICAgICByZXR1cm4gci5nZXRSYW5kb21WYWx1ZXMobiksIG5bMF0gLyAyNTU7XG4gICAgfTtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5yYW5kb21CeXRlcykgPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAoKSA9PiByLnJhbmRvbUJ5dGVzKDEpLnJlYWRVSW50OCgpIC8gMjU1O1xuICB0aHJvdyBuZXcgTGUoeWUuUFJOR0RldGVjdEZhaWx1cmUsIFwiRmFpbGVkIHRvIGZpbmQgYSByZWxpYWJsZSBQUk5HXCIpO1xufVxuZnVuY3Rpb24gRmMoKSB7XG4gIHJldHVybiBPYygpID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPCBcInVcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPCBcInVcIiA/IGdsb2JhbCA6IHR5cGVvZiBnbG9iYWxUaGlzIDwgXCJ1XCIgPyBnbG9iYWxUaGlzIDogbnVsbDtcbn1cbmZ1bmN0aW9uIE1jKGUsIHQpIHtcbiAgbGV0IHIgPSBcIlwiO1xuICBmb3IgKDsgZSA+IDA7IGUtLSlcbiAgICByID0gUmModCkgKyByO1xuICByZXR1cm4gcjtcbn1cbmZ1bmN0aW9uIERjKGUsIHQgPSB4bikge1xuICBpZiAoaXNOYU4oZSkpXG4gICAgdGhyb3cgbmV3IExlKHllLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCwgYFRpbWUgbXVzdCBiZSBhIG51bWJlcjogJHtlfWApO1xuICBpZiAoZSA+IGRyKVxuICAgIHRocm93IG5ldyBMZSh5ZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkLCBgQ2Fubm90IGVuY29kZSBhIHRpbWUgbGFyZ2VyIHRoYW4gJHtkcn06ICR7ZX1gKTtcbiAgaWYgKGUgPCAwKVxuICAgIHRocm93IG5ldyBMZSh5ZS5FbmNvZGVUaW1lTmVnYXRpdmUsIGBUaW1lIG11c3QgYmUgcG9zaXRpdmU6ICR7ZX1gKTtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIoZSkgPT09ICExKVxuICAgIHRocm93IG5ldyBMZSh5ZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYW4gaW50ZWdlcjogJHtlfWApO1xuICBsZXQgciwgbiA9IFwiXCI7XG4gIGZvciAobGV0IG8gPSB0OyBvID4gMDsgby0tKVxuICAgIHIgPSBlICUgeGUsIG4gPSBVbi5jaGFyQXQocikgKyBuLCBlID0gKGUgLSByKSAvIHhlO1xuICByZXR1cm4gbjtcbn1cbmZ1bmN0aW9uIE9jKCkge1xuICByZXR1cm4gdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlIDwgXCJ1XCIgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlO1xufVxuZnVuY3Rpb24gTGMoZSwgdCkge1xuICBjb25zdCByID0gTmMoKSwgbiA9IERhdGUubm93KCk7XG4gIHJldHVybiBEYyhuLCB4bikgKyBNYyhUYywgcik7XG59XG5jb25zdCAkbiA9IFwib3BfYW5hbHl0aWNzX2RldmljZV90b2tlblwiLCBqYyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIikuZmluZCgocikgPT4gci5pbmNsdWRlcygkbikpO1xuICBpZiAoZSlcbiAgICByZXR1cm4gZS5zcGxpdChcIj1cIilbMV07XG4gIGNvbnN0IHQgPSBMYygpO1xuICByZXR1cm4gVWModCksIHQ7XG59LCBVYyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTtcbiAgdC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkgKyAxKSwgZG9jdW1lbnQuY29va2llID0gYCR7JG59PSR7ZX07IHBhdGg9LzsgZXhwaXJlcz0ke3QudG9VVENTdHJpbmcoKX1gO1xufTtcbmZ1bmN0aW9uIHhjKCkge1xuICB0cnkge1xuICAgIGNvbnN0IGUgPSBNKCksIHQgPSBlO1xuICAgIGlmICh0ICE9IG51bGwgJiYgdC5uZXh0IHx8IHQgIT0gbnVsbCAmJiB0Ll9fTkVYVF9EQVRBX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX25leHRcIikpXG4gICAgICByZXR1cm4gXCJuZXh0anNcIjtcbiAgICBjb25zdCByID0gZTtcbiAgICBpZiAociAhPSBudWxsICYmIHIuX19OVVhUX18gfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNfX251eHRcIikpXG4gICAgICByZXR1cm4gXCJudXh0XCI7XG4gICAgaWYgKE9iamVjdC5rZXlzKGRvY3VtZW50KS5maW5kKChvKSA9PiBvLmluY2x1ZGVzKFwicmVhY3RcIikpIHx8IEFycmF5LmZyb20oZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiYm9keSA+ICpcIikpLmZpbmQoXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gX3JlYWN0Um9vdENvbnRhaW5lciBkb2Vzbid0IGV4aXN0XG4gICAgICAobykgPT4gby5fcmVhY3RSb290Q29udGFpbmVyXG4gICAgKSlcbiAgICAgIHJldHVybiBcInJlYWN0XCI7XG4gICAgY29uc3QgbiA9IGU7XG4gICAgcmV0dXJuIG4gIT0gbnVsbCAmJiBuLlZ1ZSB8fCBuICE9IG51bGwgJiYgbi5fX1ZVRV9fID8gXCJ2dWVcIiA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbbmctdmVyc2lvbl1cIikgPyBcImFuZ3VsYXJcIiA6IFwidmFuaWxsYVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gIH1cbn1cbmZ1bmN0aW9uICRjKGUpIHtcbiAgdmFyIHQsIHIsIG47XG4gIHRyeSB7XG4gICAgc3dpdGNoIChlKSB7XG4gICAgICBjYXNlIFwicmVhY3RcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwibmV4dGpzXCI6IHtcbiAgICAgICAgY29uc3QgaSA9IE0oKTtcbiAgICAgICAgcmV0dXJuICgodCA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubmV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IHQudmVyc2lvbikgfHwgKChyID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5fX05FWFRfREFUQV9fKSA9PSBudWxsID8gdm9pZCAwIDogci5idWlsZElkKSB8fCBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSBcIm51eHRcIjpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlIFwidnVlXCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcImFuZ3VsYXJcIjoge1xuICAgICAgICBjb25zdCBvID0gKG4gPSBNKCkpID09IG51bGwgPyB2b2lkIDAgOiBuLmRvY3VtZW50LCBpID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpO1xuICAgICAgICByZXR1cm4gaSA/IGkuZ2V0QXR0cmlidXRlKFwibmctdmVyc2lvblwiKSA6IG51bGw7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBWYygpIHtcbiAgY29uc3QgZSA9IHhjKCksIHQgPSAkYyhlKTtcbiAgcmV0dXJuIHsgZnJhbWV3b3JrOiBlLCB2ZXJzaW9uOiB0IH07XG59XG5jbGFzcyBHYyB7XG4gIGNvbnN0cnVjdG9yKHQsIHIsIG4sIG8pIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAoaSkgPT4ge1xuICAgICAgaWYgKCFpLnNvdXJjZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbT0pTXSBObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChwcihpLm9yaWdpbikgIT09IHByKHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIGkuZGF0YSA9PSBcIm9iamVjdFwiICYmIGkuZGF0YS5wZW5wYWwgfHwgdHlwZW9mIGkuZGF0YSA9PSBcIm9iamVjdFwiICYmIGkuZGF0YS5zb3VyY2UgJiYgaS5kYXRhLnNvdXJjZSA9PT0gXCJyZWFjdC1kZXZ0b29scy1icmlkZ2VcIilcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IHMgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyA9IERvKEpTT04ucGFyc2UoaS5kYXRhKSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQocykpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBsLCBwYXlsb2FkOiB1IH0gPSBzLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyhsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihsLCB1LmVsZW1lbnRUeXBlLCB7XG4gICAgICAgICAgICBvYmZ1c2NhdGVkVmFsdWU6IHUub2JmdXNjYXRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gaS5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGkpID0+IGkuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhaS5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGkuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGkpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMoaS5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgaSksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQoaS5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHQsIHRoaXMuYmFzZVVybCA9IHIsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBvO1xuICB9XG59XG5jb25zdCBwciA9IChlKSA9PiBuZXcgVVJMKGUpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIHpjKGUsIHQpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IGUsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiB0XG4gIH0pLnByb21pc2UsIG8gPSBhd2FpdCB5YShuKTtcbiAgaWYgKCFoYShuLCBvKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3MgcWMge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHQsIHIpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldCh0LCByKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHQgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgQmMgPSAoZSwgdCwgcikgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSBlO1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKG8pID0+IHtcbiAgICBpZiAoby5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGkgPSBvLmxvYWRlZFZhbHVlLCBzID0gaS5pc0F2YWlsYWJsZSAmJiBpLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IGkuaXNBdmFpbGFibGUgJiYgaS5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBzLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIHMgJiYgbXIoXCJhcHBsZV9wYXlcIiwgaSwgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIG1yKFwiZ29vZ2xlX3BheVwiLCBpLCB0LCByLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwgbXIgPSAoZSwgdCwgciwgbiwgbykgPT4gVC5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiByLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlKHIuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZSksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IEIoci5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBlLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBvID09IG51bGwgPyB2b2lkIDAgOiBvLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogdFxufSksIGZyID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogWCwgZXJyX186IGVlIH0gPSBBKFwib3AtZm9ybVwiKSwgbmUgPSBjbGFzcyBuZSB7XG4gIGNvbnN0cnVjdG9yKHQpIHtcbiAgICB2YXIgbztcbiAgICB0aGlzLmlzRGVzdHJveWVkID0gITEsIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IFVlKCksIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBVZSgpLCB0aGlzLmNvbnRleHQgPSBuZXcgVWUoKSwgdGhpcy5pbml0Rmxvd3MgPSBDYygpLCB0aGlzLmlzU3VibWl0dGluZyA9ICExLCB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBpID0gUGUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgcyA9IGkuc3RhcnRTcGFuKFwiZm9ybS5pbml0aWFsaXplXCIsIHtcbiAgICAgICAga2luZDogcWUuQ0xJRU5ULFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIFwib2pzLmRldmljZVRva2VuXCI6IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgLy8gJ2Vudmlyb25tZW50JzogLFxuICAgICAgICAgIC8vICdmcmFtZXdvcmsnOiBmcmFtZXdvcmssXG4gICAgICAgICAgLy8gJ2ZyYW1ld29yay52ZXJzaW9uJzogdmVyc2lvbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gQ2Uud2l0aChQZS5zZXRTcGFuKENlLmFjdGl2ZSgpLCBzKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmNyZWF0ZUVsZW1lbnQodGUuQ0RFX0JSSURHRSk7XG4gICAgICAgICAgYy5ub2RlLmlkID0gXCJfX29wX2ludGVybmFsX2NkZV9icmlkZ2VcIiwgYy5ub2RlLmFyaWFIaWRkZW4gPSBcInRydWVcIiwgT2JqZWN0LmFzc2lnbihjLm5vZGUuc3R5bGUsIHtcbiAgICAgICAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICAgICAgICBtYXJnaW46IFwiMHB4XCIsXG4gICAgICAgICAgICBwYWRkaW5nOiBcIjBweFwiLFxuICAgICAgICAgICAgd2lkdGg6IFwiMXB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMXB4XCIsXG4gICAgICAgICAgICBvdmVyZmxvdzogXCJoaWRkZW5cIixcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogXCJub25lXCIsXG4gICAgICAgICAgICB1c2VyU2VsZWN0OiBcIm5vbmVcIlxuICAgICAgICAgIH0pLCBjLm1vdW50KFwiYm9keVwiKSwgWChcIkNERSBicmlkZ2UgZWxlbWVudCBtb3VudGVkXCIpLCBYKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIFgoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgICAgY29uc3QgbCA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IGZyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgWChcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJ3YWl0aW5nX2Zvcl9jZGVfY29ubmVjdGlvblwiKSwgWChcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgICBjb25zdCB1ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGFydFNwYW4oXCJjZGUuY29ubmVjdFwiLCB2b2lkIDAsIENlLmFjdGl2ZSgpKSwgZCA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBmclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHUgPT0gbnVsbCB8fCB1LmVuZCgpLCBzID09IG51bGwgfHwgcy5hZGRFdmVudChcImNkZV9jb25uZWN0ZWRcIiksIFgoXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIiksIGF3YWl0IGVzKGQsIHRoaXMuZGV2aWNlVG9rZW4pLCBYKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICAgIGNvbnN0IF8gPSBuZS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZCxcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmNvbnRleHQuc2V0KF8pLCBCYyh0aGlzLmluaXRGbG93cywgXywgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgWChcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgRWModGhpcy5pbml0Rmxvd3MsIF8sIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGwudG90YWxBbW91bnRBdG9tcywgbC5jdXJyZW5jeSksIFgoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKSwgcyA9PSBudWxsIHx8IHMuc2V0U3RhdHVzKHsgY29kZTogbGUuT0sgfSksIGcoXCJmb3JtX2xvYWRlZFwiKTtcbiAgICAgICAgfSBjYXRjaCAoYykge1xuICAgICAgICAgIGNvbnN0IGwgPSBZKGMpO1xuICAgICAgICAgIHMgPT0gbnVsbCB8fCBzLnNldFN0YXR1cyh7XG4gICAgICAgICAgICBjb2RlOiBsZS5FUlJPUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGxcbiAgICAgICAgICB9KSwgZWUoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIGwpLCBnKFwiZm9ybV9pbml0X2Vycm9yXCIsIHtcbiAgICAgICAgICAgIGVycm9yOiBsXG4gICAgICAgICAgfSksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3IobCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcyA9PSBudWxsIHx8IHMuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChpKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKHMpID0+IHtcbiAgICAgICAgIXMgfHwgcy50eXBlID09PSB0ZS5DREVfQlJJREdFIHx8IChzLm5vZGUuc3R5bGUuaGVpZ2h0ID0gaSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKGkpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC5zZXQoaSksIGcoXCJjZGVfbG9hZGVkXCIpKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGkpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8ICh0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoaSksIGkpLCBnKFwiY2RlX2xvYWRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogaVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChpLCBzID0ge30pID0+IHtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJjcmVhdGVFbGVtZW50XCIpLCAhdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBjID0gS24ucGFyc2UoaSksIGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCB1ID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHMpO1xuICAgICAgbC5uYW1lID0gYCR7Y30tZWxlbWVudGA7XG4gICAgICBjb25zdCBkID0gbmV3IFVSTChgL2FwcC92MS8ke2wubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gZC5zZWFyY2ggPSB1LnRvU3RyaW5nKCksIGwuc3JjID0gZC5ocmVmLCBsLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBsLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYywgbCk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChpLCBzKSA9PiB7XG4gICAgICBjb25zdCBjID0ge1xuICAgICAgICB0eXBlOiBpLFxuICAgICAgICBub2RlOiBzLFxuICAgICAgICBtb3VudDogKGwpID0+IHtcbiAgICAgICAgICB2YXIgdTtcbiAgICAgICAgICAodSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobCkpID09IG51bGwgfHwgdS5hcHBlbmRDaGlsZChzKSwgZyhcImVsZW1lbnRfbW91bnRlZFwiLCB7XG4gICAgICAgICAgICBlbGVtZW50X3R5cGU6IGlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBjLnR5cGUsIG5vZGU6IGMubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbdGUuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW3RlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbdGUuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFt0ZS5DQVJEX0NWQ106IHZvaWQgMCxcbiAgICAgICAgW3RlLkNERV9CUklER0VdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tpXSA9IGMsIGM7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGkpID0+IHtcbiAgICAgIGNvbnN0IHMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCBzLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGkuc3R5bGVzICYmIHMuYXBwZW5kKFwic3R5bGVzXCIsIE1vKGkuc3R5bGVzKSksIHMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIHM7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGkpID0+IFhlKFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJjb25uZWN0X3RvX2VsZW1lbnRcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCB6YyhpLm5vZGUpO1xuICAgICAgICBzLnRyYWNpbmdDb250ZXh0ID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihpLnR5cGUsIHMpLCAhdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzICYmIGkudHlwZSA9PT0gdGUuQ0RFX0JSSURHRSAmJiB0aGlzLmFueUNkZUNvbm4uc2V0KHMpO1xuICAgICAgfVxuICAgICkuY2F0Y2goKHMpID0+IGVlKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBzKSksIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSBhc3luYyAoaSkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSB7XG4gICAgICAgIGVlKFwiRm9ybSBpcyBhbHJlYWR5IHN1Ym1pdHRpbmcuIFBsZWFzZSB3YWl0IGZvciB0aGUgc3VibWlzc2lvbiB0byBmaW5pc2ggYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9ICEwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcyA9IGF3YWl0IFhlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNwYW5OYW1lOiBcInN1Ym1pdF9jYXJkXCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlcixcbiAgICAgICAgICAgIHBheW1lbnRSb3V0ZUlkOiBpID09IG51bGwgPyB2b2lkIDAgOiBpLnBheW1lbnRSb3V0ZUlkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBnKFwic3VibWl0X2NhcmRcIiwgeyAuLi5pIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJzdWJtaXRDYXJkXCIpO1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghYylcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIGF3YWl0IFQuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgICAgICAgY29udGV4dDogYyxcbiAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBFZShjLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIoYy5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBwYXltZW50Um91dGVJZDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5wYXltZW50Um91dGVJZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIHRocm93IHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIHM7XG4gICAgICB9XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IFhlKFxuICAgICAge1xuICAgICAgICBzcGFuTmFtZTogXCJnZXRfYXZhaWxhYmxlX3BheW1lbnRfbWV0aG9kc1wiLFxuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICByZWxlYXNlVmVyc2lvbjogdGhpcy5vanNSZWxlYXNlVmVyc2lvbixcbiAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzXCIpLCAhdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgY29uc3QgcyA9IHtcbiAgICAgICAgICBwYXlwYWw6ICQucGF5cGFsLFxuICAgICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogJC5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6ICQuYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiAkLmF1dGhvcml6ZW5ldEdvb2dsZVBheSxcbiAgICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogJC5hdXRob3JpemVuZXRBcHBsZVBheVxuICAgICAgICB9LCBjID0gT2JqZWN0LmVudHJpZXModGhpcy5pbml0Rmxvd3MpLm1hcCgoW2wsIHVdKSA9PiAoe1xuICAgICAgICAgIG5hbWU6IHNbbF0gPz8gbCxcbiAgICAgICAgICAuLi51LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKVxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBnKFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIiwge1xuICAgICAgICAgIGF2YWlsYWJsZV9wYXltZW50X21ldGhvZHM6IGNcbiAgICAgICAgfSksIGM7XG4gICAgICB9XG4gICAgKSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gYXN5bmMgKGksIHMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBlZShcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGMgPSBhd2FpdCBYZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsXG4gICAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcImdlbmVyYWxfZm9ybV9zdWJtaXRcIiwgeyBtZXRob2Q6IGksIHNldHRpbmdzOiBzIH0pLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZW5lcmFsU3VibWl0XCIpO1xuICAgICAgICAgICAgY29uc3QgbCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgIGlmICghbClcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgICBjYXNlICQucG9ja3l0UGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBULnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRWUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwb2NreXRcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogcyB9LFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgJC5wYXlwYWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFQucGF5cGFsLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBFZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBheXBhbFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogQihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiBzIH0sXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3NcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY2FzZSAkLmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgZWUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlICQuYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgZWUoXG4gICAgICAgICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJC5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIGVlKFxuICAgICAgICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJC5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgICAgICAgIGNvbnN0IHUgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICBlZShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHUuc3RhcnRGbG93KHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJC5sb29wQ3J5cHRvOlxuICAgICAgICAgICAgICAgIHJldHVybiBULmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwiY3J5cHRvXCIsXG4gICAgICAgICAgICAgICAgICAgIFwibG9vcFwiXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogQihsLmZvcm1EaXYpLFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiBzLFxuICAgICAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZHQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgYztcbiAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgdGhyb3cgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgYztcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZCwgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgdmFyIGk7XG4gICAgICBYKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIiksIHRoaXMuY2hlY2tWYWxpZEZvcm1JbnN0YW5jZShcImRlc3Ryb3lcIiksIHRoaXMuaXNEZXN0cm95ZWQgPSAhMDtcbiAgICAgIGZvciAoY29uc3QgcyBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgcyAmJiBzLm5vZGUucmVtb3ZlKCk7XG4gICAgICAoaSA9IE0oKSkgPT0gbnVsbCB8fCBpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB6aSgpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzLCBnKFwiZm9ybV9kZXN0cm95ZWRcIik7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoaSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhpKTtcbiAgICB9LCBuZS5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjMuMTNcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gdC5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnQsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBOdC5mcm9tT2JqZWN0KHQpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHQuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgcWMoKSwgdGhpcy5kZXZpY2VUb2tlbiA9IGpjKCksIEdpKCk7XG4gICAgY29uc3QgeyBmcmFtZXdvcms6IHIsIHZlcnNpb246IG4gfSA9IFZjKCk7XG4gICAgSHIodGhpcy5iYXNlVXJsKS50aGVuKChpKSA9PiB7XG4gICAgICBpZiAoIUl0LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBkZXZpY2VUb2tlbjogdGhpcy5kZXZpY2VUb2tlbixcbiAgICAgICAgICBlbnZpcm9ubWVudDogaSxcbiAgICAgICAgICBmcmFtZXdvcms6IHIsXG4gICAgICAgICAgZnJhbWV3b3JrVmVyc2lvbjogbixcbiAgICAgICAgICBvanNWZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgICAgb2pzUmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsXG4gICAgICAgIH07XG4gICAgICAgIEl0LnNldChzKTtcbiAgICAgIH1cbiAgICB9KSwgZyhcImZvcm1faW5pdFwiKSwgdC5hbGxvd1RyYWNpbmcgPT09ICEwICYmIGtjKHRoaXMub2pzVmVyc2lvbiwgdGhpcy5iYXNlVXJsKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgR2ModGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIChvID0gTSgpKSA9PSBudWxsIHx8IG8uYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG4gIGNoZWNrVmFsaWRGb3JtSW5zdGFuY2UodCA9IFwidW5rbm93blwiKSB7XG4gICAgY29uc3QgciA9IG5lLmdldEluc3RhbmNlKCksIG4gPSB7XG4gICAgICBjYWxsZXI6IHQsXG4gICAgICB0aGlzRm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgIGN1cnJlbnRGb3JtSWQ6IChyID09IG51bGwgPyB2b2lkIDAgOiByLmZvcm1JZCkgfHwgXCJuby1jdXJyZW50LWluc3RhbmNlXCIsXG4gICAgICBpc0Rlc3Ryb3llZDogdGhpcy5pc0Rlc3Ryb3llZCxcbiAgICAgIGNoZWNrb3V0VG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4uc3Vic3RyaW5nKDAsIDEwKSArIFwiLi4uXCJcbiAgICB9LCBvID0gYFxuICAgICAgW1dhcm5pbmddIEludmFsaWQgZm9ybSBpbnN0YW5jZSBkZXRlY3RlZC5cbiAgICAgIEl0IGxvb2tzIGxpa2UgeW91IGFyZSBzdGlsbCB1c2luZyBhbiBvbGQgaW5zdGFuY2UgdGhhdCBoYXMgYmVlbiBkZXN0cm95ZWQuXG4gICAgICBQbGVhc2UgbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZm9ybSBhbmQgY2xlYW51cCBldmVudCBsaXN0ZW5lcnMuXG4gICAgICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICAgIERlYnVnIEluZm86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgIC0gY2FsbGVyOiAke3R9XG4gICAgICAtIGNhbGxlcl9mb3JtX2lkOiAke24udGhpc0Zvcm1JZH1cbiAgICAgIC0gY3VycmVudF9hY3RpdmVfZm9ybV9pZDogJHtuLmN1cnJlbnRGb3JtSWR9XG4gICAgICAtIGlzX2Rlc3Ryb3llZDogJHtuLmlzRGVzdHJveWVkfVxuICAgICAgLSBjaGVja291dF90b2tlbjogJHtuLmNoZWNrb3V0VG9rZW59XG4gICAgYDtcbiAgICByZXR1cm4gdGhpcy5pc0Rlc3Ryb3llZCA/IChlZShvKSwgZyhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogbyB9KSwgITEpIDogIXIgfHwgci5mb3JtSWQgIT09IHRoaXMuZm9ybUlkID8gKGVlKG8pLCBnKFwib3V0ZGF0ZWRfZm9ybV9pbnN0YW5jZVwiLCB7IGVycm9yOiBvIH0pLCAhMSkgOiAhMDtcbiAgfVxufTtcbm5lLm9qc0Zsb3dzID0gVCwgbmUuYXNzaWduQXNTaW5nbGV0b24gPSAodCkgPT4ge1xuICBpZiAobmUuZ2V0SW5zdGFuY2UoKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgd2luZG93Lm9qcyA9IHQ7XG59LCBuZS5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgbmUuYnVpbGRPanNGbG93Q29udGV4dCA9ICh0LCByLCBuLCBvKSA9PiAoe1xuICBjaGVja291dFNlY3VyZVRva2VuOiB0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gIGJhc2VVcmw6IG5ldyBVUkwodC5iYXNlVXJsID8/IGdyKS5vcmlnaW4sXG4gIGZvcm1EaXY6IG8sXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiByLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogci5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiBuLFxuICBjdXN0b21Jbml0UGFyYW1zOiB0LmN1c3RvbUluaXRQYXJhbXMgPz8ge30sXG4gIHByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbjogdC5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb25cbn0pO1xubGV0IF9yID0gbmU7XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KHtcbiAgICBvbkZvY3VzOiBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uQ2hhbmdlOiBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkxvYWQ6IHByb3BzLm9uTG9hZCxcbiAgICBvbkxvYWRFcnJvcjogcHJvcHMub25Mb2FkRXJyb3IsXG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCxcbiAgICBvbkNoZWNrb3V0U3VjY2VzczogcHJvcHMub25DaGVja291dFN1Y2Nlc3MsXG4gICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgb25DaGVja291dEVycm9yOiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXG4gIH0pO1xuICBpZiAoX3IuZ2V0SW5zdGFuY2UoKSkge1xuICAgIF9yLmdldEluc3RhbmNlKCk/LnVwZGF0ZUNhbGxiYWNrcyhmb3JtQ2FsbGJhY2tzLmdldCk7XG4gIH1cbiAgcmV0dXJuIGZvcm1DYWxsYmFja3MuZ2V0O1xufTtcblxuY29uc3QgdXNlUGF5bWVudFJlcXVlc3RzID0gKG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQpID0+IHtcbiAgY29uc3QgW3BheW1lbnRSZXF1ZXN0cywgc2V0UGF5bWVudFJlcXVlc3RzXSA9IHVzZVN0YXRlKHtcbiAgICBhcHBsZV9wYXk6IFBSX0xPQURJTkcsXG4gICAgZ29vZ2xlX3BheTogUFJfTE9BRElOR1xuICB9KTtcbiAgY29uc3Qgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAocGF5bWVudFJlcXVlc3RzMikgPT4ge1xuICAgICAgc2V0UGF5bWVudFJlcXVlc3RzKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgICAgb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZD8uKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgIH0sXG4gICAgW29yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWRdXG4gICk7XG4gIHJldHVybiB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfTtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfSA9IHVzZVBheW1lbnRSZXF1ZXN0cyhwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdHJpcGVMaW5rQ3RybCwgc2V0U3RyaXBlTGlua0N0cmxdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtsb29wQ29uZmlnLCBzZXRMb29wQ29uZmlnXSA9IHVzZVN0YXRlKExPT1BfTE9BRElORyk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBfci5nZXRJbnN0YW5jZSgpID8/IG5ldyBfcih7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIGFsbG93VHJhY2luZzogcHJvcHMuYWxsb3dUcmFjaW5nID8/IGZhbHNlLFxuICAgICAgcHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uOiBwcm9wcy5wcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb24sXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmxvb3AucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0TG9vcENvbmZpZyh7XG4gICAgICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiAhcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIHdpZGdldDogbnVsbCxcbiAgICAgICAgICBjb25maWc6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogcGF5bWVudFJlcXVlc3RzLmFwcGxlX3BheSxcbiAgICBnb29nbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5nb29nbGVfcGF5LFxuICAgIGxvYWRlZCxcbiAgICAvLyBEaXNhYmxlIGR5bmFtaWMgcHJldmlld3MgZmVhdHVyZSBmb3Igbm93XG4gICAgcHJldmlldzoge1xuICAgICAgYW1vdW50OiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfSxcbiAgICBzdHJpcGVMaW5rOiBzdHJpcGVMaW5rQ3RybCxcbiAgICBhaXJ3YWxsZXgsXG4gICAgbG9vcDogbG9vcENvbmZpZ1xuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwgeyBjaGlsZHJlbjogZWxlbWVudHNDb250ZXh0VmFsdWUgPyAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRzQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogZWxlbWVudHNDb250ZXh0VmFsdWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHsgaWQ6IEZPUk1fVEFSR0VULCBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSwgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuKGNoaWxkcmVuUHJvcHMpIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pIH0pO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlID0gKG9wRm9ybSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvcm1JZDogb3BGb3JtLmZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0OiBvcEZvcm0uZm9ybVByb3BlcnRpZXMuaGVpZ2h0LFxuICAgIHJlZmVycmVyOiBvcEZvcm0ucmVmZXJyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogb3BGb3JtLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgcmVnaXN0ZXJJZnJhbWU6IG9wRm9ybS5yZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBvcEZvcm0uYmFzZVVybFxuICB9O1xufTtcblxuZXhwb3J0IHsgQnQgYXMgQiwgQ2UgYXMgQywgRHQgYXMgRCwgRWxlbWVudHNGb3JtIGFzIEUsIEZ0IGFzIEYsIEcsIElyIGFzIEksIEpvIGFzIEosIE10IGFzIE0sIFBlIGFzIFAsIFlvIGFzIFksIFByIGFzIGEsIFB0IGFzIGIsIGNhIGFzIGMsIENhcmRDdmNFbGVtZW50IGFzIGQsIENhcmRFbGVtZW50IGFzIGUsIENhcmRFeHBpcnlFbGVtZW50IGFzIGYsIENhcmROdW1iZXJFbGVtZW50IGFzIGcsIEZpZWxkTmFtZSBhcyBoLCBQYXlJbkZhaWxlZCBhcyBpLCBQYXlJblN0YXRlIGFzIGosIGtyIGFzIGssIGxlIGFzIGwsIG50IGFzIG4sIHBhIGFzIHAsIHFlIGFzIHEsIHNhIGFzIHMsIHRhIGFzIHQsIHVzZU9wZW5QYXlFbGVtZW50cyBhcyB1LCB6ZSBhcyB6IH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFLQSxTQUFXO0FBQ3pCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxRQUFXO0FBQ2xCLFNBQVMsT0FBQUMsSUFBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLGlCQUFBQyxJQUFlLGNBQUFDLElBQVksWUFBQUMsSUFBVSxVQUFBQyxJQUFRLFdBQUFDLElBQVMsYUFBQUMsSUFBVyxlQUFBQyxVQUFtQjtBQUU3RixNQUFNQyxLQUE0QmIsRUFBSSxPQUFPO0FBQUEsRUFDM0MsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsS0FBS0EsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzNCLEtBQUtBLEVBQUksT0FBTztBQUFBLEVBQ2hCLEtBQUtBLEVBQUksT0FBTztBQUNsQixDQUFDO0FBQ0RBLEVBQUksTUFBTWEsRUFBeUI7QUFDbkMsTUFBTUMsS0FBZ0JkLEVBQUksT0FBTztBQUFBLEVBQy9CLE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLFNBQVNBLEVBQUksT0FBTztBQUFBLEVBQ3BCLE1BQU1BLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFD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MUIsV0FBV0EsRUFBZ0I7QUFBQSxJQUMzQixRQUFBVztBQUFBO0FBQUEsSUFFQSxTQUFTO0FBQUEsTUFDUCxRQUFRO0FBQUEsTUFDUixXQUFXO0FBQUEsTUFDWCxPQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsWUFBWUU7QUFBQSxJQUNaLFdBQUFJO0FBQUEsSUFDQSxNQUFNRjtBQUFBLEVBQ1I7QUFDQSxTQUF1QixnQkFBQWhpQixHQUFJeWlCLElBQVUsRUFBRSxVQUFVZixJQUF1QyxnQkFBQTFoQixHQUFJM0IsR0FBZ0IsVUFBVSxFQUFFLE9BQU9xakIsR0FBc0IsVUFBMEIsZ0JBQUExaEIsR0FBSSxPQUFPLEVBQUUsSUFBSXNoQixJQUFhLFdBQVc1aUIsRUFBTSxXQUFXLFVBQVVBLEVBQU0sU0FBU2drQixDQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBb0IsZ0JBQUExaUIsR0FBSXlpQixJQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOVQsR0FDTUYsS0FBMEIsQ0FBQ2YsT0FDeEI7QUFBQSxFQUNMLFFBQVFBLEVBQU87QUFBQSxFQUNmLFlBQVlBLEVBQU8sZUFBZTtBQUFBLEVBQ2xDLFVBQVVBLEVBQU87QUFBQSxFQUNqQixxQkFBcUJBLEVBQU87QUFBQSxFQUM1QixnQkFBZ0JBLEVBQU87QUFBQSxFQUN2QixTQUFTQSxFQUFPO0FBQ2xCOyIsCiAgIm5hbWVzIjogWyJ6JDEiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiY2hhbGsiLCAianN4IiwgIkZyYWdtZW50IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJ1c2VFZmZlY3QiLCAidXNlQ2FsbGJhY2siLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJab2RGaWVsZEVycm9yIiwgIm1ha2VDYWxsYmFja1NhZmUiLCAiY2FsbGJhY2tOYW1lIiwgImZuIiwgImVycm9yTG9nZ2VyIiwgImFyZ3MiLCAiZXJyb3IiLCAiU3VibWl0TWV0aG9kcyIsICJTdWJtaXRNZXRob2RzMiIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAiZml4UHJvdG8iLCAidGFyZ2V0IiwgInByb3RvdHlwZSIsICJzZXRQcm90b3R5cGVPZiIsICJmaXhTdGFjayIsICJjYXB0dXJlU3RhY2tUcmFjZSIsICJfX2V4dGVuZHMkMSIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgImIiLCAicCIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAibnVsbE9yVW5kZWZPciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgImkiLCAiX19yZWFkIiwgInIiLCAiYXIiLCAiX19zcHJlYWRBcnJheSIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJfX2F3YWl0IiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicSIsICJhd2FpdFJldHVybiIsICJhIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiZnVsZmlsbCIsICJfX2FzeW5jVmFsdWVzIiwgImlzRnVuY3Rpb24iLCAidmFsdWUiLCAiY3JlYXRlRXJyb3JDbGFzcyIsICJjcmVhdGVJbXBsIiwgIl9zdXBlciIsICJpbnN0YW5jZSIsICJjdG9yRnVuYyIsICJVbnN1YnNjcmlwdGlvbkVycm9yIiwgImVycm9ycyIsICJlcnIiLCAiYXJyUmVtb3ZlIiwgImFyciIsICJpdGVtIiwgImluZGV4IiwgIlN1YnNjcmlwdGlvbiIsICJpbml0aWFsVGVhcmRvd24iLCAiZV8xIiwgIl9hIiwgImVfMiIsICJfYiIsICJfcGFyZW50YWdlIiwgIl9wYXJlbnRhZ2VfMSIsICJfX3ZhbHVlcyIsICJfcGFyZW50YWdlXzFfMSIsICJwYXJlbnRfMSIsICJlXzFfMSIsICJpbml0aWFsRmluYWxpemVyIiwgImUiLCAiX2ZpbmFsaXplcnMiLCAiX2ZpbmFsaXplcnNfMSIsICJfZmluYWxpemVyc18xXzEiLCAiZmluYWxpemVyIiwgImV4ZWNGaW5hbGl6ZXIiLCAiX19zcHJlYWRBcnJheSIsICJfX3JlYWQiLCAiZV8yXzEiLCAidGVhcmRvd24iLCAicGFyZW50IiwgImVtcHR5IiwgIkVNUFRZX1NVQlNDUklQVElPTiIsICJpc1N1YnNjcmlwdGlvbiIsICJjb25maWciLCAidGltZW91dFByb3ZpZGVyIiwgImhhbmRsZXIiLCAidGltZW91dCIsICJhcmdzIiwgIl9pIiwgImhhbmRsZSIsICJkZWxlZ2F0ZSIsICJyZXBvcnRVbmhhbmRsZWRFcnJvciIsICJub29wIiwgImVycm9yQ29udGV4dCIsICJjYiIsICJTdWJzY3JpYmVyIiwgIl9fZXh0ZW5kcyIsICJkZXN0aW5hdGlvbiIsICJfdGhpcyIsICJFTVBUWV9PQlNFUlZFUiIsICJuZXh0IiwgImVycm9yIiwgImNvbXBsZXRlIiwgIlNhZmVTdWJzY3JpYmVyIiwgIl9iaW5kIiwgImJpbmQiLCAiZm4iLCAidGhpc0FyZyIsICJDb25zdW1lck9ic2VydmVyIiwgInBhcnRpYWxPYnNlcnZlciIsICJoYW5kbGVVbmhhbmRsZWRFcnJvciIsICJvYnNlcnZlck9yTmV4dCIsICJjb250ZXh0XzEiLCAiZGVmYXVsdEVycm9ySGFuZGxlciIsICJvYnNlcnZhYmxlIiwgImlkZW50aXR5IiwgIngiLCAicGlwZUZyb21BcnJheSIsICJmbnMiLCAiaW5wdXQiLCAicHJldiIsICJPYnNlcnZhYmxlIiwgInN1YnNjcmliZSIsICJvcGVyYXRvciIsICJzdWJzY3JpYmVyIiwgImlzU3Vic2NyaWJlciIsICJzb3VyY2UiLCAic2luayIsICJwcm9taXNlQ3RvciIsICJnZXRQcm9taXNlQ3RvciIsICJyZXNvbHZlIiwgInJlamVjdCIsICJvcGVyYXRpb25zIiwgImlzT2JzZXJ2ZXIiLCAiaGFzTGlmdCIsICJvcGVyYXRlIiwgImluaXQiLCAibGlmdGVkU291cmNlIiwgImNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciIsICJvbk5leHQiLCAib25Db21wbGV0ZSIsICJvbkVycm9yIiwgIm9uRmluYWxpemUiLCAiT3BlcmF0b3JTdWJzY3JpYmVyIiwgInNob3VsZFVuc3Vic2NyaWJlIiwgImNsb3NlZF8xIiwgIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwgIlN1YmplY3QiLCAic3ViamVjdCIsICJBbm9ueW1vdXNTdWJqZWN0IiwgIl9jIiwgIm9ic2VydmVyIiwgIm9ic2VydmVycyIsICJoYXNFcnJvciIsICJpc1N0b3BwZWQiLCAidGhyb3duRXJyb3IiLCAiZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIiwgIkFjdGlvbiIsICJzY2hlZHVsZXIiLCAid29yayIsICJzdGF0ZSIsICJkZWxheSIsICJpbnRlcnZhbFByb3ZpZGVyIiwgIkFzeW5jQWN0aW9uIiwgImlkIiwgIl9pZCIsICJfc2NoZWR1bGVyIiwgIl9kZWxheSIsICJlcnJvcmVkIiwgImVycm9yVmFsdWUiLCAiYWN0aW9ucyIsICJTY2hlZHVsZXIiLCAic2NoZWR1bGVyQWN0aW9uQ3RvciIsICJub3ciLCAiQXN5bmNTY2hlZHVsZXIiLCAiU2NoZWR1bGVyQWN0aW9uIiwgImFjdGlvbiIsICJhc3luY1NjaGVkdWxlciIsICJpc0FycmF5TGlrZSIsICJpc1Byb21pc2UiLCAiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsICJpc0FzeW5jSXRlcmFibGUiLCAib2JqIiwgImNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIiwgImdldFN5bWJvbEl0ZXJhdG9yIiwgIml0ZXJhdG9yIiwgImlzSXRlcmFibGUiLCAicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsICJyZWFkYWJsZVN0cmVhbSIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInJlYWRlciIsICJkb25lIiwgIl9fZ2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiaXNSZWFkYWJsZVN0cmVhbUxpa2UiLCAiaW5uZXJGcm9tIiwgImZyb21JbnRlcm9wT2JzZXJ2YWJsZSIsICJmcm9tQXJyYXlMaWtlIiwgImZyb21Qcm9taXNlIiwgImZyb21Bc3luY0l0ZXJhYmxlIiwgImZyb21JdGVyYWJsZSIsICJmcm9tUmVhZGFibGVTdHJlYW1MaWtlIiwgIm9icyIsICJhcnJheSIsICJpIiwgInByb21pc2UiLCAiaXRlcmFibGUiLCAiaXRlcmFibGVfMSIsICJpdGVyYWJsZV8xXzEiLCAiYXN5bmNJdGVyYWJsZSIsICJwcm9jZXNzIiwgImFzeW5jSXRlcmFibGVfMSIsICJhc3luY0l0ZXJhYmxlXzFfMSIsICJfX2F3YWl0ZXIiLCAiX19hc3luY1ZhbHVlcyIsICJleGVjdXRlU2NoZWR1bGUiLCAicGFyZW50U3Vic2NyaXB0aW9uIiwgInJlcGVhdCIsICJzY2hlZHVsZVN1YnNjcmlwdGlvbiIsICJ0aHJvd0Vycm9yIiwgImVycm9yT3JFcnJvckZhY3RvcnkiLCAiZXJyb3JGYWN0b3J5IiwgIkVtcHR5RXJyb3IiLCAibGFzdFZhbHVlRnJvbSIsICJfaGFzVmFsdWUiLCAiX3ZhbHVlIiwgImlzVmFsaWREYXRlIiwgIlRpbWVvdXRFcnJvciIsICJpbmZvIiwgInNjaGVkdWxlckFyZyIsICJmaXJzdCIsICJlYWNoIiwgIl93aXRoIiwgInRpbWVvdXRFcnJvckZhY3RvcnkiLCAiX2QiLCAibWV0YSIsICJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsICJ0aW1lclN1YnNjcmlwdGlvbiIsICJsYXN0VmFsdWUiLCAic2VlbiIsICJzdGFydFRpbWVyIiwgIkxvYWRlZE9uY2VQdWJsaXNoZXIiLCAiZXJyTXNnIiwgInZhbHVlSWZOb3RMb2FkZWQiLCAic3Vic2NyaXB0aW9uIiwgInRpbWVvdXRDb25maWciLCAiYXNzZXJ0TmV2ZXIiLCAidGltZW91dFBhcmFtcyIsICJ6JDEiLCAiY29ubnRvQmFzZVVybHMiLCAiZ2V0Q29ubnRvVXJsIiwgImVudiIsICJnZXRXaW5kb3dTYWZlIiwgIm1ldHJpY3NQdWJsaXNoZXIiLCAiTUVUUklDU19RVUVVRV9LRVkiLCAiTUFYX1JFVFJZX0FUVEVNUFRTIiwgIkJBVENIX1NJWkUiLCAiQkFUQ0hfSU5URVJWQUxfTVMiLCAibG9nX18iLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAiTWV0cmljc1F1ZXVlIiwgImV2ZW50TmFtZSIsICJwcm9wZXJ0aWVzIiwgImNvbnRleHRQcm9wZXJ0aWVzIiwgImV2ZW50IiwgInY0IiwgInN0b3JlZFF1ZXVlIiwgInNhZmVXaW5kb3ciLCAiY29udGV4dCIsICJiYXRjaCIsICJiYXRjaFBheWxvYWQiLCAiY29ubnRvVXJsIiwgIm1ldHJpY3NSb3V0ZXIiLCAiZXZlbnRzVG9LZWVwIiwgIm1ldHJpY3NRdWV1ZSIsICJQYXltZW50UHJvY2Vzc29yIiwgIkFXWF9MT0FESU5HIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiUGF5SW5GYWlsZWQiLCAiUGF5SW5GYWlsZWQyIiwgIlBheUluU3RhdGUiLCAiUGF5SW5TdGF0ZTIiLCAiTE9PUF9MT0FESU5HIiwgIlJlcXVpcmVkU3RyaW5nIiwgIkZpZWxkTmFtZSIsICJPcHRpb25hbFN0cmluZyIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgIkZvcm1DYWxsYmFja3MiLCAiRWxlbWVudHNDb250ZXh0IiwgImNyZWF0ZUNvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgInVzZUNvbnRleHQiLCAiRWxlbWVudEZyYW1lIiwgInByb3BzIiwgImVsZW1lbnRUeXBlIiwgInN0eWxlcyIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgInVzZVN0YXRlIiwgImlmcmFtZVJlZiIsICJ1c2VSZWYiLCAiZWxlbWVudFN0eWxlIiwgInVzZU1lbW8iLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAidXNlRWZmZWN0IiwgImpzeCIsICJ1cmwiLCAiQ2FyZEVsZW1lbnQiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkNhcmRDdmNFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50IiwgImdyIiwgIlZuIiwgIkduIiwgInpuIiwgInFuIiwgIkJuIiwgIlN0IiwgIlluIiwgIkhuIiwgInIiLCAiSm4iLCAiWSIsICJXbiIsICJuIiwgIm8iLCAiJCIsICJQIiwgIlIiLCAibSIsICJ3ciIsICJ2ciIsICJiciIsICJFciIsICJ0ZSIsICJLbiIsICJzdCIsICJabiIsICJaIiwgIlFuIiwgIlhuIiwgImVvIiwgInRvIiwgInJvIiwgIm5vIiwgIm9vIiwgImFvIiwgImlvIiwgInNvIiwgImNvIiwgImxvIiwgIlllIiwgInVvIiwgInBvIiwgIm1vIiwgImZvIiwgIl9vIiwgInlvIiwgImhvIiwgIiRlIiwgImdvIiwgIndvIiwgInZvIiwgIkQiLCAiYm8iLCAiRW8iLCAiQ3IiLCAiQ28iLCAiU28iLCAiU3IiLCAiUG8iLCAia28iLCAiQW8iLCAiY3QiLCAienQiLCAibHQiLCAiSW8iLCAiVG8iLCAiUm8iLCAiTm8iLCAiRm8iLCAicyIsICJjIiwgIk1vIiwgIkIiLCAiRG8iLCAiT28iLCAiZmUiLCAicXQiLCAiTG8iLCAibCIsICJ1IiwgImQiLCAiam8iLCAiVW8iLCAiVmUiLCAiR2UiLCAiRnQiLCAiemUiLCAiTXQiLCAieG8iLCAiJG8iLCAiVm8iLCAiTWUiLCAiRyIsICJHbyIsICJ6byIsICJxbyIsICJCbyIsICJudCIsICJfIiwgInAiLCAiWW8iLCAiSG8iLCAiSm8iLCAiV28iLCAiS28iLCAiWm8iLCAiUW8iLCAiWG8iLCAieXQiLCAiZWEiLCAiRHQiLCAiUHQiLCAiUHIiLCAia3IiLCAidGEiLCAiamUiLCAiT3QiLCAiTHQiLCAicmEiLCAianQiLCAibmEiLCAib2EiLCAiQXIiLCAiYWEiLCAiaWEiLCAic2EiLCAiY2EiLCAiSXIiLCAibGEiLCAiaHQiLCAiVHIiLCAidWEiLCAiZGEiLCAicGEiLCAibWEiLCAiZmEiLCAiQnQiLCAicWUiLCAibGUiLCAiQ2UiLCAiZ3QiLCAiUGUiLCAieWEiLCAiaGEiLCAiZ2EiLCAid2EiLCAidmEiLCAiYmEiLCAiRWEiLCAiUnIiLCAiTnIiLCAiQ2EiLCAiU2EiLCAiVGUiLCAiUGEiLCAia2EiLCAiRnIiLCAiQWEiLCAiSWEiLCAiVGEiLCAiWXQiLCAiTXIiLCAiSHQiLCAiRHIiLCAiUmEiLCAiTmEiLCAiT3IiLCAiRmEiLCAiTWEiLCAiRGEiLCAiTHIiLCAiT2EiLCAianIiLCAiTGEiLCAiamEiLCAiVWEiLCAieGEiLCAiJGEiLCAiVmEiLCAiVXIiLCAiR2EiLCAiemEiLCAib2UiLCAicm4iLCAiaGUiLCAiQSIsICJjaGFsayIsICJrdCIsICJ1ZSIsICJxYSIsICJ4ciIsICJrZSIsICJvdCIsICJhdCIsICJTZSIsICJCYSIsICJmIiwgInkiLCAiaCIsICJ2IiwgImIiLCAiWWEiLCAiaiIsICJ1dCIsICJ3dCIsICJpdCIsICJIZSIsICJKdCIsICIkciIsICJWciIsICJHciIsICJ6ciIsICJxciIsICJXdCIsICJldCIsICJVdCIsICJLYSIsICJBdCIsICJIYSIsICJ2dCIsICJKYSIsICJaZSIsICJXYSIsICJ4dCIsICJaYSIsICJRYSIsICJpZSIsICJlaSIsICJLdCIsICJYYSIsICJ0aSIsICJyaSIsICJuaSIsICJvaSIsICJhaSIsICJCciIsICJadCIsICJpaSIsICJzaSIsICJRdCIsICJjaSIsICJYdCIsICJsaSIsICJ1aSIsICJkaSIsICJwaSIsICJtaSIsICJmaSIsICJ5aSIsICJoaSIsICJnaSIsICJ3aSIsICJ2aSIsICJiaSIsICJFaSIsICJDaSIsICJTaSIsICJZciIsICJQaSIsICJraSIsICJBaSIsICJJaSIsICJUaSIsICJSaSIsICJOaSIsICJGaSIsICJNaSIsICJEaSIsICJPaSIsICJDIiwgIkUiLCAiVWUiLCAiZHQiLCAiZXIiLCAiTGkiLCAiamkiLCAiYnQiLCAiSHIiLCAiSnIiLCAiSXQiLCAidHIiLCAiVWkiLCAieGkiLCAiJGkiLCAiUWUiLCAiVmkiLCAiV3IiLCAiS3IiLCAiWnIiLCAidCIsICJHaSIsICJ6aSIsICJ5ciIsICJxaSIsICJYZSIsICJRciIsICJVIiwgIllpIiwgIkJpIiwgIkhpIiwgIkYiLCAiUmUiLCAiWHIiLCAiSmkiLCAieiIsICJXaSIsICJLaSIsICJaaSIsICJnZSIsICJlbiIsICJyciIsICJRaSIsICIkdCIsICJ0biIsICJYaSIsICJjb25uZWN0VG9DaGlsZCIsICJWdCIsICJlcyIsICJLIiwgIm5uIiwgIm9uIiwgImFuIiwgInRzIiwgInJzIiwgInNuIiwgIlpjIiwgImNuIiwgIkplIiwgIkgiLCAibG4iLCAiV2UiLCAibnMiLCAidW4iLCAib3MiLCAiYXMiLCAicHQiLCAiZG4iLCAiaXMiLCAicG4iLCAic3MiLCAiR3QiLCAiY3MiLCAibHMiLCAibW4iLCAidXMiLCAiX24iLCAieW4iLCAid2UiLCAiaG4iLCAiZ24iLCAiYWUiLCAid24iLCAidHQiLCAiZHMiLCAicHMiLCAibXMiLCAiRGUiLCAidm4iLCAiZnMiLCAiVCIsICJfcyIsICJtdCIsICJibiIsICJFdCIsICJFbiIsICJmdCIsICJ5cyIsICJDbiIsICJXIiwgImJlIiwgImhzIiwgImdzIiwgIkkiLCAiTyIsICJTIiwgInEiLCAiX3QiLCAidmUiLCAic2UiLCAiTmUiLCAiZGUiLCAiRmUiLCAiU24iLCAiUG4iLCAid3MiLCAidnMiLCAicnQiLCAia24iLCAiYnMiLCAiRXMiLCAibWUiLCAiT2UiLCAiQ3MiLCAiU3MiLCAiUHMiLCAia3MiLCAiQWUiLCAiQmUiLCAiQXMiLCAiQW4iLCAiSXMiLCAiVHMiLCAibnIiLCAiUnMiLCAiTnMiLCAiRnMiLCAiSW4iLCAiVG4iLCAiTXMiLCAiUm4iLCAiRHMiLCAiT3MiLCAiTm4iLCAiVHQiLCAiTHMiLCAianMiLCAib3IiLCAiVXMiLCAiRm4iLCAieHMiLCAiJHMiLCAiX2UiLCAiUnQiLCAiVnMiLCAiTW4iLCAiR3MiLCAiQnMiLCAienMiLCAicXMiLCAiT24iLCAiRG4iLCAiayIsICJhciIsICJZcyIsICJIcyIsICJKcyIsICJXcyIsICJWIiwgIkxuIiwgIktzIiwgIlpzIiwgImlyIiwgIlFzIiwgIlhzIiwgIlEiLCAic3IiLCAiZWMiLCAidGMiLCAiY3IiLCAiTCIsICJyYyIsICJuYyIsICJvYyIsICJhYyIsICJjYyIsICJpYyIsICJzYyIsICJsYyIsICJ1YyIsICJkYyIsICJFZSIsICJwYyIsICJmYyIsICJtYyIsICJ5YyIsICJwZSIsICJoYyIsICJqbiIsICJnYyIsICJ3YyIsICJ2YyIsICJiYyIsICJjZSIsICJFYyIsICJDYyIsICJTYyIsICJKIiwgImxyIiwgInJlIiwgIk50IiwgIkN0IiwgIlBjIiwgImtjIiwgIkFjIiwgInVyIiwgIkljIiwgIlVuIiwgInhlIiwgIlRjIiwgInhuIiwgImRyIiwgInllIiwgIkxlIiwgIlJjIiwgIk5jIiwgIkZjIiwgIk9jIiwgIk1jIiwgIkRjIiwgIkxjIiwgIiRuIiwgImpjIiwgIlVjIiwgInhjIiwgIiRjIiwgIlZjIiwgIkdjIiwgInByIiwgInpjIiwgInFjIiwgIkJjIiwgIm1yIiwgImZyIiwgIlgiLCAiZWUiLCAibmUiLCAiX3IiLCAidXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzIiwgImZvcm1DYWxsYmFja3MiLCAidXNlUGF5bWVudFJlcXVlc3RzIiwgIm9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzIiwgInNldFBheW1lbnRSZXF1ZXN0cyIsICJvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCIsICJ1c2VDYWxsYmFjayIsICJwYXltZW50UmVxdWVzdHMyIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAic3RyaXBlTGlua0N0cmwiLCAic2V0U3RyaXBlTGlua0N0cmwiLCAibG9vcENvbmZpZyIsICJzZXRMb29wQ29uZmlnIiwgImFpcndhbGxleCIsICJzZXRBaXJ3YWxsZXgiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJmb3JtIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJGcmFnbWVudCIsICJjaGlsZHJlblByb3BzIl0KfQo=
7647
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDA0fX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogYXMgeiQxIH0gZnJvbSAnem9kJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBjb25uZWN0VG9DaGlsZCB9IGZyb20gJ3BlbnBhbCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsganN4LCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0L2pzeC1ydW50aW1lJztcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8sIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicG9ja3l0UGF5cGFsXCJdID0gXCJwb2NreXQtcGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgU3VibWl0TWV0aG9kczJbXCJwYXlwYWxcIl0gPSBcInBheXBhbFwiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xudmFyIEZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEZpZWxkTmFtZTIpID0+IHtcbiAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiTEFTVF9OQU1FXCJdID0gXCJsYXN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0geiQxLnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNERV9CUklER0VcIl0gPSBcImNkZS1icmlkZ2VcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xueiQxLm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gIGN2YzogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKCksXG4gIG9iZnVzY2F0ZWRWYWx1ZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImFkZHJlc3NcIiAvKiBBRERSRVNTICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmcsXG4gIHBheW1lbnRSb3V0ZUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogbnVsbE9yVW5kZWZPciQxKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfbGFuZ3VhZ2U6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpLFxuICBwb3N0X2NoZWNrb3V0X3JlZGlyZWN0X3RvOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzJDEgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMkMShDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKSxcbiAgcHJvY2Vzc29yc191c2VkOiBudWxsT3JVbmRlZk9yKHokMS5hcnJheSh6JDEuc3RyaW5nKCkpKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKSxcbiAgZmluYWxfZmVhdHVyZV9yb2xsb3V0X3NldHRpbmdzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFByaWNlUXR5ID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQ2FydEluZm8gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcGF5bWVudF9yb3V0ZV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgdXNlX3VuaWZpZWRfY2NfZmxvdzogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBDYXJ0SW5mby5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogbnVsbE9yVW5kZWZPcih6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXJyb3JfY29kZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGV2ZW50czogeiQxLmFycmF5KFxuICAgIHokMS5vYmplY3Qoe1xuICAgICAgZXZlbnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgICAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgICBwcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgICAgIGNvbnRleHRfcHJvcGVydGllczogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbiAgICB9KVxuICApXG59KTtcbnokMS5hbnkoKS5vcHRpb25hbCgpO1xueiQxLm9iamVjdCh7XG4gIGRldmljZV90b2tlbjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe30pO1xueiQxLm9iamVjdCh7XG4gIF91bmlmaWVkX2NjX2FjdGlvbl9uYW1lOiB6JDEuc3RyaW5nKCksXG4gIF91bmlmaWVkX2NjX3BjY3NfaWQ6IHokMS5zdHJpbmcoKVxufSkuY2F0Y2hhbGwoeiQxLmFueSgpKTtcblxuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7Y2hhbGsuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5mdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xudmFyIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcblxudmFyIHRpbWVvdXRQcm92aWRlciA9IHtcbiAgICBzZXRUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuXG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuXG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyKSk7XG5cbnZhciBhc3luY1NjaGVkdWxlciA9IG5ldyBBc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbik7XG5cbnZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cblxuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGluaXQpO1xufVxuXG52YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbnokMS5lbnVtKFtcImRldlwiLCBcInN0Z1wiLCBcInByb2RcIl0pO1xuY29uc3QgY29ubnRvQmFzZVVybHMgPSB7XG4gIHByb2Q6IFwiaHR0cHM6Ly9jb25udG8uZ2V0b3BlbnBheS5jb21cIixcbiAgc3RnOiBcImh0dHBzOi8vY29ubnRvLm9wZW5wYXlzdGFnaW5nLmNvbVwiLFxuICBkZXY6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDAwXCJcbn07XG5jb25zdCBnZXRDb25udG9VcmwgPSAoZW52KSA9PiB7XG4gIHJldHVybiBjb25udG9CYXNlVXJsc1tlbnZdO1xufTtcblxuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt2YWx1ZX1gKTtcbn1cbmNvbnN0IGdldFdpbmRvd1NhZmUgPSAoKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICByZXR1cm4gd2luZG93O1xufTtcblxuY29uc3QgbWV0cmljc1B1Ymxpc2hlciA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG5jb25zdCBNRVRSSUNTX1FVRVVFX0tFWSA9IFwib3BfbWV0cmljc19xdWV1ZVwiO1xuY29uc3QgTUFYX1JFVFJZX0FUVEVNUFRTID0gMztcbmNvbnN0IEJBVENIX1NJWkUgPSAzO1xuY29uc3QgQkFUQ0hfSU5URVJWQUxfTVMgPSAxZTM7XG5jb25zdCB7IGxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcIm9wLW1ldHJpY3NcIik7XG5jbGFzcyBNZXRyaWNzUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gICAgdGhpcy5wcm9jZXNzaW5nUXVldWUgPSBmYWxzZTtcbiAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwO1xuICAgIHRoaXMub2ZmbGluZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgbG9nX18oXCJOZXR3b3JrIG9mZmxpbmUsIG1ldHJpY3Mgd2lsbCBiZSBxdWV1ZWRcIik7XG4gICAgICB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH07XG4gICAgdGhpcy5vbmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIGxvZ19fKFwiTmV0d29yayBvbmxpbmUsIHByb2Nlc3NpbmcgbWV0cmljcyBxdWV1ZVwiKTtcbiAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfTtcbiAgICB0aGlzLmxvYWRRdWV1ZUZyb21TdG9yYWdlKCk7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib2ZmbGluZVwiLCB0aGlzLm9mZmxpbmVMaXN0ZW5lcik7XG4gICAgZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KGV2ZW50TmFtZSwgcHJvcGVydGllcywgY29udGV4dFByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50TmFtZSxcbiAgICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMgfHwge30sXG4gICAgICBjb250ZXh0UHJvcGVydGllczogY29udGV4dFByb3BlcnRpZXMgfHwge30sXG4gICAgICBub25jZTogdjQoKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGRhdGV0aW1lOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhdHRlbXB0Q291bnQ6IDAsXG4gICAgICB0aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50OiB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA/IERhdGUubm93KCkgLSB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA6IDBcbiAgICB9O1xuICAgIHRoaXMubGFzdEV2ZW50VGltZXN0YW1wID0gZXZlbnQudGltZXN0YW1wO1xuICAgIHRoaXMucXVldWUucHVzaChldmVudCk7XG4gICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gIH1cbiAgbG9hZFF1ZXVlRnJvbVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZFF1ZXVlID0gZ2V0V2luZG93U2FmZSgpPy5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0oTUVUUklDU19RVUVVRV9LRVkpO1xuICAgICAgaWYgKHN0b3JlZFF1ZXVlKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSBKU09OLnBhcnNlKHN0b3JlZFF1ZXVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgdGhpcy5zYXZlUXVldWVUb1N0b3JhZ2UoKTtcbiAgICB9XG4gIH1cbiAgc2F2ZVF1ZXVlVG9TdG9yYWdlKCkge1xuICAgIGdldFdpbmRvd1NhZmUoKT8ubG9jYWxTdG9yYWdlLnNldEl0ZW0oTUVUUklDU19RVUVVRV9LRVksIEpTT04uc3RyaW5naWZ5KHRoaXMucXVldWUpKTtcbiAgfVxuICBzY2hlZHVsZUJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICBjb25zdCBzYWZlV2luZG93ID0gZ2V0V2luZG93U2FmZSgpO1xuICAgIGlmIChzYWZlV2luZG93ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQpIHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gc2FmZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICAgfSwgQkFUQ0hfSU5URVJWQUxfTVMpO1xuICAgIH1cbiAgfVxuICBjYW5jZWxCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgaWYgKHRoaXMuYmF0Y2hUaW1lb3V0KSB7XG4gICAgICBnZXRXaW5kb3dTYWZlKCk/LmNsZWFyVGltZW91dCh0aGlzLmJhdGNoVGltZW91dCk7XG4gICAgICB0aGlzLmJhdGNoVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmICghbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9IHRydWU7XG4gICAgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBzZW5kQmF0Y2goKSB7XG4gICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGV4dCA9IG1ldHJpY3NQdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgIGxvZ19fKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhdGNoID0gdGhpcy5xdWV1ZS5zbGljZSgwLCBCQVRDSF9TSVpFKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmF0Y2hQYXlsb2FkID0ge1xuICAgICAgICBldmVudHM6IGJhdGNoLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZlbnRfbmFtZTogZXZlbnQuZXZlbnROYW1lLFxuICAgICAgICAgICAgZGV2aWNlX3Rva2VuOiBjb250ZXh0LmRldmljZVRva2VuLFxuICAgICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIC4uLmNvbnRleHQsXG4gICAgICAgICAgICAgIC4uLmV2ZW50LmNvbnRleHRQcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBub25jZTogZXZlbnQubm9uY2UsXG4gICAgICAgICAgICAgIGRhdGV0aW1lOiBldmVudC5kYXRldGltZSxcbiAgICAgICAgICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAsXG4gICAgICAgICAgICAgIHRpbWVfZGlmZl9mcm9tX3ByZXZpb3VzX2V2ZW50OiBldmVudC50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgICBjaGVja291dF9zZWN1cmVfdG9rZW46IGNvbnRleHQuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgICAgLi4uZXZlbnQucHJvcGVydGllc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICB9O1xuICAgICAgY29uc3QgY29ubnRvVXJsID0gZ2V0Q29ubnRvVXJsKGNvbnRleHQuZW52aXJvbm1lbnQpO1xuICAgICAgY29uc3QgbWV0cmljc1JvdXRlciA9IG5ldyBVUkwoXCIvbWV0cmljcy9wdWJsaWMvY2FwdHVyZVwiLCBjb25udG9VcmwpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChtZXRyaWNzUm91dGVyLnRvU3RyaW5nKCksIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJhdGNoUGF5bG9hZClcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhhbmRsZUZhaWxlZEJhdGNoKGJhdGNoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nX18oXCJFcnJvciBzZW5kaW5nIG1ldHJpY3MgYmF0Y2g6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2goYmF0Y2gpO1xuICAgIH1cbiAgfVxuICBoYW5kbGVGYWlsZWRCYXRjaChiYXRjaCkge1xuICAgIGJhdGNoLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5hdHRlbXB0Q291bnQrKztcbiAgICB9KTtcbiAgICBjb25zdCBldmVudHNUb0tlZXAgPSBiYXRjaC5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5hdHRlbXB0Q291bnQgPCBNQVhfUkVUUllfQVRURU1QVFMpO1xuICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLnNsaWNlKGJhdGNoLmxlbmd0aCk7XG4gICAgdGhpcy5xdWV1ZSA9IFsuLi5ldmVudHNUb0tlZXAsIC4uLnRoaXMucXVldWVdO1xuICAgIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKTtcbiAgICBnZXRXaW5kb3dTYWZlKCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvbmxpbmVcIiwgdGhpcy5vbmxpbmVMaXN0ZW5lcik7XG4gICAgdGhpcy5jYW5jZWxCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxufVxuY29uc3QgbWV0cmljc1F1ZXVlID0gbmV3IE1ldHJpY3NRdWV1ZSgpO1xuZ2V0V2luZG93U2FmZSgpPy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgbWV0cmljc1F1ZXVlLnByb2Nlc3NRdWV1ZSgpO1xufSk7XG5cbmNvbnN0IFBheW1lbnRQcm9jZXNzb3IgPSB6JDEuZW51bShbXCJzdHJpcGVcIiwgXCJhaXJ3YWxsZXhcIiwgXCJhdXRob3JpemVfbmV0XCJdKTtcbih7XG4gIHByb2Nlc3NvcjogUGF5bWVudFByb2Nlc3Nvci5FbnVtLnN0cmlwZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59KTtcblxueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xueiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImxvb3BcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImNyeXB0b1wiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgZW50aXR5X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgYXBpX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gICAgc3VwcG9ydGVkX2N1cnJlbmNpZXM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICAgIGVudmlyb25tZW50OiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xudmFyIFBheUluRmFpbGVkID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5GYWlsZWQyKSA9PiB7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9CQUxBTkNFXCJdID0gXCJpbnN1ZmZpY2llbnRCYWxhbmNlXCI7XG4gIFBheUluRmFpbGVkMltcIklOU1VGRklDSUVOVF9BVVRIT1JJWkFUSU9OXCJdID0gXCJpbnN1ZmZpY2llbnRBdXRob3JpemF0aW9uXCI7XG4gIFBheUluRmFpbGVkMltcIlNJR05FRF9NRVNTQUdFX1JFUVVJUkVEXCJdID0gXCJzaWduZWRNZXNzYWdlUmVxdWlyZWRcIjtcbiAgUGF5SW5GYWlsZWQyW1wiQ1VTVE9NRVJfQ1JFQVRJT05fRkFJTEVEXCJdID0gXCJjdXN0b21lckNyZWF0aW9uRmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlBBWU1FTlRfRkFJTEVEXCJdID0gXCJwYXltZW50RmFpbGVkXCI7XG4gIFBheUluRmFpbGVkMltcIlRSQU5TQUNUSU9OX0ZBSUxFRFwiXSA9IFwidHJhbnNhY3Rpb25GYWlsZWRcIjtcbiAgcmV0dXJuIFBheUluRmFpbGVkMjtcbn0pKFBheUluRmFpbGVkIHx8IHt9KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJQUk9DRVNTSU5HX1BBWU1FTlRcIl0gPSBcInByb2Nlc3NpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfUEFZTUVOVFwiXSA9IFwiY3JlYXRpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19QQVlNRU5UXCJdID0gXCJjb25maXJtaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTVBMRVRFXCJdID0gXCJjb21wbGV0ZVwiO1xuICBQYXlJblN0YXRlMltcIkFVVEhPUklaRURcIl0gPSBcImF1dGhvcml6ZWRcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbmNvbnN0IExPT1BfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIGNvbmZpZzogbnVsbCxcbiAgd2lkZ2V0OiBudWxsXG59O1xueiQxLm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IFJlcXVpcmVkU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIFtcImxvb3BGaXJzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wTGFzdE5hbWVcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJsb29wRW1haWxcIl06IE9wdGlvbmFsU3RyaW5nLFxuICBbRmllbGROYW1lLlBST01PVElPTl9DT0RFXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7IGNsaWVudF9pZDogeiQxLnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvYCwgYmFzZVVybCk7XG4gIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZztcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiB1cmwudG9TdHJpbmcoKSxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmNvbnN0IGdyID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCBWbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIEduID0geiQxLmFycmF5KFZuKSwgem4gPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgcW4gPSB6JDEuYXJyYXkoem4pLCBCbiA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgU3QgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIEJuW3RdID8/IGU7XG59LCBZbiA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKGUpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgSG4gPSAoZSkgPT4gZS5sZW5ndGggPT09IDEgPyBTdChlWzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7ZS5tYXAoKHIpID0+IGDigKIgJHtTdChyLm1zZyl9YCkuam9pbihgXG5gKX1gLCBKbiA9IChlKSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke2UubWFwKChyKSA9PiBgLSAke3IucGF0aC5qb2luKFwiL1wiKX06ICR7ci5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgWSA9IChlKSA9PiB7XG4gIGlmIChlIGluc3RhbmNlb2YgRXJyb3IpXG4gICAgaWYgKFluKGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IHQgPSBKU09OLnBhcnNlKGUubWVzc2FnZSk7XG4gICAgICByZXR1cm4gR24uc2FmZVBhcnNlKHQpLnN1Y2Nlc3MgPyBIbih0KSA6IHFuLnNhZmVQYXJzZSh0KS5zdWNjZXNzID8gSm4odCkgOiAoY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCksIGUubWVzc2FnZSk7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gU3QoZS5tZXNzYWdlKTtcbiAgaWYgKHR5cGVvZiBlID09IFwib2JqZWN0XCIpXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShlKTtcbiAgICB9IGNhdGNoICh0KSB7XG4gICAgICByZXR1cm4gdCArIFwiXCI7XG4gICAgfVxuICBlbHNlXG4gICAgcmV0dXJuIGUgKyBcIlwiO1xufSwgV24gPSAoZSwgdCwgcikgPT4gKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdCguLi5uKTtcbiAgfSBjYXRjaCAobykge1xuICAgIHIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2V9KTpgLCBvKTtcbiAgICByZXR1cm47XG4gIH1cbn07XG52YXIgJCA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLnBvY2t5dFBheXBhbCA9IFwicG9ja3l0LXBheXBhbFwiLCBlLmFpcndhbGxleEdvb2dsZVBheSA9IFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIiwgZS5haXJ3YWxsZXhBcHBsZVBheSA9IFwiYWlyd2FsbGV4LWFwcGxlLXBheVwiLCBlLmF1dGhvcml6ZW5ldEdvb2dsZVBheSA9IFwiYXV0aG9yaXplbmV0LWdvb2dsZS1wYXlcIiwgZS5hdXRob3JpemVuZXRBcHBsZVBheSA9IFwiYXV0aG9yaXplbmV0LWFwcGxlLXBheVwiLCBlLmxvb3BDcnlwdG8gPSBcImxvb3AtY3J5cHRvXCIsIGUucGF5cGFsID0gXCJwYXlwYWxcIiwgZSkpKCQgfHwge30pO1xueiQxLm5hdGl2ZUVudW0oJCk7IGNvbnN0IE4gPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIFAgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIFIgPSAoZSkgPT4geiQxLm51bGxhYmxlKGUub3B0aW9uYWwoKSk7XG52YXIgbSA9IC8qIEBfX1BVUkVfXyAqLyAoKGUpID0+IChlLkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCBlLkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgZS5FTUFJTCA9IFwiZW1haWxcIiwgZS5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCBlLkNJVFkgPSBcImNpdHlcIiwgZS5TVEFURSA9IFwic3RhdGVcIiwgZS5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIGUuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCBlLlBIT05FID0gXCJwaG9uZVwiLCBlLlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIGUpKShtIHx8IHt9KTtcbmNvbnN0IHdyID0geiQxLm5hdGl2ZUVudW0obSk7XG52YXIgdnIgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCBlLkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgZSkpKHZyIHx8IHt9KTtcbmNvbnN0IGJyID0geiQxLm5hdGl2ZUVudW0odnIpLCBFciA9IHokMS51bmlvbihbd3IsIGJyXSk7XG52YXIgdGUgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5DQVJEID0gXCJjYXJkXCIsIGUuQ0FSRF9OVU1CRVIgPSBcImNhcmQtbnVtYmVyXCIsIGUuQ0FSRF9FWFBJUlkgPSBcImNhcmQtZXhwaXJ5XCIsIGUuQ0FSRF9DVkMgPSBcImNhcmQtY3ZjXCIsIGUuQ0RFX0JSSURHRSA9IFwiY2RlLWJyaWRnZVwiLCBlKSkodGUgfHwge30pO1xuY29uc3QgS24gPSB6JDEubmF0aXZlRW51bSh0ZSksIHN0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBSKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIFpuID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IFAsXG4gIGV4cGlyeTogUCxcbiAgY3ZjOiBQXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IFAsXG4gIGNvbG9yOiBQLFxuICBmb250RmFtaWx5OiBQLFxuICBmb250U2l6ZTogUCxcbiAgZm9udFdlaWdodDogUCxcbiAgbWFyZ2luOiBQLFxuICBwYWRkaW5nOiBQLFxuICBsZXR0ZXJTcGFjaW5nOiBQLFxuICBsaW5lSGVpZ2h0OiBQLFxuICBoaWRlSWNvbjogUFxufSk7XG5jb25zdCBaID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIFFuID0gWi5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgWG4gPSB6JDEub2JqZWN0KHsgdHlwZTogUW4gfSksIGVvID0gWi5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSksIHRvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IGVvLFxuICBlbGVtZW50VHlwZTogYnIsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKSxcbiAgb2JmdXNjYXRlZFZhbHVlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIHJvID0gWi5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgbm8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogcm8sXG4gIG1lc3NhZ2U6IE4sXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBvbyA9IFouZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKSwgYW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogb28sXG4gIGVsZW1lbnRUeXBlOiBFcixcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIGlvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFouZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IE5cbn0pLCBzbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChaLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBOLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBQLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoc3QpXG59KSwgY28gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoWi5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGxvID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFouZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pLCBZZSA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IE4sXG4gIGxhc3ROYW1lOiBOLFxuICBlbWFpbDogTixcbiAgemlwQ29kZTogTixcbiAgY291bnRyeTogTixcbiAgcHJvbW90aW9uQ29kZTogUFxufSksIHVvID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogUCxcbiAgbGFzdE5hbWU6IFAsXG4gIGVtYWlsOiBOLFxuICB6aXBDb2RlOiBOLFxuICBjb3VudHJ5OiBOLFxuICBwcm9tb3Rpb25Db2RlOiBQLFxuICBhZGRyZXNzOiBQLFxuICBjaXR5OiBQLFxuICBzdGF0ZTogUFxufSksIHBvID0gWi5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCBtbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBwbyxcbiAgc2Vzc2lvbklkOiBOLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHN0LFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IFAsXG4gIHBheW1lbnRSb3V0ZUlkOiBQXG59KS5leHRlbmQoWWUuc2hhcGUpLCBmbyA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChaLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksIF9vID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFouZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCB5byA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgWG4sXG4gIHRvLFxuICBubyxcbiAgYW8sXG4gIGlvLFxuICBzbyxcbiAgbW8sXG4gIGZvLFxuICBfbyxcbiAgY28sXG4gIGxvXG5dKSwgaG8gPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogeW8sXG4gIG5vbmNlOiBOLFxuICBmb3JtSWQ6IE4sXG4gIGVsZW1lbnRJZDogTlxufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBOXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogUih6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogUih6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogUih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgJGUgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3NvcnNfdXNlZDogUih6JDEuYXJyYXkoeiQxLnN0cmluZygpKSlcbn0pLCBnbyA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3Qgd28gPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KGdvKVxufSksIHZvID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICB3b1xuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogc3QsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFllLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudF9yb3V0ZV9pZDogUih6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogUih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBzdCxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogWWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiBSKHokMS5zdHJpbmcoKSlcbn0pO1xudmFyIEQgPSAvKiBAX19QVVJFX18gKi8gKChlKSA9PiAoZS5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIGUuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCBlLkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIGUpKShEIHx8IHt9KTtcbmNvbnN0IGJvID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xuY29uc3QgRW8gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLCBDciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogUih6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogUih6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogUih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBDbyA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKCEwKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITEpIH0pXG5dKSwgU28gPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoWm4pLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogUigkZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogUih6JDEuYXJyYXkoQ3IpKSxcbiAgcG9zdF9jaGVja291dF9yZWRpcmVjdF90bzogUih6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9zdWNjZXNzX3Jlc3BvbnNlOiBSKCRlKVxufSksIFNyID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IHt9O1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3IsIG5dKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG8gPSB3ci5wYXJzZShyKTtcbiAgICAgIEFycmF5LmlzQXJyYXkobikgPyB0W29dID0gbiA6IEFycmF5LmlzQXJyYXkobi5fZXJyb3JzKSAmJiAodFtvXSA9IG4uX2Vycm9ycyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KSwgdDtcbn0sIFBvID0geiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KSwga28gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KSwgQW8gPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59LCBjdCA9IGFzeW5jIChlKSA9PiB7XG4gIGZvciAobGV0IHIgPSAwOyByIDwgMTA7IHIrKylcbiAgICB6dCgpIHx8IGF3YWl0IGx0KDUwMCk7XG4gIGlmICghenQoKSlcbiAgICB0aHJvdyBjb25zb2xlLmxvZyhcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpLCBuZXcgRXJyb3IoXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgcmV0dXJuIG5ldyBTdHJpcGUoZSk7XG59LCBJbyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBjdChlKTtcbiAgcmV0dXJuIHtcbiAgICBlbGVtZW50czogci5lbGVtZW50cyh0KSxcbiAgICBzdHJpcGU6IHJcbiAgfTtcbn0sIFRvID0gYXN5bmMgKGUsIHQsIHIsIG4sIG8pID0+IHtcbiAgY29uc3QgaSA9IGF3YWl0IGN0KGUpLCBzID0gQW9bci50b0xvd2VyQ2FzZSgpLnRyaW0oKV07XG4gIHJldHVybiBpLnBheW1lbnRSZXF1ZXN0KHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzdHJpcGUgYWNjb3VudCBjb3VudHJ5IGFzIHNvb24gYXMgd2Ugc3VwcG9ydCBpdFxuICAgIGNvdW50cnk6IFwiVVNcIixcbiAgICBjdXJyZW5jeTogcyxcbiAgICB0b3RhbDoge1xuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIGFtb3VudDogdCxcbiAgICAgIHBlbmRpbmc6IG5cbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgbHQgPSAoZSkgPT4gbmV3IFByb21pc2UoKHQpID0+IHtcbiAgc2V0VGltZW91dCh0LCBlKTtcbn0pLCB6dCA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCBSbyA9IGFzeW5jIChlKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICB0cnkge1xuICAgIGUub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInBheW1lbnRtZXRob2QgRVZUOjogXCIsIG4pLCB0KG4pO1xuICAgIH0pLCBlLm9uKFwidG9rZW5cIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwidG9rZW4gRVZUOjogXCIsIG4pO1xuICAgIH0pLCBlLm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIHIobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIHIobik7XG4gIH1cbn0pLCBObyA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmICghZS5zdHJpcGVfcGsgfHwgIWUuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IGN0KGUuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cChlLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogdC5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyB0LmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiB0LmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIEZvID0gYXN5bmMgKGUpID0+IHtcbiAgdmFyIG8sIGksIHMsIGM7XG4gIGNvbnN0IHIgPSBhd2FpdCAoYXdhaXQgY3QoZS5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKGUuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBlLnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChvID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IG8uc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIGUuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgci5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygoaSA9IHIuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2UpID8/ICgoYyA9IChzID0gci5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IHMubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufSwgTW8gPSAoZSkgPT4gSlNPTi5zdHJpbmdpZnkoZSksIEIgPSAoZSwgdCkgPT4gQXJyYXkuZnJvbShlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChvLCBpKSA9PiB7XG4gIGNvbnN0IHMgPSBpLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIHMgPyB7IC4uLm8sIFtzXTogaS52YWx1ZSB9IDogbztcbn0sIHt9KSwgRG8gPSAoZSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBoby5wYXJzZShlKTtcbiAgfSBjYXRjaCAodCkge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIGUsIHQpLCB0O1xuICB9XG59O1xudmFyIE9vID0gdHlwZW9mIGdsb2JhbFRoaXMgPT0gXCJvYmplY3RcIiA/IGdsb2JhbFRoaXMgOiB0eXBlb2Ygc2VsZiA9PSBcIm9iamVjdFwiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgPT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6IHR5cGVvZiBnbG9iYWwgPT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHt9LCBmZSA9IFwiMS45LjBcIiwgcXQgPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSgtKC4rKSk/JC87XG5mdW5jdGlvbiBMbyhlKSB7XG4gIHZhciB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW2VdKSwgciA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIG4gPSBlLm1hdGNoKHF0KTtcbiAgaWYgKCFuKVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAhMTtcbiAgICB9O1xuICB2YXIgbyA9IHtcbiAgICBtYWpvcjogK25bMV0sXG4gICAgbWlub3I6ICtuWzJdLFxuICAgIHBhdGNoOiArblszXSxcbiAgICBwcmVyZWxlYXNlOiBuWzRdXG4gIH07XG4gIGlmIChvLnByZXJlbGVhc2UgIT0gbnVsbClcbiAgICByZXR1cm4gZnVuY3Rpb24obCkge1xuICAgICAgcmV0dXJuIGwgPT09IGU7XG4gICAgfTtcbiAgZnVuY3Rpb24gaShjKSB7XG4gICAgcmV0dXJuIHIuYWRkKGMpLCAhMTtcbiAgfVxuICBmdW5jdGlvbiBzKGMpIHtcbiAgICByZXR1cm4gdC5hZGQoYyksICEwO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihsKSB7XG4gICAgaWYgKHQuaGFzKGwpKVxuICAgICAgcmV0dXJuICEwO1xuICAgIGlmIChyLmhhcyhsKSlcbiAgICAgIHJldHVybiAhMTtcbiAgICB2YXIgdSA9IGwubWF0Y2gocXQpO1xuICAgIGlmICghdSlcbiAgICAgIHJldHVybiBpKGwpO1xuICAgIHZhciBkID0ge1xuICAgICAgbWFqb3I6ICt1WzFdLFxuICAgICAgbWlub3I6ICt1WzJdLFxuICAgICAgcGF0Y2g6ICt1WzNdLFxuICAgICAgcHJlcmVsZWFzZTogdVs0XVxuICAgIH07XG4gICAgcmV0dXJuIGQucHJlcmVsZWFzZSAhPSBudWxsIHx8IG8ubWFqb3IgIT09IGQubWFqb3IgPyBpKGwpIDogby5tYWpvciA9PT0gMCA/IG8ubWlub3IgPT09IGQubWlub3IgJiYgby5wYXRjaCA8PSBkLnBhdGNoID8gcyhsKSA6IGkobCkgOiBvLm1pbm9yIDw9IGQubWlub3IgPyBzKGwpIDogaShsKTtcbiAgfTtcbn1cbnZhciBVbyA9IExvKGZlKSwgam8gPSBmZS5zcGxpdChcIi5cIilbMF0sIFZlID0gU3ltYm9sLmZvcihcIm9wZW50ZWxlbWV0cnkuanMuYXBpLlwiICsgam8pLCBHZSA9IE9vO1xuZnVuY3Rpb24gRnQoZSwgdCwgciwgbikge1xuICB2YXIgbztcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gITEpO1xuICB2YXIgaSA9IEdlW1ZlXSA9IChvID0gR2VbVmVdKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDoge1xuICAgIHZlcnNpb246IGZlXG4gIH07XG4gIGlmICghbiAmJiBpW2VdKSB7XG4gICAgdmFyIHMgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IEF0dGVtcHRlZCBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIG9mIEFQSTogXCIgKyBlKTtcbiAgICByZXR1cm4gci5lcnJvcihzLnN0YWNrIHx8IHMubWVzc2FnZSksICExO1xuICB9XG4gIGlmIChpLnZlcnNpb24gIT09IGZlKSB7XG4gICAgdmFyIHMgPSBuZXcgRXJyb3IoXCJAb3BlbnRlbGVtZXRyeS9hcGk6IFJlZ2lzdHJhdGlvbiBvZiB2ZXJzaW9uIHZcIiArIGkudmVyc2lvbiArIFwiIGZvciBcIiArIGUgKyBcIiBkb2VzIG5vdCBtYXRjaCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgQVBJIHZcIiArIGZlKTtcbiAgICByZXR1cm4gci5lcnJvcihzLnN0YWNrIHx8IHMubWVzc2FnZSksICExO1xuICB9XG4gIHJldHVybiBpW2VdID0gdCwgci5kZWJ1ZyhcIkBvcGVudGVsZW1ldHJ5L2FwaTogUmVnaXN0ZXJlZCBhIGdsb2JhbCBmb3IgXCIgKyBlICsgXCIgdlwiICsgZmUgKyBcIi5cIiksICEwO1xufVxuZnVuY3Rpb24gemUoZSkge1xuICB2YXIgdCwgciwgbiA9ICh0ID0gR2VbVmVdKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LnZlcnNpb247XG4gIGlmICghKCFuIHx8ICFVbyhuKSkpXG4gICAgcmV0dXJuIChyID0gR2VbVmVdKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByW2VdO1xufVxuZnVuY3Rpb24gTXQoZSwgdCkge1xuICB0LmRlYnVnKFwiQG9wZW50ZWxlbWV0cnkvYXBpOiBVbnJlZ2lzdGVyaW5nIGEgZ2xvYmFsIGZvciBcIiArIGUgKyBcIiB2XCIgKyBmZSArIFwiLlwiKTtcbiAgdmFyIHIgPSBHZVtWZV07XG4gIHIgJiYgZGVsZXRlIHJbZV07XG59XG52YXIgeG8gPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sICRvID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIFZvID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdGhpcy5fbmFtZXNwYWNlID0gdC5uYW1lc3BhY2UgfHwgXCJEaWFnQ29tcG9uZW50TG9nZ2VyXCI7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5kZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBNZShcImRlYnVnXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gTWUoXCJlcnJvclwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGUucHJvdG90eXBlLmluZm8gPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICAgIHRbcl0gPSBhcmd1bWVudHNbcl07XG4gICAgICByZXR1cm4gTWUoXCJpbmZvXCIsIHRoaXMuX25hbWVzcGFjZSwgdCk7XG4gICAgfSwgZS5wcm90b3R5cGUud2FybiA9IGZ1bmN0aW9uKCkge1xuICAgICAgZm9yICh2YXIgdCA9IFtdLCByID0gMDsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKylcbiAgICAgICAgdFtyXSA9IGFyZ3VtZW50c1tyXTtcbiAgICAgIHJldHVybiBNZShcIndhcm5cIiwgdGhpcy5fbmFtZXNwYWNlLCB0KTtcbiAgICB9LCBlLnByb3RvdHlwZS52ZXJib3NlID0gZnVuY3Rpb24oKSB7XG4gICAgICBmb3IgKHZhciB0ID0gW10sIHIgPSAwOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgICAgcmV0dXJuIE1lKFwidmVyYm9zZVwiLCB0aGlzLl9uYW1lc3BhY2UsIHQpO1xuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIE1lKGUsIHQsIHIpIHtcbiAgdmFyIG4gPSB6ZShcImRpYWdcIik7XG4gIGlmIChuKVxuICAgIHJldHVybiByLnVuc2hpZnQodCksIG5bZV0uYXBwbHkobiwgJG8oW10sIHhvKHIpLCAhMSkpO1xufVxudmFyIEc7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuTk9ORSA9IDBdID0gXCJOT05FXCIsIGVbZS5FUlJPUiA9IDMwXSA9IFwiRVJST1JcIiwgZVtlLldBUk4gPSA1MF0gPSBcIldBUk5cIiwgZVtlLklORk8gPSA2MF0gPSBcIklORk9cIiwgZVtlLkRFQlVHID0gNzBdID0gXCJERUJVR1wiLCBlW2UuVkVSQk9TRSA9IDgwXSA9IFwiVkVSQk9TRVwiLCBlW2UuQUxMID0gOTk5OV0gPSBcIkFMTFwiO1xufSkoRyB8fCAoRyA9IHt9KSk7XG5mdW5jdGlvbiBHbyhlLCB0KSB7XG4gIGUgPCBHLk5PTkUgPyBlID0gRy5OT05FIDogZSA+IEcuQUxMICYmIChlID0gRy5BTEwpLCB0ID0gdCB8fCB7fTtcbiAgZnVuY3Rpb24gcihuLCBvKSB7XG4gICAgdmFyIGkgPSB0W25dO1xuICAgIHJldHVybiB0eXBlb2YgaSA9PSBcImZ1bmN0aW9uXCIgJiYgZSA+PSBvID8gaS5iaW5kKHQpIDogZnVuY3Rpb24oKSB7XG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGVycm9yOiByKFwiZXJyb3JcIiwgRy5FUlJPUiksXG4gICAgd2FybjogcihcIndhcm5cIiwgRy5XQVJOKSxcbiAgICBpbmZvOiByKFwiaW5mb1wiLCBHLklORk8pLFxuICAgIGRlYnVnOiByKFwiZGVidWdcIiwgRy5ERUJVRyksXG4gICAgdmVyYm9zZTogcihcInZlcmJvc2VcIiwgRy5WRVJCT1NFKVxuICB9O1xufVxudmFyIHpvID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBxbyA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBCbyA9IFwiZGlhZ1wiLCBudCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgZnVuY3Rpb24gdChvKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gW10sIHMgPSAwOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKVxuICAgICAgICAgICAgaVtzXSA9IGFyZ3VtZW50c1tzXTtcbiAgICAgICAgICB2YXIgYyA9IHplKFwiZGlhZ1wiKTtcbiAgICAgICAgICBpZiAoYylcbiAgICAgICAgICAgIHJldHVybiBjW29dLmFwcGx5KGMsIHFvKFtdLCB6byhpKSwgITEpKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciByID0gdGhpcywgbiA9IGZ1bmN0aW9uKG8sIGkpIHtcbiAgICAgICAgdmFyIHMsIGMsIGw7XG4gICAgICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSB7IGxvZ0xldmVsOiBHLklORk8gfSksIG8gPT09IHIpIHtcbiAgICAgICAgICB2YXIgdSA9IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgZGlhZyBhcyB0aGUgbG9nZ2VyIGZvciBpdHNlbGYuIFBsZWFzZSB1c2UgYSBEaWFnTG9nZ2VyIGltcGxlbWVudGF0aW9uIGxpa2UgQ29uc29sZURpYWdMb2dnZXIgb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb25cIik7XG4gICAgICAgICAgcmV0dXJuIHIuZXJyb3IoKHMgPSB1LnN0YWNrKSAhPT0gbnVsbCAmJiBzICE9PSB2b2lkIDAgPyBzIDogdS5tZXNzYWdlKSwgITE7XG4gICAgICAgIH1cbiAgICAgICAgdHlwZW9mIGkgPT0gXCJudW1iZXJcIiAmJiAoaSA9IHtcbiAgICAgICAgICBsb2dMZXZlbDogaVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGQgPSB6ZShcImRpYWdcIiksIF8gPSBHbygoYyA9IGkubG9nTGV2ZWwpICE9PSBudWxsICYmIGMgIT09IHZvaWQgMCA/IGMgOiBHLklORk8sIG8pO1xuICAgICAgICBpZiAoZCAmJiAhaS5zdXBwcmVzc092ZXJyaWRlTWVzc2FnZSkge1xuICAgICAgICAgIHZhciBwID0gKGwgPSBuZXcgRXJyb3IoKS5zdGFjaykgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IFwiPGZhaWxlZCB0byBnZW5lcmF0ZSBzdGFja3RyYWNlPlwiO1xuICAgICAgICAgIGQud2FybihcIkN1cnJlbnQgbG9nZ2VyIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZnJvbSBcIiArIHApLCBfLndhcm4oXCJDdXJyZW50IGxvZ2dlciB3aWxsIG92ZXJ3cml0ZSBvbmUgYWxyZWFkeSByZWdpc3RlcmVkIGZyb20gXCIgKyBwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRnQoXCJkaWFnXCIsIF8sIHIsICEwKTtcbiAgICAgIH07XG4gICAgICByLnNldExvZ2dlciA9IG4sIHIuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBNdChCbywgcik7XG4gICAgICB9LCByLmNyZWF0ZUNvbXBvbmVudExvZ2dlciA9IGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWbyhvKTtcbiAgICAgIH0sIHIudmVyYm9zZSA9IHQoXCJ2ZXJib3NlXCIpLCByLmRlYnVnID0gdChcImRlYnVnXCIpLCByLmluZm8gPSB0KFwiaW5mb1wiKSwgci53YXJuID0gdChcIndhcm5cIiksIHIuZXJyb3IgPSB0KFwiZXJyb3JcIik7XG4gICAgfVxuICAgIHJldHVybiBlLmluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGU7XG4gIH0oKVxuKTtcbmZ1bmN0aW9uIFlvKGUpIHtcbiAgcmV0dXJuIFN5bWJvbC5mb3IoZSk7XG59XG52YXIgSG8gPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdmFyIHIgPSB0aGlzO1xuICAgICAgci5fY3VycmVudENvbnRleHQgPSB0ID8gbmV3IE1hcCh0KSA6IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksIHIuZ2V0VmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHJldHVybiByLl9jdXJyZW50Q29udGV4dC5nZXQobik7XG4gICAgICB9LCByLnNldFZhbHVlID0gZnVuY3Rpb24obiwgbykge1xuICAgICAgICB2YXIgaSA9IG5ldyBlKHIuX2N1cnJlbnRDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGkuX2N1cnJlbnRDb250ZXh0LnNldChuLCBvKSwgaTtcbiAgICAgIH0sIHIuZGVsZXRlVmFsdWUgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciBvID0gbmV3IGUoci5fY3VycmVudENvbnRleHQpO1xuICAgICAgICByZXR1cm4gby5fY3VycmVudENvbnRleHQuZGVsZXRlKG4pLCBvO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH0oKVxuKSwgSm8gPSBuZXcgSG8oKSwgV28gPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgaSA9IFtdLCBzO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIHMgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChzKSB0aHJvdyBzLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIEtvID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIFpvID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5hY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBKbztcbiAgICB9LCBlLnByb3RvdHlwZS53aXRoID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgZm9yICh2YXIgbyA9IFtdLCBpID0gMzsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgICAgb1tpIC0gM10gPSBhcmd1bWVudHNbaV07XG4gICAgICByZXR1cm4gci5jYWxsLmFwcGx5KHIsIEtvKFtuXSwgV28obyksICExKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiByO1xuICAgIH0sIGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBRbyA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBlW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghcikgcmV0dXJuIGU7XG4gIHZhciBuID0gci5jYWxsKGUpLCBvLCBpID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7ICh0ID09PSB2b2lkIDAgfHwgdC0tID4gMCkgJiYgIShvID0gbi5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKG8udmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgbyAmJiAhby5kb25lICYmIChyID0gbi5yZXR1cm4pICYmIHIuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufSwgWG8gPSBmdW5jdGlvbihlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBpOyBuIDwgbzsgbisrKVxuICAgIChpIHx8ICEobiBpbiB0KSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGlbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufSwgeXQgPSBcImNvbnRleHRcIiwgZWEgPSBuZXcgWm8oKSwgRHQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZSB8fCAodGhpcy5faW5zdGFuY2UgPSBuZXcgZSgpKSwgdGhpcy5faW5zdGFuY2U7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gRnQoeXQsIHQsIG50Lmluc3RhbmNlKCkpO1xuICAgIH0sIGUucHJvdG90eXBlLmFjdGl2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRleHRNYW5hZ2VyKCkuYWN0aXZlKCk7XG4gICAgfSwgZS5wcm90b3R5cGUud2l0aCA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICAgIGZvciAodmFyIG8sIGkgPSBbXSwgcyA9IDM7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspXG4gICAgICAgIGlbcyAtIDNdID0gYXJndW1lbnRzW3NdO1xuICAgICAgcmV0dXJuIChvID0gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKSkud2l0aC5hcHBseShvLCBYbyhbdCwgciwgbl0sIFFvKGkpLCAhMSkpO1xuICAgIH0sIGUucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0Q29udGV4dE1hbmFnZXIoKS5iaW5kKHQsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRDb250ZXh0TWFuYWdlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHplKHl0KSB8fCBlYTtcbiAgICB9LCBlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLl9nZXRDb250ZXh0TWFuYWdlcigpLmRpc2FibGUoKSwgTXQoeXQsIG50Lmluc3RhbmNlKCkpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgUHQ7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuTk9ORSA9IDBdID0gXCJOT05FXCIsIGVbZS5TQU1QTEVEID0gMV0gPSBcIlNBTVBMRURcIjtcbn0pKFB0IHx8IChQdCA9IHt9KSk7XG52YXIgUHIgPSBcIjAwMDAwMDAwMDAwMDAwMDBcIiwga3IgPSBcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsIHRhID0ge1xuICB0cmFjZUlkOiBrcixcbiAgc3BhbklkOiBQcixcbiAgdHJhY2VGbGFnczogUHQuTk9ORVxufSwgVWUgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0KSB7XG4gICAgICB0ID09PSB2b2lkIDAgJiYgKHQgPSB0YSksIHRoaXMuX3NwYW5Db250ZXh0ID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnNwYW5Db250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3BhbkNvbnRleHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZEV2ZW50ID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmFkZExpbmtzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUudXBkYXRlTmFtZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5pc1JlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICExO1xuICAgIH0sIGUucHJvdG90eXBlLnJlY29yZEV4Y2VwdGlvbiA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlO1xuICB9KClcbiksIE90ID0gWW8oXCJPcGVuVGVsZW1ldHJ5IENvbnRleHQgS2V5IFNQQU5cIik7XG5mdW5jdGlvbiBMdChlKSB7XG4gIHJldHVybiBlLmdldFZhbHVlKE90KSB8fCB2b2lkIDA7XG59XG5mdW5jdGlvbiByYSgpIHtcbiAgcmV0dXJuIEx0KER0LmdldEluc3RhbmNlKCkuYWN0aXZlKCkpO1xufVxuZnVuY3Rpb24gVXQoZSwgdCkge1xuICByZXR1cm4gZS5zZXRWYWx1ZShPdCwgdCk7XG59XG5mdW5jdGlvbiBuYShlKSB7XG4gIHJldHVybiBlLmRlbGV0ZVZhbHVlKE90KTtcbn1cbmZ1bmN0aW9uIG9hKGUsIHQpIHtcbiAgcmV0dXJuIFV0KGUsIG5ldyBVZSh0KSk7XG59XG5mdW5jdGlvbiBBcihlKSB7XG4gIHZhciB0O1xuICByZXR1cm4gKHQgPSBMdChlKSkgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5zcGFuQ29udGV4dCgpO1xufVxudmFyIGFhID0gL14oWzAtOWEtZl17MzJ9KSQvaSwgaWEgPSAvXlswLTlhLWZdezE2fSQvaTtcbmZ1bmN0aW9uIHNhKGUpIHtcbiAgcmV0dXJuIGFhLnRlc3QoZSkgJiYgZSAhPT0ga3I7XG59XG5mdW5jdGlvbiBjYShlKSB7XG4gIHJldHVybiBpYS50ZXN0KGUpICYmIGUgIT09IFByO1xufVxuZnVuY3Rpb24gSXIoZSkge1xuICByZXR1cm4gc2EoZS50cmFjZUlkKSAmJiBjYShlLnNwYW5JZCk7XG59XG5mdW5jdGlvbiBsYShlKSB7XG4gIHJldHVybiBuZXcgVWUoZSk7XG59XG52YXIgaHQgPSBEdC5nZXRJbnN0YW5jZSgpLCBUciA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgbiA9PT0gdm9pZCAwICYmIChuID0gaHQuYWN0aXZlKCkpO1xuICAgICAgdmFyIG8gPSAhIShyICE9IG51bGwgJiYgci5yb290KTtcbiAgICAgIGlmIChvKVxuICAgICAgICByZXR1cm4gbmV3IFVlKCk7XG4gICAgICB2YXIgaSA9IG4gJiYgQXIobik7XG4gICAgICByZXR1cm4gdWEoaSkgJiYgSXIoaSkgPyBuZXcgVWUoaSkgOiBuZXcgVWUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBvKSB7XG4gICAgICB2YXIgaSwgcywgYztcbiAgICAgIGlmICghKGFyZ3VtZW50cy5sZW5ndGggPCAyKSkge1xuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gYyA9IHIgOiBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gKGkgPSByLCBjID0gbikgOiAoaSA9IHIsIHMgPSBuLCBjID0gbyk7XG4gICAgICAgIHZhciBsID0gcyA/PyBodC5hY3RpdmUoKSwgdSA9IHRoaXMuc3RhcnRTcGFuKHQsIGksIGwpLCBkID0gVXQobCwgdSk7XG4gICAgICAgIHJldHVybiBodC53aXRoKGQsIGMsIHZvaWQgMCwgdSk7XG4gICAgICB9XG4gICAgfSwgZTtcbiAgfSgpXG4pO1xuZnVuY3Rpb24gdWEoZSkge1xuICByZXR1cm4gdHlwZW9mIGUgPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgZS5zcGFuSWQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZS50cmFjZUlkID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGUudHJhY2VGbGFncyA9PSBcIm51bWJlclwiO1xufVxudmFyIGRhID0gbmV3IFRyKCksIHBhID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCwgciwgbiwgbykge1xuICAgICAgdGhpcy5fcHJvdmlkZXIgPSB0LCB0aGlzLm5hbWUgPSByLCB0aGlzLnZlcnNpb24gPSBuLCB0aGlzLm9wdGlvbnMgPSBvO1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc3RhcnRTcGFuID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldFRyYWNlcigpLnN0YXJ0U3Bhbih0LCByLCBuKTtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBvKSB7XG4gICAgICB2YXIgaSA9IHRoaXMuX2dldFRyYWNlcigpO1xuICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoaS5zdGFydEFjdGl2ZVNwYW4sIGksIGFyZ3VtZW50cyk7XG4gICAgfSwgZS5wcm90b3R5cGUuX2dldFRyYWNlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlKVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGU7XG4gICAgICB2YXIgdCA9IHRoaXMuX3Byb3ZpZGVyLmdldERlbGVnYXRlVHJhY2VyKHRoaXMubmFtZSwgdGhpcy52ZXJzaW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHQgPyAodGhpcy5fZGVsZWdhdGUgPSB0LCB0aGlzLl9kZWxlZ2F0ZSkgOiBkYTtcbiAgICB9LCBlO1xuICB9KClcbiksIG1hID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5nZXRUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICByZXR1cm4gbmV3IFRyKCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBmYSA9IG5ldyBtYSgpLCBCdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIG87XG4gICAgICByZXR1cm4gKG8gPSB0aGlzLmdldERlbGVnYXRlVHJhY2VyKHQsIHIsIG4pKSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogbmV3IHBhKHRoaXMsIHQsIHIsIG4pO1xuICAgIH0sIGUucHJvdG90eXBlLmdldERlbGVnYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdDtcbiAgICAgIHJldHVybiAodCA9IHRoaXMuX2RlbGVnYXRlKSAhPT0gbnVsbCAmJiB0ICE9PSB2b2lkIDAgPyB0IDogZmE7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0RGVsZWdhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZSA9IHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0RGVsZWdhdGVUcmFjZXIgPSBmdW5jdGlvbih0LCByLCBuKSB7XG4gICAgICB2YXIgbztcbiAgICAgIHJldHVybiAobyA9IHRoaXMuX2RlbGVnYXRlKSA9PT0gbnVsbCB8fCBvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvLmdldFRyYWNlcih0LCByLCBuKTtcbiAgICB9LCBlO1xuICB9KClcbiksIHFlO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLklOVEVSTkFMID0gMF0gPSBcIklOVEVSTkFMXCIsIGVbZS5TRVJWRVIgPSAxXSA9IFwiU0VSVkVSXCIsIGVbZS5DTElFTlQgPSAyXSA9IFwiQ0xJRU5UXCIsIGVbZS5QUk9EVUNFUiA9IDNdID0gXCJQUk9EVUNFUlwiLCBlW2UuQ09OU1VNRVIgPSA0XSA9IFwiQ09OU1VNRVJcIjtcbn0pKHFlIHx8IChxZSA9IHt9KSk7XG52YXIgbGU7XG4oZnVuY3Rpb24oZSkge1xuICBlW2UuVU5TRVQgPSAwXSA9IFwiVU5TRVRcIiwgZVtlLk9LID0gMV0gPSBcIk9LXCIsIGVbZS5FUlJPUiA9IDJdID0gXCJFUlJPUlwiO1xufSkobGUgfHwgKGxlID0ge30pKTtcbnZhciBDZSA9IER0LmdldEluc3RhbmNlKCksIGd0ID0gXCJ0cmFjZVwiLCBfYSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciA9IG5ldyBCdCgpLCB0aGlzLndyYXBTcGFuQ29udGV4dCA9IGxhLCB0aGlzLmlzU3BhbkNvbnRleHRWYWxpZCA9IElyLCB0aGlzLmRlbGV0ZVNwYW4gPSBuYSwgdGhpcy5nZXRTcGFuID0gTHQsIHRoaXMuZ2V0QWN0aXZlU3BhbiA9IHJhLCB0aGlzLmdldFNwYW5Db250ZXh0ID0gQXIsIHRoaXMuc2V0U3BhbiA9IFV0LCB0aGlzLnNldFNwYW5Db250ZXh0ID0gb2E7XG4gICAgfVxuICAgIHJldHVybiBlLmdldEluc3RhbmNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IGUoKSksIHRoaXMuX2luc3RhbmNlO1xuICAgIH0sIGUucHJvdG90eXBlLnNldEdsb2JhbFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHIgPSBGdChndCwgdGhpcy5fcHJveHlUcmFjZXJQcm92aWRlciwgbnQuaW5zdGFuY2UoKSk7XG4gICAgICByZXR1cm4gciAmJiB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyLnNldERlbGVnYXRlKHQpLCByO1xuICAgIH0sIGUucHJvdG90eXBlLmdldFRyYWNlclByb3ZpZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gemUoZ3QpIHx8IHRoaXMuX3Byb3h5VHJhY2VyUHJvdmlkZXI7XG4gICAgfSwgZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgcikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhY2VyUHJvdmlkZXIoKS5nZXRUcmFjZXIodCwgcik7XG4gICAgfSwgZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgTXQoZ3QsIG50Lmluc3RhbmNlKCkpLCB0aGlzLl9wcm94eVRyYWNlclByb3ZpZGVyID0gbmV3IEJ0KCk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBQZSA9IF9hLmdldEluc3RhbmNlKCk7XG5jb25zdCB5YSA9IGFzeW5jIChlKSA9PiB7XG4gIGlmICh0eXBlb2YgZSAhPSBcIm9iamVjdFwiIHx8ICFlKSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IHsgdHlwZTogXCJwaW5nXCIgfSwgciA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgICBpZiAociAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShyKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHQpLCAhMTtcbiAgfVxufSwgaGEgPSAoZSwgdCkgPT4gISFlICYmIHQ7XG5mdW5jdGlvbiBnYShlLCB0KSB7XG4gIHZhciByID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICByID8gcihlLCB0KSA6IGUuX19wcm90b19fID0gdDtcbn1cbmZ1bmN0aW9uIHdhKGUsIHQpIHtcbiAgdCA9PT0gdm9pZCAwICYmICh0ID0gZS5jb25zdHJ1Y3Rvcik7XG4gIHZhciByID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIHIgJiYgcihlLCB0KTtcbn1cbnZhciB2YSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihvLCBpKSB7XG4gICAgICBvLl9fcHJvdG9fXyA9IGk7XG4gICAgfSB8fCBmdW5jdGlvbihvLCBpKSB7XG4gICAgICBmb3IgKHZhciBzIGluIGkpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLCBzKSAmJiAob1tzXSA9IGlbc10pO1xuICAgIH0sIGUociwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbih0LCByKSB7XG4gICAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgZSh0LCByKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gICAgfVxuICAgIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAobi5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIGJhID0gZnVuY3Rpb24oZSkge1xuICB2YSh0LCBlKTtcbiAgZnVuY3Rpb24gdChyLCBuKSB7XG4gICAgdmFyIG8gPSB0aGlzLmNvbnN0cnVjdG9yLCBpID0gZS5jYWxsKHRoaXMsIHIsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IG8ubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBnYShpLCBvLnByb3RvdHlwZSksIHdhKGkpLCBpO1xuICB9XG4gIHJldHVybiB0O1xufShFcnJvcik7XG5jb25zdCB3ID0gKGUpID0+IHokMS5udWxsYWJsZShlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgRWEgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgUnIgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IHcoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IHcoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IHcoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiB3KHokMS5udW1iZXIoKSlcbn0pLCBOciA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogdyh6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiB3KHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IHcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIENhID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIFNhID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IHcoQ2EpXG59KSwgVGUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IHcoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IHcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgUGEgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSksIGthID0geiQxLm9iamVjdCh7XG4gIGlkOiB3KHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IHcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogdyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShQYSksXG4gIHRyaWFsX3N0YXJ0OiB3KHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogdyh6JDEuc3RyaW5nKCkpXG59KSwgRnIgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSksIEFhID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoRnIpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KSwgSWEgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBSclxufSksIFRhID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KElhKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoQWEpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEZyKVxufSksIFl0ID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShrYSksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoVGEpLFxuICBwcm9jZXNzb3JzX3VzZWQ6IHcoeiQxLmFycmF5KHokMS5zdHJpbmcoKSkpXG59KSwgTXIgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogWXQsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogdyhZdCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShScilcbn0pLCBIdCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgbG9jYWxlOiB3KHokMS5zdHJpbmcoKSksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShOciksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBTYSxcbiAgc3Vic19wcmV2aWV3OiB3KE1yKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoVGUpLFxuICBmaW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3M6IHcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgRHIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChIdC5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKEh0LnNoYXBlKVxuXSksIFJhID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIE5hID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbRHIsIFJhLCBOYV0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KE5yKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFRlLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogdyh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgT3IgPSB6JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEZhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShGYSk7XG5jb25zdCBNYSA9IHokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIERhID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBMciA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoRGEpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KSwgT2EgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB3KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVGUsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB1c2VfcGF5X2ZpcnN0X2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBMci5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYW5ndWFnZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChNYS5zaGFwZSkuZXh0ZW5kKE9hLnNoYXBlKTtcbmNvbnN0IFVyID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogdyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IHVvLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IFRlLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogWWUsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBUZSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbiAgdXNlX3VuaWZpZWRfY2NfZmxvdzogdyh6JDEuYm9vbGVhbigpKSxcbiAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBMci5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2xhbmd1YWdlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBMYSA9IHokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2U6IHcoJGUpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IHcoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiB3KHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiB3KHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IHcoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IHcoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogdyh6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogdyh6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiB3KHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogdyh6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiB3KHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiB3KHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogdyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IHcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogdyh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiB3KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFVhID0geiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFRlLFxuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3JvdXRlX2lkOiB3KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgamEgPSB6JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IHcoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZXZlbnRzOiB6JDEuYXJyYXkoXG4gICAgeiQxLm9iamVjdCh7XG4gICAgICBldmVudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgICBkZXZpY2VfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgICAgIHByb3BlcnRpZXM6IHokMS5yZWNvcmQoeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxuICAgIH0pXG4gIClcbn0pO1xueiQxLmFueSgpLm9wdGlvbmFsKCk7XG56JDEub2JqZWN0KHtcbiAgZGV2aWNlX3Rva2VuOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgeGEgPSB6JDEub2JqZWN0KHt9KSwgJGEgPSB6JDEub2JqZWN0KHtcbiAgX3VuaWZpZWRfY2NfYWN0aW9uX25hbWU6IHokMS5zdHJpbmcoKSxcbiAgX3VuaWZpZWRfY2NfcGNjc19pZDogeiQxLnN0cmluZygpXG59KS5jYXRjaGFsbCh6JDEuYW55KCkpLCBWYSA9IChlKSA9PiBlLnJlZHVjZSgodCwgcikgPT4gdCArIHIsIDApLCBqciA9IChlKSA9PiB7XG4gIGUucHJldmVudERlZmF1bHQoKSwgZS5yZXR1cm5WYWx1ZSA9ICEwO1xufSwgR2EgPSAoKSA9PiB7XG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGpyKTtcbn0sIHphID0gKCkgPT4ge1xuICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBqcik7XG59LCBvZSA9IChlKSA9PiB7XG4gIGxldCB0ID0gITE7XG4gIHJldHVybiBhc3luYyAocikgPT4ge1xuICAgIHZhciBuLCBvO1xuICAgIGlmICh0KSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJTa2lwcGluZyBzdWJtaXNzaW9uIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzc1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdCA9ICEwO1xuICAgIHRyeSB7XG4gICAgICByLmNvbnRleHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uICYmIEdhKCksIChvID0gKG4gPSByLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkNoZWNrb3V0U3RhcnRlZCkgPT0gbnVsbCB8fCBvLmNhbGwobiksIGcoXCJjaGVja291dF9zdGFydGVkXCIsIHtcbiAgICAgICAgY3BtOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfSk7XG4gICAgICBjb25zdCBpID0gYXdhaXQgZShyKTtcbiAgICAgIGlmIChnKFwiY2hlY2tvdXRfc3VjY2Vzc1wiLCB7XG4gICAgICAgIGNwbTogci5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICAgIC4uLmlcbiAgICAgIH0pLCBpLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MoaS5yZXN1bHQucGF5bWVudF9tZXRob2RfaWQpO1xuICAgICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN1Y2Nlc3MoXG4gICAgICAgICAgaS5yZXN1bHQuaW52b2ljZV91cmxzLFxuICAgICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgICAgaS5yZXN1bHQuY3VzdG9tZXJfaWQsXG4gICAgICAgICAgaS5yZXN1bHQucHJvY2Vzc29yc191c2VkID8/IFtdXG4gICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgICB9IGNhdGNoIChpKSB7XG4gICAgICB0ID0gITE7XG4gICAgICBjb25zdCBzID0gWShpKSwgYyA9IGF3YWl0IHJuKHIuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBzKTtcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKHMsIGMpLCBnKFwiY2hlY2tvdXRfZXJyb3JcIiwgeyBjcG06IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLCBlcnJvck1lc3NhZ2U6IHMsIGVycm9yQ29kZTogYywgZXJyb3I6IGkgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHQgPSAhMSwgci5jb250ZXh0LnByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbiAmJiB6YSgpO1xuICAgIH1cbiAgfTtcbn0sIGhlID0gKGUpID0+IGFzeW5jICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGUodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICBjb25zdCB7IGVycl9fOiBuIH0gPSBBKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpLCBvID0gWShyKSwgaSA9IGF3YWl0IHJuKHQuY29udGV4dC5hbnlDZGVDb25uZWN0aW9uLCBvKTtcbiAgICByZXR1cm4gbihpLCBvLCByKSwgZyhcImluaXRfZmxvd19lcnJvclwiLCB7IGVycm9yTWVzc2FnZTogbywgZXJyb3JDb2RlOiBpLCBlcnJvcjogciB9KSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogbywgZXJyb3JDb2RlOiBpLCBpc0xvYWRpbmc6ICExIH07XG4gIH1cbn0sIEEgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coYCR7Y2hhbGsuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtjaGFsay5ib2xkLmdyYXkoYCR7ZX1gKX1cdGAsIC4uLm4pO1xuICB9LCByID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS53YXJuKGAke2NoYWxrLnJlZC5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtlfWApfVx0YCwgLi4ubik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nOiB0LFxuICAgIGVycjogcixcbiAgICBsb2dfXzogdCxcbiAgICBlcnJfXzogclxuICB9O1xufTtcbnZhciBrdCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgcmV0dXJuIGt0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24ociwgbikge1xuICAgIHIuX19wcm90b19fID0gbjtcbiAgfSB8fCBmdW5jdGlvbihyLCBuKSB7XG4gICAgZm9yICh2YXIgbyBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgbykgJiYgKHJbb10gPSBuW29dKTtcbiAgfSwga3QoZSwgdCk7XG59O1xuZnVuY3Rpb24gdWUoZSwgdCkge1xuICBpZiAodHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiICYmIHQgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcodCkgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBrdChlLCB0KTtcbiAgZnVuY3Rpb24gcigpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZTtcbiAgfVxuICBlLnByb3RvdHlwZSA9IHQgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHQpIDogKHIucHJvdG90eXBlID0gdC5wcm90b3R5cGUsIG5ldyByKCkpO1xufVxuZnVuY3Rpb24gcWEoZSwgdCwgciwgbikge1xuICBmdW5jdGlvbiBvKGkpIHtcbiAgICByZXR1cm4gaSBpbnN0YW5jZW9mIHIgPyBpIDogbmV3IHIoZnVuY3Rpb24ocykge1xuICAgICAgcyhpKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChyIHx8IChyID0gUHJvbWlzZSkpKGZ1bmN0aW9uKGksIHMpIHtcbiAgICBmdW5jdGlvbiBjKGQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi5uZXh0KGQpKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgcyhfKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4udGhyb3coZCkpO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICBzKF8pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGQpIHtcbiAgICAgIGQuZG9uZSA/IGkoZC52YWx1ZSkgOiBvKGQudmFsdWUpLnRoZW4oYywgbCk7XG4gICAgfVxuICAgIHUoKG4gPSBuLmFwcGx5KGUsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB4cihlLCB0KSB7XG4gIHZhciByID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKGlbMF0gJiAxKSB0aHJvdyBpWzFdO1xuICAgIHJldHVybiBpWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBvLCBpLCBzID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gcy5uZXh0ID0gYygwKSwgcy50aHJvdyA9IGMoMSksIHMucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKHNbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgcztcbiAgZnVuY3Rpb24gYyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQpIHtcbiAgICAgIHJldHVybiBsKFt1LCBkXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IHMgJiYgKHMgPSAwLCB1WzBdICYmIChyID0gMCkpLCByOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIG8gJiYgKGkgPSB1WzBdICYgMiA/IG8ucmV0dXJuIDogdVswXSA/IG8udGhyb3cgfHwgKChpID0gby5yZXR1cm4pICYmIGkuY2FsbChvKSwgMCkgOiBvLm5leHQpICYmICEoaSA9IGkuY2FsbChvLCB1WzFdKSkuZG9uZSkgcmV0dXJuIGk7XG4gICAgICBzd2l0Y2ggKG8gPSAwLCBpICYmICh1ID0gW3VbMF0gJiAyLCBpLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaSA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gci5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgci5sYWJlbCsrLCBvID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSByLm9wcy5wb3AoKSwgci50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpID0gci50cnlzLCAhKGkgPSBpLmxlbmd0aCA+IDAgJiYgaVtpLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFpIHx8IHVbMV0gPiBpWzBdICYmIHVbMV0gPCBpWzNdKSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgci5sYWJlbCA8IGlbMV0pIHtcbiAgICAgICAgICAgIHIubGFiZWwgPSBpWzFdLCBpID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaSAmJiByLmxhYmVsIDwgaVsyXSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IGlbMl0sIHIub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaVsyXSAmJiByLm9wcy5wb3AoKSwgci50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IHQuY2FsbChlLCByKTtcbiAgICB9IGNhdGNoIChkKSB7XG4gICAgICB1ID0gWzYsIGRdLCBvID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IGkgPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBrZShlKSB7XG4gIHZhciB0ID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCByID0gdCAmJiBlW3RdLCBuID0gMDtcbiAgaWYgKHIpIHJldHVybiByLmNhbGwoZSk7XG4gIGlmIChlICYmIHR5cGVvZiBlLmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGUgJiYgbiA+PSBlLmxlbmd0aCAmJiAoZSA9IHZvaWQgMCksIHsgdmFsdWU6IGUgJiYgZVtuKytdLCBkb25lOiAhZSB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcih0ID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gb3QoZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgcztcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBzID0geyBlcnJvcjogYyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocykgdGhyb3cgcy5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBhdChlLCB0LCByKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgbyA9IHQubGVuZ3RoLCBpOyBuIDwgbzsgbisrKVxuICAgIChpIHx8ICEobiBpbiB0KSkgJiYgKGkgfHwgKGkgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LCAwLCBuKSksIGlbbl0gPSB0W25dKTtcbiAgcmV0dXJuIGUuY29uY2F0KGkgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpO1xufVxuZnVuY3Rpb24gU2UoZSkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFNlID8gKHRoaXMudiA9IGUsIHRoaXMpIDogbmV3IFNlKGUpO1xufVxuZnVuY3Rpb24gQmEoZSwgdCwgcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IHIuYXBwbHkoZSwgdCB8fCBbXSksIG8sIGkgPSBbXTtcbiAgcmV0dXJuIG8gPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBjKFwibmV4dFwiKSwgYyhcInRocm93XCIpLCBjKFwicmV0dXJuXCIsIHMpLCBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBvO1xuICBmdW5jdGlvbiBzKGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oeSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh5KS50aGVuKGYsIF8pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYyhmLCB5KSB7XG4gICAgbltmXSAmJiAob1tmXSA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih2LCBiKSB7XG4gICAgICAgIGkucHVzaChbZiwgaCwgdiwgYl0pID4gMSB8fCBsKGYsIGgpO1xuICAgICAgfSk7XG4gICAgfSwgeSAmJiAob1tmXSA9IHkob1tmXSkpKTtcbiAgfVxuICBmdW5jdGlvbiBsKGYsIHkpIHtcbiAgICB0cnkge1xuICAgICAgdShuW2ZdKHkpKTtcbiAgICB9IGNhdGNoIChoKSB7XG4gICAgICBwKGlbMF1bM10sIGgpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1KGYpIHtcbiAgICBmLnZhbHVlIGluc3RhbmNlb2YgU2UgPyBQcm9taXNlLnJlc29sdmUoZi52YWx1ZS52KS50aGVuKGQsIF8pIDogcChpWzBdWzJdLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBkKGYpIHtcbiAgICBsKFwibmV4dFwiLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBfKGYpIHtcbiAgICBsKFwidGhyb3dcIiwgZik7XG4gIH1cbiAgZnVuY3Rpb24gcChmLCB5KSB7XG4gICAgZih5KSwgaS5zaGlmdCgpLCBpLmxlbmd0aCAmJiBsKGlbMF1bMF0sIGlbMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBZYShlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciB0ID0gZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIHI7XG4gIHJldHVybiB0ID8gdC5jYWxsKGUpIDogKGUgPSB0eXBlb2Yga2UgPT0gXCJmdW5jdGlvblwiID8ga2UoZSkgOiBlW1N5bWJvbC5pdGVyYXRvcl0oKSwgciA9IHt9LCBuKFwibmV4dFwiKSwgbihcInRocm93XCIpLCBuKFwicmV0dXJuXCIpLCByW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCByKTtcbiAgZnVuY3Rpb24gbihpKSB7XG4gICAgcltpXSA9IGVbaV0gJiYgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIGwpIHtcbiAgICAgICAgcyA9IGVbaV0ocyksIG8oYywgbCwgcy5kb25lLCBzLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbyhpLCBzLCBjLCBsKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oZnVuY3Rpb24odSkge1xuICAgICAgaSh7IHZhbHVlOiB1LCBkb25lOiBjIH0pO1xuICAgIH0sIHMpO1xuICB9XG59XG5mdW5jdGlvbiBVKGUpIHtcbiAgcmV0dXJuIHR5cGVvZiBlID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIHV0KGUpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihuKSB7XG4gICAgRXJyb3IuY2FsbChuKSwgbi5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCByID0gZSh0KTtcbiAgcmV0dXJuIHIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCByLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHIsIHI7XG59XG52YXIgd3QgPSB1dChmdW5jdGlvbihlKSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gciA/IHIubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIHIubWFwKGZ1bmN0aW9uKG4sIG8pIHtcbiAgICAgIHJldHVybiBvICsgMSArIFwiKSBcIiArIG4udG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSByO1xuICB9O1xufSk7XG5mdW5jdGlvbiBpdChlLCB0KSB7XG4gIGlmIChlKSB7XG4gICAgdmFyIHIgPSBlLmluZGV4T2YodCk7XG4gICAgMCA8PSByICYmIGUuc3BsaWNlKHIsIDEpO1xuICB9XG59XG52YXIgSGUgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gZSh0KSB7XG4gICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSB0LCB0aGlzLmNsb3NlZCA9ICExLCB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdCwgciwgbiwgbywgaTtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB0aGlzLmNsb3NlZCA9ICEwO1xuICAgICAgdmFyIHMgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICBpZiAocylcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIEFycmF5LmlzQXJyYXkocykpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGMgPSBrZShzKSwgbCA9IGMubmV4dCgpOyAhbC5kb25lOyBsID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBsLnZhbHVlO1xuICAgICAgICAgICAgICB1LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICB0ID0geyBlcnJvcjogaCB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsICYmICFsLmRvbmUgJiYgKHIgPSBjLnJldHVybikgJiYgci5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKHQpIHRocm93IHQuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcy5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgZCA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKFUoZCkpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZCgpO1xuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgaSA9IGggaW5zdGFuY2VvZiB3dCA/IGguZXJyb3JzIDogW2hdO1xuICAgICAgICB9XG4gICAgICB2YXIgXyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAoXykge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciBwID0ga2UoXyksIGYgPSBwLm5leHQoKTsgIWYuZG9uZTsgZiA9IHAubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgeSA9IGYudmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBKdCh5KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgICAgaSA9IGkgPz8gW10sIGggaW5zdGFuY2VvZiB3dCA/IGkgPSBhdChhdChbXSwgb3QoaSkpLCBvdChoLmVycm9ycykpIDogaS5wdXNoKGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIG4gPSB7IGVycm9yOiBoIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGYgJiYgIWYuZG9uZSAmJiAobyA9IHAucmV0dXJuKSAmJiBvLmNhbGwocCk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkpXG4gICAgICAgIHRocm93IG5ldyB3dChpKTtcbiAgICB9XG4gIH0sIGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgcjtcbiAgICBpZiAodCAmJiB0ICE9PSB0aGlzKVxuICAgICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgICBKdCh0KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAodCBpbnN0YW5jZW9mIGUpIHtcbiAgICAgICAgICBpZiAodC5jbG9zZWQgfHwgdC5faGFzUGFyZW50KHRoaXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIHQuX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChyID0gdGhpcy5fZmluYWxpemVycykgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IFtdKS5wdXNoKHQpO1xuICAgICAgfVxuICB9LCBlLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHJldHVybiByID09PSB0IHx8IEFycmF5LmlzQXJyYXkocikgJiYgci5pbmNsdWRlcyh0KTtcbiAgfSwgZS5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICB0aGlzLl9wYXJlbnRhZ2UgPSBBcnJheS5pc0FycmF5KHIpID8gKHIucHVzaCh0KSwgcikgOiByID8gW3IsIHRdIDogdDtcbiAgfSwgZS5wcm90b3R5cGUuX3JlbW92ZVBhcmVudCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByID09PSB0ID8gdGhpcy5fcGFyZW50YWdlID0gbnVsbCA6IEFycmF5LmlzQXJyYXkocikgJiYgaXQociwgdCk7XG4gIH0sIGUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgciAmJiBpdChyLCB0KSwgdCBpbnN0YW5jZW9mIGUgJiYgdC5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCBlLkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHQgPSBuZXcgZSgpO1xuICAgIHJldHVybiB0LmNsb3NlZCA9ICEwLCB0O1xuICB9KCksIGU7XG59KCksICRyID0gSGUuRU1QVFk7XG5mdW5jdGlvbiBWcihlKSB7XG4gIHJldHVybiBlIGluc3RhbmNlb2YgSGUgfHwgZSAmJiBcImNsb3NlZFwiIGluIGUgJiYgVShlLnJlbW92ZSkgJiYgVShlLmFkZCkgJiYgVShlLnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIEp0KGUpIHtcbiAgVShlKSA/IGUoKSA6IGUudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBHciA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCB6ciA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24oZSwgdCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICByW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIGF0KFtlLCB0XSwgb3QocikpKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIChjbGVhclRpbWVvdXQpKGUpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59O1xuZnVuY3Rpb24gcXIoZSkge1xuICB6ci5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIHRocm93IGU7XG4gIH0pO1xufVxuZnVuY3Rpb24gV3QoKSB7XG59XG5mdW5jdGlvbiBldChlKSB7XG4gIGUoKTtcbn1cbnZhciBqdCA9IGZ1bmN0aW9uKGUpIHtcbiAgdWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHZhciBuID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIG4uaXNTdG9wcGVkID0gITEsIHIgPyAobi5kZXN0aW5hdGlvbiA9IHIsIFZyKHIpICYmIHIuYWRkKG4pKSA6IG4uZGVzdGluYXRpb24gPSBLYSwgbjtcbiAgfVxuICByZXR1cm4gdC5jcmVhdGUgPSBmdW5jdGlvbihyLCBuLCBvKSB7XG4gICAgcmV0dXJuIG5ldyBBdChyLCBuLCBvKTtcbiAgfSwgdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KHIpO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IocikpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgZS5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCB0LnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQocik7XG4gIH0sIHQucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgdDtcbn0oSGUpLCBIYSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gdnQoZSwgdCkge1xuICByZXR1cm4gSGEuY2FsbChlLCB0KTtcbn1cbnZhciBKYSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHQ7XG4gIH1cbiAgcmV0dXJuIGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgci5uZXh0KHQpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBaZShuKTtcbiAgICAgIH1cbiAgfSwgZS5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIHIuZXJyb3IodCk7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIFplKG4pO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIFplKHQpO1xuICB9LCBlLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHQuY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICB0LmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChyKSB7XG4gICAgICAgIFplKHIpO1xuICAgICAgfVxuICB9LCBlO1xufSgpLCBBdCA9IGZ1bmN0aW9uKGUpIHtcbiAgdWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbiwgbykge1xuICAgIHZhciBpID0gZS5jYWxsKHRoaXMpIHx8IHRoaXMsIHM7XG4gICAgaWYgKFUocikgfHwgIXIpXG4gICAgICBzID0ge1xuICAgICAgICBuZXh0OiByID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IG4gPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogbyA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYztcbiAgICAgIGkgJiYgR3IudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGMgPSBPYmplY3QuY3JlYXRlKHIpLCBjLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBpLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBzID0ge1xuICAgICAgICBuZXh0OiByLm5leHQgJiYgdnQoci5uZXh0LCBjKSxcbiAgICAgICAgZXJyb3I6IHIuZXJyb3IgJiYgdnQoci5lcnJvciwgYyksXG4gICAgICAgIGNvbXBsZXRlOiByLmNvbXBsZXRlICYmIHZ0KHIuY29tcGxldGUsIGMpXG4gICAgICB9KSA6IHMgPSByO1xuICAgIH1cbiAgICByZXR1cm4gaS5kZXN0aW5hdGlvbiA9IG5ldyBKYShzKSwgaTtcbiAgfVxuICByZXR1cm4gdDtcbn0oanQpO1xuZnVuY3Rpb24gWmUoZSkge1xuICBxcihlKTtcbn1cbmZ1bmN0aW9uIFdhKGUpIHtcbiAgdGhyb3cgZTtcbn1cbnZhciBLYSA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogV3QsXG4gIGVycm9yOiBXYSxcbiAgY29tcGxldGU6IFd0XG59LCB4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIFphKGUpIHtcbiAgcmV0dXJuIGU7XG59XG5mdW5jdGlvbiBRYShlKSB7XG4gIHJldHVybiBlLmxlbmd0aCA9PT0gMCA/IFphIDogZS5sZW5ndGggPT09IDEgPyBlWzBdIDogZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBlLnJlZHVjZShmdW5jdGlvbihuLCBvKSB7XG4gICAgICByZXR1cm4gbyhuKTtcbiAgICB9LCByKTtcbiAgfTtcbn1cbnZhciBpZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBlKHQpIHtcbiAgICB0ICYmICh0aGlzLl9zdWJzY3JpYmUgPSB0KTtcbiAgfVxuICByZXR1cm4gZS5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgciA9IG5ldyBlKCk7XG4gICAgcmV0dXJuIHIuc291cmNlID0gdGhpcywgci5vcGVyYXRvciA9IHQsIHI7XG4gIH0sIGUucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICB2YXIgbyA9IHRoaXMsIGkgPSBlaSh0KSA/IHQgOiBuZXcgQXQodCwgciwgbik7XG4gICAgcmV0dXJuIGV0KGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMgPSBvLCBjID0gcy5vcGVyYXRvciwgbCA9IHMuc291cmNlO1xuICAgICAgaS5hZGQoYyA/IGMuY2FsbChpLCBsKSA6IGwgPyBvLl9zdWJzY3JpYmUoaSkgOiBvLl90cnlTdWJzY3JpYmUoaSkpO1xuICAgIH0pLCBpO1xuICB9LCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24odCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHQpO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIHQuZXJyb3Iocik7XG4gICAgfVxuICB9LCBlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24odCwgcikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICByZXR1cm4gciA9IEt0KHIpLCBuZXcgcihmdW5jdGlvbihvLCBpKSB7XG4gICAgICB2YXIgcyA9IG5ldyBBdCh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdChjKTtcbiAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICBpKGwpLCBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogaSxcbiAgICAgICAgY29tcGxldGU6IG9cbiAgICAgIH0pO1xuICAgICAgbi5zdWJzY3JpYmUocyk7XG4gICAgfSk7XG4gIH0sIGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHI7XG4gICAgcmV0dXJuIChyID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuc3Vic2NyaWJlKHQpO1xuICB9LCBlLnByb3RvdHlwZVt4dF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZS5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHQgPSBbXSwgciA9IDA7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspXG4gICAgICB0W3JdID0gYXJndW1lbnRzW3JdO1xuICAgIHJldHVybiBRYSh0KSh0aGlzKTtcbiAgfSwgZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24odCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICByZXR1cm4gdCA9IEt0KHQpLCBuZXcgdChmdW5jdGlvbihuLCBvKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIHIuc3Vic2NyaWJlKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGkgPSBzO1xuICAgICAgfSwgZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gbyhzKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbihpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gbmV3IGUodCk7XG4gIH0sIGU7XG59KCk7XG5mdW5jdGlvbiBLdChlKSB7XG4gIHZhciB0O1xuICByZXR1cm4gKHQgPSBlID8/IEdyLlByb21pc2UpICE9PSBudWxsICYmIHQgIT09IHZvaWQgMCA/IHQgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gWGEoZSkge1xuICByZXR1cm4gZSAmJiBVKGUubmV4dCkgJiYgVShlLmVycm9yKSAmJiBVKGUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gZWkoZSkge1xuICByZXR1cm4gZSAmJiBlIGluc3RhbmNlb2YganQgfHwgWGEoZSkgJiYgVnIoZSk7XG59XG5mdW5jdGlvbiB0aShlKSB7XG4gIHJldHVybiBVKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUubGlmdCk7XG59XG5mdW5jdGlvbiByaShlKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgaWYgKHRpKHQpKVxuICAgICAgcmV0dXJuIHQubGlmdChmdW5jdGlvbihyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGUociwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICB0aGlzLmVycm9yKG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBuaShlLCB0LCByLCBuLCBvKSB7XG4gIHJldHVybiBuZXcgb2koZSwgdCwgciwgbiwgbyk7XG59XG52YXIgb2kgPSBmdW5jdGlvbihlKSB7XG4gIHVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4sIG8sIGksIHMsIGMpIHtcbiAgICB2YXIgbCA9IGUuY2FsbCh0aGlzLCByKSB8fCB0aGlzO1xuICAgIHJldHVybiBsLm9uRmluYWxpemUgPSBzLCBsLnNob3VsZFVuc3Vic2NyaWJlID0gYywgbC5fbmV4dCA9IG4gPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICByLmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiBlLnByb3RvdHlwZS5fbmV4dCwgbC5fZXJyb3IgPSBpID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgci5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2Vycm9yLCBsLl9jb21wbGV0ZSA9IG8gPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG8oKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgci5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogZS5wcm90b3R5cGUuX2NvbXBsZXRlLCBsO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciBuID0gdGhpcy5jbG9zZWQ7XG4gICAgICBlLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhbiAmJiAoKHIgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCB8fCByLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgdDtcbn0oanQpLCBhaSA9IHV0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGUodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgQnIgPSBmdW5jdGlvbihlKSB7XG4gIHVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KCkge1xuICAgIHZhciByID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gITEsIHIuY3VycmVudE9ic2VydmVycyA9IG51bGwsIHIub2JzZXJ2ZXJzID0gW10sIHIuaXNTdG9wcGVkID0gITEsIHIuaGFzRXJyb3IgPSAhMSwgci50aHJvd25FcnJvciA9IG51bGwsIHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4gPSBuZXcgWnQodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIG4ub3BlcmF0b3IgPSByLCBuO1xuICB9LCB0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBhaSgpO1xuICB9LCB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBldChmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvLCBpO1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uY3VycmVudE9ic2VydmVycyB8fCAobi5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShuLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIHMgPSBrZShuLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gcy5uZXh0KCk7ICFjLmRvbmU7IGMgPSBzLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGwgPSBjLnZhbHVlO1xuICAgICAgICAgICAgbC5uZXh0KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIG8gPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAoaSA9IHMucmV0dXJuKSAmJiBpLmNhbGwocyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChvKSB0aHJvdyBvLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgZXQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5oYXNFcnJvciA9IG4uaXNTdG9wcGVkID0gITAsIG4udGhyb3duRXJyb3IgPSByO1xuICAgICAgICBmb3IgKHZhciBvID0gbi5vYnNlcnZlcnM7IG8ubGVuZ3RoOyApXG4gICAgICAgICAgby5zaGlmdCgpLmVycm9yKHIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gdGhpcztcbiAgICBldChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChyLl90aHJvd0lmQ2xvc2VkKCksICFyLmlzU3RvcHBlZCkge1xuICAgICAgICByLmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciBuID0gci5vYnNlcnZlcnM7IG4ubGVuZ3RoOyApXG4gICAgICAgICAgbi5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByO1xuICAgICAgcmV0dXJuICgociA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCBlLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgcik7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhyKSwgdGhpcy5faW5uZXJTdWJzY3JpYmUocik7XG4gIH0sIHQucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMsIG8gPSB0aGlzLCBpID0gby5oYXNFcnJvciwgcyA9IG8uaXNTdG9wcGVkLCBjID0gby5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIGkgfHwgcyA/ICRyIDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGMucHVzaChyKSwgbmV3IEhlKGZ1bmN0aW9uKCkge1xuICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgaXQoYywgcik7XG4gICAgfSkpO1xuICB9LCB0LnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMsIG8gPSBuLmhhc0Vycm9yLCBpID0gbi50aHJvd25FcnJvciwgcyA9IG4uaXNTdG9wcGVkO1xuICAgIG8gPyByLmVycm9yKGkpIDogcyAmJiByLmNvbXBsZXRlKCk7XG4gIH0sIHQucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gbmV3IGllKCk7XG4gICAgcmV0dXJuIHIuc291cmNlID0gdGhpcywgcjtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihyLCBuKSB7XG4gICAgcmV0dXJuIG5ldyBadChyLCBuKTtcbiAgfSwgdDtcbn0oaWUpLCBadCA9IGZ1bmN0aW9uKGUpIHtcbiAgdWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIHZhciBvID0gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIG8uZGVzdGluYXRpb24gPSByLCBvLnNvdXJjZSA9IG4sIG87XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIG87XG4gICAgKG8gPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4ubmV4dCkgPT09IG51bGwgfHwgbyA9PT0gdm9pZCAwIHx8IG8uY2FsbChuLCByKTtcbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIG87XG4gICAgKG8gPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uZXJyb3IpID09PSBudWxsIHx8IG8gPT09IHZvaWQgMCB8fCBvLmNhbGwobiwgcik7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIG47XG4gICAgKG4gPSAociA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuY29tcGxldGUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCB8fCBuLmNhbGwocik7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIG4sIG87XG4gICAgcmV0dXJuIChvID0gKG4gPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5zdWJzY3JpYmUocikpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiAkcjtcbiAgfSwgdDtcbn0oQnIpLCBpaSA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgc2kgPSBmdW5jdGlvbihlKSB7XG4gIHVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICByZXR1cm4gZS5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24ociwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0O1xufShIZSksIFF0ID0ge1xuICBzZXRJbnRlcnZhbDogZnVuY3Rpb24oZSwgdCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICByW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBhdChbZSwgdF0sIG90KHIpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbChlKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgY2kgPSBmdW5jdGlvbihlKSB7XG4gIHVlKHQsIGUpO1xuICBmdW5jdGlvbiB0KHIsIG4pIHtcbiAgICB2YXIgbyA9IGUuY2FsbCh0aGlzLCByLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBvLnNjaGVkdWxlciA9IHIsIG8ud29yayA9IG4sIG8ucGVuZGluZyA9ICExLCBvO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgbztcbiAgICBpZiAobiA9PT0gdm9pZCAwICYmIChuID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IHI7XG4gICAgdmFyIGkgPSB0aGlzLmlkLCBzID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIGkgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQocywgaSwgbikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IG4sIHRoaXMuaWQgPSAobyA9IHRoaXMuaWQpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiB0aGlzLnJlcXVlc3RBc3luY0lkKHMsIHRoaXMuaWQsIG4pLCB0aGlzO1xuICB9LCB0LnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHIsIG4sIG8pIHtcbiAgICByZXR1cm4gbyA9PT0gdm9pZCAwICYmIChvID0gMCksIFF0LnNldEludGVydmFsKHIuZmx1c2guYmluZChyLCB0aGlzKSwgbyk7XG4gIH0sIHQucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24ociwgbiwgbykge1xuICAgIGlmIChvID09PSB2b2lkIDAgJiYgKG8gPSAwKSwgbyAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IG8gJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiBuO1xuICAgIG4gIT0gbnVsbCAmJiBRdC5jbGVhckludGVydmFsKG4pO1xuICB9LCB0LnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24ociwgbikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBvID0gdGhpcy5fZXhlY3V0ZShyLCBuKTtcbiAgICBpZiAobylcbiAgICAgIHJldHVybiBvO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCB0LnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKHIsIG4pIHtcbiAgICB2YXIgbyA9ICExLCBpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsocik7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgbyA9ICEwLCBpID0gcyB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAobylcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIGk7XG4gIH0sIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIHIgPSB0aGlzLCBuID0gci5pZCwgbyA9IHIuc2NoZWR1bGVyLCBpID0gby5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIGl0KGksIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKG8sIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIGUucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB0O1xufShzaSksIFh0ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIGUodCwgcikge1xuICAgIHIgPT09IHZvaWQgMCAmJiAociA9IGUubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gdCwgdGhpcy5ub3cgPSByO1xuICB9XG4gIHJldHVybiBlLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHQsIHIsIG4pIHtcbiAgICByZXR1cm4gciA9PT0gdm9pZCAwICYmIChyID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgdCkuc2NoZWR1bGUobiwgcik7XG4gIH0sIGUubm93ID0gaWkubm93LCBlO1xufSgpLCBsaSA9IGZ1bmN0aW9uKGUpIHtcbiAgdWUodCwgZSk7XG4gIGZ1bmN0aW9uIHQociwgbikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IFh0Lm5vdyk7XG4gICAgdmFyIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gby5hY3Rpb25zID0gW10sIG8uX2FjdGl2ZSA9ICExLCBvO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgbiA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBuLnB1c2gocik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAobyA9IHIuZXhlY3V0ZShyLnN0YXRlLCByLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKHIgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgbykge1xuICAgICAgZm9yICg7IHIgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgci51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgbztcbiAgICB9XG4gIH0sIHQ7XG59KFh0KSwgdWkgPSBuZXcgbGkoY2kpLCBkaSA9IGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIHBpKGUpIHtcbiAgcmV0dXJuIFUoZSA9PSBudWxsID8gdm9pZCAwIDogZS50aGVuKTtcbn1cbmZ1bmN0aW9uIG1pKGUpIHtcbiAgcmV0dXJuIFUoZVt4dF0pO1xufVxuZnVuY3Rpb24gZmkoZSkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgVShlID09IG51bGwgPyB2b2lkIDAgOiBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiBfaShlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGUgIT09IG51bGwgJiYgdHlwZW9mIGUgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgZSArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24geWkoKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgaGkgPSB5aSgpO1xuZnVuY3Rpb24gZ2koZSkge1xuICByZXR1cm4gVShlID09IG51bGwgPyB2b2lkIDAgOiBlW2hpXSk7XG59XG5mdW5jdGlvbiB3aShlKSB7XG4gIHJldHVybiBCYSh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBuLCBvLCBpO1xuICAgIHJldHVybiB4cih0aGlzLCBmdW5jdGlvbihzKSB7XG4gICAgICBzd2l0Y2ggKHMubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHIgPSBlLmdldFJlYWRlcigpLCBzLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIHMubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCBTZShyLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIG4gPSBzLnNlbnQoKSwgbyA9IG4udmFsdWUsIGkgPSBuLmRvbmUsIGkgPyBbNCwgU2Uodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIHMuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgU2UobyldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gcy5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIHIucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gdmkoZSkge1xuICByZXR1cm4gVShlID09IG51bGwgPyB2b2lkIDAgOiBlLmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBiaShlKSB7XG4gIGlmIChlIGluc3RhbmNlb2YgaWUpXG4gICAgcmV0dXJuIGU7XG4gIGlmIChlICE9IG51bGwpIHtcbiAgICBpZiAobWkoZSkpXG4gICAgICByZXR1cm4gRWkoZSk7XG4gICAgaWYgKGRpKGUpKVxuICAgICAgcmV0dXJuIENpKGUpO1xuICAgIGlmIChwaShlKSlcbiAgICAgIHJldHVybiBTaShlKTtcbiAgICBpZiAoZmkoZSkpXG4gICAgICByZXR1cm4gWXIoZSk7XG4gICAgaWYgKGdpKGUpKVxuICAgICAgcmV0dXJuIFBpKGUpO1xuICAgIGlmICh2aShlKSlcbiAgICAgIHJldHVybiBraShlKTtcbiAgfVxuICB0aHJvdyBfaShlKTtcbn1cbmZ1bmN0aW9uIEVpKGUpIHtcbiAgcmV0dXJuIG5ldyBpZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIgPSBlW3h0XSgpO1xuICAgIGlmIChVKHIuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiByLnN1YnNjcmliZSh0KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gQ2koZSkge1xuICByZXR1cm4gbmV3IGllKGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKHZhciByID0gMDsgciA8IGUubGVuZ3RoICYmICF0LmNsb3NlZDsgcisrKVxuICAgICAgdC5uZXh0KGVbcl0pO1xuICAgIHQuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBTaShlKSB7XG4gIHJldHVybiBuZXcgaWUoZnVuY3Rpb24odCkge1xuICAgIGUudGhlbihmdW5jdGlvbihyKSB7XG4gICAgICB0LmNsb3NlZCB8fCAodC5uZXh0KHIpLCB0LmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKHIpIHtcbiAgICAgIHJldHVybiB0LmVycm9yKHIpO1xuICAgIH0pLnRoZW4obnVsbCwgcXIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFBpKGUpIHtcbiAgcmV0dXJuIG5ldyBpZShmdW5jdGlvbih0KSB7XG4gICAgdmFyIHIsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIG8gPSBrZShlKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgdmFyIHMgPSBpLnZhbHVlO1xuICAgICAgICBpZiAodC5uZXh0KHMpLCB0LmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAoYykge1xuICAgICAgciA9IHsgZXJyb3I6IGMgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSAmJiAhaS5kb25lICYmIChuID0gby5yZXR1cm4pICYmIG4uY2FsbChvKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICB0LmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWXIoZSkge1xuICByZXR1cm4gbmV3IGllKGZ1bmN0aW9uKHQpIHtcbiAgICBBaShlLCB0KS5jYXRjaChmdW5jdGlvbihyKSB7XG4gICAgICByZXR1cm4gdC5lcnJvcihyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBraShlKSB7XG4gIHJldHVybiBZcih3aShlKSk7XG59XG5mdW5jdGlvbiBBaShlLCB0KSB7XG4gIHZhciByLCBuLCBvLCBpO1xuICByZXR1cm4gcWEodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzLCBjO1xuICAgIHJldHVybiB4cih0aGlzLCBmdW5jdGlvbihsKSB7XG4gICAgICBzd2l0Y2ggKGwubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGwudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCByID0gWWEoZSksIGwubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCByLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IGwuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAocyA9IG4udmFsdWUsIHQubmV4dChzKSwgdC5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIGwubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSBsLnNlbnQoKSwgbyA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBsLnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKGkgPSByLnJldHVybikgPyBbNCwgaS5jYWxsKHIpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIGwuc2VudCgpLCBsLmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKG8pIHRocm93IG8uZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiB0LmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBJaShlLCB0LCByLCBuLCBvKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBvID09PSB2b2lkIDAgJiYgKG8gPSAhMSk7XG4gIHZhciBpID0gdC5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICByKCksIG8gPyBlLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmIChlLmFkZChpKSwgIW8pXG4gICAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBUaShlLCB0KSB7XG4gIHZhciByID0gVShlKSA/IGUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZTtcbiAgfSwgbiA9IGZ1bmN0aW9uKG8pIHtcbiAgICByZXR1cm4gby5lcnJvcihyKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IGllKG4pO1xufVxudmFyIFJpID0gdXQoZnVuY3Rpb24oZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZSh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gTmkoZSwgdCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ociwgbikge1xuICAgIHZhciBvID0gITEsIGk7XG4gICAgZS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24ocykge1xuICAgICAgICBpID0gcywgbyA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBuLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBvID8gcihpKSA6IG4obmV3IFJpKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEZpKGUpIHtcbiAgcmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihlKTtcbn1cbnZhciBNaSA9IHV0KGZ1bmN0aW9uKGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSBudWxsKSwgZSh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSByO1xuICB9O1xufSk7XG5mdW5jdGlvbiBEaShlLCB0KSB7XG4gIHZhciByID0gRmkoZSkgPyB7IGZpcnN0OiBlIH0gOiB0eXBlb2YgZSA9PSBcIm51bWJlclwiID8geyBlYWNoOiBlIH0gOiBlLCBuID0gci5maXJzdCwgbyA9IHIuZWFjaCwgaSA9IHIud2l0aCwgcyA9IGkgPT09IHZvaWQgMCA/IE9pIDogaSwgYyA9IHIuc2NoZWR1bGVyLCBsID0gYyA9PT0gdm9pZCAwID8gdWkgOiBjLCB1ID0gci5tZXRhLCBkID0gdSA9PT0gdm9pZCAwID8gbnVsbCA6IHU7XG4gIGlmIChuID09IG51bGwgJiYgbyA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIHJpKGZ1bmN0aW9uKF8sIHApIHtcbiAgICB2YXIgZiwgeSwgaCA9IG51bGwsIHYgPSAwLCBiID0gZnVuY3Rpb24oQykge1xuICAgICAgeSA9IElpKHAsIGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGYudW5zdWJzY3JpYmUoKSwgYmkocyh7XG4gICAgICAgICAgICBtZXRhOiBkLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiBoLFxuICAgICAgICAgICAgc2VlbjogdlxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUocCk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBwLmVycm9yKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBDKTtcbiAgICB9O1xuICAgIGYgPSBfLnN1YnNjcmliZShuaShwLCBmdW5jdGlvbihDKSB7XG4gICAgICB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCB2KyssIHAubmV4dChoID0gQyksIG8gPiAwICYmIGIobyk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgeSAhPSBudWxsICYmIHkuY2xvc2VkIHx8IHkgPT0gbnVsbCB8fCB5LnVuc3Vic2NyaWJlKCksIGggPSBudWxsO1xuICAgIH0pKSwgIXYgJiYgYihuICE9IG51bGwgPyB0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gbiA6ICtuIC0gbC5ub3coKSA6IG8pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIE9pKGUpIHtcbiAgdGhyb3cgbmV3IE1pKGUpO1xufVxuY2xhc3MgamUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9ICh0KSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiB0IH0sIHRoaXMuX3N1YmplY3QubmV4dCh0KSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAodCwgcikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IHQsIGVyck1zZzogciB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKHQpO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodCkgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IHQsIHRoaXMuc3Vic2NyaWJlID0gKHQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdCh0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiB0KHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgciA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHQodGhpcy5fY3VycmVudCksIHIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIHQodGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAodCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgZHQodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCByID0ge1xuICAgICAgICBmaXJzdDogdC50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiBUaSgoKSA9PiBuZXcgRXJyb3IodC50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gTmkodGhpcy5fc3ViamVjdC5waXBlKERpKHIpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IEJyKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IGVyID0geiQxLmVudW0oW1wiZGV2XCIsIFwic3RnXCIsIFwicHJvZFwiXSksIExpID0ge1xuICBwcm9kOiBcImh0dHBzOi8vY29ubnRvLmdldG9wZW5wYXkuY29tXCIsXG4gIHN0ZzogXCJodHRwczovL2Nvbm50by5vcGVucGF5c3RhZ2luZy5jb21cIixcbiAgZGV2OiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODAwMFwiXG59LCBVaSA9IChlKSA9PiBMaVtlXSwgYnQgPSB7fSwgSHIgPSBhc3luYyAoZSkgPT4ge1xuICBpZiAoYnRbZV0pXG4gICAgcmV0dXJuIGJ0W2VdO1xuICB0cnkge1xuICAgIGNvbnN0IHQgPSBhd2FpdCBmZXRjaChuZXcgVVJMKFwiL2hlYWx0aC9lbnZpcm9ubWVudFwiLCBlKSkudGhlbigobikgPT4gbi5qc29uKCkpLCByID0gZXIucGFyc2UodC5lbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIGJ0W2VdID0gciwgcjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGVyLlZhbHVlcy5wcm9kO1xuICB9XG59O1xuZnVuY3Rpb24gZHQoZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke2V9YCk7XG59XG5jb25zdCBKciA9IChlLCB0KSA9PiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbcl0pID0+ICF0LmluY2x1ZGVzKHIpKSksIE0gPSAoKSA9PiB7XG4gIGlmICghKHR5cGVvZiB3aW5kb3cgPiBcInVcIikpXG4gICAgcmV0dXJuIHdpbmRvdztcbn0sIEl0ID0gbmV3IGplKCksIHRyID0gXCJvcF9tZXRyaWNzX3F1ZXVlXCIsIGppID0gMywgeGkgPSAzLCAkaSA9IDFlMywgeyBsb2dfXzogUWUgfSA9IEEoXCJvcC1tZXRyaWNzXCIpO1xuY2xhc3MgVmkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPSAwLCB0aGlzLm9mZmxpbmVMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgIFFlKFwiTmV0d29yayBvZmZsaW5lLCBtZXRyaWNzIHdpbGwgYmUgcXVldWVkXCIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICAgIH0sIHRoaXMub25saW5lTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICBRZShcIk5ldHdvcmsgb25saW5lLCBwcm9jZXNzaW5nIG1ldHJpY3MgcXVldWVcIiksIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgfSwgdGhpcy5sb2FkUXVldWVGcm9tU3RvcmFnZSgpLCAodCA9IE0oKSkgPT0gbnVsbCB8fCB0LmFkZEV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHIgPSBNKCkpID09IG51bGwgfHwgci5hZGRFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpO1xuICB9XG4gIGFkZEV2ZW50KHQsIHIsIG4pIHtcbiAgICBjb25zdCBvID0ge1xuICAgICAgZXZlbnROYW1lOiB0LFxuICAgICAgcHJvcGVydGllczogciB8fCB7fSxcbiAgICAgIGNvbnRleHRQcm9wZXJ0aWVzOiBuIHx8IHt9LFxuICAgICAgbm9uY2U6IHY0KCksXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkYXRldGltZTogKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLFxuICAgICAgYXR0ZW1wdENvdW50OiAwLFxuICAgICAgdGltZURpZmZGcm9tUHJldmlvdXNFdmVudDogdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgPyBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RXZlbnRUaW1lc3RhbXAgOiAwXG4gICAgfTtcbiAgICB0aGlzLmxhc3RFdmVudFRpbWVzdGFtcCA9IG8udGltZXN0YW1wLCB0aGlzLnF1ZXVlLnB1c2gobyksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCksIHRoaXMuc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKTtcbiAgfVxuICBsb2FkUXVldWVGcm9tU3RvcmFnZSgpIHtcbiAgICB2YXIgdCwgcjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IChyID0gKHQgPSBNKCkpID09IG51bGwgPyB2b2lkIDAgOiB0LmxvY2FsU3RvcmFnZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2V0SXRlbSh0cik7XG4gICAgICBuICYmICh0aGlzLnF1ZXVlID0gSlNPTi5wYXJzZShuKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLnF1ZXVlID0gW10sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gICAgfVxuICB9XG4gIHNhdmVRdWV1ZVRvU3RvcmFnZSgpIHtcbiAgICB2YXIgdDtcbiAgICAodCA9IE0oKSkgPT0gbnVsbCB8fCB0LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRyLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXVlKSk7XG4gIH1cbiAgc2NoZWR1bGVCYXRjaFByb2Nlc3NpbmcoKSB7XG4gICAgY29uc3QgdCA9IE0oKTtcbiAgICB0ICYmIG5hdmlnYXRvci5vbkxpbmUgJiYgIXRoaXMucHJvY2Vzc2luZ1F1ZXVlICYmIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiAhdGhpcy5iYXRjaFRpbWVvdXQgJiYgKHRoaXMuYmF0Y2hUaW1lb3V0ID0gdC5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYmF0Y2hUaW1lb3V0ID0gbnVsbCwgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICB9LCAkaSkpO1xuICB9XG4gIGNhbmNlbEJhdGNoUHJvY2Vzc2luZygpIHtcbiAgICB2YXIgdDtcbiAgICB0aGlzLmJhdGNoVGltZW91dCAmJiAoKHQgPSBNKCkpID09IG51bGwgfHwgdC5jbGVhclRpbWVvdXQodGhpcy5iYXRjaFRpbWVvdXQpLCB0aGlzLmJhdGNoVGltZW91dCA9IG51bGwpLCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSA9ICExO1xuICB9XG4gIHByb2Nlc3NRdWV1ZSgpIHtcbiAgICAhbmF2aWdhdG9yLm9uTGluZSB8fCB0aGlzLnByb2Nlc3NpbmdRdWV1ZSB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCB8fCAodGhpcy5wcm9jZXNzaW5nUXVldWUgPSAhMCwgdGhpcy5zZW5kQmF0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMucHJvY2Vzc2luZ1F1ZXVlID0gITEsIHRoaXMucXVldWUubGVuZ3RoID4gMCAmJiB0aGlzLnNjaGVkdWxlQmF0Y2hQcm9jZXNzaW5nKCk7XG4gICAgfSkpO1xuICB9XG4gIGFzeW5jIHNlbmRCYXRjaCgpIHtcbiAgICBpZiAodGhpcy5xdWV1ZS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCB0ID0gSXQuZ2V0VmFsdWVJZkxvYWRlZEVsc2Uodm9pZCAwKTtcbiAgICBpZiAoIXQpIHtcbiAgICAgIFFlKFwiTWV0cmljcyBjb250ZXh0IG5vdCBhdmFpbGFibGUsIHdpbGwgcmV0cnkgbGF0ZXJcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLnF1ZXVlLnNsaWNlKDAsIHhpKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbiA9IHtcbiAgICAgICAgZXZlbnRzOiByLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICBldmVudF9uYW1lOiBjLmV2ZW50TmFtZSxcbiAgICAgICAgICBkZXZpY2VfdG9rZW46IHQuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgY29udGV4dF9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAuLi50LFxuICAgICAgICAgICAgLi4uYy5jb250ZXh0UHJvcGVydGllc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgbm9uY2U6IGMubm9uY2UsXG4gICAgICAgICAgICBkYXRldGltZTogYy5kYXRldGltZSxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogYy50aW1lc3RhbXAsXG4gICAgICAgICAgICB0aW1lX2RpZmZfZnJvbV9wcmV2aW91c19ldmVudDogYy50aW1lRGlmZkZyb21QcmV2aW91c0V2ZW50LFxuICAgICAgICAgICAgY2hlY2tvdXRfc2VjdXJlX3Rva2VuOiB0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgICAuLi5jLnByb3BlcnRpZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pKVxuICAgICAgfSwgbyA9IFVpKHQuZW52aXJvbm1lbnQpLCBpID0gbmV3IFVSTChcIi9tZXRyaWNzL3B1YmxpYy9jYXB0dXJlXCIsIG8pO1xuICAgICAgKGF3YWl0IGZldGNoKGkudG9TdHJpbmcoKSwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkobilcbiAgICAgIH0pKS5vayA/ICh0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZShyLmxlbmd0aCksIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCkpIDogdGhpcy5oYW5kbGVGYWlsZWRCYXRjaChyKTtcbiAgICB9IGNhdGNoIChuKSB7XG4gICAgICBRZShcIkVycm9yIHNlbmRpbmcgbWV0cmljcyBiYXRjaDpcIiwgbiksIHRoaXMuaGFuZGxlRmFpbGVkQmF0Y2gocik7XG4gICAgfVxuICB9XG4gIGhhbmRsZUZhaWxlZEJhdGNoKHQpIHtcbiAgICB0LmZvckVhY2goKG4pID0+IHtcbiAgICAgIG4uYXR0ZW1wdENvdW50Kys7XG4gICAgfSk7XG4gICAgY29uc3QgciA9IHQuZmlsdGVyKChuKSA9PiBuLmF0dGVtcHRDb3VudCA8IGppKTtcbiAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5zbGljZSh0Lmxlbmd0aCksIHRoaXMucXVldWUgPSBbLi4uciwgLi4udGhpcy5xdWV1ZV0sIHRoaXMuc2F2ZVF1ZXVlVG9TdG9yYWdlKCk7XG4gIH1cbiAgY2xlYW51cCgpIHtcbiAgICB2YXIgdCwgcjtcbiAgICAodCA9IE0oKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJvZmZsaW5lXCIsIHRoaXMub2ZmbGluZUxpc3RlbmVyKSwgKHIgPSBNKCkpID09IG51bGwgfHwgci5yZW1vdmVFdmVudExpc3RlbmVyKFwib25saW5lXCIsIHRoaXMub25saW5lTGlzdGVuZXIpLCB0aGlzLmNhbmNlbEJhdGNoUHJvY2Vzc2luZygpO1xuICB9XG59XG5jb25zdCBXciA9IG5ldyBWaSgpLCBnID0gKGUsIHQsIHIpID0+IHtcbiAgV3IuYWRkRXZlbnQoZSwgdCwgcik7XG59LCBLciA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBZKGUucmVhc29uKTtcbiAgZyhcInVuaGFuZGxlZF9yZWplY3Rpb25fZXJyb3JcIiwge1xuICAgIGVycm9yX21lc3NhZ2U6IHQsXG4gICAgZXJyb3JfbmFtZTogZS5yZWFzb25cbiAgfSk7XG59LCBaciA9IChlKSA9PiB7XG4gIHZhciByLCBuO1xuICBjb25zdCB0ID0gWShlLmVycm9yKTtcbiAgZyhcInVuY2F1Z2h0X2Vycm9yXCIsIHtcbiAgICBlcnJvcl9tZXNzYWdlOiB0LFxuICAgIGVycm9yX25hbWU6IChyID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHIubmFtZSxcbiAgICBlcnJvcl9zdGFjazogKG4gPSBlLmVycm9yKSA9PSBudWxsID8gdm9pZCAwIDogbi5zdGFjayxcbiAgICBmaWxlX25hbWU6IGUuZmlsZW5hbWUsXG4gICAgbGluZV9udW1iZXI6IGUubGluZW5vLFxuICAgIGNvbHVtbl9udW1iZXI6IGUuY29sbm9cbiAgfSk7XG59LCBHaSA9ICgpID0+IHtcbiAgdmFyIGUsIHQ7XG4gIChlID0gTSgpKSA9PSBudWxsIHx8IGUuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIFpyKSwgKHQgPSBNKCkpID09IG51bGwgfHwgdC5hZGRFdmVudExpc3RlbmVyKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIsIEtyKTtcbn0sIHppID0gKCkgPT4ge1xuICB2YXIgZSwgdDtcbiAgKGUgPSBNKCkpID09IG51bGwgfHwgZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgWnIpLCAodCA9IE0oKSkgPT0gbnVsbCB8fCB0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ1bmhhbmRsZWRyZWplY3Rpb25cIiwgS3IpO1xufTtcbnZhciB5cjtcbih5ciA9IE0oKSkgPT0gbnVsbCB8fCB5ci5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsICgpID0+IHtcbiAgV3IucHJvY2Vzc1F1ZXVlKCk7XG59KTtcbmNvbnN0IHFpID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IFBlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIG8gPSBDZS5hY3RpdmUoKSwgaSA9IG4uc3RhcnRTcGFuKFxuICAgIGBjZGUuJHt0LnR5cGV9YCxcbiAgICB7XG4gICAgICBraW5kOiBxZS5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwibWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgLi4uZS50cmFjaW5nQ29udGV4dCAmJiB7XG4gICAgICAgICAgXCJvanMuY2hlY2tvdXRTZWN1cmVUb2tlblwiOiBlLnRyYWNpbmdDb250ZXh0LmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgXCJvanMuZGV2aWNlVG9rZW5cIjogZS50cmFjaW5nQ29udGV4dC5kZXZpY2VUb2tlbixcbiAgICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS50cmFjaW5nQ29udGV4dC5mb3JtSWQsXG4gICAgICAgICAgXCJvanMudmVyc2lvblwiOiBlLnRyYWNpbmdDb250ZXh0LnZlcnNpb24sXG4gICAgICAgICAgXCJvanMucmVsZWFzZV92ZXJzaW9uXCI6IGUudHJhY2luZ0NvbnRleHQucmVsZWFzZVZlcnNpb24sXG4gICAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS50cmFjaW5nQ29udGV4dC5iYXNlVXJsLFxuICAgICAgICAgIFwib2pzLnJlZmVycmVyXCI6IGUudHJhY2luZ0NvbnRleHQucmVmZXJyZXJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS50eXBlXCI6IHQudHlwZSxcbiAgICAgICAgXCJjZGUubWVzc2FnZS5wYXlsb2FkXCI6IEpTT04uc3RyaW5naWZ5KHQucGF5bG9hZClcbiAgICAgIH1cbiAgICB9LFxuICAgIG9cbiAgKTtcbiAgcmV0dXJuIENlLndpdGgoUGUuc2V0U3BhbihvLCBpKSwgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgcigpO1xuICAgICAgcmV0dXJuIGkuc2V0U3RhdHVzKHsgY29kZTogbGUuT0sgfSksIHM7XG4gICAgfSBjYXRjaCAocykge1xuICAgICAgdGhyb3cgaS5zZXRTdGF0dXMoe1xuICAgICAgICBjb2RlOiBsZS5FUlJPUixcbiAgICAgICAgbWVzc2FnZTogcyBpbnN0YW5jZW9mIEVycm9yID8gcy5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCJcbiAgICAgIH0pLCBzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpLmVuZCgpO1xuICAgIH1cbiAgfSk7XG59LCBYZSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBQZS5nZXRUcmFjZXIoXCJvcGVucGF5LWpzXCIpLCBuID0gQ2UuYWN0aXZlKCksIG8gPSByLnN0YXJ0U3BhbihcbiAgICBgZm9ybS4ke2Uuc3Bhbk5hbWV9YCxcbiAgICB7XG4gICAgICBraW5kOiBxZS5DTElFTlQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogZS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiBlLmRldmljZVRva2VuLFxuICAgICAgICBcIm9qcy5mb3JtSWRcIjogZS5mb3JtSWQsXG4gICAgICAgIFwib2pzLnZlcnNpb25cIjogZS52ZXJzaW9uLFxuICAgICAgICBcIm9qcy5yZWxlYXNlX3ZlcnNpb25cIjogZS5yZWxlYXNlVmVyc2lvbixcbiAgICAgICAgXCJvanMuYmFzZV91cmxcIjogZS5iYXNlVXJsLFxuICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiBlLnJlZmVycmVyLFxuICAgICAgICAuLi5lLnBheW1lbnRSb3V0ZUlkICYmIHsgXCJwYXltZW50LnJvdXRlX2lkXCI6IGUucGF5bWVudFJvdXRlSWQgfVxuICAgICAgfVxuICAgIH0sXG4gICAgblxuICApO1xuICB0cnkge1xuICAgIGNvbnN0IGkgPSBhd2FpdCB0KCk7XG4gICAgcmV0dXJuIG8uc2V0U3RhdHVzKHsgY29kZTogbGUuT0sgfSksIGk7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICBjb25zdCBzID0gaSBpbnN0YW5jZW9mIEVycm9yID8gaS5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCI7XG4gICAgdGhyb3cgby5zZXRTdGF0dXMoe1xuICAgICAgY29kZTogbGUuRVJST1IsXG4gICAgICBtZXNzYWdlOiBzXG4gICAgfSksIGk7XG4gIH0gZmluYWxseSB7XG4gICAgby5lbmQoKTtcbiAgfVxufTtcbmNsYXNzIFFyIGV4dGVuZHMgYmEge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgY29uc3QgciA9IGAke3QubWVzc2FnZX1gO1xuICAgIHN1cGVyKHIpLCB0aGlzLnJlc3BvbnNlID0gdDtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgaiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiBxaShlLCB0LCBhc3luYyAoKSA9PiB7XG4gIG4gJiYgZyhuLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgbyA9IGF3YWl0IGUuc2VuZCh0KTtcbiAgaWYgKFlpKG8pKVxuICAgIHRocm93IGcoXCJjZGVfcmVzcG9uc2VfZXJyb3JcIiwge1xuICAgICAgLi4ub1xuICAgIH0pLCBuZXcgUXIobyk7XG4gIGlmICghQmkobywgcikpIHtcbiAgICBjb25zdCBpID0gci5zYWZlUGFyc2Uobyk7XG4gICAgdGhyb3cgaS5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByLCBcIkFjdHVhbDpcIiwgbyksIGkuZXJyb3IpO1xuICB9XG4gIHJldHVybiBuICYmIGcobiwge1xuICAgIC4uLm9cbiAgfSksIG87XG59KSwgQmkgPSAoZSwgdCkgPT4gdC5zYWZlUGFyc2UoZSkuc3VjY2VzcywgWWkgPSAoZSkgPT4gRWEuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsIEhpID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IGooZSwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHQgfSwgTXIpLCBGID0gYXN5bmMgKGUpID0+IGF3YWl0IGooZSwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIERyKSwgUmUgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgaihcbiAgZSxcbiAgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIFVyLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd1wiXG4pLCBYciA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBqKFxuICBlLFxuICB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiB0IH0sXG4gIExhLFxuICBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIlxuKSwgSmkgPSBhc3luYyAoZSwgdCkgPT4ge1xuICBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCB7XG4gICAgLi4udFxuICB9KTtcbiAgY29uc3QgciA9IGF3YWl0IGooZSwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfcHJcIiwgcGF5bG9hZDogdCB9LCBVcik7XG4gIHJldHVybiBnKFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wcl9yZXN1bHRcIiwge1xuICAgIC4uLnJcbiAgfSksIHI7XG59LCB6ID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IGooXG4gIGUsXG4gIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiB0IH0sXG4gIFNvLFxuICBcImNvbmZpcm1fcGF5bWVudF9mbG93XCJcbiksIFdpID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IGooXG4gIGUsXG4gIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiB0IH0sXG4gIE9yLFxuICBcImZpbmFsaXplX3NldHVwX3BheW1lbnRfbWV0aG9kXCJcbiksIEtpID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IGooXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIiwgcGF5bG9hZDogdCB9LFxuICBDbyxcbiAgXCJjaGVja19pZl9wb3B1cF93aW5kb3dfdmVyaWZpZWRcIlxuKSwgWmkgPSBhc3luYyAoZSwgdCwgcikgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgSGkoZSwge1xuICAgIHNlY3VyZV90b2tlbjogdCxcbiAgICBwcm9tb3Rpb25fY29kZTogclxuICB9KSwgbyA9IG5ldyBTZXQobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5jdXJyZW5jeSkpO1xuICBpZiAoby5zaXplICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgY3VycmVuY3ksIGdvdCAke28uc2l6ZX1gKTtcbiAgY29uc3QgaSA9IG8udmFsdWVzKCkubmV4dCgpLnZhbHVlID8/IFwidXNkXCIsIHMgPSBWYShuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLnJlbWFpbmluZ19hbW91bnRfYXRvbSkpO1xuICByZXR1cm4ge1xuICAgIGN1cnJlbmN5OiBpLFxuICAgIGFtb3VudEF0b206IHNcbiAgfTtcbn0sIGdlID0gYXN5bmMgKGUsIHQsIHIsIG4pID0+IHtcbiAgaWYgKHIpXG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogMCwgY3VycmVuY3k6IFwidXNkXCIgfTtcbiAge1xuICAgIG4gPSBuIHx8IHZvaWQgMDtcbiAgICBjb25zdCBvID0gYXdhaXQgWmkoZSwgdCwgbik7XG4gICAgcmV0dXJuIHsgYW1vdW50QXRvbTogby5hbW91bnRBdG9tLCBjdXJyZW5jeTogby5jdXJyZW5jeSB9O1xuICB9XG59LCBlbiA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGlmIChlLnNpemUgPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gQ0RFIGNvbm5lY3Rpb25zIGZvdW5kXCIpO1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShlLnZhbHVlcygpKS5tYXAoXG4gICAgICAobikgPT4gaihuLCB7IHR5cGU6IFwidG9rZW5pemVfY2FyZFwiLCBwYXlsb2FkOiB0IH0sIHZvKVxuICAgIClcbiAgKTtcbn0sIHJyID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IGooXG4gIGUsXG4gIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IHQgfSxcbiAgJGUsXG4gIFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiXG4pLCBRaSA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBqKGUsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiB0IH0sIE9yLCBcInNldHVwX2NoZWNrb3V0XCIpLCAkdCA9IGFzeW5jIChlLCB0KSA9PiBhd2FpdCBqKGUsIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkOiB0IH0sICRlLCBcInBlcmZvcm1fY2hlY2tvdXRcIiksIHRuID0gMWUzLCBYaSA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnNvbGUubG9nKHQpO1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogZSxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogdG4sXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2UsIG8gPSBhd2FpdCBqKG4sIHsgdHlwZTogXCJwaW5nLTNkcy1zdGF0dXNcIiB9LCBibyk7XG4gIHJldHVybiBjb25zb2xlLmxvZyhcIvCfn6IgQ0RFIGNvbm5lY3Rpb24gc3VjY2Vzc2Z1bCEgU3RvcHBpbmcgcG9sbGluZy4uLiBSZXN1bHQ6XCIsIG8pLCBvO1xufSwgVnQgPSBhc3luYyAoZSwgdCkgPT4gYXdhaXQgaihcbiAgZSxcbiAgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IHQgfSxcbiAgamEsXG4gIFwicHJlcGFyZV9wYXltZW50X2Zsb3dcIlxuKSwgcm4gPSBhc3luYyAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAoYXdhaXQgaihcbiAgICAgIGUsXG4gICAgICB7IHR5cGU6IFwiZ2V0X3N0YW5kYXJkaXplZF9lcnJvcl9jb2RlXCIsIHBheWxvYWQ6IHsgbWVzc2FnZTogdCB9IH0sXG4gICAgICBVYVxuICAgICkpLmVycm9yX2NvZGU7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgZ2V0U3RhbmRhcmRpemVkRXJyb3JDb2RlOlwiLCBZKHIpKSwgXCJQQVlNRU5UX0ZBSUxFRF9HRU5FUklDXCI7XG4gIH1cbn0sIGVzID0gYXN5bmMgKGUsIHQpID0+IGF3YWl0IGooXG4gIGUsXG4gIHsgdHlwZTogXCJzZXRfdXNlcl9kZXZpY2VfdG9rZW5cIiwgcGF5bG9hZDogeyBkZXZpY2VfdG9rZW46IHQgfSB9LFxuICB4YVxuKSwgSyA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuSy5FbnVtLnN0cmlwZTtcbmNvbnN0IG5uID0gKHtcbiAgc2NyaXB0SWQ6IGUsXG4gIHNyYzogdCxcbiAgY2hlY2tMb2FkZWRGbjogclxufSkgPT4ge1xuICBjb25zdCBuID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKG8sIGkpID0+IHtcbiAgICBsZXQgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgcy5zcmMgPSB0LCBzLmlkID0gZSwgcy5hc3luYyA9ICEwO1xuICAgIGNvbnN0IGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtcbiAgICByKCkgPyBvKCkgOiBjID8gcyA9IGMgOiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImxvYWRcIixcbiAgICAgICgpID0+IHtcbiAgICAgICAgbi5hYm9ydCgpLCBvKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApLCBzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImVycm9yXCIsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIG4uYWJvcnQoKSwgaShcIkZhaWxlZCB0byBsb2FkIHRoZSBzY3JpcHRcIik7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IG4uc2lnbmFsIH1cbiAgICApO1xuICB9KTtcbn0sIG9uID0gKCkgPT4gbm4oe1xuICBzY3JpcHRJZDogXCJfX29wX2ludGVybmFsX2FwcGxlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsXG4gIGNoZWNrTG9hZGVkRm46ICgpID0+ICEhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhIXdpbmRvdy5BcHBsZVBheVNES1xufSksIGFuID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgbiA9IHQuYmlsbGluZ0NvbnRhY3QsIG8gPSB0LnNoaXBwaW5nQ29udGFjdCwgaSA9IHsgLi4uZSB9O1xuICBpZiAociB8fCBuIHx8IG8pIHtcbiAgICBpW20uRU1BSUxdID0gaVttLkVNQUlMXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5lbWFpbEFkZHJlc3MpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmVtYWlsQWRkcmVzcykgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBpW20uQ09VTlRSWV0gPSBpW20uQ09VTlRSWV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY291bnRyeUNvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmNvdW50cnlDb2RlKSB8fCAobyA9PSBudWxsID8gdm9pZCAwIDogby5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBpW20uWklQX0NPREVdID0gaVttLlpJUF9DT0RFXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5wb3N0YWxDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5wb3N0YWxDb2RlKSB8fCAobyA9PSBudWxsID8gdm9pZCAwIDogby5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCI7XG4gICAgY29uc3QgcyA9IGlbbS5GSVJTVF9OQU1FXSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5naXZlbk5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmdpdmVuTmFtZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZ2l2ZW5OYW1lKSB8fCBcIlwiLCBjID0gaVttLkxBU1RfTkFNRV0gfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZmFtaWx5TmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZmFtaWx5TmFtZSkgfHwgKG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uZmFtaWx5TmFtZSkgfHwgXCJcIjtcbiAgICBzIHx8IGMgPyAoaVttLkZJUlNUX05BTUVdID0gcywgaVttLkxBU1RfTkFNRV0gPSBjKSA6IChpW20uRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIGlbbS5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIGk7XG59O1xueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcbmNvbnN0IHRzID0gKHtcbiAgdG90YWw6IGUsXG4gIHByZWZpbGw6IHRcbn0pID0+IHtcbiAgdmFyIG47XG4gIGlmICh0Lm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IGUuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7dC50b2tlbn1gLCBncikudG9TdHJpbmcoKVxuICAgIH07XG4gIGNvbnN0IHIgPSAobiA9IHQubGluZV9pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IG5bMF07XG4gIGlmIChyKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiBlLmFtb3VudCxcbiAgICAgICAgbGFiZWw6IChyID09IG51bGwgPyB2b2lkIDAgOiByLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiByID09IG51bGwgPyB2b2lkIDAgOiByLmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiAociA9PSBudWxsID8gdm9pZCAwIDogci5iaWxsaW5nX2ludGVydmFsX2NvdW50KSA/PyB2b2lkIDAsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHt0LnRva2VufWBcbiAgICB9O1xufSwgcnMgPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBlLFxuICBpbml0aWFsUHJldmlldzogdCxcbiAgcHJlZmlsbDogcixcbiAgZGVmYXVsdExhYmVsOiBuID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIHZhciBjLCBsO1xuICBjb25zdCBvID0gKCgoYyA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogYy5jdXJyZW5jeSkgPz8gKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY3VycmVuY3kpID8/IHQuY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIHMgPSAoKCgobCA9IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnRBdG9tKSA/PyAodCA9PSBudWxsID8gdm9pZCAwIDogdC5hbW91bnRBdG9tKSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGU6IG8sXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5sYWJlbCkgPz8gbiA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBlICE9IG51bGwgJiYgZS5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IHNcbiAgICB9XG4gIH07XG59LCBzbiA9ICh7XG4gIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGUsXG4gIGluaXRpYWxQcmV2aWV3OiB0LFxuICBwcmVmaWxsOiByLFxuICBkZWZhdWx0TGFiZWw6IG5cbn0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW5jeUNvZGU6IG8sIHRvdGFsOiBpIH0gPSBycyh7XG4gICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogZSxcbiAgICBpbml0aWFsUHJldmlldzogdCxcbiAgICBwcmVmaWxsOiByLFxuICAgIGRlZmF1bHRMYWJlbDogblxuICB9KTtcbiAgbGV0IHMgPSB7XG4gICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICBjdXJyZW5jeUNvZGU6IG8sXG4gICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgIF0sXG4gICAgdG90YWw6IGksXG4gICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IHRzKHtcbiAgICAgIHRvdGFsOiBpLFxuICAgICAgcHJlZmlsbDogclxuICAgIH0pXG4gIH07XG4gIHJldHVybiBlICE9IG51bGwgJiYgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ICYmICh0eXBlb2YgZS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHMgPSB7XG4gICAgLi4ucyxcbiAgICAuLi5lLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QocylcbiAgfSA6IHMgPSB7IC4uLnMsIC4uLmUuYXBwbGVQYXlQYXltZW50UmVxdWVzdCB9KSwgcztcbn0sIHsgbG9nX186IFpjLCBlcnJfXzogY24gfSA9IEEoXCJjb21tb25cIiksIEplID0gKGUpID0+IHtcbiAgaWYgKGUucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHtlLnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiBlLnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgSCA9IChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBlLmZpbmQoKG4pID0+IHQuc2FmZVBhcnNlKG4pLnN1Y2Nlc3MpO1xuICBpZiAoIXIpXG4gICAgdGhyb3cgY24oXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgZSksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gdC5wYXJzZShyKTtcbn0sIGxuID0gKGUpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogZS5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogZS56aXBDb2RlLFxuICAgIGNvdW50cnk6IGUuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogZS5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGUubGFzdE5hbWVcbn0pLCBXZSA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IHQgfSA9IEEoZS5sb2dQcmVmaXgpLCByID0gYXdhaXQgRihlLmFueUNkZUNvbm5lY3Rpb24pLCBuID0gSmUoZS5jb25maXJtUmVzdWx0KTtcbiAgaWYgKHIubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiB0KFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgV2koZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIudG9rZW4sXG4gICAgICBwbV9pZDogbi5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICBpZiAoZS51c2VQYXlGaXJzdEZsb3cpIHtcbiAgICAgIGlmICh0KFwiVXNpbmcgcGF5LWZpcnN0IGZsb3cuLi5cIiksICFlLmNvbmZpcm1SZXN1bHQucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICAgIHRocm93IGNuKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgZS5jb25maXJtUmVzdWx0KSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZS5jb25maXJtUmVzdWx0LnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgICB0KFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgbyA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogci50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogZS5yZXF1aXJlZEZvcm1GaWVsZHNbbS5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogZS5yZXF1aXJlZEZvcm1GaWVsZHNbbS5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiBlLnJlcXVpcmVkRm9ybUZpZWxkc1ttLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IGUucmVxdWlyZWRGb3JtRmllbGRzW20uUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogci5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IHIuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IG4ucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCAkdChlLmFueUNkZUNvbm5lY3Rpb24sIG8pIH07XG4gIH1cbn0sIG5zID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgdW4gPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICB0LmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke25zfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke2V9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG4gPSByLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBuLmFwcGVuZENoaWxkKHQuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgbyA9IG4ucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksIHsgaG9zdDogciwgaWZyYW1lOiBvLCBjYW5jZWxCdXR0b246IGkgfTtcbn07XG5mdW5jdGlvbiBvcyhlLCB0LCByKSB7XG4gIGNvbnN0IG4gPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBhd2FpdCBYaShlLCByKTtcbiAgICAgIGkgJiYgKGNsZWFySW50ZXJ2YWwobyksIHQoaSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgbigpO1xuICBjb25zdCBvID0gc2V0SW50ZXJ2YWwobiwgdG4pO1xuICByZXR1cm4gbztcbn1cbmZ1bmN0aW9uIGFzKHtcbiAgZWxlbWVudHM6IGUsXG4gIHBvbGxpbmdJbnRlcnZhbDogdCxcbiAgcmVzb2x2ZTogclxufSkge1xuICBjb25zdCBuID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwodCksIGUuaG9zdC5yZW1vdmUoKSwgcih7IHN0YXR1czogRC5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiBlLmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbiksICgpID0+IHtcbiAgICBlLmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBwdChlKSB7XG4gIGNvbnN0IHsgdXJsOiB0LCBiYXNlVXJsOiByIH0gPSBlLCBuID0gdW4odCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobykgPT4ge1xuICAgIGNvbnN0IGkgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG4uaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIG8obCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgcyA9IG9zKG4uaWZyYW1lLCBpLCBuZXcgVVJMKHIpLm9yaWdpbiksIGMgPSBhcyh7XG4gICAgICBlbGVtZW50czogbixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IG9cbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBkbiA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHQgPSBhd2FpdCBwdChlKTtcbiAgaWYgKHQuc3RhdHVzID09PSBELkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHQuc3RhdHVzID09PSBELkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiB0LnN0YXR1cyAhPT0gRC5TVUNDRVNTICYmIGR0KHQuc3RhdHVzKSwge1xuICAgIGhyZWY6IHQuaHJlZlxuICB9O1xufSwgaXMgPSAoZSwgdCkgPT4ge1xuICBjb25zdCByID0gd2luZG93Lm9wZW4odCwgXCJfYmxhbmtcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIHI7XG59LCBwbiA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IG8gfSA9IEEoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSwgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBpcyhlLCBuKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBLaSh0LCByKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGkoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlfSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBvKFkodSkpLCBjbGVhckludGVydmFsKGwpLCBzKFkodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogc3MsIGVycl9fOiBHdCB9ID0gQShcImFpcndhbGxleC1jY1wiKSwgY3MgPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBscyA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBjcy5zYWZlUGFyc2UoZSk7XG4gIGlmICghdC5zdWNjZXNzKSB7XG4gICAgY29uc3QgciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gO1xuICAgIHRocm93IEd0KG4pLCBuZXcgRXJyb3Iocik7XG4gIH1cbiAgcmV0dXJuIHQuZGF0YTtcbn0sIG1uID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIHVzID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0ID0gbmV3IFVSTChlID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBzcyhgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHt0fV1gKSwgdDtcbiAgfSBjYXRjaCAodCkge1xuICAgIGNvbnN0IHIgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgR3QociwgYFJlc3VsdGluZyBVUkw6ICR7ZX0uXG5FcnJvcjogJHtZKHQpfWApLCBuZXcgRXJyb3Iocik7XG4gIH1cbn0sIGZuID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IGxzKHQpLCBuID0gYXdhaXQgZG4oeyB1cmw6IHJbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogZSB9KSwgbyA9IHVzKG4uaHJlZiA/PyBcIlwiKSwgaSA9IHJbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChpICE9PSBvKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbCA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtvfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke2l9KS5gO1xuICAgIHRocm93IEd0KGwpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IG8sXG4gICAgICBjb25zZW50X2lkOiByW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCBfbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgeW4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHdlID0gKCkgPT4ge1xuICBjb25zdCBlID0gbmF2aWdhdG9yLmxhbmd1YWdlcyAmJiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLmxlbmd0aCA/IG5hdmlnYXRvci5sYW5ndWFnZXMgOiBbbmF2aWdhdG9yLmxhbmd1YWdlXTtcbiAgbGV0IHQgPSBlID09IG51bGwgPyB2b2lkIDAgOiBlWzBdO1xuICByZXR1cm4gdCAmJiAodCA9IHQuc3BsaXQoXCItXCIpWzBdKSwgdDtcbn0sIHsgbG9nX186IGhuLCBlcnJfXzogZ24gfSA9IEEoXCJjb21tb24tY2NcIiksIGFlID0gKGUsIHQsIHIpID0+IHtcbiAgaWYgKHIpIHtcbiAgICBobihgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkocil9YCk7XG4gICAgZm9yIChjb25zdCBbbywgaV0gb2YgT2JqZWN0LmVudHJpZXMocikpXG4gICAgICBlW29dIHx8IChlW29dID0gaSk7XG4gIH1cbiAgY29uc3QgbiA9IFllLnNhZmVQYXJzZShlKTtcbiAgaWYgKCFuLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBvID0gbi5lcnJvci5mb3JtYXQoKSwgaSA9IFNyKG8pO1xuICAgIGZvciAoY29uc3QgW3MsIGNdIG9mIE9iamVjdC5lbnRyaWVzKGkpKVxuICAgICAgdChzLCBjLCBzKTtcbiAgICB0aHJvdyBnbihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGkpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gbi5kYXRhO1xufSwgd24gPSAoZSwgdCkgPT4ge1xuICBmb3IgKGNvbnN0IHIgb2YgZSlcbiAgICBpZiAoci5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IHIuZXJyb3JzLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgY29uc3QgbyA9IEVyLnNhZmVQYXJzZShuLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFvLnN1Y2Nlc3MpXG4gICAgICAgICAgZ24oYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtuLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIG4pO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpID0gby5kYXRhO1xuICAgICAgICAgIHQoaSwgbi5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgaG4oYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHIuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIHsgbG9nX186IHR0IH0gPSBBKFwiYXd4LWFwcGxlLXBheVwiKTtcbmFzeW5jIGZ1bmN0aW9uIGRzKGUsIHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gKGF3YWl0IFZ0KHQuY29ubmVjdGlvbiwge1xuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogZS52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBvID0gbiA9PSBudWxsID8gdm9pZCAwIDogbi5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIW8pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgdC5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKG8pLCBnKFwiYXBwbGVfcGF5X2NvbXBsZXRlX21lcmNoYW50X3ZhbGlkYXRpb25cIiwge1xuICAgICAgLi4ub1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgdGhyb3cgdC5zZXNzaW9uLmFib3J0KCksIHI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHBzKGUsIHQpIHtcbiAgaWYgKCFlLnJlZGlyZWN0X3VybClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmRcIik7XG4gIHR0KFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgZSk7XG4gIGNvbnN0IHsgc3RhdHVzOiByIH0gPSBhd2FpdCBwdCh7XG4gICAgdXJsOiBlLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiB0LmJhc2VVcmxcbiAgfSk7XG4gIGlmICh0dChg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7cn1dYCksIHIgPT09IEQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAociA9PT0gRC5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBjb25zdCBuID0gYXdhaXQgeih0LmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBlLnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGUuY29uc2VudF9pZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHR0KFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbiksIG47XG59XG5hc3luYyBmdW5jdGlvbiBtcyhlLCB0KSB7XG4gIHZhciByLCBuLCBvLCBpLCBzO1xuICB0cnkge1xuICAgIGNvbnN0IGMgPSBlLnBheW1lbnQsIGwgPSBhbih0Lm5vbkNkZUZvcm1JbnB1dHMsIGMpLCB1ID0gYWUoXG4gICAgICBsLFxuICAgICAgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHQuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLnVcbiAgICB9KTtcbiAgICBjb25zdCBwID0gKGF3YWl0IFJlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbbS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVttLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVttLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogdVttLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogdVttLkNPVU5UUlldXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHdlKClcbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBsZXQgZiA9IGF3YWl0IHoodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHAsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGMudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdHQoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBmKTtcbiAgICBsZXQgeSA9IChuID0gKHIgPSBmLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF0pID09IG51bGwgPyB2b2lkIDAgOiBuLmlkO1xuICAgIGNvbnN0IGggPSAobyA9IGYucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogby5maW5kKFxuICAgICAgKGIpID0+IGIudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChoICE9IG51bGwgJiYgaC5yZWRpcmVjdF91cmwgJiYgaC5jb25zZW50X2lkICYmIGgudGhlaXJfcG1faWQgJiYgKGYgPSBhd2FpdCBwcyhoLCB0KSwgeSA9IChzID0gKGkgPSBmLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBzLmlkKSwgIXkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCB2ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHYpLCBXZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiB0LmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiB1LFxuICAgICAgY29uZmlybVJlc3VsdDogZixcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgdC5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChsKSwgYztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogRGUsIGVycl9fOiB2biB9ID0gQShcImF3eC1hcHBsZS1wYXlcIiksIGZzID0gaGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IEsuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgbiA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBfbik7XG4gICAgaWYgKCFuKVxuICAgICAgcmV0dXJuIHI7XG4gICAgaWYgKERlKFwiTG9hZGluZyBBcHBsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBvbigpLCAhd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIERlKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgcjtcbiAgICBpZiAoRGUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIERlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IEYocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGdlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgVC5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIHZuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgcCksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigocCA9PSBudWxsID8gdm9pZCAwIDogcC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIF9zID0gb2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogb1xuICB9KSA9PiB7XG4gICAgdmFyIHk7XG4gICAgY29uc3QgaSA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBfbiksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcywgaW5pdGlhbFByZXZpZXc6IGMgfSA9IG4sIGwgPSBlLmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBGKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIF8gPSBzbih7XG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGMsXG4gICAgICBwcmVmaWxsOiB7XG4gICAgICAgIC4uLnVcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0TGFiZWw6ICh5ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5tZXRhZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkucHJvY2Vzc29yX2FjY291bnRfbmFtZVxuICAgIH0pLCBwID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBfKSwgZiA9IHtcbiAgICAgIHNlc3Npb246IHAsXG4gICAgICBjb25uZWN0aW9uOiBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogaS5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogZCxcbiAgICAgIGJhc2VVcmw6IGUuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IG8sXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICByZXR1cm4gZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiBKcih1LCBbXCJicmFuZFwiXSksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSksIG5ldyBQcm9taXNlKChoLCB2KSA9PiB7XG4gICAgICBjb25zdCBiID0gKCkgPT4ge1xuICAgICAgICBEZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9O1xuICAgICAgcC5vbmNhbmNlbCA9IGIsIHAub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKEMpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBkcyhDLCBmKTtcbiAgICAgICAgfSBjYXRjaCAoRSkge1xuICAgICAgICAgIHYoRSk7XG4gICAgICAgIH1cbiAgICAgIH0sIHAub25wYXltZW50bWV0aG9kc2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IEMgPSB7XG4gICAgICAgICAgbmV3VG90YWw6IHsgLi4uXy50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHAuY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKEMpO1xuICAgICAgfSwgcC5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKEMpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgRSA9IGF3YWl0IG1zKEMsIGYpO1xuICAgICAgICAgIGgoRSk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICB2KEUpO1xuICAgICAgICB9XG4gICAgICB9LCBwLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IHZuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgbXQgPSAoe1xuICBnYXRld2F5OiBlLFxuICBnYXRld2F5TWVyY2hhbnRJZDogdCxcbiAgbWVyY2hhbnROYW1lOiByLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogbyxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSxcbiAgcHJlZmlsbDogc1xufSkgPT4ge1xuICB2YXIgXywgcDtcbiAgY29uc3QgYyA9ICgoXyA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogXy5hbW91bnRBdG9tKSA/PyAobyA9PSBudWxsID8gdm9pZCAwIDogby5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChwID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBwLmN1cnJlbmN5KSA/PyAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jdXJyZW5jeSkgPz8gby5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IGUsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IG4gPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogclxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogaSAhPSBudWxsICYmIGkucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBpICE9IG51bGwgJiYgaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHR5cGVvZiBpLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID09IFwiZnVuY3Rpb25cIiA/IHsgLi4uZCwgLi4uaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdChkKSB9IDogeyAuLi5kLCAuLi5pLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBkO1xufSwgYm4gPSAoKSA9PiBubih7XG4gIHNjcmlwdElkOiBcIl9fb3BfaW50ZXJuYWxfZ29vZ2xlX3BheV9zZGtcIixcbiAgc3JjOiBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIixcbiAgY2hlY2tMb2FkZWRGbjogKCkgPT4ge1xuICAgIHZhciBlLCB0O1xuICAgIHJldHVybiAhISgodCA9IChlID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGUucGF5bWVudHMpICE9IG51bGwgJiYgdC5hcGkpO1xuICB9XG59KTtcbmxldCBFdCA9IG51bGw7XG5jb25zdCBFbiA9IGFzeW5jIChlKSA9PiBhd2FpdCBIcihlKSA9PT0gXCJwcm9kXCIgPyBcIlBST0RVQ1RJT05cIiA6IFwiVEVTVFwiLCBmdCA9IGFzeW5jIChlLCB0KSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCBFbihlKTtcbiAgcmV0dXJuIEV0ID09PSBudWxsICYmIChFdCA9IG5ldyB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzLmFwaS5QYXltZW50c0NsaWVudCh7XG4gICAgZW52aXJvbm1lbnQ6IHIsXG4gICAgbWVyY2hhbnRJbmZvOiB0Lm1lcmNoYW50SW5mb1xuICB9KSksIEV0O1xufSwgeXMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgocikgPT4gci50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiB0ID8gQ3IucGFyc2UodCkgOiBudWxsO1xufSwgQ24gPSAoZSwgdCkgPT4ge1xuICB2YXIgbywgaSwgcywgYztcbiAgY29uc3QgciA9IHsgLi4uZSB9LCBuID0gKGkgPSAobyA9IHQucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBvLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBpLmJpbGxpbmdBZGRyZXNzO1xuICBpZiAobikge1xuICAgIGNvbnN0IFtsLCAuLi51XSA9ICgoYyA9IChzID0gbi5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogcy50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBkID0gdS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgclttLkVNQUlMXSA9IHJbbS5FTUFJTF0gfHwgdC5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbbS5DT1VOVFJZXSA9IHJbbS5DT1VOVFJZXSB8fCBuLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgclttLkFERFJFU1NdID0gclttLkFERFJFU1NdIHx8IG4uYWRkcmVzczEgfHwgXCJcIiwgclttLkNJVFldID0gclttLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgclttLlpJUF9DT0RFXSA9IHJbbS5aSVBfQ09ERV0gfHwgbi5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgclttLlNUQVRFXSA9IHJbbS5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIjtcbiAgICBjb25zdCBfID0gclttLkZJUlNUX05BTUVdIHx8IGwgfHwgXCJcIiwgcCA9IHJbbS5MQVNUX05BTUVdIHx8IGQgfHwgXCJcIjtcbiAgICBfIHx8IHAgPyAoclttLkZJUlNUX05BTUVdID0gXywgclttLkxBU1RfTkFNRV0gPSBwKSA6IChyW20uRklSU1RfTkFNRV0gPSBcIl9PUF9VTktOT1dOXCIsIHJbbS5MQVNUX05BTUVdID0gXCJcIik7XG4gIH1cbiAgcmV0dXJuIHI7XG59LCB7IGxvZ19fOiBXLCBlcnJfXzogYmUgfSA9IEEoXCJhd3gtZ29vZ2xlLXBheVwiKSwgaHMgPSBoZShcbiAgYXN5bmMgKHsgY29udGV4dDogZSwgZm9ybUNhbGxiYWNrczogdCB9KSA9PiB7XG4gICAgdmFyIF8sIHA7XG4gICAgY29uc3QgciA9IHtcbiAgICAgIHByb2Nlc3NvcjogSy5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHluKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBXKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgbyA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFvLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIGJlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgcjtcbiAgICBpZiAoVyhcIkxvYWRpbmcgR29vZ2xlIFBheSBzY3JpcHRcIiksIGF3YWl0IGJuKCksICEoKHAgPSAoXyA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBfLnBheW1lbnRzKSAhPSBudWxsICYmIHAuYXBpKSlcbiAgICAgIHJldHVybiBiZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHI7XG4gICAgaWYgKGF3YWl0IEVuKGUuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFvLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gYmUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCByO1xuICAgIFcoXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGYgPSBtdCh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBvLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG8ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogby5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeSA9IGF3YWl0IGZ0KGUuYmFzZVVybCwgZiksIHsgcmVzdWx0OiBoIH0gPSBhd2FpdCB5LmlzUmVhZHlUb1BheShmKTtcbiAgICAgIGlmICghaClcbiAgICAgICAgcmV0dXJuIFcoXCJHb29nbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdXNlclwiKSwgcjtcbiAgICB9IGNhdGNoIChmKSB7XG4gICAgICByZXR1cm4gYmUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBmKSwgcjtcbiAgICB9XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IEYocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGdlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVC5haXJ3YWxsZXhHb29nbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBCKGUuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgaW5pdGlhbFByZXZpZXc6IHVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoeSkge1xuICAgICAgICBiZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCB5KSwgdC5nZXQub25DaGVja291dEVycm9yKCh5ID09IG51bGwgPyB2b2lkIDAgOiB5Lm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IEsuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBkXG4gICAgfTtcbiAgfVxuKSwgZ3MgPSBvZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgeSwgaCwgdiwgYiwgQywgRTtcbiAgICBXKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgeW4pLCB7IGluaXRpYWxQcmV2aWV3OiBzLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjIH0gPSBvLCBsID0gaS5tZXRhZGF0YTtcbiAgICBpZiAoIWwucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHUgPSBtdCh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IHMsXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBjXG4gICAgfSksIGQgPSBlLmFueUNkZUNvbm5lY3Rpb24sIF8gPSBhd2FpdCBGKGQpO1xuICAgIGcoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogaS5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IEpyKF8sIFtcImJyYW5kXCJdKSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KTtcbiAgICBjb25zdCBwID0gYXdhaXQgZnQoZS5iYXNlVXJsLCB1KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgSSA9IGF3YWl0IHAubG9hZFBheW1lbnREYXRhKHUpO1xuICAgICAgVyhcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIEkpO1xuICAgICAgY29uc3QgTyA9IENuKHIsIEkpLCBTID0gYWUoXG4gICAgICAgIE8sXG4gICAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgICBvID09IG51bGwgPyB2b2lkIDAgOiBvLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICAgKTtcbiAgICAgIGcoXCJiaWxsaW5nX2RldGFpbHNfcmVjZWl2ZWRcIiwge1xuICAgICAgICAuLi5TXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHEgPSAoeSA9IChmID0gSS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkudG9rZW47XG4gICAgICBpZiAoIXEpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgX3QgPSBhd2FpdCBSZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IFNbbS5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBTW20uRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IFNbbS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBTW20uWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IFNbbS5DT1VOVFJZXVxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogd2UoKVxuICAgICAgfSksIHZlID0geXMoX3QpO1xuICAgICAgVyhcIlN0YXJ0IGZsb3cgbmV4dCBhY3Rpb25zXCIsIHZlKTtcbiAgICAgIGxldCBzZSA9IGF3YWl0IHooZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IF8udG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHZlID09IG51bGwgPyB2b2lkIDAgOiB2ZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFcoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBzZSk7XG4gICAgICBsZXQgTmUgPSAodiA9IChoID0gc2UucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYuaWQ7XG4gICAgICBjb25zdCBkZSA9IChiID0gc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogYi5maW5kKFxuICAgICAgICAoRmUpID0+IEZlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKGRlICYmIGRlLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBXKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgZGUpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogRmUgfSA9IGF3YWl0IHB0KHtcbiAgICAgICAgICB1cmw6IGRlLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBlLmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChXKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtGZX1dYCksIEZlID09PSBELkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKEZlID09PSBELkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoZGUgJiYgIU5lICYmIChzZSA9IGF3YWl0IHooZCwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IF8udG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBkZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZGUuY29uc2VudF9pZFxuICAgICAgICB9XG4gICAgICB9KSwgVyhcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHNlKSwgTmUgPSAoRSA9IChDID0gc2UucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogQ1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuaWQpLCAhTmUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIFdlKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IFMsXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IHNlLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChJKSB7XG4gICAgICB0aHJvdyBiZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBJKSwgZyhcImdvb2dsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBJXG4gICAgICB9KSwgbmV3IEVycm9yKChJID09IG51bGwgPyB2b2lkIDAgOiBJLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIFNuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgUG4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuYXN5bmMgZnVuY3Rpb24gd3MoZSwgdCkge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgVnQodC5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYXBwbGVfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IGUudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiB0LnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgbyA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFvKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihvKSwgZyhcImFwcGxlX3BheV9jb21wbGV0ZV9tZXJjaGFudF92YWxpZGF0aW9uXCIsIHtcbiAgICAgIC4uLm9cbiAgICB9KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IHQuc2Vzc2lvbi5hYm9ydCgpLCByO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiB2cyhlLCB0KSB7XG4gIHZhciByLCBuO1xuICB0cnkge1xuICAgIGNvbnN0IG8gPSBlLnBheW1lbnQsIGkgPSBhbih0Lm5vbkNkZUZvcm1JbnB1dHMsIG8pLCBzID0gYWUoaSwgdC5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5zXG4gICAgfSksIGF3YWl0IFJlKHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHNbbS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogc1ttLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogc1ttLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogc1ttLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogc1ttLkNPVU5UUlldXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHdlKClcbiAgICB9KTtcbiAgICBjb25zdCBjID0ge1xuICAgICAgZGF0YURlc2NyaXB0b3I6IFwiQ09NTU9OLkFQUExFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoby50b2tlbi5wYXltZW50RGF0YSkpXG4gICAgfSwgbCA9IGF3YWl0IHoodC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IGNcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoISgobiA9IChyID0gbC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdKSA9PSBudWxsID8gdm9pZCAwIDogbi5pZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBkID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiB0LnNlc3Npb24uY29tcGxldGVQYXltZW50KGQpLCBXZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXV0aG5ldC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogdC5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogcyxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IGwsXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKG8pIHtcbiAgICBjb25zdCBpID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoaSksIG87XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHJ0LCBlcnJfXzoga24gfSA9IEEoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCBicyA9IGhlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCBuID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFNuKTtcbiAgICBpZiAoIW4pXG4gICAgICByZXR1cm4gcjtcbiAgICBpZiAocnQoXCJMb2FkaW5nIEFwcGxlIFBheSBzY3JpcHRcIiksIGF3YWl0IG9uKCksICF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gcnQoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCByO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHJ0KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCByO1xuICAgIGlmICghbi5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IEYocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IGdlKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoXykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgVC5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uXyxcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGtuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgcCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgICAgZXJyb3I6IHBcbiAgICAgICAgfSksIHQuZ2V0Lm9uQ2hlY2tvdXRFcnJvcigocCA9PSBudWxsID8gdm9pZCAwIDogcC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBLLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBFcyA9IG9lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBuLFxuICAgIGZvcm1DYWxsYmFja3M6IG9cbiAgfSkgPT4ge1xuICAgIHZhciB5O1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGksIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgfSA9IG4sIGMgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU24pLCBsID0gZS5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgRihsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCBfID0gc24oe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBpLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGRlZmF1bHRMYWJlbDogKHkgPSBjID09IG51bGwgPyB2b2lkIDAgOiBjLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogeS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSk7XG4gICAgZyhcImFwcGxlX3BheV9mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgcHJvY2Vzc29yX25hbWU6IHQucHJvY2Vzc29yX25hbWUsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xuICAgIH0pO1xuICAgIGNvbnN0IHAgPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIF8pLCBmID0ge1xuICAgICAgc2Vzc2lvbjogcCxcbiAgICAgIGNvbm5lY3Rpb246IGUuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiB0Lm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBkLFxuICAgICAgYmFzZVVybDogZS5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogb1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChoLCB2KSA9PiB7XG4gICAgICBwLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBydChcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIHYobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCBwLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChiKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgd3MoYiwgZik7XG4gICAgICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgICAgICB2KEMpO1xuICAgICAgICB9XG4gICAgICB9LCBwLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBiID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiBfLnRvdGFsXG4gICAgICAgIH07XG4gICAgICAgIHAuY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKGIpO1xuICAgICAgfSwgcC5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGIpID0+IHtcbiAgICAgICAgZyhcImFwcGxlX3BheV9wYXltZW50X2F1dGhvcml6ZWRcIik7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgQyA9IGF3YWl0IHZzKGIsIGYpO1xuICAgICAgICAgIGgoQyk7XG4gICAgICAgIH0gY2F0Y2ggKEMpIHtcbiAgICAgICAgICB2KEMpO1xuICAgICAgICB9XG4gICAgICB9LCBwLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGgpID0+IHtcbiAgICAgIHRocm93IGtuKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIGcoXCJhcHBsZV9wYXlfcGF5bWVudF9lcnJvclwiLCB7XG4gICAgICAgIGVycm9yOiBoXG4gICAgICB9KSwgaDtcbiAgICB9KTtcbiAgfVxuKSwgeyBsb2dfXzogbWUsIGVycl9fOiBPZSB9ID0gQShcImF1dGhuZXQtZ29vZ2xlcGF5XCIpLCBDcyA9IGhlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB2YXIgZCwgXztcbiAgICBtZShcIkluaXRpYWxpemluZyBBdXRobmV0IEdvb2dsZVBheSBmbG93XCIpO1xuICAgIGNvbnN0IHIgPSB7XG4gICAgICBwcm9jZXNzb3I6IEsuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIG4gPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgUG4pO1xuICAgIGlmICghbilcbiAgICAgIHJldHVybiByO1xuICAgIG1lKFwiR29vZ2xlIFBheSBDUE1cIiwgbik7XG4gICAgY29uc3QgbyA9IG4ubWV0YWRhdGE7XG4gICAgaWYgKCFvLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIE9lKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgcjtcbiAgICBpZiAobWUoXCJMb2FkaW5nIEdvb2dsZSBQYXkgc2NyaXB0XCIpLCBhd2FpdCBibigpLCAhKChfID0gKGQgPSB3aW5kb3cuZ29vZ2xlKSA9PSBudWxsID8gdm9pZCAwIDogZC5wYXltZW50cykgIT0gbnVsbCAmJiBfLmFwaSkpXG4gICAgICByZXR1cm4gT2UoXCJHb29nbGUgUGF5IFNESyBub3QgbG9hZGVkIHByb3Blcmx5XCIpLCByO1xuICAgIG1lKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwID0gbXQoe1xuICAgICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogby5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBvLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IG8uZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICAvLyBUaGlzIGlzIGZvciBpbml0aWFsIHBheW1lbnQgcmVxdWVzdCB0byBjaGVjayBhdmFpbGFiaWxpdHkuIEFjdHVhbCBgaW5pdGlhbFByZXZpZXdgIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBVSSBpcyBzaG93blxuICAgICAgICBpbml0aWFsUHJldmlldzoge1xuICAgICAgICAgIGFtb3VudEF0b206IDAsXG4gICAgICAgICAgY3VycmVuY3k6IFwiVVNEXCJcbiAgICAgICAgfVxuICAgICAgfSksIGYgPSBhd2FpdCBmdChlLmJhc2VVcmwsIHApLCB7IHJlc3VsdDogeSB9ID0gYXdhaXQgZi5pc1JlYWR5VG9QYXkocCk7XG4gICAgICBpZiAoIXkpXG4gICAgICAgIHJldHVybiBtZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCByO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIHJldHVybiBPZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIHApLCByO1xuICAgIH1cbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgRihpKSwgYyA9IHMubW9kZSA9PT0gXCJzZXR1cFwiLCBsID0gYXdhaXQgZ2UoaSwgcy50b2tlbiwgYywgdm9pZCAwKSwgdSA9IGFzeW5jIChwKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBULmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIoZS5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0LFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogbFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIE9lKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGYpLCBnKFwiZ29vZ2xlX3BheV9wYXltZW50X2Vycm9yXCIsIHtcbiAgICAgICAgICBlcnJvcjogZlxuICAgICAgICB9KSwgdC5nZXQub25DaGVja291dEVycm9yKChmID09IG51bGwgPyB2b2lkIDAgOiBmLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IEsuRW51bS5hdXRob3JpemVfbmV0LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogdVxuICAgIH07XG4gIH1cbiksIFNzID0gb2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBub25DZGVGb3JtSW5wdXRzOiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgdmFyIGYsIHksIGgsIHY7XG4gICAgY29uc3QgeyBpbml0aWFsUHJldmlldzogaSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyB9ID0gbywgbCA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbikubWV0YWRhdGEsIHUgPSBtdCh7XG4gICAgICBnYXRld2F5OiBcImF1dGhvcml6ZW5ldFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGwucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IGwucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IGwuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSksIGQgPSBlLmFueUNkZUNvbm5lY3Rpb24sIF8gPSBhd2FpdCBGKGQpO1xuICAgIGcoXCJnb29nbGVfcGF5X2Zsb3dfc3RhcnRlZFwiLCB7XG4gICAgICBwcm9jZXNzb3JfbmFtZTogci5wcm9jZXNzb3JfbmFtZSxcbiAgICAgIHByZWZpbGw6IF8sXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG4gICAgfSk7XG4gICAgY29uc3QgcCA9IGF3YWl0IGZ0KGUuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGIgPSBhd2FpdCBwLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIG1lKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgYik7XG4gICAgICBjb25zdCBDID0gQ24odCwgYiksIEUgPSBhZShDLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgICAgLi4uRVxuICAgICAgfSk7XG4gICAgICBjb25zdCBJID0gKHkgPSAoZiA9IGIucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB5LnRva2VuO1xuICAgICAgaWYgKCFJKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE8gPSBhd2FpdCBSZShkLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IEVbbS5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBFW20uRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IEVbbS5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBFW20uWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IEVbbS5DT1VOVFJZXVxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9sYW5ndWFnZTogd2UoKVxuICAgICAgfSk7XG4gICAgICBtZShcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBPKTtcbiAgICAgIGNvbnN0IFMgPSBhd2FpdCB6KGQsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBfLnRva2VuLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICAgIG1vYmlsZV93YWxsZXRfcGF5bWVudF9kYXRhOiB7XG4gICAgICAgICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uR09PR0xFLklOQVBQLlBBWU1FTlRcIixcbiAgICAgICAgICAgIGRhdGFWYWx1ZTogd2luZG93LmJ0b2EoSSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKCEoKHYgPSAoaCA9IFMucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogaFswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHYuaWQpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIHJldHVybiBXZSh7XG4gICAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWdvb2dsZXBheVwiLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uOiBkLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogRSxcbiAgICAgICAgY29uZmlybVJlc3VsdDogUyxcbiAgICAgICAgdXNlUGF5Rmlyc3RGbG93OiAhMVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoYikge1xuICAgICAgdGhyb3cgT2UoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgYiksIGcoXCJnb29nbGVfcGF5X3BheW1lbnRfZXJyb3JcIiwge1xuICAgICAgICBlcnJvcjogYlxuICAgICAgfSksIG5ldyBFcnJvcigoYiA9PSBudWxsID8gdm9pZCAwIDogYi5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBQcyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwga3MgPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogQWUsIGVycl9fOiBCZSB9ID0gQShcImFkeWVuLWNjXCIpLCBBcyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IFBzLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBBbiA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgSXMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gQXMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2VzcylcbiAgICB0aHJvdyBCZShgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlKX1gKSwgbmV3IEVycm9yKEFuKTtcbiAgcmV0dXJuIHQuZGF0YTtcbn0sIFRzID0gKGUpID0+IEpTT04ucGFyc2UoZSksIG5yID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIFJzID0gYXN5bmMgKCkgPT4ge1xuICBBZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgbnIoKSB8fCBhd2FpdCBsdCg1MDApO1xuICBpZiAoIW5yKCkpXG4gICAgdGhyb3cgQmUoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKEFuKTtcbiAgcmV0dXJuIEFlKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgTnMgPSAoZSkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IHQsIGxvY2FsZTogciwgY291bnRyeUNvZGU6IG4sIGNvbXBvbmVudDogbywgaG9zdDogaSwgY2FuY2VsQnV0dG9uOiBzIH0gPSBlLCBjID0gVHModFtcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiBBZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7Yy50eXBlfWApLCBuZXcgUHJvbWlzZSgobCkgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICBBZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBwKSwgaS5yZW1vdmUoKTtcbiAgICB9LCBkID0gKHkpID0+IHtcbiAgICAgIEJlKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIHkpLCBsKHsgc3RhdHVzOiBELkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgXyA9ICh5KSA9PiB7XG4gICAgICBCZShcIkFkeWVuIGVycm9yOlwiLCB5KSwgbCh7IHN0YXR1czogRC5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIHAgPSAoKSA9PiB7XG4gICAgICBsKHsgc3RhdHVzOiBELkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHApO1xuICAgIGNvbnN0IGYgPSAoeSwgaCwgdikgPT4ge1xuICAgICAgaS5yZW1vdmUoKSwgbCh7IHN0YXR1czogRC5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogeSwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIFJzKCkudGhlbihcbiAgICAgICh5KSA9PiB5KHtcbiAgICAgICAgY2xpZW50S2V5OiB0W1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHRbXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiByLFxuICAgICAgICBjb3VudHJ5Q29kZTogbixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogZixcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBfXG4gICAgICB9KVxuICAgICkudGhlbigoeSkgPT4ge1xuICAgICAgeS5jcmVhdGVGcm9tQWN0aW9uKGMsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KG8pO1xuICAgIH0pO1xuICB9KTtcbn0sIEZzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCByID0gZSA/PyB0LCBuID0ga3Muc2FmZVBhcnNlKHIpO1xuICByZXR1cm4gbi5zdWNjZXNzID8gKEFlKGBSZXNvbHZlZCBsb2NhbGU6ICR7bi5kYXRhfWApLCBuLmRhdGEpIDogKEJlKGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtyfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIEluID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtYWR5ZW4tYWN0aW9uXCJdKSAhPT0gdm9pZCAwLCBUbiA9IGFzeW5jIChlLCB0LCByKSA9PiB7XG4gIGNvbnN0IG4gPSBJcyh0KSwgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIG8uaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IGksIGlmcmFtZTogcywgY2FuY2VsQnV0dG9uOiBjIH0gPSB1bihcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgcy5yZXBsYWNlV2l0aChvKTtcbiAgY29uc3QgbCA9IGF3YWl0IE5zKHtcbiAgICBoZWFkZXJzOiBuLFxuICAgIGxvY2FsZTogRnMociksXG4gICAgY291bnRyeUNvZGU6IGUsXG4gICAgY29tcG9uZW50OiBvLFxuICAgIGhvc3Q6IGksXG4gICAgY2FuY2VsQnV0dG9uOiBjXG4gIH0pO1xuICBpZiAobC5jbGVhbnVwKCksIGwuc3RhdHVzID09PSBELkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRC5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gRC5TVUNDRVNTKSB7XG4gICAgaWYgKCFsLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiBBZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGwuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIGR0KGwuc3RhdHVzKTtcbn0sIHsgbG9nX186IE1zLCBlcnJfXzogUm4gfSA9IEEoXCJwb2NreXQtY2NcIiksIERzID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgT3MgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gRHMuc2FmZVBhcnNlKGUpO1xuICBpZiAoIXQuc3VjY2Vzcykge1xuICAgIGNvbnN0IHIgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YDtcbiAgICB0aHJvdyBSbihuKSwgbmV3IEVycm9yKHIpO1xuICB9XG4gIHJldHVybiB0LmRhdGE7XG59LCBObiA9IChlKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdCA9IG5ldyBVUkwoZSA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gTXMoYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3R9XWApLCB0O1xuICB9IGNhdGNoICh0KSB7XG4gICAgY29uc3QgciA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IFJuKHIsIGBSZXN1bHRpbmcgVVJMOiAke2V9LlxuRXJyb3I6ICR7WSh0KX1gKSwgbmV3IEVycm9yKHIpO1xuICB9XG59LCBUdCA9IChlLCB0KSA9PiBuZXcgVVJMKGUpLnNlYXJjaFBhcmFtcy5nZXQodCksIExzID0gKGUpID0+IChlID09IG51bGwgPyB2b2lkIDAgOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIFVzID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IE9zKHQpLCBuID0gYXdhaXQgZG4oeyB1cmw6IHJbXCJvcC1wb2NreXQtM2RzLXVybFwiXSwgYmFzZVVybDogZSB9KTtcbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgdmF1bHRfaWQ6IE5uKG4uaHJlZiA/PyBcIlwiKSxcbiAgICAgIHRyYW5zYWN0aW9uX25vOiByW1wib3AtcG9ja3l0LXR4bi1ub1wiXSxcbiAgICAgIHJlZmVyZW5jZV9ubzogcltcIm9wLXBvY2t5dC1yZWYtbm9cIl1cbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiBvciB9ID0gQShcInN0cmlwZS1jY1wiKSwganMgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBGbiA9IGFzeW5jIChlKSA9PiB7XG4gIGcoXCIzZHNfc3RyaXBlX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5lXG4gIH0pLCBvcihg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtlLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgRm8oZSksIGcoXCIzZHNfc3RyaXBlX2NvbXBsZXRlXCIpLCBvcihcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIHhzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGpzLnNhZmVQYXJzZShlKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBTdHJpcGUgM0RTIG1ldGFkYXRhIGhhcyB1bmV4cGVjdGVkIGZvcm1hdDogJHtKU09OLnN0cmluZ2lmeSh0LmVycm9yLmVycm9ycyl9YCk7XG4gIHJldHVybiB7XG4gICAgc3RyaXBlX3BrOiB0LmRhdGEuc3RyaXBlX3BrLFxuICAgIGNsaWVudF9zZWNyZXQ6IHQuZGF0YS5jbGllbnRfc2VjcmV0LFxuICAgIHN0cmlwZV9wbV9pZDogdC5kYXRhLnN0cmlwZV9wbV9pZFxuICB9O1xufSwgJHMgPSA0LCB7IGxvZ19fOiBfZSwgZXJyX186IFJ0IH0gPSBBKFwidW5pZmllZC1jY1wiKSwgVnMgPSBhc3luYyAoe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogb1xufSkgPT4ge1xuICBfZShcIuKUnCBSdW5uaW5nIHVuaWZpZWQgQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCB9KTtcbiAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEYoaSk7XG4gIF9lKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke3MubW9kZX1dYCk7XG4gIGNvbnN0IGMgPSBhZShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciksIGwgPSB7XG4gICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBjLFxuICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICB9LFxuICAgIHVzZV91bmlmaWVkX2NjX2Zsb3c6ICEwLFxuICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzoge1xuICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiBzLmFtb3VudF90b3RhbF9hdG9tXG4gICAgfSxcbiAgICBwYXltZW50X3JvdXRlX2lkOiBvLnBheW1lbnRSb3V0ZUlkXG4gIH07XG4gIFJ0KG8sIGwpLCBfZShg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIFBhcnRpYWwgUE1zIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICBjb25zdCB1ID0gYXdhaXQgZW4oby5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICBzZXNzaW9uX2lkOiBlLmVsZW1lbnRzU2Vzc2lvbklkXG4gIH0pO1xuICB3bih1LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gIGNvbnN0IGQgPSBhd2FpdCBYcihpLCBsKTtcbiAgaWYgKF9lKFwi4pScIHN0YXJ0UGYgcmVzdWx0XCIsIGQpLCBkLmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgcmV0dXJuIE1uKHMubW9kZSwgZCk7XG4gIGlmICghZC5jaGVja291dF9hdHRlbXB0X2lkKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IGF0dGVtcHQgSUQgZnJvbSBQRiByZXN1bHRcIik7XG4gIHJldHVybiBHcyh7XG4gICAgY29udGV4dDogZSxcbiAgICBwcmVmaWxsOiBzLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgY29tbW9uQ2hlY2tvdXRQYXJhbXM6IGwsXG4gICAgYW55Q2RlQ29ubmVjdGlvbjogaSxcbiAgICBzdGFydFBmUmVzdWx0OiBkLFxuICAgIGNoZWNrb3V0QXR0ZW1wdElkOiBkLmNoZWNrb3V0X2F0dGVtcHRfaWRcbiAgfSk7XG59LCBHcyA9IGFzeW5jIChlKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjb250ZXh0OiB0LFxuICAgIHByZWZpbGw6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogbixcbiAgICBjb21tb25DaGVja291dFBhcmFtczogbyxcbiAgICBhbnlDZGVDb25uZWN0aW9uOiBpLFxuICAgIHN0YXJ0UGZSZXN1bHQ6IHMsXG4gICAgY2hlY2tvdXRBdHRlbXB0SWQ6IGNcbiAgfSA9IGU7XG4gIGxldCBsID0gcztcbiAgZm9yIChsZXQgdSA9IDA7IHUgPCAkczsgdSsrKSB7XG4gICAgX2UoYOKUnCBSdW5uaW5nIGNvbmZpcm0gbG9vcCBpdGVyYXRpb24gJHt1fWApO1xuICAgIGNvbnN0IHsgdXNlckFjdGlvbjogZCB9ID0gQnMobCksIF8gPSBhd2FpdCB6cyh0LmJhc2VVcmwsIGQsIHIsIG4pO1xuICAgIGlmIChvLmV4dHJhX21ldGFkYXRhID0ge1xuICAgICAgLi4uby5leHRyYV9tZXRhZGF0YSxcbiAgICAgIC4uLl8ubWV0YWRhdGFGb3JDb25maXJtU3RlcFxuICAgIH0sIF9lKFwi4pScIE5ldyBleHRyYSBtZXRhZGF0YVwiLCBvLmV4dHJhX21ldGFkYXRhKSwgbCA9IGF3YWl0IHooaSwge1xuICAgICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogYyxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogby5leHRyYV9tZXRhZGF0YVxuICAgIH0pLCBfZShg4pScIGNvbmZpcm1QZiByZXN1bHQgKGl0ZXJhdGlvbiAke3V9KWAsIGwpLCBsLmNoZWNrb3V0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICByZXR1cm4gTW4oci5tb2RlLCBsKTtcbiAgfVxuICB0aHJvdyBnKFwidW5pZmllZF9jY191bmV4cGVjdGVkX2JyYW5jaFwiLCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLnRva2VuLFxuICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGwuY2hlY2tvdXRfYXR0ZW1wdF9pZCxcbiAgICBjb25maXJtUEZSZXN1bHQ6IGxcbiAgfSksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGVycm9yLCBwbGVhc2UgdHJ5IGFub3RoZXIgcGF5bWVudCBtZXRob2RcIik7XG59LCB6cyA9IGFzeW5jIChlLCB0LCByLCBuKSA9PiB7XG4gIGlmICh0Ll91bmlmaWVkX2NjX2FjdGlvbl9uYW1lID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgaWYgKHQudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpXG4gICAgICByZXR1cm4gYXdhaXQgRm4oeHModCkpLCB7IG1ldGFkYXRhRm9yQ29uZmlybVN0ZXA6IHt9IH07XG4gICAgaWYgKG1uKHQpKVxuICAgICAgcmV0dXJuIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDogeyBhaXJ3YWxsZXg6IGF3YWl0IGZuKGUsIHQpIH0gfTtcbiAgICBpZiAoSW4odCkpXG4gICAgICByZXR1cm4geyBtZXRhZGF0YUZvckNvbmZpcm1TdGVwOiB7IGFkeWVuOiBhd2FpdCBUbihcbiAgICAgICAgblttLkNPVU5UUlldLFxuICAgICAgICB0LFxuICAgICAgICByLmxvY2FsZVxuICAgICAgKSB9IH07XG4gICAgaWYgKHFzKHQpKVxuICAgICAgcmV0dXJuIGF3YWl0IE9uKHsgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBbdF0gfSwgZSksIHsgbWV0YWRhdGFGb3JDb25maXJtU3RlcDoge30gfTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCAzRFMgdXNlciBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIH0gZWxzZVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZXF1aXJlZCB1c2VyIGFjdGlvbjogJHtKU09OLnN0cmluZ2lmeSh0KX1gKTtcbn0sIHFzID0gKGUpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRG4oW2VdKSwgITA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgQnMgPSAoZSkgPT4ge1xuICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpIHtcbiAgICBpZiAoZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoID09PSAwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICAgIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggPiAxKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbXVsdGlwbGUgcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gcmVxdWlyZWQgdXNlciBhY3Rpb25zXCIpO1xuICBjb25zdCB0ID0gJGEuc2FmZVBhcnNlKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdKTtcbiAgaWYgKCF0LnN1Y2Nlc3MpXG4gICAgdGhyb3cgUnQoXCJVc2VyIGFjdGlvbiByYXcgcGF5bG9hZFwiLCBlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSksIFJ0KFwiUGFyc2luZyBlcnJvclwiLCB0LmVycm9yKSwgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogc2NoZW1hIG9mIHVzZXIgYWN0aW9uIHBheWxvYWQgaXMgbm90IHZhbGlkXCIpO1xuICByZXR1cm4ge1xuICAgIHVzZXJBY3Rpb246IHQuZGF0YVxuICB9O1xufSwgTW4gPSAoZSwgdCkgPT4ge1xuICB2YXIgcjtcbiAgaWYgKGUgPT09IFwic2V0dXBcIikge1xuICAgIGNvbnN0IG4gPSB0LmNjX3BtX2lkID8/ICgociA9IHQucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogclswXS5pZCk7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZTogbm8gQ0MgUE0gSUQgb3IgcGF5bWVudF9tZXRob2RzIGZvdW5kIGluIFBGIHJlc3VsdFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiBuXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIXQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGU6IG5vIGNoZWNrb3V0IHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSBzdGFydFBGXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHQuY2hlY2tvdXRfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbn0sIHsgbG9nX186IGssIGVycl9fOiBhciB9ID0gQShcImNvbW1vbi1jY1wiKTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgWXMgPSBvZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICBub25DZGVGb3JtSW5wdXRzOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgeTtcbiAgICBrKFwi4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5cIiwgeyBjaGVja291dFBheW1lbnRNZXRob2Q6IHQgfSk7XG4gICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEYoaSk7XG4gICAgZyhcImNvbW1vbl9jY19mbG93X3N0YXJ0ZWRcIiwge1xuICAgICAgLi4udCxcbiAgICAgIHByZWZpbGw6IHNcbiAgICB9KTtcbiAgICBjb25zdCBjID0gKChmID0gcy5maW5hbF9mZWF0dXJlX3JvbGxvdXRfc2V0dGluZ3MpID09IG51bGwgPyB2b2lkIDAgOiBmLnVuaWZpZWRfY2MpID8/IDA7XG4gICAgayhg4pScIFVuaWZpZWQgQ0Mgcm9sbG91dDogJHtNYXRoLnJvdW5kKGMgKiAxMDApfSVgKTtcbiAgICBjb25zdCBsID0gTWF0aC5yYW5kb20oKSwgdSA9IGwgPCBjLCBkID0ge1xuICAgICAgcm9sbDogbCxcbiAgICAgIHVuaWZpZWRDQ1JvbGxvdXRSYXRpbzogYyxcbiAgICAgIHVzZVVuaWZpZWRDQ0Zsb3c6IHVcbiAgICB9O1xuICAgIGlmICh1KVxuICAgICAgcmV0dXJuIGsoYOKUnCBQaWNrZWQgdW5pZmllZCBDQyBmbG93ICgke2x9IHZzICR7Y30pYCksIGcoXCJ1bmlmaWVkX2NjX2Zsb3dfcGlja2VkXCIsIGQpLCBWcyh7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdCxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgY3VzdG9tUGFyYW1zOiBvLFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgIH0pO1xuICAgIGsoYOKUnCBQaWNrZWQgbGVnYWN5IENDIGZsb3cgKCR7bH0gdnMgJHtjfSlgKSwgZyhcImxlZ2FjeV9jY19mbG93X3BpY2tlZFwiLCBkKSwgayhg4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkcyBbTW9kZTogJHtzLm1vZGV9XWApO1xuICAgIGNvbnN0IF8gPSBhZShyLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5fXG4gICAgfSk7XG4gICAgY29uc3QgcCA9IHtcbiAgICAgIHNlc3Npb25faWQ6IGUuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IF8sXG4gICAgICBleHRyYV9tZXRhZGF0YToge1xuICAgICAgICBvcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAgICAgIH0sXG4gICAgICB1c2VfdW5pZmllZF9jY19mbG93OiAhMSxcbiAgICAgIHBheW1lbnRfcm91dGVfaWQ6IG8ucGF5bWVudFJvdXRlSWQsXG4gICAgICBjdXN0b21lcl9sYW5ndWFnZTogd2UoKVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGsoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7ZS5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBoID0gYXdhaXQgZW4oby5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogZS5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAod24oaCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBrKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke3MudG9rZW59XWApO1xuICAgICAgICBjb25zdCB2ID0gYXdhaXQgUWkoaSwgcCk7XG4gICAgICAgIHJldHVybiBrKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7di5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHYgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGsoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2UuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCB2ID0gYXdhaXQgcnIoaSwgcCk7XG4gICAgICAgIHJldHVybiBrKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiB2IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgaWYgKGggaW5zdGFuY2VvZiBRciAmJiBoLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIGsoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBrKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGgucmVzcG9uc2UuaGVhZGVycyksIGcoXCIzZHNfcmVxdWlyZWRcIiwge1xuICAgICAgICAgIC4uLnQsXG4gICAgICAgICAgLi4uaC5yZXNwb25zZS5oZWFkZXJzXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2ID0gTHMoaC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICBrKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IFMgPSBhd2FpdCBVcyhlLmJhc2VVcmwsIGgucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgcC5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSBTO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtbihoLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgayhcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCBTID0gYXdhaXQgZm4oZS5iYXNlVXJsLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHAuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gUztcbiAgICAgICAgfVxuICAgICAgICBpZiAoSW4oaC5yZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICAgIGsoXCLilJwgQWR5ZW4gM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWR5ZW4gM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IFMgPSBhd2FpdCBUbihcbiAgICAgICAgICAgIHJbbS5DT1VOVFJZXSxcbiAgICAgICAgICAgIGgucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICAgIHMubG9jYWxlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBwLmV4dHJhX21ldGFkYXRhLmFkeWVuID0gUztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBFID0gYXdhaXQgWHIoaSwgcCk7XG4gICAgICAgIGsoXCLilJwgU3RhcnQgcGF5bWVudCBmbG93IHJlc3VsdDpcIiwgRSk7XG4gICAgICAgIGNvbnN0IEkgPSAoKHkgPSBoLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiB5W1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICB2ID8gayhcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogSSA/IChrKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgRm4oSHMoRSkpKSA6IChrKFwi4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvd1wiKSwgYXdhaXQgT24oRSwgZS5iYXNlVXJsKSk7XG4gICAgICAgIGNvbnN0IE8gPSBFLmNjX3BtX2lkO1xuICAgICAgICBpZiAocy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBrKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke099XWApO1xuICAgICAgICAgIGNvbnN0IFMgPSBhd2FpdCB6KGksIHtcbiAgICAgICAgICAgIHNlY3VyZV90b2tlbjogcy50b2tlbixcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBPXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgayhcIuKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OlwiLCBTKTtcbiAgICAgICAgICBjb25zdCBxID0gSmUoUyk7XG4gICAgICAgICAgcmV0dXJuIGsoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtxLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogcSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGsoYOKUnCBDaGVja2luZyBvdXQgYWZ0ZXIgM0RTIGZsb3cgW0Zsb3c6ICR7SSA/IFwibGVnYWN5XCIgOiBcIm5ld1wifV1gKTtcbiAgICAgICAgICBjb25zdCBTID0gYXdhaXQgcnIoaSwge1xuICAgICAgICAgICAgLi4ucCxcbiAgICAgICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBPLFxuICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogSVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBrKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBTIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IGFyKFwi4pWwIEVycm9yIGNoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFXCIpLCBhcihoKSwgaDtcbiAgICB9XG4gIH1cbiksIEhzID0gKGUpID0+IHtcbiAgY29uc3QgdCA9IGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKHIpID0+IHIudHlwZSA9PT0gXCJzdHJpcGVfM2RzXCIpO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RyaXBlIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBQby5wYXJzZSh0KTtcbn0sIEpzID0gW1wiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiLCBcImFkeWVuXCJdLCBEbiA9IChlKSA9PiB7XG4gIGNvbnN0IHQgPSBlLmZpbmQoKHIpID0+IEpzLmluY2x1ZGVzKHIudHlwZSkpO1xuICBpZiAoIXQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tbW9uIDNEUyBhY3Rpb24gZm91bmRcIik7XG4gIHJldHVybiBFby5wYXJzZSh0KTtcbn0sIE9uID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IERuKGUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKTtcbiAgaWYgKHIucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgayhcIuKUnCAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpLCBnKFwiM2RzX2NvbXBsZXRlXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBrKGDilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93IFtVUkw6ICR7ci5yZWRpcmVjdF91cmx9XWApLCBnKFwiM2RzX3JlZGlyZWN0XCIsIHtcbiAgICAuLi5yXG4gIH0pO1xuICBjb25zdCB7IHN0YXR1czogbiB9ID0gYXdhaXQgcHQoeyB1cmw6IHIucmVkaXJlY3RfdXJsLCBiYXNlVXJsOiB0IH0pO1xuICBpZiAoayhg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7bn1dYCksIG4gPT09IEQuQ0FOQ0VMTEVEKVxuICAgIHRocm93IGcoXCIzZHNfY2FuY2VsbGVkXCIpLCBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IEQuRkFJTFVSRSlcbiAgICB0aHJvdyBnKFwiM2RzX2ZhaWx1cmVcIiksIG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBnKFwiY29tbW9uXzNkc19jb21wbGV0ZWRcIik7XG59LCBXcyA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogeiQxLnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogeiQxLnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogeiQxLnN0cmluZygpLFxuICAgIHN1cHBvcnRlZF9jdXJyZW5jaWVzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgICBlbnZpcm9ubWVudDogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgeyBsb2dfXzogViwgZXJyX186IExuIH0gPSBBKFwibG9vcC1jcnlwdG9cIiksIEtzID0geiQxLm9iamVjdCh7XG4gIGxvb3BGaXJzdE5hbWU6IE4sXG4gIGxvb3BMYXN0TmFtZTogTixcbiAgbG9vcEVtYWlsOiBOLFxuICBbbS5QUk9NT1RJT05fQ09ERV06IFBcbn0pLCBacyA9IHokMS5vYmplY3Qoe1xuICBsb29wRmlyc3ROYW1lOiBQLFxuICBsb29wTGFzdE5hbWU6IFAsXG4gIGxvb3BFbWFpbDogUCxcbiAgW20uUFJPTU9USU9OX0NPREVdOiBQXG59KSwgaXIgPSAoZSwgdCwgciwgbikgPT4ge1xuICBjb25zdCBvID0gci5zYWZlUGFyc2UoZSk7XG4gIGlmICghby5zdWNjZXNzKSB7XG4gICAgY29uc3QgaSA9IG8uZXJyb3IuZm9ybWF0KCksIHMgPSBTcihpKTtcbiAgICBmb3IgKGNvbnN0IFtjLCBsXSBvZiBPYmplY3QuZW50cmllcyhzKSlcbiAgICAgIHQoYywgbCwgYyk7XG4gICAgdGhyb3cgTG4oXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiLCBzKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIG8uZGF0YTtcbn0sIFFzID0gaGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IGUgfSkgPT4ge1xuICAgIFYoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIExvb3AgQ3J5cHRvLi4uXCIpO1xuICAgIGNvbnN0IHQgPSBIKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgV3MpO1xuICAgIFYoYGNoZWNrb3V0UGF5bWVudE1ldGhvZDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSwgVihcIlN0YXJ0aW5nIExvb3AgQ3J5cHRvIGZsb3cuLi5cIik7XG4gICAgY29uc3QgciA9IGF3YWl0IEYoZS5hbnlDZGVDb25uZWN0aW9uKSwgbiA9IHIubW9kZSA9PT0gXCJzZXR1cFwiLCBvID0gYXdhaXQgVnQoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdFxuICAgIH0pLCBpID0gYXdhaXQgZ2UoXG4gICAgICBlLmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICByLnRva2VuLFxuICAgICAgbixcbiAgICAgIHZvaWQgMFxuICAgICk7XG4gICAgaWYgKCFuICYmICF0Lm1ldGFkYXRhLnN1cHBvcnRlZF9jdXJyZW5jaWVzLmluY2x1ZGVzKHIuY3VycmVuY3kpKVxuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDdXJyZW5jeSAke3IuY3VycmVuY3l9IG5vdCBlbmFibGVkIGZvciBMb29wLiBFbmFibGVkIGN1cnJlbmNpZXM6ICR7dC5tZXRhZGF0YS5zdXBwb3J0ZWRfY3VycmVuY2llc31gXG4gICAgICApO1xuICAgIGlmICghbyB8fCAhby5uZXh0X2FjdGlvbl9tZXRhZGF0YSlcbiAgICAgIHRocm93IEVycm9yKFwiRmFpbGVkIHRvIGZldGNoIG5lY2Vzc2FyeSBzZXR1cCBkYXRhIGZvciBMb29wXCIpO1xuICAgIGNvbnN0IHMgPSBvLm5leHRfYWN0aW9uX21ldGFkYXRhO1xuICAgIGxldCBjID0gcy5hdXRob3JpemF0aW9uX2Ftb3VudCwgbCA9IHMubWluX2F1dGhvcml6YXRpb25fYW1vdW50LCB1O1xuICAgIG4gPyAodSA9IDAsIGMgPSBNYXRoLm1heChjLCBsKSkgOiAodSA9IChpID8gaS5hbW91bnRBdG9tIDogci5hbW91bnRfdG90YWxfYXRvbSkgKiBzLnRva2VuX3ByaWNlLCBsID0gTWF0aC5tYXgobCwgdSksIGMgPSBNYXRoLm1heChjLCBsKSk7XG4gICAgY29uc3QgZCA9IHUsIF8gPSB2NCgpLCBwID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudDogZCxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGMsXG4gICAgICBjdXN0b21lclJlZklkOiBfLFxuICAgICAgbWluQXV0aG9yaXphdGlvblVzZEFtb3VudDogbFxuICAgIH0sIGYgPSB7XG4gICAgICBhcGlLZXk6IHQubWV0YWRhdGEuYXBpX3Rva2VuLFxuICAgICAgZW50aXR5SWQ6IHQubWV0YWRhdGEuZW50aXR5X2lkLFxuICAgICAgbWVyY2hhbnRJZDogdC5tZXRhZGF0YS5tZXJjaGFudF9pZCxcbiAgICAgIGVudmlyb25tZW50OiB0Lm1ldGFkYXRhLmVudmlyb25tZW50XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgd2lkZ2V0UHJvcHM6IHAsXG4gICAgICBpbml0TG9vcENvbm5lY3RQcm9wczogZlxuICAgIH07XG4gIH1cbiksIFhzID0gb2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgVihcIlJ1bm5pbmcgTG9vcCBmbG93Li4uXCIpLCBWKFwiY29udGV4dFwiLCBlKSwgVihcImNoZWNrb3V0UGF5bWVudE1ldGhvZFwiLCB0KSwgVihcIm5vbkNkZUZvcm1JbnB1dHNcIiwgciksIFYoXCJmbG93Q2FsbGJhY2tzXCIsIG4pLCBWKFwiY3VzdG9tUGFyYW1zXCIsIG8pO1xuICAgIGxldCBpO1xuICAgIG8gIT0gbnVsbCAmJiBvLnN1Y2Nlc3MgPyBpID0gaXIoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBLc1xuICAgICkgOiBpID0gaXIoXG4gICAgICByLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBac1xuICAgICk7XG4gICAgY29uc3QgcyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IEYoZS5hbnlDZGVDb25uZWN0aW9uKSwgbCA9IGMubW9kZSAhPT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgUmUoZS5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogdCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHQucHJvdmlkZXIsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGkubG9vcEVtYWlsLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGkubG9vcEZpcnN0TmFtZSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGkubG9vcExhc3ROYW1lLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBsLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBsID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBjLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogYy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIGN1c3RvbWVyX2xhbmd1YWdlOiB3ZSgpXG4gICAgfSk7XG4gICAgaWYgKCFvKVxuICAgICAgdGhyb3cgRXJyb3IoXCJDaGVja291dCBmYWlsZWQuIEZhaWxlZCB0byBwcm9wZXJseSBzdWJtaXQgZm9ybSBkYXRhLlwiKTtcbiAgICBjb25zdCBkID0gYXdhaXQgeihzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAvLyBUT0RPOiBXZSBkb24ndCBoYXZlIGEgcGF5aW4gb24gc2V0dXBcbiAgICAgIHRoZWlyX3BtX2lkOiBvLnN1Y2Nlc3MgJiYgby5tb2RlID09IFwiY2hlY2tvdXRcIiA/IG8ucGF5aW4ucGF5bWVudE1ldGhvZC5wYXltZW50TWV0aG9kSWQgOiB2b2lkIDAsXG4gICAgICAvLyBOT1RFOiB3ZSBkbyBoYXZlIHRoZSBjaGVja291dCBhdHRlbXB0IGlkIGhlcmUgZXZlbiBpZiBpdHMgYSBzZXR1cCwgYnV0IGZvciBub3cgd2UgZG9uJ3QgaW5jbHVkZSBpdFxuICAgICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGNoZWNrb3V0IGF0dGVtcHQgc3VwcG9ydCBmb3Igc2V0dXAgaW50ZW50cy5cbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGwgPyB1LmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgbG9vcF9jdXN0b21lcjogby5zdWNjZXNzID8gby5jdXN0b21lciA6IHZvaWQgMCxcbiAgICAgICAgbG9vcF9wYXlpbjogby5zdWNjZXNzICYmIG8ubW9kZSA9PSBcImNoZWNrb3V0XCIgPyBvLnBheWluIDogdm9pZCAwLFxuICAgICAgICBsb29wX2ZhaWx1cmVfZGV0YWlsczogby5zdWNjZXNzID8gdm9pZCAwIDogby5mYWlsdXJlRGV0YWlscyxcbiAgICAgICAgbG9vcF9kZWJ1Z19pbmZvOiBvLnN1Y2Nlc3MgPyB2b2lkIDAgOiBvLmRlYnVnSW5mbyxcbiAgICAgICAgbG9vcF9zdWNjZXNzOiBvLnN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoVihgQ29uZmlybSByZXN1bHQ6ICR7ZH1gKSwgYy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIFYoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpLCBWKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIGQpO1xuICAgICAgY29uc3QgXyA9IEplKGQpO1xuICAgICAgcmV0dXJuIFYoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtfLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogXyB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoVihcIkRvaW5nIGNoZWNrb3V0Li4uXCIpLCAhZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgTG4oXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBkKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbiksIHsgbG9nX186IFEsIGVycl9fOiBzciB9ID0gQShcInBvY2t5dC1wYXlwYWxcIiksIGVjID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCB0YyA9IG9lKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IGUsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IG9cbiAgfSkgPT4ge1xuICAgIHZhciBTLCBxO1xuICAgIFEoXCJSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgRihpKTtcbiAgICBRKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICBjb25zdCBjID0gZWMucGFyc2UodCk7XG4gICAgUShcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgY29uc3QgbCA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MsIHUgPSBhZShcbiAgICAgIHIsXG4gICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKSwgZCA9IGxuKHUpO1xuICAgIFEoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3MubW9kZX1gKTtcbiAgICBjb25zdCBfID0gdjQoKSwgcCA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCBmID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBwLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBwID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhKChTID0gbyA9PSBudWxsID8gdm9pZCAwIDogby5zZXR0aW5ncykgIT0gbnVsbCAmJiBTLnVzZVJlZGlyZWN0RmxvdyksXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBfXG4gICAgICB9LFxuICAgICAgLi4uZFxuICAgIH0sIHkgPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCBlLmJhc2VVcmwpLnRvU3RyaW5nKCksIGggPSBidG9hKEpTT04uc3RyaW5naWZ5KGYpKSwgdiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICByOiBoXG4gICAgfSksIGIgPSBgJHt5fT8ke3YudG9TdHJpbmcoKX1gO1xuICAgIGlmICgocSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8uc2V0dGluZ3MpICE9IG51bGwgJiYgcS51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB0aHJvdyBRKFwiU3RhcnRpbmcgcmVkaXJlY3QgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGIsIGF3YWl0IGx0KDIwICogMWUzKSwgbmV3IEVycm9yKFwiUGF5cGFsIGZsb3cgdGltZWQgb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgUShcIlN0YXJ0aW5nIHBvcHVwIG1vZGUgZm9yIFBheVBhbC4uLlwiKSwgUShcIk9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLlwiKTtcbiAgICBjb25zdCBDID0gYXdhaXQgcG4oXG4gICAgICBcIlBheVBhbFwiLFxuICAgICAgaSxcbiAgICAgIF8sXG4gICAgICBiXG4gICAgKTtcbiAgICBRKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIEMpO1xuICAgIGNvbnN0IEUgPSBObihDLmhyZWYpLCBJID0gVHQoQy5ocmVmLCBcImNhdHRcIik7XG4gICAgaWYgKCFJKVxuICAgICAgdGhyb3cgc3IoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZWRpcmVjdCBVUkw6XCIsIEMuaHJlZiksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTFwiKTtcbiAgICBRKGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyB1c2luZyB2YXVsdCBJRCAke0V9YCk7XG4gICAgY29uc3QgTyA9IGF3YWl0IHooaSwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgdGhlaXJfcG1faWQ6IEUsXG4gICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBwID8gSSA6IHZvaWQgMFxuICAgIH0pO1xuICAgIGlmIChRKFwiQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0XCIsIE8pLCBzLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwic2V0dXBcIixcbiAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IE8ucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgaWYgKCFPLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgdGhyb3cgc3IoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBPKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgIHJlc3VsdDogTy5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgIH07XG4gIH1cbiksIGNyID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IEwsIGVycl9fOiByYyB9ID0gQShcInN0cmlwZS1saW5rXCIpLCBuYyA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBvYyA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBhYyA9IGhlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICBjb25zdCByID0gZS5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgTChcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgbiA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBuYyk7XG4gICAgTChcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgbyA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IEYobyksIHMgPSBpLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBMKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBnZShvLCBpLnRva2VuLCBzLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBsLCBzdHJpcGU6IHUgfSA9IGF3YWl0IElvKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgTChcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgZCA9IGwuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogciA9PSBudWxsID8gdm9pZCAwIDogci5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIF8gPSAoKSA9PiB7XG4gICAgICBkLm1vdW50KGAjJHtjcn1gKTtcbiAgICB9LCBwID0gKCkgPT4ge1xuICAgICAgZC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gciAhPSBudWxsICYmIHIuZG9Ob3RNb3VudE9uSW5pdCA/IEwoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKEwoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIF8oKSksIGQub24oXCJjbGlja1wiLCBhc3luYyAoZikgPT4ge1xuICAgICAgaWYgKEwoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgciAhPSBudWxsICYmIHIub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCByLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIEwoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGYucmVzb2x2ZSgpO1xuICAgIH0pLCBkLm9uKFwiY29uZmlybVwiLCBhc3luYyAoZikgPT4ge1xuICAgICAgTChcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZi5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHkuZXJyb3IgPyAocmMoXCJlcnJvclwiLCB5LmVycm9yKSwgdC5nZXQub25DaGVja291dEVycm9yKHkuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKEwoXCJwYXltZW50TWV0aG9kXCIsIHkucGF5bWVudE1ldGhvZCksIFQuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIoZS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiB5LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogITAgfVxuICAgICAgfSkpO1xuICAgIH0pLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uOiBfLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbjogcCxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IGNjKGNyKVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIGljID0gb2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogb1xuICB9KSA9PiB7XG4gICAgTChcIlJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBpID0gZS5hbnlDZGVDb25uZWN0aW9uO1xuICAgIEwoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHMgPSBzYyhyLCBvLnN0cmlwZVBNKSwgYyA9IGFlKHMsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBnKFwiYmlsbGluZ19kZXRhaWxzX3JlY2VpdmVkXCIsIHtcbiAgICAgIC4uLmNcbiAgICB9KSwgTChcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBsID0gYXdhaXQgUmUoaSwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogdC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IG8uc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbbS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1ttLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1ttLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1ttLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1ttLkNPVU5UUlldXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfbGFuZ3VhZ2U6IHdlKClcbiAgICB9KTtcbiAgICBMKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGwpO1xuICAgIGNvbnN0IGQgPSBvYy5wYXJzZShsLnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkLCBfID0gYXdhaXQgRihpKTtcbiAgICBpZiAoXy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEwoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IHooaSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IF8udG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBKZShwKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBMKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBwID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IF8udG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiB0LnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW20uRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogY1ttLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogY1ttLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1ttLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogXy5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogXy5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0ICR0KGksIHApIH07XG4gICAgfVxuICB9XG4pLCBzYyA9IChlLCB0KSA9PiB7XG4gIHZhciBsLCB1LCBkLCBfLCBwO1xuICBjb25zdCByID0geyAuLi5lIH0sIFtuLCAuLi5vXSA9ICgodSA9IChsID0gdC5iaWxsaW5nX2RldGFpbHMubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogdS5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgaSA9IG8uam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByW20uRU1BSUxdID0gclttLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAoKGQgPSB0LmxpbmspID09IG51bGwgPyB2b2lkIDAgOiBkLmVtYWlsKSB8fCB0LmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIHJbbS5aSVBfQ09ERV0gPSByW20uWklQX0NPREVdIHx8ICgoXyA9IHQuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBfLnBvc3RhbF9jb2RlKSB8fCBcIjAwMDAwXCIsIHJbbS5DT1VOVFJZXSA9IHJbbS5DT1VOVFJZXSB8fCAoKHAgPSB0LmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogcC5jb3VudHJ5KSB8fCBcIlVTXCI7XG4gIGNvbnN0IHMgPSByW20uRklSU1RfTkFNRV0gfHwgbiB8fCBcIlwiLCBjID0gclttLkxBU1RfTkFNRV0gfHwgaSB8fCBcIlwiO1xuICByZXR1cm4gcyB8fCBjID8gKHJbbS5GSVJTVF9OQU1FXSA9IHMsIHJbbS5MQVNUX05BTUVdID0gYykgOiAoclttLkZJUlNUX05BTUVdID0gXCJfT1BfVU5LTk9XTlwiLCByW20uTEFTVF9OQU1FXSA9IFwiXCIpLCBMKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIHIpLCByO1xufSwgY2MgPSAoZSkgPT4gbmV3IFByb21pc2UoKHQpID0+IHtcbiAgY29uc3QgciA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7XG4gICAgbiA/IHQobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocik7XG4gIH07XG4gIHIoKTtcbn0pLCB7IGxvZ19fOiB4LCBlcnJfXzogbGMgfSA9IEEoXCJzdHJpcGUtcHJcIiksIHVjID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBkYyA9IGhlKFxuICBhc3luYyAoeyBjb250ZXh0OiBlLCBmb3JtQ2FsbGJhY2tzOiB0IH0pID0+IHtcbiAgICB4KFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgciA9IEgoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB1Yyk7XG4gICAgeChcIkluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBuID0gZS5hbnlDZGVDb25uZWN0aW9uLCBvID0gYXdhaXQgRihuKSwgaSA9IG8ubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIHgoXCJHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRcIik7XG4gICAgY29uc3QgcyA9IGF3YWl0IGdlKG4sIG8udG9rZW4sIGksIHZvaWQgMCksIGMgPSBhd2FpdCBUbyhcbiAgICAgIHIubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgcy5hbW91bnRBdG9tLFxuICAgICAgcy5jdXJyZW5jeSxcbiAgICAgIGlcbiAgICApO1xuICAgIHgoXCJDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50XCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBjLmNhbk1ha2VQYXltZW50KCk7XG4gICAgaWYgKGwgPT09IG51bGwpXG4gICAgICByZXR1cm4gbGMoXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9O1xuICAgIHgoXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgbCk7XG4gICAgY29uc3QgdSA9IChkLCBfKSA9PiBULnN0cmlwZVBSLnJ1bih7XG4gICAgICBjb250ZXh0OiBlLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBFZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGQpLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogQihlLmZvcm1EaXYpLFxuICAgICAgZm9ybUNhbGxiYWNrczogdCxcbiAgICAgIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZCwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogXyA9PSBudWxsID8gdm9pZCAwIDogXy5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gICAgICBpbml0UmVzdWx0OiB7XG4gICAgICAgIHByb2Nlc3NvcjogSy5FbnVtLnN0cmlwZSxcbiAgICAgICAgcHI6IGMsXG4gICAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7IGFwcGxlUGF5OiBsLmFwcGxlUGF5LCBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5IH0sXG4gICAgICAgIHN0YXJ0RmxvdzogdVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9jZXNzb3I6IEsuRW51bS5zdHJpcGUsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBwcjogYyxcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogbC5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBsLmdvb2dsZVBheVxuICAgICAgfSxcbiAgICAgIHN0YXJ0RmxvdzogdVxuICAgIH07XG4gIH1cbiksIHBjID0gb2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogZSxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHQsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogcixcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogbyxcbiAgICBpbml0UmVzdWx0OiBpXG4gIH0pID0+IHtcbiAgICBpZiAoeChcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIG8ucHJvdmlkZXIgIT09IHQucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke28ucHJvdmlkZXJ9LCBnb3QgJHt0LnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IHMgPSBlLmFueUNkZUNvbm5lY3Rpb24sIGMgPSBpLnByO1xuICAgIGlmIChvICE9IG51bGwgJiYgby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCB5ID0gby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgeChcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgeSk7XG4gICAgICBjb25zdCBoID0gdHlwZW9mIHkuYXBwbGVQYXlQYXltZW50UmVxdWVzdCA9PSBcImZ1bmN0aW9uXCIgPyB5LmFwcGxlUGF5UGF5bWVudFJlcXVlc3Qoe30pIDogeS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0O1xuICAgICAgZmMoYywgeS5hbW91bnQsIHkucGVuZGluZywgaCwgeS5sYWJlbCk7XG4gICAgfVxuICAgIHgoXCJTaG93aW5nIFBSIGRpYWxvZy4uLlwiKSwgYy5zaG93KCk7XG4gICAgY29uc3QgbCA9IGF3YWl0IFJvKGMpO1xuICAgIHgoXCJTdHJpcGUgUE0gYWRkZWQgZXZlbnQ6XCIsIGwpLCB4KFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCB1ID0gbWMociwgbCksIGQgPSBhZSh1LCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgZyhcImJpbGxpbmdfZGV0YWlsc19yZWNlaXZlZFwiLCB7XG4gICAgICAuLi5kXG4gICAgfSksIHgoXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiLCBkKTtcbiAgICBjb25zdCBfID0gYXdhaXQgSmkocywge1xuICAgICAgZmllbGRzOiBkLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB0XG4gICAgfSksIHAgPSBfYyhfKTtcbiAgICB4KFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgTm8ocCwgbCk7XG4gICAgY29uc3QgZiA9IGF3YWl0IEYocyk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICB4KFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgeSA9IGF3YWl0IHoocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IEplKHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHgoXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgeSA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBkW20uRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogZFttLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBkW20uRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogZFttLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogZFttLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogZFttLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZi5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZi5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0ICR0KHMsIHkpIH07XG4gICAgfVxuICB9XG4pLCBtYyA9IChlLCB0KSA9PiB7XG4gIHZhciBkLCBfLCBwLCBmO1xuICBjb25zdCByID0geyAuLi5lIH0sIFtuLCAuLi5vXSA9ICgoXyA9IChkID0gdC5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBkLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF8uc3BsaXQoL1xccysvKSkgPz8gW10sIGkgPSBvLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgcyA9IChmID0gKHAgPSB0LnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBwLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IGYuYWRkcmVzcywgYyA9IHQuc2hpcHBpbmdBZGRyZXNzO1xuICByW20uRU1BSUxdID0gclttLkVNQUlMXSB8fCB0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCByW20uWklQX0NPREVdID0gclttLlpJUF9DT0RFXSB8fCAocyA9PSBudWxsID8gdm9pZCAwIDogcy5wb3N0YWxfY29kZSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCByW20uQ09VTlRSWV0gPSByW20uQ09VTlRSWV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuY291bnRyeSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY291bnRyeSkgfHwgXCJVU1wiO1xuICBjb25zdCBsID0gclttLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJcIiwgdSA9IHJbbS5MQVNUX05BTUVdIHx8IGkgfHwgXCJcIjtcbiAgcmV0dXJuIGwgfHwgdSA/IChyW20uRklSU1RfTkFNRV0gPSBsLCByW20uTEFTVF9OQU1FXSA9IHUpIDogKHJbbS5GSVJTVF9OQU1FXSA9IFwiX09QX1VOS05PV05cIiwgclttLkxBU1RfTkFNRV0gPSBcIlwiKSwgeChcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCByKSwgcjtcbn0sIGZjID0gKGUsIHQsIHIsIG4sIG8pID0+IHtcbiAgZS51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IHQuYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBvID8/IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IHJcbiAgICB9LFxuICAgIGN1cnJlbmN5OiB0LmN1cnJlbmN5LFxuICAgIC8vIFN0cmlwZSdzIGFwcGxlUGF5IG9wdGlvbiBvbmx5IHN1cHBvcnRzICdyZWN1cnJpbmdQYXltZW50UmVxdWVzdCcgfCAnZGVmZXJyZWRQYXltZW50UmVxdWVzdCcgfCAnYXV0b21hdGljUmVsb2FkUGF5bWVudFJlcXVlc3QnIG9mIG5hdGl2ZSBBcHBsZVBheSBwYXltZW50IHJlcXVlc3RcbiAgICAvLyBXZSdyZSBhY2NlcHRpbmcgbmF0aXZlIFBheW1lbnQgUmVxdWVzdCBoZXJlIGZvciBtb3JlIGNvbW1vbiB0eXBpbmcuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHN0cmlwZSBkbyBub3QgZXhwZWN0IGFkZGl0aW9uYWwgZmllbGRzXG4gICAgYXBwbGVQYXk6IG5cbiAgfSk7XG59LCBfYyA9IChlKSA9PiB7XG4gIGlmIChlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBrby5wYXJzZShlLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCB5YyA9ICgpID0+IHtcbiAgY29uc3QgZSA9IHY0KCkuc3BsaXQoXCItXCIpWzBdO1xuICByZXR1cm4ge1xuICAgIGZpcnN0TmFtZTogYHh4XyR7ZX1gLFxuICAgIGxhc3ROYW1lOiBgeHhfJHtlfWAsXG4gICAgZW1haWw6IGB4eF8ke2V9QGVtYWlsLmNvbWAsXG4gICAgemlwQ29kZTogYHh4XyR7ZX1gLFxuICAgIGNvdW50cnk6IFwiVVNcIlxuICB9O1xufSwgeyBsb2dfXzogcGUsIGVycl9fOiBoYyB9ID0gQShcInBheXBhbFwiKSwgVW4gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7IGNsaWVudF9pZDogeiQxLnN0cmluZygpIH0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pLCBnYyA9IGFzeW5jICh7IGNvbnRleHQ6IGUsIGZvcm1DYWxsYmFja3M6IHQgfSkgPT4ge1xuICBjb25zdCByID0gSChlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFVuKTtcbiAgaWYgKCFyKVxuICAgIHRocm93IG5ldyBFcnJvcihcIlBheVBhbCBDUE0gbm90IGZvdW5kIGluIGF2YWlsYWJsZSBwYXltZW50IG1ldGhvZHNcIik7XG4gIHJldHVybiB7XG4gICAgaXNMb2FkaW5nOiAhMSxcbiAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgc3RhcnRGbG93OiAoKSA9PiBULnBheXBhbC5ydW4oe1xuICAgICAgY29udGV4dDogZSxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIoZS5mb3JtRGl2KSxcbiAgICAgIGZvcm1DYWxsYmFja3M6IHQsXG4gICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHt9IH1cbiAgICB9KVxuICB9O1xufSwgd2MgPSBvZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiBlLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBvXG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgcGUoXCJSdW5uaW5nIFBheVBhbCBmbG93Li4uXCIpO1xuICAgICAgY29uc3QgaSA9IGUuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IEYoaSksIHsgaXNBbm9ueW1vdXM6IGMsIHVzZVJlZGlyZWN0RmxvdzogbCB9ID0gby5zZXR0aW5ncyA/PyB7fTtcbiAgICAgIHBlKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICAgIGNvbnN0IHUgPSBVbi5wYXJzZShyKTtcbiAgICAgIHBlKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICAgIGNvbnN0IGQgPSBhZShcbiAgICAgICAgdCxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGMgPyB5YygpIDogdm9pZCAwXG4gICAgICApLCBfID0gbG4oZCk7XG4gICAgICBwZShgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7cy5tb2RlfWApO1xuICAgICAgY29uc3QgcCA9IHY0KCksIGYgPSBzLm1vZGUgIT09IFwic2V0dXBcIiwgeSA9IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogdS5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHUsXG4gICAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogZixcbiAgICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBmID8ge1xuICAgICAgICAgIC8vIFRPRE8gYWRkIGNvdXBvbiBhbmQgY2FydCBhZGp1c3RlZCBsaW5lIGl0ZW1zIGxhdGVyXG4gICAgICAgICAgbGluZV9pdGVtczogcy5saW5lX2l0ZW1zLFxuICAgICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgICB9IDogdm9pZCAwLFxuICAgICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6IGwsXG4gICAgICAgICAgZnJvbnRlbmRfdG9rZW5fZm9yX3JlZGlyZWN0X2Zsb3c6IHBcbiAgICAgICAgfSxcbiAgICAgICAgLi4uX1xuICAgICAgfSwgaCA9IG5ldyBVUkwoXCIvYXBwL3ByZS1hY3Rpb24vc3RhcnQvXCIsIGUuYmFzZVVybCkudG9TdHJpbmcoKSwgdiA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkoeSkpLCBiID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIHN0OiBzLnRva2VuLFxuICAgICAgICByOiB2XG4gICAgICB9KSwgQyA9IGAke2h9PyR7Yi50b1N0cmluZygpfWA7XG4gICAgICBpZiAobClcbiAgICAgICAgdGhyb3cgcGUoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gQywgYXdhaXQgbHQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIGNvbnN0IEUgPSBhd2FpdCBwbihcbiAgICAgICAgXCJQYXlQYWxcIixcbiAgICAgICAgaSxcbiAgICAgICAgcCxcbiAgICAgICAgQ1xuICAgICAgKTtcbiAgICAgIHBlKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIEUpO1xuICAgICAgY29uc3QgSSA9IFR0KEUuaHJlZiwgXCJjYXR0XCIpLCBPID0gVHQoRS5ocmVmLCBcImFwcHJvdmFsX3Nlc3Npb25faWRcIiksIFMgPSBhd2FpdCB6KGksIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBzLnRva2VuLFxuICAgICAgICBjaGVja291dF9hdHRlbXB0X2lkOiBmID8gSSA6IHZvaWQgMCxcbiAgICAgICAgdGhlaXJfcG1faWQ6IGYgPyBPIDogdm9pZCAwXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwZShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBTKSwgV2Uoe1xuICAgICAgICBsb2dQcmVmaXg6IFwicGF5cGFsXCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IGksXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBkLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBTLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6IGZcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGkpIHtcbiAgICAgIHRocm93IGhjKFwiUGF5UGFsIHBheW1lbnQgZXJyb3JcIiwgaSksIGcoXCJjaGVja291dF9lcnJvclwiLCB7IHBheW1lbnRfbWV0aG9kOiBcInBheXBhbFwiLCBlcnJvcjogaSB9KSwgbmV3IEVycm9yKChpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIEVlID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgbiA9IGUuZmlsdGVyKChvKSA9PiB7XG4gICAgY29uc3QgaSA9IHIgPT09IHZvaWQgMCA/ICEwIDogby5wcm9jZXNzb3JfbmFtZSA9PT0gciwgcyA9IG8ucHJvdmlkZXIgPT09IHQ7XG4gICAgcmV0dXJuIGkgJiYgcztcbiAgfSk7XG4gIGlmIChuLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLndhcm4oXCJDUE1zIGxpc3RcIiwgZSksIG5ldyBFcnJvcihgTm8gQ1BNcyBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3R9JyBhbmQgcHJvY2Vzc29yICcke3J9J2ApO1xuICByZXR1cm4gbi5sZW5ndGggIT09IDEgJiYgKGNvbnNvbGUud2FybihcIkNQTXMgbGlzdFwiLCBlKSwgY29uc29sZS53YXJuKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3R9JyBhbmQgcHJvY2Vzc29yICcke3J9J2ApLCBnKFwibW9yZV90aGFuX29uZV9jcG1fZm91bmRcIiwge1xuICAgIHByb3ZpZGVyOiB0LFxuICAgIHByb2Nlc3NvcjogcixcbiAgICBjcG1zOiBlXG4gIH0pKSwgblswXTtcbn0sIFQgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogWXNcbiAgfSxcbiAgLy8gU3RyaXBlXG4gIHN0cmlwZVBSOiB7XG4gICAgaW5pdDogZGMsXG4gICAgcnVuOiBwY1xuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogYWMsXG4gICAgcnVuOiBpY1xuICB9LFxuICAvLyBQb2NreXRcbiAgcG9ja3l0UGF5cGFsOiB7XG4gICAgcnVuOiB0Y1xuICB9LFxuICAvLyBQYXlQYWxcbiAgcGF5cGFsOiB7XG4gICAgaW5pdDogZ2MsXG4gICAgcnVuOiB3Y1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaHMsXG4gICAgcnVuOiBnc1xuICB9LFxuICBhaXJ3YWxsZXhBcHBsZVBheToge1xuICAgIGluaXQ6IGZzLFxuICAgIHJ1bjogX3NcbiAgfSxcbiAgLy8gTG9vcFxuICBsb29wQ3J5cHRvOiB7XG4gICAgaW5pdDogUXMsXG4gICAgcnVuOiBYc1xuICB9LFxuICBhdXRob3JpemVOZXRBcHBsZVBheToge1xuICAgIGluaXQ6IGJzLFxuICAgIHJ1bjogRXNcbiAgfSxcbiAgYXV0aG9yaXplTmV0R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogQ3MsXG4gICAgcnVuOiBTc1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufSwgeyBsb2dfXzogdmMsIGVycl9fOiBiYyB9ID0gQShcImluaXQtZmxvd3NcIiksIGNlID0gKGUsIHQpID0+IHtcbiAgY29uc3QgciA9IG5ldyBqZSgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogcixcbiAgICBpbml0aWFsaXplOiBhc3luYyAobikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHIuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBvID0gYXdhaXQgdChuKTtcbiAgICAgICAgdmMoYOKclCAke2V9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgbyksIHIuc2V0KG8pO1xuICAgICAgfSBjYXRjaCAobykge1xuICAgICAgICBiYyhg8J2ZrSAke2V9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBZKG8pLCBcIkRldGFpbHM6XCIsIG8pLCByLnRocm93KG8sIFkobykpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0sIEVjID0gYXN5bmMgKGUsIHQsIHIpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhlKS5tYXAoKG4pID0+IG4uaW5pdGlhbGl6ZSh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkpKTtcbn0sIENjID0gKCkgPT4gKHtcbiAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAvLyBTdHJpcGUgUFJcbiAgc3RyaXBlUFI6IGNlKFwiU3RyaXBlIFBSXCIsIFQuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IGNlKFwiU3RyaXBlIExpbmtcIiwgVC5zdHJpcGVMaW5rLmluaXQpLFxuICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gIGFpcndhbGxleEdvb2dsZVBheTogY2UoXCJBaXJ3YWxsZXggR29vZ2xlUGF5XCIsIFQuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IGNlKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIFQuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdCksXG4gIC8vIExvb3BcbiAgbG9vcDogY2UoXCJMb29wXCIsIFQubG9vcENyeXB0by5pbml0KSxcbiAgLy8gUGF5UGFsXG4gIHBheXBhbDogY2UoXCJQYXlQYWxcIiwgVC5wYXlwYWwuaW5pdCksXG4gIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogY2UoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBULmF1dGhvcml6ZU5ldEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICBhdXRob3JpemVOZXRBcHBsZVBheTogY2UoXCJBdXRobmV0IEFwcGxlUGF5XCIsIFQuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBTYyB9ID0gQShcImZvcm0tY2FsbGJhY2tzXCIpLCBKID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgbHIgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogSixcbiAgb25CbHVyOiBKLFxuICBvbkNoYW5nZTogSixcbiAgb25Mb2FkOiBKLFxuICBvbkxvYWRFcnJvcjogSixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IEosXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBKLFxuICBvbkNoZWNrb3V0U3VjY2VzczogSixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBKLFxuICBvbkNoZWNrb3V0RXJyb3I6IEosXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBKXG59KSwgcmUgPSBjbGFzcyByZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHQpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IHJlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLCBuXSkgPT4ge1xuICAgICAgICBjb25zdCBvID0gV24ociwgbiA/PyByZS5OT09QLCBTYyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tyXSA9IG87XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLl9jYWxsYmFja3MgPSByZS5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xucmUuTk9PUCA9ICgpID0+IHtcbn0sIHJlLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICBjb25zdCB0ID0ge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhsci5rZXlvZigpLmVudW0pLmZvckVhY2goKHIpID0+IHtcbiAgICB0W3JdID0gcmUuTk9PUDtcbiAgfSksIHQ7XG59LCByZS5mcm9tT2JqZWN0ID0gKHQpID0+IHtcbiAgY29uc3QgciA9IG5ldyByZSgpO1xuICByZXR1cm4gci5zZXRDYWxsYmFja3MobHIucGFyc2UodCkpLCByO1xufTtcbmxldCBOdCA9IHJlO1xuY29uc3QgeyBsb2dfXzogQ3QsIGVycl9fOiBQYyB9ID0gQShcInRyYWNlclwiKSwga2MgPSAoZSwgdCkgPT4ge1xuICB0cnkge1xuICAgIEFjKGUsIHQpO1xuICB9IGNhdGNoIChyKSB7XG4gICAgUGMoYEVycm9yIGluaXRpYWxpemluZyB0cmFjZXI6ICR7cn1gKTtcbiAgfVxufTtcbmxldCB1cjtcbmNvbnN0IEFjID0gYXN5bmMgKGUsIHQpID0+IHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPiBcInVcIilcbiAgICByZXR1cm47XG4gIGNvbnN0IHIgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtM2JFV05PNXQtIX57MDAzfX4uanMnKSwgeyBDb25zb2xlU3BhbkV4cG9ydGVyOiBuLCBTaW1wbGVTcGFuUHJvY2Vzc29yOiBvLCBXZWJUcmFjZXJQcm92aWRlcjogaSB9ID0gciwgcyA9IGF3YWl0IGltcG9ydCgnLi9pbmRleC1peUItT2phQS0hfnswMDZ9fi5qcycpLCB7IEZldGNoSW5zdHJ1bWVudGF0aW9uOiBjIH0gPSBzLCBsID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUNVb3pvaGVwLSF+ezAwYn1+LmpzJyksIHsgWm9uZUNvbnRleHRNYW5hZ2VyOiB1IH0gPSBsLCBkID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LURSM3JUS3ZpLSF+ezAwY31+LmpzJyksIHsgcmVnaXN0ZXJJbnN0cnVtZW50YXRpb25zOiBfIH0gPSBkLCBwID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LTJ1Y05yNTNpLSF+ezAwZX1+LmpzJyksIHsgUmVzb3VyY2U6IGYgfSA9IHAsIHkgPSBhd2FpdCBpbXBvcnQoJy4vZGV0ZWN0LXJlc291cmNlcy1DRGYyNzJqYi0hfnswMGh9fi5qcycpLnRoZW4oKE5lKSA9PiBOZS5kKSwgeyBkZXRlY3RSZXNvdXJjZXNTeW5jOiBoIH0gPSB5LCB2ID0gYXdhaXQgaW1wb3J0KCcuL2luZGV4LUNQUXBvTGUtLSF+ezAwa31+LmpzJyksIHsgT1RMUFRyYWNlRXhwb3J0ZXI6IGIgfSA9IHYsIEMgPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtQ0l5dmZMQ2otIX57MDBtfX4uanMnKSwgeyBCM1Byb3BhZ2F0b3I6IEUsIEIzSW5qZWN0RW5jb2Rpbmc6IEkgfSA9IEMsIE8gPSBhd2FpdCBpbXBvcnQoJy4vaW5kZXgtRHQ4MVVNb0EtIX57MDAxfX4uanMnKSwgeyBCYXRjaFNwYW5Qcm9jZXNzb3I6IFMgfSA9IE87XG4gIEN0KGBJbml0aWFsaXppbmcgdHJhY2VyIHdpdGggdmVyc2lvbiAke2V9IGFuZCBiYXNlVXJsICR7dH1gKTtcbiAgY29uc3QgcSA9IEljKHQpO1xuICBDdChgVXNpbmcgY29sbGVjdG9yIFVSTCAke3F9YCk7XG4gIGNvbnN0IF90ID0gbmV3IGIoeyB1cmw6IHEgfSksIHZlID0ge1xuICAgIFwic2VydmljZS52ZXJzaW9uXCI6IGUsXG4gICAgXCJzZXJ2aWNlLm5hbWVcIjogXCJvanNcIlxuICB9O1xuICByZXR1cm4gbmV3IGkoe1xuICAgIHJlc291cmNlOiBuZXcgZih2ZSkubWVyZ2UoaCgpKSxcbiAgICBzcGFuUHJvY2Vzc29yczogW1xuICAgICAgbmV3IG8obmV3IG4oKSksXG4gICAgICBuZXcgUyhfdCwge1xuICAgICAgICBzY2hlZHVsZWREZWxheU1pbGxpczogNTAwXG4gICAgICB9KVxuICAgIF1cbiAgfSkucmVnaXN0ZXIoe1xuICAgIGNvbnRleHRNYW5hZ2VyOiBuZXcgdSgpLFxuICAgIHByb3BhZ2F0b3I6IG5ldyBFKHsgaW5qZWN0RW5jb2Rpbmc6IEkuTVVMVElfSEVBREVSIH0pXG4gIH0pLCBfKHtcbiAgICBpbnN0cnVtZW50YXRpb25zOiBbXG4gICAgICBuZXcgYyh7XG4gICAgICAgIHByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHM6IFsvLiovXSxcbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIGFsbCBVUkxzXG4gICAgICAgIC8vIEV4Y2x1ZGUgQWR5ZW4gVVJMcyAtIHRoZXkgZG8gbm90IGFsbG93IE9QVElPTlMgcmVxdWVzdHNcbiAgICAgICAgLy8gQWxzbyBleGNsdWRlIGxvb3BjcnlwdG8ueHl6XG4gICAgICAgIGlnbm9yZVVybHM6IFsvXmh0dHBzOlxcL1xcLyguKlxcLik/YWR5ZW5cXC5jb20vLCAvXmh0dHBzOlxcL1xcLyguKlxcLik/bG9vcGNyeXB0b1xcLnh5ei9dXG4gICAgICB9KVxuICAgIF1cbiAgfSksIHVyID0gUGUuZ2V0VHJhY2VyKFwib3BlbnBheS1qc1wiKSwgQ3QoXCJUcmFjZXIgaW5pdGlhbGl6ZWRcIiksIHVyO1xufSwgSWMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gbmV3IFVSTChlKS5ob3N0bmFtZTtcbiAgcmV0dXJuIHQgPT09IFwiY2RlLm9wZW5wYXlzdGFnaW5nLmNvbVwiID8gXCJodHRwczovL290ZWwub3BlbnBheXNhbmRib3guY29tL3YxL3RyYWNlc1wiIDogdCA9PT0gXCJjZGUuZ2V0b3BlbnBheS5jb21cIiA/IFwiaHR0cHM6Ly9vdGVsLmdldG9wZW5wYXkuY29tL3YxL3RyYWNlc1wiIDogXCJodHRwOi8vbG9jYWxob3N0OjQzMTkvdjEvdHJhY2VzXCI7XG59LCBqbiA9IFwiMDEyMzQ1Njc4OUFCQ0RFRkdISktNTlBRUlNUVldYWVpcIiwgeGUgPSAzMiwgVGMgPSAxNiwgeG4gPSAxMCwgZHIgPSAyODE0NzQ5NzY3MTA2NTU7XG52YXIgeWU7XG4oZnVuY3Rpb24oZSkge1xuICBlLkJhc2UzMkluY29ycmVjdEVuY29kaW5nID0gXCJCMzJfRU5DX0lOVkFMSURcIiwgZS5EZWNvZGVUaW1lSW52YWxpZENoYXJhY3RlciA9IFwiREVDX1RJTUVfQ0hBUlwiLCBlLkRlY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiREVDX1RJTUVfTUFMRk9STUVEXCIsIGUuRW5jb2RlVGltZU5lZ2F0aXZlID0gXCJFTkNfVElNRV9ORUdcIiwgZS5FbmNvZGVUaW1lU2l6ZUV4Y2VlZGVkID0gXCJFTkNfVElNRV9TSVpFX0VYQ0VFRFwiLCBlLkVuY29kZVRpbWVWYWx1ZU1hbGZvcm1lZCA9IFwiRU5DX1RJTUVfTUFMRk9STUVEXCIsIGUuUFJOR0RldGVjdEZhaWx1cmUgPSBcIlBSTkdfREVURUNUXCIsIGUuVUxJREludmFsaWQgPSBcIlVMSURfSU5WQUxJRFwiLCBlLlVuZXhwZWN0ZWQgPSBcIlVORVhQRUNURURcIiwgZS5VVUlESW52YWxpZCA9IFwiVVVJRF9JTlZBTElEXCI7XG59KSh5ZSB8fCAoeWUgPSB7fSkpO1xuY2xhc3MgTGUgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHQsIHIpIHtcbiAgICBzdXBlcihgJHtyfSAoJHt0fSlgKSwgdGhpcy5uYW1lID0gXCJVTElERXJyb3JcIiwgdGhpcy5jb2RlID0gdDtcbiAgfVxufVxuZnVuY3Rpb24gUmMoZSkge1xuICBsZXQgdCA9IE1hdGguZmxvb3IoZSgpICogeGUpO1xuICByZXR1cm4gdCA9PT0geGUgJiYgKHQgPSB4ZSAtIDEpLCBqbi5jaGFyQXQodCk7XG59XG5mdW5jdGlvbiBOYyhlKSB7XG4gIGNvbnN0IHQgPSBGYygpLCByID0gdCAmJiAodC5jcnlwdG8gfHwgdC5tc0NyeXB0bykgfHwgbnVsbDtcbiAgaWYgKHR5cGVvZiAociA9PSBudWxsID8gdm9pZCAwIDogci5nZXRSYW5kb21WYWx1ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVaW50OEFycmF5KDEpO1xuICAgICAgcmV0dXJuIHIuZ2V0UmFuZG9tVmFsdWVzKG4pLCBuWzBdIC8gMjU1O1xuICAgIH07XG4gIGlmICh0eXBlb2YgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIucmFuZG9tQnl0ZXMpID09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gKCkgPT4gci5yYW5kb21CeXRlcygxKS5yZWFkVUludDgoKSAvIDI1NTtcbiAgdGhyb3cgbmV3IExlKHllLlBSTkdEZXRlY3RGYWlsdXJlLCBcIkZhaWxlZCB0byBmaW5kIGEgcmVsaWFibGUgUFJOR1wiKTtcbn1cbmZ1bmN0aW9uIEZjKCkge1xuICByZXR1cm4gT2MoKSA/IHNlbGYgOiB0eXBlb2Ygd2luZG93IDwgXCJ1XCIgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsIDwgXCJ1XCIgPyBnbG9iYWwgOiB0eXBlb2YgZ2xvYmFsVGhpcyA8IFwidVwiID8gZ2xvYmFsVGhpcyA6IG51bGw7XG59XG5mdW5jdGlvbiBNYyhlLCB0KSB7XG4gIGxldCByID0gXCJcIjtcbiAgZm9yICg7IGUgPiAwOyBlLS0pXG4gICAgciA9IFJjKHQpICsgcjtcbiAgcmV0dXJuIHI7XG59XG5mdW5jdGlvbiBEYyhlLCB0ID0geG4pIHtcbiAgaWYgKGlzTmFOKGUpKVxuICAgIHRocm93IG5ldyBMZSh5ZS5FbmNvZGVUaW1lVmFsdWVNYWxmb3JtZWQsIGBUaW1lIG11c3QgYmUgYSBudW1iZXI6ICR7ZX1gKTtcbiAgaWYgKGUgPiBkcilcbiAgICB0aHJvdyBuZXcgTGUoeWUuRW5jb2RlVGltZVNpemVFeGNlZWRlZCwgYENhbm5vdCBlbmNvZGUgYSB0aW1lIGxhcmdlciB0aGFuICR7ZHJ9OiAke2V9YCk7XG4gIGlmIChlIDwgMClcbiAgICB0aHJvdyBuZXcgTGUoeWUuRW5jb2RlVGltZU5lZ2F0aXZlLCBgVGltZSBtdXN0IGJlIHBvc2l0aXZlOiAke2V9YCk7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGUpID09PSAhMSlcbiAgICB0aHJvdyBuZXcgTGUoeWUuRW5jb2RlVGltZVZhbHVlTWFsZm9ybWVkLCBgVGltZSBtdXN0IGJlIGFuIGludGVnZXI6ICR7ZX1gKTtcbiAgbGV0IHIsIG4gPSBcIlwiO1xuICBmb3IgKGxldCBvID0gdDsgbyA+IDA7IG8tLSlcbiAgICByID0gZSAlIHhlLCBuID0gam4uY2hhckF0KHIpICsgbiwgZSA9IChlIC0gcikgLyB4ZTtcbiAgcmV0dXJuIG47XG59XG5mdW5jdGlvbiBPYygpIHtcbiAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSA8IFwidVwiICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cbmZ1bmN0aW9uIExjKGUsIHQpIHtcbiAgY29uc3QgciA9IE5jKCksIG4gPSBEYXRlLm5vdygpO1xuICByZXR1cm4gRGMobiwgeG4pICsgTWMoVGMsIHIpO1xufVxuY29uc3QgJG4gPSBcIm9wX2FuYWx5dGljc19kZXZpY2VfdG9rZW5cIiwgVWMgPSAoKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpLmZpbmQoKHIpID0+IHIuaW5jbHVkZXMoJG4pKTtcbiAgaWYgKGUpXG4gICAgcmV0dXJuIGUuc3BsaXQoXCI9XCIpWzFdO1xuICBjb25zdCB0ID0gTGMoKTtcbiAgcmV0dXJuIGpjKHQpLCB0O1xufSwgamMgPSAoZSkgPT4ge1xuICBjb25zdCB0ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gIHQuc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpICsgMSksIGRvY3VtZW50LmNvb2tpZSA9IGAkeyRufT0ke2V9OyBwYXRoPS87IGV4cGlyZXM9JHt0LnRvVVRDU3RyaW5nKCl9YDtcbn07XG5mdW5jdGlvbiB4YygpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBlID0gTSgpLCB0ID0gZTtcbiAgICBpZiAodCAhPSBudWxsICYmIHQubmV4dCB8fCB0ICE9IG51bGwgJiYgdC5fX05FWFRfREFUQV9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19uZXh0XCIpKVxuICAgICAgcmV0dXJuIFwibmV4dGpzXCI7XG4gICAgY29uc3QgciA9IGU7XG4gICAgaWYgKHIgIT0gbnVsbCAmJiByLl9fTlVYVF9fIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjX19udXh0XCIpKVxuICAgICAgcmV0dXJuIFwibnV4dFwiO1xuICAgIGlmIChPYmplY3Qua2V5cyhkb2N1bWVudCkuZmluZCgobykgPT4gby5pbmNsdWRlcyhcInJlYWN0XCIpKSB8fCBBcnJheS5mcm9tKGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbChcImJvZHkgPiAqXCIpKS5maW5kKFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIF9yZWFjdFJvb3RDb250YWluZXIgZG9lc24ndCBleGlzdFxuICAgICAgKG8pID0+IG8uX3JlYWN0Um9vdENvbnRhaW5lclxuICAgICkpXG4gICAgICByZXR1cm4gXCJyZWFjdFwiO1xuICAgIGNvbnN0IG4gPSBlO1xuICAgIHJldHVybiBuICE9IG51bGwgJiYgbi5WdWUgfHwgbiAhPSBudWxsICYmIG4uX19WVUVfXyA/IFwidnVlXCIgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiW25nLXZlcnNpb25dXCIpID8gXCJhbmd1bGFyXCIgOiBcInZhbmlsbGFcIjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIFwidW5rbm93blwiO1xuICB9XG59XG5mdW5jdGlvbiAkYyhlKSB7XG4gIHZhciB0LCByLCBuO1xuICB0cnkge1xuICAgIHN3aXRjaCAoZSkge1xuICAgICAgY2FzZSBcInJlYWN0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcIm5leHRqc1wiOiB7XG4gICAgICAgIGNvbnN0IGkgPSBNKCk7XG4gICAgICAgIHJldHVybiAoKHQgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLm5leHQpID09IG51bGwgPyB2b2lkIDAgOiB0LnZlcnNpb24pIHx8ICgociA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuX19ORVhUX0RBVEFfXykgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYnVpbGRJZCkgfHwgbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJudXh0XCI6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSBcInZ1ZVwiOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgXCJhbmd1bGFyXCI6IHtcbiAgICAgICAgY29uc3QgbyA9IChuID0gTSgpKSA9PSBudWxsID8gdm9pZCAwIDogbi5kb2N1bWVudCwgaSA9IG8gPT0gbnVsbCA/IHZvaWQgMCA6IG8ucXVlcnlTZWxlY3RvcihcIltuZy12ZXJzaW9uXVwiKTtcbiAgICAgICAgcmV0dXJuIGkgPyBpLmdldEF0dHJpYnV0ZShcIm5nLXZlcnNpb25cIikgOiBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuZnVuY3Rpb24gVmMoKSB7XG4gIGNvbnN0IGUgPSB4YygpLCB0ID0gJGMoZSk7XG4gIHJldHVybiB7IGZyYW1ld29yazogZSwgdmVyc2lvbjogdCB9O1xufVxuY2xhc3MgR2Mge1xuICBjb25zdHJ1Y3Rvcih0LCByLCBuLCBvKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGkpID0+IHtcbiAgICAgIGlmICghaS5zb3VyY2UpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocHIoaS5vcmlnaW4pICE9PSBwcih0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBpLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBpLmRhdGEucGVucGFsIHx8IHR5cGVvZiBpLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBpLmRhdGEuc291cmNlICYmIGkuZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBzID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgPSBEbyhKU09OLnBhcnNlKGkuZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KHMpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gcywgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSwge1xuICAgICAgICAgICAgb2JmdXNjYXRlZFZhbHVlOiB1Lm9iZnVzY2F0ZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShsLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tsXSA9IGkuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChpKSA9PiBpLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWkuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBpLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBpKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKGkubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGkpLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKGkubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSB0LCB0aGlzLmJhc2VVcmwgPSByLCB0aGlzLmZvcm1DYWxsYmFja3MgPSBuLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gbztcbiAgfVxufVxuY29uc3QgcHIgPSAoZSkgPT4gbmV3IFVSTChlKS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiB6YyhlLCB0KSB7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiBlLFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogdFxuICB9KS5wcm9taXNlLCBvID0gYXdhaXQgeWEobik7XG4gIGlmICghaGEobiwgbykpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gbjtcbn1cbmNsYXNzIHFjIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbih0LCByKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQodCwgcik7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCB0ID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCF0KVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IEJjID0gKGUsIHQsIHIpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogbiB9ID0gZTtcbiAgbi5wdWJsaXNoZXIuc3Vic2NyaWJlKChvKSA9PiB7XG4gICAgaWYgKG8uaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBpID0gby5sb2FkZWRWYWx1ZSwgcyA9IGkuaXNBdmFpbGFibGUgJiYgaS5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBpLmlzQXZhaWxhYmxlICYmIGkuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgbCA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogcyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBzICYmIG1yKFwiYXBwbGVfcGF5XCIsIGksIHQsIHIsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYyAmJiBtcihcImdvb2dsZV9wYXlcIiwgaSwgdCwgciwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgci5nZXQub25QYXltZW50UmVxdWVzdExvYWQobCk7XG4gICAgfVxuICB9KTtcbn0sIG1yID0gKGUsIHQsIHIsIG4sIG8pID0+IFQuc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogcixcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBFZShyLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGUpLFxuICBub25DZGVGb3JtSW5wdXRzOiBCKHIuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogZSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbyA9PSBudWxsID8gdm9pZCAwIDogby5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHRcbn0pLCBmciA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IFgsIGVycl9fOiBlZSB9ID0gQShcIm9wLWZvcm1cIiksIG5lID0gY2xhc3MgbmUge1xuICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgdmFyIG87XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9ICExLCB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBqZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgamUoKSwgdGhpcy5jb250ZXh0ID0gbmV3IGplKCksIHRoaXMuaW5pdEZsb3dzID0gQ2MoKSwgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgaSA9IFBlLmdldFRyYWNlcihcIm9wZW5wYXktanNcIiksIHMgPSBpLnN0YXJ0U3BhbihcImZvcm0uaW5pdGlhbGl6ZVwiLCB7XG4gICAgICAgIGtpbmQ6IHFlLkNMSUVOVCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIFwib2pzLmNoZWNrb3V0U2VjdXJlVG9rZW5cIjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICBcIm9qcy5kZXZpY2VUb2tlblwiOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIC8vICdlbnZpcm9ubWVudCc6ICxcbiAgICAgICAgICAvLyAnZnJhbWV3b3JrJzogZnJhbWV3b3JrLFxuICAgICAgICAgIC8vICdmcmFtZXdvcmsudmVyc2lvbic6IHZlcnNpb24sXG4gICAgICAgICAgXCJvanMuZm9ybUlkXCI6IHRoaXMuZm9ybUlkLFxuICAgICAgICAgIFwib2pzLnZlcnNpb25cIjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLnJlbGVhc2VfdmVyc2lvblwiOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIFwib2pzLmJhc2VfdXJsXCI6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICBcIm9qcy5yZWZlcnJlclwiOiB0aGlzLnJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIENlLndpdGgoUGUuc2V0U3BhbihDZS5hY3RpdmUoKSwgcyksIGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBjID0gdGhpcy5jcmVhdGVFbGVtZW50KHRlLkNERV9CUklER0UpO1xuICAgICAgICAgIGMubm9kZS5pZCA9IFwiX19vcF9pbnRlcm5hbF9jZGVfYnJpZGdlXCIsIGMubm9kZS5hcmlhSGlkZGVuID0gXCJ0cnVlXCIsIE9iamVjdC5hc3NpZ24oYy5ub2RlLnN0eWxlLCB7XG4gICAgICAgICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgICAgICAgbWFyZ2luOiBcIjBweFwiLFxuICAgICAgICAgICAgcGFkZGluZzogXCIwcHhcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjFweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjFweFwiLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6IFwibm9uZVwiLFxuICAgICAgICAgICAgdXNlclNlbGVjdDogXCJub25lXCJcbiAgICAgICAgICB9KSwgYy5tb3VudChcImJvZHlcIiksIFgoXCJDREUgYnJpZGdlIGVsZW1lbnQgbW91bnRlZFwiKSwgWChcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBYKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICAgIGNvbnN0IGwgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBmclxuICAgICAgICAgIH0pO1xuICAgICAgICAgIFgoXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIHMgPT0gbnVsbCB8fCBzLmFkZEV2ZW50KFwid2FpdGluZ19mb3JfY2RlX2Nvbm5lY3Rpb25cIiksIFgoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgICAgY29uc3QgdSA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc3RhcnRTcGFuKFwiY2RlLmNvbm5lY3RcIiwgdm9pZCAwLCBDZS5hY3RpdmUoKSksIGQgPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgICAgdGltZW91dEVyck1zZzogZnJcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB1ID09IG51bGwgfHwgdS5lbmQoKSwgcyA9PSBudWxsIHx8IHMuYWRkRXZlbnQoXCJjZGVfY29ubmVjdGVkXCIpLCBYKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBhd2FpdCBlcyhkLCB0aGlzLmRldmljZVRva2VuKSwgWChcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgICBjb25zdCBfID0gbmUuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGQsXG4gICAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LnNldChfKSwgQmModGhpcy5pbml0Rmxvd3MsIF8sIHRoaXMuZm9ybUNhbGxiYWNrcyksIFgoXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IEVjKHRoaXMuaW5pdEZsb3dzLCBfLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChsLnRvdGFsQW1vdW50QXRvbXMsIGwuY3VycmVuY3kpLCBYKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIiksIHMgPT0gbnVsbCB8fCBzLnNldFN0YXR1cyh7IGNvZGU6IGxlLk9LIH0pLCBnKFwiZm9ybV9sb2FkZWRcIik7XG4gICAgICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgICAgICBjb25zdCBsID0gWShjKTtcbiAgICAgICAgICBzID09IG51bGwgfHwgcy5zZXRTdGF0dXMoe1xuICAgICAgICAgICAgY29kZTogbGUuRVJST1IsXG4gICAgICAgICAgICBtZXNzYWdlOiBsXG4gICAgICAgICAgfSksIGVlKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBsKSwgZyhcImZvcm1faW5pdF9lcnJvclwiLCB7XG4gICAgICAgICAgICBlcnJvcjogbFxuICAgICAgICAgIH0pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKGwpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHMgPT0gbnVsbCB8fCBzLmVuZCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAoaSkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgICFzIHx8IHMudHlwZSA9PT0gdGUuQ0RFX0JSSURHRSB8fCAocy5ub2RlLnN0eWxlLmhlaWdodCA9IGkpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChpKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCAodGhpcy5jZGVMb2FkRXZlbnQuc2V0KGkpLCBnKFwiY2RlX2xvYWRlZFwiKSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChpKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCAodGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGkpLCBpKSwgZyhcImNkZV9sb2FkX2Vycm9yXCIsIHtcbiAgICAgICAgZXJyb3I6IGlcbiAgICAgIH0pKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoaSwgcyA9IHt9KSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiY3JlYXRlRWxlbWVudFwiKSwgIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgYyA9IEtuLnBhcnNlKGkpLCBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgdSA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhzKTtcbiAgICAgIGwubmFtZSA9IGAke2N9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgZCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtsLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIGQuc2VhcmNoID0gdS50b1N0cmluZygpLCBsLnNyYyA9IGQuaHJlZiwgbC5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgbC5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKGMsIGwpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAoaSwgcykgPT4ge1xuICAgICAgY29uc3QgYyA9IHtcbiAgICAgICAgdHlwZTogaSxcbiAgICAgICAgbm9kZTogcyxcbiAgICAgICAgbW91bnQ6IChsKSA9PiB7XG4gICAgICAgICAgdmFyIHU7XG4gICAgICAgICAgKHUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGwpKSA9PSBudWxsIHx8IHUuYXBwZW5kQ2hpbGQocyksIGcoXCJlbGVtZW50X21vdW50ZWRcIiwge1xuICAgICAgICAgICAgZWxlbWVudF90eXBlOiBpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogYy50eXBlLCBub2RlOiBjLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW3RlLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFt0ZS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW3RlLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbdGUuQ0FSRF9DVkNdOiB2b2lkIDAsXG4gICAgICAgIFt0ZS5DREVfQlJJREdFXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbaV0gPSBjLCBjO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChpKSA9PiB7XG4gICAgICBjb25zdCBzID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIHMuYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgcy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBpLnN0eWxlcyAmJiBzLmFwcGVuZChcInN0eWxlc1wiLCBNbyhpLnN0eWxlcykpLCBzLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCBzO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChpKSA9PiBYZShcbiAgICAgIHtcbiAgICAgICAgc3Bhbk5hbWU6IFwiY29ubmVjdF90b19lbGVtZW50XCIsXG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgICAgICB2ZXJzaW9uOiB0aGlzLm9qc1ZlcnNpb24sXG4gICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICBiYXNlVXJsOiB0aGlzLmJhc2VVcmwsXG4gICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyXG4gICAgICB9LFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzID0gYXdhaXQgemMoaS5ub2RlKTtcbiAgICAgICAgcy50cmFjaW5nQ29udGV4dCA9IHtcbiAgICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgICByZWZlcnJlcjogdGhpcy5yZWZlcnJlclxuICAgICAgICB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oaS50eXBlLCBzKSwgIXRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyAmJiBpLnR5cGUgPT09IHRlLkNERV9CUklER0UgJiYgdGhpcy5hbnlDZGVDb25uLnNldChzKTtcbiAgICAgIH1cbiAgICApLmNhdGNoKChzKSA9PiBlZShcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgcykpLCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gYXN5bmMgKGkpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykge1xuICAgICAgICBlZShcIkZvcm0gaXMgYWxyZWFkeSBzdWJtaXR0aW5nLiBQbGVhc2Ugd2FpdCBmb3IgdGhlIHN1Ym1pc3Npb24gdG8gZmluaXNoIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSAhMDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHMgPSBhd2FpdCBYZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzcGFuTmFtZTogXCJzdWJtaXRfY2FyZFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICAgICAgICBwYXltZW50Um91dGVJZDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5wYXltZW50Um91dGVJZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZyhcInN1Ym1pdF9jYXJkXCIsIHsgLi4uaSB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwic3VibWl0Q2FyZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWMpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICBhd2FpdCBULmNvbW1vbkNDLnJ1bih7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IGMsXG4gICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRWUoYy5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBCKGMuZm9ybURpdiksXG4gICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKCksXG4gICAgICAgICAgICAgICAgcGF5bWVudFJvdXRlSWQ6IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkucGF5bWVudFJvdXRlSWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBzO1xuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0aHJvdyB0aGlzLmlzU3VibWl0dGluZyA9ICExLCBzO1xuICAgICAgfVxuICAgIH0sIHRoaXMuZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMgPSAoKSA9PiBYZShcbiAgICAgIHtcbiAgICAgICAgc3Bhbk5hbWU6IFwiZ2V0X2F2YWlsYWJsZV9wYXltZW50X21ldGhvZHNcIixcbiAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgIGZvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgcmVsZWFzZVZlcnNpb246IHRoaXMub2pzUmVsZWFzZVZlcnNpb24sXG4gICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybCxcbiAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kc1wiKSwgIXRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgICAgcGF5cGFsOiAkLnBheXBhbCxcbiAgICAgICAgICBhaXJ3YWxsZXhHb29nbGVQYXk6ICQuYWlyd2FsbGV4R29vZ2xlUGF5LFxuICAgICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiAkLmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogJC5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgICAgYXV0aG9yaXplTmV0QXBwbGVQYXk6ICQuYXV0aG9yaXplbmV0QXBwbGVQYXlcbiAgICAgICAgfSwgYyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtsLCB1XSkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzW2xdID8/IGwsXG4gICAgICAgICAgLi4udS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbClcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gZyhcImdldF9hdmFpbGFibGVfcGF5bWVudF9tZXRob2RzXCIsIHtcbiAgICAgICAgICBhdmFpbGFibGVfcGF5bWVudF9tZXRob2RzOiBjXG4gICAgICAgIH0pLCBjO1xuICAgICAgfVxuICAgICksIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IGFzeW5jIChpLCBzKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgZWUoXCJGb3JtIGlzIGFscmVhZHkgc3VibWl0dGluZy4gUGxlYXNlIHdhaXQgZm9yIHRoZSBzdWJtaXNzaW9uIHRvIGZpbmlzaCBiZWZvcmUgc3VibWl0dGluZyBhZ2Fpbi5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gITA7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjID0gYXdhaXQgWGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3Bhbk5hbWU6IFwiZ2VuZXJhbF9mb3JtX3N1Ym1pdFwiLFxuICAgICAgICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgICAgIGRldmljZVRva2VuOiB0aGlzLmRldmljZVRva2VuLFxuICAgICAgICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICAgICAgICAgIHZlcnNpb246IHRoaXMub2pzVmVyc2lvbixcbiAgICAgICAgICAgIHJlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgICAgYmFzZVVybDogdGhpcy5iYXNlVXJsLFxuICAgICAgICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGcoXCJnZW5lcmFsX2Zvcm1fc3VibWl0XCIsIHsgbWV0aG9kOiBpLCBzZXR0aW5nczogcyB9KSwgdGhpcy5jaGVja1ZhbGlkRm9ybUluc3RhbmNlKFwiZ2VuZXJhbFN1Ym1pdFwiKTtcbiAgICAgICAgICAgIGNvbnN0IGwgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWwpXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgICAgICAgY2FzZSAkLnBvY2t5dFBheXBhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gVC5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGwsXG4gICAgICAgICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlKFxuICAgICAgICAgICAgICAgICAgICBsLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIFwicGF5cGFsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwicG9ja3l0XCJcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBCKGwuZm9ybURpdiksXG4gICAgICAgICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHMgfSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjYXNlICQucGF5cGFsOlxuICAgICAgICAgICAgICAgIHJldHVybiBULnBheXBhbC5ydW4oe1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogRWUoXG4gICAgICAgICAgICAgICAgICAgIGwuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXlwYWxcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogcyB9LFxuICAgICAgICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNhc2UgJC5haXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIGVlKFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdS5zdGFydEZsb3cocyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSAkLmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXUpIHtcbiAgICAgICAgICAgICAgICAgIGVlKFxuICAgICAgICAgICAgICAgICAgICBcImFpcndhbGxleC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlICQuYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgICBlZShcbiAgICAgICAgICAgICAgICAgICAgXCJhdXRob3JpemUtbmV0LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlICQuYXV0aG9yaXplbmV0QXBwbGVQYXk6IHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0QXBwbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgICAgICAgZWUoXG4gICAgICAgICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1LnN0YXJ0RmxvdyhzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlICQubG9vcENyeXB0bzpcbiAgICAgICAgICAgICAgICByZXR1cm4gVC5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICAgICAgICBjb250ZXh0OiBsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBFZShcbiAgICAgICAgICAgICAgICAgICAgbC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBcImNyeXB0b1wiLFxuICAgICAgICAgICAgICAgICAgICBcImxvb3BcIlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEIobC5mb3JtRGl2KSxcbiAgICAgICAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgICAgICAgIGN1c3RvbVBhcmFtczogcyxcbiAgICAgICAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGR0KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIGM7XG4gICAgICB9IGNhdGNoIChjKSB7XG4gICAgICAgIHRocm93IHRoaXMuaXNTdWJtaXR0aW5nID0gITEsIGM7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIHZhciBpO1xuICAgICAgWChcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpLCB0aGlzLmNoZWNrVmFsaWRGb3JtSW5zdGFuY2UoXCJkZXN0cm95XCIpLCB0aGlzLmlzRGVzdHJveWVkID0gITA7XG4gICAgICBmb3IgKGNvbnN0IHMgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIHMgJiYgcy5ub2RlLnJlbW92ZSgpO1xuICAgICAgKGkgPSBNKCkpID09IG51bGwgfHwgaS5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgemkoKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCBkZWxldGUgd2luZG93Lm9qcywgZyhcImZvcm1fZGVzdHJveWVkXCIpO1xuICAgIH0sIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKGkpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MoaSk7XG4gICAgfSwgbmUuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4zLjE0XCIsIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcImxvY2FsX2J1aWxkXCIsIHRoaXMuYmFzZVVybCA9IHQuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIHRoaXMuY29uZmlnID0geyAuLi50LCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gTnQuZnJvbU9iamVjdCh0KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWAsIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luLCB0aGlzLmZvcm1UYXJnZXQgPSB0LmZvcm1UYXJnZXQgPz8gXCJib2R5XCIsIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IHFjKCksIHRoaXMuZGV2aWNlVG9rZW4gPSBVYygpLCBHaSgpO1xuICAgIGNvbnN0IHsgZnJhbWV3b3JrOiByLCB2ZXJzaW9uOiBuIH0gPSBWYygpO1xuICAgIEhyKHRoaXMuYmFzZVVybCkudGhlbigoaSkgPT4ge1xuICAgICAgaWYgKCFJdC5jdXJyZW50LmlzU3VjY2Vzcykge1xuICAgICAgICBjb25zdCBzID0ge1xuICAgICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICAgICAgZGV2aWNlVG9rZW46IHRoaXMuZGV2aWNlVG9rZW4sXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IGksXG4gICAgICAgICAgZnJhbWV3b3JrOiByLFxuICAgICAgICAgIGZyYW1ld29ya1ZlcnNpb246IG4sXG4gICAgICAgICAgb2pzVmVyc2lvbjogdGhpcy5vanNWZXJzaW9uLFxuICAgICAgICAgIG9qc1JlbGVhc2VWZXJzaW9uOiB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uLFxuICAgICAgICAgIHJlZmVycmVyOiB0aGlzLnJlZmVycmVyLFxuICAgICAgICAgIGJhc2VVcmw6IHRoaXMuYmFzZVVybFxuICAgICAgICB9O1xuICAgICAgICBJdC5zZXQocyk7XG4gICAgICB9XG4gICAgfSksIGcoXCJmb3JtX2luaXRcIiksIHQuYWxsb3dUcmFjaW5nID09PSAhMCAmJiBrYyh0aGlzLm9qc1ZlcnNpb24sIHRoaXMuYmFzZVVybCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IEdjKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCAobyA9IE0oKSkgPT0gbnVsbCB8fCBvLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBjaGVja1ZhbGlkRm9ybUluc3RhbmNlKHQgPSBcInVua25vd25cIikge1xuICAgIGNvbnN0IHIgPSBuZS5nZXRJbnN0YW5jZSgpLCBuID0ge1xuICAgICAgY2FsbGVyOiB0LFxuICAgICAgdGhpc0Zvcm1JZDogdGhpcy5mb3JtSWQsXG4gICAgICBjdXJyZW50Rm9ybUlkOiAociA9PSBudWxsID8gdm9pZCAwIDogci5mb3JtSWQpIHx8IFwibm8tY3VycmVudC1pbnN0YW5jZVwiLFxuICAgICAgaXNEZXN0cm95ZWQ6IHRoaXMuaXNEZXN0cm95ZWQsXG4gICAgICBjaGVja291dFRva2VuOiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLnN1YnN0cmluZygwLCAxMCkgKyBcIi4uLlwiXG4gICAgfSwgbyA9IGBcbiAgICAgIFtXYXJuaW5nXSBJbnZhbGlkIGZvcm0gaW5zdGFuY2UgZGV0ZWN0ZWQuXG4gICAgICBJdCBsb29rcyBsaWtlIHlvdSBhcmUgc3RpbGwgdXNpbmcgYW4gb2xkIGluc3RhbmNlIHRoYXQgaGFzIGJlZW4gZGVzdHJveWVkLlxuICAgICAgUGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIHRoZSBsYXRlc3QgaW5zdGFuY2Ugb2YgdGhlIGZvcm0gYW5kIGNsZWFudXAgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgICBEZWJ1ZyBJbmZvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAtIGNhbGxlcjogJHt0fVxuICAgICAgLSBjYWxsZXJfZm9ybV9pZDogJHtuLnRoaXNGb3JtSWR9XG4gICAgICAtIGN1cnJlbnRfYWN0aXZlX2Zvcm1faWQ6ICR7bi5jdXJyZW50Rm9ybUlkfVxuICAgICAgLSBpc19kZXN0cm95ZWQ6ICR7bi5pc0Rlc3Ryb3llZH1cbiAgICAgIC0gY2hlY2tvdXRfdG9rZW46ICR7bi5jaGVja291dFRva2VufVxuICAgIGA7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXN0cm95ZWQgPyAoZWUobyksIGcoXCJvdXRkYXRlZF9mb3JtX2luc3RhbmNlXCIsIHsgZXJyb3I6IG8gfSksICExKSA6ICFyIHx8IHIuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCA/IChlZShvKSwgZyhcIm91dGRhdGVkX2Zvcm1faW5zdGFuY2VcIiwgeyBlcnJvcjogbyB9KSwgITEpIDogITA7XG4gIH1cbn07XG5uZS5vanNGbG93cyA9IFQsIG5lLmFzc2lnbkFzU2luZ2xldG9uID0gKHQpID0+IHtcbiAgaWYgKG5lLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSB0O1xufSwgbmUuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIG5lLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAodCwgciwgbiwgbykgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdC5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKHQuYmFzZVVybCA/PyBncikub3JpZ2luLFxuICBmb3JtRGl2OiBvLFxuICBlbGVtZW50c1Nlc3Npb25JZDogci5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogbixcbiAgY3VzdG9tSW5pdFBhcmFtczogdC5jdXN0b21Jbml0UGFyYW1zID8/IHt9LFxuICBwcmV2ZW50TmF2aWdhdGlvbkR1cmluZ1N1Ym1pc3Npb246IHQucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uXG59KTtcbmxldCBfciA9IG5lO1xuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKF9yLmdldEluc3RhbmNlKCkpIHtcbiAgICBfci5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IHVzZVBheW1lbnRSZXF1ZXN0cyA9IChvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkKSA9PiB7XG4gIGNvbnN0IFtwYXltZW50UmVxdWVzdHMsIHNldFBheW1lbnRSZXF1ZXN0c10gPSB1c2VTdGF0ZSh7XG4gICAgYXBwbGVfcGF5OiBQUl9MT0FESU5HLFxuICAgIGdvb2dsZV9wYXk6IFBSX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHBheW1lbnRSZXF1ZXN0czIpID0+IHtcbiAgICAgIHNldFBheW1lbnRSZXF1ZXN0cyhwYXltZW50UmVxdWVzdHMyKTtcbiAgICAgIG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQ/LihwYXltZW50UmVxdWVzdHMyKTtcbiAgICB9LFxuICAgIFtvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkXVxuICApO1xuICByZXR1cm4geyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH07XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgeyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH0gPSB1c2VQYXltZW50UmVxdWVzdHMocHJvcHMub25QYXltZW50UmVxdWVzdExvYWQpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9vcENvbmZpZywgc2V0TG9vcENvbmZpZ10gPSB1c2VTdGF0ZShMT09QX0xPQURJTkcpO1xuICBjb25zdCBbYWlyd2FsbGV4LCBzZXRBaXJ3YWxsZXhdID0gdXNlU3RhdGUoe1xuICAgIGdvb2dsZVBheTogQVdYX0xPQURJTkcsXG4gICAgYXBwbGVQYXk6IEFXWF9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gX3IuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgX3Ioe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICBhbGxvd1RyYWNpbmc6IHByb3BzLmFsbG93VHJhY2luZyA/PyBmYWxzZSxcbiAgICAgIHByZXZlbnROYXZpZ2F0aW9uRHVyaW5nU3VibWlzc2lvbjogcHJvcHMucHJldmVudE5hdmlnYXRpb25EdXJpbmdTdWJtaXNzaW9uLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgd2lkZ2V0OiByZXN1bHQubG9hZGVkVmFsdWUud2lkZ2V0UHJvcHMsXG4gICAgICAgICAgY29uZmlnOiByZXN1bHQubG9hZGVkVmFsdWUuaW5pdExvb3BDb25uZWN0UHJvcHNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgIXJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICB3aWRnZXQ6IG51bGwsXG4gICAgICAgICAgY29uZmlnOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgYXBwbGVQYXk6IHByZXYuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBnb29nbGVQYXk6IHByZXYuZ29vZ2xlUGF5LFxuICAgICAgICAgIGFwcGxlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmb3JtLmRlc3Ryb3koKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIGlmICghb3BGb3JtKSB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KTtcbiAgfVxuICBjb25zdCBjaGlsZHJlblByb3BzID0ge1xuICAgIHN1Ym1pdDogb3BGb3JtLnN1Ym1pdENhcmQsXG4gICAgc3VibWl0V2l0aDogb3BGb3JtLmdlbmVyYWxTdWJtaXQsXG4gICAgYXBwbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5hcHBsZV9wYXksXG4gICAgZ29vZ2xlUGF5OiBwYXltZW50UmVxdWVzdHMuZ29vZ2xlX3BheSxcbiAgICBsb2FkZWQsXG4gICAgLy8gRGlzYWJsZSBkeW5hbWljIHByZXZpZXdzIGZlYXR1cmUgZm9yIG5vd1xuICAgIHByZXZpZXc6IHtcbiAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0sXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmwsXG4gICAgYWlyd2FsbGV4LFxuICAgIGxvb3A6IGxvb3BDb25maWdcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IGVsZW1lbnRzQ29udGV4dFZhbHVlID8gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50c0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGVsZW1lbnRzQ29udGV4dFZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGlkOiBGT1JNX1RBUkdFVCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbihjaGlsZHJlblByb3BzKSB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KSB9KTtcbn07XG5jb25zdCBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSA9IChvcEZvcm0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb3JtSWQ6IG9wRm9ybS5mb3JtSWQsXG4gICAgZm9ybUhlaWdodDogb3BGb3JtLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCxcbiAgICByZWZlcnJlcjogb3BGb3JtLnJlZmVycmVyLFxuICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IG9wRm9ybS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgIHJlZ2lzdGVySWZyYW1lOiBvcEZvcm0ucmVnaXN0ZXJJZnJhbWUsXG4gICAgYmFzZVVybDogb3BGb3JtLmJhc2VVcmxcbiAgfTtcbn07XG5cbmV4cG9ydCB7IEJ0IGFzIEIsIENlIGFzIEMsIER0IGFzIEQsIEVsZW1lbnRzRm9ybSBhcyBFLCBGdCBhcyBGLCBHLCBJciBhcyBJLCBKbyBhcyBKLCBNdCBhcyBNLCBQZSBhcyBQLCBZbyBhcyBZLCBQciBhcyBhLCBQdCBhcyBiLCBjYSBhcyBjLCBDYXJkQ3ZjRWxlbWVudCBhcyBkLCBDYXJkRWxlbWVudCBhcyBlLCBDYXJkRXhwaXJ5RWxlbWVudCBhcyBmLCBDYXJkTnVtYmVyRWxlbWVudCBhcyBnLCBGaWVsZE5hbWUgYXMgaCwgUGF5SW5GYWlsZWQgYXMgaSwgUGF5SW5TdGF0ZSBhcyBqLCBrciBhcyBrLCBsZSBhcyBsLCBudCBhcyBuLCBwYSBhcyBwLCBxZSBhcyBxLCBzYSBhcyBzLCB0YSBhcyB0LCB1c2VPcGVuUGF5RWxlbWVudHMgYXMgdSwgemUgYXMgeiB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBS0EsU0FBVztBQUN6QixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsUUFBVztBQUNsQixTQUFTLE9BQUFDLElBQUssWUFBQUMsVUFBZ0I7QUFDOUIsU0FBUyxpQkFBQUMsSUFBZSxjQUFBQyxJQUFZLFlBQUFDLElBQVUsVUFBQUMsSUFBUSxXQUFBQyxJQUFTLGFBQUFDLElBQVcsZUFBQUMsVUFBbUI7QUFFN0YsTUFBTUMsS0FBNEJiLEVBQUksT0FBTztBQUFBLEVBQzNDLE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLEtBQUtBLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUMzQixLQUFLQSxFQUFJLE9BQU87QUFBQSxFQUNoQixLQUFLQSxFQUFJLE9BQU87QUFDbEIsQ0FBQztBQUNEQSxFQUFJLE1BQU1hLEVB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IiwgInY0IiwgImNvbm5lY3RUb0NoaWxkIiwgImNoYWxrIiwgImpzeCIsICJGcmFnbWVudCIsICJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAidXNlRWZmZWN0IiwgInVzZUNhbGxiYWNrIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJmbiIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlN1Ym1pdE1ldGhvZHMiLCAiU3VibWl0TWV0aG9kczIiLCAiUmVxdWlyZWRTdHJpbmciLCAiT3B0aW9uYWxTdHJpbmciLCAibnVsbE9yVW5kZWZPciQxIiwgInpUeXBlIiwgIkZpZWxkTmFtZSIsICJGaWVsZE5hbWUyIiwgIkZpZWxkTmFtZUVudW0iLCAiUHJpdmF0ZUZpZWxkTmFtZSIsICJQcml2YXRlRmllbGROYW1lMiIsICJQcml2YXRlRmllbGROYW1lRW51bSIsICJBbGxGaWVsZE5hbWVzIiwgIkVsZW1lbnRUeXBlRW51bSIsICJFbGVtZW50VHlwZUVudW0yIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCQxIiwgIlBheW1lbnRNZXRob2RNaW5pbWFsIiwgIkV2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFBheWxvYWQiLCAiSW5wdXRFdmVudFR5cGUiLCAiSW5wdXRFdmVudFBheWxvYWQiLCAiRXJyb3JFdmVudFR5cGUiLCAiRXJyb3JFdmVudFBheWxvYWQiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCIsICJMYXlvdXRFdmVudFBheWxvYWQiLCAiTG9hZGVkRXZlbnRQYXlsb2FkIiwgIlBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCIsICJTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJSZXF1aXJlZEZvcm1GaWVsZHMiLCAiUFJGb3JtRmllbGRzIiwgIlN1Ym1pdEV2ZW50VHlwZSIsICJTdWJtaXRFdmVudFBheWxvYWQiLCAiVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiRmllbGRWYWxpZGF0aW9uRXJyb3IiLCAiVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmciLCAic3R5bGVzIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJiIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgIm51bGxPclVuZGVmT3IiLCAiQ291cG9uTWluaW1hbCIsICJMaW5lSXRlbSIsICJCcmFuZFNldHRpbmdzIiwgIkJyYW5kIiwgIkNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJTdWJzY3JpcHRpb25JdGVtTWluaW1hbCIsICJTdWJzY3JpcHRpb25NaW5pbWFsIiwgIkludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCIsICJJbnZvaWNlTGluZUl0ZW1NaW5pbWFsIiwgIkRpc2NvdW50TWluaW1hbCIsICJJbnZvaWNlTWluaW1hbCIsICJDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwiLCAiUHJldmlld0NoZWNrb3V0UmVzcG9uc2UiLCAiX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiIsICJQYXltZW50Rm9ybVByZWZpbGwiLCAiQ29tcGxldGVkRm9ybVByZWZpbGwiLCAiRXhwaXJlZEZvcm1QcmVmaWxsIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByaWNlUXR5IiwgIkNhcnRJbmZvIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiZXh0ZW5kU3RhdGljcyIsICJfX2V4dGVuZHMiLCAiX19hd2FpdGVyIiwgInRoaXNBcmciLCAiX2FyZ3VtZW50cyIsICJQIiwgImdlbmVyYXRvciIsICJhZG9wdCIsICJ2YWx1ZSIsICJyZXNvbHZlIiwgInJlamVjdCIsICJmdWxmaWxsZWQiLCAic3RlcCIsICJlIiwgInJlamVjdGVkIiwgInJlc3VsdCIsICJfX2dlbmVyYXRvciIsICJib2R5IiwgIl8iLCAidCIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgIm4iLCAidiIsICJvcCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAiYSIsICJyZXN1bWUiLCAic2V0dGxlIiwgImZ1bGZpbGwiLCAiX19hc3luY1ZhbHVlcyIsICJpc0Z1bmN0aW9uIiwgInZhbHVlIiwgImNyZWF0ZUVycm9yQ2xhc3MiLCAiY3JlYXRlSW1wbCIsICJfc3VwZXIiLCAiaW5zdGFuY2UiLCAiY3RvckZ1bmMiLCAiVW5zdWJzY3JpcHRpb25FcnJvciIsICJlcnJvcnMiLCAiZXJyIiwgImFyclJlbW92ZSIsICJhcnIiLCAiaXRlbSIsICJpbmRleCIsICJTdWJzY3JpcHRpb24iLCAiaW5pdGlhbFRlYXJkb3duIiwgImVfMSIsICJfYSIsICJlXzIiLCAiX2IiLCAiX3BhcmVudGFnZSIsICJfcGFyZW50YWdlXzEiLCAiX192YWx1ZXMiLCAiX3BhcmVudGFnZV8xXzEiLCAicGFyZW50XzEiLCAiZV8xXzEiLCAiaW5pdGlhbEZpbmFsaXplciIsICJlIiwgIl9maW5hbGl6ZXJzIiwgIl9maW5hbGl6ZXJzXzEiLCAiX2ZpbmFsaXplcnNfMV8xIiwgImZpbmFsaXplciIsICJleGVjRmluYWxpemVyIiwgIl9fc3ByZWFkQXJyYXkiLCAiX19yZWFkIiwgImVfMl8xIiwgInRlYXJkb3duIiwgInBhcmVudCIsICJlbXB0eSIsICJFTVBUWV9TVUJTQ1JJUFRJT04iLCAiaXNTdWJzY3JpcHRpb24iLCAiY29uZmlnIiwgInRpbWVvdXRQcm92aWRlciIsICJoYW5kbGVyIiwgInRpbWVvdXQiLCAiYXJncyIsICJfaSIsICJoYW5kbGUiLCAiZGVsZWdhdGUiLCAicmVwb3J0VW5oYW5kbGVkRXJyb3IiLCAibm9vcCIsICJlcnJvckNvbnRleHQiLCAiY2IiLCAiU3Vic2NyaWJlciIsICJfX2V4dGVuZHMiLCAiZGVzdGluYXRpb24iLCAiX3RoaXMiLCAiRU1QVFlfT0JTRVJWRVIiLCAibmV4dCIsICJlcnJvciIsICJjb21wbGV0ZSIsICJTYWZlU3Vic2NyaWJlciIsICJfYmluZCIsICJiaW5kIiwgImZuIiwgInRoaXNBcmciLCAiQ29uc3VtZXJPYnNlcnZlciIsICJwYXJ0aWFsT2JzZXJ2ZXIiLCAiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCAib2JzZXJ2ZXJPck5leHQiLCAiY29udGV4dF8xIiwgImRlZmF1bHRFcnJvckhhbmRsZXIiLCAib2JzZXJ2YWJsZSIsICJpZGVudGl0eSIsICJ4IiwgInBpcGVGcm9tQXJyYXkiLCAiZm5zIiwgImlucHV0IiwgInByZXYiLCAiT2JzZXJ2YWJsZSIsICJzdWJzY3JpYmUiLCAib3BlcmF0b3IiLCAic3Vic2NyaWJlciIsICJpc1N1YnNjcmliZXIiLCAic291cmNlIiwgInNpbmsiLCAicHJvbWlzZUN0b3IiLCAiZ2V0UHJvbWlzZUN0b3IiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAib3BlcmF0aW9ucyIsICJpc09ic2VydmVyIiwgImhhc0xpZnQiLCAib3BlcmF0ZSIsICJpbml0IiwgImxpZnRlZFNvdXJjZSIsICJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCAib25OZXh0IiwgIm9uQ29tcGxldGUiLCAib25FcnJvciIsICJvbkZpbmFsaXplIiwgIk9wZXJhdG9yU3Vic2NyaWJlciIsICJzaG91bGRVbnN1YnNjcmliZSIsICJjbG9zZWRfMSIsICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsICJTdWJqZWN0IiwgInN1YmplY3QiLCAiQW5vbnltb3VzU3ViamVjdCIsICJfYyIsICJvYnNlcnZlciIsICJvYnNlcnZlcnMiLCAiaGFzRXJyb3IiLCAiaXNTdG9wcGVkIiwgInRocm93bkVycm9yIiwgImRhdGVUaW1lc3RhbXBQcm92aWRlciIsICJBY3Rpb24iLCAic2NoZWR1bGVyIiwgIndvcmsiLCAic3RhdGUiLCAiZGVsYXkiLCAiaW50ZXJ2YWxQcm92aWRlciIsICJBc3luY0FjdGlvbiIsICJpZCIsICJfaWQiLCAiX3NjaGVkdWxlciIsICJfZGVsYXkiLCAiZXJyb3JlZCIsICJlcnJvclZhbHVlIiwgImFjdGlvbnMiLCAiU2NoZWR1bGVyIiwgInNjaGVkdWxlckFjdGlvbkN0b3IiLCAibm93IiwgIkFzeW5jU2NoZWR1bGVyIiwgIlNjaGVkdWxlckFjdGlvbiIsICJhY3Rpb24iLCAiYXN5bmNTY2hlZHVsZXIiLCAiaXNBcnJheUxpa2UiLCAiaXNQcm9taXNlIiwgImlzSW50ZXJvcE9ic2VydmFibGUiLCAiaXNBc3luY0l0ZXJhYmxlIiwgIm9iaiIsICJjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvciIsICJnZXRTeW1ib2xJdGVyYXRvciIsICJpdGVyYXRvciIsICJpc0l0ZXJhYmxlIiwgInJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IiLCAicmVhZGFibGVTdHJlYW0iLCAiX19hc3luY0dlbmVyYXRvciIsICJyZWFkZXIiLCAiZG9uZSIsICJfX2dlbmVyYXRvciIsICJfX2F3YWl0IiwgImlzUmVhZGFibGVTdHJlYW1MaWtlIiwgImlubmVyRnJvbSIsICJmcm9tSW50ZXJvcE9ic2VydmFibGUiLCAiZnJvbUFycmF5TGlrZSIsICJmcm9tUHJvbWlzZSIsICJmcm9tQXN5bmNJdGVyYWJsZSIsICJmcm9tSXRlcmFibGUiLCAiZnJvbVJlYWRhYmxlU3RyZWFtTGlrZSIsICJvYnMiLCAiYXJyYXkiLCAiaSIsICJwcm9taXNlIiwgIml0ZXJhYmxlIiwgIml0ZXJhYmxlXzEiLCAiaXRlcmFibGVfMV8xIiwgImFzeW5jSXRlcmFibGUiLCAicHJvY2VzcyIsICJhc3luY0l0ZXJhYmxlXzEiLCAiYXN5bmNJdGVyYWJsZV8xXzEiLCAiX19hd2FpdGVyIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZXhlY3V0ZVNjaGVkdWxlIiwgInBhcmVudFN1YnNjcmlwdGlvbiIsICJyZXBlYXQiLCAic2NoZWR1bGVTdWJzY3JpcHRpb24iLCAidGhyb3dFcnJvciIsICJlcnJvck9yRXJyb3JGYWN0b3J5IiwgImVycm9yRmFjdG9yeSIsICJFbXB0eUVycm9yIiwgImxhc3RWYWx1ZUZyb20iLCAiX2hhc1ZhbHVlIiwgIl92YWx1ZSIsICJpc1ZhbGlkRGF0ZSIsICJUaW1lb3V0RXJyb3IiLCAiaW5mbyIsICJzY2hlZHVsZXJBcmciLCAiZmlyc3QiLCAiZWFjaCIsICJfd2l0aCIsICJ0aW1lb3V0RXJyb3JGYWN0b3J5IiwgIl9kIiwgIm1ldGEiLCAib3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24iLCAidGltZXJTdWJzY3JpcHRpb24iLCAibGFzdFZhbHVlIiwgInNlZW4iLCAic3RhcnRUaW1lciIsICJMb2FkZWRPbmNlUHVibGlzaGVyIiwgImVyck1zZyIsICJ2YWx1ZUlmTm90TG9hZGVkIiwgInN1YnNjcmlwdGlvbiIsICJ0aW1lb3V0Q29uZmlnIiwgImFzc2VydE5ldmVyIiwgInRpbWVvdXRQYXJhbXMiLCAieiQxIiwgImNvbm50b0Jhc2VVcmxzIiwgImdldENvbm50b1VybCIsICJlbnYiLCAiZ2V0V2luZG93U2FmZSIsICJtZXRyaWNzUHVibGlzaGVyIiwgIk1FVFJJQ1NfUVVFVUVfS0VZIiwgIk1BWF9SRVRSWV9BVFRFTVBUUyIsICJCQVRDSF9TSVpFIiwgIkJBVENIX0lOVEVSVkFMX01TIiwgImxvZ19fIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgIk1ldHJpY3NRdWV1ZSIsICJldmVudE5hbWUiLCAicHJvcGVydGllcyIsICJjb250ZXh0UHJvcGVydGllcyIsICJldmVudCIsICJ2NCIsICJzdG9yZWRRdWV1ZSIsICJzYWZlV2luZG93IiwgImNvbnRleHQiLCAiYmF0Y2giLCAiYmF0Y2hQYXlsb2FkIiwgImNvbm50b1VybCIsICJtZXRyaWNzUm91dGVyIiwgImV2ZW50c1RvS2VlcCIsICJtZXRyaWNzUXVldWUiLCAiUGF5bWVudFByb2Nlc3NvciIsICJBV1hfTE9BRElORyIsICJBZHllbkVudmlyb25tZW50IiwgIlBheUluRmFpbGVkIiwgIlBheUluRmFpbGVkMiIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIkxPT1BfTE9BRElORyIsICJSZXF1aXJlZFN0cmluZyIsICJGaWVsZE5hbWUiLCAiT3B0aW9uYWxTdHJpbmciLCAiUFJfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIkVsZW1lbnRzQ29udGV4dCIsICJjcmVhdGVDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJ1c2VDb250ZXh0IiwgIkVsZW1lbnRGcmFtZSIsICJwcm9wcyIsICJlbGVtZW50VHlwZSIsICJzdHlsZXMiLCAiZm9ybUlkIiwgInJlZmVycmVyIiwgImZvcm1IZWlnaHQiLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJyZWdpc3RlcklmcmFtZSIsICJiYXNlVXJsIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJ1c2VTdGF0ZSIsICJpZnJhbWVSZWYiLCAidXNlUmVmIiwgImVsZW1lbnRTdHlsZSIsICJ1c2VNZW1vIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgInVzZUVmZmVjdCIsICJqc3giLCAidXJsIiwgIkNhcmRFbGVtZW50IiwgIkVsZW1lbnRUeXBlRW51bSIsICJDYXJkQ3ZjRWxlbWVudCIsICJDYXJkRXhwaXJ5RWxlbWVudCIsICJDYXJkTnVtYmVyRWxlbWVudCIsICJnciIsICJWbiIsICJHbiIsICJ6biIsICJxbiIsICJCbiIsICJTdCIsICJZbiIsICJIbiIsICJyIiwgIkpuIiwgIlkiLCAiV24iLCAibiIsICJvIiwgIiQiLCAiUCIsICJSIiwgIm0iLCAid3IiLCAidnIiLCAiYnIiLCAiRXIiLCAidGUiLCAiS24iLCAic3QiLCAiWm4iLCAiWiIsICJRbiIsICJYbiIsICJlbyIsICJ0byIsICJybyIsICJubyIsICJvbyIsICJhbyIsICJpbyIsICJzbyIsICJjbyIsICJsbyIsICJZZSIsICJ1byIsICJwbyIsICJtbyIsICJmbyIsICJfbyIsICJ5byIsICJobyIsICIkZSIsICJnbyIsICJ3byIsICJ2byIsICJEIiwgImJvIiwgIkVvIiwgIkNyIiwgIkNvIiwgIlNvIiwgIlNyIiwgIlBvIiwgImtvIiwgIkFvIiwgImN0IiwgInp0IiwgImx0IiwgIklvIiwgIlRvIiwgIlJvIiwgIk5vIiwgIkZvIiwgInMiLCAiYyIsICJNbyIsICJCIiwgIkRvIiwgIk9vIiwgImZlIiwgInF0IiwgIkxvIiwgImwiLCAidSIsICJkIiwgIlVvIiwgImpvIiwgIlZlIiwgIkdlIiwgIkZ0IiwgInplIiwgIk10IiwgInhvIiwgIiRvIiwgIlZvIiwgIk1lIiwgIkciLCAiR28iLCAiem8iLCAicW8iLCAiQm8iLCAibnQiLCAiXyIsICJwIiwgIllvIiwgIkhvIiwgIkpvIiwgIldvIiwgIktvIiwgIlpvIiwgIlFvIiwgIlhvIiwgInl0IiwgImVhIiwgIkR0IiwgIlB0IiwgIlByIiwgImtyIiwgInRhIiwgIlVlIiwgIk90IiwgIkx0IiwgInJhIiwgIlV0IiwgIm5hIiwgIm9hIiwgIkFyIiwgImFhIiwgImlhIiwgInNhIiwgImNhIiwgIklyIiwgImxhIiwgImh0IiwgIlRyIiwgInVhIiwgImRhIiwgInBhIiwgIm1hIiwgImZhIiwgIkJ0IiwgInFlIiwgImxlIiwgIkNlIiwgImd0IiwgIlBlIiwgInlhIiwgImhhIiwgImdhIiwgIndhIiwgInZhIiwgImJhIiwgIkVhIiwgIlJyIiwgIk5yIiwgIkNhIiwgIlNhIiwgIlRlIiwgIlBhIiwgImthIiwgIkZyIiwgIkFhIiwgIklhIiwgIlRhIiwgIll0IiwgIk1yIiwgIkh0IiwgIkRyIiwgIlJhIiwgIk5hIiwgIk9yIiwgIkZhIiwgIk1hIiwgIkRhIiwgIkxyIiwgIk9hIiwgIlVyIiwgIkxhIiwgIlVhIiwgImphIiwgInhhIiwgIiRhIiwgIlZhIiwgImpyIiwgIkdhIiwgInphIiwgIm9lIiwgInJuIiwgImhlIiwgIkEiLCAiY2hhbGsiLCAia3QiLCAidWUiLCAicWEiLCAieHIiLCAia2UiLCAib3QiLCAiYXQiLCAiU2UiLCAiQmEiLCAiZiIsICJ5IiwgImgiLCAidiIsICJiIiwgIllhIiwgIlUiLCAidXQiLCAid3QiLCAiaXQiLCAiSGUiLCAiSnQiLCAiJHIiLCAiVnIiLCAiR3IiLCAienIiLCAicXIiLCAiV3QiLCAiZXQiLCAianQiLCAiS2EiLCAiQXQiLCAiSGEiLCAidnQiLCAiSmEiLCAiWmUiLCAiV2EiLCAieHQiLCAiWmEiLCAiUWEiLCAiaWUiLCAiZWkiLCAiS3QiLCAiWGEiLCAidGkiLCAicmkiLCAibmkiLCAib2kiLCAiYWkiLCAiQnIiLCAiWnQiLCAiaWkiLCAic2kiLCAiUXQiLCAiY2kiLCAiWHQiLCAibGkiLCAidWkiLCAiZGkiLCAicGkiLCAibWkiLCAiZmkiLCAieWkiLCAiaGkiLCAiZ2kiLCAid2kiLCAidmkiLCAiYmkiLCAiRWkiLCAiQ2kiLCAiU2kiLCAiWXIiLCAiUGkiLCAia2kiLCAiQWkiLCAiSWkiLCAiVGkiLCAiUmkiLCAiTmkiLCAiRmkiLCAiTWkiLCAiRGkiLCAiT2kiLCAiQyIsICJFIiwgImplIiwgImR0IiwgImVyIiwgIkxpIiwgIlVpIiwgImJ0IiwgIkhyIiwgIkpyIiwgIk0iLCAiSXQiLCAidHIiLCAiamkiLCAieGkiLCAiJGkiLCAiUWUiLCAiVmkiLCAiV3IiLCAiS3IiLCAiWnIiLCAidCIsICJHaSIsICJ6aSIsICJ5ciIsICJxaSIsICJYZSIsICJRciIsICJqIiwgIllpIiwgIkJpIiwgIkhpIiwgIkYiLCAiUmUiLCAiWHIiLCAiSmkiLCAieiIsICJXaSIsICJLaSIsICJaaSIsICJnZSIsICJlbiIsICJyciIsICJRaSIsICIkdCIsICJ0biIsICJYaSIsICJjb25uZWN0VG9DaGlsZCIsICJWdCIsICJlcyIsICJLIiwgIm5uIiwgIm9uIiwgImFuIiwgInRzIiwgInJzIiwgInNuIiwgIlpjIiwgImNuIiwgIkplIiwgIkgiLCAibG4iLCAiV2UiLCAibnMiLCAidW4iLCAib3MiLCAiYXMiLCAicHQiLCAiZG4iLCAiaXMiLCAicG4iLCAic3MiLCAiR3QiLCAiY3MiLCAibHMiLCAibW4iLCAidXMiLCAiX24iLCAieW4iLCAid2UiLCAiaG4iLCAiZ24iLCAiYWUiLCAid24iLCAidHQiLCAiZHMiLCAicHMiLCAibXMiLCAiRGUiLCAidm4iLCAiZnMiLCAiVCIsICJfcyIsICJtdCIsICJibiIsICJFdCIsICJFbiIsICJmdCIsICJ5cyIsICJDbiIsICJXIiwgImJlIiwgImhzIiwgImdzIiwgIkkiLCAiTyIsICJTIiwgInEiLCAiX3QiLCAidmUiLCAic2UiLCAiTmUiLCAiZGUiLCAiRmUiLCAiU24iLCAiUG4iLCAid3MiLCAidnMiLCAicnQiLCAia24iLCAiYnMiLCAiRXMiLCAibWUiLCAiT2UiLCAiQ3MiLCAiU3MiLCAiUHMiLCAia3MiLCAiQWUiLCAiQmUiLCAiQXMiLCAiQW4iLCAiSXMiLCAiVHMiLCAibnIiLCAiUnMiLCAiTnMiLCAiRnMiLCAiSW4iLCAiVG4iLCAiTXMiLCAiUm4iLCAiRHMiLCAiT3MiLCAiTm4iLCAiVHQiLCAiTHMiLCAiVXMiLCAib3IiLCAianMiLCAiRm4iLCAieHMiLCAiJHMiLCAiX2UiLCAiUnQiLCAiVnMiLCAiTW4iLCAiR3MiLCAiQnMiLCAienMiLCAicXMiLCAiT24iLCAiRG4iLCAiayIsICJhciIsICJZcyIsICJIcyIsICJKcyIsICJXcyIsICJWIiwgIkxuIiwgIktzIiwgIlpzIiwgImlyIiwgIlFzIiwgIlhzIiwgIlEiLCAic3IiLCAiZWMiLCAidGMiLCAiY3IiLCAiTCIsICJyYyIsICJuYyIsICJvYyIsICJhYyIsICJjYyIsICJpYyIsICJzYyIsICJsYyIsICJ1YyIsICJkYyIsICJFZSIsICJwYyIsICJmYyIsICJtYyIsICJ5YyIsICJwZSIsICJoYyIsICJVbiIsICJnYyIsICJ3YyIsICJ2YyIsICJiYyIsICJjZSIsICJFYyIsICJDYyIsICJTYyIsICJKIiwgImxyIiwgInJlIiwgIk50IiwgIkN0IiwgIlBjIiwgImtjIiwgIkFjIiwgInVyIiwgIkljIiwgImpuIiwgInhlIiwgIlRjIiwgInhuIiwgImRyIiwgInllIiwgIkxlIiwgIlJjIiwgIk5jIiwgIkZjIiwgIk9jIiwgIk1jIiwgIkRjIiwgIkxjIiwgIiRuIiwgIlVjIiwgImpjIiwgInhjIiwgIiRjIiwgIlZjIiwgIkdjIiwgInByIiwgInpjIiwgInFjIiwgIkJjIiwgIm1yIiwgImZyIiwgIlgiLCAiZWUiLCAibmUiLCAiX3IiLCAidXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzIiwgImZvcm1DYWxsYmFja3MiLCAidXNlUGF5bWVudFJlcXVlc3RzIiwgIm9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzIiwgInNldFBheW1lbnRSZXF1ZXN0cyIsICJvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCIsICJ1c2VDYWxsYmFjayIsICJwYXltZW50UmVxdWVzdHMyIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAic3RyaXBlTGlua0N0cmwiLCAic2V0U3RyaXBlTGlua0N0cmwiLCAibG9vcENvbmZpZyIsICJzZXRMb29wQ29uZmlnIiwgImFpcndhbGxleCIsICJzZXRBaXJ3YWxsZXgiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJmb3JtIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJGcmFnbWVudCIsICJjaGlsZHJlblByb3BzIl0KfQo=